diff --git a/.gitignore b/.gitignore index 8b137891..abfbf270 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ - +kortex_driver/build \ No newline at end of file diff --git a/build.sh b/build.sh deleted file mode 100755 index 294670dd..00000000 --- a/build.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/bash - -CONFIRM=$(wget --quiet --save-cookies ./cookies.txt --keep-session-cookies --no-check-certificate "https://drive.google.com/a/kinova.ca/uc?id=1ASbEsulf5cByru8Hy1oBZJyNDBa9H22C&export=download" -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p') -wget --load-cookies ./cookies.txt "https://drive.google.com/a/kinova.ca/uc?id=1ASbEsulf5cByru8Hy1oBZJyNDBa9H22C&export=download&confirm=$CONFIRM" -O kortex_api-1.1.6.zip -RESULT=$? -if [ "${RESULT}" -ne 0 ]; then - echo "ERROR while fetching the kortex api. code = ${RESULT}" - exit $? -fi - -rm ./cookies.txt -unzip -d kortex_api kortex_api-1.1.6.zip -RESULT=$? -if [ "${RESULT}" -ne 0 ]; then - echo "ERROR while extracting the kortex api. code = ${RESULT}" - exit $? -fi - -cp -R kortex_api/cpp/linux_gcc_x86-64/include/ src/ros_kortex/kortex_api/ -RESULT=$? -if [ "${RESULT}" -ne 0 ]; then - echo "ERROR while copying the kortex api header files. code = ${RESULT}" - exit $? -fi - -cp -R kortex_api/cpp/linux_gcc_x86-64/lib/ src/ros_kortex/kortex_api/ -RESULT=$? -if [ "${RESULT}" -ne 0 ]; then - echo "ERROR while copying the kortex api library. code = ${RESULT}" - exit $? -fi - -chmod +x src/ros_kortex/kortex_api/lib/release/libKortexApi.a -RESULT=$? -if [ "${RESULT}" -ne 0 ]; then - echo "ERROR while executing chmod +x on the kortex api release library. code = ${RESULT}" - exit $? -fi - -chmod +x src/ros_kortex/kortex_api/lib/debug/libKortexApi.a -RESULT=$? -if [ "${RESULT}" -ne 0 ]; then - echo "ERROR while executing chmod +x on the kortex api debug library. code = ${RESULT}" - exit $? -fi - -rm -rf kortex_api/ kortex_api-1.1.6.zip - -. /opt/ros/kinetic/setup.bash -RESULT=$? -if [ "${RESULT}" -ne 0 ]; then - echo "ERROR while sourcing /opt/ros/kinetic/setup.bash. code = ${RESULT}" - exit $? -fi - -catkin_make -RESULT=$? -if [ "${RESULT}" -ne 0 ]; then - echo "ERROR while executing catkin_make. code = ${RESULT}" - exit $? -fi - -exit ${RESULT} diff --git a/generate_all.sh b/generate_all.sh deleted file mode 100755 index 014db008..00000000 --- a/generate_all.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -cd kortex_actuator_driver -protoc --plugin=protoc-gen-custom=kortex_actuator_driver.sh -I./protos/ --custom_out=./build ./protos/*.proto - -cd ../kortex_device_manager -protoc --plugin=protoc-gen-custom=kortex_device_manager.sh -I./protos/ --custom_out=./build ./protos/*.proto - -cd ../kortex_driver -protoc --plugin=protoc-gen-custom=kortex_driver.sh -I./protos/ --custom_out=./build ./protos/*.proto - -cd ../kortex_vision_config_driver -protoc --plugin=protoc-gen-custom=kortex_vision_config_driver.sh -I./protos/ --custom_out=./build ./protos/*.proto - -exit 0 \ No newline at end of file diff --git a/kortex_actuator_driver/CMakeLists.txt b/kortex_actuator_driver/CMakeLists.txt deleted file mode 100644 index 0bc7c872..00000000 --- a/kortex_actuator_driver/CMakeLists.txt +++ /dev/null @@ -1,40 +0,0 @@ - -cmake_minimum_required(VERSION 2.8.3) -project(kortex_actuator_driver) - -add_compile_options(-std=c++11) -add_definitions(-D_OS_UNIX) - -## find catkin and any catkin packages -find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation) - -file(GLOB_RECURSE cpp_list RELATIVE ${PROJECT_SOURCE_DIR} "src/*.cpp") - -## declare ROS messages and services -add_message_files(DIRECTORY msg) -add_message_files(DIRECTORY msg/non_generated) -add_service_files(DIRECTORY srv) -add_service_files(DIRECTORY srv/non_generated) - -## generate added messages and services -generate_messages(DEPENDENCIES std_msgs) - -## declare a catkin package -catkin_package() - -include_directories(include ${catkin_INCLUDE_DIRS}) -include_directories(include ${PROJECT_SOURCE_DIR}/src) -include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include) -include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/client) -include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/client_stubs) -include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/messages) -include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/common) -include_directories(include ${PROJECT_SOURCE_DIR}/src/util) - -link_directories(${PROJECT_SOURCE_DIR}/../kortex_api/lib/release) - -add_executable(${PROJECT_NAME} ${cpp_list}) - -target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES} KortexApi gcov) - -add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}_gencpp) diff --git a/kortex_actuator_driver/RosGeneration.py b/kortex_actuator_driver/RosGeneration.py deleted file mode 100644 index 26aeaad9..00000000 --- a/kortex_actuator_driver/RosGeneration.py +++ /dev/null @@ -1,223 +0,0 @@ -#!/usr/bin/env python -### -# KINOVA (R) KORTEX (TM) -# -# Copyright (c) 2018 Kinova inc. All rights reserved. -# -# This software may be modified and distributed -# under the terms of the BSD 3-Clause license. -# -# Refer to the LICENSE file for details. -# -### - -import sys - -from google.protobuf.compiler import plugin_pb2 as plugin -from google.protobuf import json_format as json_f - -import jinja2 - -import itertools -import json -import types -import os -import sys - -from collections import OrderedDict - -from google.protobuf.descriptor_pb2 import DescriptorProto, EnumDescriptorProto, ServiceDescriptorProto, FieldDescriptorProto, OneofDescriptorProto - -# Class that holds a protobuf message and other details needed by the generator(Jinja2 template) -class DetailedMessage: - def __init__(self, message=None): - self.message = message - self.HasOneOf = "false" - self.oneOfList = [] - -# Class that holds a protobuf service and some other details needed by the generator(Jinja2 template) -class DetailedPackage: - def __init__(self, service=None): - self.name = "NoName" - self.service = service - -# Jinja2 function to render a file from a template -def render(tpl_path, context): - path, filename = os.path.split(tpl_path) - return jinja2.Environment(loader=jinja2.FileSystemLoader(path or './')).get_template(filename).render(**context) - -# main plugin function -def generate_code(request, response): - - # The context is the object sent to the Jinja2 template. - context = types.SimpleNamespace() - context.serviceVersion = 1 - - context.detailedPackages = [] - - MainFilePath = os.path.join(".", "src/main.cpp") - function_list = [] - fileIndex = 0 - file_map = OrderedDict() - - for proto_file in request.proto_file: - file_map[proto_file.name] = proto_file - - for filename, proto_file in file_map.items(): - context.detailedPackages.append(DetailedPackage()) - context.detailedPackages[fileIndex].name = proto_file.package.split(".")[-1] - context.detailedPackages[fileIndex].filename = proto_file.name.split(".")[0] - context.detailedPackages[fileIndex].namespace = proto_file.package.replace(".", "::") - context.detailedPackages[fileIndex].HasRPC = 0 - context.detailedPackages[fileIndex].HasMessage = 0 - - HeaderFilePath = os.path.join(".", "src/node.h") - CppFilePath = os.path.join(".", "src/node.cpp") - - # We use lower case to respect ROS standard coding style. - CppProtoConverterFilePath = os.path.join(".", "src/{}_proto_converter.cpp".format(proto_file.name.split(".")[0].lower())) - HeaderProtoConverterFilePath = os.path.join(".", "src/{}_proto_converter.h".format(proto_file.name.split(".")[0].lower())) - CppRosConverterFilePath = os.path.join(".", "src/{}_ros_converter.cpp".format(proto_file.name.split(".")[0].lower())) - HeaderRosConverterFilePath = os.path.join(".", "src/{}_ros_converter.h".format(proto_file.name.split(".")[0].lower())) - - list_detailedMessage = [] - list_detailedMethod = [] - - # for every item in the current proto file - for item, package in traverse(proto_file): - context.HasOneOf = 0 - - - if isinstance(item, EnumDescriptorProto): - context.item = item - - ros_enumPath = os.path.join(".", "msg/{}.msg".format(item.name)) - - with open(ros_enumPath, 'wt') as serviceFile: - serviceFile.write(render("./templates/ros_enum.jinja2", context.__dict__)) - # if this is a message - if isinstance(item, DescriptorProto): - tempMessage = DetailedMessage(item) - context.detailedPackages[fileIndex].HasMessage = 1 - - for member in item.field: - # If a member is part of a oneof, it will have this additional field. - if member.HasField("oneof_index"): - context.HasOneOf = 1 - tempMessage.HasOneOf = "true" - else: - context.HasOneOf = 0 - tempMessage.HasOneOf = "false" - - context.item = item - - # If the proto file contains a ONEOF we need to generate a separate file to handle it. - if context.HasOneOf == 1: - - # This line gets the list of ONEOF that is in the current message. - oneOfList = item.ListFields()[-1][1] - - tempMessage.oneOfList = item.ListFields()[-1][1] - ros_oneofPath = os.path.join(".", "msg/{}_{}.msg".format(item.name, oneOfList[0].name)) - - with open(ros_oneofPath, 'wt') as serviceFile: - serviceFile.write(render("./templates/ros_oneof.jinja2", context.__dict__)) - - - list_detailedMessage.append(tempMessage) - ros_messagePath = os.path.join(".", "msg/{}.msg".format(item.name)) - - # We call Jinja2 to generate a ROS message. - with open(ros_messagePath, 'wt') as serviceFile: - serviceFile.write(render("./templates/ros_message.jinja2", context.__dict__)) - - # if this is a service (a group of methods) - if isinstance(item, ServiceDescriptorProto): - for idx, method in enumerate(item.method): - context.item = method - if "Topic" not in method.name: - function_list.append(method.name) - ros_servicePath = os.path.join(".", "srv/{}.srv".format(method.name)) - else: - function_list.append("OnNotification{}".format(method.name)) - ros_servicePath = os.path.join(".", "srv/OnNotification{}.srv".format(method.name)) - - with open(ros_servicePath, 'wt') as serviceFile: - serviceFile.write(render("./templates/ros_service.jinja2", context.__dict__)) - - context.detailedPackages[fileIndex].service = item - context.detailedPackages[fileIndex].HasRPC = 1 - - context.currentPackageName = context.detailedPackages[fileIndex].name - context.currentNamespace = proto_file.package.replace(".", "::") - context.currentFilename = context.detailedPackages[fileIndex].filename - context.item = list_detailedMessage - - if context.detailedPackages[fileIndex].HasMessage == 1: - # We call Jinja2 to generate a proto/ROS converter for every protobuf message. - with open(CppProtoConverterFilePath, 'wt') as converterFile: - converterFile.write(render("./templates/proto_converter.cpp.jinja2", context.__dict__)) - with open(HeaderProtoConverterFilePath, 'wt') as converterFile: - converterFile.write(render("./templates/proto_converter.h.jinja2", context.__dict__)) - with open(CppRosConverterFilePath, 'wt') as converterFile: - converterFile.write(render("./templates/ros_converter.cpp.jinja2", context.__dict__)) - with open(HeaderRosConverterFilePath, 'wt') as converterFile: - converterFile.write(render("./templates/ros_converter.h.jinja2", context.__dict__)) - - fileIndex = fileIndex + 1 - - context.list_function = function_list - - # We use Jinja2 to generate the ROS node. - with open(HeaderFilePath, 'wt') as nodeFile: - nodeFile.write(render("./templates/NodeServices.h.jinja2", context.__dict__)) - with open(CppFilePath, 'wt') as nodeFile: - nodeFile.write(render("./templates/NodeServices.cpp.jinja2", context.__dict__)) - with open(MainFilePath, 'wt') as mainFile: - mainFile.write(render("./templates/main.jinja2", context.__dict__)) - -def traverse(proto_file): - # recursive function that browses a protobof item - def _traverse(package, items): - for item in items: - yield item, package - - if isinstance(item, DescriptorProto): - for enum in item.enum_type: - yield enum, package - - for nested in item.nested_type: - nested_package = package + item.name - - for nested_item in _traverse(nested, nested_package): - yield nested_item, nested_package - if isinstance(item, ServiceDescriptorProto): - for rpc in item.method: - yield rpc, package - - # returns a list of everything found in the proto file - return itertools.chain( - _traverse(proto_file.package, proto_file.enum_type), - _traverse(proto_file.package, proto_file.message_type), - _traverse(proto_file.package, proto_file.service), - ) - -if __name__ == '__main__': - # reads request message from stdin - data = sys.stdin.buffer.read() - - # parses request - request = plugin.CodeGeneratorRequest() - request.ParseFromString(data) - - # creates response - response = plugin.CodeGeneratorResponse() - - # generates code - generate_code(request, response) - - # serialises response message - output = response.SerializeToString() - - # writes to stdout - sys.stdout.buffer.write(output) \ No newline at end of file diff --git a/kortex_actuator_driver/kortex_actuator_driver.sh b/kortex_actuator_driver/kortex_actuator_driver.sh deleted file mode 100755 index 011eee96..00000000 --- a/kortex_actuator_driver/kortex_actuator_driver.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -python3 -u RosGeneration.py - diff --git a/kortex_actuator_driver/msg/AxisOffsets.msg b/kortex_actuator_driver/msg/AxisOffsets.msg deleted file mode 100644 index 64f67904..00000000 --- a/kortex_actuator_driver/msg/AxisOffsets.msg +++ /dev/null @@ -1,3 +0,0 @@ - -float32 absolute_offset -float32 relative_offset \ No newline at end of file diff --git a/kortex_actuator_driver/msg/Command.msg b/kortex_actuator_driver/msg/Command.msg deleted file mode 100644 index 25525fa5..00000000 --- a/kortex_actuator_driver/msg/Command.msg +++ /dev/null @@ -1,8 +0,0 @@ - - -MessageId command_id -uint32 flags -float32 position -float32 velocity -float32 torque_joint -float32 current_motor \ No newline at end of file diff --git a/kortex_actuator_driver/msg/Connection.msg b/kortex_actuator_driver/msg/Connection.msg deleted file mode 100644 index ca08b6c8..00000000 --- a/kortex_actuator_driver/msg/Connection.msg +++ /dev/null @@ -1,5 +0,0 @@ - - -UserProfileHandle user_handle -string connection_information -uint32 connection_identifier \ No newline at end of file diff --git a/kortex_actuator_driver/msg/ControlLoopParameters.msg b/kortex_actuator_driver/msg/ControlLoopParameters.msg deleted file mode 100644 index 72b8bbe5..00000000 --- a/kortex_actuator_driver/msg/ControlLoopParameters.msg +++ /dev/null @@ -1,7 +0,0 @@ - - -uint32 loop_selection -float32 error_saturation -float32 output_saturation -float32[] kAz -float32[] kBz \ No newline at end of file diff --git a/kortex_actuator_driver/msg/ControlModeInformation.msg b/kortex_actuator_driver/msg/ControlModeInformation.msg deleted file mode 100644 index 3bcfa3fa..00000000 --- a/kortex_actuator_driver/msg/ControlModeInformation.msg +++ /dev/null @@ -1,3 +0,0 @@ - - -uint32 control_mode \ No newline at end of file diff --git a/kortex_actuator_driver/msg/CustomData.msg b/kortex_actuator_driver/msg/CustomData.msg deleted file mode 100644 index b81c1b26..00000000 --- a/kortex_actuator_driver/msg/CustomData.msg +++ /dev/null @@ -1,19 +0,0 @@ - - -MessageId custom_data_id -uint32 custom_data_0 -uint32 custom_data_1 -uint32 custom_data_2 -uint32 custom_data_3 -uint32 custom_data_4 -uint32 custom_data_5 -uint32 custom_data_6 -uint32 custom_data_7 -uint32 custom_data_8 -uint32 custom_data_9 -uint32 custom_data_10 -uint32 custom_data_11 -uint32 custom_data_12 -uint32 custom_data_13 -uint32 custom_data_14 -uint32 custom_data_15 \ No newline at end of file diff --git a/kortex_actuator_driver/msg/DeviceHandle.msg b/kortex_actuator_driver/msg/DeviceHandle.msg deleted file mode 100644 index 49f84366..00000000 --- a/kortex_actuator_driver/msg/DeviceHandle.msg +++ /dev/null @@ -1,5 +0,0 @@ - - -uint32 device_type -uint32 device_identifier -uint32 order \ No newline at end of file diff --git a/kortex_actuator_driver/msg/DeviceTypes.msg b/kortex_actuator_driver/msg/DeviceTypes.msg deleted file mode 100644 index 5a55df07..00000000 --- a/kortex_actuator_driver/msg/DeviceTypes.msg +++ /dev/null @@ -1,14 +0,0 @@ - -uint32 UNSPECIFIED_DEVICE_TYPE = 0 - -uint32 BASE = 1 - -uint32 VISION = 2 - -uint32 BIG_ACTUATOR = 3 - -uint32 SMALL_ACTUATOR = 4 - -uint32 INTERCONNECT = 5 - -uint32 GRIPPER = 6 diff --git a/kortex_actuator_driver/msg/EncoderDerivativeParameters.msg b/kortex_actuator_driver/msg/EncoderDerivativeParameters.msg deleted file mode 100644 index c83b9929..00000000 --- a/kortex_actuator_driver/msg/EncoderDerivativeParameters.msg +++ /dev/null @@ -1,3 +0,0 @@ - -uint32 max_window_width -uint32 min_encoder_tick_count \ No newline at end of file diff --git a/kortex_actuator_driver/msg/Feedback.msg b/kortex_actuator_driver/msg/Feedback.msg deleted file mode 100644 index 9698d184..00000000 --- a/kortex_actuator_driver/msg/Feedback.msg +++ /dev/null @@ -1,16 +0,0 @@ - - -MessageId feedback_id -uint32 status_flags -uint32 jitter_comm -float32 position -float32 velocity -float32 torque -float32 current_motor -float32 voltage -float32 temperature_motor -float32 temperature_core -uint32 fault_bank_a -uint32 fault_bank_b -uint32 warning_bank_a -uint32 warning_bank_b \ No newline at end of file diff --git a/kortex_actuator_driver/msg/FrequencyResponse.msg b/kortex_actuator_driver/msg/FrequencyResponse.msg deleted file mode 100644 index ea3ce5bd..00000000 --- a/kortex_actuator_driver/msg/FrequencyResponse.msg +++ /dev/null @@ -1,7 +0,0 @@ - - -uint32 loop_selection -float32 min_frequency -float32 max_frequency -float32 amplitude -float32 duration \ No newline at end of file diff --git a/kortex_actuator_driver/msg/MessageId.msg b/kortex_actuator_driver/msg/MessageId.msg deleted file mode 100644 index bd72812b..00000000 --- a/kortex_actuator_driver/msg/MessageId.msg +++ /dev/null @@ -1,2 +0,0 @@ - -uint32 identifier \ No newline at end of file diff --git a/kortex_actuator_driver/msg/NotificationHandle.msg b/kortex_actuator_driver/msg/NotificationHandle.msg deleted file mode 100644 index bd72812b..00000000 --- a/kortex_actuator_driver/msg/NotificationHandle.msg +++ /dev/null @@ -1,2 +0,0 @@ - -uint32 identifier \ No newline at end of file diff --git a/kortex_actuator_driver/msg/NotificationOptions.msg b/kortex_actuator_driver/msg/NotificationOptions.msg deleted file mode 100644 index 6ff46842..00000000 --- a/kortex_actuator_driver/msg/NotificationOptions.msg +++ /dev/null @@ -1,5 +0,0 @@ - - -uint32 type -uint32 rate_m_sec -float32 threshold_value \ No newline at end of file diff --git a/kortex_actuator_driver/msg/PositionCommand.msg b/kortex_actuator_driver/msg/PositionCommand.msg deleted file mode 100644 index 5e894e42..00000000 --- a/kortex_actuator_driver/msg/PositionCommand.msg +++ /dev/null @@ -1,4 +0,0 @@ - -float32 position -float32 velocity -float32 acceleration \ No newline at end of file diff --git a/kortex_actuator_driver/msg/RampResponse.msg b/kortex_actuator_driver/msg/RampResponse.msg deleted file mode 100644 index 59d88d4e..00000000 --- a/kortex_actuator_driver/msg/RampResponse.msg +++ /dev/null @@ -1,6 +0,0 @@ - - -uint32 loop_selection -float32 slope -float32 ramp_delay -float32 duration \ No newline at end of file diff --git a/kortex_actuator_driver/msg/SafetyHandle.msg b/kortex_actuator_driver/msg/SafetyHandle.msg deleted file mode 100644 index bd72812b..00000000 --- a/kortex_actuator_driver/msg/SafetyHandle.msg +++ /dev/null @@ -1,2 +0,0 @@ - -uint32 identifier \ No newline at end of file diff --git a/kortex_actuator_driver/msg/SafetyIdentifier.msg b/kortex_actuator_driver/msg/SafetyIdentifier.msg deleted file mode 100644 index 6e0c3e8d..00000000 --- a/kortex_actuator_driver/msg/SafetyIdentifier.msg +++ /dev/null @@ -1,50 +0,0 @@ - -uint32 UNSPECIFIED_ACTUATOR_SAFETY_IDENTIFIER = 0 - -uint32 FOLLOWING_ERROR = 1 - -uint32 MAXIMUM_VELOCITY = 2 - -uint32 JOINT_LIMIT_HIGH = 4 - -uint32 JOINT_LIMIT_LOW = 8 - -uint32 STRAIN_GAUGE_MISMATCH = 16 - -uint32 MAXIMUM_TORQUE = 32 - -uint32 UNRELIABLE_ABSOLUTE_POSITION = 64 - -uint32 MAGNETIC_POSITION = 128 - -uint32 HALL_POSITION = 256 - -uint32 HALL_SEQUENCE = 512 - -uint32 INPUT_ENCODER_HALL_MISMATCH = 1024 - -uint32 INPUT_ENCODER_INDEX_MISMATCH = 2048 - -uint32 INPUT_ENCODER_MAGNETIC_MISMATCH = 4096 - -uint32 MAXIMUM_MOTOR_CURRENT = 8192 - -uint32 MOTOR_CURRENT_MISMATCH = 16384 - -uint32 MAXIMUM_VOLTAGE = 32768 - -uint32 MINIMUM_VOLTAGE = 65536 - -uint32 MAXIMUM_MOTOR_TEMPERATURE = 131072 - -uint32 MAXIMUM_CORE_TEMPERATURE = 262144 - -uint32 NON_VOLATILE_MEMORY_CORRUPTED = 524288 - -uint32 MOTOR_DRIVER_FAULT = 1048576 - -uint32 EMERGENCY_LINE_ASSERTED = 2097152 - -uint32 COMMUNICATION_TICK_LOST = 4194304 - -uint32 WATCHDOG_TRIGGERED = 8388608 diff --git a/kortex_actuator_driver/msg/SafetyNotification.msg b/kortex_actuator_driver/msg/SafetyNotification.msg deleted file mode 100644 index 36d88894..00000000 --- a/kortex_actuator_driver/msg/SafetyNotification.msg +++ /dev/null @@ -1,11 +0,0 @@ - - -SafetyHandle safety_handle - -uint32 value - -Timestamp timestamp - -UserProfileHandle user_handle - -Connection connection \ No newline at end of file diff --git a/kortex_actuator_driver/msg/StepResponse.msg b/kortex_actuator_driver/msg/StepResponse.msg deleted file mode 100644 index bde4ed2e..00000000 --- a/kortex_actuator_driver/msg/StepResponse.msg +++ /dev/null @@ -1,6 +0,0 @@ - - -uint32 loop_selection -float32 amplitude -float32 step_delay -float32 duration \ No newline at end of file diff --git a/kortex_actuator_driver/msg/Timestamp.msg b/kortex_actuator_driver/msg/Timestamp.msg deleted file mode 100644 index 5e60508c..00000000 --- a/kortex_actuator_driver/msg/Timestamp.msg +++ /dev/null @@ -1,3 +0,0 @@ - -uint32 sec -uint32 usec \ No newline at end of file diff --git a/kortex_actuator_driver/msg/TorqueCalibration.msg b/kortex_actuator_driver/msg/TorqueCalibration.msg deleted file mode 100644 index a237df13..00000000 --- a/kortex_actuator_driver/msg/TorqueCalibration.msg +++ /dev/null @@ -1,5 +0,0 @@ - -float32 global_gain -float32 global_offset -float32[] gain -float32[] offset \ No newline at end of file diff --git a/kortex_actuator_driver/msg/UserProfileHandle.msg b/kortex_actuator_driver/msg/UserProfileHandle.msg deleted file mode 100644 index 3038380d..00000000 --- a/kortex_actuator_driver/msg/UserProfileHandle.msg +++ /dev/null @@ -1,3 +0,0 @@ - -uint32 identifier -uint32 permission \ No newline at end of file diff --git a/kortex_actuator_driver/msg/VectorDriveParameters.msg b/kortex_actuator_driver/msg/VectorDriveParameters.msg deleted file mode 100644 index 8fad9fca..00000000 --- a/kortex_actuator_driver/msg/VectorDriveParameters.msg +++ /dev/null @@ -1,5 +0,0 @@ - -float32 kpq -float32 kiq -float32 kpd -float32 kid \ No newline at end of file diff --git a/kortex_actuator_driver/msg/non_generated/ApiOptions.msg b/kortex_actuator_driver/msg/non_generated/ApiOptions.msg deleted file mode 100644 index 471fddd8..00000000 --- a/kortex_actuator_driver/msg/non_generated/ApiOptions.msg +++ /dev/null @@ -1 +0,0 @@ -uint32 timeout_ms \ No newline at end of file diff --git a/kortex_actuator_driver/msg/non_generated/CyclicStatus.msg b/kortex_actuator_driver/msg/non_generated/CyclicStatus.msg deleted file mode 100644 index cb36958f..00000000 --- a/kortex_actuator_driver/msg/non_generated/CyclicStatus.msg +++ /dev/null @@ -1 +0,0 @@ -bool isActive \ No newline at end of file diff --git a/kortex_actuator_driver/msg/non_generated/KortexError.msg b/kortex_actuator_driver/msg/non_generated/KortexError.msg deleted file mode 100644 index 3ff9c32c..00000000 --- a/kortex_actuator_driver/msg/non_generated/KortexError.msg +++ /dev/null @@ -1,3 +0,0 @@ -uint32 code -uint32 subCode -string description \ No newline at end of file diff --git a/kortex_actuator_driver/package.xml b/kortex_actuator_driver/package.xml deleted file mode 100644 index 410d5568..00000000 --- a/kortex_actuator_driver/package.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - kortex_actuator_driver - 1.0.0 - The kortex package that communicate with an actuator. - - - KINOVA - - - - - - BSD - - catkin - roscpp - rospy - std_msgs - roscpp - rospy - std_msgs - roscpp - rospy - std_msgs - message_generation - message_runtime - - - - - - - - diff --git a/kortex_actuator_driver/protos/ActuatorConfig.proto b/kortex_actuator_driver/protos/ActuatorConfig.proto deleted file mode 100644 index 70231e10..00000000 --- a/kortex_actuator_driver/protos/ActuatorConfig.proto +++ /dev/null @@ -1,369 +0,0 @@ -/* - * KINOVA (R) KORTEX (TM) - * - * Copyright (c) 2018 Kinova inc. All rights reserved. - * - * This software may be modified and distributed - * under the terms of the BSD 3-Clause license. - * - * Refer to the LICENSE file for details. - * - */ - -syntax = "proto3"; - -import public "Common.proto"; - -package Kinova.Api.ActuatorConfig; - -// Service to configure the actuator module. -service ActuatorConfig {//@PROXY_ID=10 @ERROR=Kinova.Api.Error - - // Gets axis offsets for absolute and relative encoder - rpc GetAxisOffsets (Kinova.Api.Common.Empty) returns (AxisOffsets); //@RPC_ID=1 - - // Computes offsets for absolute and relative encoder - rpc SetAxisOffsets (AxisPosition) returns (Kinova.Api.Common.Empty); //@RPC_ID=2 - - // Reads torque calibration parameters (internal use only) - rpc ReadTorqueCalibration (Kinova.Api.Common.Empty) returns (TorqueCalibration); //@RPC_ID=3 - - // Writes torque calibration parameters (internal use only) - rpc WriteTorqueCalibration (TorqueCalibration) returns (Kinova.Api.Common.Empty); //@RPC_ID=4 - - // Sets zero torque calibration - rpc SetTorqueOffset (TorqueOffset) returns (Kinova.Api.Common.Empty); //@RPC_ID=5 - - // Gets actuator control mode - rpc GetControlMode (Kinova.Api.Common.Empty) returns (ControlModeInformation); //@RPC_ID=6 - - // Sets actuator control mode - rpc SetControlMode (ControlModeInformation) returns (Kinova.Api.Common.Empty); //@RPC_ID=7 - - // Gets activated control loop(s) - rpc GetActivatedControlLoop (Kinova.Api.Common.Empty) returns (ControlLoop); //@RPC_ID=8 - - // Sets activated control loop(s) - rpc SetActivatedControlLoop (ControlLoop) returns (Kinova.Api.Common.Empty); //@RPC_ID=9 - - // Gets motor drive FOC parameters (internal use only) - rpc GetVectorDriveParameters (Kinova.Api.Common.Empty) returns (VectorDriveParameters); //@RPC_ID=10 - - // Sets motor drive FOC parameters (internal use only) - rpc SetVectorDriveParameters (VectorDriveParameters) returns (Kinova.Api.Common.Empty); //@RPC_ID=11 - - // Gets encoder derivative parameters (internal use only) - rpc GetEncoderDerivativeParameters (Kinova.Api.Common.Empty) returns (EncoderDerivativeParameters); //@RPC_ID=12 - - // Sets encoder derivative parameters (internal use only) - rpc SetEncoderDerivativeParameters (EncoderDerivativeParameters) returns (Kinova.Api.Common.Empty); //@RPC_ID=13 - - // Gets control loop parameters - rpc GetControlLoopParameters (LoopSelection) returns (ControlLoopParameters); //@RPC_ID=14 - - // Sets control loop parameters. - rpc SetControlLoopParameters (ControlLoopParameters) returns (Kinova.Api.Common.Empty); //@RPC_ID=15 - - // Starts frequency response test (internal use only) - rpc StartFrequencyResponse (FrequencyResponse) returns (Kinova.Api.Common.Empty); //@RPC_ID=16 - - // Stops frequency response test (internal use only) - rpc StopFrequencyResponse (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty); //@RPC_ID=17 - - // Starts step response test (internal use only) - rpc StartStepResponse (StepResponse) returns (Kinova.Api.Common.Empty); //@RPC_ID=18 - - // Stops step response test (internal use only) - rpc StopStepResponse (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty); //@RPC_ID=19 - - // Starts ramp response test (internal use only) - rpc StartRampResponse (RampResponse) returns (Kinova.Api.Common.Empty); //@RPC_ID=20 - - // Stops ramp response test (internal use only) - rpc StopRampResponse (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty); //@RPC_ID=21 - - // Selects custom data - rpc SelectCustomData (CustomDataSelection) returns (Kinova.Api.Common.Empty); //@RPC_ID=22 - - // Gets selected custom data - rpc GetSelectedCustomData (Kinova.Api.Common.Empty) returns (CustomDataSelection); //@RPC_ID=23 - - // Sets command mode (config versus cyclic) - rpc SetCommandMode (CommandModeInformation) returns (Kinova.Api.Common.Empty); //@RPC_ID=24 - - // Clears all error(s) and warning(s) (bank A and B) - rpc ClearFaults (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty); //@RPC_ID=25 - - // Enables or disables servoing - rpc SetServoing (Servoing) returns (Kinova.Api.Common.Empty); //@RPC_ID=26 - - // Moves the actuator to the desired position - rpc MoveToPosition (PositionCommand) returns (Kinova.Api.Common.Empty); //@RPC_ID=27 - - // Gets command mode (config versus cyclic) - rpc GetCommandMode (Kinova.Api.Common.Empty) returns (CommandModeInformation); //@RPC_ID=28 - - // Gets servoing state - rpc GetServoing (Kinova.Api.Common.Empty) returns (Servoing); //@RPC_ID=29 - - // Gets torque offset calibration - rpc GetTorqueOffset (Kinova.Api.Common.Empty) returns (TorqueOffset); //@RPC_ID=30 -} - -// Enumeration used to identify ActuatorConfig service current version -enum ServiceVersion -{ - RESERVED_0 = 0; // Reserved - CURRENT_VERSION = 1; // Current version -} - -// List of of admissible limit types -enum SafetyLimitType -{ - MAXIMAL_LIMIT = 0; // Maximal limit - MINIMAL_LIMIT = 1; // Minimal limit -} - -// List of admissible control modes -enum ControlMode -{ - NONE = 0; // None - POSITION = 1; // Position mode - VELOCITY = 2; // Velocity mode - TORQUE = 3; // Torque mode - CURRENT = 4; // Current mode - CUSTOM = 5; // Custom mode -} - -// List of admissible command modes -enum CommandMode -{ - CYCLIC = 0; // Cyclic data only - ASYNC_CYCLIC_FLAGS = 1; // Not supported - ASYNC = 2; // Config messages only - CYCLIC_JITTERCOMPENSATED_POSITION = 3; // Smoothing using only position inputs - CYCLIC_JITTERCOMPENSATED_VELOCITY = 4; // Smoothing using position and velocity inputs - CYCLIC_JITTERCOMPENSATED_ACCELERATION = 5; // Smoothing using position, velocity and acceleration inputs (not supported) -} - -// List of admissible control loop selections -enum ControlLoopSelection -{ - RESERVED = 0; // 0x0 - Reserved (internal use only) - JOINT_POSITION = 1; // 0x1 - Joint position control (if available) - MOTOR_POSITION = 2; // 0x2 - Motor position control - JOINT_VELOCITY = 4; // 0x4 - Joint velocity control (if available) - MOTOR_VELOCITY = 8; // 0x8 - Motor velocity control - JOINT_TORQUE = 16; // 0x10 - Joint torque control - MOTOR_CURRENT = 32; // 0x20 - Motor current control -} - -// Defines an axis position -message AxisPosition -{ - float position = 1; // Axis position -} - -// Defines axis offsets -message AxisOffsets -{ - float absolute_offset = 1; // Absolute offset value - float relative_offset = 2; // Relative offset value -} - -// Defines torque calibration -message TorqueCalibration -{ - float global_gain = 1; // Global gain value - float global_offset = 2; // Global offset value - repeated float gain = 3; // Gain (index 0 to 3) - repeated float offset = 4; // Offset (index 0 to 3) -} - -// Defines torque offset -message TorqueOffset -{ - float torque_offset = 1; // Torque offset value -} - -// Defines the control mode -message ControlModeInformation -{ - ControlMode control_mode = 1; // Control mode -} - -// Defines the control loop -message ControlLoop -{ - fixed32 control_loop = 1; // Use ControlLoopSelection enum values to form bitmask -} - -// Defines the loop selection -message LoopSelection -{ - ControlLoopSelection loop_selection = 1; // ControlLoopSelection enum -} - -// Field-oriented control PI controller gain values -message VectorDriveParameters -{ - float kpq = 1; // Quadrature axis current proportional gain - float kiq = 2; // Quadrature axis current integral gain - float kpd = 3; // Direct axis current proportional gain - float kid = 4; // Direct axis current integral gain -} - -// Defines variable window derivative parameters -message EncoderDerivativeParameters -{ - uint32 max_window_width = 1; // Maximum window width - uint32 min_encoder_tick_count = 2; // Minimum encoder tick count -} - -// Defines control loop parameters (discrete transfer function) -message ControlLoopParameters -{ - ControlLoopSelection loop_selection = 1; // ControlLoopSelection enum - float error_saturation = 2; // Error saturation value - float output_saturation = 3; // Output saturation value - repeated float kAz = 4; // KAz (index 0 to 4): denominator gains A1 to A5 - repeated float kBz = 5; // KBz (index 0 to 5): numerator gains B0 to B5 -} - -// Defines frequency response -message FrequencyResponse -{ - ControlLoopSelection loop_selection = 1; // ControlLoopSelection enum - float min_frequency = 2; // Minimum frequency value - float max_frequency = 3; // Maximum frequency value - float amplitude = 4; // Amplitude value - float duration = 5; // Duration (in seconds) -} - -// Defines step response -message StepResponse -{ - ControlLoopSelection loop_selection = 1; // ControlLoopSelection enum - float amplitude = 2; // Amplitude value - float step_delay = 3; // Step delay value - float duration = 4; // Duration (in seconds) -} - -// Defines ramp response -message RampResponse -{ - ControlLoopSelection loop_selection = 1; // ControlLoopSelection enum - float slope = 2; // Slope value - float ramp_delay = 3; // Ramp delay value - float duration = 4; // Duration (in seconds) -} - -// Selects custom data channels content -message CustomDataSelection -{ - repeated CustomDataIndex channel = 1; // 16 channels maximum -} - -// Selects command mode -message CommandModeInformation -{ - CommandMode command_mode = 1; // Command mode -} - -// Enables/disables servoing -message Servoing -{ - bool enabled = 1; // Servoing enabled -} - -// Defines a position command -message PositionCommand -{ - float position = 1; // Position value - float velocity = 2; // Velocity value - float acceleration = 3; // Acceleration value -} - -// List of admissible actuator safeties -enum SafetyIdentifier { - UNSPECIFIED_ACTUATOR_SAFETY_IDENTIFIER = 0; // 0x0 - Unspecified actuator safety - FOLLOWING_ERROR = 1; // 0x1 - Following error - MAXIMUM_VELOCITY = 2; // 0x2 - Maximum velocity - JOINT_LIMIT_HIGH = 4; // 0x4 - Joint position limit high - JOINT_LIMIT_LOW = 8; // 0x8 - Joint position limit low - STRAIN_GAUGE_MISMATCH = 16; // 0x10 - Strain gauge mismatch - MAXIMUM_TORQUE = 32; // 0x20 - Maximum torque - UNRELIABLE_ABSOLUTE_POSITION = 64; // 0x40 - Unreliable absolute position - MAGNETIC_POSITION = 128; // 0x80 - Magnetic position - HALL_POSITION = 256; // 0x100 - Hall position - HALL_SEQUENCE = 512; // 0x200 - Hall sequence - INPUT_ENCODER_HALL_MISMATCH = 1024; // 0x400 - Input encoder Hall mismatch - INPUT_ENCODER_INDEX_MISMATCH = 2048; // 0x800 - Input encoder index mismatch - INPUT_ENCODER_MAGNETIC_MISMATCH = 4096; // 0x1000 - Input encoder magnetic mismatch - MAXIMUM_MOTOR_CURRENT = 8192; // 0x2000 - Maximum motor current - MOTOR_CURRENT_MISMATCH = 16384; // 0x4000 - Motor current mismatch - MAXIMUM_VOLTAGE = 32768; // 0x8000 - Maximum voltage - MINIMUM_VOLTAGE = 65536; // 0x10000 - Minimum voltage - MAXIMUM_MOTOR_TEMPERATURE = 131072; // 0x20000 - Maximum motor temperature - MAXIMUM_CORE_TEMPERATURE = 262144; // 0x40000 - Maximum core temperature - NON_VOLATILE_MEMORY_CORRUPTED = 524288; // 0x80000 - Non-volatile memory corrupted - MOTOR_DRIVER_FAULT = 1048576; // 0x100000 - Motor driver fault - EMERGENCY_LINE_ASSERTED = 2097152; // 0x200000 - Emergency line asserted - COMMUNICATION_TICK_LOST = 4194304; // 0x400000 - Communication tick lost - WATCHDOG_TRIGGERED = 8388608; // 0x800000 - Watchdog triggered -} - -enum CustomDataIndex { - NO_CUSTOM_DATA_SELECTED = 0; // No custom data selected - UINT32_TEST_RAMP = 1; // Incremental value used for test and validation - UINT32_MOTOR_ENCODER_RAW = 2; // Rotor optical encoder incremental value (raw) - UINT32_JOINT_ENCODER_RAW = 3; // Joint optical encoder incremental value (raw) - FLOAT_TEMPERATURE_PHASE_0 = 4; // Motor phase 0 temperature (degrees Celsius) - FLOAT_TEMPERATURE_PHASE_1 = 5; // Motor phase 1 temperature (degrees Celsius) - FLOAT_TEMPERATURE_PHASE_2 = 6; // Motor phase 2 temperature (degrees Celsius) - INT32_TORQUE_SENSOR_RAW_0 = 7; // Individual torque sensor strain gauge 0 ADC value (raw) - INT32_TORQUE_SENSOR_RAW_1 = 8; // Individual torque sensor strain gauge 1 ADC value (raw) - INT32_TORQUE_SENSOR_RAW_2 = 9; // Individual torque sensor strain gauge 2 ADC value (raw) - INT32_TORQUE_SENSOR_RAW_3 = 10; // Individual torque sensor strain gauge 3 ADC value (raw) - FLOAT_TORQUE_SENSOR_0 = 11; // Individual torque sensor strain gauge 0 converted value (Newton-meters) - FLOAT_TORQUE_SENSOR_1 = 12; // Individual torque sensor strain gauge 1 converted value (Newton-meters) - FLOAT_TORQUE_SENSOR_2 = 13; // Individual torque sensor strain gauge 2 converted value (Newton-meters) - FLOAT_TORQUE_SENSOR_3 = 14; // Individual torque sensor strain gauge 3 converted value (Newton-meters) - UINT32_MOTOR_ENCODER_RAW_LATCH_ON_INDEX_RISING = 15; // Rotor optical encoder incremental value at last index signal rising edge (raw) - UINT32_JOINT_ENCODER_RAW_LATCH_ON_INDEX_RISING = 16; // Joint optical encoder incremental value at last index signal rising edge (raw) - UINT32_ABSOLUTE_POSITION_SENSOR_RAW = 17; // Absolute position sensor integer value (raw) - FLOAT_ABSOLUTE_POSITION_SENSOR = 18; // Absolute position sensor converted value (degrees) FLOAT_CONTROL_POSITION_JOINT_REQUESTED = 19; // Last axis position command received via Ethernet - UINT32_JIG_FLAGS = 20; // Jig status flags (internal use) - UINT32_TICK_MOTOR_CONTROL = 21; // Rotor optical encoder incremental value corrected for counter overflow (raw) - UINT32_TICK_JOINT_CONTROL = 22; // Joint optical encoder incremental value corrected for counter overflow (raw) - UINT32_INDEX_TICK_MOTOR_CONTROL = 23; // Rotor optical encoder incremental value corrected for counter overflow at last index signal rising edge (raw) - UINT32_INDEX_TICK_JOINT_CONTROL = 24; // Joint optical encoder incremental value corrected for counter overflow at last index signal rising edge (raw) - FLOAT_ACCELERATION_X = 25; // x-axis acceleration (meters per second squared) - FLOAT_ACCELERATION_Y = 26; // y-axis acceleration (meters per second squared) - FLOAT_ACCELERATION_Z = 27; // z-axis acceleration (meters per second squared) - FLOAT_ANGULAR_RATE_X = 28; // x-axis angular velocity (degrees per second) - FLOAT_ANGULAR_RATE_Y = 29; // y-axis angular velocity (degrees per second) - FLOAT_ANGULAR_RATE_Z = 30; // z-axis angular velocity (degrees per second) - FLOAT_POSITION_MOTOR_CMD = 31; // Axis position command sent to motor position control loop (degrees) - FLOAT_VELOCITY_MOTOR_CMD = 32; // Axis velocity command sent to motor velocity control loop (degrees per second) - FLOAT_POSITION_MOTOR = 33; // Actuator position measured by rotor optical encoder (degrees) - FLOAT_VELOCITY_MOTOR = 34; // Actuator angular velocity measured by rotor optical encoder (degrees per second) - UINT32_COMMUNICATIONS_JITTER = 35; // Jitter from the communication (microseconds) - FLOAT_TORQUE_AVERAGE = 36; // Actuator torque (Newton-meters) - FLOAT_CURRENT_MOTOR = 37; // Motor current (Amperes) - FLOAT_VOLTAGE_DIGITAL = 38; // Main board voltage (Volts) - FLOAT_TEMPERATURE_MOTOR_CELSIUS = 39; // Motor temperature (maximum of the three (3) phase temperatures) (degrees Celsius) - FLOAT_TEMPERATURE_CORE_CELSIUS = 40; // Microcontroller temperature (degrees Celsius) - UINT32_FAULT_A = 41; // Bank A faults (see ActuatorConfig.SafetyIdentifier) - UINT32_FAULT_B = 42; // Bank B faults (see ActuatorConfig.SafetyIdentifier) - UINT32_WARNING_A = 43; // Bank A warnings (see ActuatorConfig.SafetyIdentifier) - UINT32_WARNING_B = 44; // Bank B warnings (see ActuatorConfig.SafetyIdentifier) - FLOAT_POSITION_FROM_HALLS = 45; // Actuator position measured by motor hall sensors (degrees) - FLOAT_PHASE_CURRENT_0 = 46; // Motor phase 0 current (Amperes) - FLOAT_PHASE_CURRENT_1 = 47; // Motor phase 1 current (Amperes) - FLOAT_PHASE_CURRENT_2 = 48; // Motor phase 2 current (Amperes) - FLOAT_PHASE_PWM_0 = 49; // Pulse width modulation duty cycle applied to motor phase 0 (percentage) - FLOAT_PHASE_PWM_1 = 50; // Pulse width modulation duty cycle applied to motor phase 1 (percentage) - FLOAT_PHASE_PWM_2 = 51; // Pulse width modulation duty cycle applied to motor phase 2 (percentage) - FLOAT_MOTOR_ELECTRICAL_ANGLE = 52; // Motor electrical angle (degrees) -} diff --git a/kortex_actuator_driver/protos/Common.options b/kortex_actuator_driver/protos/Common.options deleted file mode 100644 index fe8e4afe..00000000 --- a/kortex_actuator_driver/protos/Common.options +++ /dev/null @@ -1,16 +0,0 @@ -// -// KINOVA (R) KORTEX (TM) -// -// Copyright (c) 2018 Kinova inc. All rights reserved. -// -// This software may be modified and distributed -// under the terms of the BSD 3-Clause license. -// -// Refer to the LICENSE file for details. -// -// - -Kinova.Api.Common.DeviceTypes long_names:false -Kinova.Api.Common.SafetyStatusValue long_names:false -Kinova.Api.Common.NotificationType long_names:false -Kinova.Api.Common.Unit long_names:false \ No newline at end of file diff --git a/kortex_actuator_driver/protos/Common.proto b/kortex_actuator_driver/protos/Common.proto deleted file mode 100644 index ee69ed74..00000000 --- a/kortex_actuator_driver/protos/Common.proto +++ /dev/null @@ -1,140 +0,0 @@ -/* - * KINOVA (R) KORTEX (TM) - * - * Copyright (c) 2018 Kinova inc. All rights reserved. - * - * This software may be modified and distributed - * under the terms of the BSD 3-Clause license. - * - * Refer to the LICENSE file for details. - * - */ - -syntax = "proto3"; - -package Kinova.Api.Common; - -// List of admissible device types -enum DeviceTypes { - UNSPECIFIED_DEVICE_TYPE = 0; // Unspecified device type - BASE = 1; // Base module - VISION = 2; // Vision module - BIG_ACTUATOR = 3; // Big actuator module - SMALL_ACTUATOR = 4; // Small actuator module - INTERCONNECT = 5; // Interconnect module - GRIPPER = 6; // Gripper module -} - -// Identifies a device -message DeviceHandle { - DeviceTypes device_type = 1; // Device type - uint32 device_identifier = 2; // Unique device identifier (used with other services) - uint32 order = 3; // Unique value indicating the order of that device versus the others to facilitate representation -} - -// List of admissible safety statuses -enum SafetyStatusValue { - SAFETY_STATUS_UNSPECIFIED = 0; // Unspecified safety status - SAFETY_STATUS_WARNING = 1; // Warning safety reached - SAFETY_STATUS_ERROR = 2; // Error safety reached - SAFETY_STATUS_NORMAL = 3; // Safety is off -} - -// List of admissible permissions. Used as bitfields -enum Permission { - NO_PERMISSION = 0; // No permission - READ_PERMISSION = 1; // Read permission. Refers to an entity that can be read - UPDATE_PERMISSION = 2; // Update permission. Refers to an entity that can be modified - DELETE_PERMISSION = 4; // Delete permission. Refers to an entity that can be deleted -} - -// List of admissible notification types -enum NotificationType { - NOTIFICATION_TYPE_UNSPECIFIED = 0; // Unspecified notification - NOTIFICATION_TYPE_THRESHOLD = 1; // Threshold notification. Refers to a notification sent beyond a specific threshold (future) - NOTIFICATION_TYPE_FIX_RATE = 2; // Fix rate notification. Refers to a notification sent at a predetermined fix rate (future) - NOTIFICATION_TYPE_EVENT = 3; // Event type notification. Refers to a notification sent in response to an event -} - -// List of admissible units used throughout API methods -enum Unit { - UNSPECIFIED_UNIT = 0; // Unspecified unit - CELSIUS = 1; // Degree Celsius - AMPERE = 2; // Ampere - VOLT = 3; // Volt - METER_PER_SECOND = 4; // Meter per second - DEGREE_PER_SECOND = 5; // Degree per second - METER_PER_SECOND_2 = 6; // Meter per second squared - DEGREE_PER_SECOND_2 = 7; // Degree per second squared - NEWTON = 8; // Newton - NEWTON_METER =9; // Newton * meter - KILOGRAM = 10; // Kilogram - DEGREE = 11; // Degree - TICK = 12; // Tick - DEGREE_PER_MILLISECOND = 13;// Degre per millisecond -} - -// Message used when no information needs to be exchanged between client application and robot, and vice versa -message Empty { -} - -// Specifies options associated to a notification -message NotificationOptions { - NotificationType type = 1; // Type of notification - uint32 rate_m_sec = 2; // Rate value (in meters per second) (if applicable) - float threshold_value = 3; // Threshold value (if applicable) -} - -// Identifies a safety -message SafetyHandle { - uint32 identifier = 1; // Safety identifier -} - -// Identifies a notification -message NotificationHandle { - uint32 identifier = 1; // Notification identifier -} - -// Message that contains a safety event -message SafetyNotification { - SafetyHandle safety_handle = 1; // Safety handle - SafetyStatusValue value = 2; // New safety status - Timestamp timestamp = 3; // Event timestamp - UserProfileHandle user_handle = 4; // User that caused the safety event - Connection connection = 5; // Connection that caused the safety event -} - -// Timestamp based on Epoch (00:00:00 Thursday, January 1, 1970) -message Timestamp { - uint32 sec = 1; // Number of seconds that have elapsed since Epoch - uint32 usec = 2; // Number of microseconds that have elapsed since the last second (0-999999) -} - -// Identifies a user profile -message UserProfileHandle { - uint32 identifier = 1; // User profile identifier - fixed32 permission = 2; // Must use 'Permission' as bitwise -} - -// Idenfities a connection -message Connection { - UserProfileHandle user_handle = 1; // User profile handle, or set to zero if no user logged in - string connection_information = 2; // Connection info (e.g. IP address with port number) - uint32 connection_identifier = 3; // Connection identifier -} - -// List of admissible arm states -enum ArmState -{ - ARMSTATE_UNSPECIFIED = 0; // Unspecified arm state - ARMSTATE_BASE_INITIALIZATION = 1; // Cannot be reported as the Base initialization must be completed before allowing user connection - ARMSTATE_IDLE = 2; // Base initialization succeeded - ARMSTATE_INITIALIZATION = 3; // Arm is being initialized - ARMSTATE_IN_FAULT = 4; // Arm is in fault - ARMSTATE_MAINTENANCE = 5; // Arm is in maintenance - ARMSTATE_SERVOING_LOW_LEVEL = 6; // Arm is in low-level servoing mode - ARMSTATE_SERVOING_READY = 7; // Arm is ready to be controlled - ARMSTATE_SERVOING_PLAYING_SEQUENCE = 8; // Arm is currently being controlled via a sequence - ARMSTATE_SERVOING_MANUALLY_CONTROLLED = 9; // Arm is currently being controlled manually - ARMSTATE_RESERVED = 255; // For debugging, this state must never be reported outside the base. this means that a state is not mapped correctly -} \ No newline at end of file diff --git a/kortex_actuator_driver/readme.md b/kortex_actuator_driver/readme.md deleted file mode 100644 index 72d099e5..00000000 --- a/kortex_actuator_driver/readme.md +++ /dev/null @@ -1,157 +0,0 @@ - - -# Kortex actuator driver - -## Overview -This package implements a ROS node that allows direct communication with a Gen3 actuator. Direct communication means that either the computer running the node is directly connected to the actuator or that it is connected to the robot using the device routing system. Use this package if you want to: - -* Change an advanced setting on an actuator. -* Move an actuator using cyclic data (1 kHz). - -### License - -The source code is released under a [BSD 3-Clause license](../LICENSE). - -**Author: Kinova inc.
-Affiliation: [Kinova inc.](https://www.kinovarobotics.com/)
-Maintainer: Kinova inc. support@kinovarobotics.com** - -This package has been tested under ROS Kinetic and Ubuntu 16.04. - -## Installation - -### Building from Source - -#### Dependencies - -- [ROS (Robot Operating System)](http://wiki.ros.org) (robotics middleware), -- [protobuf](https://developers.google.com/protocol-buffers/) - -```cpp -git clone https://github.com/protocolbuffers/protobuf --branch 3.5.1.1 (you must use this specific version) -``` -Follow these [instructions](https://github.com/protocolbuffers/protobuf/blob/master/src/README.md) to build and install protobuf and its compiler. - - -#### Building - -To build from source, clone the latest version from this repository into your catkin workspace and compile the package using - - cd catkin_workspace/src - git clone https://github.com/Kinovarobotics/ros_kortex.git - cd ../ - sudo ./src/ros_kortex/build.sh - -## Usage - -### Launch file -The launch file for this node can be found in the [kortex_bringup](../kortex_bringup/readme.md) package. - -### Normal mode -Use this mode if you are directly (Ethernet cable between computer and actuator) connected to the actuator, i.e. if you are using Wi-Fi or your cable is connected in the robot base, don't use this mode. - -rosrun kortex\_actuator\_driver kortex\_actuator\_driver 192.168.1.10 100 - -With the above command, you would be running the kortex_actuator_driver node on an actuator with IP address 192.168.1.10 whose cyclic data would be refreshed at 100 Hz. - -### Using the device routing feature -Use this mode if your are connected via Wi-Fi directly to the robot base and you want to have access to an actuator interface. - -rosrun kortex\_actuator\_driver kortex\_actuator\_driver 192.168.1.10 100 4 - -With the above command, you would be running the kortex_actuator_driver node using the device routing feature on the robot base with IP address 192.168.1.10. The cyclic data of actuator device of ID 4 would be refreshed at 100 Hz. - -## Nodes - -### Published Topics - -* **`/KortexError`** -

Every Kortex error will be published here.

- - | Type | Name | Description | - |:---:|:---:|:---:| - | uint32 | code | Error code, see enum in the ErrorCodes class. | - | uint32 | subcode | Sub error code, see enum in the ErrorCodes class. | - | string | description | Details of the error. | - - -### Services -Most of the services supported by this node are generated from the [C++ Kortex API](https://github.com/Kinovarobotics/kortex). You can find the documentation [here](https://github.com/Kinovarobotics/kortex/blob/master/api_cpp/doc/markdown/references/summary_ActuatorConfig.md). - -Example: -If you want to call the ROS service GetActuatorCount that has been generated by the C++ method [GetActuatorCount](https://github.com/Kinovarobotics/kortex/blob/master/api_cpp/doc/markdown/references/summary_Base.md), you would initialize your service like this: - - ros::ServiceClient client_GetControlMode = n.serviceClient("GetControlMode"); - -#### Non-generated -* **`SetApiOptions`** -

Modifies the API options of the Kortex API. Once this service is called, the options set will affect every future call to the node.

- -* **`SetDeviceID`** -

Modifies the target device (device routing feature) of the node. The default value is 0.

- -* **`GetCyclicStatus`** -

Indicates if the cyclic data is active or not.

- -* **`SetCyclicStatus`** -

Activates or deactivates the cyclic data.

- -### Messages -Most of the messages supported by this node are generated from the [C++ Kortex API](https://github.com/Kinovarobotics/kortex). You can find the documentation [here](https://github.com/Kinovarobotics/kortex/blob/master/api_cpp/doc/markdown/index.md). - -#### Non-generated -* **`ApiOptions`** -

Represents all of the Kortex API options.

- -* **`KortexError`** -

Represents an error from the Kortex API.

- -* **`CyclicStatus`** -

Represents the cyclic status of the actuator - indicates if it is active or not.

- -### Protos files -The **protos** directory contains the protobuf files from where the MSG, SRV and source files are generated. The content of this directory should not be modified. - -### Template files -The **templates** directory contains all the JINJA2 files needed by the protoc generator. For more details on the generation process, see the **generation** section. - -| Filename | Description | -|:---:|:---:| -| main.jinja2 | Used to generate src/main.cpp | -| NodeServices.cpp.jinja2 | Used to generate src/node.cpp | -| NodeServices.h.jinja2 | Used to generate src/node.h | -| proto_converterCPP.jinja2 | Used to generate every src/*_proto\_converter.cpp file | -| proto_converterHeader.jinja2 | Used to generate every src/*_proto\_converter.h file | -| ros_converterCPP.jinja2 | Used to generate every src/*_ros\_converter.cpp file | -| ros_converterHeader.jinja2 | Used to generate every src/*_proto\_converter.h file | -| ros_enum.jinja2 | Used to generate every msg/*.msg file that represents a protobuf enum | -| ros_message.jinja2 | Used to generate every msg/*.msg file that represents a protobuf message | -| ros_oneof.jinja2 | Used to generate every msg/*.msg file that represents a protobuf oneof | -| ros_service.jinja2 | Used to generate every msg/*.msg file that represents a protobuf RPC | - -## Generation -

-The generation process is based on a custom protobuf plugin. Most of the generation process is in the RosGeneration.py file located in the package root directory. Before launching the generation make sure you have the Python JINJA2 module installed. -

- -To launch the generation of this package: - -1. Open a terminal window. -1. Browse to the root directory of this package [YOUR\_ROS\_WORKSPACE]/src/ros\_kortex/kortex\_actuator\_driver/ -1. Ensure that kortex_actuator_driver.sh can be executed. If not then run the command: chmod +x kortex_actuator_driver.sh -1. Run the command: protoc --plugin=protoc-gen-custom=kortex_actuator_driver.sh -I./protos/ --custom_out=./build ./protos/\*.prot -1. The result of the generation should be in the following directories: - * /src - * /msg - * /srv - diff --git a/kortex_actuator_driver/src/actuatorconfig_proto_converter.cpp b/kortex_actuator_driver/src/actuatorconfig_proto_converter.cpp deleted file mode 100644 index e54a48a4..00000000 --- a/kortex_actuator_driver/src/actuatorconfig_proto_converter.cpp +++ /dev/null @@ -1,171 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "actuatorconfig_proto_converter.h" - -#include "common_proto_converter.h" - - -int ToProtoData(kortex_actuator_driver::AxisPosition input, AxisPosition *output) -{ - output->set_position(input.position); - - return 0; -} -int ToProtoData(kortex_actuator_driver::AxisOffsets input, AxisOffsets *output) -{ - output->set_absolute_offset(input.absolute_offset); - output->set_relative_offset(input.relative_offset); - - return 0; -} -int ToProtoData(kortex_actuator_driver::TorqueCalibration input, TorqueCalibration *output) -{ - output->set_global_gain(input.global_gain); - output->set_global_offset(input.global_offset); - output->clear_gain(); - for(int i = 0; i < input.gain.size(); i++) - { - output->add_gain(input.gain[i]); - } - - output->clear_offset(); - for(int i = 0; i < input.offset.size(); i++) - { - output->add_offset(input.offset[i]); - } - - - return 0; -} -int ToProtoData(kortex_actuator_driver::TorqueOffset input, TorqueOffset *output) -{ - output->set_torque_offset(input.torque_offset); - - return 0; -} -int ToProtoData(kortex_actuator_driver::ControlModeInformation input, ControlModeInformation *output) -{ - output->set_control_mode((Kinova::Api::ActuatorConfig::ControlMode)input.control_mode); - - return 0; -} -int ToProtoData(kortex_actuator_driver::ControlLoop input, ControlLoop *output) -{ - output->set_control_loop(input.control_loop); - - return 0; -} -int ToProtoData(kortex_actuator_driver::LoopSelection input, LoopSelection *output) -{ - output->set_loop_selection((Kinova::Api::ActuatorConfig::ControlLoopSelection)input.loop_selection); - - return 0; -} -int ToProtoData(kortex_actuator_driver::VectorDriveParameters input, VectorDriveParameters *output) -{ - output->set_kpq(input.kpq); - output->set_kiq(input.kiq); - output->set_kpd(input.kpd); - output->set_kid(input.kid); - - return 0; -} -int ToProtoData(kortex_actuator_driver::EncoderDerivativeParameters input, EncoderDerivativeParameters *output) -{ - output->set_max_window_width(input.max_window_width); - output->set_min_encoder_tick_count(input.min_encoder_tick_count); - - return 0; -} -int ToProtoData(kortex_actuator_driver::ControlLoopParameters input, ControlLoopParameters *output) -{ - output->set_loop_selection((Kinova::Api::ActuatorConfig::ControlLoopSelection)input.loop_selection); - output->set_error_saturation(input.error_saturation); - output->set_output_saturation(input.output_saturation); - output->clear_kaz(); - for(int i = 0; i < input.kAz.size(); i++) - { - output->add_kaz(input.kAz[i]); - } - - output->clear_kbz(); - for(int i = 0; i < input.kBz.size(); i++) - { - output->add_kbz(input.kBz[i]); - } - - - return 0; -} -int ToProtoData(kortex_actuator_driver::FrequencyResponse input, FrequencyResponse *output) -{ - output->set_loop_selection((Kinova::Api::ActuatorConfig::ControlLoopSelection)input.loop_selection); - output->set_min_frequency(input.min_frequency); - output->set_max_frequency(input.max_frequency); - output->set_amplitude(input.amplitude); - output->set_duration(input.duration); - - return 0; -} -int ToProtoData(kortex_actuator_driver::StepResponse input, StepResponse *output) -{ - output->set_loop_selection((Kinova::Api::ActuatorConfig::ControlLoopSelection)input.loop_selection); - output->set_amplitude(input.amplitude); - output->set_step_delay(input.step_delay); - output->set_duration(input.duration); - - return 0; -} -int ToProtoData(kortex_actuator_driver::RampResponse input, RampResponse *output) -{ - output->set_loop_selection((Kinova::Api::ActuatorConfig::ControlLoopSelection)input.loop_selection); - output->set_slope(input.slope); - output->set_ramp_delay(input.ramp_delay); - output->set_duration(input.duration); - - return 0; -} -int ToProtoData(kortex_actuator_driver::CustomDataSelection input, CustomDataSelection *output) -{ - output->clear_channel(); - for(int i = 0; i < input.channel.size(); i++) - { - output->add_channel(CustomDataIndex(input.channel[i])); - } - - return 0; -} -int ToProtoData(kortex_actuator_driver::CommandModeInformation input, CommandModeInformation *output) -{ - output->set_command_mode((Kinova::Api::ActuatorConfig::CommandMode)input.command_mode); - - return 0; -} -int ToProtoData(kortex_actuator_driver::Servoing input, Servoing *output) -{ - output->set_enabled(input.enabled); - - return 0; -} -int ToProtoData(kortex_actuator_driver::PositionCommand input, PositionCommand *output) -{ - output->set_position(input.position); - output->set_velocity(input.velocity); - output->set_acceleration(input.acceleration); - - return 0; -} diff --git a/kortex_actuator_driver/src/actuatorconfig_proto_converter.h b/kortex_actuator_driver/src/actuatorconfig_proto_converter.h deleted file mode 100644 index 78ffe9f7..00000000 --- a/kortex_actuator_driver/src/actuatorconfig_proto_converter.h +++ /dev/null @@ -1,82 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_ActuatorConfigPROTO_CONVERTER_H_ -#define _KORTEX_ActuatorConfigPROTO_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "kortex_actuator_driver/AxisPosition.h" -#include "kortex_actuator_driver/AxisOffsets.h" -#include "kortex_actuator_driver/TorqueCalibration.h" -#include "kortex_actuator_driver/TorqueOffset.h" -#include "kortex_actuator_driver/ControlModeInformation.h" -#include "kortex_actuator_driver/ControlLoop.h" -#include "kortex_actuator_driver/LoopSelection.h" -#include "kortex_actuator_driver/VectorDriveParameters.h" -#include "kortex_actuator_driver/EncoderDerivativeParameters.h" -#include "kortex_actuator_driver/ControlLoopParameters.h" -#include "kortex_actuator_driver/FrequencyResponse.h" -#include "kortex_actuator_driver/StepResponse.h" -#include "kortex_actuator_driver/RampResponse.h" -#include "kortex_actuator_driver/CustomDataSelection.h" -#include "kortex_actuator_driver/CommandModeInformation.h" -#include "kortex_actuator_driver/Servoing.h" -#include "kortex_actuator_driver/PositionCommand.h" - - -using namespace Kinova::Api::ActuatorConfig; - -int ToProtoData(kortex_actuator_driver::AxisPosition intput, AxisPosition *output); -int ToProtoData(kortex_actuator_driver::AxisOffsets intput, AxisOffsets *output); -int ToProtoData(kortex_actuator_driver::TorqueCalibration intput, TorqueCalibration *output); -int ToProtoData(kortex_actuator_driver::TorqueOffset intput, TorqueOffset *output); -int ToProtoData(kortex_actuator_driver::ControlModeInformation intput, ControlModeInformation *output); -int ToProtoData(kortex_actuator_driver::ControlLoop intput, ControlLoop *output); -int ToProtoData(kortex_actuator_driver::LoopSelection intput, LoopSelection *output); -int ToProtoData(kortex_actuator_driver::VectorDriveParameters intput, VectorDriveParameters *output); -int ToProtoData(kortex_actuator_driver::EncoderDerivativeParameters intput, EncoderDerivativeParameters *output); -int ToProtoData(kortex_actuator_driver::ControlLoopParameters intput, ControlLoopParameters *output); -int ToProtoData(kortex_actuator_driver::FrequencyResponse intput, FrequencyResponse *output); -int ToProtoData(kortex_actuator_driver::StepResponse intput, StepResponse *output); -int ToProtoData(kortex_actuator_driver::RampResponse intput, RampResponse *output); -int ToProtoData(kortex_actuator_driver::CustomDataSelection intput, CustomDataSelection *output); -int ToProtoData(kortex_actuator_driver::CommandModeInformation intput, CommandModeInformation *output); -int ToProtoData(kortex_actuator_driver::Servoing intput, Servoing *output); -int ToProtoData(kortex_actuator_driver::PositionCommand intput, PositionCommand *output); - -#endif \ No newline at end of file diff --git a/kortex_actuator_driver/src/actuatorconfig_ros_converter.cpp b/kortex_actuator_driver/src/actuatorconfig_ros_converter.cpp deleted file mode 100644 index f9c7698e..00000000 --- a/kortex_actuator_driver/src/actuatorconfig_ros_converter.cpp +++ /dev/null @@ -1,172 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "actuatorconfig_ros_converter.h" - -#include "common_ros_converter.h" - - -int ToRosData(AxisPosition input, kortex_actuator_driver::AxisPosition &output) -{ - output.position = input.position(); - - return 0; -} -int ToRosData(AxisOffsets input, kortex_actuator_driver::AxisOffsets &output) -{ - output.absolute_offset = input.absolute_offset(); - output.relative_offset = input.relative_offset(); - - return 0; -} -int ToRosData(TorqueCalibration input, kortex_actuator_driver::TorqueCalibration &output) -{ - output.global_gain = input.global_gain(); - output.global_offset = input.global_offset(); - - output.gain.clear(); - for(int i = 0; i < input.gain_size(); i++) - { - output.gain.push_back(input.gain(i)); - } - - output.offset.clear(); - for(int i = 0; i < input.offset_size(); i++) - { - output.offset.push_back(input.offset(i)); - } - - return 0; -} -int ToRosData(TorqueOffset input, kortex_actuator_driver::TorqueOffset &output) -{ - output.torque_offset = input.torque_offset(); - - return 0; -} -int ToRosData(ControlModeInformation input, kortex_actuator_driver::ControlModeInformation &output) -{ - output.control_mode = input.control_mode(); - - return 0; -} -int ToRosData(ControlLoop input, kortex_actuator_driver::ControlLoop &output) -{ - output.control_loop = input.control_loop(); - - return 0; -} -int ToRosData(LoopSelection input, kortex_actuator_driver::LoopSelection &output) -{ - output.loop_selection = input.loop_selection(); - - return 0; -} -int ToRosData(VectorDriveParameters input, kortex_actuator_driver::VectorDriveParameters &output) -{ - output.kpq = input.kpq(); - output.kiq = input.kiq(); - output.kpd = input.kpd(); - output.kid = input.kid(); - - return 0; -} -int ToRosData(EncoderDerivativeParameters input, kortex_actuator_driver::EncoderDerivativeParameters &output) -{ - output.max_window_width = input.max_window_width(); - output.min_encoder_tick_count = input.min_encoder_tick_count(); - - return 0; -} -int ToRosData(ControlLoopParameters input, kortex_actuator_driver::ControlLoopParameters &output) -{ - output.loop_selection = input.loop_selection(); - output.error_saturation = input.error_saturation(); - output.output_saturation = input.output_saturation(); - - output.kAz.clear(); - for(int i = 0; i < input.kaz_size(); i++) - { - output.kAz.push_back(input.kaz(i)); - } - - output.kBz.clear(); - for(int i = 0; i < input.kbz_size(); i++) - { - output.kBz.push_back(input.kbz(i)); - } - - return 0; -} -int ToRosData(FrequencyResponse input, kortex_actuator_driver::FrequencyResponse &output) -{ - output.loop_selection = input.loop_selection(); - output.min_frequency = input.min_frequency(); - output.max_frequency = input.max_frequency(); - output.amplitude = input.amplitude(); - output.duration = input.duration(); - - return 0; -} -int ToRosData(StepResponse input, kortex_actuator_driver::StepResponse &output) -{ - output.loop_selection = input.loop_selection(); - output.amplitude = input.amplitude(); - output.step_delay = input.step_delay(); - output.duration = input.duration(); - - return 0; -} -int ToRosData(RampResponse input, kortex_actuator_driver::RampResponse &output) -{ - output.loop_selection = input.loop_selection(); - output.slope = input.slope(); - output.ramp_delay = input.ramp_delay(); - output.duration = input.duration(); - - return 0; -} -int ToRosData(CustomDataSelection input, kortex_actuator_driver::CustomDataSelection &output) -{ - - output.channel.clear(); - for(int i = 0; i < input.channel_size(); i++) - { - output.channel.push_back(input.channel(i)); - } - - return 0; -} -int ToRosData(CommandModeInformation input, kortex_actuator_driver::CommandModeInformation &output) -{ - output.command_mode = input.command_mode(); - - return 0; -} -int ToRosData(Servoing input, kortex_actuator_driver::Servoing &output) -{ - output.enabled = input.enabled(); - - return 0; -} -int ToRosData(PositionCommand input, kortex_actuator_driver::PositionCommand &output) -{ - output.position = input.position(); - output.velocity = input.velocity(); - output.acceleration = input.acceleration(); - - return 0; -} diff --git a/kortex_actuator_driver/src/actuatorconfig_ros_converter.h b/kortex_actuator_driver/src/actuatorconfig_ros_converter.h deleted file mode 100644 index 39f37707..00000000 --- a/kortex_actuator_driver/src/actuatorconfig_ros_converter.h +++ /dev/null @@ -1,82 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_ActuatorConfigROS_CONVERTER_H_ -#define _KORTEX_ActuatorConfigROS_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "kortex_actuator_driver/AxisPosition.h" -#include "kortex_actuator_driver/AxisOffsets.h" -#include "kortex_actuator_driver/TorqueCalibration.h" -#include "kortex_actuator_driver/TorqueOffset.h" -#include "kortex_actuator_driver/ControlModeInformation.h" -#include "kortex_actuator_driver/ControlLoop.h" -#include "kortex_actuator_driver/LoopSelection.h" -#include "kortex_actuator_driver/VectorDriveParameters.h" -#include "kortex_actuator_driver/EncoderDerivativeParameters.h" -#include "kortex_actuator_driver/ControlLoopParameters.h" -#include "kortex_actuator_driver/FrequencyResponse.h" -#include "kortex_actuator_driver/StepResponse.h" -#include "kortex_actuator_driver/RampResponse.h" -#include "kortex_actuator_driver/CustomDataSelection.h" -#include "kortex_actuator_driver/CommandModeInformation.h" -#include "kortex_actuator_driver/Servoing.h" -#include "kortex_actuator_driver/PositionCommand.h" - - -using namespace Kinova::Api::ActuatorConfig; - -int ToRosData(AxisPosition input, kortex_actuator_driver::AxisPosition &output); -int ToRosData(AxisOffsets input, kortex_actuator_driver::AxisOffsets &output); -int ToRosData(TorqueCalibration input, kortex_actuator_driver::TorqueCalibration &output); -int ToRosData(TorqueOffset input, kortex_actuator_driver::TorqueOffset &output); -int ToRosData(ControlModeInformation input, kortex_actuator_driver::ControlModeInformation &output); -int ToRosData(ControlLoop input, kortex_actuator_driver::ControlLoop &output); -int ToRosData(LoopSelection input, kortex_actuator_driver::LoopSelection &output); -int ToRosData(VectorDriveParameters input, kortex_actuator_driver::VectorDriveParameters &output); -int ToRosData(EncoderDerivativeParameters input, kortex_actuator_driver::EncoderDerivativeParameters &output); -int ToRosData(ControlLoopParameters input, kortex_actuator_driver::ControlLoopParameters &output); -int ToRosData(FrequencyResponse input, kortex_actuator_driver::FrequencyResponse &output); -int ToRosData(StepResponse input, kortex_actuator_driver::StepResponse &output); -int ToRosData(RampResponse input, kortex_actuator_driver::RampResponse &output); -int ToRosData(CustomDataSelection input, kortex_actuator_driver::CustomDataSelection &output); -int ToRosData(CommandModeInformation input, kortex_actuator_driver::CommandModeInformation &output); -int ToRosData(Servoing input, kortex_actuator_driver::Servoing &output); -int ToRosData(PositionCommand input, kortex_actuator_driver::PositionCommand &output); - -#endif \ No newline at end of file diff --git a/kortex_actuator_driver/src/actuatorcyclic_proto_converter.h b/kortex_actuator_driver/src/actuatorcyclic_proto_converter.h deleted file mode 100644 index ca58ab6f..00000000 --- a/kortex_actuator_driver/src/actuatorcyclic_proto_converter.h +++ /dev/null @@ -1,56 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_ActuatorCyclicPROTO_CONVERTER_H_ -#define _KORTEX_ActuatorCyclicPROTO_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "kortex_actuator_driver/MessageId.h" -#include "kortex_actuator_driver/Command.h" -#include "kortex_actuator_driver/Feedback.h" -#include "kortex_actuator_driver/CustomData.h" - - -using namespace Kinova::Api::ActuatorCyclic; - -int ToProtoData(kortex_actuator_driver::MessageId intput, MessageId *output); -int ToProtoData(kortex_actuator_driver::Command intput, Command *output); -int ToProtoData(kortex_actuator_driver::Feedback intput, Feedback *output); -int ToProtoData(kortex_actuator_driver::CustomData intput, CustomData *output); - -#endif \ No newline at end of file diff --git a/kortex_actuator_driver/src/actuatorcyclic_ros_converter.h b/kortex_actuator_driver/src/actuatorcyclic_ros_converter.h deleted file mode 100644 index b96bb569..00000000 --- a/kortex_actuator_driver/src/actuatorcyclic_ros_converter.h +++ /dev/null @@ -1,56 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_ActuatorCyclicROS_CONVERTER_H_ -#define _KORTEX_ActuatorCyclicROS_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "kortex_actuator_driver/MessageId.h" -#include "kortex_actuator_driver/Command.h" -#include "kortex_actuator_driver/Feedback.h" -#include "kortex_actuator_driver/CustomData.h" - - -using namespace Kinova::Api::ActuatorCyclic; - -int ToRosData(MessageId input, kortex_actuator_driver::MessageId &output); -int ToRosData(Command input, kortex_actuator_driver::Command &output); -int ToRosData(Feedback input, kortex_actuator_driver::Feedback &output); -int ToRosData(CustomData input, kortex_actuator_driver::CustomData &output); - -#endif \ No newline at end of file diff --git a/kortex_actuator_driver/src/common_proto_converter.cpp b/kortex_actuator_driver/src/common_proto_converter.cpp deleted file mode 100644 index 51241a2c..00000000 --- a/kortex_actuator_driver/src/common_proto_converter.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "common_proto_converter.h" - - -int ToProtoData(kortex_actuator_driver::DeviceHandle input, DeviceHandle *output) -{ - output->set_device_type((Kinova::Api::Common::DeviceTypes)input.device_type); - output->set_device_identifier(input.device_identifier); - output->set_order(input.order); - - return 0; -} -int ToProtoData(kortex_actuator_driver::Empty input, Empty *output) -{ - - return 0; -} -int ToProtoData(kortex_actuator_driver::NotificationOptions input, NotificationOptions *output) -{ - output->set_type((Kinova::Api::Common::NotificationType)input.type); - output->set_rate_m_sec(input.rate_m_sec); - output->set_threshold_value(input.threshold_value); - - return 0; -} -int ToProtoData(kortex_actuator_driver::SafetyHandle input, SafetyHandle *output) -{ - output->set_identifier(input.identifier); - - return 0; -} -int ToProtoData(kortex_actuator_driver::NotificationHandle input, NotificationHandle *output) -{ - output->set_identifier(input.identifier); - - return 0; -} -int ToProtoData(kortex_actuator_driver::SafetyNotification input, SafetyNotification *output) -{ - ToProtoData(input.safety_handle, output->mutable_safety_handle()); - output->set_value((Kinova::Api::Common::SafetyStatusValue)input.value); - ToProtoData(input.timestamp, output->mutable_timestamp()); - ToProtoData(input.user_handle, output->mutable_user_handle()); - ToProtoData(input.connection, output->mutable_connection()); - - return 0; -} -int ToProtoData(kortex_actuator_driver::Timestamp input, Timestamp *output) -{ - output->set_sec(input.sec); - output->set_usec(input.usec); - - return 0; -} -int ToProtoData(kortex_actuator_driver::UserProfileHandle input, UserProfileHandle *output) -{ - output->set_identifier(input.identifier); - output->set_permission(input.permission); - - return 0; -} -int ToProtoData(kortex_actuator_driver::Connection input, Connection *output) -{ - ToProtoData(input.user_handle, output->mutable_user_handle()); - output->set_connection_information(input.connection_information); - output->set_connection_identifier(input.connection_identifier); - - return 0; -} diff --git a/kortex_actuator_driver/src/common_proto_converter.h b/kortex_actuator_driver/src/common_proto_converter.h deleted file mode 100644 index 4112a508..00000000 --- a/kortex_actuator_driver/src/common_proto_converter.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_CommonPROTO_CONVERTER_H_ -#define _KORTEX_CommonPROTO_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "kortex_actuator_driver/DeviceHandle.h" -#include "kortex_actuator_driver/Empty.h" -#include "kortex_actuator_driver/NotificationOptions.h" -#include "kortex_actuator_driver/SafetyHandle.h" -#include "kortex_actuator_driver/NotificationHandle.h" -#include "kortex_actuator_driver/SafetyNotification.h" -#include "kortex_actuator_driver/Timestamp.h" -#include "kortex_actuator_driver/UserProfileHandle.h" -#include "kortex_actuator_driver/Connection.h" - - -using namespace Kinova::Api::Common; - -int ToProtoData(kortex_actuator_driver::DeviceHandle intput, DeviceHandle *output); -int ToProtoData(kortex_actuator_driver::Empty intput, Empty *output); -int ToProtoData(kortex_actuator_driver::NotificationOptions intput, NotificationOptions *output); -int ToProtoData(kortex_actuator_driver::SafetyHandle intput, SafetyHandle *output); -int ToProtoData(kortex_actuator_driver::NotificationHandle intput, NotificationHandle *output); -int ToProtoData(kortex_actuator_driver::SafetyNotification intput, SafetyNotification *output); -int ToProtoData(kortex_actuator_driver::Timestamp intput, Timestamp *output); -int ToProtoData(kortex_actuator_driver::UserProfileHandle intput, UserProfileHandle *output); -int ToProtoData(kortex_actuator_driver::Connection intput, Connection *output); - -#endif \ No newline at end of file diff --git a/kortex_actuator_driver/src/common_ros_converter.cpp b/kortex_actuator_driver/src/common_ros_converter.cpp deleted file mode 100644 index 57946201..00000000 --- a/kortex_actuator_driver/src/common_ros_converter.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "common_ros_converter.h" - - -int ToRosData(DeviceHandle input, kortex_actuator_driver::DeviceHandle &output) -{ - output.device_type = input.device_type(); - output.device_identifier = input.device_identifier(); - output.order = input.order(); - - return 0; -} -int ToRosData(Empty input, kortex_actuator_driver::Empty &output) -{ - - return 0; -} -int ToRosData(NotificationOptions input, kortex_actuator_driver::NotificationOptions &output) -{ - output.type = input.type(); - output.rate_m_sec = input.rate_m_sec(); - output.threshold_value = input.threshold_value(); - - return 0; -} -int ToRosData(SafetyHandle input, kortex_actuator_driver::SafetyHandle &output) -{ - output.identifier = input.identifier(); - - return 0; -} -int ToRosData(NotificationHandle input, kortex_actuator_driver::NotificationHandle &output) -{ - output.identifier = input.identifier(); - - return 0; -} -int ToRosData(SafetyNotification input, kortex_actuator_driver::SafetyNotification &output) -{ - ToRosData(input.safety_handle(), output.safety_handle); - output.value = input.value(); - ToRosData(input.timestamp(), output.timestamp); - ToRosData(input.user_handle(), output.user_handle); - ToRosData(input.connection(), output.connection); - - return 0; -} -int ToRosData(Timestamp input, kortex_actuator_driver::Timestamp &output) -{ - output.sec = input.sec(); - output.usec = input.usec(); - - return 0; -} -int ToRosData(UserProfileHandle input, kortex_actuator_driver::UserProfileHandle &output) -{ - output.identifier = input.identifier(); - output.permission = input.permission(); - - return 0; -} -int ToRosData(Connection input, kortex_actuator_driver::Connection &output) -{ - ToRosData(input.user_handle(), output.user_handle); - output.connection_information = input.connection_information(); - output.connection_identifier = input.connection_identifier(); - - return 0; -} diff --git a/kortex_actuator_driver/src/common_ros_converter.h b/kortex_actuator_driver/src/common_ros_converter.h deleted file mode 100644 index 505d5764..00000000 --- a/kortex_actuator_driver/src/common_ros_converter.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_CommonROS_CONVERTER_H_ -#define _KORTEX_CommonROS_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "kortex_actuator_driver/DeviceHandle.h" -#include "kortex_actuator_driver/Empty.h" -#include "kortex_actuator_driver/NotificationOptions.h" -#include "kortex_actuator_driver/SafetyHandle.h" -#include "kortex_actuator_driver/NotificationHandle.h" -#include "kortex_actuator_driver/SafetyNotification.h" -#include "kortex_actuator_driver/Timestamp.h" -#include "kortex_actuator_driver/UserProfileHandle.h" -#include "kortex_actuator_driver/Connection.h" - - -using namespace Kinova::Api::Common; - -int ToRosData(DeviceHandle input, kortex_actuator_driver::DeviceHandle &output); -int ToRosData(Empty input, kortex_actuator_driver::Empty &output); -int ToRosData(NotificationOptions input, kortex_actuator_driver::NotificationOptions &output); -int ToRosData(SafetyHandle input, kortex_actuator_driver::SafetyHandle &output); -int ToRosData(NotificationHandle input, kortex_actuator_driver::NotificationHandle &output); -int ToRosData(SafetyNotification input, kortex_actuator_driver::SafetyNotification &output); -int ToRosData(Timestamp input, kortex_actuator_driver::Timestamp &output); -int ToRosData(UserProfileHandle input, kortex_actuator_driver::UserProfileHandle &output); -int ToRosData(Connection input, kortex_actuator_driver::Connection &output); - -#endif \ No newline at end of file diff --git a/kortex_actuator_driver/src/main.cpp b/kortex_actuator_driver/src/main.cpp deleted file mode 100644 index e28767ce..00000000 --- a/kortex_actuator_driver/src/main.cpp +++ /dev/null @@ -1,180 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "node.h" -#include "math_util.h" - -#include -#include - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "Actuator_Services"); - - uint32_t cyclic_data_rate = 100; - uint32_t device_id = 0; - - ros::NodeHandle n; - bool valid_ip = false; - - if(argc > 3) - { - stringstream tempId; - tempId << argv[3]; - tempId >> device_id; - - if(tempId.fail() || tempId.bad()) - { - ROS_INFO("ERROR - Bad device ID, shutting down the node..."); - ros::shutdown(); - return 0; - } - } - else if(argc > 2) - { - //Converting the second parameter(the cyclic rate) to an unsigned int variable. - stringstream tempRate; - tempRate << argv[2]; - tempRate >> cyclic_data_rate; - if(tempRate.fail() || tempRate.bad()) - { - ROS_INFO("ERROR - Bad error rate, shutting down the node..."); - ros::shutdown(); - return 0; - } - ROS_INFO("Connecting to IP = %s - node refresh rate = %s, device ID = %d", argv[1], argv[2], device_id); - } - else - { - ROS_INFO("You need to provide an IP adresse as the first parameter and optionnaly a second parameter to specify the cyclic \ - rate and a third parameter(optionnal) to specify a device ID. ex: rosrun package node 127.0.0.1 100 4"); - ros::shutdown(); - return 0; - } - - Actuator_Services services_object(argv[1], n, device_id); - - ros::ServiceServer serviceSetDeviceID = n.advertiseService("SetDeviceID", &Actuator_Services::SetDeviceID, &services_object); - ros::ServiceServer serviceSetApiOptions = n.advertiseService("SetApiOptions", &Actuator_Services::SetApiOptions, &services_object); - ros::ServiceServer serviceSetCyclicStatus = n.advertiseService("SetCyclicStatus", &Actuator_Services::SetCyclicStatus, &services_object); - ros::ServiceServer serviceGetCyclicStatus = n.advertiseService("GetCyclicStatus", &Actuator_Services::GetCyclicStatus, &services_object); - - ros::ServiceServer serviceGetAxisOffsets = n.advertiseService("GetAxisOffsets", &Actuator_Services::GetAxisOffsets, &services_object); - ros::ServiceServer serviceSetAxisOffsets = n.advertiseService("SetAxisOffsets", &Actuator_Services::SetAxisOffsets, &services_object); - ros::ServiceServer serviceReadTorqueCalibration = n.advertiseService("ReadTorqueCalibration", &Actuator_Services::ReadTorqueCalibration, &services_object); - ros::ServiceServer serviceWriteTorqueCalibration = n.advertiseService("WriteTorqueCalibration", &Actuator_Services::WriteTorqueCalibration, &services_object); - ros::ServiceServer serviceSetTorqueOffset = n.advertiseService("SetTorqueOffset", &Actuator_Services::SetTorqueOffset, &services_object); - ros::ServiceServer serviceGetControlMode = n.advertiseService("GetControlMode", &Actuator_Services::GetControlMode, &services_object); - ros::ServiceServer serviceSetControlMode = n.advertiseService("SetControlMode", &Actuator_Services::SetControlMode, &services_object); - ros::ServiceServer serviceGetActivatedControlLoop = n.advertiseService("GetActivatedControlLoop", &Actuator_Services::GetActivatedControlLoop, &services_object); - ros::ServiceServer serviceSetActivatedControlLoop = n.advertiseService("SetActivatedControlLoop", &Actuator_Services::SetActivatedControlLoop, &services_object); - ros::ServiceServer serviceGetVectorDriveParameters = n.advertiseService("GetVectorDriveParameters", &Actuator_Services::GetVectorDriveParameters, &services_object); - ros::ServiceServer serviceSetVectorDriveParameters = n.advertiseService("SetVectorDriveParameters", &Actuator_Services::SetVectorDriveParameters, &services_object); - ros::ServiceServer serviceGetEncoderDerivativeParameters = n.advertiseService("GetEncoderDerivativeParameters", &Actuator_Services::GetEncoderDerivativeParameters, &services_object); - ros::ServiceServer serviceSetEncoderDerivativeParameters = n.advertiseService("SetEncoderDerivativeParameters", &Actuator_Services::SetEncoderDerivativeParameters, &services_object); - ros::ServiceServer serviceGetControlLoopParameters = n.advertiseService("GetControlLoopParameters", &Actuator_Services::GetControlLoopParameters, &services_object); - ros::ServiceServer serviceSetControlLoopParameters = n.advertiseService("SetControlLoopParameters", &Actuator_Services::SetControlLoopParameters, &services_object); - ros::ServiceServer serviceStartFrequencyResponse = n.advertiseService("StartFrequencyResponse", &Actuator_Services::StartFrequencyResponse, &services_object); - ros::ServiceServer serviceStopFrequencyResponse = n.advertiseService("StopFrequencyResponse", &Actuator_Services::StopFrequencyResponse, &services_object); - ros::ServiceServer serviceStartStepResponse = n.advertiseService("StartStepResponse", &Actuator_Services::StartStepResponse, &services_object); - ros::ServiceServer serviceStopStepResponse = n.advertiseService("StopStepResponse", &Actuator_Services::StopStepResponse, &services_object); - ros::ServiceServer serviceStartRampResponse = n.advertiseService("StartRampResponse", &Actuator_Services::StartRampResponse, &services_object); - ros::ServiceServer serviceStopRampResponse = n.advertiseService("StopRampResponse", &Actuator_Services::StopRampResponse, &services_object); - ros::ServiceServer serviceSelectCustomData = n.advertiseService("SelectCustomData", &Actuator_Services::SelectCustomData, &services_object); - ros::ServiceServer serviceGetSelectedCustomData = n.advertiseService("GetSelectedCustomData", &Actuator_Services::GetSelectedCustomData, &services_object); - ros::ServiceServer serviceSetCommandMode = n.advertiseService("SetCommandMode", &Actuator_Services::SetCommandMode, &services_object); - ros::ServiceServer serviceClearFaults = n.advertiseService("ClearFaults", &Actuator_Services::ClearFaults, &services_object); - ros::ServiceServer serviceSetServoing = n.advertiseService("SetServoing", &Actuator_Services::SetServoing, &services_object); - ros::ServiceServer serviceMoveToPosition = n.advertiseService("MoveToPosition", &Actuator_Services::MoveToPosition, &services_object); - ros::ServiceServer serviceGetCommandMode = n.advertiseService("GetCommandMode", &Actuator_Services::GetCommandMode, &services_object); - ros::ServiceServer serviceGetServoing = n.advertiseService("GetServoing", &Actuator_Services::GetServoing, &services_object); - ros::ServiceServer serviceGetTorqueOffset = n.advertiseService("GetTorqueOffset", &Actuator_Services::GetTorqueOffset, &services_object); - ros::ServiceServer serviceRefresh = n.advertiseService("Refresh", &Actuator_Services::Refresh, &services_object); - ros::ServiceServer serviceRefreshCommand = n.advertiseService("RefreshCommand", &Actuator_Services::RefreshCommand, &services_object); - ros::ServiceServer serviceRefreshFeedback = n.advertiseService("RefreshFeedback", &Actuator_Services::RefreshFeedback, &services_object); - ros::ServiceServer serviceRefreshCustomData = n.advertiseService("RefreshCustomData", &Actuator_Services::RefreshCustomData, &services_object); - - - ROS_INFO("Node's services initialized correctly."); - - ros::Publisher pub_feedback = n.advertise("actuator_feedback", 1000); - ros::Publisher pub_joint_state = n.advertise("actuator_feedback/joint_state", 1000); - - kortex_actuator_driver::Feedback feedback; - kortex_actuator_driver::RefreshFeedback::Request req; - kortex_actuator_driver::RefreshFeedback::Response res; - - sensor_msgs::JointState joint_state; - - joint_state.position.resize(1); - joint_state.velocity.resize(1); - joint_state.effort.resize(1); - joint_state.name.resize(1); - - ros::Rate rate(cyclic_data_rate); - while (!ros::isShuttingDown()) - { - try - { - if(services_object.IsCyclicActive()) - { - services_object.RefreshFeedback(req, res); - - feedback.feedback_id = res.output.feedback_id; - - feedback.status_flags = res.output.status_flags; - feedback.jitter_comm = res.output.jitter_comm; - feedback.position = res.output.position; - feedback.velocity = res.output.velocity; - feedback.torque = res.output.torque; - feedback.current_motor = res.output.current_motor; - feedback.voltage = res.output.voltage; - feedback.temperature_motor = res.output.temperature_motor; - feedback.temperature_core = res.output.temperature_core; - feedback.fault_bank_a = res.output.fault_bank_a; - feedback.fault_bank_b = res.output.fault_bank_b; - feedback.warning_bank_a = res.output.warning_bank_a; - feedback.warning_bank_b = res.output.warning_bank_b; - - joint_state.header.stamp = ros::Time::now(); - joint_state.header.frame_id = std::to_string(res.output.feedback_id.identifier); - - joint_state.name[0] = "Actuator"; - joint_state.position[0] = TO_RAD(res.output.position); - joint_state.velocity[0] = TO_RAD(res.output.velocity); - joint_state.effort[0] = res.output.torque; - - pub_feedback.publish(feedback); - pub_joint_state.publish(joint_state); - } - } - - catch (KDetailedException& ex) - { - ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); - } - catch (std::runtime_error& ex2) - { - ROS_INFO("RUN TIME ERROR: %s\n", ex2.what()); - } - - ros::spinOnce(); - - rate.sleep(); - } - - return 1; -} \ No newline at end of file diff --git a/kortex_actuator_driver/src/node.cpp b/kortex_actuator_driver/src/node.cpp deleted file mode 100644 index a8e29cdb..00000000 --- a/kortex_actuator_driver/src/node.cpp +++ /dev/null @@ -1,1112 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "node.h" -#include "common_ros_converter.h" -#include "common_proto_converter.h" -#include "actuatorconfig_ros_converter.h" -#include "actuatorconfig_proto_converter.h" -#include "actuatorcyclic_ros_converter.h" -#include "actuatorcyclic_proto_converter.h" -Actuator_Services::Actuator_Services(char* ip, ros::NodeHandle& n, uint32_t device_id) : m_n(n) -{ - m_transport = new TransportClientUdp(); - m_transport->connect(ip, 10000); - - m_router = new RouterClient(m_transport, [](KError err) { cout << "_________ callback error _________" << err.toString(); }); - m_CurrentDeviceID = device_id; - m_apiOptions.timeout_ms = 3000; - - m_actuatorconfig = new ActuatorConfig::ActuatorConfigClient(m_router); - m_actuatorcyclic = new ActuatorCyclic::ActuatorCyclicClient(m_router); - //If the Device ID is different than 0, it means that we are using the feature DEVICE ROUTING. - if(m_CurrentDeviceID != 0) - { - m_SessionManager = new SessionManager(m_router); - auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); - - createSessionInfo.set_username("admin"); - createSessionInfo.set_password("admin"); - createSessionInfo.set_session_inactivity_timeout(35000); - - m_SessionManager->CreateSession(createSessionInfo); - } - - m_pub_Error = m_n.advertise("KortexError", 1000);std::this_thread::sleep_for(std::chrono::milliseconds(2000)); -} - -bool Actuator_Services::SetDeviceID(kortex_actuator_driver::SetDeviceID::Request &req, kortex_actuator_driver::SetDeviceID::Response &res) -{ - if(m_CurrentDeviceID == 0) - { - auto sessionManager = new SessionManager(m_router); - auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); - - createSessionInfo.set_username("admin"); - createSessionInfo.set_password("admin"); - createSessionInfo.set_session_inactivity_timeout(35000); - - sessionManager->CreateSession(createSessionInfo); - } - - m_CurrentDeviceID = req.device_id; -} - -bool Actuator_Services::SetApiOptions(kortex_actuator_driver::SetApiOptions::Request &req, kortex_actuator_driver::SetApiOptions::Response &res) -{ - m_apiOptions.timeout_ms = req.input.timeout_ms; - - return true; -} - -bool Actuator_Services::GetCyclicStatus(kortex_actuator_driver::GetCyclicStatus::Request &req, kortex_actuator_driver::GetCyclicStatus::Response &res) -{ - res.status.isActive = m_cyclicActive; -} - -bool Actuator_Services::SetCyclicStatus(kortex_actuator_driver::SetCyclicStatus::Request &req, kortex_actuator_driver::SetCyclicStatus::Response &res) -{ - m_cyclicActive = req.status.isActive; -} - -bool Actuator_Services::IsCyclicActive() -{ - return m_cyclicActive; -} - - - - -bool Actuator_Services::GetAxisOffsets(kortex_actuator_driver::GetAxisOffsets::Request &req, kortex_actuator_driver::GetAxisOffsets::Response &res) -{ - Empty input; - AxisOffsets output; - kortex_actuator_driver::KortexError result_error; - - try - { - output = m_actuatorconfig->GetAxisOffsets(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool Actuator_Services::SetAxisOffsets(kortex_actuator_driver::SetAxisOffsets::Request &req, kortex_actuator_driver::SetAxisOffsets::Response &res) -{ - AxisPosition input; - ToProtoData(req.input, &input); - Empty output; - kortex_actuator_driver::KortexError result_error; - - try - { - m_actuatorconfig->SetAxisOffsets(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool Actuator_Services::ReadTorqueCalibration(kortex_actuator_driver::ReadTorqueCalibration::Request &req, kortex_actuator_driver::ReadTorqueCalibration::Response &res) -{ - Empty input; - TorqueCalibration output; - kortex_actuator_driver::KortexError result_error; - - try - { - output = m_actuatorconfig->ReadTorqueCalibration(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool Actuator_Services::WriteTorqueCalibration(kortex_actuator_driver::WriteTorqueCalibration::Request &req, kortex_actuator_driver::WriteTorqueCalibration::Response &res) -{ - TorqueCalibration input; - ToProtoData(req.input, &input); - Empty output; - kortex_actuator_driver::KortexError result_error; - - try - { - m_actuatorconfig->WriteTorqueCalibration(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool Actuator_Services::SetTorqueOffset(kortex_actuator_driver::SetTorqueOffset::Request &req, kortex_actuator_driver::SetTorqueOffset::Response &res) -{ - TorqueOffset input; - ToProtoData(req.input, &input); - Empty output; - kortex_actuator_driver::KortexError result_error; - - try - { - m_actuatorconfig->SetTorqueOffset(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool Actuator_Services::GetControlMode(kortex_actuator_driver::GetControlMode::Request &req, kortex_actuator_driver::GetControlMode::Response &res) -{ - Empty input; - ControlModeInformation output; - kortex_actuator_driver::KortexError result_error; - - try - { - output = m_actuatorconfig->GetControlMode(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool Actuator_Services::SetControlMode(kortex_actuator_driver::SetControlMode::Request &req, kortex_actuator_driver::SetControlMode::Response &res) -{ - ControlModeInformation input; - ToProtoData(req.input, &input); - Empty output; - kortex_actuator_driver::KortexError result_error; - - try - { - m_actuatorconfig->SetControlMode(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool Actuator_Services::GetActivatedControlLoop(kortex_actuator_driver::GetActivatedControlLoop::Request &req, kortex_actuator_driver::GetActivatedControlLoop::Response &res) -{ - Empty input; - ControlLoop output; - kortex_actuator_driver::KortexError result_error; - - try - { - output = m_actuatorconfig->GetActivatedControlLoop(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool Actuator_Services::SetActivatedControlLoop(kortex_actuator_driver::SetActivatedControlLoop::Request &req, kortex_actuator_driver::SetActivatedControlLoop::Response &res) -{ - ControlLoop input; - ToProtoData(req.input, &input); - Empty output; - kortex_actuator_driver::KortexError result_error; - - try - { - m_actuatorconfig->SetActivatedControlLoop(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool Actuator_Services::GetVectorDriveParameters(kortex_actuator_driver::GetVectorDriveParameters::Request &req, kortex_actuator_driver::GetVectorDriveParameters::Response &res) -{ - Empty input; - VectorDriveParameters output; - kortex_actuator_driver::KortexError result_error; - - try - { - output = m_actuatorconfig->GetVectorDriveParameters(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool Actuator_Services::SetVectorDriveParameters(kortex_actuator_driver::SetVectorDriveParameters::Request &req, kortex_actuator_driver::SetVectorDriveParameters::Response &res) -{ - VectorDriveParameters input; - ToProtoData(req.input, &input); - Empty output; - kortex_actuator_driver::KortexError result_error; - - try - { - m_actuatorconfig->SetVectorDriveParameters(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool Actuator_Services::GetEncoderDerivativeParameters(kortex_actuator_driver::GetEncoderDerivativeParameters::Request &req, kortex_actuator_driver::GetEncoderDerivativeParameters::Response &res) -{ - Empty input; - EncoderDerivativeParameters output; - kortex_actuator_driver::KortexError result_error; - - try - { - output = m_actuatorconfig->GetEncoderDerivativeParameters(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool Actuator_Services::SetEncoderDerivativeParameters(kortex_actuator_driver::SetEncoderDerivativeParameters::Request &req, kortex_actuator_driver::SetEncoderDerivativeParameters::Response &res) -{ - EncoderDerivativeParameters input; - ToProtoData(req.input, &input); - Empty output; - kortex_actuator_driver::KortexError result_error; - - try - { - m_actuatorconfig->SetEncoderDerivativeParameters(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool Actuator_Services::GetControlLoopParameters(kortex_actuator_driver::GetControlLoopParameters::Request &req, kortex_actuator_driver::GetControlLoopParameters::Response &res) -{ - LoopSelection input; - ToProtoData(req.input, &input); - ControlLoopParameters output; - kortex_actuator_driver::KortexError result_error; - - try - { - output = m_actuatorconfig->GetControlLoopParameters(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool Actuator_Services::SetControlLoopParameters(kortex_actuator_driver::SetControlLoopParameters::Request &req, kortex_actuator_driver::SetControlLoopParameters::Response &res) -{ - ControlLoopParameters input; - ToProtoData(req.input, &input); - Empty output; - kortex_actuator_driver::KortexError result_error; - - try - { - m_actuatorconfig->SetControlLoopParameters(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool Actuator_Services::StartFrequencyResponse(kortex_actuator_driver::StartFrequencyResponse::Request &req, kortex_actuator_driver::StartFrequencyResponse::Response &res) -{ - FrequencyResponse input; - ToProtoData(req.input, &input); - Empty output; - kortex_actuator_driver::KortexError result_error; - - try - { - m_actuatorconfig->StartFrequencyResponse(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool Actuator_Services::StopFrequencyResponse(kortex_actuator_driver::StopFrequencyResponse::Request &req, kortex_actuator_driver::StopFrequencyResponse::Response &res) -{ - Empty input; - Empty output; - kortex_actuator_driver::KortexError result_error; - - try - { - m_actuatorconfig->StopFrequencyResponse(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool Actuator_Services::StartStepResponse(kortex_actuator_driver::StartStepResponse::Request &req, kortex_actuator_driver::StartStepResponse::Response &res) -{ - StepResponse input; - ToProtoData(req.input, &input); - Empty output; - kortex_actuator_driver::KortexError result_error; - - try - { - m_actuatorconfig->StartStepResponse(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool Actuator_Services::StopStepResponse(kortex_actuator_driver::StopStepResponse::Request &req, kortex_actuator_driver::StopStepResponse::Response &res) -{ - Empty input; - Empty output; - kortex_actuator_driver::KortexError result_error; - - try - { - m_actuatorconfig->StopStepResponse(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool Actuator_Services::StartRampResponse(kortex_actuator_driver::StartRampResponse::Request &req, kortex_actuator_driver::StartRampResponse::Response &res) -{ - RampResponse input; - ToProtoData(req.input, &input); - Empty output; - kortex_actuator_driver::KortexError result_error; - - try - { - m_actuatorconfig->StartRampResponse(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool Actuator_Services::StopRampResponse(kortex_actuator_driver::StopRampResponse::Request &req, kortex_actuator_driver::StopRampResponse::Response &res) -{ - Empty input; - Empty output; - kortex_actuator_driver::KortexError result_error; - - try - { - m_actuatorconfig->StopRampResponse(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool Actuator_Services::SelectCustomData(kortex_actuator_driver::SelectCustomData::Request &req, kortex_actuator_driver::SelectCustomData::Response &res) -{ - CustomDataSelection input; - ToProtoData(req.input, &input); - Empty output; - kortex_actuator_driver::KortexError result_error; - - try - { - m_actuatorconfig->SelectCustomData(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool Actuator_Services::GetSelectedCustomData(kortex_actuator_driver::GetSelectedCustomData::Request &req, kortex_actuator_driver::GetSelectedCustomData::Response &res) -{ - Empty input; - CustomDataSelection output; - kortex_actuator_driver::KortexError result_error; - - try - { - output = m_actuatorconfig->GetSelectedCustomData(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool Actuator_Services::SetCommandMode(kortex_actuator_driver::SetCommandMode::Request &req, kortex_actuator_driver::SetCommandMode::Response &res) -{ - CommandModeInformation input; - ToProtoData(req.input, &input); - Empty output; - kortex_actuator_driver::KortexError result_error; - - try - { - m_actuatorconfig->SetCommandMode(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool Actuator_Services::ClearFaults(kortex_actuator_driver::ClearFaults::Request &req, kortex_actuator_driver::ClearFaults::Response &res) -{ - Empty input; - Empty output; - kortex_actuator_driver::KortexError result_error; - - try - { - m_actuatorconfig->ClearFaults(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool Actuator_Services::SetServoing(kortex_actuator_driver::SetServoing::Request &req, kortex_actuator_driver::SetServoing::Response &res) -{ - Servoing input; - ToProtoData(req.input, &input); - Empty output; - kortex_actuator_driver::KortexError result_error; - - try - { - m_actuatorconfig->SetServoing(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool Actuator_Services::MoveToPosition(kortex_actuator_driver::MoveToPosition::Request &req, kortex_actuator_driver::MoveToPosition::Response &res) -{ - PositionCommand input; - ToProtoData(req.input, &input); - Empty output; - kortex_actuator_driver::KortexError result_error; - - try - { - m_actuatorconfig->MoveToPosition(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool Actuator_Services::GetCommandMode(kortex_actuator_driver::GetCommandMode::Request &req, kortex_actuator_driver::GetCommandMode::Response &res) -{ - Empty input; - CommandModeInformation output; - kortex_actuator_driver::KortexError result_error; - - try - { - output = m_actuatorconfig->GetCommandMode(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool Actuator_Services::GetServoing(kortex_actuator_driver::GetServoing::Request &req, kortex_actuator_driver::GetServoing::Response &res) -{ - Empty input; - Servoing output; - kortex_actuator_driver::KortexError result_error; - - try - { - output = m_actuatorconfig->GetServoing(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool Actuator_Services::GetTorqueOffset(kortex_actuator_driver::GetTorqueOffset::Request &req, kortex_actuator_driver::GetTorqueOffset::Response &res) -{ - Empty input; - TorqueOffset output; - kortex_actuator_driver::KortexError result_error; - - try - { - output = m_actuatorconfig->GetTorqueOffset(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - - -bool Actuator_Services::Refresh(kortex_actuator_driver::Refresh::Request &req, kortex_actuator_driver::Refresh::Response &res) -{ - Command input; - ToProtoData(req.input, &input); - Feedback output; - kortex_actuator_driver::KortexError result_error; - - try - { - output = m_actuatorcyclic->Refresh(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool Actuator_Services::RefreshCommand(kortex_actuator_driver::RefreshCommand::Request &req, kortex_actuator_driver::RefreshCommand::Response &res) -{ - Command input; - ToProtoData(req.input, &input); - Empty output; - kortex_actuator_driver::KortexError result_error; - - try - { - m_actuatorcyclic->RefreshCommand(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool Actuator_Services::RefreshFeedback(kortex_actuator_driver::RefreshFeedback::Request &req, kortex_actuator_driver::RefreshFeedback::Response &res) -{ - MessageId input; - ToProtoData(req.input, &input); - Feedback output; - kortex_actuator_driver::KortexError result_error; - - try - { - output = m_actuatorcyclic->RefreshFeedback(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool Actuator_Services::RefreshCustomData(kortex_actuator_driver::RefreshCustomData::Request &req, kortex_actuator_driver::RefreshCustomData::Response &res) -{ - MessageId input; - ToProtoData(req.input, &input); - CustomData output; - kortex_actuator_driver::KortexError result_error; - - try - { - output = m_actuatorcyclic->RefreshCustomData(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} diff --git a/kortex_actuator_driver/src/node.h b/kortex_actuator_driver/src/node.h deleted file mode 100644 index 6c743e23..00000000 --- a/kortex_actuator_driver/src/node.h +++ /dev/null @@ -1,154 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_SERVICES_H_ -#define _KORTEX_SERVICES_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include "kortex_actuator_driver/GetAxisOffsets.h" -#include "kortex_actuator_driver/SetAxisOffsets.h" -#include "kortex_actuator_driver/ReadTorqueCalibration.h" -#include "kortex_actuator_driver/WriteTorqueCalibration.h" -#include "kortex_actuator_driver/SetTorqueOffset.h" -#include "kortex_actuator_driver/GetControlMode.h" -#include "kortex_actuator_driver/SetControlMode.h" -#include "kortex_actuator_driver/GetActivatedControlLoop.h" -#include "kortex_actuator_driver/SetActivatedControlLoop.h" -#include "kortex_actuator_driver/GetVectorDriveParameters.h" -#include "kortex_actuator_driver/SetVectorDriveParameters.h" -#include "kortex_actuator_driver/GetEncoderDerivativeParameters.h" -#include "kortex_actuator_driver/SetEncoderDerivativeParameters.h" -#include "kortex_actuator_driver/GetControlLoopParameters.h" -#include "kortex_actuator_driver/SetControlLoopParameters.h" -#include "kortex_actuator_driver/StartFrequencyResponse.h" -#include "kortex_actuator_driver/StopFrequencyResponse.h" -#include "kortex_actuator_driver/StartStepResponse.h" -#include "kortex_actuator_driver/StopStepResponse.h" -#include "kortex_actuator_driver/StartRampResponse.h" -#include "kortex_actuator_driver/StopRampResponse.h" -#include "kortex_actuator_driver/SelectCustomData.h" -#include "kortex_actuator_driver/GetSelectedCustomData.h" -#include "kortex_actuator_driver/SetCommandMode.h" -#include "kortex_actuator_driver/ClearFaults.h" -#include "kortex_actuator_driver/SetServoing.h" -#include "kortex_actuator_driver/MoveToPosition.h" -#include "kortex_actuator_driver/GetCommandMode.h" -#include "kortex_actuator_driver/GetServoing.h" -#include "kortex_actuator_driver/GetTorqueOffset.h" -#include "kortex_actuator_driver/Refresh.h" -#include "kortex_actuator_driver/RefreshCommand.h" -#include "kortex_actuator_driver/RefreshFeedback.h" -#include "kortex_actuator_driver/RefreshCustomData.h" -#include "kortex_actuator_driver/KortexError.h" -#include "kortex_actuator_driver/SetDeviceID.h" -#include "kortex_actuator_driver/SetApiOptions.h" -#include "kortex_actuator_driver/SetCyclicStatus.h" -#include "kortex_actuator_driver/GetCyclicStatus.h" -#include "kortex_actuator_driver/ApiOptions.h" -#include "kortex_actuator_driver/CyclicStatus.h" - -using namespace std; -using namespace Kinova::Api; -using namespace Kinova::Api::Common; -using namespace Kinova::Api::ActuatorConfig; -using namespace Kinova::Api::ActuatorCyclic; - -class Actuator_Services -{ - public: - Actuator_Services(char* ip, ros::NodeHandle& n, uint32_t device_id); - bool SetDeviceID(kortex_actuator_driver::SetDeviceID::Request &req, kortex_actuator_driver::SetDeviceID::Response &res); - bool SetApiOptions(kortex_actuator_driver::SetApiOptions::Request &req, kortex_actuator_driver::SetApiOptions::Response &res); - bool GetCyclicStatus(kortex_actuator_driver::GetCyclicStatus::Request &req, kortex_actuator_driver::GetCyclicStatus::Response &res); - bool SetCyclicStatus(kortex_actuator_driver::SetCyclicStatus::Request &req, kortex_actuator_driver::SetCyclicStatus::Response &res); - bool IsCyclicActive(); - - - bool GetAxisOffsets(kortex_actuator_driver::GetAxisOffsets::Request &req, kortex_actuator_driver::GetAxisOffsets::Response &res); - bool SetAxisOffsets(kortex_actuator_driver::SetAxisOffsets::Request &req, kortex_actuator_driver::SetAxisOffsets::Response &res); - bool ReadTorqueCalibration(kortex_actuator_driver::ReadTorqueCalibration::Request &req, kortex_actuator_driver::ReadTorqueCalibration::Response &res); - bool WriteTorqueCalibration(kortex_actuator_driver::WriteTorqueCalibration::Request &req, kortex_actuator_driver::WriteTorqueCalibration::Response &res); - bool SetTorqueOffset(kortex_actuator_driver::SetTorqueOffset::Request &req, kortex_actuator_driver::SetTorqueOffset::Response &res); - bool GetControlMode(kortex_actuator_driver::GetControlMode::Request &req, kortex_actuator_driver::GetControlMode::Response &res); - bool SetControlMode(kortex_actuator_driver::SetControlMode::Request &req, kortex_actuator_driver::SetControlMode::Response &res); - bool GetActivatedControlLoop(kortex_actuator_driver::GetActivatedControlLoop::Request &req, kortex_actuator_driver::GetActivatedControlLoop::Response &res); - bool SetActivatedControlLoop(kortex_actuator_driver::SetActivatedControlLoop::Request &req, kortex_actuator_driver::SetActivatedControlLoop::Response &res); - bool GetVectorDriveParameters(kortex_actuator_driver::GetVectorDriveParameters::Request &req, kortex_actuator_driver::GetVectorDriveParameters::Response &res); - bool SetVectorDriveParameters(kortex_actuator_driver::SetVectorDriveParameters::Request &req, kortex_actuator_driver::SetVectorDriveParameters::Response &res); - bool GetEncoderDerivativeParameters(kortex_actuator_driver::GetEncoderDerivativeParameters::Request &req, kortex_actuator_driver::GetEncoderDerivativeParameters::Response &res); - bool SetEncoderDerivativeParameters(kortex_actuator_driver::SetEncoderDerivativeParameters::Request &req, kortex_actuator_driver::SetEncoderDerivativeParameters::Response &res); - bool GetControlLoopParameters(kortex_actuator_driver::GetControlLoopParameters::Request &req, kortex_actuator_driver::GetControlLoopParameters::Response &res); - bool SetControlLoopParameters(kortex_actuator_driver::SetControlLoopParameters::Request &req, kortex_actuator_driver::SetControlLoopParameters::Response &res); - bool StartFrequencyResponse(kortex_actuator_driver::StartFrequencyResponse::Request &req, kortex_actuator_driver::StartFrequencyResponse::Response &res); - bool StopFrequencyResponse(kortex_actuator_driver::StopFrequencyResponse::Request &req, kortex_actuator_driver::StopFrequencyResponse::Response &res); - bool StartStepResponse(kortex_actuator_driver::StartStepResponse::Request &req, kortex_actuator_driver::StartStepResponse::Response &res); - bool StopStepResponse(kortex_actuator_driver::StopStepResponse::Request &req, kortex_actuator_driver::StopStepResponse::Response &res); - bool StartRampResponse(kortex_actuator_driver::StartRampResponse::Request &req, kortex_actuator_driver::StartRampResponse::Response &res); - bool StopRampResponse(kortex_actuator_driver::StopRampResponse::Request &req, kortex_actuator_driver::StopRampResponse::Response &res); - bool SelectCustomData(kortex_actuator_driver::SelectCustomData::Request &req, kortex_actuator_driver::SelectCustomData::Response &res); - bool GetSelectedCustomData(kortex_actuator_driver::GetSelectedCustomData::Request &req, kortex_actuator_driver::GetSelectedCustomData::Response &res); - bool SetCommandMode(kortex_actuator_driver::SetCommandMode::Request &req, kortex_actuator_driver::SetCommandMode::Response &res); - bool ClearFaults(kortex_actuator_driver::ClearFaults::Request &req, kortex_actuator_driver::ClearFaults::Response &res); - bool SetServoing(kortex_actuator_driver::SetServoing::Request &req, kortex_actuator_driver::SetServoing::Response &res); - bool MoveToPosition(kortex_actuator_driver::MoveToPosition::Request &req, kortex_actuator_driver::MoveToPosition::Response &res); - bool GetCommandMode(kortex_actuator_driver::GetCommandMode::Request &req, kortex_actuator_driver::GetCommandMode::Response &res); - bool GetServoing(kortex_actuator_driver::GetServoing::Request &req, kortex_actuator_driver::GetServoing::Response &res); - bool GetTorqueOffset(kortex_actuator_driver::GetTorqueOffset::Request &req, kortex_actuator_driver::GetTorqueOffset::Response &res); - - bool Refresh(kortex_actuator_driver::Refresh::Request &req, kortex_actuator_driver::Refresh::Response &res); - bool RefreshCommand(kortex_actuator_driver::RefreshCommand::Request &req, kortex_actuator_driver::RefreshCommand::Response &res); - bool RefreshFeedback(kortex_actuator_driver::RefreshFeedback::Request &req, kortex_actuator_driver::RefreshFeedback::Response &res); - bool RefreshCustomData(kortex_actuator_driver::RefreshCustomData::Request &req, kortex_actuator_driver::RefreshCustomData::Response &res); - - -private: - TransportClientUdp* m_transport; - RouterClient* m_router; - - ActuatorConfigClient* m_actuatorconfig; - ActuatorCyclicClient* m_actuatorcyclic; - uint32_t m_CurrentDeviceID; - RouterClientSendOptions m_apiOptions; - - SessionManager* m_SessionManager; - bool m_cyclicActive = false; - - ros::NodeHandle m_n; - ros::Publisher m_pub_Error; -}; -#endif diff --git a/kortex_actuator_driver/src/util/diagnostic.h b/kortex_actuator_driver/src/util/diagnostic.h deleted file mode 100644 index f0199870..00000000 --- a/kortex_actuator_driver/src/util/diagnostic.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) 2018 Kinova inc. All rights reserved. - * - * This software may be modified and distributed under the - * terms of the BSD 3-Clause license. - * - * Refer to the LICENSE file for details. - * - */ -#include - -struct kortex_error -{ - int error_code; - std::string description; -}; \ No newline at end of file diff --git a/kortex_actuator_driver/src/util/math_util.h b/kortex_actuator_driver/src/util/math_util.h deleted file mode 100644 index bf935386..00000000 --- a/kortex_actuator_driver/src/util/math_util.h +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright (c) 2018 Kinova inc. All rights reserved. - * - * This software may be modified and distributed under the - * terms of the BSD 3-Clause license. - * - * Refer to the LICENSE file for details. - * - */ -#include - -#define TO_RAD(degree) degree * M_PI / 180.0 \ No newline at end of file diff --git a/kortex_actuator_driver/srv/GetControlMode.srv b/kortex_actuator_driver/srv/GetControlMode.srv deleted file mode 100644 index 6eb15fb1..00000000 --- a/kortex_actuator_driver/srv/GetControlMode.srv +++ /dev/null @@ -1,3 +0,0 @@ -Empty input ---- -ControlModeInformation output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/GetEncoderDerivativeParameters.srv b/kortex_actuator_driver/srv/GetEncoderDerivativeParameters.srv deleted file mode 100644 index 7815939b..00000000 --- a/kortex_actuator_driver/srv/GetEncoderDerivativeParameters.srv +++ /dev/null @@ -1,3 +0,0 @@ -Empty input ---- -EncoderDerivativeParameters output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/GetVectorDriveParameters.srv b/kortex_actuator_driver/srv/GetVectorDriveParameters.srv deleted file mode 100644 index e6ea88c5..00000000 --- a/kortex_actuator_driver/srv/GetVectorDriveParameters.srv +++ /dev/null @@ -1,3 +0,0 @@ -Empty input ---- -VectorDriveParameters output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/ReadTorqueCalibration.srv b/kortex_actuator_driver/srv/ReadTorqueCalibration.srv deleted file mode 100644 index 45dec9f4..00000000 --- a/kortex_actuator_driver/srv/ReadTorqueCalibration.srv +++ /dev/null @@ -1,3 +0,0 @@ -Empty input ---- -TorqueCalibration output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/Refresh.srv b/kortex_actuator_driver/srv/Refresh.srv deleted file mode 100644 index 432de516..00000000 --- a/kortex_actuator_driver/srv/Refresh.srv +++ /dev/null @@ -1,3 +0,0 @@ -Command input ---- -Feedback output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/RefreshCommand.srv b/kortex_actuator_driver/srv/RefreshCommand.srv deleted file mode 100644 index 9bd2e9fc..00000000 --- a/kortex_actuator_driver/srv/RefreshCommand.srv +++ /dev/null @@ -1,3 +0,0 @@ -Command input ---- -Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/RefreshCustomData.srv b/kortex_actuator_driver/srv/RefreshCustomData.srv deleted file mode 100644 index 5822ae31..00000000 --- a/kortex_actuator_driver/srv/RefreshCustomData.srv +++ /dev/null @@ -1,3 +0,0 @@ -MessageId input ---- -CustomData output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/RefreshFeedback.srv b/kortex_actuator_driver/srv/RefreshFeedback.srv deleted file mode 100644 index f850c63d..00000000 --- a/kortex_actuator_driver/srv/RefreshFeedback.srv +++ /dev/null @@ -1,3 +0,0 @@ -MessageId input ---- -Feedback output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/SetControlMode.srv b/kortex_actuator_driver/srv/SetControlMode.srv deleted file mode 100644 index d5a258a6..00000000 --- a/kortex_actuator_driver/srv/SetControlMode.srv +++ /dev/null @@ -1,3 +0,0 @@ -ControlModeInformation input ---- -Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/SetEncoderDerivativeParameters.srv b/kortex_actuator_driver/srv/SetEncoderDerivativeParameters.srv deleted file mode 100644 index d6d6530d..00000000 --- a/kortex_actuator_driver/srv/SetEncoderDerivativeParameters.srv +++ /dev/null @@ -1,3 +0,0 @@ -EncoderDerivativeParameters input ---- -Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/SetVectorDriveParameters.srv b/kortex_actuator_driver/srv/SetVectorDriveParameters.srv deleted file mode 100644 index 68aba166..00000000 --- a/kortex_actuator_driver/srv/SetVectorDriveParameters.srv +++ /dev/null @@ -1,3 +0,0 @@ -VectorDriveParameters input ---- -Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/StartFrequencyResponse.srv b/kortex_actuator_driver/srv/StartFrequencyResponse.srv deleted file mode 100644 index 38761145..00000000 --- a/kortex_actuator_driver/srv/StartFrequencyResponse.srv +++ /dev/null @@ -1,3 +0,0 @@ -FrequencyResponse input ---- -Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/StartRampResponse.srv b/kortex_actuator_driver/srv/StartRampResponse.srv deleted file mode 100644 index 246d7fa3..00000000 --- a/kortex_actuator_driver/srv/StartRampResponse.srv +++ /dev/null @@ -1,3 +0,0 @@ -RampResponse input ---- -Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/StartStepResponse.srv b/kortex_actuator_driver/srv/StartStepResponse.srv deleted file mode 100644 index d5f063e6..00000000 --- a/kortex_actuator_driver/srv/StartStepResponse.srv +++ /dev/null @@ -1,3 +0,0 @@ -StepResponse input ---- -Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/WriteTorqueCalibration.srv b/kortex_actuator_driver/srv/WriteTorqueCalibration.srv deleted file mode 100644 index cf4dac5d..00000000 --- a/kortex_actuator_driver/srv/WriteTorqueCalibration.srv +++ /dev/null @@ -1,3 +0,0 @@ -TorqueCalibration input ---- -Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/non_generated/GetCyclicStatus.srv b/kortex_actuator_driver/srv/non_generated/GetCyclicStatus.srv deleted file mode 100644 index 2ec06d8c..00000000 --- a/kortex_actuator_driver/srv/non_generated/GetCyclicStatus.srv +++ /dev/null @@ -1,2 +0,0 @@ ---- -CyclicStatus status \ No newline at end of file diff --git a/kortex_actuator_driver/srv/non_generated/SetApiOptions.srv b/kortex_actuator_driver/srv/non_generated/SetApiOptions.srv deleted file mode 100644 index cab7c810..00000000 --- a/kortex_actuator_driver/srv/non_generated/SetApiOptions.srv +++ /dev/null @@ -1,3 +0,0 @@ -ApiOptions input ---- - diff --git a/kortex_actuator_driver/srv/non_generated/SetCyclicStatus.srv b/kortex_actuator_driver/srv/non_generated/SetCyclicStatus.srv deleted file mode 100644 index 05417e2c..00000000 --- a/kortex_actuator_driver/srv/non_generated/SetCyclicStatus.srv +++ /dev/null @@ -1,2 +0,0 @@ -CyclicStatus status ---- \ No newline at end of file diff --git a/kortex_actuator_driver/srv/non_generated/SetDeviceID.srv b/kortex_actuator_driver/srv/non_generated/SetDeviceID.srv deleted file mode 100644 index 396957c5..00000000 --- a/kortex_actuator_driver/srv/non_generated/SetDeviceID.srv +++ /dev/null @@ -1,2 +0,0 @@ -uint32 device_id ---- diff --git a/kortex_actuator_driver/templates/NodeServices.cpp.jinja2 b/kortex_actuator_driver/templates/NodeServices.cpp.jinja2 deleted file mode 100644 index 164e248e..00000000 --- a/kortex_actuator_driver/templates/NodeServices.cpp.jinja2 +++ /dev/null @@ -1,170 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "node.h" -{% for package in detailedPackages %} -{%- if package.HasMessage == 1 -%} -#include "{{package.filename|lower}}_ros_converter.h" -#include "{{package.filename|lower}}_proto_converter.h" -{%- endif %} -{% endfor -%} - -Actuator_Services::Actuator_Services(char* ip, ros::NodeHandle& n, uint32_t device_id) : m_n(n) -{ - m_transport = new TransportClientUdp(); - m_transport->connect(ip, 10000); - - m_router = new RouterClient(m_transport, [](KError err) { cout << "_________ callback error _________" << err.toString(); }); - m_CurrentDeviceID = device_id; - m_apiOptions.timeout_ms = 3000; -{% for package in detailedPackages %} - {%- if package.HasRPC == 1 %} - m_{{package.name|lower}} = new {{package.name}}::{{package.name}}Client(m_router); - {%- endif -%} -{% endfor %} - //If the Device ID is different than 0, it means that we are using the feature DEVICE ROUTING. - if(m_CurrentDeviceID != 0) - { - m_SessionManager = new SessionManager(m_router); - auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); - - createSessionInfo.set_username("admin"); - createSessionInfo.set_password("admin"); - createSessionInfo.set_session_inactivity_timeout(35000); - - m_SessionManager->CreateSession(createSessionInfo); - } - - m_pub_Error = m_n.advertise("KortexError", 1000); -{%- for package in detailedPackages -%} -{%- for method in package.service.method -%} -{%- if 'Topic' in method.name %} - m_pub_{{method.name}} = m_n.advertise("{{method.name}}", 1000); -{%- endif -%} -{%- endfor -%} -{%- endfor -%} - - std::this_thread::sleep_for(std::chrono::milliseconds(2000)); -} - -bool Actuator_Services::SetDeviceID(kortex_actuator_driver::SetDeviceID::Request &req, kortex_actuator_driver::SetDeviceID::Response &res) -{ - if(m_CurrentDeviceID == 0) - { - auto sessionManager = new SessionManager(m_router); - auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); - - createSessionInfo.set_username("admin"); - createSessionInfo.set_password("admin"); - createSessionInfo.set_session_inactivity_timeout(35000); - - sessionManager->CreateSession(createSessionInfo); - } - - m_CurrentDeviceID = req.device_id; -} - -bool Actuator_Services::SetApiOptions(kortex_actuator_driver::SetApiOptions::Request &req, kortex_actuator_driver::SetApiOptions::Response &res) -{ - m_apiOptions.timeout_ms = req.input.timeout_ms; - - return true; -} - -bool Actuator_Services::GetCyclicStatus(kortex_actuator_driver::GetCyclicStatus::Request &req, kortex_actuator_driver::GetCyclicStatus::Response &res) -{ - res.status.isActive = m_cyclicActive; -} - -bool Actuator_Services::SetCyclicStatus(kortex_actuator_driver::SetCyclicStatus::Request &req, kortex_actuator_driver::SetCyclicStatus::Response &res) -{ - m_cyclicActive = req.status.isActive; -} - -bool Actuator_Services::IsCyclicActive() -{ - return m_cyclicActive; -} - -{% for package in detailedPackages %} -{% for method in package.service.method %} -{%- if 'Topic' in method.name %} -bool Actuator_Services::OnNotification{{method.name}}(kortex_actuator_driver::OnNotification{{method.name}}::Request &req, kortex_actuator_driver::OnNotification{{method.name}}::Response &res) -{%- else %} -bool Actuator_Services::{{method.name}}(kortex_actuator_driver::{{method.name}}::Request &req, kortex_actuator_driver::{{method.name}}::Response &res) -{%- endif %} -{ - {%- set splitInputTypeName = method.input_type.split('.') -%} - {% set splitOutputTypeName = method.output_type.split('.') %} - {{splitInputTypeName[4]}} input; - {%- if not method.input_type.split('.')[4] == "Empty" %} - ToProtoData(req.input, &input); - {%- endif %} - {{splitOutputTypeName[4]}} output; - kortex_actuator_driver::KortexError result_error; - - try - { - {%- if not method.output_type.split('.')[4] == "Empty" %} - {%- if not method.input_type.split('.')[4] == "Empty" %} - {%- if 'Topic' in method.name %} - std::function< void ({{package.name}}::{{method.name|replace("Topic", "")}}Notification) > callback = std::bind(&BaseServices::cb_{{method.name}}, this, std::placeholders::_1); - output = m_{{package.name|lower}}->OnNotification{{method.name}}(callback, input); - {%- else %} - output = m_{{package.name|lower}}->{{method.name}}(input, m_CurrentDeviceID, m_apiOptions); - {%- endif %} - {%- else %} - output = m_{{package.name|lower}}->{{method.name}}(m_CurrentDeviceID, m_apiOptions); - {%- endif %} - {%- else %} - {%- if not method.input_type.split('.')[4] == "Empty" %} - m_{{package.name|lower}}->{{method.name}}(input, m_CurrentDeviceID, m_apiOptions); - {%- else %} - m_{{package.name|lower}}->{{method.name}}(m_CurrentDeviceID, m_apiOptions); - {%- endif %} - {%- endif %} - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - {%- if not method.output_type.split('.')[4] == "Empty" %} - ToRosData(output, res.output); - {%- endif %} - return true; -} -{%- if 'Topic' in method.name %} -void Actuator_Services::cb_{{method.name}}({{package.name}}::{{method.name|replace("Topic", "")}}Notification notif) -{ - kortex_actuator_driver::{{method.name|replace("Topic", "")}}Notification ros_msg; - ToRosData(notif, ros_msg); - m_pub_{{method.name}}.publish(ros_msg); -} -{%- endif %} -{% endfor -%} -{% endfor -%} \ No newline at end of file diff --git a/kortex_actuator_driver/templates/NodeServices.h.jinja2 b/kortex_actuator_driver/templates/NodeServices.h.jinja2 deleted file mode 100644 index 385115d6..00000000 --- a/kortex_actuator_driver/templates/NodeServices.h.jinja2 +++ /dev/null @@ -1,118 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_{{packageName}}SERVICES_H_ -#define _KORTEX_{{packageName}}SERVICES_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -{%- for package in detailedPackages %} -#include <{{package.filename}}.pb.h> -{%- endfor %} - -#include -#include - -#include -#include - -{%- for package in detailedPackages %} -{%- if package.HasRPC == 1 %} -#include <{{package.name}}ClientRpc.h> -{%- endif %} -{%- endfor %} -#include -#include - -{%- for package in detailedPackages %} -{%- for method in package.service.method %} -{%- if 'Topic' in method.name %} -#include "kortex_actuator_driver/OnNotification{{method.name}}.h" -#include "kortex_actuator_driver/{{method.name|replace("Topic", "")}}Notification.h" -{%- else %} -#include "kortex_actuator_driver/{{method.name}}.h" -{%- endif %} -{%- endfor %} -{%- endfor %} -#include "kortex_actuator_driver/KortexError.h" -#include "kortex_actuator_driver/SetDeviceID.h" -#include "kortex_actuator_driver/SetApiOptions.h" -#include "kortex_actuator_driver/SetCyclicStatus.h" -#include "kortex_actuator_driver/GetCyclicStatus.h" -#include "kortex_actuator_driver/ApiOptions.h" -#include "kortex_actuator_driver/CyclicStatus.h" - -using namespace std; -using namespace Kinova::Api; -{%- for package in detailedPackages %} -using namespace {{package.namespace}}; -{%- endfor %} - -class Actuator_Services -{ - public: - Actuator_Services(char* ip, ros::NodeHandle& n, uint32_t device_id); - bool SetDeviceID(kortex_actuator_driver::SetDeviceID::Request &req, kortex_actuator_driver::SetDeviceID::Response &res); - bool SetApiOptions(kortex_actuator_driver::SetApiOptions::Request &req, kortex_actuator_driver::SetApiOptions::Response &res); - bool GetCyclicStatus(kortex_actuator_driver::GetCyclicStatus::Request &req, kortex_actuator_driver::GetCyclicStatus::Response &res); - bool SetCyclicStatus(kortex_actuator_driver::SetCyclicStatus::Request &req, kortex_actuator_driver::SetCyclicStatus::Response &res); - bool IsCyclicActive(); -{% for package in detailedPackages %} -{%- for method in package.service.method %} -{%- if 'Topic' in method.name %} - bool OnNotification{{method.name}}(kortex_actuator_driver::OnNotification{{method.name}}::Request &req, kortex_actuator_driver::OnNotification{{method.name}}::Response &res); - void cb_{{method.name}}({{method.name|replace("Topic", "")}}Notification notif); -{%- else %} - bool {{method.name}}(kortex_actuator_driver::{{method.name}}::Request &req, kortex_actuator_driver::{{method.name}}::Response &res); -{%- endif %} -{%- endfor %} -{% endfor %} - -private: - TransportClientUdp* m_transport; - RouterClient* m_router; - {% for package in detailedPackages %} - {%- if package.HasRPC == 1 %} - {{package.name}}Client* m_{{package.name|lower}}; - {%- endif -%} - {% endfor %} - uint32_t m_CurrentDeviceID; - RouterClientSendOptions m_apiOptions; - - SessionManager* m_SessionManager; - bool m_cyclicActive = false; - - ros::NodeHandle m_n; - ros::Publisher m_pub_Error; - - {%- for package in detailedPackages %} - {%- for method in package.service.method %} - {%- if 'Topic' in method.name %} - ros::Publisher m_pub_{{method.name}}; - {%- endif %} - {%- endfor %} - {%- endfor %} -}; -#endif - diff --git a/kortex_actuator_driver/templates/main.jinja2 b/kortex_actuator_driver/templates/main.jinja2 deleted file mode 100644 index 450afef8..00000000 --- a/kortex_actuator_driver/templates/main.jinja2 +++ /dev/null @@ -1,148 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "node.h" -#include "math_util.h" - -#include -#include - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "Actuator_Services"); - - uint32_t cyclic_data_rate = 100; - uint32_t device_id = 0; - - ros::NodeHandle n; - bool valid_ip = false; - - if(argc > 3) - { - stringstream tempId; - tempId << argv[3]; - tempId >> device_id; - - if(tempId.fail() || tempId.bad()) - { - ROS_INFO("ERROR - Bad device ID, shutting down the node..."); - ros::shutdown(); - return 0; - } - } - else if(argc > 2) - { - //Converting the second parameter(the cyclic rate) to an unsigned int variable. - stringstream tempRate; - tempRate << argv[2]; - tempRate >> cyclic_data_rate; - if(tempRate.fail() || tempRate.bad()) - { - ROS_INFO("ERROR - Bad error rate, shutting down the node..."); - ros::shutdown(); - return 0; - } - ROS_INFO("Connecting to IP = %s - node refresh rate = %s, device ID = %d", argv[1], argv[2], device_id); - } - else - { - ROS_INFO("You need to provide an IP adresse as the first parameter and optionnaly a second parameter to specify the cyclic \ - rate and a third parameter(optionnal) to specify a device ID. ex: rosrun package node 127.0.0.1 100 4"); - ros::shutdown(); - return 0; - } - - Actuator_Services services_object(argv[1], n, device_id); - - ros::ServiceServer serviceSetDeviceID = n.advertiseService("SetDeviceID", &Actuator_Services::SetDeviceID, &services_object); - ros::ServiceServer serviceSetApiOptions = n.advertiseService("SetApiOptions", &Actuator_Services::SetApiOptions, &services_object); - ros::ServiceServer serviceSetCyclicStatus = n.advertiseService("SetCyclicStatus", &Actuator_Services::SetCyclicStatus, &services_object); - ros::ServiceServer serviceGetCyclicStatus = n.advertiseService("GetCyclicStatus", &Actuator_Services::GetCyclicStatus, &services_object); - - {% for function in list_function -%} - ros::ServiceServer service{{function}} = n.advertiseService("{{function}}", &Actuator_Services::{{function}}, &services_object); - {% endfor %} - - ROS_INFO("Node's services initialized correctly."); - - ros::Publisher pub_feedback = n.advertise("actuator_feedback", 1000); - ros::Publisher pub_joint_state = n.advertise("actuator_feedback/joint_state", 1000); - - kortex_actuator_driver::Feedback feedback; - kortex_actuator_driver::RefreshFeedback::Request req; - kortex_actuator_driver::RefreshFeedback::Response res; - - sensor_msgs::JointState joint_state; - - joint_state.position.resize(1); - joint_state.velocity.resize(1); - joint_state.effort.resize(1); - joint_state.name.resize(1); - - ros::Rate rate(cyclic_data_rate); - while (!ros::isShuttingDown()) - { - try - { - if(services_object.IsCyclicActive()) - { - services_object.RefreshFeedback(req, res); - - feedback.feedback_id = res.output.feedback_id; - - feedback.status_flags = res.output.status_flags; - feedback.jitter_comm = res.output.jitter_comm; - feedback.position = res.output.position; - feedback.velocity = res.output.velocity; - feedback.torque = res.output.torque; - feedback.current_motor = res.output.current_motor; - feedback.voltage = res.output.voltage; - feedback.temperature_motor = res.output.temperature_motor; - feedback.temperature_core = res.output.temperature_core; - feedback.fault_bank_a = res.output.fault_bank_a; - feedback.fault_bank_b = res.output.fault_bank_b; - feedback.warning_bank_a = res.output.warning_bank_a; - feedback.warning_bank_b = res.output.warning_bank_b; - - joint_state.header.stamp = ros::Time::now(); - joint_state.header.frame_id = std::to_string(res.output.feedback_id.identifier); - - joint_state.name[0] = "Actuator"; - joint_state.position[0] = TO_RAD(res.output.position); - joint_state.velocity[0] = TO_RAD(res.output.velocity); - joint_state.effort[0] = res.output.torque; - - pub_feedback.publish(feedback); - pub_joint_state.publish(joint_state); - } - } - - catch (KDetailedException& ex) - { - ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); - } - catch (std::runtime_error& ex2) - { - ROS_INFO("RUN TIME ERROR: %s\n", ex2.what()); - } - - ros::spinOnce(); - - rate.sleep(); - } - - return 1; -} diff --git a/kortex_actuator_driver/templates/proto_converter.cpp.jinja2 b/kortex_actuator_driver/templates/proto_converter.cpp.jinja2 deleted file mode 100644 index 928fd160..00000000 --- a/kortex_actuator_driver/templates/proto_converter.cpp.jinja2 +++ /dev/null @@ -1,84 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "{{currentFilename|lower}}_proto_converter.h" -{% if 'Common' not in currentPackageName %} -#include "common_proto_converter.h" -{% endif %} - -{% for detailed_message in item -%} -int ToProtoData(kortex_actuator_driver::{{detailed_message.message.name}} input, {{detailed_message.message.name}} *output) -{ - {%- for field in detailed_message.message.field %} - {%- if not field.HasField("oneof_index") -%} - {%- if field.label == 3 %} {# Si c'est un repeated #} - {%- if field.type == 11 %} - output->clear_{{field.name|lower}}(); - for(int i = 0; i < input.{{field.name}}.size(); i++) - { - ToProtoData(input.{{field.name}}[i], output->add_{{field.name|lower}}()); - } - {%- elif field.type == 14 %} {# ENUM #} - output->clear_{{field.name|lower}}(); - for(int i = 0; i < input.{{field.name}}.size(); i++) - { - {%- set list1 = field.type_name.split('.') -%} {# Cette ligne sert à enlever les namespace dans le nom du type #} - output->add_{{field.name|lower}}({{list1[4]}}(input.{{field.name}}[i])); - } - {%- else %} - output->clear_{{field.name|lower}}(); - for(int i = 0; i < input.{{field.name}}.size(); i++) - { - output->add_{{field.name|lower}}(input.{{field.name}}[i]); - } - {% endif -%} - {% else -%} - {%- if field.type == 11 %} - ToProtoData(input.{{field.name}}, output->mutable_{{field.name}}()); - {%- elif field.type == 14 %}{# ENUM #} - {%- set list1 = field.type_name.split('.') -%} {# Cette ligne sert à enlever les namespace dans le nom du type #} - output->set_{{field.name}}(({{field.type_name|replace(".", "", 1)|replace(".", "::")}})input.{{field.name}}); - {%- elif field.type == 12 %} - output->set_{{field.name}}(std::string(input.{{field.name}}.begin(), input.{{field.name}}.end())); - {%- else %} - output->set_{{field.name}}(input.{{field.name}}); - {%- endif -%} - {%- endif -%} - {%- endif -%} - {%- endfor -%} - - {% if detailed_message.HasOneOf == "true" %} - - {% for field in detailed_message.message.field %} - {%- if field.HasField("oneof_index") -%} - if(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.size() > 0) - { - {% if field.type == 11 -%} - ToProtoData(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0], output->mutable_{{field.name}}()); - {%- elif field.type == 14 %} - {%- set list1 = field.type_name.split('.') -%} - output->set_{{field.name}}(({{list1[4]}})input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0]); - {%- else %} - output->set_{{field.name}}(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0]); - {%- endif %} - } - {% endif %} - {%- endfor -%} - {% endif %} - - return 0; -} -{% endfor %} diff --git a/kortex_actuator_driver/templates/proto_converter.h.jinja2 b/kortex_actuator_driver/templates/proto_converter.h.jinja2 deleted file mode 100644 index 049cc9a2..00000000 --- a/kortex_actuator_driver/templates/proto_converter.h.jinja2 +++ /dev/null @@ -1,52 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_{{currentPackageName}}PROTO_CONVERTER_H_ -#define _KORTEX_{{currentPackageName}}PROTO_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include <{{currentFilename}}.pb.h> - -#include -#include - -#include -#include - -#include -#include -#include -#include - -{% for detailed_message in item -%} -#include "kortex_actuator_driver/{{detailed_message.message.name}}.h" -{% endfor %} - -using namespace {{currentNamespace}}; - -{% for detailed_message in item -%} -int ToProtoData(kortex_actuator_driver::{{detailed_message.message.name}} intput, {{detailed_message.message.name}} *output); -{% endfor %} -#endif \ No newline at end of file diff --git a/kortex_actuator_driver/templates/ros_converter.cpp.jinja2 b/kortex_actuator_driver/templates/ros_converter.cpp.jinja2 deleted file mode 100644 index 5776b1b2..00000000 --- a/kortex_actuator_driver/templates/ros_converter.cpp.jinja2 +++ /dev/null @@ -1,86 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "{{currentFilename|lower}}_ros_converter.h" -{% if 'Common' not in currentPackageName %} -#include "common_ros_converter.h" -{% endif %} - -{% for detailed_message in item -%} -int ToRosData({{detailed_message.message.name}} input, kortex_actuator_driver::{{detailed_message.message.name}} &output) -{ - {%- for field in detailed_message.message.field %} - {%- if not field.HasField("oneof_index") %} - {%- if field.label == 3 %} {# Si c'est un repeated #} - {% if field.type == 11 %} - {%- set splitTypeName = field.type_name.split('.') -%} - output.{{field.name}}.clear(); - for(int i = 0; i < input.{{field.name|lower}}_size(); i++) - { - kortex_actuator_driver::{{splitTypeName[4]}} temp; - ToRosData(input.{{field.name}}(i), temp); - output.{{field.name}}.push_back(temp); - } - {%- else %} - output.{{field.name}}.clear(); - for(int i = 0; i < input.{{field.name|lower}}_size(); i++) - { - output.{{field.name}}.push_back(input.{{field.name|lower}}(i)); - } - {%- endif %} - {%- else %} - {%- if field.type == 11 %} - ToRosData(input.{{field.name}}(), output.{{field.name}}); - {%- elif field.type == 14 %} - {%- set list1 = field.type_name.split('.') -%} {# Cette ligne sert à enlever les namespace dans le nom du type #} - output.{{field.name}} = input.{{field.name}}(); - {%- elif field.type == 12 %} - output.{{field.name}} = std::vector(input.{{field.name}}().begin(), input.{{field.name}}().end()); - {%- else %} - output.{{field.name}} = input.{{field.name}}(); - {%- endif %} - {%- endif %} - {%- endif %} - {%- endfor %} - - {% if detailed_message.HasOneOf == "true" %} - auto oneof_type = input.{{detailed_message.message.ListFields()[-1][1][0].name}}_case(); - - switch(oneof_type) - { - {%- for field in detailed_message.message.field -%} - {%- if field.HasField("oneof_index") -%} - {%- set splitTypeName = field.type_name.split('.') %} - {%- set EnumName = field.name.replace("_", " ").title().replace(" ", "") %} - case {{detailed_message.message.name}}::k{{EnumName}}: - { - {%- if field.type == 11 %} - kortex_actuator_driver::{{splitTypeName[4]}} temp; - ToRosData(input.{{field.name}}(), temp); - output.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.push_back(temp); - {%- elif field.type == 14 %} - output.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.push_back(input.{{field.name}}()); - {% endif %} - break; - } - {% endif %} - {%- endfor %} - } - {% endif -%} - - return 0; -} -{% endfor %} diff --git a/kortex_actuator_driver/templates/ros_converter.h.jinja2 b/kortex_actuator_driver/templates/ros_converter.h.jinja2 deleted file mode 100644 index 254292c2..00000000 --- a/kortex_actuator_driver/templates/ros_converter.h.jinja2 +++ /dev/null @@ -1,52 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_{{currentPackageName}}ROS_CONVERTER_H_ -#define _KORTEX_{{currentPackageName}}ROS_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include <{{currentFilename}}.pb.h> - -#include -#include - -#include -#include - -#include -#include -#include -#include - -{% for detailed_message in item -%} -#include "kortex_actuator_driver/{{detailed_message.message.name}}.h" -{% endfor %} - -using namespace {{currentNamespace}}; - -{% for detailed_message in item -%} -int ToRosData({{detailed_message.message.name}} input, kortex_actuator_driver::{{detailed_message.message.name}} &output); -{% endfor %} -#endif \ No newline at end of file diff --git a/kortex_actuator_driver/templates/ros_enum.jinja2 b/kortex_actuator_driver/templates/ros_enum.jinja2 deleted file mode 100644 index 164146fc..00000000 --- a/kortex_actuator_driver/templates/ros_enum.jinja2 +++ /dev/null @@ -1,3 +0,0 @@ -{% for member in item.value %} -uint32 {{member.name}} = {{member.number}} -{% endfor %} diff --git a/kortex_actuator_driver/templates/ros_message.jinja2 b/kortex_actuator_driver/templates/ros_message.jinja2 deleted file mode 100644 index 167f685f..00000000 --- a/kortex_actuator_driver/templates/ros_message.jinja2 +++ /dev/null @@ -1,44 +0,0 @@ -{%- for member in item.field -%} -{%- if not member.HasField("oneof_index") -%} -{%- if member.type == 9 %} {# TYPE_STRING #} -string{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 12 %} {# TYPE_BYTES #} -uint8[] {{member.name}} -{%- elif member.type == 1 %} {# TYPE_DOUBLE #} -float64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 7 %} {# TYPE_FIXED32 #} -uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 6 %} {# TYPE_FIXED64 #} -uint64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 2 %} {# TYPE_FLOAT #} -float32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 5 %} {# TYPE_INT32 #} -int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 3 %} {# TYPE_INT64 #} -int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 15 %} {# TYPE_SFIXED32 #} -int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 16 %} {# TYPE_SFIXED64 #} -int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 17 %} {# TYPE_SINT32 #} -int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 18 %} {# TYPE_SINT64 #} -int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 13 %} {# TYPE_UINT32 #} -uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 4 %} {# TYPE_UINT64 #} -uint64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 14 -%} {# TYPE_ENUM #} -{% set list1 = member.type_name.split('.') %} -uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 8 %} {# TYPE_BOOL #} -bool {{member.name}} -{%- elif member.type == 11 %}{# TYPE MESSAGE #} -{% set list1 = member.type_name.split('.') %} -{{list1|last}}{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- endif -%} -{%- endif -%} -{%- endfor -%} -{%- if HasOneOf %} -{{item.name}}_{{item.ListFields()[-1][1][0].name}} oneof_{{item.ListFields()[-1][1][0].name}} -{%- endif -%} \ No newline at end of file diff --git a/kortex_actuator_driver/templates/ros_oneof.jinja2 b/kortex_actuator_driver/templates/ros_oneof.jinja2 deleted file mode 100644 index 4fac302a..00000000 --- a/kortex_actuator_driver/templates/ros_oneof.jinja2 +++ /dev/null @@ -1,9 +0,0 @@ -{%- for member in item.field -%} -{% if member.HasField("oneof_index") %} -{% if member.type == 11 %} -{% set list1 = member.type_name.split('.') %}{{list1[4]}}[] {{member.name}} -{%- else -%} -uint32[] {{member.name}} -{%- endif -%} -{%- endif -%} -{% endfor %} \ No newline at end of file diff --git a/kortex_actuator_driver/templates/ros_service.jinja2 b/kortex_actuator_driver/templates/ros_service.jinja2 deleted file mode 100644 index cc015cf8..00000000 --- a/kortex_actuator_driver/templates/ros_service.jinja2 +++ /dev/null @@ -1,5 +0,0 @@ -{% set split_input_type = item.input_type.split('.') %} -{%- set split_output_type = item.output_type.split('.') -%} -{{split_input_type[4]}} input ---- -{{split_output_type[4]}} output \ No newline at end of file diff --git a/kortex_api/.gitignore b/kortex_api/.gitignore new file mode 100644 index 00000000..349cf4e2 --- /dev/null +++ b/kortex_api/.gitignore @@ -0,0 +1,2 @@ +include +lib diff --git a/kortex_api/include/.gitignore b/kortex_api/include/.gitignore deleted file mode 100644 index 7c286318..00000000 --- a/kortex_api/include/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -client/ -client_stubs/ -common/ -google/ -messages/ diff --git a/kortex_api/lib/.gitignore b/kortex_api/lib/.gitignore deleted file mode 100644 index e67bfe38..00000000 --- a/kortex_api/lib/.gitignore +++ /dev/null @@ -1 +0,0 @@ -libKortexApi.a \ No newline at end of file diff --git a/kortex_api/readme.md b/kortex_api/readme.md index 3bfe9d9f..dc16f5b0 100644 --- a/kortex_api/readme.md +++ b/kortex_api/readme.md @@ -11,32 +11,13 @@ * --> # Kortex API -This package contains all the C++ files used by the driver nodes and the device manager. This package is mandatory because most of the other packages call it. More detailed documentation is available on the Kortex API [repository](https://github.com/Kinovarobotics/kortex). +This package contains all the C++ files used by the driver node. This package is mandatory because most of the other packages use it. More detailed documentation is available on the Kortex API [repository](https://github.com/Kinovarobotics/kortex). - +## Downloading the Kortex API -1. [Install C++ Kortex API & the needed dependencies](#install-cpp-kortex-api-the-needed-dependencies) -1. [Content](#content) - 1. [include](#include) - 1. [lib](#lib) +When you use `catkin_make` to build `ros_kortex`, the [download_kortex_api](./scripts/download_kortex_api.bash) script automatically checks whether or not the API was downloaded. If it is not present, the script downloads and extracts it in the correct folders. - - - -## Install C++ Kortex API and dependencies - -> *Manual installation using downloaded archive:* -> + Download the archive via the [Kinova drive](https://drive.google.com/file/d/1ASbEsulf5cByru8Hy1oBZJyNDBa9H22C/view). -> + Uncompress the content of the archive and copy the content of
/kortex_api/cpp/linux_x86/include/ and /kortex_api/cpp/linux_x86/lib/
to
kortex_api/include/ and kortex_api/lib/
respectively. -> + Delete the directory /kortex_api/include/google/ - - - -## Content -The content of this package should not be deleted or changed. - -### include -Contains Kortex API header files. - -### lib -Contains Kortex API binary files. +You can also manually download the API [from here](https://artifactory.kinovaapps.com/artifactory/generic-local-public/kortex/API/2.0.0/kortex_api_2.0.0.zip), extract it and copy the contents of the include and lib folders: + - ```cpp/linux_gcc_x86-64/lib``` to the ```kortex_api/lib``` folder + - ```cpp/linux_gcc_x86-64/include``` to the ```kortex_api/include``` folder + diff --git a/kortex_api/scripts/download_kortex_api.bash b/kortex_api/scripts/download_kortex_api.bash new file mode 100755 index 00000000..07eaf857 --- /dev/null +++ b/kortex_api/scripts/download_kortex_api.bash @@ -0,0 +1,81 @@ +#!/bin/bash + +# Designed to be run from working directory kortex_api/scripts + +KORTEX_API_FOLDER_PATH="../" +INCLUDE_FOLDER_PATH="${KORTEX_API_FOLDER_PATH}/include" +LIB_FOLDER_PATH="${KORTEX_API_FOLDER_PATH}/lib" + +# Check if include and lib directories exist +if [ ! -d ${INCLUDE_FOLDER_PATH} ]; then + echo "include does not exist, creating directory..." + mkdir ${INCLUDE_FOLDER_PATH} +fi +if [ ! -d ${LIB_FOLDER_PATH} ]; then + echo "lib does not exist, creating directory..." + mkdir ${LIB_FOLDER_PATH} +fi + +# Check if include and lib directories are empty +if [ ! -z "$(ls -A ${INCLUDE_FOLDER_PATH})" ]; then + echo "include is not empty, exiting..." + exit 0 +fi + +if [ ! -z "$(ls -A ${LIB_FOLDER_PATH})" ]; then + echo "lib is not empty, exiting..." + exit 0 +fi + +# Download the API from Google Drive +echo "Downloading the Kortex API from the Web..." +wget -q -O kortex_api.zip https://artifactory.kinovaapps.com/artifactory/generic-local-public/kortex/API/2.0.0/kortex_api_2.0.0.zip +RESULT=$? +if [ "${RESULT}" -ne 0 ]; then + echo "ERROR while fetching the kortex api. code = ${RESULT}" + exit $? +fi + +# Unzip it +unzip -d kortex_api kortex_api.zip > /dev/null +RESULT=$? +if [ "${RESULT}" -ne 0 ]; then + echo "ERROR while extracting the kortex api. code = ${RESULT}" + exit $? +fi + +# Copy the include folder +cp -R kortex_api/cpp/linux_gcc_x86-64/include/ ${KORTEX_API_FOLDER_PATH} +RESULT=$? +if [ "${RESULT}" -ne 0 ]; then + echo "ERROR while copying the kortex api header files. code = ${RESULT}" + exit $? +fi + +# Copy the lib folder +cp -R kortex_api/cpp/linux_gcc_x86-64/lib/ ${KORTEX_API_FOLDER_PATH} +RESULT=$? +if [ "${RESULT}" -ne 0 ]; then + echo "ERROR while copying the kortex api library. code = ${RESULT}" + exit $? +fi + +# Make the libraries executable +chmod +x ${LIB_FOLDER_PATH}/release/libKortexApi.a +RESULT=$? +if [ "${RESULT}" -ne 0 ]; then + echo "ERROR while executing chmod +x on the kortex api release library. code = ${RESULT}" + exit $? +fi + +chmod +x ${LIB_FOLDER_PATH}/debug/libKortexApi.a +RESULT=$? +if [ "${RESULT}" -ne 0 ]; then + echo "ERROR while executing chmod +x on the kortex api debug library. code = ${RESULT}" + exit $? +fi + +# Cleanup +rm -rf kortex_api/ kortex_api.zip + +exit ${RESULT} diff --git a/kortex_api/scripts/source_and_build_workspace.bash b/kortex_api/scripts/source_and_build_workspace.bash new file mode 100755 index 00000000..665847ce --- /dev/null +++ b/kortex_api/scripts/source_and_build_workspace.bash @@ -0,0 +1,9 @@ +#!/bin/bash + +# This is a helper script that sources ROS, cleans and builds the catkin workspace +# It is meant to be run from the root of the workspace +# Can be used by end users, but mainly used because Docker (for CI) needs en executable file and cannot take multiple bash commands + +source /opt/ros/kinetic/setup.bash +rm -rf devel/ build/ +catkin_make diff --git a/kortex_bringup/CMakeLists.txt b/kortex_bringup/CMakeLists.txt deleted file mode 100644 index 12fa6081..00000000 --- a/kortex_bringup/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -cmake_minimum_required(VERSION 2.8.3) - -project(kortex_bringup) - -find_package(catkin REQUIRED) - -catkin_package() - -find_package(roslaunch) diff --git a/kortex_bringup/launch/kortex_actuator_driver.launch b/kortex_bringup/launch/kortex_actuator_driver.launch deleted file mode 100644 index 28b46bcc..00000000 --- a/kortex_bringup/launch/kortex_actuator_driver.launch +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/kortex_bringup/launch/kortex_device_manager.launch b/kortex_bringup/launch/kortex_device_manager.launch deleted file mode 100644 index 89eb42d0..00000000 --- a/kortex_bringup/launch/kortex_device_manager.launch +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/kortex_bringup/launch/kortex_driver.launch b/kortex_bringup/launch/kortex_driver.launch deleted file mode 100644 index 7771ff35..00000000 --- a/kortex_bringup/launch/kortex_driver.launch +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - [base_feedback/joint_state] - - - - - - - - diff --git a/kortex_bringup/launch/kortex_vision_config_driver.launch b/kortex_bringup/launch/kortex_vision_config_driver.launch deleted file mode 100644 index 699dc56e..00000000 --- a/kortex_bringup/launch/kortex_vision_config_driver.launch +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/kortex_bringup/package.xml b/kortex_bringup/package.xml deleted file mode 100644 index 06c924cb..00000000 --- a/kortex_bringup/package.xml +++ /dev/null @@ -1,21 +0,0 @@ - - kortex_bringup - 1.0.0 - -

This package contains the launch files for the Gen3 Kortex drivers

-
- KINOVA - - BSD - catkin - roslaunch - joint_state_publisher - robot_state_publisher - rviz - joint_state_publisher - xacro - kortex_description - - - -
diff --git a/kortex_bringup/readme.md b/kortex_bringup/readme.md deleted file mode 100644 index ec73fc14..00000000 --- a/kortex_bringup/readme.md +++ /dev/null @@ -1,112 +0,0 @@ - - -# Kortex bringup - -## Overview -This package contains the parametrized files that launch the nodes and load the correct parameters and robot description to the Parameter Server. - - - -1. [kortex_actuator_driver](#actuator-driver) -1. [kortex_device_manager](#device_manager) -1. [kortex_driver](#driver) -1. [kortex_vision_config_driver](#vision_config) - - - - - -## kortex_actuator_driver - -This file launches the kortex_actuator_driver node and, optionally, the kortex_device_manager node. -The launch can be parametrized with arguments : - -**Required argument**: -- **ip_address** : IP address of your device. - -**Optional arguments**: -- **robot_name** : Namespace for your robot. The default value is **my_kortex_actuator**. -- **cycle_rate** : Kortex API rate (in Hz) for communicating with the device and publishing topics. The default value is **60**. -- **device_id** : Device ID of the actuator you want to control. If this argument is a non-empty string, the device routing mechanism will be activated. See [the kortex_actuator_driver node documentation](../kortex_actuator_driver/readme.md) for more details. The default value is an empty string (not activated). -- **start_device_manager** : If this argument is true, the [kortex_device_manager node](../kortex_device_manager/readme.md) will also be started. The default value is **true**. - - -To launch it, run the following command in a terminal (but change the IP address for your own!) : - -roslaunch kortex_bringup kortex_actuator_driver.launch ip_address:=192.168.1.10 - -To launch it with optional arguments, run the following command in a terminal : - -roslaunch kortex_bringup kortex_actuator_driver.launch ip_address:=192.168.1.10 robot_name:=my_extraordinary_robot cycle_rate:=50 device_id:=2 - - -## kortex_device_manager - -This file launches the kortex_device_manager node. -The launch can be parametrized with arguments : - -**Required argument**: -- **ip_address** : IP address of your device. - -To launch it, run the following command in a terminal (but change the IP address for your own!) : - -roslaunch kortex_bringup kortex_device_manager.launch ip_address:=192.168.1.10 - - -## kortex_driver - -This file launches the kortex_actuator_driver node and, optionally, the kortex_device_manager node. -The launch can be parametrized with arguments : - -**Required argument**: -- **ip_address** : IP address of your device. - -**Optional arguments**: -- **arm** : Name of your robot arm model. See the kortex_description/arms folder to learn about the available robot models. The default value is **gen3**. -- **gripper** : Name of your robot arm's end effector. See the kortex_description/grippers folder to learn about the available end effector models. The default value is an empty string for now because grippers aren't supported. -- **robot_name** : Namespace for your robot. The default value is **my_(arm argument)**. -- **cycle_rate** : Kortex API rate (in Hz) for communicating with the device and publishing topics. The default value is **60**. -- **start_device_manager** : If this argument is true, the [kortex_device_manager node](../kortex_device_manager/readme.md) will also be started. The default value is **true**. -- **start_rviz** : If this argument is true, a [RViz](http://wiki.ros.org/rviz) window will also be started. The default value is **true**. - -To launch it, run the following command in a terminal (but change the IP address for your own!) : - -roslaunch kortex_bringup kortex_driver.launch ip_address:=192.168.1.10 - -To launch it with optional arguments, run the following command in a terminal : - -roslaunch kortex_bringup kortex_driver.launch ip_address:=192.168.1.10 robot_name:=my_extraordinary_gen3_robot cycle_rate:=50 start_rviz:=false - - -## kortex_vision_config - -This file launches the kortex_vision_config node and, optionally, the kortex_device_manager node. -The launch can be parametrized with arguments : - -**Required argument**: -- **ip_address** : IP address of your device. - -**Optional arguments**: -- **robot_name** : Namespace for your robot. The default value is **my_vision_device**. -- **cycle_rate** : Kortex API rate (in Hz) for communicating with the device and publishing topics. The default value is **60**. -- **device_id** : Device ID of the vision device you want to communicate with. If this argument is a non-empty string, the device routing mechanism will be activated. See [the kortex_vision_config_driver node documentation](../kortex_vision_config_driver/readme.md) for more details. The default value is an empty string (not activated). -- **start_device_manager** : If this argument is true, the [the kortex_device_manager node](../kortex_device_manager/readme.md) will also be started. The default value is **true**. - -To launch it, run the following command in a terminal (but change the IP address for your own!) : - -roslaunch kortex_bringup kortex_vision_config.launch ip_address:=192.168.1.10 - -To launch it with optional arguments, run the following command in a terminal : - -roslaunch kortex_bringup kortex_vision_config.launch ip_address:=192.168.1.10 robot_name:=my_extraordinary_vision_device cycle_rate:=50 start_device_manager:=false - diff --git a/kortex_control/CMakeLists.txt b/kortex_control/CMakeLists.txt new file mode 100644 index 00000000..81df28cd --- /dev/null +++ b/kortex_control/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 2.8.3) + +project(kortex_control) + +find_package(catkin REQUIRED) + +catkin_package() + +find_package(roslaunch) + +foreach(dir config launch meshes urdf) + install(DIRECTORY ${dir}/ + DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/${dir}) +endforeach(dir) diff --git a/kortex_control/arms/gen3/config/joint_position_controllers.yaml b/kortex_control/arms/gen3/config/joint_position_controllers.yaml new file mode 100644 index 00000000..bb6fa834 --- /dev/null +++ b/kortex_control/arms/gen3/config/joint_position_controllers.yaml @@ -0,0 +1,85 @@ +# Publish all joint states ----------------------------------- +joint_state_controller: + type: joint_state_controller/JointStateController + publish_rate: 50 + +gen3_joint_trajectory_controller: + type: effort_controllers/JointTrajectoryController + joints: + - joint_1 + - joint_2 + - joint_3 + - joint_4 + - joint_5 + - joint_6 + - joint_7 + constraints: + goal_time: 1.0 + stopped_velocity_tolerance: 0.5 + stop_trajectory_duration: 1.0 + state_publish_rate: 25 + action_monitor_rate: 25 + gains: + joint_1: {p: 3000.0, i: 0.0, d: 2.0, i_clamp_min: -100.0, i_clamp_max: 100.0} + joint_2: {p: 50000.0, i: 0.0, d: 0.0, i_clamp_min: -5.0, i_clamp_max: 5.0} + joint_3: {p: 3000.0, i: 0.0, d: 0.0, i_clamp_min: -1.0, i_clamp_max: 1.0} + joint_4: {p: 50000.0, i: 0.0, d: 0.0, i_clamp_min: -1.0, i_clamp_max: 1.0} + joint_5: {p: 750.0, i: 0.0, d: 0.2, i_clamp_min: -1.0, i_clamp_max: 1.0} + joint_6: {p: 5000.0, i: 0.0, d: 1.0, i_clamp_min: -1.0, i_clamp_max: 1.0} + joint_7: {p: 100.0, i: 0.0, d: 0.0, i_clamp_min: -0.1, i_clamp_max: 0.1} + +joint_1_position_controller: + joint: joint_1 + pid: + p: 3000.0 + i: 0.0 + d: 2.0 + type: effort_controllers/JointPositionController + +joint_2_position_controller: + joint: joint_2 + pid: + p: 50000.0 + i: 0.0 + d: 0.0 + type: effort_controllers/JointPositionController + +joint_3_position_controller: + joint: joint_3 + pid: + p: 3000.0 + i: 0.0 + d: 0.0 + type: effort_controllers/JointPositionController + +joint_4_position_controller: + joint: joint_4 + pid: + p: 50000.0 + i: 0.0 + d: 0.0 + type: effort_controllers/JointPositionController + +joint_5_position_controller: + joint: joint_5 + pid: + p: 750.0 + i: 0.0 + d: 0.2 + type: effort_controllers/JointPositionController + +joint_6_position_controller: + joint: joint_6 + pid: + p: 5000.0 + i: 0.0 + d: 1.0 + type: effort_controllers/JointPositionController + +joint_7_position_controller: + joint: joint_7 + pid: + p: 100.0 + i: 0.0 + d: 0.0 + type: effort_controllers/JointPositionController diff --git a/kortex_control/grippers/robotiq_2f_85/config/gripper_action_controller_parameters.yaml b/kortex_control/grippers/robotiq_2f_85/config/gripper_action_controller_parameters.yaml new file mode 100644 index 00000000..090141f8 --- /dev/null +++ b/kortex_control/grippers/robotiq_2f_85/config/gripper_action_controller_parameters.yaml @@ -0,0 +1,13 @@ +robotiq_2f_85_gripper_controller: + type: position_controllers/GripperActionController + joint: gripper_finger1_joint + action_monitor_rate: 100 + +gazebo_ros_control: + pid_gains: + gripper_finger1_joint: {p: 10.0, i: 0.0, d: 0.01} + gripper_finger2_joint: {p: 10.0, i: 0.0, d: 0.01} + gripper_finger1_inner_knuckle_joint: {p: 10.0, i: 0.0, d: 0.01} + gripper_finger2_inner_knuckle_joint: {p: 10.0, i: 0.0, d: 0.01} + gripper_finger1_finger_tip_joint: {p: 10.0, i: 0.0, d: 0.00} + gripper_finger2_finger_tip_joint: {p: 10.0, i: 0.0, d: 0.00} \ No newline at end of file diff --git a/kortex_control/package.xml b/kortex_control/package.xml new file mode 100644 index 00000000..56f2364a --- /dev/null +++ b/kortex_control/package.xml @@ -0,0 +1,25 @@ + + kortex_control + 2.0.0 + +

Gazebo Ros Control package for Kortex robots

+

This package contains launch and configuration files for the ros_control controllers for simulation

+
+ Alexandre Vannobel + + BSD + catkin + roslaunch + robot_state_publisher + rviz + joint_state_publisher + gazebo + xacro + gazebo_ros + gazebo_ros_control + ros_control + ros_controllers + + + +
diff --git a/kortex_control/readme.md b/kortex_control/readme.md new file mode 100644 index 00000000..f90d68cf --- /dev/null +++ b/kortex_control/readme.md @@ -0,0 +1,24 @@ + + +# Kortex Control + +## Overview +This package contains the configuration files for the [ros_control controllers](http://wiki.ros.org/ros_control) used to control the simulated arms. + +## Loading and starting the controllers for simulation + +The `joint_position_controllers.yaml` file for the chosen arm is loaded to the Parameter Server from the [spawn_kortex_robot.launch](../kortex_gazebo/launch/spawn_kortex_robot.launch) file. The `controller_manager` node is then called to load and start the controllers as [Gazebo plugins](http://wiki.ros.org/gazebo_ros_control). + +## ROS Control support for the real arm + +ROS Control support for the Kinova Gen3 Ultra lightweight robot is not currently available and will be part of a future release. diff --git a/kortex_description/arms/gen3/config/joint_limits.yaml b/kortex_description/arms/gen3/config/joint_limits.yaml new file mode 100644 index 00000000..37f3ee5b --- /dev/null +++ b/kortex_description/arms/gen3/config/joint_limits.yaml @@ -0,0 +1,8 @@ +joint_names: + - joint_1 + - joint_2 + - joint_3 + - joint_4 + - joint_5 + - joint_6 + - joint_7 \ No newline at end of file diff --git a/kortex_description/arms/gen3/meshes/end_effector_link.STL b/kortex_description/arms/gen3/meshes/end_effector_link.STL new file mode 100644 index 00000000..6dc3cfa9 Binary files /dev/null and b/kortex_description/arms/gen3/meshes/end_effector_link.STL differ diff --git a/kortex_description/arms/gen3/urdf/GEN3_URDF_V12.urdf b/kortex_description/arms/gen3/urdf/GEN3_URDF_V12.urdf new file mode 100644 index 00000000..43044418 --- /dev/null +++ b/kortex_description/arms/gen3/urdf/GEN3_URDF_V12.urdf @@ -0,0 +1,234 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kortex_description/arms/gen3/urdf/gen3_macro.xacro b/kortex_description/arms/gen3/urdf/gen3_macro.xacro index c5c5f426..a963c603 100644 --- a/kortex_description/arms/gen3/urdf/gen3_macro.xacro +++ b/kortex_description/arms/gen3/urdf/gen3_macro.xacro @@ -6,92 +6,54 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - + - - - + + + - + - + - - + + - + - + - + - + - - - + + + - + - + - - + + - + - + - + - + - + - - - + + + - + - + - - + + - + - + - + - + - - - + + + - + - + - - + + - + - + - + - + - + - - - + + + - + - + - - + + - + - + - + - + - - - + + + - + - + - - + + - + - + - + - + - + - - - + + + - + - + - - + + - + - + - + - + + + + + + + transmission_interface/SimpleTransmission + + hardware_interface/EffortJointInterface + + + 1 + + + + + transmission_interface/SimpleTransmission + + hardware_interface/EffortJointInterface + + + 1 + + + + + transmission_interface/SimpleTransmission + + hardware_interface/EffortJointInterface + + + 1 + + + + + transmission_interface/SimpleTransmission + + hardware_interface/EffortJointInterface + + + 1 + + + + + transmission_interface/SimpleTransmission + + hardware_interface/EffortJointInterface + + + 1 + + + + + transmission_interface/SimpleTransmission + + hardware_interface/EffortJointInterface + + + 1 + + + + + transmission_interface/SimpleTransmission + + hardware_interface/EffortJointInterface + + + 1 + + + + + + \ No newline at end of file diff --git a/kortex_description/grippers/robotiq_2f_85/LICENSE b/kortex_description/grippers/robotiq_2f_85/LICENSE new file mode 100644 index 00000000..9b28cd85 --- /dev/null +++ b/kortex_description/grippers/robotiq_2f_85/LICENSE @@ -0,0 +1,14 @@ +This repository contains content covered by multiple licenses. + +For contents or modifications not covered by a separate license, the following license applies: +Copyright 2015, Stanley Innovation, Inc. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/kortex_description/grippers/robotiq_2f_85/config/joint_limits.yaml b/kortex_description/grippers/robotiq_2f_85/config/joint_limits.yaml new file mode 100644 index 00000000..b566f703 --- /dev/null +++ b/kortex_description/grippers/robotiq_2f_85/config/joint_limits.yaml @@ -0,0 +1,5 @@ +gripper_joint_names: + - gripper_finger1_joint + +gripper_joint_limits: + - 0.804 \ No newline at end of file diff --git a/kortex_description/grippers/robotiq_2f_85/meshes/collision/kinova_robotiq_coupler.stl b/kortex_description/grippers/robotiq_2f_85/meshes/collision/kinova_robotiq_coupler.stl new file mode 100755 index 00000000..af139fe0 Binary files /dev/null and b/kortex_description/grippers/robotiq_2f_85/meshes/collision/kinova_robotiq_coupler.stl differ diff --git a/kortex_description/grippers/robotiq_2f_85/meshes/collision/robotiq_85_base_link.stl b/kortex_description/grippers/robotiq_2f_85/meshes/collision/robotiq_85_base_link.stl new file mode 100644 index 00000000..5f51dbc3 Binary files /dev/null and b/kortex_description/grippers/robotiq_2f_85/meshes/collision/robotiq_85_base_link.stl differ diff --git a/kortex_description/grippers/robotiq_2f_85/meshes/collision/robotiq_85_finger_link.stl b/kortex_description/grippers/robotiq_2f_85/meshes/collision/robotiq_85_finger_link.stl new file mode 100644 index 00000000..d1ff9530 Binary files /dev/null and b/kortex_description/grippers/robotiq_2f_85/meshes/collision/robotiq_85_finger_link.stl differ diff --git a/kortex_description/grippers/robotiq_2f_85/meshes/collision/robotiq_85_finger_tip_link.stl b/kortex_description/grippers/robotiq_2f_85/meshes/collision/robotiq_85_finger_tip_link.stl new file mode 100644 index 00000000..4d5ce52c Binary files /dev/null and b/kortex_description/grippers/robotiq_2f_85/meshes/collision/robotiq_85_finger_tip_link.stl differ diff --git a/kortex_description/grippers/robotiq_2f_85/meshes/collision/robotiq_85_inner_knuckle_link.stl b/kortex_description/grippers/robotiq_2f_85/meshes/collision/robotiq_85_inner_knuckle_link.stl new file mode 100644 index 00000000..aef20afe Binary files /dev/null and b/kortex_description/grippers/robotiq_2f_85/meshes/collision/robotiq_85_inner_knuckle_link.stl differ diff --git a/kortex_description/grippers/robotiq_2f_85/meshes/collision/robotiq_85_knuckle_link.stl b/kortex_description/grippers/robotiq_2f_85/meshes/collision/robotiq_85_knuckle_link.stl new file mode 100644 index 00000000..c593f301 Binary files /dev/null and b/kortex_description/grippers/robotiq_2f_85/meshes/collision/robotiq_85_knuckle_link.stl differ diff --git a/kortex_description/grippers/robotiq_2f_85/meshes/visual/kinova_robotiq_coupler.dae b/kortex_description/grippers/robotiq_2f_85/meshes/visual/kinova_robotiq_coupler.dae new file mode 100644 index 00000000..db8d81c6 --- /dev/null +++ b/kortex_description/grippers/robotiq_2f_85/meshes/visual/kinova_robotiq_coupler.dae @@ -0,0 +1,100 @@ + + + + + Blender User + Blender 2.78.0 commit date:2017-02-24, commit time:14:33, hash:e92f2352830 + + 2017-07-24T12:59:53 + 2017-07-24T12:59:53 + + Z_UP + + + + + + + + + 0 0 0 1 + + + 0 0 0 1 + + + 0.04 0.04 0.04 1 + + + 0.25 0.25 0.25 1 + + + 50 + + + 1 + + + + + + + + + + + + + + + + 0.003986001 0.03728753 -0.0374 0 0.03749996 -0.05404996 0 0.03749996 -0.0374 -0.003986001 0.03728753 -0.05404996 -0.003986001 0.03728753 -0.0374 -0.007926821 0.03665262 -0.05404996 -0.007926821 0.03665262 -0.0374 -0.01177781 0.03560239 -0.05404996 -0.01177781 0.03560239 -0.0374 -0.01549535 0.03414875 -0.05404996 -0.01549535 0.03414875 -0.0374 -0.01903742 0.03230828 -0.05404996 -0.01903742 0.03230828 -0.0374 -0.02236378 0.03010159 -0.05404996 -0.02236378 0.03010159 -0.0374 -0.02543663 0.02755403 -0.05404996 -0.02543663 0.02755403 -0.0374 -0.0282213 0.02469414 -0.05404996 -0.0282213 0.02469414 -0.0374 -0.03068625 0.02155447 -0.05404996 -0.03068625 0.02155447 -0.0374 -0.03280359 0.01817065 -0.05404996 -0.03280359 0.01817065 -0.0374 -0.03454911 0.01458084 -0.05404996 -0.03454911 0.01458084 -0.0374 -0.03590327 0.01082593 -0.05404996 -0.03590327 0.01082593 -0.0374 -0.03685063 0.006948292 -0.05404996 -0.03685063 0.006948292 -0.0374 -0.03738033 0.002991974 -0.05404996 -0.03738033 0.002991974 -0.0374 -0.03748667 -9.9827e-4 -0.05404996 -0.03748667 -9.9827e-4 -0.0374 -0.0371682 -0.004977166 -0.05404996 -0.0371682 -0.004977166 -0.0374 -0.03642857 -0.008899748 -0.05404996 -0.03642857 -0.008899748 -0.0374 -0.03527623 -0.01272135 -0.05404996 -0.03527623 -0.01272135 -0.0374 -0.03372412 -0.01639902 -0.05404996 -0.03372412 -0.01639902 -0.0374 -0.03178995 -0.01989078 -0.05404996 -0.03178995 -0.01989078 -0.0374 -0.02949565 -0.02315711 -0.05404996 -0.02949565 -0.02315711 -0.0374 -0.02686709 -0.02616113 -0.05404996 -0.02686709 -0.02616113 -0.0374 -0.02393412 -0.02886873 -0.05404996 -0.02393412 -0.02886873 -0.0374 -0.02072989 -0.03124922 -0.05404996 -0.02072989 -0.03124922 -0.0374 -0.01729089 -0.03327566 -0.05404996 -0.01729089 -0.03327566 -0.0374 -0.01365602 -0.0349251 -0.05404996 -0.01365602 -0.0349251 -0.0374 -0.009866297 -0.0361787 -0.05404996 -0.009866297 -0.0361787 -0.0374 -0.005964875 -0.03702253 -0.05404996 -0.005964875 -0.03702253 -0.0374 -0.001995742 -0.03744679 -0.05404996 -0.001995742 -0.03744679 -0.0374 0.001995742 -0.03744679 -0.05404996 0.001995742 -0.03744679 -0.0374 0.005964875 -0.03702253 -0.05404996 0.005964875 -0.03702253 -0.0374 0.009866297 -0.0361787 -0.05404996 0.009866297 -0.0361787 -0.0374 0.01365602 -0.0349251 -0.05404996 0.01365602 -0.0349251 -0.0374 0.01729089 -0.03327566 -0.05404996 0.01729089 -0.03327566 -0.0374 0.02072989 -0.03124922 -0.05404996 0.02072989 -0.03124922 -0.0374 0.02393412 -0.02886873 -0.05404996 0.02393412 -0.02886873 -0.0374 0.02686709 -0.02616113 -0.05404996 0.02686709 -0.02616113 -0.0374 0.02949565 -0.02315711 -0.05404996 0.02949565 -0.02315711 -0.0374 0.03178995 -0.01989078 -0.05404996 0.03178995 -0.01989078 -0.0374 0.03372412 -0.01639902 -0.05404996 0.03372412 -0.01639902 -0.0374 0.03527623 -0.01272135 -0.05404996 0.03527623 -0.01272135 -0.0374 0.03642857 -0.008899748 -0.05404996 0.03642857 -0.008899748 -0.0374 0.0371682 -0.004977166 -0.05404996 0.0371682 -0.004977166 -0.0374 0.03748667 -9.9827e-4 -0.05404996 0.03748667 -9.9827e-4 -0.0374 0.03738033 0.002991974 -0.05404996 0.03738033 0.002991974 -0.0374 0.03685063 0.006948292 -0.05404996 0.03685063 0.006948292 -0.0374 0.03590327 0.01082593 -0.05404996 0.03590327 0.01082593 -0.0374 0.03454911 0.01458084 -0.05404996 0.03454911 0.01458084 -0.0374 0.03280359 0.01817065 -0.05404996 0.03280359 0.01817065 -0.0374 0.03068625 0.02155447 -0.05404996 0.03068625 0.02155447 -0.0374 0.0282213 0.02469414 -0.05404996 0.0282213 0.02469414 -0.0374 0.02543663 0.02755403 -0.05404996 0.02543663 0.02755403 -0.0374 0.02236378 0.03010159 -0.05404996 0.02236378 0.03010159 -0.0374 0.01903742 0.03230828 -0.05404996 0.01903742 0.03230828 -0.0374 0.01549535 0.03414875 -0.05404996 0.01549535 0.03414875 -0.0374 0.01177781 0.03560239 -0.05404996 0.01177781 0.03560239 -0.0374 0.007926821 0.03665262 -0.05404996 0.007926821 0.03665262 -0.0374 0.003986001 0.03728753 -0.05404996 -0.03573638 9.85068e-4 -0.05404996 -0.03541105 0.00491029 -0.05404996 -0.03465598 0.008776068 -0.05404996 -0.03348016 0.01253527 -0.05404996 -0.03189808 0.01614224 -0.05404996 -0.02992868 0.01955336 -0.05404996 -0.02759593 0.02272707 -0.05404996 -0.02492833 0.02562493 -0.05404996 -0.02195805 0.02821177 -0.05404996 -0.01872128 0.03045606 -0.05404996 -0.01525717 0.03233075 -0.05404996 -0.011608 0.03381294 -0.05404996 -0.007817804 0.03488469 -0.05404996 -0.003932774 0.03553301 -0.05404996 0 0.03574997 -0.05404996 0 0.03749996 -0.05404996 0.003932774 0.03553301 -0.05404996 0.007817804 0.03488469 -0.05404996 0.011608 0.03381294 -0.05404996 0.01525717 0.03233075 -0.05404996 0.01872128 0.03045606 -0.05404996 0.02195805 0.02821177 -0.05404996 0.02492833 0.02562493 -0.05404996 0.02759593 0.02272707 -0.05404996 0.02992868 0.01955336 -0.05404996 0.03189808 0.01614224 -0.05404996 0.03348016 0.01253527 -0.05404996 0.03465598 0.008776068 -0.05404996 0.03541105 0.00491029 -0.05404996 0.03573638 9.85068e-4 -0.05404996 0.03562784 -0.002952158 -0.05404996 0.03508687 -0.00685364 -0.05404996 0.03411996 -0.01067185 -0.05404996 0.03273886 -0.01436054 -0.05404996 0.03096038 -0.01787495 -0.05404996 0.02880609 -0.0211724 -0.05404996 0.02630203 -0.02421271 -0.05404996 0.02347886 -0.0269593 -0.05404996 0.0203706 -0.02937853 -0.05404996 0.01701503 -0.03144115 -0.05404996 0.01345294 -0.03312212 -0.05404996 0.009727656 -0.03440099 -0.05404996 0.00588423 -0.03526234 -0.05404996 0.001969337 -0.03569567 -0.05404996 -0.001969337 -0.03569567 -0.05404996 -0.00588423 -0.03526234 -0.05404996 -0.009727656 -0.03440099 -0.05404996 -0.01345294 -0.03312212 -0.05404996 -0.01701503 -0.03144115 -0.05404996 -0.0203706 -0.02937853 -0.05404996 -0.02347886 -0.0269593 -0.05404996 -0.02630203 -0.02421271 -0.05404996 -0.02880609 -0.0211724 -0.05404996 -0.03096038 -0.01787495 -0.05404996 -0.03273886 -0.01436054 -0.05404996 -0.03411996 -0.01067185 -0.05404996 -0.03508687 -0.00685364 -0.05404996 -0.03562784 -0.002952158 -0.05404996 -0.003932774 0.03553301 -0.05105 0 0.03574997 -0.05404996 0 0.03574997 -0.05105 0.003932774 0.03553301 -0.05105 0.007817804 0.03488469 -0.05105 0.011608 0.03381294 -0.05105 0.01525717 0.03233075 -0.05105 0.01872128 0.03045606 -0.05105 0.02195805 0.02821177 -0.05105 0.02492833 0.02562493 -0.05105 0.02759593 0.02272707 -0.05105 0.02992868 0.01955336 -0.05105 0.03189808 0.01614224 -0.05105 0.03348016 0.01253527 -0.05105 0.03465598 0.008776068 -0.05105 0.03541105 0.00491029 -0.05105 0.03573638 9.85068e-4 -0.05105 0.03562784 -0.002952158 -0.05105 0.03508687 -0.00685364 -0.05105 0.03411996 -0.01067185 -0.05105 0.03273886 -0.01436054 -0.05105 0.03096038 -0.01787495 -0.05105 0.02880609 -0.0211724 -0.05105 0.02630203 -0.02421271 -0.05105 0.02347886 -0.0269593 -0.05105 0.0203706 -0.02937853 -0.05105 0.01701503 -0.03144115 -0.05105 0.01345294 -0.03312212 -0.05105 0.009727656 -0.03440099 -0.05105 0.00588423 -0.03526234 -0.05105 0.001969337 -0.03569567 -0.05105 -0.001969337 -0.03569567 -0.05105 -0.00588423 -0.03526234 -0.05105 -0.009727656 -0.03440099 -0.05105 -0.01345294 -0.03312212 -0.05105 -0.01701503 -0.03144115 -0.05105 -0.0203706 -0.02937853 -0.05105 -0.02347886 -0.0269593 -0.05105 -0.02630203 -0.02421271 -0.05105 -0.02880609 -0.0211724 -0.05105 -0.03096038 -0.01787495 -0.05105 -0.03273886 -0.01436054 -0.05105 -0.03411996 -0.01067185 -0.05105 -0.03508687 -0.00685364 -0.05105 -0.03562784 -0.002952158 -0.05105 -0.03573638 9.85068e-4 -0.05105 -0.03541105 0.00491029 -0.05105 -0.03465598 0.008776068 -0.05105 -0.03348016 0.01253527 -0.05105 -0.03189808 0.01614224 -0.05105 -0.02992868 0.01955336 -0.05105 -0.02759593 0.02272707 -0.05105 -0.02492833 0.02562493 -0.05105 -0.02195805 0.02821177 -0.05105 -0.01872128 0.03045606 -0.05105 -0.01525717 0.03233075 -0.05105 -0.011608 0.03381294 -0.05105 -0.007817804 0.03488469 -0.05105 0.02849996 0 -0.05105 0.02949988 -0.001731932 -0.05105 0.0324999 0 -0.05105 0.03246957 -3.47296e-4 -0.05105 0.03237932 -6.8404e-4 -0.05105 0.03223198 -9.99987e-4 -0.05105 0.03246957 3.47296e-4 -0.05105 0.03237932 6.8404e-4 -0.05105 0.03223198 9.99987e-4 -0.05105 0.03015261 0.001969516 -0.05105 0.02896785 0.001285493 -0.05105 0.02876794 9.99987e-4 -0.05105 0.03049999 0.001999974 -0.05105 0.02981591 0.001879334 -0.05105 0.02949988 0.001731932 -0.05105 0.02921438 0.001532018 -0.05105 0.02853029 -3.47296e-4 -0.05105 0.03203207 0.001285493 -0.05105 0.03178548 0.001532018 -0.05105 0.03149998 0.001731932 -0.05105 0.03118395 0.001879334 -0.05105 0.03084725 0.001969516 -0.05105 0.0286206 6.8404e-4 -0.05105 0.02853029 3.47296e-4 -0.05105 0.0286206 -6.8404e-4 -0.05105 0.02981591 -0.001879334 -0.05105 0.03015261 -0.001969516 -0.05105 0.03118395 -0.001879334 -0.05105 0.02921438 -0.001532018 -0.05105 0.02896785 -0.001285493 -0.05105 0.02876794 -9.99987e-4 -0.05105 0.03084725 -0.001969516 -0.05105 0.03049999 -0.001999974 -0.05105 0.03149998 -0.001731932 -0.05105 0.03178548 -0.001532018 -0.05105 0.03203207 -0.001285493 -0.05105 0.03015261 0.001969516 -0.04504996 0.03049999 0.001999974 -0.04504996 0.03084725 0.001969516 -0.04504996 0.03118395 0.001879334 -0.04504996 0.03149998 0.001731932 -0.04504996 0.03178548 0.001532018 -0.04504996 0.03203207 0.001285493 -0.04504996 0.03223198 9.99987e-4 -0.04504996 0.03237932 6.8404e-4 -0.04504996 0.03246957 3.47296e-4 -0.04504996 0.0324999 0 -0.04504996 0.03246957 -3.47296e-4 -0.04504996 0.03237932 -6.8404e-4 -0.04504996 0.03223198 -9.99987e-4 -0.04504996 0.03203207 -0.001285493 -0.04504996 0.03178548 -0.001532018 -0.04504996 0.03149998 -0.001731932 -0.04504996 0.03118395 -0.001879334 -0.04504996 0.03084725 -0.001969516 -0.04504996 0.03049999 -0.001999974 -0.04504996 0.03015261 -0.001969516 -0.04504996 0.02981591 -0.001879334 -0.04504996 0.02949988 -0.001731932 -0.04504996 0.02921438 -0.001532018 -0.04504996 0.02896785 -0.001285493 -0.04504996 0.02876794 -9.99987e-4 -0.04504996 0.0286206 -6.8404e-4 -0.04504996 0.02853029 -3.47296e-4 -0.04504996 0.02849996 0 -0.04504996 0.02853029 3.47296e-4 -0.04504996 0.0286206 6.8404e-4 -0.04504996 0.02876794 9.99987e-4 -0.04504996 0.02896785 0.001285493 -0.04504996 0.02921438 0.001532018 -0.04504996 0.02949988 0.001731932 -0.04504996 0.02981591 0.001879334 -0.04504996 0.01891046 0.0320928 -0.0374 0.01539212 0.03392112 -0.0374 0.01169925 0.03536504 -0.0374 0.007873952 0.03640824 -0.0374 0.003959417 0.03703892 -0.0374 0 0.03724998 -0.0374 -0.003959417 0.03703892 -0.0374 -0.007873952 0.03640824 -0.0374 -0.01169925 0.03536504 -0.0374 -0.01539212 0.03392112 -0.0374 -0.01891046 0.0320928 -0.0374 -0.02221465 0.0299009 -0.0374 -0.02526706 0.02737033 -0.0374 -0.02803319 0.02452945 -0.0374 -0.03048175 0.02141082 -0.0374 -0.03258484 0.01804941 -0.0374 -0.03431886 0.01448369 -0.0374 -0.03566396 0.01075375 -0.0374 -0.03660494 0.006901979 -0.0374 -0.03713119 0.002971947 -0.0374 -0.03723675 -9.91614e-4 -0.0374 -0.03692036 -0.004944026 -0.0374 -0.03618574 -0.008840382 -0.0374 -0.03504103 -0.0126366 -0.0374 -0.03349936 -0.01628965 -0.0374 -0.03157806 -0.01975816 -0.0374 -0.02929902 -0.02300274 -0.0374 -0.02668792 -0.02598673 -0.0374 -0.02377456 -0.02867627 -0.0374 -0.02059179 -0.03104084 -0.0374 -0.01717567 -0.03305381 -0.0374 -0.01356494 -0.03469216 -0.0374 -0.009800553 -0.03593754 -0.0374 -0.005925059 -0.03677564 -0.0374 -0.00198251 -0.03719717 -0.0374 0.00198251 -0.03719717 -0.0374 0.005925059 -0.03677564 -0.0374 0.009800553 -0.03593754 -0.0374 0.01356494 -0.03469216 -0.0374 0.01717567 -0.03305381 -0.0374 0.02059179 -0.03104084 -0.0374 0.02377456 -0.02867627 -0.0374 0.02668792 -0.02598673 -0.0374 0.02929902 -0.02300274 -0.0374 0.03157806 -0.01975816 -0.0374 0.03349936 -0.01628965 -0.0374 0.03504103 -0.0126366 -0.0374 0.03618574 -0.008840382 -0.0374 0.03692036 -0.004944026 -0.0374 0.03723675 -9.91614e-4 -0.0374 0.03713119 0.002971947 -0.0374 0.03660494 0.006901979 -0.0374 0.03566396 0.01075375 -0.0374 0.03431886 0.01448369 -0.0374 0.03258484 0.01804941 -0.0374 0.03048175 0.02141082 -0.0374 0.02803319 0.02452945 -0.0374 0.02526706 0.02737033 -0.0374 0.02221465 0.0299009 -0.0374 0.003959417 0.03703892 -0.03714996 0 0.03724998 -0.0374 0 0.03724998 -0.03714996 -0.003959417 0.03703892 -0.03714996 -0.007873952 0.03640824 -0.03714996 -0.01169925 0.03536504 -0.03714996 -0.01539212 0.03392112 -0.03714996 -0.01891046 0.0320928 -0.03714996 -0.02221465 0.0299009 -0.03714996 -0.02526706 0.02737033 -0.03714996 -0.02803319 0.02452945 -0.03714996 -0.03048175 0.02141082 -0.03714996 -0.03258484 0.01804941 -0.03714996 -0.03431886 0.01448369 -0.03714996 -0.03566396 0.01075375 -0.03714996 -0.03660494 0.006901979 -0.03714996 -0.03713119 0.002971947 -0.03714996 -0.03723675 -9.91614e-4 -0.03714996 -0.03692036 -0.004944026 -0.03714996 -0.03618574 -0.008840382 -0.03714996 -0.03504103 -0.0126366 -0.03714996 -0.03349936 -0.01628965 -0.03714996 -0.03157806 -0.01975816 -0.03714996 -0.02929902 -0.02300274 -0.03714996 -0.02668792 -0.02598673 -0.03714996 -0.02377456 -0.02867627 -0.03714996 -0.02059179 -0.03104084 -0.03714996 -0.01717567 -0.03305381 -0.03714996 -0.01356494 -0.03469216 -0.03714996 -0.009800553 -0.03593754 -0.03714996 -0.005925059 -0.03677564 -0.03714996 -0.00198251 -0.03719717 -0.03714996 0.00198251 -0.03719717 -0.03714996 0.005925059 -0.03677564 -0.03714996 0.009800553 -0.03593754 -0.03714996 0.01356494 -0.03469216 -0.03714996 0.01717567 -0.03305381 -0.03714996 0.02059179 -0.03104084 -0.03714996 0.02377456 -0.02867627 -0.03714996 0.02668792 -0.02598673 -0.03714996 0.02929902 -0.02300274 -0.03714996 0.03157806 -0.01975816 -0.03714996 0.03349936 -0.01628965 -0.03714996 0.03504103 -0.0126366 -0.03714996 0.03618574 -0.008840382 -0.03714996 0.03692036 -0.004944026 -0.03714996 0.03723675 -9.91614e-4 -0.03714996 0.03713119 0.002971947 -0.03714996 0.03660494 0.006901979 -0.03714996 0.03566396 0.01075375 -0.03714996 0.03431886 0.01448369 -0.03714996 0.03258484 0.01804941 -0.03714996 0.03048175 0.02141082 -0.03714996 0.02803319 0.02452945 -0.03714996 0.02526706 0.02737033 -0.03714996 0.02221465 0.0299009 -0.03714996 0.01891046 0.0320928 -0.03714996 0.01539212 0.03392112 -0.03714996 0.01169925 0.03536504 -0.03714996 0.007873952 0.03640824 -0.03714996 -0.005655825 0.03707093 -0.03714996 -0.002835988 0.03739249 -0.03714996 -0.01645302 0.03369784 -0.03714996 -0.01385742 0.03484565 -0.03714996 -0.0111823 0.0357939 -0.03714996 -0.008443295 0.03653705 -0.03714996 -0.02361786 0.02912807 -0.03714996 -0.02134728 0.0308308 -0.03714996 -0.01895445 0.03235691 -0.03714996 -0.03457719 -0.01451432 -0.03714996 -0.0355758 -0.01185768 -0.03714996 0.0151661 -0.03429633 -0.03714996 0.01252883 -0.03534501 -0.03714996 0.03042125 -0.02192687 -0.03714996 0.02867591 -0.02416485 -0.03714996 -0.03717136 0.004953265 -0.03714996 -0.03669029 0.007750332 -0.03714996 -0.03637075 -0.009133219 -0.03714996 -0.03695732 -0.006356418 -0.03714996 -0.03733217 -0.003543138 -0.03714996 -0.03749322 -7.09655e-4 -0.03714996 -0.03743952 0.002127945 -0.03714996 -0.02867591 -0.02416485 -0.03714996 -0.03042125 -0.02192687 -0.03714996 -0.03199249 -0.01956343 -0.03714996 -0.03338038 -0.01708775 -0.03714996 -0.004249036 -0.03725838 -0.03714996 -0.007054567 -0.03683042 -0.03714996 0.03457719 -0.01451432 -0.03714996 0.03338038 -0.01708775 -0.03714996 0.03199249 -0.01956343 -0.03714996 -0.03122919 0.02075999 -0.03714996 -0.0295698 0.02306234 -0.03714996 -0.02774089 0.02523267 -0.03714996 -0.02575314 0.02725845 -0.03714996 -0.02249866 -0.03000092 -0.03714996 -0.0247032 -0.02821344 -0.03714996 -0.02676618 -0.0262643 -0.03714996 0.02676618 -0.0262643 -0.03714996 0.0247032 -0.02821344 -0.03714996 0.02249866 -0.03000092 -0.03714996 0.02016532 -0.0316165 -0.03714996 0.0177164 -0.03305107 -0.03714996 0.03717136 0.004953265 -0.03714996 0.03743952 0.002127945 -0.03714996 0.01385742 0.03484565 -0.03714996 0.01645302 0.03369784 -0.03714996 -0.035999 0.01050305 -0.03714996 -0.03510165 0.01319551 -0.03714996 -0.03400307 0.01581233 -0.03714996 -0.03270983 0.01833868 -0.03714996 0.009819865 -0.0361914 -0.03714996 0.007054567 -0.03683042 -0.03714996 0.004249036 -0.03725838 -0.03714996 0.001418948 -0.03747314 -0.03714996 -0.001418948 -0.03747314 -0.03714996 0.03400307 0.01581233 -0.03714996 0.03510165 0.01319551 -0.03714996 0.035999 0.01050305 -0.03714996 0.03669029 0.007750332 -0.03714996 0.0295698 0.02306234 -0.03714996 0.03122919 0.02075999 -0.03714996 0.03270983 0.01833868 -0.03714996 0 0.03749996 -0.03714996 0.002835988 0.03739249 -0.03714996 0.005655825 0.03707093 -0.03714996 0.008443295 0.03653705 -0.03714996 0.0111823 0.0357939 -0.03714996 -0.009819865 -0.0361914 -0.03714996 -0.01252883 -0.03534501 -0.03714996 -0.0151661 -0.03429633 -0.03714996 -0.0177164 -0.03305107 -0.03714996 -0.02016532 -0.0316165 -0.03714996 0.03749322 -7.09655e-4 -0.03714996 0.03733217 -0.003543138 -0.03714996 0.03695732 -0.006356418 -0.03714996 0.03637075 -0.009133219 -0.03714996 0.0355758 -0.01185768 -0.03714996 0.01895445 0.03235691 -0.03714996 0.02134728 0.0308308 -0.03714996 0.02361786 0.02912807 -0.03714996 0.02575314 0.02725845 -0.03714996 0.02774089 0.02523267 -0.03714996 -0.002704203 0.03565305 -0.02846908 -0.002684235 0.03453505 -0.02556556 0 0.03463917 -0.02556556 -0.00277096 0.03565049 -0.02846908 -0.005392551 0.03534406 -0.02846908 -0.005352318 0.03422313 -0.02556556 -0.005525231 0.03532844 -0.02846908 -0.008049726 0.03483271 -0.02846908 -0.007988333 0.03370553 -0.02556556 -0.008246362 0.03479415 -0.02846908 -0.01066035 0.03412204 -0.02846908 -0.01057618 0.03298509 -0.02556556 -0.01091784 0.03405046 -0.02846908 -0.01320976 0.03321617 -0.02846908 -0.0131005 0.03206634 -0.02556556 -0.01352357 0.03310203 -0.02846908 -0.01568329 0.03212028 -0.02846908 -0.01554602 0.03095465 -0.02556556 -0.01604813 0.03195446 -0.02846908 -0.0180667 0.03084069 -0.02846908 -0.01789802 0.02965688 -0.02556556 -0.01847606 0.03061479 -0.02846908 -0.02034646 0.02938467 -0.02846908 -0.02014243 0.02818071 -0.02556556 -0.02079296 0.029091 -0.02846908 -0.02250957 0.02776056 -0.02846908 -0.02226567 0.02653515 -0.02556556 -0.0229848 0.02739214 -0.02846908 -0.02454364 0.02597767 -0.02846908 -0.02425491 0.0247299 -0.02556556 -0.02503836 0.0255286 -0.02846908 -0.02643704 0.02404618 -0.02846908 -0.02609843 0.02277594 -0.02556556 -0.02694129 0.02351158 -0.02846908 -0.02817893 0.02197724 -0.02846908 -0.02778488 0.02068501 -0.02556556 -0.02868229 0.02135318 -0.02846908 -0.02975952 0.0197826 -0.02846908 -0.02930432 0.01846975 -0.02556556 -0.03025072 0.01906633 -0.02846908 -0.03116959 0.01747483 -0.02846908 -0.03064739 0.01614338 -0.02556556 -0.03163731 0.01666474 -0.02846908 -0.0324012 0.01506716 -0.02846908 -0.03180629 0.01371979 -0.02556556 -0.03283351 0.01416295 -0.02846908 -0.03344732 0.01257336 -0.02846908 -0.03277385 0.01121383 -0.02556556 -0.03383237 0.01157599 -0.02846908 -0.03430181 0.01000761 -0.02846908 -0.03354424 0.008640408 -0.02556556 -0.03462761 0.008919477 -0.02846908 -0.03496015 0.007384777 -0.02846908 -0.03411293 0.006014943 -0.02556556 -0.03521472 0.006209254 -0.02846908 -0.03541821 0.004719555 -0.02846908 -0.03447645 0.003353357 -0.02556556 -0.03559005 0.003461718 -0.02846908 -0.03567349 0.002027451 -0.02846908 -0.03463268 6.71701e-4 -0.02556556 -0.03575128 6.93396e-4 -0.02846908 -0.03572463 -6.76168e-4 -0.02846908 -0.03458052 -0.002013981 -0.02556556 -0.03569746 -0.002079129 -0.02846908 -0.03557127 -0.003376007 -0.02846908 -0.03432053 -0.004687726 -0.02556556 -0.03542906 -0.004839122 -0.02846908 -0.03521436 -0.006056487 -0.02846908 -0.033854 -0.007333219 -0.02556556 -0.03494751 -0.007570028 -0.02846908 -0.03465574 -0.008702456 -0.02846908 -0.03318399 -0.009934604 -0.02556556 -0.0342558 -0.01025545 -0.02846908 -0.03389889 -0.01129853 -0.02846908 -0.03231436 -0.0124762 -0.02556556 -0.03335797 -0.01287919 -0.02846908 -0.03294777 -0.01383018 -0.02846908 -0.03125029 -0.01494288 -0.02556556 -0.0322597 -0.0154255 -0.02846908 -0.03180813 -0.01628261 -0.02846908 -0.02999842 -0.01731956 -0.02556556 -0.03096735 -0.01787894 -0.02846908 -0.0304864 -0.018642 -0.02846908 -0.02856606 -0.01959216 -0.02556556 -0.02948874 -0.02022486 -0.02846908 -0.02899003 -0.02089482 -0.02846908 -0.02696192 -0.02174693 -0.02556556 -0.02783274 -0.02244931 -0.02846908 -0.02732753 -0.02302819 -0.02846908 -0.02519559 -0.0237708 -0.02556556 -0.02600944 -0.02453863 -0.02846908 -0.02550858 -0.02502977 -0.02846908 -0.02327775 -0.02565187 -0.02556556 -0.02402967 -0.02648031 -0.02846908 -0.02354341 -0.02688831 -0.02846908 -0.0212199 -0.02737849 -0.02556556 -0.02190536 -0.02826285 -0.02846908 -0.0214433 -0.02859306 -0.02846908 -0.01903456 -0.02894055 -0.02556556 -0.01964926 -0.02987527 -0.02846908 -0.01922035 -0.03013426 -0.02846908 -0.0167346 -0.03032863 -0.02556556 -0.01727515 -0.03130817 -0.02846908 -0.01688706 -0.03150308 -0.02846908 -0.01433408 -0.03153425 -0.02556556 -0.01479703 -0.03255271 -0.02846908 -0.01445686 -0.03269165 -0.02846908 -0.01184725 -0.03255015 -0.02556556 -0.01222985 -0.03360152 -0.02846908 -0.01194363 -0.03369331 -0.02846908 -0.009289264 -0.03337031 -0.02556556 -0.009589314 -0.03444814 -0.02846908 -0.009361803 -0.03450208 -0.02846908 -0.006675362 -0.03398984 -0.02556556 -0.006890952 -0.0350877 -0.02846908 -0.006726026 -0.03511351 -0.02846908 -0.004021346 -0.03440499 -0.02556556 -0.001386523 -0.03573101 -0.02846908 -0.001343131 -0.03461313 -0.02556556 -0.004051268 -0.03552395 -0.02846908 -0.004151225 -0.0355162 -0.02846908 -0.001353085 -0.03573101 -0.02846908 0.001353085 -0.03573101 -0.02846908 0.001343131 -0.03461313 -0.02556556 0.001386523 -0.03573101 -0.02846908 0.004051268 -0.03552395 -0.02846908 0.004021346 -0.03440499 -0.02556556 0.004151225 -0.0355162 -0.02846908 0.006726026 -0.03511351 -0.02846908 0.006675362 -0.03398984 -0.02556556 0.006890952 -0.0350877 -0.02846908 0.009361803 -0.03450208 -0.02846908 0.009289264 -0.03337031 -0.02556556 0.009589314 -0.03444814 -0.02846908 0.01194363 -0.03369331 -0.02846908 0.01184725 -0.03255015 -0.02556556 0.01222985 -0.03360152 -0.02846908 0.01445686 -0.03269165 -0.02846908 0.01433408 -0.03153425 -0.02556556 0.01479703 -0.03255271 -0.02846908 0.01688706 -0.03150308 -0.02846908 0.0167346 -0.03032863 -0.02556556 0.01727515 -0.03130817 -0.02846908 0.01922035 -0.03013426 -0.02846908 0.01903456 -0.02894055 -0.02556556 0.01964926 -0.02987527 -0.02846908 0.0214433 -0.02859306 -0.02846908 0.0212199 -0.02737849 -0.02556556 0.02190536 -0.02826285 -0.02846908 0.02354341 -0.02688831 -0.02846908 0.02327775 -0.02565187 -0.02556556 0.02402967 -0.02648031 -0.02846908 0.02550858 -0.02502977 -0.02846908 0.02519559 -0.0237708 -0.02556556 0.02600944 -0.02453863 -0.02846908 0.02732753 -0.02302819 -0.02846908 0.02696192 -0.02174693 -0.02556556 0.02783274 -0.02244931 -0.02846908 0.02899003 -0.02089482 -0.02846908 0.02856606 -0.01959216 -0.02556556 0.02948874 -0.02022486 -0.02846908 0.0304864 -0.018642 -0.02846908 0.02999842 -0.01731956 -0.02556556 0.03096735 -0.01787894 -0.02846908 0.03180813 -0.01628261 -0.02846908 0.03125029 -0.01494288 -0.02556556 0.0322597 -0.0154255 -0.02846908 0.03294777 -0.01383018 -0.02846908 0.03231436 -0.0124762 -0.02556556 0.03335797 -0.01287919 -0.02846908 0.03389889 -0.01129853 -0.02846908 0.03318399 -0.009934604 -0.02556556 0.0342558 -0.01025545 -0.02846908 0.03465574 -0.008702456 -0.02846908 0.033854 -0.007333219 -0.02556556 0.03494751 -0.007570028 -0.02846908 0.03521436 -0.006056487 -0.02846908 0.03432053 -0.004687726 -0.02556556 0.03542906 -0.004839122 -0.02846908 0.03557127 -0.003376007 -0.02846908 0.03458052 -0.002013981 -0.02556556 0.03569746 -0.002079129 -0.02846908 0.03572463 -6.76168e-4 -0.02846908 0.03463268 6.71701e-4 -0.02556556 0.03575128 6.93396e-4 -0.02846908 0.03567349 0.002027451 -0.02846908 0.03447645 0.003353357 -0.02556556 0.03559005 0.003461718 -0.02846908 0.03541821 0.004719555 -0.02846908 0.03411293 0.006014943 -0.02556556 0.03521472 0.006209254 -0.02846908 0.03496015 0.007384777 -0.02846908 0.03354424 0.008640408 -0.02556556 0.03462761 0.008919477 -0.02846908 0.03430181 0.01000761 -0.02846908 0.03277385 0.01121383 -0.02556556 0.03383237 0.01157599 -0.02846908 0.03344732 0.01257336 -0.02846908 0.03180629 0.01371979 -0.02556556 0.03283351 0.01416295 -0.02846908 0.0324012 0.01506716 -0.02846908 0.03064739 0.01614338 -0.02556556 0.03163731 0.01666474 -0.02846908 0.03116959 0.01747483 -0.02846908 0.02930432 0.01846975 -0.02556556 0.03025072 0.01906633 -0.02846908 0.02975952 0.0197826 -0.02846908 0.02778488 0.02068501 -0.02556556 0.02868229 0.02135318 -0.02846908 0.02817893 0.02197724 -0.02846908 0.02609843 0.02277594 -0.02556556 0.02694129 0.02351158 -0.02846908 0.02643704 0.02404618 -0.02846908 0.02425491 0.0247299 -0.02556556 0.02503836 0.0255286 -0.02846908 0.02454364 0.02597767 -0.02846908 0.02226567 0.02653515 -0.02556556 0.0229848 0.02739214 -0.02846908 0.02250957 0.02776056 -0.02846908 0.02014243 0.02818071 -0.02556556 0.02079296 0.029091 -0.02846908 0.02034646 0.02938467 -0.02846908 0.01789802 0.02965688 -0.02556556 0.01847606 0.03061479 -0.02846908 0.0180667 0.03084069 -0.02846908 0.01554602 0.03095465 -0.02556556 0.01604813 0.03195446 -0.02846908 0.01568329 0.03212028 -0.02846908 0.0131005 0.03206634 -0.02556556 0.01352357 0.03310203 -0.02846908 0.01320976 0.03321617 -0.02846908 0.01057618 0.03298509 -0.02556556 0.01091784 0.03405046 -0.02846908 0.01066035 0.03412204 -0.02846908 0.007988333 0.03370553 -0.02556556 0.008246362 0.03479415 -0.02846908 0.008049726 0.03483271 -0.02846908 0.005352318 0.03422313 -0.02556556 0.005525231 0.03532844 -0.02846908 0.005392551 0.03534406 -0.02846908 0.002684235 0.03453505 -0.02556556 0.00277096 0.03565049 -0.02846908 0.002704203 0.03565305 -0.02846908 0 0.03575795 -0.02846908 0.002610385 0.03358513 -0.02260345 0.005205154 0.03328186 -0.02260345 0.007768571 0.03277838 -0.02260345 0.01028525 0.03207772 -0.02260345 0.01274019 0.03118431 -0.02260345 0.01511842 0.03010326 -0.02260345 0.01740568 0.02884113 -0.02260345 0.01958835 0.02740561 -0.02260345 0.02165317 0.02580529 -0.02260345 0.02358782 0.02404963 -0.02260345 0.02538055 0.0221495 -0.02260345 0.02702063 0.02011615 -0.02260345 0.02849823 0.01796174 -0.02260345 0.0298044 0.01569926 -0.02260345 0.03093141 0.01334244 -0.02260345 0.03187233 0.01090544 -0.02260345 0.03262156 0.008402764 -0.02260345 0.03317463 0.00584954 -0.02260345 0.03352814 0.003261208 -0.02260345 0.03368008 6.53225e-4 -0.02260345 0.03362935 -0.001958668 -0.02260345 0.03337651 -0.004558801 -0.02260345 0.03292286 -0.007131457 -0.02260345 0.03227114 -0.009661376 -0.02260345 0.03142547 -0.01213306 -0.02260345 0.03039073 -0.01453185 -0.02260345 0.02917331 -0.01684314 -0.02260345 0.02778035 -0.01905328 -0.02260345 0.02622032 -0.02114874 -0.02260345 0.02450263 -0.023117 -0.02260345 0.02263754 -0.02494627 -0.02260345 0.02063632 -0.02662551 -0.02260345 0.01851093 -0.02814453 -0.02260345 0.01627433 -0.0294944 -0.02260345 0.01393973 -0.03066682 -0.02260345 0.01152133 -0.03165489 -0.02260345 0.009033739 -0.03245252 -0.02260345 0.00649178 -0.03305488 -0.02260345 0.00391072 -0.03345865 -0.02260345 0.001306176 -0.033661 -0.02260345 -0.001306176 -0.033661 -0.02260345 -0.00391072 -0.03345865 -0.02260345 -0.00649178 -0.03305488 -0.02260345 -0.009033739 -0.03245252 -0.02260345 -0.01152133 -0.03165489 -0.02260345 -0.01393973 -0.03066682 -0.02260345 -0.01627433 -0.0294944 -0.02260345 -0.01851093 -0.02814453 -0.02260345 -0.02063632 -0.02662551 -0.02260345 -0.02263754 -0.02494627 -0.02260345 -0.02450263 -0.023117 -0.02260345 -0.02622032 -0.02114874 -0.02260345 -0.02778035 -0.01905328 -0.02260345 -0.02917331 -0.01684314 -0.02260345 -0.03039073 -0.01453185 -0.02260345 -0.03142547 -0.01213306 -0.02260345 -0.03227114 -0.009661376 -0.02260345 -0.03292286 -0.007131457 -0.02260345 -0.03337651 -0.004558801 -0.02260345 -0.03362935 -0.001958668 -0.02260345 -0.03368008 6.53225e-4 -0.02260345 -0.03352814 0.003261208 -0.02260345 -0.03317463 0.00584954 -0.02260345 -0.03262156 0.008402764 -0.02260345 -0.03187233 0.01090544 -0.02260345 -0.03093141 0.01334244 -0.02260345 -0.0298044 0.01569926 -0.02260345 -0.02849823 0.01796174 -0.02260345 -0.02702063 0.02011615 -0.02260345 -0.02538055 0.0221495 -0.02260345 -0.02358782 0.02404963 -0.02260345 -0.02165317 0.02580529 -0.02260345 -0.01958835 0.02740561 -0.02260345 -0.01740568 0.02884113 -0.02260345 -0.01511842 0.03010326 -0.02260345 -0.01274019 0.03118431 -0.02260345 -0.01028525 0.03207772 -0.02260345 -0.007768571 0.03277838 -0.02260345 -0.005205154 0.03328186 -0.02260345 -0.002610385 0.03358513 -0.02260345 0 0.03368633 -0.02260345 0.002549648 0.03280371 -0.0195921 0.005083978 0.03250741 -0.0195921 0.00758785 0.03201574 -0.0195921 0.01004594 0.03133141 -0.0195921 0.01244378 0.03045874 -0.0195921 0.01476669 0.02940291 -0.0195921 0.01700079 0.0281701 -0.0195921 0.01913261 0.02676796 -0.0195921 0.02114933 0.02520483 -0.0195921 0.02303898 0.02349019 -0.0195921 0.02478998 0.02163422 -0.0195921 0.02639198 0.01964807 -0.0195921 0.02783519 0.01754385 -0.0195921 0.02911096 0.01533401 -0.0195921 0.03021168 0.01303201 -0.0195921 0.03113079 0.01065164 -0.0195921 0.03186255 0.008207261 -0.0195921 0.03240281 0.005713403 -0.0195921 0.0327481 0.003185272 -0.0195921 0.03289639 6.38027e-4 -0.0195921 0.03284692 -0.001913011 -0.0195921 0.03259992 -0.004452705 -0.0195921 0.03215688 -0.006965577 -0.0195921 0.03152036 -0.009436547 -0.0195921 0.03069436 -0.01185077 -0.0195921 0.02968364 -0.01419371 -0.0195921 0.02849447 -0.01645123 -0.0195921 0.027134 -0.01860994 -0.0195921 0.0256102 -0.0206567 -0.0195921 0.02393245 -0.02257919 -0.0195921 0.02211076 -0.02436584 -0.0195921 0.0201562 -0.02600604 -0.0195921 0.01808029 -0.02748978 -0.0195921 0.01589566 -0.02880817 -0.0195921 0.01361542 -0.02995336 -0.0195921 0.01125329 -0.03091835 -0.0195921 0.008823573 -0.03169745 -0.0195921 0.006340742 -0.03228586 -0.0195921 0.003819704 -0.03268021 -0.0195921 0.001275718 -0.03287792 -0.0195921 -0.001275718 -0.03287792 -0.0195921 -0.003819704 -0.03268021 -0.0195921 -0.006340742 -0.03228586 -0.0195921 -0.008823573 -0.03169745 -0.0195921 -0.01125329 -0.03091835 -0.0195921 -0.01361542 -0.02995336 -0.0195921 -0.01589566 -0.02880817 -0.0195921 -0.01808029 -0.02748978 -0.0195921 -0.0201562 -0.02600604 -0.0195921 -0.02211076 -0.02436584 -0.0195921 -0.02393245 -0.02257919 -0.0195921 -0.0256102 -0.0206567 -0.0195921 -0.027134 -0.01860994 -0.0195921 -0.02849447 -0.01645123 -0.0195921 -0.02968364 -0.01419371 -0.0195921 -0.03069436 -0.01185077 -0.0195921 -0.03152036 -0.009436547 -0.0195921 -0.03215688 -0.006965577 -0.0195921 -0.03259992 -0.004452705 -0.0195921 -0.03284692 -0.001913011 -0.0195921 -0.03289639 6.38027e-4 -0.0195921 -0.0327481 0.003185272 -0.0195921 -0.03240281 0.005713403 -0.0195921 -0.03186255 0.008207261 -0.0195921 -0.03113079 0.01065164 -0.0195921 -0.03021168 0.01303201 -0.0195921 -0.02911096 0.01533401 -0.0195921 -0.02783519 0.01754385 -0.0195921 -0.02639198 0.01964807 -0.0195921 -0.02478998 0.02163422 -0.0195921 -0.02303898 0.02349019 -0.0195921 -0.02114933 0.02520483 -0.0195921 -0.01913261 0.02676796 -0.0195921 -0.01700079 0.0281701 -0.0195921 -0.01476669 0.02940291 -0.0195921 -0.01244378 0.03045874 -0.0195921 -0.01004594 0.03133141 -0.0195921 -0.00758785 0.03201574 -0.0195921 -0.005083978 0.03250741 -0.0195921 -0.002549648 0.03280371 -0.0195921 0 0.03290259 -0.0195921 0.002502202 0.03219336 -0.0165413 0.004989445 0.03190267 -0.0165413 0.007446646 0.03142005 -0.0165413 0.009859085 0.03074854 -0.0165413 0.01221215 0.02989196 -0.0165413 0.01449185 0.0288558 -0.0165413 0.01668447 0.027646 -0.0165413 0.01877665 0.02626997 -0.0165413 0.02075582 0.02473586 -0.0165413 0.02261036 0.02305305 -0.0165413 0.0243287 0.02123165 -0.0165413 0.0259009 0.01928246 -0.0165413 0.02731728 0.01721733 -0.0165413 0.02856934 0.01504874 -0.0165413 0.02964961 0.01278954 -0.0165413 0.03055155 0.01045352 -0.0165413 0.03126972 0.008054554 -0.0165413 0.03179991 0.005607128 -0.0165413 0.03213876 0.003126025 -0.0165413 0.03228431 6.26156e-4 -0.0165413 0.03223586 -0.001877427 -0.0165413 0.03199332 -0.004369914 -0.0165413 0.03155857 -0.006835997 -0.0165413 0.03093385 -0.009261012 -0.0165413 0.03012323 -0.01163023 -0.0165413 0.02913141 -0.01392966 -0.0165413 0.02796435 -0.01614516 -0.0165413 0.02662909 -0.01826363 -0.0165413 0.02513372 -0.02027231 -0.0165413 0.02348721 -0.02215898 -0.0165413 0.02169936 -0.02391242 -0.0165413 0.01978117 -0.02552217 -0.0165413 0.01774388 -0.02697831 -0.0165413 0.01559984 -0.02827215 -0.0165413 0.01336205 -0.02939599 -0.0165413 0.0110439 -0.03034311 -0.0165413 0.008659422 -0.03110766 -0.0165413 0.006222665 -0.03168517 -0.0165413 0.003748655 -0.03207206 -0.0165413 0.001252055 -0.03226613 -0.0165413 -0.001252055 -0.03226613 -0.0165413 -0.003748655 -0.03207206 -0.0165413 -0.006222665 -0.03168517 -0.0165413 -0.008659422 -0.03110766 -0.0165413 -0.0110439 -0.03034311 -0.0165413 -0.01336205 -0.02939599 -0.0165413 -0.01559984 -0.02827215 -0.0165413 -0.01774388 -0.02697831 -0.0165413 -0.01978117 -0.02552217 -0.0165413 -0.02169936 -0.02391242 -0.0165413 -0.02348721 -0.02215898 -0.0165413 -0.02513372 -0.02027231 -0.0165413 -0.02662909 -0.01826363 -0.0165413 -0.02796435 -0.01614516 -0.0165413 -0.02913141 -0.01392966 -0.0165413 -0.03012323 -0.01163023 -0.0165413 -0.03093385 -0.009261012 -0.0165413 -0.03155857 -0.006835997 -0.0165413 -0.03199332 -0.004369914 -0.0165413 -0.03223586 -0.001877427 -0.0165413 -0.03228431 6.26156e-4 -0.0165413 -0.03213876 0.003126025 -0.0165413 -0.03179991 0.005607128 -0.0165413 -0.03126972 0.008054554 -0.0165413 -0.03055155 0.01045352 -0.0165413 -0.02964961 0.01278954 -0.0165413 -0.02856934 0.01504874 -0.0165413 -0.02731728 0.01721733 -0.0165413 -0.0259009 0.01928246 -0.0165413 -0.0243287 0.02123165 -0.0165413 -0.02261036 0.02305305 -0.0165413 -0.02075582 0.02473586 -0.0165413 -0.01877665 0.02626997 -0.0165413 -0.01668447 0.027646 -0.0165413 -0.01449185 0.0288558 -0.0165413 -0.01221215 0.02989196 -0.0165413 -0.009859085 0.03074854 -0.0165413 -0.007446646 0.03142005 -0.0165413 -0.004989445 0.03190267 -0.0165413 -0.002502202 0.03219336 -0.0165413 0 0.03229039 -0.0165413 0.002468228 0.03175598 -0.01346075 0.004921615 0.03146916 -0.01346075 0.007345497 0.03099322 -0.01346075 0.009725153 0.03033071 -0.01346075 0.01204627 0.02948594 -0.01346075 0.01429504 0.02846378 -0.01346075 0.01645779 0.02727043 -0.01346075 0.01852148 0.025913 -0.01346075 0.02047383 0.02439981 -0.01346075 0.02230316 0.02273988 -0.01346075 0.02399826 0.02094322 -0.01346075 0.02554905 0.01902049 -0.01346075 0.02694612 0.01698344 -0.01346075 0.02818125 0.01484423 -0.01346075 0.02924674 0.01261574 -0.01346075 0.03013652 0.01031148 -0.01346075 0.03084486 0.00794512 -0.01346075 0.03136783 0.005530953 -0.01346075 0.03170216 0.003083527 -0.01346075 0.03184574 6.17649e-4 -0.01346075 0.03179782 -0.001851916 -0.01346075 0.03155875 -0.004310429 -0.01346075 0.03112977 -0.006743133 -0.01346075 0.03051364 -0.009135186 -0.01346075 0.02971392 -0.01147228 -0.01346075 0.02873557 -0.01374042 -0.01346075 0.02758443 -0.01592588 -0.01346075 0.02626729 -0.01801556 -0.01346075 0.02479231 -0.01999694 -0.01346075 0.02316808 -0.02185791 -0.01346075 0.02140462 -0.02358764 -0.01346075 0.01951241 -0.02517539 -0.01346075 0.01750284 -0.02661174 -0.01346075 0.01538795 -0.027888 -0.01346075 0.01318061 -0.02899664 -0.01346075 0.01089394 -0.02993083 -0.01346075 0.008541762 -0.030685 -0.01346075 0.006138205 -0.03125464 -0.01346075 0.003697693 -0.03163635 -0.01346075 0.001235008 -0.03182774 -0.01346075 -0.001235008 -0.03182774 -0.01346075 -0.003697693 -0.03163635 -0.01346075 -0.006138205 -0.03125464 -0.01346075 -0.008541762 -0.030685 -0.01346075 -0.01089394 -0.02993083 -0.01346075 -0.01318061 -0.02899664 -0.01346075 -0.01538795 -0.027888 -0.01346075 -0.01750284 -0.02661174 -0.01346075 -0.01951241 -0.02517539 -0.01346075 -0.02140462 -0.02358764 -0.01346075 -0.02316808 -0.02185791 -0.01346075 -0.02479231 -0.01999694 -0.01346075 -0.02626729 -0.01801556 -0.01346075 -0.02758443 -0.01592588 -0.01346075 -0.02873557 -0.01374042 -0.01346075 -0.02971392 -0.01147228 -0.01346075 -0.03051364 -0.009135186 -0.01346075 -0.03112977 -0.006743133 -0.01346075 -0.03155875 -0.004310429 -0.01346075 -0.03179782 -0.001851916 -0.01346075 -0.03184574 6.17649e-4 -0.01346075 -0.03170216 0.003083527 -0.01346075 -0.03136783 0.005530953 -0.01346075 -0.03084486 0.00794512 -0.01346075 -0.03013652 0.01031148 -0.01346075 -0.02924674 0.01261574 -0.01346075 -0.02818125 0.01484423 -0.01346075 -0.02694612 0.01698344 -0.01346075 -0.02554905 0.01902049 -0.01346075 -0.02399826 0.02094322 -0.01346075 -0.02230316 0.02273988 -0.01346075 -0.02047383 0.02439981 -0.01346075 -0.01852148 0.025913 -0.01346075 -0.01645779 0.02727043 -0.01346075 -0.01429504 0.02846378 -0.01346075 -0.01204627 0.02948594 -0.01346075 -0.009725153 0.03033071 -0.01346075 -0.007345497 0.03099322 -0.01346075 -0.004921615 0.03146916 -0.01346075 -0.002468228 0.03175598 -0.01346075 0 0.0318517 -0.01346075 0.002447724 0.03149294 -0.01036036 0.004880905 0.03120863 -0.01036036 0.007284641 0.03073656 -0.01036036 0.009644627 0.0300796 -0.01036036 0.01194649 0.02924174 -0.01036036 0.0141766 0.02822804 -0.01036036 0.01632148 0.02704459 -0.01036036 0.01836818 0.02569848 -0.01036036 0.02030438 0.02419775 -0.01036036 0.02211838 0.02255159 -0.01036036 0.02379947 0.02076977 -0.01036036 0.02533739 0.01886302 -0.01036036 0.02672296 0.01684284 -0.01036036 0.02794784 0.01472139 -0.01036036 0.02900463 0.01251137 -0.01036036 0.0298869 0.01022607 -0.01036036 0.03058952 0.007879316 -0.01036036 0.03110808 0.005485177 -0.01036036 0.0314396 0.003058016 -0.01036036 0.03158199 6.12534e-4 -0.01036036 0.03153455 -0.001836597 -0.01036036 0.03129732 -0.004274845 -0.01036036 0.03087198 -0.006687283 -0.01036036 0.03026098 -0.009059488 -0.01036036 0.02946794 -0.01137727 -0.01036036 0.02849763 -0.01362663 -0.01036036 0.02735596 -0.01579391 -0.01036036 0.02604985 -0.01786637 -0.01036036 0.02458697 -0.01983124 -0.01036036 0.02297621 -0.02167695 -0.01036036 0.0212273 -0.02339226 -0.01036036 0.01935076 -0.02496689 -0.01036036 0.01735788 -0.02639132 -0.01036036 0.01526045 -0.02765715 -0.01036036 0.01307135 -0.02875649 -0.01036036 0.01080363 -0.02968299 -0.01036036 0.008471012 -0.03043097 -0.01036036 0.006087303 -0.0309959 -0.01036036 0.003667116 -0.03137439 -0.01036036 0.001224756 -0.03156417 -0.01036036 -0.001224756 -0.03156417 -0.01036036 -0.003667116 -0.03137439 -0.01036036 -0.006087303 -0.0309959 -0.01036036 -0.008471012 -0.03043097 -0.01036036 -0.01080363 -0.02968299 -0.01036036 -0.01307135 -0.02875649 -0.01036036 -0.01526045 -0.02765715 -0.01036036 -0.01735788 -0.02639132 -0.01036036 -0.01935076 -0.02496689 -0.01036036 -0.0212273 -0.02339226 -0.01036036 -0.02297621 -0.02167695 -0.01036036 -0.02458697 -0.01983124 -0.01036036 -0.02604985 -0.01786637 -0.01036036 -0.02735596 -0.01579391 -0.01036036 -0.02849763 -0.01362663 -0.01036036 -0.02946794 -0.01137727 -0.01036036 -0.03026098 -0.009059488 -0.01036036 -0.03087198 -0.006687283 -0.01036036 -0.03129732 -0.004274845 -0.01036036 -0.03153455 -0.001836597 -0.01036036 -0.03158199 6.12534e-4 -0.01036036 -0.0314396 0.003058016 -0.01036036 -0.03110808 0.005485177 -0.01036036 -0.03058952 0.007879316 -0.01036036 -0.0298869 0.01022607 -0.01036036 -0.02900463 0.01251137 -0.01036036 -0.02794784 0.01472139 -0.01036036 -0.02672296 0.01684284 -0.01036036 -0.02533739 0.01886302 -0.01036036 -0.02379947 0.02076977 -0.01036036 -0.02211838 0.02255159 -0.01036036 -0.02030438 0.02419775 -0.01036036 -0.01836818 0.02569848 -0.01036036 -0.01632148 0.02704459 -0.01036036 -0.0141766 0.02822804 -0.01036036 -0.01194649 0.02924174 -0.01036036 -0.009644627 0.0300796 -0.01036036 -0.007284641 0.03073656 -0.01036036 -0.004880905 0.03120863 -0.01036036 -0.002447724 0.03149294 -0.01036036 0 0.03158795 -0.01036036 0.002440989 0.03140527 -0.00725001 0.004867315 0.03112167 -0.00725001 0.007264375 0.03065091 -0.00725001 0.009617745 0.02999573 -0.00725001 0.01191323 0.02916026 -0.00725001 0.01413708 0.02814942 -0.00725001 0.016276 0.02696925 -0.00725001 0.01831698 0.02562677 -0.00725001 0.02024769 0.0241304 -0.00725001 0.02205675 0.02248877 -0.00725001 0.02373313 0.02071183 -0.00725001 0.02526688 0.01881045 -0.00725001 0.02664852 0.01679593 -0.00725001 0.02786993 0.01468026 -0.00725001 0.02892374 0.0124765 -0.00725001 0.02980363 0.01019752 -0.00725001 0.03050428 0.007857382 -0.00725001 0.03102141 0.005469918 -0.00725001 0.03135204 0.003049433 -0.00725001 0.03149408 6.10827e-4 -0.00725001 0.03144669 -0.001831471 -0.00725001 0.03121018 -0.004262924 -0.00725001 0.03078591 -0.006668627 -0.00725001 0.03017657 -0.009034276 -0.00725001 0.0293858 -0.0113455 -0.00725001 0.02841824 -0.01358854 -0.00725001 0.02727979 -0.01574999 -0.00725001 0.02597725 -0.0178166 -0.00725001 0.02451843 -0.01977604 -0.00725001 0.02291226 -0.02161651 -0.00725001 0.02116823 -0.02332711 -0.00725001 0.01929688 -0.02489727 -0.00725001 0.01730942 -0.02631783 -0.00725001 0.01521795 -0.02758008 -0.00725001 0.01303493 -0.02867639 -0.00725001 0.01077353 -0.02960032 -0.00725001 0.008447408 -0.03034615 -0.00725001 0.006070435 -0.03090947 -0.00725001 0.003656864 -0.03128695 -0.00725001 0.001221418 -0.03147619 -0.00725001 -0.001221418 -0.03147619 -0.00725001 -0.003656864 -0.03128695 -0.00725001 -0.006070435 -0.03090947 -0.00725001 -0.008447408 -0.03034615 -0.00725001 -0.01077353 -0.02960032 -0.00725001 -0.01303493 -0.02867639 -0.00725001 -0.01521795 -0.02758008 -0.00725001 -0.01730942 -0.02631783 -0.00725001 -0.01929688 -0.02489727 -0.00725001 -0.02116823 -0.02332711 -0.00725001 -0.02291226 -0.02161651 -0.00725001 -0.02451843 -0.01977604 -0.00725001 -0.02597725 -0.0178166 -0.00725001 -0.02727979 -0.01574999 -0.00725001 -0.02841824 -0.01358854 -0.00725001 -0.0293858 -0.0113455 -0.00725001 -0.03017657 -0.009034276 -0.00725001 -0.03078591 -0.006668627 -0.00725001 -0.03121018 -0.004262924 -0.00725001 -0.03144669 -0.001831471 -0.00725001 -0.03149408 6.10827e-4 -0.00725001 -0.03135204 0.003049433 -0.00725001 -0.03102141 0.005469918 -0.00725001 -0.03050428 0.007857382 -0.00725001 -0.02980363 0.01019752 -0.00725001 -0.02892374 0.0124765 -0.00725001 -0.02786993 0.01468026 -0.00725001 -0.02664852 0.01679593 -0.00725001 -0.02526688 0.01881045 -0.00725001 -0.02373313 0.02071183 -0.00725001 -0.02205675 0.02248877 -0.00725001 -0.02024769 0.0241304 -0.00725001 -0.01831698 0.02562677 -0.00725001 -0.016276 0.02696925 -0.00725001 -0.01413708 0.02814942 -0.00725001 -0.01191323 0.02916026 -0.00725001 -0.009617745 0.02999573 -0.00725001 -0.007264375 0.03065091 -0.00725001 -0.004867315 0.03112167 -0.00725001 -0.002440989 0.03140527 -0.00725001 0 0.03149998 -0.00725001 0.03621709 -0.00343734 -0.03013902 0.03585332 -0.006166458 -0.03013902 0.03528434 -0.008860409 -0.03013902 0.03451317 -0.01150351 -0.03013902 0.03354436 -0.01408082 -0.03013902 0.03238338 -0.01657742 -0.03013902 0.03103685 -0.01897901 -0.03013902 0.02951264 -0.02127194 -0.03013902 0.02781933 -0.02344304 -0.03013902 0.0259667 -0.02547985 -0.03013902 0.02396523 -0.02737069 -0.03013902 0.02182668 -0.0291047 -0.03013902 0.0195629 -0.03067213 -0.03013902 0.01718717 -0.03206384 -0.03013902 0.01471304 -0.03327178 -0.03013902 0.01215457 -0.0342893 -0.03013902 0.00952655 -0.03511035 -0.03013902 0.006843924 -0.0357303 -0.03013902 0.004122078 -0.0361455 -0.03013902 0.001376569 -0.0363537 -0.03013902 -0.03632122 0.002064347 -0.03013902 -0.03606098 0.004805386 -0.03013902 -0.03559434 0.007518887 -0.03013902 -0.03492379 0.01018929 -0.03013902 -0.03405308 0.01280128 -0.03013902 -0.03298747 0.01534003 -0.03013902 -0.03173279 0.01779097 -0.03013902 -0.03029644 0.02013993 -0.03013902 -0.02868652 0.02237349 -0.03013902 -0.02691227 0.02447897 -0.03013902 -0.02498388 0.02644413 -0.03013902 -0.02291238 0.02825796 -0.03013902 -0.02070963 0.02990984 -0.03013902 -0.01838827 0.03139042 -0.03013902 -0.01596152 0.03269124 -0.03013902 -0.01344347 0.03380477 -0.03013902 -0.0108484 0.03472471 -0.03013902 -0.008191108 0.03544569 -0.03013902 -0.005486965 0.03596365 -0.03013902 -0.00275135 0.03627562 -0.03013902 0 0.03749996 -0.03714996 0 0.03742939 -0.03536945 0.002830684 0.03732222 -0.03536945 0.005645215 0.03700125 -0.03536945 0.008427441 0.03646826 -0.03536945 0.01116126 0.03572648 -0.03536945 0.01383125 0.03478008 -0.03536945 0.01642209 0.03363442 -0.03536945 0.01891881 0.03229612 -0.03536945 0.02130717 0.0307728 -0.03536945 0.02357339 0.02907317 -0.03536945 0.02570468 0.02720713 -0.03536945 0.02768874 0.02518516 -0.03536945 0.02951413 0.02301901 -0.03536945 0.03117048 0.02072089 -0.03536945 0.03264838 0.01830416 -0.03536945 0.03393918 0.01578265 -0.03536945 0.03503561 0.01317059 -0.03536945 0.03593128 0.01048326 -0.03536945 0.03662127 0.007735729 -0.03536945 0.03710138 0.004944026 -0.03536945 0.03736913 0.002123892 -0.03536945 0.03742265 -7.08319e-4 -0.03536945 0.03726196 -0.003536522 -0.03536945 0.03688776 -0.006344437 -0.03536945 0.03630226 -0.009116053 -0.03536945 0.03550893 -0.01183539 -0.03536945 0.0345121 -0.01448696 -0.03536945 0.03331762 -0.01705569 -0.03536945 0.03193229 -0.0195266 -0.03536945 0.03036409 -0.02188569 -0.03536945 0.02862191 -0.02411931 -0.03536945 0.02671581 -0.02621489 -0.03536945 0.02465671 -0.02816039 -0.03536945 0.02245628 -0.02994441 -0.03536945 0.02012741 -0.03155708 -0.03536945 0.01768308 -0.03298884 -0.03536945 0.01513755 -0.03423178 -0.03536945 0.01250529 -0.03527849 -0.03536945 0.009801387 -0.03612321 -0.03536945 0.007041335 -0.0367611 -0.03536945 0.004240989 -0.03718835 -0.03536945 0.001416385 -0.03740257 -0.03536945 -0.001416385 -0.03740257 -0.03536945 -0.004240989 -0.03718835 -0.03536945 -0.007041335 -0.0367611 -0.03536945 -0.009801387 -0.03612321 -0.03536945 -0.01250529 -0.03527849 -0.03536945 -0.01513755 -0.03423178 -0.03536945 -0.01768308 -0.03298884 -0.03536945 -0.02012741 -0.03155708 -0.03536945 -0.02245628 -0.02994441 -0.03536945 -0.02465671 -0.02816039 -0.03536945 -0.02671581 -0.02621489 -0.03536945 -0.02862191 -0.02411931 -0.03536945 -0.03036409 -0.02188569 -0.03536945 -0.03193229 -0.0195266 -0.03536945 -0.03331762 -0.01705569 -0.03536945 -0.0345121 -0.01448696 -0.03536945 -0.03550893 -0.01183539 -0.03536945 -0.03630226 -0.009116053 -0.03536945 -0.03688776 -0.006344437 -0.03536945 -0.03726196 -0.003536522 -0.03536945 -0.03742265 -7.08319e-4 -0.03536945 -0.03736913 0.002123892 -0.03536945 -0.03710138 0.004944026 -0.03536945 -0.03662127 0.007735729 -0.03536945 -0.03593128 0.01048326 -0.03536945 -0.03503561 0.01317059 -0.03536945 -0.03393918 0.01578265 -0.03536945 -0.03264838 0.01830416 -0.03536945 -0.03117048 0.02072089 -0.03536945 -0.02951413 0.02301901 -0.03536945 -0.02768874 0.02518516 -0.03536945 -0.02570468 0.02720713 -0.03536945 -0.02357339 0.02907317 -0.03536945 -0.02130717 0.0307728 -0.03536945 -0.01891881 0.03229612 -0.03536945 -0.01642209 0.03363442 -0.03536945 -0.01383125 0.03478008 -0.03536945 -0.01116126 0.03572648 -0.03536945 -0.008427441 0.03646826 -0.03536945 -0.005645215 0.03700125 -0.03536945 -0.002830684 0.03732222 -0.03536945 -0.00281471 0.03711158 -0.03360003 0 0.03721815 -0.03360003 -0.002788186 0.03676193 -0.03185296 0 0.03686749 -0.03185296 0 0.03637981 -0.03013902 -0.005613386 0.03679233 -0.03360003 -0.005560517 0.03644579 -0.03185296 -0.008379876 0.03626251 -0.03360003 -0.00830096 0.03592085 -0.03185296 -0.01109838 0.0355249 -0.03360003 -0.01099377 0.03519028 -0.03185296 -0.01375329 0.03458374 -0.03360003 -0.01362371 0.03425794 -0.03185296 -0.01632934 0.03344458 -0.03360003 -0.01617556 0.03312957 -0.03185296 -0.01881206 0.03211385 -0.03360003 -0.01863485 0.03181129 -0.03185296 -0.02118682 0.03059905 -0.03360003 -0.02098733 0.03031086 -0.03185296 -0.02344042 0.02890908 -0.03360003 -0.02321958 0.02863687 -0.03185296 -0.0255596 0.02705359 -0.03360003 -0.02531886 0.02679878 -0.03185296 -0.02753239 0.02504307 -0.03360003 -0.02727305 0.02480715 -0.03185296 -0.02934753 0.02288907 -0.03360003 -0.02907115 0.02267342 -0.03185296 -0.03099459 0.02060401 -0.03360003 -0.03070265 0.02040994 -0.03185296 -0.03246402 0.01820093 -0.03360003 -0.03215831 0.01802951 -0.03185296 -0.03374761 0.0156936 -0.03360003 -0.03342974 0.01554572 -0.03185296 -0.0348379 0.01309633 -0.03360003 -0.03450965 0.01297301 -0.03185296 -0.03572857 0.01042401 -0.03360003 -0.03539192 0.01032584 -0.03185296 -0.03641462 0.007692158 -0.03360003 -0.03607153 0.007619619 -0.03185296 -0.03689199 0.004916131 -0.03360003 -0.03654456 0.004869818 -0.03185296 -0.03715819 0.002111852 -0.03360003 -0.03680819 0.002091944 -0.03185296 -0.03721147 -7.04322e-4 -0.03360003 -0.036861 -6.97687e-4 -0.03185296 -0.03637325 -6.88457e-4 -0.03013902 -0.03621709 -0.00343734 -0.03013902 -0.03705161 -0.003516495 -0.03360003 -0.03670263 -0.003483355 -0.03185296 -0.03585332 -0.006166458 -0.03013902 -0.03667962 -0.006308615 -0.03360003 -0.03633403 -0.006249189 -0.03185296 -0.03528434 -0.008860409 -0.03013902 -0.0360974 -0.009064614 -0.03360003 -0.03575742 -0.008979201 -0.03185296 -0.03451317 -0.01150351 -0.03013902 -0.03530848 -0.01176857 -0.03360003 -0.03497582 -0.01165777 -0.03185296 -0.03354436 -0.01408082 -0.03013902 -0.03431731 -0.01440531 -0.03360003 -0.03399401 -0.01426959 -0.03185296 -0.03238338 -0.01657742 -0.03013902 -0.03312957 -0.01695936 -0.03360003 -0.03281754 -0.01679962 -0.03185296 -0.03103685 -0.01897901 -0.03013902 -0.03175204 -0.01941639 -0.03360003 -0.03145301 -0.01923346 -0.03185296 -0.02951264 -0.02127194 -0.03013902 -0.03019273 -0.02176213 -0.03360003 -0.02990823 -0.02155715 -0.03185296 -0.02781933 -0.02344304 -0.03013902 -0.02846038 -0.02398324 -0.03360003 -0.02819228 -0.02375727 -0.03185296 -0.0259667 -0.02547985 -0.03013902 -0.02656507 -0.02606695 -0.03360003 -0.02631485 -0.02582138 -0.03185296 -0.02396523 -0.02737069 -0.03013902 -0.02451759 -0.02800136 -0.03360003 -0.02428656 -0.02773761 -0.03185296 -0.02182668 -0.0291047 -0.03013902 -0.02232956 -0.0297755 -0.03360003 -0.02211928 -0.029495 -0.03185296 -0.0195629 -0.03067213 -0.03013902 -0.02001374 -0.03137898 -0.03360003 -0.01982522 -0.0310834 -0.03185296 -0.01718717 -0.03206384 -0.03013902 -0.01758331 -0.0328027 -0.03360003 -0.0174176 -0.03249371 -0.03185296 -0.01471304 -0.03327178 -0.03013902 -0.01505208 -0.0340386 -0.03360003 -0.01491034 -0.03371793 -0.03185296 -0.01215457 -0.0342893 -0.03013902 -0.01243472 -0.03507941 -0.03360003 -0.01231753 -0.03474903 -0.03185296 -0.00952655 -0.03511035 -0.03013902 -0.009746074 -0.03591936 -0.03360003 -0.009654283 -0.03558105 -0.03185296 -0.006843924 -0.0357303 -0.03013902 -0.007001638 -0.03655362 -0.03360003 -0.006935656 -0.03620934 -0.03185296 -0.004122078 -0.0361455 -0.03013902 -0.004217088 -0.03697848 -0.03360003 -0.004177272 -0.03663015 -0.03185296 -0.001376569 -0.0363537 -0.03013902 -0.001408278 -0.03719151 -0.03360003 -0.001395106 -0.03684115 -0.03185296 0.001408278 -0.03719151 -0.03360003 0.001395106 -0.03684115 -0.03185296 0.004217088 -0.03697848 -0.03360003 0.004177272 -0.03663015 -0.03185296 0.007001638 -0.03655362 -0.03360003 0.006935656 -0.03620934 -0.03185296 0.009746074 -0.03591936 -0.03360003 0.009654283 -0.03558105 -0.03185296 0.01243472 -0.03507941 -0.03360003 0.01231753 -0.03474903 -0.03185296 0.01505208 -0.0340386 -0.03360003 0.01491034 -0.03371793 -0.03185296 0.01758331 -0.0328027 -0.03360003 0.0174176 -0.03249371 -0.03185296 0.02001374 -0.03137898 -0.03360003 0.01982522 -0.0310834 -0.03185296 0.02232956 -0.0297755 -0.03360003 0.02211928 -0.029495 -0.03185296 0.02451759 -0.02800136 -0.03360003 0.02428656 -0.02773761 -0.03185296 0.02656507 -0.02606695 -0.03360003 0.02631485 -0.02582138 -0.03185296 0.02846038 -0.02398324 -0.03360003 0.02819228 -0.02375727 -0.03185296 0.03019273 -0.02176213 -0.03360003 0.02990823 -0.02155715 -0.03185296 0.03175204 -0.01941639 -0.03360003 0.03145301 -0.01923346 -0.03185296 0.03312957 -0.01695936 -0.03360003 0.03281754 -0.01679962 -0.03185296 0.03431731 -0.01440531 -0.03360003 0.03399401 -0.01426959 -0.03185296 0.03530848 -0.01176857 -0.03360003 0.03497582 -0.01165777 -0.03185296 0.0360974 -0.009064614 -0.03360003 0.03575742 -0.008979201 -0.03185296 0.03667962 -0.006308615 -0.03360003 0.03633403 -0.006249189 -0.03185296 0.03705161 -0.003516495 -0.03360003 0.03670263 -0.003483355 -0.03185296 0.03721147 -7.04322e-4 -0.03360003 0.036861 -6.97687e-4 -0.03185296 0.03637325 -6.88457e-4 -0.03013902 0.03632122 0.002064347 -0.03013902 0.03715819 0.002111852 -0.03360003 0.03680819 0.002091944 -0.03185296 0.03606098 0.004805386 -0.03013902 0.03689199 0.004916131 -0.03360003 0.03654456 0.004869818 -0.03185296 0.03559434 0.007518887 -0.03013902 0.03641462 0.007692158 -0.03360003 0.03607153 0.007619619 -0.03185296 0.03492379 0.01018929 -0.03013902 0.03572857 0.01042401 -0.03360003 0.03539192 0.01032584 -0.03185296 0.03405308 0.01280128 -0.03013902 0.0348379 0.01309633 -0.03360003 0.03450965 0.01297301 -0.03185296 0.03298747 0.01534003 -0.03013902 0.03374761 0.0156936 -0.03360003 0.03342974 0.01554572 -0.03185296 0.03173279 0.01779097 -0.03013902 0.03246402 0.01820093 -0.03360003 0.03215831 0.01802951 -0.03185296 0.03029644 0.02013993 -0.03013902 0.03099459 0.02060401 -0.03360003 0.03070265 0.02040994 -0.03185296 0.02868652 0.02237349 -0.03013902 0.02934753 0.02288907 -0.03360003 0.02907115 0.02267342 -0.03185296 0.02691227 0.02447897 -0.03013902 0.02753239 0.02504307 -0.03360003 0.02727305 0.02480715 -0.03185296 0.02498388 0.02644413 -0.03013902 0.0255596 0.02705359 -0.03360003 0.02531886 0.02679878 -0.03185296 0.02291238 0.02825796 -0.03013902 0.02344042 0.02890908 -0.03360003 0.02321958 0.02863687 -0.03185296 0.02070963 0.02990984 -0.03013902 0.02118682 0.03059905 -0.03360003 0.02098733 0.03031086 -0.03185296 0.01838827 0.03139042 -0.03013902 0.01881206 0.03211385 -0.03360003 0.01863485 0.03181129 -0.03185296 0.01596152 0.03269124 -0.03013902 0.01632934 0.03344458 -0.03360003 0.01617556 0.03312957 -0.03185296 0.01344347 0.03380477 -0.03013902 0.01375329 0.03458374 -0.03360003 0.01362371 0.03425794 -0.03185296 0.0108484 0.03472471 -0.03013902 0.01109838 0.0355249 -0.03360003 0.01099377 0.03519028 -0.03185296 0.008191108 0.03544569 -0.03013902 0.008379876 0.03626251 -0.03360003 0.00830096 0.03592085 -0.03185296 0.005486965 0.03596365 -0.03013902 0.005613386 0.03679233 -0.03360003 0.005560517 0.03644579 -0.03185296 0.00275135 0.03627562 -0.03013902 0.00281471 0.03711158 -0.03360003 0.002788186 0.03676193 -0.03185296 0.03077512 0.005426466 -0.006999969 0.03102141 0.005469918 -0.006999969 0.03119713 0.001816928 -0.006999969 0.03144669 0.001831471 -0.006999969 0.03119713 -0.001816928 -0.006999969 0.03144669 -0.001831471 -0.006999969 0.03077512 -0.005426466 -0.006999969 0.03102141 -0.005469918 -0.006999969 0.02993708 -0.008962571 -0.006999969 0.03017657 -0.009034276 -0.006999969 0.02869421 -0.01237744 -0.006999969 0.02892374 -0.0124765 -0.006999969 0.02706325 -0.015625 -0.006999969 0.02727979 -0.01574999 -0.006999969 0.02506631 -0.0186612 -0.006999969 0.02526688 -0.01881045 -0.006999969 0.02273041 -0.02144503 -0.006999969 0.02291226 -0.02161651 -0.006999969 0.02008706 -0.02393889 -0.006999969 0.02024769 -0.0241304 -0.006999969 0.01717209 -0.02610898 -0.006999969 0.01730942 -0.02631783 -0.006999969 0.01402497 -0.0279259 -0.006999969 0.01413708 -0.02814942 -0.006999969 0.01068806 -0.02936536 -0.006999969 0.01077353 -0.02960032 -0.006999969 0.007206678 -0.03040754 -0.006999969 0.007264375 -0.03065091 -0.006999969 0.003627896 -0.0310387 -0.006999969 0.003656864 -0.03128695 -0.006999969 0 -0.03125 -0.006999969 0 -0.03149998 -0.006999969 -0.003627896 -0.0310387 -0.006999969 -0.003656864 -0.03128695 -0.006999969 -0.007206678 -0.03040754 -0.006999969 -0.007264375 -0.03065091 -0.006999969 -0.01068806 -0.02936536 -0.006999969 -0.01077353 -0.02960032 -0.006999969 -0.01402497 -0.0279259 -0.006999969 -0.01413708 -0.02814942 -0.006999969 -0.01717209 -0.02610898 -0.006999969 -0.01730942 -0.02631783 -0.006999969 -0.02008706 -0.02393889 -0.006999969 -0.02024769 -0.0241304 -0.006999969 -0.02273041 -0.02144503 -0.006999969 -0.02291226 -0.02161651 -0.006999969 -0.02506631 -0.0186612 -0.006999969 -0.02526688 -0.01881045 -0.006999969 -0.02706325 -0.015625 -0.006999969 -0.02727979 -0.01574999 -0.006999969 -0.02869421 -0.01237744 -0.006999969 -0.02892374 -0.0124765 -0.006999969 -0.02993708 -0.008962571 -0.006999969 -0.03017657 -0.009034276 -0.006999969 -0.03077512 -0.005426466 -0.006999969 -0.03102141 -0.005469918 -0.006999969 -0.03119713 -0.001816928 -0.006999969 -0.03144669 -0.001831471 -0.006999969 -0.03119713 0.001816928 -0.006999969 -0.03144669 0.001831471 -0.006999969 -0.03077512 0.005426466 -0.006999969 -0.03102141 0.005469918 -0.006999969 -0.02993708 0.008962571 -0.006999969 -0.03017657 0.009034276 -0.006999969 -0.02869421 0.01237744 -0.006999969 -0.02892374 0.0124765 -0.006999969 -0.02706325 0.015625 -0.006999969 -0.02727979 0.01574999 -0.006999969 -0.02506631 0.0186612 -0.006999969 -0.02526688 0.01881045 -0.006999969 -0.02273041 0.02144503 -0.006999969 -0.02291226 0.02161651 -0.006999969 -0.02008706 0.02393889 -0.006999969 -0.02024769 0.0241304 -0.006999969 -0.01717209 0.02610898 -0.006999969 -0.01730942 0.02631783 -0.006999969 -0.01402497 0.0279259 -0.006999969 -0.01413708 0.02814942 -0.006999969 -0.01068806 0.02936536 -0.006999969 -0.01077353 0.02960032 -0.006999969 -0.007206678 0.03040754 -0.006999969 -0.007264375 0.03065091 -0.006999969 -0.003627896 0.0310387 -0.006999969 -0.003656864 0.03128695 -0.006999969 0 0.03125 -0.006999969 0 0.03149998 -0.006999969 0.003627896 0.0310387 -0.006999969 0.003656864 0.03128695 -0.006999969 0.007206678 0.03040754 -0.006999969 0.007264375 0.03065091 -0.006999969 0.01068806 0.02936536 -0.006999969 0.01077353 0.02960032 -0.006999969 0.01402497 0.0279259 -0.006999969 0.01413708 0.02814942 -0.006999969 0.01717209 0.02610898 -0.006999969 0.01730942 0.02631783 -0.006999969 0.02008706 0.02393889 -0.006999969 0.02024769 0.0241304 -0.006999969 0.02273041 0.02144503 -0.006999969 0.02291226 0.02161651 -0.006999969 0.02506631 0.0186612 -0.006999969 0.02526688 0.01881045 -0.006999969 0.02706325 0.015625 -0.006999969 0.02727979 0.01574999 -0.006999969 0.02869421 0.01237744 -0.006999969 0.02892374 0.0124765 -0.006999969 0.02993708 0.008962571 -0.006999969 0.03017657 0.009034276 -0.006999969 0 0.03125 -0.00725001 -0.003627896 0.0310387 -0.00725001 -0.007206678 0.03040754 -0.00725001 -0.01068806 0.02936536 -0.00725001 -0.01402497 0.0279259 -0.00725001 -0.01717209 0.02610898 -0.00725001 -0.02008706 0.02393889 -0.00725001 -0.02273041 0.02144503 -0.00725001 -0.02506631 0.0186612 -0.00725001 -0.02706325 0.015625 -0.00725001 -0.02869421 0.01237744 -0.00725001 -0.02993708 0.008962571 -0.00725001 -0.03077512 0.005426466 -0.00725001 -0.03119713 0.001816928 -0.00725001 -0.03119713 -0.001816928 -0.00725001 -0.03077512 -0.005426466 -0.00725001 -0.02993708 -0.008962571 -0.00725001 -0.02869421 -0.01237744 -0.00725001 -0.02706325 -0.015625 -0.00725001 -0.02506631 -0.0186612 -0.00725001 -0.02273041 -0.02144503 -0.00725001 -0.02008706 -0.02393889 -0.00725001 -0.01717209 -0.02610898 -0.00725001 -0.01402497 -0.0279259 -0.00725001 -0.01068806 -0.02936536 -0.00725001 -0.007206678 -0.03040754 -0.00725001 -0.003627896 -0.0310387 -0.00725001 0 -0.03125 -0.00725001 0.003627896 -0.0310387 -0.00725001 0.007206678 -0.03040754 -0.00725001 0.01068806 -0.02936536 -0.00725001 0.01402497 -0.0279259 -0.00725001 0.01717209 -0.02610898 -0.00725001 0.02008706 -0.02393889 -0.00725001 0.02273041 -0.02144503 -0.00725001 0.02506631 -0.0186612 -0.00725001 0.02706325 -0.015625 -0.00725001 0.02869421 -0.01237744 -0.00725001 0.02993708 -0.008962571 -0.00725001 0.03077512 -0.005426466 -0.00725001 0.03119713 -0.001816928 -0.00725001 0.03119713 0.001816928 -0.00725001 0.03077512 0.005426466 -0.00725001 0.02993708 0.008962571 -0.00725001 0.02869421 0.01237744 -0.00725001 0.02706325 0.015625 -0.00725001 0.02506631 0.0186612 -0.00725001 0.02273041 0.02144503 -0.00725001 0.02008706 0.02393889 -0.00725001 0.01717209 0.02610898 -0.00725001 0.01402497 0.0279259 -0.00725001 0.01068806 0.02936536 -0.00725001 0.007206678 0.03040754 -0.00725001 0.003627896 0.0310387 -0.00725001 0 0.03125 -0.00725001 -0.005236804 -0.02801465 0 -0.001754403 -0.02844583 0 -0.006951451 0.02763921 0 0 0.02849996 0 0 -0.02849996 0 0.001754403 -0.02844583 0 -0.003502309 0.02828395 0 0.02848643 -8.77659e-4 0 0.01920032 0.02106165 0 0.02816265 -0.004371643 0 0.01646649 0.02326154 0 -0.01500326 -0.02423113 0 -0.0119118 -0.02589124 0 -0.008639812 -0.02715873 0 0.005236804 -0.02801465 0 0.008639812 -0.02715873 0 0.0119118 -0.02589124 0 0.01500326 -0.02423113 0 0.01786726 -0.02220374 0 0.02046048 -0.01983982 0 0.0134831 0.02510881 0 0.01029539 0.02657544 0 0.006951451 0.02763921 0 0.02624577 -0.01110881 0 0.02741193 -0.007799327 0 0.003502309 0.02828395 0 -0.01029539 0.02657544 0 -0.02624577 -0.01110881 0 -0.02468162 -0.01424998 0 -0.02274346 -0.01717501 0 -0.0134831 0.02510881 0 -0.01646649 0.02326154 0 -0.01920032 0.02106165 0 -0.02046048 -0.01983982 0 -0.01786726 -0.02220374 0 0.02274346 -0.01717501 0 0.02468162 -0.01424998 0 0.02837836 0.002629578 0 0.02784007 0.006097078 0 0.02687984 0.009472072 0 0.02551209 0.01270347 0 0.02375757 0.01574236 0 0.02164304 0.01854252 0 -0.02164304 0.01854252 0 -0.02375757 0.01574236 0 -0.02551209 0.01270347 0 -0.02687984 0.009472072 0 -0.02784007 0.006097078 0 -0.02837836 0.002629578 0 -0.02848643 -8.77659e-4 0 -0.02816265 -0.004371643 0 -0.02741193 -0.007799327 0 0 -0.02849996 0 -0.001754403 -0.02844583 -2.50008e-4 -0.005236804 -0.02801465 -2.50008e-4 -0.008639812 -0.02715873 -2.50008e-4 -0.0119118 -0.02589124 -2.50008e-4 -0.01500326 -0.02423113 -2.50008e-4 -0.01786726 -0.02220374 -2.50008e-4 -0.02046048 -0.01983982 -2.50008e-4 -0.02274346 -0.01717501 -2.50008e-4 -0.02468162 -0.01424998 -2.50008e-4 -0.02624577 -0.01110881 -2.50008e-4 -0.02741193 -0.007799327 -2.50008e-4 -0.02816265 -0.004371643 -2.50008e-4 -0.02848643 -8.77659e-4 -2.50008e-4 -0.02837836 0.002629578 -2.50008e-4 -0.02784007 0.006097078 -2.50008e-4 -0.02687984 0.009472072 -2.50008e-4 -0.02551209 0.01270347 -2.50008e-4 -0.02375757 0.01574236 -2.50008e-4 -0.02164304 0.01854252 -2.50008e-4 -0.01920032 0.02106165 -2.50008e-4 -0.01646649 0.02326154 -2.50008e-4 -0.0134831 0.02510881 -2.50008e-4 -0.01029539 0.02657544 -2.50008e-4 -0.006951451 0.02763921 -2.50008e-4 -0.003502309 0.02828395 -2.50008e-4 0 0.02849996 -2.50008e-4 0.003502309 0.02828395 -2.50008e-4 0.006951451 0.02763921 -2.50008e-4 0.01029539 0.02657544 -2.50008e-4 0.0134831 0.02510881 -2.50008e-4 0.01646649 0.02326154 -2.50008e-4 0.01920032 0.02106165 -2.50008e-4 0.02164304 0.01854252 -2.50008e-4 0.02375757 0.01574236 -2.50008e-4 0.02551209 0.01270347 -2.50008e-4 0.02687984 0.009472072 -2.50008e-4 0.02784007 0.006097078 -2.50008e-4 0.02837836 0.002629578 -2.50008e-4 0.02848643 -8.77659e-4 -2.50008e-4 0.02816265 -0.004371643 -2.50008e-4 0.02741193 -0.007799327 -2.50008e-4 0.02624577 -0.01110881 -2.50008e-4 0.02468162 -0.01424998 -2.50008e-4 0.02274346 -0.01717501 -2.50008e-4 0.02046048 -0.01983982 -2.50008e-4 0.01786726 -0.02220374 -2.50008e-4 0.01500326 -0.02423113 -2.50008e-4 0.0119118 -0.02589124 -2.50008e-4 0.008639812 -0.02715873 -2.50008e-4 0.005236804 -0.02801465 -2.50008e-4 0.001754403 -0.02844583 -2.50008e-4 -0.02892374 0.0124765 -2.50008e-4 -0.03017657 0.009034276 -2.50008e-4 -0.03102141 0.005469918 -2.50008e-4 -0.03144669 0.001831471 -2.50008e-4 -0.03144669 -0.001831471 -2.50008e-4 -0.03102141 -0.005469918 -2.50008e-4 -0.03017657 -0.009034276 -2.50008e-4 -0.02892374 -0.0124765 -2.50008e-4 -0.02727979 -0.01574999 -2.50008e-4 -0.02526688 -0.01881045 -2.50008e-4 -0.02291226 -0.02161651 -2.50008e-4 -0.02024769 -0.0241304 -2.50008e-4 -0.01730942 -0.02631783 -2.50008e-4 -0.01413708 -0.02814942 -2.50008e-4 -0.01077353 -0.02960032 -2.50008e-4 -0.007264375 -0.03065091 -2.50008e-4 -0.003656864 -0.03128695 -2.50008e-4 0.02526688 0.01881045 -2.50008e-4 0.02291226 0.02161651 -2.50008e-4 0.02024769 0.0241304 -2.50008e-4 0.01730942 0.02631783 -2.50008e-4 0.01413708 0.02814942 -2.50008e-4 0.01077353 0.02960032 -2.50008e-4 0.007264375 0.03065091 -2.50008e-4 0.003656864 0.03128695 -2.50008e-4 0 0.02849996 -2.50008e-4 0 0.03149998 -2.50008e-4 -0.003656864 0.03128695 -2.50008e-4 -0.007264375 0.03065091 -2.50008e-4 -0.01077353 0.02960032 -2.50008e-4 -0.01413708 0.02814942 -2.50008e-4 -0.01730942 0.02631783 -2.50008e-4 -0.02024769 0.0241304 -2.50008e-4 -0.02291226 0.02161651 -2.50008e-4 -0.02526688 0.01881045 -2.50008e-4 -0.02727979 0.01574999 -2.50008e-4 0 -0.03149998 -2.50008e-4 0.003656864 -0.03128695 -2.50008e-4 0.007264375 -0.03065091 -2.50008e-4 0.01077353 -0.02960032 -2.50008e-4 0.01413708 -0.02814942 -2.50008e-4 0.01730942 -0.02631783 -2.50008e-4 0.02024769 -0.0241304 -2.50008e-4 0.02291226 -0.02161651 -2.50008e-4 0.02526688 -0.01881045 -2.50008e-4 0.02727979 -0.01574999 -2.50008e-4 0.02892374 -0.0124765 -2.50008e-4 0.03017657 -0.009034276 -2.50008e-4 0.03102141 -0.005469918 -2.50008e-4 0.03144669 -0.001831471 -2.50008e-4 0.03144669 0.001831471 -2.50008e-4 0.03102141 0.005469918 -2.50008e-4 0.03017657 0.009034276 -2.50008e-4 0.02892374 0.0124765 -2.50008e-4 0.02727979 0.01574999 -2.50008e-4 0 0.03149998 -0.006999969 + + + + + + + + + + 0.05321872 0.9985829 0 -0.05321872 0.9985829 0 -0.1590597 0.9872691 0 -0.1590597 0.9872691 0 -0.2631043 0.9647675 0 -0.3641718 0.9313318 0 -0.4610813 0.887358 0 -0.4610809 0.8873581 0 -0.5528014 0.8333131 0 -0.552801 0.8333134 0 -0.6382399 0.7698376 0 -0.6382398 0.7698377 0 -0.7164658 0.6976222 0 -0.7164666 0.6976215 0 -0.786549 0.617528 0 -0.7865481 0.617529 0 -0.8477333 0.530423 0 -0.8477315 0.5304257 0 -0.8993134 0.4373048 0 -0.8993121 0.4373075 0 -0.9407029 0.3392317 0 -0.9407023 0.3392332 0 -0.9714281 0.2373343 0 -0.9714285 0.2373325 0 -0.991154 0.132717 0 -0.991154 0.1327171 0 -0.9996456 0.02662479 0 -0.9996455 0.02662658 0 -0.9968122 -0.07978421 0 -0.9826837 -0.1852911 0 -0.9826834 -0.1852927 0 -0.9574227 -0.2886901 0 -0.9213137 -0.3888201 0 -0.9213143 -0.3888188 0 -0.8747624 -0.4845522 0 -0.8747625 -0.484552 0 -0.8183028 -0.5747874 0 -0.8183026 -0.5747876 0 -0.7525647 -0.6585184 0 -0.7525647 -0.6585185 0 -0.6783127 -0.7347735 0 -0.6783133 -0.7347728 0 -0.5963639 -0.8027142 0 -0.5963643 -0.8027139 0 -0.5076705 -0.8615514 0 -0.5076702 -0.8615517 0 -0.413222 -0.9106303 0 -0.4132222 -0.9106303 0 -0.314067 -0.9494009 0 -0.2113855 -0.9774029 0 -0.1063003 -0.9943342 0 0 -1 0 0.1063003 -0.9943342 0 0.2113855 -0.9774029 0 0.314067 -0.9494009 0 0.4132222 -0.9106303 0 0.413222 -0.9106303 0 0.5076702 -0.8615517 0 0.5076705 -0.8615514 0 0.5963643 -0.8027139 0 0.5963639 -0.8027142 0 0.6783131 -0.734773 0 0.6783129 -0.7347732 0 0.7525647 -0.6585184 0 0.7525647 -0.6585185 0 0.8183028 -0.5747874 0 0.8183026 -0.5747876 0 0.8747624 -0.4845522 0 0.8747625 -0.484552 0 0.9213144 -0.3888186 0 0.9213137 -0.3888202 0 0.9574227 -0.2886901 0 0.9826834 -0.1852928 0 0.9826837 -0.185291 0 0.9968122 -0.07978421 0 0.9996455 0.02662658 0 0.9996456 0.02662479 0 0.991154 0.132717 0 0.991154 0.1327171 0 0.9714285 0.2373326 0 0.9714281 0.2373341 0 0.9407023 0.3392332 0 0.9407029 0.3392317 0 0.899312 0.4373076 0 0.8993135 0.4373046 0 0.8477317 0.5304255 0 0.8477331 0.5304232 0 0.7865481 0.6175291 0 0.786549 0.6175279 0 0.7164663 0.6976218 0 0.7164661 0.6976219 0 0.6382399 0.7698376 0 0.6382398 0.7698377 0 0.552801 0.8333134 0 0.5528014 0.8333131 0 0.4610809 0.8873581 0 0.4610813 0.887358 0 0.3641718 0.9313318 0 0.2631044 0.9647675 0 0.2631042 0.9647675 0 0.1590597 0.9872691 0 0.1590597 0.9872691 0 4.09567e-6 0 -1 0 0 -1 -2.04853e-6 0 -1 2.04989e-6 0 -1 2.05182e-6 0 -1 -2.05437e-6 0 -1 2.05751e-6 0 -1 1.03278e-6 0 -1 4.25429e-6 0 -1 -1.03533e-6 0 -1 3.24409e-7 0 -1 2.1158e-6 0 -1 -1.04131e-6 0 -1 1.051e-6 0 -1 -1.30385e-6 0 -1 1.29839e-6 0 -1 -4.36796e-6 0 -1 -8.85514e-6 0 -1 3.9806e-6 0 -1 8.92016e-6 0 -1 -3.95501e-6 0 -1 3.92867e-6 0 -1 -9.0614e-6 0 -1 3.90182e-6 0 -1 3.87399e-6 0 -1 -9.21968e-6 0 -1 -4.29685e-6 0 -1 -4.09535e-6 0 -1 4.2965e-6 0 -1 2.04808e-6 0 -1 4.28795e-6 0 -1 2.05583e-6 0 -1 1.02966e-6 0 -1 2.06338e-6 0 -1 5.17023e-7 0 -1 -1.55506e-6 0 -1 2.11883e-6 0 -1 -1.81941e-6 0 -1 1.04294e-6 0 -1 1.04662e-6 0 -1 -1.04916e-6 0 -1 1.04513e-6 0 -1 -1.03642e-6 0 -1 -1.03168e-6 0 -1 2.04286e-6 0 -1 4.3279e-6 0 -1 -2.03196e-6 0 -1 -3.99312e-6 0 -1 3.94192e-6 0 -1 -9.09975e-6 0 -1 3.88811e-6 0 -1 -9.17885e-6 0 -1 3.85995e-6 0 -1 -3.83154e-6 0 -1 4.29685e-6 0 -1 0.05508267 -0.9984818 0 -0.05508267 -0.9984818 0 -0.1645998 -0.9863605 0 -0.1646004 -0.9863604 0 -0.2721005 -0.962269 0 -0.2720999 -0.9622691 0 -0.3763097 -0.926494 0 -0.3763084 -0.9264945 0 -0.475955 -0.8794696 0 -0.4759557 -0.8794693 0 -0.5698021 -0.821782 0 -0.5698026 -0.8217817 0 -0.6567553 -0.7541038 0 -0.6567547 -0.7541044 0 -0.7357243 -0.6772812 0 -0.7357261 -0.6772793 0 -0.805762 -0.5922396 0 -0.866023 -0.5000042 0 -0.9157782 -0.4016845 0 -0.9157778 -0.4016854 0 -0.9544023 -0.2985238 0 -0.9544028 -0.2985219 0 -0.9814534 -0.1917015 0 -0.9814534 -0.1917008 0 -0.9965843 -0.08258211 0 -0.9965842 -0.08258312 0 -0.9996202 0.0275582 0 -0.9996203 0.02755695 0 -0.9905237 0.137342 0 -0.9905235 0.1373436 0 -0.9694002 0.2454861 0 -0.9693995 0.2454884 0 -0.9365112 0.3506378 0 -0.9365109 0.3506386 0 -0.8922532 0.4515355 0 -0.8371722 0.5469396 0 -0.8371714 0.5469407 0 -0.7719097 0.6357322 0 -0.6973034 0.7167761 0 -0.6973027 0.7167768 0 -0.6142089 0.7891435 0 -0.6142084 0.789144 0 -0.5236711 0.8519206 0 -0.5236722 0.8519198 0 -0.4267714 0.9043595 0 -0.4267724 0.9043592 0 -0.3247047 0.9458155 0 -0.3247038 0.9458158 0 -0.2186845 0.9757956 0 -0.2186851 0.9757955 0 -0.1100008 0.9939316 0 -0.1100004 0.9939315 0 0 1 0 0.1100007 0.9939315 0 0.1100005 0.9939315 0 0.2186845 0.9757956 0 0.2186851 0.9757955 0 0.3247049 0.9458155 0 0.3247036 0.9458158 0 0.4267714 0.9043595 0 0.4267724 0.9043592 0 0.5236714 0.8519204 0 0.523672 0.85192 0 0.6142084 0.789144 0 0.6142089 0.7891435 0 0.697304 0.7167755 0 0.6973021 0.7167774 0 0.7719097 0.6357322 0 0.8371722 0.5469396 0 0.8371714 0.5469407 0 0.8922532 0.4515355 0 0.9365112 0.3506378 0 0.9365109 0.3506386 0 0.9693995 0.2454884 0 0.9694002 0.2454861 0 0.9905235 0.1373433 0 0.9905236 0.1373424 0 0.9996203 0.02755695 0 0.9996202 0.0275582 0 0.9965842 -0.08258336 0 0.9965843 -0.08258193 0 0.9814535 -0.1917003 0 0.9814532 -0.191702 0 0.9544026 -0.2985227 0 0.9544025 -0.2985231 0 0.9157782 -0.4016845 0 0.9157778 -0.4016854 0 0.866023 -0.5000042 0 0.805762 -0.5922396 0 0.7357249 -0.6772805 0 0.7357255 -0.67728 0 0.6567547 -0.7541044 0 0.6567553 -0.7541038 0 0.5698018 -0.8217822 0 0.5698029 -0.8217815 0 0.4759547 -0.8794698 0 0.475956 -0.8794692 0 0.3763095 -0.926494 0 0.3763086 -0.9264944 0 0.2721005 -0.9622689 0 0.2720999 -0.962269 0 0.1645998 -0.9863605 0 0.1646004 -0.9863604 0 0 0 -1 2.28848e-6 0 -1 -1.12071e-5 0 -1 1.06958e-5 0 -1 1.381e-5 0 -1 -3.03386e-6 0 -1 1.93125e-7 0 -1 1.21859e-6 0 -1 -1.15307e-6 0 -1 3.19505e-5 0 -1 4.10285e-6 0 -1 -2.80158e-5 0 -1 -6.95635e-6 0 -1 2.57125e-6 0 -1 -2.27335e-6 0 -1 7.11698e-6 0 -1 -1.41388e-7 0 -1 5.03448e-7 0 -1 -5.53216e-7 0 -1 -2.37233e-7 0 -1 0 0 -1 1.68558e-5 0 -1 8.78828e-6 0 -1 9.34484e-6 0 -1 -4.44103e-6 0 -1 -3.21307e-7 0 -1 3.56874e-6 0 -1 1.16594e-5 0 -1 -3.39695e-6 0 -1 -2.6219e-6 0 -1 0 0 -1 -1.1979e-7 0 -1 -8.92875e-6 0 -1 5.3136e-7 0 -1 -4.64737e-7 0 -1 1.96813e-6 0 -1 -5.14566e-7 0 -1 -3.62423e-7 0 -1 4.18968e-7 0 -1 -7.4026e-7 0 -1 1.1815e-5 0 -1 1.40117e-7 0 -1 -2.679e-7 0 -1 1.80438e-5 0 -1 -2.41617e-6 0 -1 -9.74959e-7 0 -1 2.11676e-5 0 -1 -1.57624e-6 0 -1 -1.32321e-6 0 -1 -2.71139e-5 0 -1 8.34545e-6 0 -1 -1.84682e-6 0 -1 8.02439e-6 0 -1 0.08719199 -0.9961916 0 -0.08720529 -0.9961904 0 -0.08720648 -0.9961903 0 -0.258834 -0.9659219 0 -0.2588379 -0.9659209 0 -0.4226347 -0.9063002 0 -0.422624 -0.9063051 0 -0.5735049 -0.8192022 0 -0.5734989 -0.8192064 0 -0.7071042 -0.7071094 0 -0.7070968 -0.7071168 0 -0.8191371 -0.5735979 0 -0.8191306 -0.5736072 0 -0.9062878 -0.4226613 0 -0.9062933 -0.4226495 0 -0.9659569 -0.2587035 0 -0.9659534 -0.2587167 0 -0.9961937 -0.08716857 0 -0.9961937 -0.08716875 0 -0.9961937 0.08716857 0 -0.9961937 0.08716875 0 -0.9659534 0.2587164 0 -0.9659568 0.2587037 0 -0.9062932 0.4226498 0 -0.906288 0.4226609 0 -0.8191306 0.5736072 0 -0.8191371 0.5735979 0 -0.7070972 0.7071164 0 -0.7071037 0.7071098 0 -0.5734983 0.8192068 0 -0.5735054 0.8192018 0 -0.422624 0.9063051 0 -0.4226347 0.9063002 0 -0.2588375 0.9659209 0 -0.2588344 0.9659218 0 -0.08720648 0.9961903 0 -0.08720529 0.9961904 0 0.08719199 0.9961916 0 0.0871908 0.9961917 0 0.2588375 0.9659209 0 0.2588379 0.9659209 0 0.4226294 0.9063026 0 0.422624 0.9063051 0 0.5735049 0.8192022 0 0.5735054 0.8192018 0 0.7071877 0.707026 0 0.7071803 0.7070333 0 0.8191306 0.5736072 0 0.9062984 0.4226384 0 0.9062933 0.4226495 0 0.9659152 0.2588592 0 0.9659081 0.2588855 0 0.9961948 0.0871548 0 0.9961924 0.08718258 0 0.9961925 -0.0871824 0 0.9961948 -0.08715492 0 0.9659081 -0.2588852 0 0.965915 -0.2588595 0 0.9062932 -0.4226498 0 0.9062986 -0.4226381 0 0.8191306 -0.5736072 0 0.7071807 -0.7070329 0 0.7071872 -0.7070263 0 0.5735049 -0.8192022 0 0.5735054 -0.8192018 0 0.422624 -0.9063051 0 0.4226294 -0.9063026 0 0.2588375 -0.9659209 0 0.2588379 -0.9659209 0 0.0871908 -0.9961917 0 1.04754e-5 0 -1 -1.04754e-5 0 -1 2.74253e-6 0 -1 3.98898e-6 0 -1 2.07867e-6 0 -1 -2.74249e-6 0 -1 -3.98868e-6 0 -1 -4.15727e-6 0 -1 2.4086e-6 0 -1 -2.86981e-6 0 -1 -2.84282e-6 0 -1 2.90225e-5 0 -1 -1.47408e-5 0 -1 9.02224e-6 0 -1 1.23454e-5 0 -1 -1.24069e-5 0 -1 1.47423e-5 0 -1 -1.81431e-5 0 -1 0 0 1 -7.30119e-6 0 1 3.67496e-6 0 1 -3.65027e-6 0 1 2.29685e-7 0 1 -1.82524e-6 0 1 3.65027e-6 0 1 -7.34948e-6 0 1 7.30268e-6 0 1 1.47029e-5 0 1 -1.46015e-5 0 1 1.46009e-5 0 1 1.46038e-5 0 1 2.92078e-5 0 1 -2.94083e-5 0 1 2.92082e-5 0 1 -2.9404e-5 0 1 -2.92045e-5 0 1 -1.47022e-5 0 1 1.46028e-5 0 1 -7.35013e-6 0 1 9.18739e-7 0 1 1.46975e-5 0 1 -1.47031e-5 0 1 -1.47011e-5 0 1 1.4603e-5 0 1 2.94008e-5 0 1 2.92083e-5 0 1 -2.94048e-5 0 1 2.9212e-5 0 1 -2.94064e-5 0 1 2.9208e-5 0 1 -2.94042e-5 0 1 -1.4602e-5 0 1 0.05323082 0.9985823 0 -0.05323082 0.9985823 0 -0.1590604 0.9872689 0 -0.1590605 0.9872689 0 -0.2630987 0.964769 0 -0.3641607 0.9313362 0 -0.3641605 0.9313362 0 -0.461099 0.8873488 0 -0.4610879 0.8873546 0 -0.5528054 0.8333105 0 -0.5528062 0.8333099 0 -0.6382399 0.7698376 0 -0.6382477 0.7698312 0 -0.7164552 0.6976331 0 -0.7865536 0.6175222 0 -0.7865475 0.6175299 0 -0.8477328 0.5304238 0 -0.8477402 0.5304118 0 -0.8993096 0.4373126 0 -0.8993089 0.4373141 0 -0.9407031 0.3392311 0 -0.9407004 0.3392388 0 -0.9714314 0.2373206 0 -0.9714323 0.2373172 0 -0.9911518 0.1327335 0 -0.999646 0.026609 0 -0.9996459 0.02661079 0 -0.9968125 -0.07978039 0 -0.9968127 -0.07977807 0 -0.9826839 -0.1852898 0 -0.9826837 -0.1852916 0 -0.9574185 -0.288704 0 -0.9574199 -0.2886992 0 -0.9213129 -0.388822 0 -0.9213168 -0.388813 0 -0.8747603 -0.484556 0 -0.8747664 -0.484545 0 -0.8183044 -0.5747852 0 -0.752569 -0.6585134 0 -0.6783152 -0.7347711 0 -0.6783082 -0.7347776 0 -0.5963729 -0.8027076 0 -0.5963724 -0.8027079 0 -0.5076596 -0.8615578 0 -0.5076593 -0.8615581 0 -0.4132069 -0.9106372 0 -0.3140897 -0.9493933 0 -0.3140894 -0.9493934 0 -0.2113655 -0.9774071 0 -0.2113724 -0.9774057 0 -0.1062973 -0.9943345 0 -0.1062972 -0.9943345 0 0.1062972 -0.9943345 0 0.1062973 -0.9943345 0 0.2113654 -0.9774071 0 0.2113726 -0.9774056 0 0.3140894 -0.9493934 0 0.3140897 -0.9493933 0 0.4132069 -0.9106372 0 0.5076593 -0.8615581 0 0.5076596 -0.8615578 0 0.5963724 -0.8027079 0 0.5963729 -0.8027076 0 0.6783161 -0.7347703 0 0.6783072 -0.7347784 0 0.752569 -0.6585134 0 0.8183044 -0.5747852 0 0.8747595 -0.4845575 0 0.8747672 -0.4845436 0 0.9213123 -0.3888236 0 0.9213173 -0.3888115 0 0.9574175 -0.2887073 0 0.957421 -0.2886959 0 0.9826837 -0.1852916 0 0.9826839 -0.1852898 0 0.9968125 -0.07978039 0 0.9968127 -0.07977807 0 0.9996459 0.02661079 0 0.999646 0.026609 0 0.9911518 0.1327335 0 0.9714323 0.2373172 0 0.9714314 0.2373206 0 0.9407037 0.3392295 0 0.9406998 0.3392405 0 0.8993089 0.4373141 0 0.8993096 0.4373126 0 0.8477319 0.530425 0 0.847741 0.5304105 0 0.786553 0.6175228 0 0.7865478 0.6175293 0 0.7164552 0.6976331 0 0.638239 0.7698383 0 0.6382486 0.7698304 0 0.5528062 0.8333099 0 0.5528054 0.8333105 0 0.4610995 0.8873485 0 0.4610875 0.8873547 0 0.3641605 0.9313362 0 0.3641607 0.9313362 0 0.2630987 0.964769 0 0.1590605 0.9872689 0 0.1590604 0.9872689 0 1.56397e-6 0 -1 -4.72822e-6 0 -1 3.05241e-6 0 -1 1.21217e-5 0 -1 -2.26305e-5 0 -1 1.52356e-6 0 -1 3.11655e-6 0 -1 1.21222e-5 0 -1 2.24957e-5 0 -1 -1.29111e-5 0 -1 4.93731e-6 0 -1 -6.15862e-6 0 -1 1.22853e-5 0 -1 2.78095e-5 0 -1 2.25726e-5 0 -1 1.36852e-5 0 -1 -1.21217e-5 0 -1 -1.29809e-5 0 -1 -6.06428e-6 0 -1 -2.00666e-5 0 -1 2.6195e-6 0 -1 2.00666e-5 0 -1 -3.16566e-6 0 -1 6.56625e-6 0 -1 -9.46092e-6 0 -1 1.09177e-5 0 -1 -1.21222e-5 0 -1 -2.25726e-5 0 -1 -2.56906e-5 0 -1 6.3043e-6 0 -1 2.29753e-5 0 -1 -1.23521e-5 0 -1 -5.16853e-6 0 -1 3.9245e-7 0 -1 1.13987e-6 0 -1 6.17606e-6 0 -1 -2.29753e-5 0 -1 1.7716e-5 0 -1 -2.24957e-5 0 -1 1.28287e-6 0 -1 -1.56397e-6 0 -1 -6.69541e-6 0 -1 4.60219e-6 0 -1 1.0337e-5 0 -1 -3.11655e-6 0 -1 -1.09177e-5 0 -1 -9.11826e-6 0 -1 -2.44787e-6 0 -1 -6.14267e-6 0 -1 1.23172e-5 0 -1 2.26305e-5 0 -1 -2.52798e-6 0 -1 -0.03619277 0.9325151 0.359313 -0.03575748 0.9325305 0.3593165 -0.1083433 0.9269028 0.3593232 -0.1083388 0.9269041 0.3593211 -0.1087017 0.9268662 0.3593091 -0.179821 0.9157315 0.3593052 -0.1798348 0.9157244 0.3593164 -0.1798321 0.9157259 0.3593141 -0.2502839 0.8990277 0.359315 -0.2502779 0.8990312 0.3593102 -0.2501741 0.8990586 0.359314 -0.3191857 0.8769323 0.3593192 -0.319177 0.8769387 0.3593112 -0.3191249 0.8769562 0.3593149 -0.3861771 0.8495637 0.3593173 -0.3861768 0.8495638 0.3593175 -0.3861344 0.8495815 0.3593209 -0.4508563 0.817077 0.3593242 -0.4508466 0.8170874 0.3593127 -0.4508394 0.8170891 0.3593181 -0.5128034 0.779696 0.3593145 -0.5128082 0.7796895 0.3593217 -0.5128139 0.7796868 0.3593196 -0.5716799 0.7376121 0.3593197 -0.5716835 0.7376077 0.359323 -0.5717169 0.7375843 0.3593178 -0.6271188 0.6910961 0.3593163 -0.627126 0.6910858 0.3593236 -0.6271861 0.6910389 0.3593089 -0.6787916 0.6404204 0.35931 -0.6787977 0.6404103 0.3593168 -0.6787977 0.6404093 0.3593185 -0.726378 0.5858898 0.3593164 -0.7263885 0.5858703 0.359327 -0.7264069 0.5858497 0.3593233 -0.7695879 0.5278483 0.3593199 -0.7695891 0.5278446 0.3593226 -0.7695987 0.5278331 0.359319 -0.8081966 0.466594 0.3593165 -0.8081926 0.4666084 0.3593068 -0.8081828 0.4666219 0.3593115 -0.841924 0.4025652 0.3593121 -0.8419197 0.402578 0.359308 -0.8419048 0.4025993 0.359319 -0.8705801 0.3361272 0.3593172 -0.87058 0.3361312 0.3593138 -0.8705836 0.3361253 0.3593105 -0.894021 0.2676236 0.3593108 -0.8940196 0.2676318 0.3593082 -0.894007 0.2676601 0.3593185 -0.9120563 0.1975946 0.3593186 -0.9120576 0.1975769 0.3593249 -0.9120758 0.197528 0.3593053 -0.924634 0.126303 0.3593042 -0.9246339 0.126289 0.3593097 -0.9246273 0.1263127 0.3593183 -0.9316372 0.05424469 0.3593184 -0.9316388 0.05425173 0.3593133 -0.9316334 0.05428224 0.3593228 -0.9330375 -0.01811665 0.3593227 -0.9330401 -0.01809734 0.3593173 -0.933037 -0.01807534 0.3593262 -0.9288254 -0.0903722 0.3593275 -0.9288327 -0.09034359 0.3593159 -0.9288318 -0.0903114 0.3593263 -0.9190285 -0.1620849 0.359326 -0.9190391 -0.1620525 0.3593136 -0.9190397 -0.1620275 0.3593232 -0.9037085 -0.2328027 0.3593243 -0.9037173 -0.2327831 0.3593151 -0.9037194 -0.2327584 0.3593255 -0.8829553 -0.3021168 0.3593263 -0.8829609 -0.3021062 0.3593217 -0.8829565 -0.3021362 0.3593069 -0.8569036 -0.3696148 0.3593068 -0.8568934 -0.3696334 0.3593118 -0.8568968 -0.3696175 0.3593199 -0.8256745 -0.4349148 0.3593199 -0.8256723 -0.4349189 0.3593201 -0.8256747 -0.4349117 0.3593235 -0.7894809 -0.4976007 0.3593239 -0.7894819 -0.4975996 0.3593231 -0.7894802 -0.4976023 0.3593232 -0.7485606 -0.5572651 0.3593226 -0.7485566 -0.5572711 0.3593215 -0.7485518 -0.5572823 0.3593143 -0.7031385 -0.6135861 0.3593165 -0.7031186 -0.6136061 0.3593212 -0.703118 -0.6136063 0.3593224 -0.6534283 -0.6662724 0.3593227 -0.6534551 -0.6662508 0.3593139 -0.6534606 -0.6662425 0.359319 -0.5998358 -0.7149031 0.3593196 -0.599847 -0.7148956 0.359316 -0.599857 -0.7148824 0.3593254 -0.5426485 -0.7592211 0.3593271 -0.542663 -0.7592128 0.3593228 -0.5426502 -0.7592282 0.3593095 -0.4822536 -0.7989548 0.3593088 -0.4821879 -0.7989885 0.3593221 -0.4821841 -0.7989923 0.3593188 -0.4188886 -0.8339198 0.3593191 -0.4188343 -0.8339444 0.3593253 -0.4188287 -0.8339501 0.3593186 -0.3529137 -0.8639103 0.3593202 -0.3529421 -0.8639 0.3593171 -0.3529351 -0.863906 0.3593096 -0.2849876 -0.8886369 0.3593141 -0.2849207 -0.8886578 0.3593155 -0.2849307 -0.8886505 0.3593258 -0.2152851 -0.9080402 0.359326 -0.2152215 -0.9080538 0.3593301 -0.2151999 -0.9080661 0.3593119 -0.1442794 -0.921996 0.3593144 -0.1442028 -0.9220061 0.3593192 -0.07231485 -0.9304096 0.359317 -0.07230794 -0.9304132 0.3593089 -0.0721991 -0.9304203 0.3593124 -0.1441984 -0.9220094 0.3593128 0 -0.9332157 0.3593165 0 -0.9332153 0.3593176 0 -0.9332165 0.3593149 0 -0.9332154 0.3593175 0.07231485 -0.9304096 0.359317 0.07230818 -0.9304129 0.3593096 0.0721991 -0.9304203 0.3593124 0.1441987 -0.9220093 0.3593127 0.1442028 -0.9220064 0.3593185 0.1442777 -0.9219963 0.3593145 0.2151998 -0.9080659 0.3593125 0.2152213 -0.9080539 0.3593299 0.2152867 -0.9080391 0.359328 0.2849307 -0.8886505 0.3593253 0.2849205 -0.8886578 0.3593156 0.2849882 -0.8886374 0.3593124 0.3529352 -0.8639063 0.3593087 0.352942 -0.8638998 0.3593174 0.3529151 -0.8639099 0.3593201 0.4188287 -0.8339499 0.3593189 0.4188342 -0.8339442 0.359326 0.418888 -0.83392 0.3593192 0.4821842 -0.7989923 0.3593183 0.4821878 -0.7989886 0.3593219 0.4822531 -0.798955 0.359309 0.5426501 -0.7592281 0.3593099 0.542663 -0.7592126 0.3593235 0.5426485 -0.7592211 0.3593271 0.599857 -0.7148824 0.3593254 0.599847 -0.7148953 0.3593166 0.5998358 -0.7149031 0.3593196 0.6534602 -0.6662427 0.3593197 0.6534548 -0.6662509 0.3593142 0.6534283 -0.6662724 0.3593227 0.7031177 -0.6136065 0.3593226 0.7031186 -0.6136061 0.3593212 0.7031387 -0.6135863 0.3593158 0.7485516 -0.5572825 0.3593145 0.7485565 -0.557271 0.3593219 0.7485608 -0.5572652 0.359322 0.7894802 -0.4976023 0.3593232 0.7894821 -0.4975996 0.3593227 0.7894808 -0.497601 0.3593235 0.8256745 -0.4349118 0.3593238 0.8256723 -0.4349189 0.3593201 0.8256748 -0.4349146 0.3593194 0.8568969 -0.3696174 0.3593198 0.8568934 -0.3696334 0.3593118 0.8569036 -0.3696146 0.3593068 0.8829567 -0.3021361 0.3593067 0.8829608 -0.3021061 0.3593217 0.8829553 -0.3021168 0.3593266 0.9037192 -0.2327585 0.3593259 0.9037172 -0.2327831 0.359315 0.9037086 -0.2328026 0.3593239 0.9190397 -0.1620274 0.3593232 0.9190391 -0.1620525 0.3593137 0.9190285 -0.1620849 0.3593261 0.9288318 -0.0903114 0.3593264 0.9288327 -0.09034359 0.359316 0.9288256 -0.09037214 0.3593271 0.9330372 -0.01807534 0.3593259 0.9330401 -0.01809734 0.3593173 0.9330376 -0.01811665 0.3593225 0.9316334 0.05428218 0.3593226 0.9316388 0.05425173 0.3593133 0.9316372 0.05424463 0.3593182 0.9246274 0.1263126 0.3593179 0.9246338 0.126289 0.3593096 0.9246339 0.1263031 0.3593045 0.9120761 0.1975278 0.359305 0.9120576 0.1975769 0.3593251 0.9120563 0.1975945 0.3593187 0.8940069 0.26766 0.3593186 0.8940196 0.2676318 0.3593082 0.894021 0.2676236 0.3593108 0.8705838 0.3361253 0.3593102 0.87058 0.3361312 0.3593138 0.8705802 0.3361271 0.3593171 0.8419049 0.4025991 0.359319 0.8419197 0.402578 0.359308 0.8419241 0.4025651 0.3593121 0.8081828 0.4666216 0.3593118 0.8081926 0.4666084 0.3593071 0.8081966 0.466594 0.3593165 0.7695987 0.5278331 0.359319 0.7695893 0.5278444 0.3593229 0.7695879 0.5278483 0.3593199 0.7264069 0.5858497 0.3593233 0.7263883 0.5858705 0.359327 0.726378 0.5858898 0.3593164 0.6787979 0.6404095 0.3593178 0.6787974 0.6404104 0.3593169 0.6787914 0.6404208 0.3593096 0.6271865 0.6910383 0.3593094 0.627126 0.6910858 0.3593237 0.6271184 0.6910964 0.3593164 0.5717167 0.737584 0.3593186 0.5716834 0.7376078 0.3593228 0.5716794 0.7376121 0.3593203 0.5128139 0.7796868 0.3593196 0.5128082 0.7796894 0.3593221 0.5128034 0.779696 0.3593145 0.4508398 0.8170888 0.359318 0.4508466 0.8170873 0.3593129 0.4508565 0.8170773 0.3593233 0.3861338 0.8495817 0.359321 0.386177 0.849564 0.3593167 0.3861771 0.8495637 0.3593173 0.3191245 0.8769564 0.3593149 0.3191773 0.8769389 0.3593109 0.3191862 0.8769321 0.3593193 0.2501745 0.8990579 0.3593159 0.2502779 0.899031 0.3593107 0.2502838 0.8990275 0.3593155 0.1798316 0.9157255 0.3593154 0.1798348 0.9157245 0.3593162 0.1798207 0.9157315 0.3593053 0.1087009 0.9268663 0.3593091 0.1083388 0.9269042 0.3593209 0.1083429 0.9269031 0.3593224 0.03576368 0.9325303 0.3593164 0.03619277 0.9325151 0.359313 0.03619426 0.9325139 0.3593156 -0.03619426 0.9325139 0.3593156 0.1105232 0.9455952 0.3059974 0.1105195 0.9455966 0.3059945 0.183461 0.9341893 0.3059942 0.1834824 0.9341794 0.3060116 0.2553221 0.9171512 0.3060136 0.2553128 0.9171555 0.3060088 0.3256112 0.8946157 0.3060067 0.3256036 0.8946211 0.3059993 0.3939632 0.866694 0.3059978 0.3939649 0.8666931 0.3059976 0.4599355 0.8335601 0.3060014 0.4599336 0.8335632 0.3059958 0.5231505 0.7954124 0.3059951 0.5231491 0.7954129 0.3059955 0.5832124 0.7524816 0.3059979 0.5832188 0.7524743 0.3060043 0.6397711 0.70502 0.3060064 0.6397713 0.7050193 0.3060075 0.6924822 0.6533215 0.3060058 0.6924818 0.6533214 0.3060067 0.7410361 0.5976837 0.3060064 0.7410263 0.5977044 0.3059895 0.78511 0.5384911 0.3059897 0.7851166 0.5384722 0.306006 0.8244824 0.4760133 0.3060066 0.8244801 0.4760208 0.3060014 0.8588927 0.4106906 0.3060013 0.8588921 0.4106929 0.3059998 0.8881316 0.3429079 0.3060011 0.888132 0.3428989 0.3060099 0.9120394 0.2730242 0.3060097 0.9120382 0.2730395 0.3059998 0.9304496 0.2015615 0.3060008 0.9304488 0.201552 0.3060095 0.9432707 0.1288353 0.3060097 0.9432723 0.1288545 0.3059965 0.9504223 0.05534595 0.3059973 0.9504225 0.05535131 0.3059957 0.9518541 -0.01846438 0.3059952 0.9518533 -0.01846724 0.305997 0.9475613 -0.09216332 0.3059962 0.9475611 -0.09216201 0.305997 0.9375691 -0.1653194 0.3059964 0.9375671 -0.165323 0.3060006 0.9219381 -0.2374745 0.3060002 0.9219353 -0.2374798 0.3060044 0.9007654 -0.3081949 0.306003 0.9007674 -0.308193 0.3059987 0.8741692 -0.3770844 0.3059995 0.8741717 -0.3770812 0.3059962 0.8423218 -0.4436895 0.3059963 0.8423233 -0.4436876 0.3059949 0.8054029 -0.5076346 0.3059955 0.80541 -0.5076286 0.3059868 0.7636547 -0.5685094 0.305988 0.7636435 -0.5685193 0.3059977 0.7172973 -0.6259787 0.3059989 0.7172952 -0.625981 0.3059992 0.6666309 -0.6796818 0.306 0.6666293 -0.6796832 0.3060005 0.6119407 -0.7293097 0.3059999 0.6119621 -0.7292987 0.3059833 0.5536088 -0.7745265 0.3059835 0.5535955 -0.774532 0.3059939 0.4919121 -0.8151014 0.3059938 0.4919076 -0.8151026 0.305998 0.4272806 -0.8507631 0.3059961 0.4272806 -0.8507623 0.3059981 0.3600586 -0.8813194 0.3059966 0.3600535 -0.8813202 0.3060005 0.2906653 -0.9065742 0.3060014 0.2906801 -0.9065745 0.305987 0.2195625 -0.9263706 0.3059897 0.2195411 -0.9263709 0.3060047 0.1471096 -0.940595 0.3060063 0.1471213 -0.9405969 0.305995 0.07376539 -0.9491704 0.3059973 0.07376426 -0.9491702 0.3059982 0 -0.9520315 0.3060003 0 -0.9520326 0.3059965 -0.07376575 -0.9491699 0.3059989 -0.07376384 -0.9491707 0.3059965 -0.1471105 -0.9405985 0.3059952 -0.1471203 -0.9405933 0.3060064 -0.2195617 -0.9263662 0.3060042 -0.2195425 -0.9263755 0.3059898 -0.2906667 -0.9065781 0.305989 -0.2906786 -0.9065706 0.3059997 -0.3600583 -0.8813185 0.3059998 -0.3600538 -0.8813212 0.3059973 -0.427281 -0.8507626 0.3059968 -0.4272805 -0.850763 0.3059965 -0.4919114 -0.8151012 0.3059955 -0.4919088 -0.8151031 0.3059946 -0.5536069 -0.7745239 0.3059937 -0.5535975 -0.7745348 0.3059833 -0.6119447 -0.7293127 0.3059846 -0.611958 -0.7292956 0.3059992 -0.6666305 -0.6796818 0.3060009 -0.6666297 -0.6796828 0.3060003 -0.7172961 -0.6259801 0.3059987 -0.717296 -0.6259799 0.3059996 -0.7636514 -0.5685086 0.3059975 -0.7636474 -0.5685197 0.3059872 -0.8054044 -0.5076373 0.3059876 -0.8054086 -0.5076259 0.3059952 -0.8423221 -0.4436901 0.3059946 -0.842323 -0.443687 0.3059967 -0.8741695 -0.3770863 0.305996 -0.8741714 -0.3770793 0.3059995 -0.9007665 -0.3081956 0.3059988 -0.900766 -0.3081926 0.3060034 -0.9219364 -0.2374758 0.306004 -0.9219369 -0.2374784 0.3060005 -0.9375678 -0.1653192 0.3060005 -0.9375684 -0.1653232 0.3059963 -0.9475613 -0.09216159 0.3059967 -0.9475611 -0.0921638 0.3059965 -0.9518533 -0.01846265 0.3059973 -0.9518541 -0.01846897 0.3059948 -0.9504227 0.0553478 0.305996 -0.9504222 0.0553494 0.305997 -0.9432747 0.1288359 0.305997 -0.9432681 0.1288539 0.3060096 -0.9304466 0.2015624 0.3060094 -0.930452 0.201551 0.3060004 -0.9120421 0.2730268 0.3059995 -0.9120354 0.2730369 0.3060106 -0.8881285 0.3429082 0.3060097 -0.888135 0.3428986 0.3060014 -0.8588922 0.4106925 0.3059999 -0.8588929 0.4106907 0.3060003 -0.8244838 0.4760146 0.3060013 -0.8244786 0.4760199 0.3060072 -0.7851059 0.5384883 0.3060052 -0.7851204 0.5384755 0.3059905 -0.7410398 0.5976877 0.3059893 -0.741023 0.5977 0.306006 -0.6924815 0.6533218 0.3060067 -0.692482 0.6533216 0.3060059 -0.6397694 0.7050209 0.3060078 -0.6397728 0.7050182 0.3060069 -0.5832107 0.7524802 0.3060048 -0.5832206 0.7524757 0.3059972 -0.5231493 0.795413 0.3059955 -0.5231506 0.7954119 0.3059958 -0.4599367 0.8335613 0.3059965 -0.4599329 0.8335619 0.3060007 -0.3939633 0.8666939 0.305998 -0.3939647 0.8666935 0.3059974 -0.3256113 0.8946179 0.3060005 -0.3256033 0.894619 0.3060058 -0.2553226 0.9171526 0.306009 -0.2553122 0.917154 0.3060135 -0.1834602 0.9341832 0.3060131 -0.1834836 0.9341856 0.3059921 -0.1105238 0.9455966 0.3059926 -0.1105194 0.9455955 0.3059977 -0.03692299 0.951316 0.3059977 -0.03690129 0.9513108 0.3060163 0.03692227 0.9513099 0.3060166 0.03690201 0.9513171 0.3059969 0.1123504 0.9612603 0.2517065 0.1123618 0.9612568 0.2517148 0.1865218 0.9496574 0.2517149 0.1865072 0.9496645 0.251699 0.2595439 0.9323542 0.2516995 0.2595393 0.9323562 0.2516967 0.3309994 0.9094445 0.2516945 0.3309917 0.9094486 0.2516899 0.4004929 0.8810546 0.2516908 0.4004892 0.8810576 0.2516865 0.4675554 0.8473762 0.2516855 0.4675667 0.847366 0.251699 0.5318173 0.8085904 0.2516983 0.5318226 0.808585 0.2517041 0.5928818 0.7649424 0.2517029 0.5928807 0.7649438 0.2517007 0.650372 0.716704 0.2516975 0.6503711 0.7167047 0.2516981 0.7039579 0.6641471 0.2516982 0.7039505 0.6641589 0.2516879 0.7533038 0.6076071 0.2516887 0.7533121 0.6075895 0.2517064 0.7981261 0.5473933 0.2517049 0.7981216 0.5474047 0.2516947 0.8381417 0.4839088 0.2516958 0.8381429 0.4839045 0.2517003 0.8731235 0.4174954 0.2517002 0.8731244 0.4174925 0.251702 0.9028494 0.3485816 0.2517022 0.9028484 0.3485875 0.2516971 0.9271503 0.2775628 0.251697 0.9271504 0.2775678 0.2516909 0.9458708 0.2048911 0.2516905 0.9458703 0.2048941 0.2516897 0.9589028 0.1309859 0.2516906 0.9589009 0.1309668 0.2517078 0.9661662 0.05626851 0.2517077 0.9661667 0.05626732 0.2517063 0.9676218 -0.01877242 0.251706 0.9676234 -0.01876342 0.2517 0.9632595 -0.09369152 0.2517004 0.9632611 -0.09368562 0.2516966 0.9531019 -0.1680631 0.2516975 0.9531024 -0.1680607 0.2516971 0.9372122 -0.2414159 0.2516971 0.937218 -0.241403 0.2516887 0.9156943 -0.3132987 0.2516899 0.9156851 -0.3133149 0.2517037 0.8886534 -0.3833279 0.2517039 0.8886513 -0.3833307 0.251707 0.8562761 -0.4510374 0.2517071 0.8562744 -0.4510388 0.2517106 0.8187491 -0.5160343 0.2517109 0.8187499 -0.5160346 0.2517086 0.7762944 -0.5779354 0.2517099 0.776302 -0.5779292 0.2517002 0.7291799 -0.6363521 0.2516997 0.7291792 -0.6363528 0.2517002 0.6776746 -0.6909445 0.2517001 0.6776601 -0.6909539 0.2517134 0.6220954 -0.7413755 0.2517138 0.6221126 -0.7413668 0.2516968 0.5627679 -0.7873631 0.2516975 0.5627632 -0.7873652 0.2517017 0.5000588 -0.8286063 0.2517001 0.5000525 -0.8286087 0.2517047 0.434359 -0.8648566 0.251705 0.4343618 -0.8648563 0.251701 0.3660188 -0.895922 0.2517027 0.366029 -0.8959202 0.2516941 0.2954949 -0.9215921 0.2516959 0.2954823 -0.9215935 0.2517055 0.2231787 -0.9417195 0.2517055 0.2232035 -0.9417189 0.2516862 0.1495589 -0.9561833 0.2516854 0.1495497 -0.9561823 0.2516954 0.07498574 -0.9648975 0.2516945 0.07498824 -0.9648978 0.2516927 0 -0.9678075 0.2516919 0 -0.9678075 0.2516918 -0.07498604 -0.9648983 0.2516912 -0.07498794 -0.9648969 0.2516961 -0.1495587 -0.9561808 0.2516955 -0.1495499 -0.9561849 0.251685 -0.2231799 -0.9417241 0.2516871 -0.2232023 -0.9417142 0.2517049 -0.2954941 -0.9215895 0.2517064 -0.2954828 -0.9215962 0.2516948 -0.36602 -0.8959237 0.2516945 -0.3660278 -0.8959183 0.2517024 -0.4343593 -0.864857 0.2517033 -0.4343618 -0.8648553 0.2517044 -0.5000582 -0.8286053 0.2517045 -0.5000532 -0.8286099 0.2516993 -0.5627675 -0.7873624 0.2517008 -0.5627638 -0.787366 0.2516983 -0.6220969 -0.7413796 0.2516975 -0.6221107 -0.7413627 0.2517135 -0.6776725 -0.690942 0.2517126 -0.6776626 -0.6909564 0.2516997 -0.7291798 -0.6363515 0.2517013 -0.7291795 -0.636353 0.2516984 -0.7762953 -0.5779379 0.2517017 -0.7763013 -0.5779268 0.2517082 -0.8187492 -0.5160356 0.2517082 -0.8187499 -0.5160334 0.2517107 -0.8562755 -0.4510371 0.2517101 -0.8562751 -0.4510392 0.2517076 -0.8886526 -0.3833276 0.2517074 -0.8886522 -0.3833311 0.2517036 -0.915691 -0.3132975 0.2517036 -0.9156884 -0.3133161 0.25169 -0.9372149 -0.2414149 0.2516884 -0.9372153 -0.2414041 0.2516974 -0.9531021 -0.1680631 0.2516971 -0.9531023 -0.1680607 0.2516975 -0.9632605 -0.09369158 0.2516966 -0.9632601 -0.09368556 0.2517005 -0.9676232 -0.01877069 0.2517001 -0.9676218 -0.01876521 0.251706 -0.9661667 0.05626678 0.2517061 -0.9661661 0.05626904 0.2517079 -0.9588981 0.1309871 0.2517078 -0.9589056 0.1309656 0.2516903 -0.9458709 0.2048911 0.25169 -0.9458702 0.2048941 0.2516902 -0.9271517 0.2775632 0.2516909 -0.9271489 0.2775672 0.2516972 -0.9028505 0.348582 0.2516974 -0.9028473 0.3485871 0.2517018 -0.8731231 0.4174951 0.2517021 -0.8731251 0.4174928 0.2516994 -0.8381409 0.4839083 0.2516994 -0.8381437 0.483905 0.2516968 -0.7981281 0.5473946 0.2516956 -0.7981192 0.5474037 0.2517043 -0.7533003 0.6076042 0.2517059 -0.7533159 0.6075919 0.251689 -0.7039596 0.6641491 0.2516883 -0.7039486 0.664157 0.2516982 -0.6503736 0.7167026 0.2516974 -0.6503691 0.7167062 0.2516992 -0.5928835 0.7649422 0.2516995 -0.592879 0.7649441 0.2517042 -0.5318162 0.8085893 0.2517043 -0.5318235 0.8085864 0.2516981 -0.4675533 0.8473737 0.2516981 -0.4675682 0.8473687 0.251687 -0.4004935 0.8810554 0.2516874 -0.4004888 0.8810567 0.2516899 -0.3309997 0.909446 0.2516893 -0.3309919 0.909447 0.2516952 -0.2595446 0.9323554 0.2516945 -0.259539 0.932355 0.2517018 -0.1865228 0.9496612 0.2516999 -0.1865063 0.9496607 0.2517144 -0.1123504 0.9612581 0.2517149 -0.1123618 0.961259 0.2517061 -0.03751319 0.967077 0.251704 -0.03752666 0.9670788 0.2516955 0.03751301 0.9670796 0.2516939 0.03752678 0.967076 0.2517058 0.113834 0.9738532 0.1966007 0.1138191 0.9738577 0.1965875 0.188951 0.9621076 0.1965876 0.1889676 0.9621012 0.1966026 0.2629386 0.9445692 0.1966021 0.2629248 0.9445752 0.1965916 0.3353275 0.9213615 0.1965925 0.3353624 0.9213422 0.1966235 0.405732 0.8925926 0.1966218 0.4057228 0.8925983 0.1966149 0.4736906 0.8584639 0.196614 0.4736829 0.8584692 0.1966091 0.538789 0.8191779 0.1966068 0.5387792 0.8191866 0.1965966 0.6006486 0.7749652 0.1965964 0.600652 0.7749614 0.1966013 0.6588897 0.7260938 0.1966019 0.6588857 0.7260986 0.1965973 0.7131714 0.6728569 0.1965964 0.7131853 0.6728362 0.196617 0.7631803 0.6155468 0.1966165 0.7631723 0.6155605 0.1966046 0.8085752 0.5545747 0.1966039 0.808578 0.5545691 0.1966084 0.8491215 0.4902431 0.1966073 0.8491232 0.490238 0.1966125 0.8845605 0.4229615 0.1966125 0.884557 0.4229739 0.1966013 0.9146755 0.353152 0.1966022 0.9146757 0.3531504 0.1966045 0.939292 0.2812064 0.1966054 0.939291 0.2812157 0.1965969 0.9582602 0.207574 0.1965975 0.9582601 0.2075662 0.1966056 0.9714639 0.1326815 0.1966051 0.9714637 0.1326769 0.1966093 0.9788237 0.05700361 0.1966084 0.9788243 0.05701524 0.1966021 0.9802991 -0.01901066 0.1966019 0.9803019 -0.01899385 0.1965893 0.9758812 -0.09491306 0.1965892 0.9758744 -0.09493958 0.1966106 0.9655854 -0.1702637 0.196609 0.9655902 -0.1702489 0.1965982 0.9494925 -0.2445675 0.1965979 0.949488 -0.2445766 0.1966087 0.9276803 -0.3174193 0.196607 0.9276813 -0.3174163 0.1966069 0.9002922 -0.3883556 0.1966063 0.900302 -0.3883395 0.1965929 0.8674961 -0.4569484 0.1965925 0.8674899 -0.4569575 0.1965991 0.8294783 -0.5227954 0.1965981 0.8294786 -0.5227944 0.1965993 0.7864722 -0.5855001 0.196599 0.7864686 -0.5855036 0.1966027 0.7387306 -0.6446888 0.1966049 0.7387236 -0.6446946 0.1966124 0.6865385 -0.7000063 0.1966119 0.6865506 -0.6999973 0.1966014 0.6302626 -0.7510775 0.1966001 0.6302629 -0.7510775 0.1965996 0.5701357 -0.7976803 0.1965997 0.5701371 -0.7976793 0.1966 0.5066039 -0.8394647 0.1965997 0.5065978 -0.8394671 0.1966058 0.4400525 -0.8761854 0.1966037 0.4400503 -0.876186 0.196606 0.3708235 -0.9076547 0.1966039 0.3708168 -0.9076559 0.1966108 0.2993524 -0.9336665 0.1966091 0.2993599 -0.9336647 0.1966059 0.2261267 -0.9540509 0.1966053 0.2261146 -0.9540522 0.1966132 0.1515083 -0.9687049 0.1966116 0.1515073 -0.9687043 0.1966155 0.07597023 -0.9775332 0.1966148 0.07598704 -0.9775359 0.196595 0 -0.9804835 0.1966012 0 -0.9804838 0.1966002 -0.07597041 -0.9775368 0.1965971 -0.0759868 -0.9775323 0.196613 -0.1515081 -0.9687046 0.1966134 -0.1515076 -0.9687047 0.1966136 -0.2261258 -0.9540492 0.1966142 -0.2261154 -0.9540538 0.1966041 -0.2993535 -0.9336668 0.1966059 -0.299359 -0.9336644 0.1966091 -0.3708229 -0.9076533 0.1966109 -0.370817 -0.9076574 0.1966037 -0.4400523 -0.8761849 0.1966064 -0.4400507 -0.8761861 0.1966042 -0.5066041 -0.8394635 0.1966051 -0.506598 -0.8394684 0.1965993 -0.5701369 -0.7976795 0.1966 -0.5701361 -0.7976799 0.1966006 -0.6302623 -0.7510781 0.1965991 -0.6302632 -0.7510771 0.1966007 -0.6865398 -0.7000082 0.1966005 -0.6865491 -0.6999958 0.1966121 -0.7387304 -0.6446865 0.1966134 -0.7387239 -0.6446968 0.1966041 -0.7864715 -0.5854992 0.1966042 -0.7864695 -0.5855043 0.1965977 -0.8294779 -0.5227957 0.1965991 -0.829479 -0.5227941 0.1965987 -0.8674951 -0.4569478 0.1965991 -0.8674911 -0.4569581 0.1965923 -0.9002954 -0.3883548 0.1965931 -0.9002988 -0.3883404 0.1966062 -0.927681 -0.3174177 0.1966065 -0.9276807 -0.3174179 0.1966071 -0.9494915 -0.2445634 0.1966086 -0.9494891 -0.2445809 0.1965978 -0.9655879 -0.1702622 0.1965983 -0.9655877 -0.1702505 0.1966091 -0.975877 -0.09491264 0.1966105 -0.9758787 -0.09494 0.1965891 -0.9803017 -0.01901078 0.1965894 -0.9802994 -0.01899379 0.196602 -0.9788248 0.05700737 0.1966019 -0.9788231 0.05701142 0.1966087 -0.971463 0.1326814 0.1966094 -0.9714645 0.132677 0.1966049 -0.9582577 0.2075771 0.1966058 -0.9582626 0.207563 0.1965972 -0.9392935 0.2812069 0.1965973 -0.9392894 0.2812152 0.1966052 -0.9146751 0.3531519 0.1966049 -0.9146761 0.3531506 0.1966018 -0.8845624 0.4229624 0.1966016 -0.884555 0.4229729 0.1966125 -0.8491207 0.4902427 0.1966124 -0.8491241 0.4902384 0.1966075 -0.8085753 0.5545729 0.1966085 -0.8085775 0.5545713 0.1966039 -0.7631826 0.6155475 0.196605 -0.76317 0.6155598 0.1966159 -0.7131676 0.6728551 0.1966168 -0.7131891 0.6728379 0.1965975 -0.6588896 0.7260951 0.1965972 -0.658886 0.7260971 0.1966021 -0.6006468 0.7749654 0.1966015 -0.6006535 0.7749615 0.1965962 -0.5387904 0.8191792 0.196597 -0.5387778 0.8191851 0.1966065 -0.4736917 0.8584648 0.1966071 -0.4736819 0.8584682 0.1966162 -0.4057322 0.8925943 0.196614 -0.4057224 0.8925965 0.1966239 -0.335326 0.9213552 0.1966245 -0.3353636 0.9213487 0.1965908 -0.2629391 0.9445712 0.1965916 -0.2629242 0.9445731 0.1966024 -0.1889503 0.9621045 0.1966033 -0.1889683 0.9621043 0.1965866 -0.1138347 0.9738556 0.1965883 -0.1138186 0.9738551 0.1966 -0.0380184 0.9797463 0.1966012 -0.0380159 0.9797459 0.196603 0.0380184 0.9797458 0.1966029 0.0380159 0.9797464 0.1966012 0.1149263 0.9833328 0.1408845 0.1149329 0.983331 0.1408922 0.1908069 0.971464 0.1408917 0.190781 0.9714728 0.1408659 0.2654837 0.9537691 0.1408658 0.2655078 0.9537587 0.1408908 0.3386274 0.9303133 0.1408855 0.3386065 0.9303233 0.1408703 0.4096741 0.9012899 0.1408676 0.4096821 0.9012852 0.1408751 0.478294 0.866827 0.140875 0.4782932 0.8668273 0.1408761 0.5440236 0.8271592 0.1408761 0.5440369 0.8271483 0.1408887 0.6064974 0.7825033 0.1408891 0.6064896 0.7825111 0.1408791 0.6653001 0.7331634 0.1408802 0.6652953 0.7331683 0.1408777 0.7201291 0.6793878 0.1408771 0.7201238 0.6793947 0.1408708 0.7706019 0.6215531 0.1408706 0.7706019 0.6215533 0.14087 0.8164497 0.5599693 0.1408705 0.8164504 0.5599686 0.1408692 0.8573908 0.4950121 0.1408699 0.857391 0.495012 0.1408688 0.8931672 0.4270935 0.1408676 0.8931761 0.4270683 0.1408867 0.9235784 0.3565873 0.1408852 0.9235746 0.3566019 0.1408725 0.9484339 0.2839514 0.1408714 0.9484375 0.2839291 0.1408925 0.9675871 0.2095821 0.1408925 0.9675845 0.2096042 0.1408776 0.9809211 0.1339677 0.1408777 0.9809204 0.1339815 0.1408696 0.988353 0.05756723 0.1408703 0.9883531 0.05756992 0.1408686 0.9898425 -0.01917845 0.1408687 0.9898388 -0.01920777 0.140891 0.9853731 -0.09586262 0.1408908 0.985377 -0.09584504 0.1408752 0.9749881 -0.1719068 0.1408768 0.9749877 -0.1719087 0.1408774 0.958731 -0.2469583 0.1408773 0.9587282 -0.2469662 0.1408833 0.9367105 -0.3205081 0.1408833 0.9367118 -0.320505 0.1408813 0.9090631 -0.3921187 0.1408812 0.9090632 -0.392118 0.1408818 0.8759331 -0.4614042 0.1408813 0.8759346 -0.4614018 0.1408802 0.8375506 -0.5278844 0.1408799 0.8375453 -0.5278911 0.1408869 0.7941235 -0.5912012 0.1408869 0.794133 -0.5911915 0.1408741 0.7459163 -0.6509714 0.1408733 0.7459109 -0.6509767 0.1408777 0.6932337 -0.7068101 0.1408777 0.6932393 -0.7068055 0.1408732 0.6363981 -0.7583881 0.1408729 0.6363752 -0.7584031 0.1408948 0.5756845 -0.8054418 0.1408939 0.5756911 -0.8054379 0.1408886 0.5115277 -0.8476377 0.1408888 0.5115367 -0.8476336 0.1408819 0.444334 -0.8847145 0.1408818 0.4443302 -0.8847157 0.1408865 0.374426 -0.9164912 0.1408869 0.374439 -0.9164877 0.1408752 0.3022735 -0.9427536 0.1408774 0.3022755 -0.9427533 0.1408749 0.2283165 -0.9633409 0.1408759 0.2283116 -0.9633417 0.140878 0.1529825 -0.9781358 0.140879 0.152989 -0.9781357 0.1408732 0.07672667 -0.9870494 0.1408779 0.07670772 -0.9870491 0.140891 0 -0.9900256 0.1408883 0 -0.9900253 0.1408904 -0.07672637 -0.9870473 0.1408926 -0.07670801 -0.9870511 0.1408762 -0.1529825 -0.9781363 0.1408753 -0.1529889 -0.9781351 0.1408769 -0.2283164 -0.9633404 0.1408796 -0.2283115 -0.9633423 0.1408743 -0.3022739 -0.9427538 0.1408757 -0.3022751 -0.9427533 0.1408767 -0.374427 -0.9164927 0.1408742 -0.374438 -0.9164862 0.140888 -0.4443339 -0.8847138 0.1408866 -0.44433 -0.8847162 0.1408827 -0.5115289 -0.8476383 0.1408816 -0.5115358 -0.847633 0.1408883 -0.5756851 -0.8054423 0.1408876 -0.5756902 -0.8054376 0.1408941 -0.6363959 -0.7583859 0.140894 -0.6363772 -0.7584055 0.1408734 -0.6932342 -0.7068105 0.1408731 -0.6932389 -0.7068051 0.1408778 -0.7459148 -0.650972 0.1408781 -0.7459123 -0.650976 0.1408732 -0.7941241 -0.5912035 0.1408735 -0.7941324 -0.5911889 0.1408881 -0.8375507 -0.5278822 0.1408873 -0.8375453 -0.527893 0.1408793 -0.875934 -0.4614028 0.1408801 -0.8759335 -0.4614032 0.1408815 -0.9090635 -0.3921171 0.1408821 -0.9090626 -0.3921197 0.140881 -0.9367108 -0.3205081 0.1408811 -0.9367116 -0.320505 0.1408835 -0.9587297 -0.2469601 0.1408833 -0.9587296 -0.2469644 0.1408773 -0.9749878 -0.1719086 0.1408774 -0.9749882 -0.1719069 0.1408768 -0.9853749 -0.09586662 0.1408753 -0.9853753 -0.09584099 0.1408909 -0.9898394 -0.01918029 0.1408911 -0.9898421 -0.01920592 0.1408683 -0.9883531 0.05756908 0.1408685 -0.9883529 0.05756801 0.1408704 -0.9809222 0.1339679 0.1408698 -0.9809193 0.1339814 0.1408776 -0.9675887 0.2095843 0.1408777 -0.9675828 0.2096019 0.1408925 -0.9484307 0.2839522 0.1408923 -0.9484409 0.2839282 0.1408713 -0.9235801 0.356588 0.1408722 -0.9235729 0.3566012 0.1408857 -0.8931657 0.4270904 0.1408866 -0.8931778 0.4270714 0.1408677 -0.857392 0.4950104 0.1408683 -0.8573896 0.4950137 0.1408706 -0.81645 0.5599689 0.1408699 -0.8164502 0.5599685 0.1408701 -0.7706019 0.6215531 0.1408706 -0.7706016 0.6215534 0.1408701 -0.72013 0.6793882 0.1408706 -0.7201232 0.6793941 0.1408773 -0.6652992 0.7331649 0.1408774 -0.6652963 0.7331669 0.1408806 -0.6064977 0.7825046 0.1408798 -0.6064893 0.7825097 0.1408885 -0.5440236 0.8271569 0.1408892 -0.5440372 0.8271506 0.1408746 -0.478294 0.866827 0.140875 -0.4782932 0.8668273 0.1408761 -0.409674 0.9012889 0.1408751 -0.4096822 0.9012863 0.1408675 -0.3386284 0.9303154 0.140869 -0.3386057 0.930321 0.140887 -0.2654833 0.9537659 0.1408877 -0.2655084 0.9537618 0.1408684 -0.1908072 0.9714674 0.1408678 -0.1907806 0.9714694 0.1408901 -0.1149263 0.9833319 0.1408917 -0.114933 0.9833321 0.1408849 -0.03838598 0.989282 0.1408827 -0.03838956 0.989282 0.1408809 0.03838574 0.9892822 0.1408809 0.03838968 0.9892817 0.1408827 0.1156737 0.9896689 0.08470588 0.1156672 0.9896699 0.08470332 0.1920102 0.9777309 0.08470302 0.1920167 0.9777291 0.08470815 0.267219 0.9599054 0.08470976 0.2672138 0.9599075 0.08470201 0.3407878 0.9363168 0.08470422 0.3408006 0.9363111 0.08471345 0.4123211 0.9070911 0.08471798 0.4123197 0.9070922 0.0847125 0.4813745 0.8724117 0.08471375 0.4813728 0.8724128 0.08471292 0.5475424 0.8324789 0.08471393 0.5475272 0.8324905 0.08469724 0.6103979 0.7875536 0.08469814 0.6104 0.7875519 0.08469903 0.6695839 0.7378913 0.08469867 0.6696019 0.7378724 0.0847209 0.7247617 0.6837713 0.08471947 0.7247535 0.6837812 0.08470994 0.7755666 0.6255562 0.08471077 0.775571 0.6255503 0.08471554 0.8217078 0.5635774 0.08471673 0.8217071 0.5635788 0.08471339 0.8629133 0.4982014 0.08471304 0.8629121 0.4982033 0.0847128 0.8989314 0.4298211 0.08471351 0.8989214 0.4298463 0.0846914 0.9295251 0.3589017 0.08469223 0.9295385 0.3588591 0.08472555 0.9545493 0.2857574 0.08472543 0.954542 0.2857903 0.08469754 0.9738196 0.2109552 0.08469712 0.9738238 0.2109262 0.08472013 0.987239 0.1348395 0.08472108 0.9872384 0.134845 0.08471816 0.9947191 0.05793917 0.08471751 0.9947189 0.05794459 0.08471649 0.9962177 -0.01933091 0.08471655 0.9962185 -0.01932227 0.08470863 0.9917258 -0.09646064 0.08470815 0.9917243 -0.09647041 0.08471369 0.9812697 -0.1730132 0.08471244 0.9812712 -0.1730079 0.08470696 0.9649057 -0.2485592 0.08470726 0.9649083 -0.248551 0.08470189 0.9427481 -0.32257 0.08470308 0.9427496 -0.3225666 0.08469969 0.9149212 -0.3946458 0.08470004 0.9149102 -0.3946675 0.08471769 0.881578 -0.4643742 0.08471709 0.8815854 -0.4643622 0.08470493 0.8429431 -0.5312926 0.08470594 0.8429493 -0.5312839 0.0846979 0.7992506 -0.5949999 0.0846982 0.79923 -0.5950236 0.08472484 0.7507151 -0.6551707 0.08472496 0.7507403 -0.6551451 0.08469903 0.6977053 -0.7113605 0.08469736 0.6976944 -0.7113698 0.08470875 0.6404772 -0.7632913 0.08470839 0.6404728 -0.7632946 0.08471184 0.579401 -0.8106284 0.08471268 0.5794088 -0.8106234 0.08470702 0.5148324 -0.8530961 0.0847041 0.5148436 -0.8530901 0.08469635 0.4471938 -0.8904181 0.08469569 0.447184 -0.8904224 0.08470219 0.3768518 -0.9223927 0.08470189 0.3768312 -0.9223996 0.08471912 0.3042224 -0.9488263 0.08471965 0.3042428 -0.9488214 0.08470207 0.2297825 -0.9695491 0.08470243 0.2297846 -0.9695488 0.08470147 0.1539746 -0.9844379 0.08469915 0.1539521 -0.9844399 0.08471733 0.07720208 -0.9934096 0.08471828 0.07721644 -0.9934094 0.08470761 0 -0.996406 0.0847066 0 -0.9964059 0.08470702 -0.07720226 -0.993411 0.08470326 -0.07721632 -0.9934082 0.08472281 -0.1539744 -0.9844363 0.08471792 -0.1539523 -0.9844414 0.08469837 -0.2297826 -0.9695491 0.08470243 -0.2297846 -0.9695488 0.08470147 -0.3042229 -0.9488277 0.08470278 -0.3042422 -0.9488201 0.08471912 -0.3768514 -0.9223917 0.08471691 -0.3768317 -0.9224008 0.08470398 -0.4471939 -0.8904175 0.08470237 -0.4471841 -0.8904229 0.08469641 -0.5148337 -0.853096 0.08469671 -0.5148421 -0.8530902 0.0847038 -0.5794016 -0.8106287 0.08470523 -0.5794079 -0.8106232 0.08471453 -0.6404757 -0.7632923 0.08471101 -0.6404743 -0.7632936 0.08470916 -0.6977046 -0.7113598 0.08470863 -0.6976951 -0.7113705 0.08469742 -0.7507187 -0.65517 0.08469933 -0.7507367 -0.6551458 0.08472532 -0.7992496 -0.5949973 0.08472508 -0.7992311 -0.5950263 0.08469724 -0.8429439 -0.5312928 0.0846979 -0.8429487 -0.5312837 0.08470642 -0.8815782 -0.4643762 0.08470433 -0.8815852 -0.4643602 0.08471781 -0.9149197 -0.3946452 0.08471769 -0.9149116 -0.3946681 0.08469992 -0.9427483 -0.3225703 0.08469969 -0.9427493 -0.3225666 0.0847032 -0.9649065 -0.2485578 0.08470201 -0.9649075 -0.2485527 0.08470726 -0.9812698 -0.1730151 0.08470708 -0.9812711 -0.1730059 0.08471232 -0.9917249 -0.09646439 0.08471369 -0.9917252 -0.09646666 0.08470815 -0.9962182 -0.01933097 0.08470875 -0.9962177 -0.01932227 0.08471655 -0.9947191 0.05794107 0.08471655 -0.9947189 0.05794268 0.08471751 -0.9872387 0.1348432 0.08471822 -0.9872388 0.1348413 0.08472102 -0.9738175 0.2109548 0.08472019 -0.9738256 0.2109267 0.084697 -0.9545516 0.285758 0.08469754 -0.9545396 0.2857896 0.08472549 -0.9295231 0.3588991 0.0847252 -0.9295406 0.3588616 0.08469229 -0.8989337 0.4298205 0.08469152 -0.898919 0.4298468 0.08471357 -0.8629124 0.4982028 0.0847125 -0.8629129 0.4982019 0.08471333 -0.8217089 0.5635762 0.08471399 -0.8217061 0.56358 0.08471661 -0.7755661 0.6255561 0.08471691 -0.7755715 0.6255503 0.08470886 -0.7247616 0.6837726 0.08470994 -0.7247538 0.6837796 0.08471953 -0.669582 0.7378906 0.08472108 -0.6696039 0.7378733 0.08469831 -0.6103987 0.787553 0.08469909 -0.6103992 0.7875525 0.08469802 -0.5475432 0.8324799 0.08469808 -0.5475264 0.8324894 0.08471328 -0.4813744 0.8724119 0.0847119 -0.4813728 0.8724126 0.08471381 -0.4123208 0.9070914 0.08471602 -0.41232 0.9070919 0.08471447 -0.3407874 0.9363158 0.08471548 -0.3408009 0.936312 0.08470404 -0.2672188 0.959906 0.0847041 -0.2672139 0.9599068 0.08470964 -0.1920099 0.9777303 0.08471053 -0.1920168 0.9777297 0.08470058 -0.1156737 0.9896693 0.08470213 -0.1156672 0.9896696 0.08470708 -0.03863698 0.9956567 0.08470606 -0.03864598 0.9956566 0.08470147 0.03863698 0.9956572 0.08470046 0.03864598 0.9956561 0.08470714 0.116038 0.9928428 0.02825647 0.116048 0.9928414 0.02826476 0.1926322 0.9808638 0.02826637 0.1926321 0.9808639 0.0282647 0.2680707 0.9629846 0.02826559 0.2680711 0.9629845 0.02826464 0.3418934 0.9393135 0.02826625 0.3418908 0.9393146 0.02826249 0.4136421 0.9100008 0.02826404 0.413637 0.9100033 0.02825754 0.4829163 0.8752106 0.02825778 0.4829181 0.8752094 0.02826082 0.5492833 0.8351581 0.02826118 0.5493018 0.8351455 0.02827954 0.6123568 0.7900756 0.02828055 0.6123476 0.7900831 0.02827215 0.6717497 0.7402386 0.02827292 0.6717381 0.7402494 0.02826243 0.7270781 0.6859729 0.0282613 0.727087 0.6859629 0.02827417 0.7780576 0.6275564 0.02827376 0.7780484 0.6275684 0.02825999 0.8243424 0.5653858 0.02825945 0.8243497 0.5653746 0.0282725 0.86568 0.4997989 0.02827274 0.8656754 0.4998071 0.02826642 0.9018018 0.4312248 0.02826499 0.9018042 0.4312195 0.02826988 0.9325194 0.3600118 0.02826952 0.9325173 0.3600177 0.02826422 0.957601 0.2867081 0.0282638 0.9576019 0.2867051 0.02826523 0.9769474 0.2116008 0.02826565 0.9769456 0.2116101 0.0282604 0.9904049 0.1352759 0.028261 0.9904035 0.1352882 0.02825152 0.9979094 0.05812752 0.02825134 0.9979094 0.05812543 0.02825546 0.9994129 -0.01938134 0.0282554 0.9994125 -0.01939344 0.02826207 0.9949045 -0.0967791 0.02826225 0.9949048 -0.09677779 0.02826279 0.9844173 -0.1735621 0.02826315 0.9844126 -0.173586 0.02828168 0.9680007 -0.2493489 0.02828198 0.9680042 -0.2493363 0.02827239 0.9457712 -0.3236009 0.02827143 0.9457693 -0.3236063 0.02827608 0.9178448 -0.3959311 0.0282759 0.9178488 -0.3959226 0.02826905 0.8844112 -0.4658517 0.02827054 0.8844168 -0.4658413 0.02826243 0.8456516 -0.5329867 0.02826136 0.8456472 -0.5329933 0.02826714 0.801793 -0.596933 0.02826702 0.8017988 -0.5969257 0.0282582 0.7531456 -0.6572467 0.02825915 0.7531359 -0.6572574 0.02827048 0.6999315 -0.7136502 0.02827167 0.6999399 -0.7136424 0.02826362 0.6425275 -0.7657413 0.02826482 0.6425229 -0.7657449 0.0282675 0.5812662 -0.8132225 0.02826601 0.5812565 -0.813229 0.02827596 0.5164929 -0.8558245 0.02827608 0.516506 -0.8558171 0.02826279 0.4486179 -0.8932768 0.0282644 0.4486055 -0.8932826 0.02827435 0.3780401 -0.9253574 0.02827578 0.3780649 -0.9253481 0.02825117 0.3052181 -0.9518632 0.0282548 0.3051924 -0.9518709 0.02827268 0.2305212 -0.9726564 0.0282756 0.2305346 -0.9726537 0.02826309 0.1544459 -0.9875969 0.0282644 0.1544386 -0.9875978 0.02827048 0.07746404 -0.9965943 0.02827 0.0774607 -0.9965946 0.02827233 0 -0.9996003 0.02827429 0 -0.9996002 0.02827441 -0.07746404 -0.9965943 0.02827191 -0.0774607 -0.9965946 0.02827042 -0.1544458 -0.9875968 0.02827012 -0.1544387 -0.9875981 0.02826476 -0.2305212 -0.9726569 0.02826225 -0.2305346 -0.9726532 0.02827644 -0.305218 -0.9518628 0.02827388 -0.3051926 -0.9518715 0.02825355 -0.3780403 -0.925358 0.02825289 -0.3780646 -0.9253474 0.02827411 -0.4486175 -0.8932765 0.02827394 -0.4486058 -0.8932828 0.02826291 -0.5164927 -0.8558251 0.02826368 -0.5165062 -0.8558166 0.02827525 -0.5812656 -0.8132227 0.02827453 -0.5812569 -0.8132291 0.02826738 -0.6425272 -0.7657413 0.02826768 -0.642523 -0.765745 0.02826464 -0.6999316 -0.7136504 0.02826404 -0.6999396 -0.7136424 0.02827125 -0.7531452 -0.6572468 0.0282706 -0.7531362 -0.6572573 0.02825897 -0.8017932 -0.5969331 0.02825844 -0.8017986 -0.5969256 0.02826684 -0.8456515 -0.5329866 0.02826708 -0.8456473 -0.5329933 0.02826189 -0.8844114 -0.4658519 0.02826195 -0.8844166 -0.4658412 0.02827054 -0.9178451 -0.395931 0.02826899 -0.9178485 -0.3959226 0.02827596 -0.9457712 -0.3236007 0.02827584 -0.9457693 -0.3236064 0.02827155 -0.9680009 -0.249349 0.02827244 -0.9680039 -0.2493362 0.02828198 -0.9844168 -0.1735621 0.02828168 -0.9844132 -0.173586 0.02826303 -0.9949045 -0.09677916 0.02826279 -0.9949047 -0.09677773 0.02826225 -0.9994127 -0.01938134 0.02826207 -0.9994126 -0.01939344 0.0282554 -0.9979093 0.05812752 0.0282554 -0.9979096 0.05812537 0.02825134 -0.9904049 0.1352778 0.02825152 -0.9904035 0.1352863 0.028261 -0.9769471 0.2116028 0.0282604 -0.9769458 0.2116082 0.02826571 -0.9576014 0.2867065 0.02826499 -0.9576014 0.2867068 0.02826404 -0.9325202 0.3600102 0.02826404 -0.9325165 0.3600194 0.0282697 -0.9018015 0.4312248 0.02826976 -0.9018043 0.4312195 0.02826511 -0.8656803 0.4997988 0.02826654 -0.8656752 0.4998073 0.02827268 -0.8243414 0.5653867 0.02827274 -0.8243507 0.5653737 0.02825915 -0.7780579 0.6275566 0.0282604 -0.778048 0.6275681 0.02827292 -0.7270769 0.6859737 0.02827364 -0.7270882 0.6859622 0.02826178 -0.67175 0.7402387 0.02826148 -0.6717379 0.7402492 0.02827394 -0.6123561 0.7900764 0.02827191 -0.6123482 0.7900823 0.02827984 -0.5492822 0.8351584 0.02828019 -0.5493029 0.8351454 0.02826046 -0.4829158 0.8752107 0.02826064 -0.4829186 0.8752093 0.02825796 -0.413642 0.9100011 0.02825832 -0.4136372 0.9100031 0.02826327 -0.3418934 0.9393137 0.02826434 -0.3418909 0.9393146 0.0282644 -0.2680705 0.9629846 0.02826559 -0.2680714 0.9629844 0.02826464 -0.1926321 0.9808639 0.02826446 -0.1926322 0.9808639 0.0282666 -0.116038 0.9928426 0.0282641 -0.1160482 0.9928416 0.02825713 -0.0387699 0.9988486 0.02825713 -0.03875434 0.9988488 0.02827072 0.0387699 0.9988482 0.02827048 0.0387544 0.9988492 0.02825731 0.9277672 -0.09026902 0.3620768 0.9180268 -0.1619098 0.361956 0.9027826 -0.2325757 0.3617901 0.8821448 -0.3018407 0.3615422 0.8562031 -0.3693164 0.3612778 0.8251264 -0.4346321 0.3609173 0.7891089 -0.4973682 0.3604608 0.74835 -0.5571062 0.3600071 0.7030972 -0.6135524 0.3594548 0.6535453 -0.6664016 0.35887 0.6001155 -0.7152347 0.358191 0.5430626 -0.7598011 0.3574708 0.4827782 -0.7998251 0.3566581 0.4194896 -0.8351206 0.355812 0.3535597 -0.8654726 0.3548985 0.2856149 -0.890595 0.3539276 0.215848 -0.9104323 0.3528779 0.1447215 -0.9248217 0.351796 0.07244569 -0.9337106 0.3506225 0 -0.9369808 0.349381 -0.9305608 0.05421662 0.3621011 -0.9235963 0.126171 0.3620095 -0.9111134 0.1973132 0.3618563 -0.8931266 0.267396 0.3616964 -0.8698311 0.3358338 0.3613996 -0.8412848 0.4023029 0.3610987 -0.8077129 0.4663493 0.3607191 -0.7693027 0.5276325 0.3602461 -0.7262796 0.5857506 0.3597418 -0.6788393 0.6404529 0.359162 -0.6273949 0.6912637 0.3585109 -0.5720707 0.7380385 0.357819 -0.5132881 0.7804051 0.3570761 -0.4514004 0.8181154 0.3562653 -0.3867583 0.8509587 0.3553693 -0.3197544 0.8787146 0.354426 -0.250781 0.9012148 0.3534415 -0.1803447 0.9183375 0.3523238 -0.1090489 0.9299312 0.3511929 -0.03592294 0.9360668 0.3499836 0.03781664 0.9985008 0.03957664 0.1132159 0.9927827 0.03955745 0.187982 0.9813757 0.03955417 0.2616439 0.9643536 0.03955733 0.3338465 0.9417964 0.03957724 0.4041095 0.9138538 0.03958272 0.4720836 0.8806647 0.03958535 0.5373226 0.8424493 0.03954553 0.5994848 0.7994088 0.03954535 0.6582385 0.7517687 0.03957289 0.7132155 0.6998263 0.0395832 0.7640858 0.6439018 0.03953951 0.8106046 0.5842545 0.03958302 0.8524654 0.5212851 0.03955662 0.8894522 0.4553138 0.03955113 0.9213322 0.3867593 0.03955227 0.9479501 0.3159506 0.03957062 0.9691288 0.2433611 0.03955787 0.9847581 0.1693703 0.03956365 0.9947471 0.09441286 0.03955638 0.9990388 0.01892495 0.03954041 0.9976063 -0.05670094 0.03958344 0.9904603 -0.1319918 0.03958016 0.9776422 -0.2065162 0.03958284 0.959226 -0.2798573 0.03956383 0.9353147 -0.3515987 0.0395593 0.9060351 -0.4213461 0.03959709 0.871583 -0.4886489 0.03956556 0.8321266 -0.5531718 0.03957688 0.787916 -0.6145113 0.03955346 0.7391692 -0.6723551 0.03959208 0.686218 -0.726319 0.03956753 0.6293228 -0.7761368 0.03955733 0.5688135 -0.8215136 0.0395835 0.505054 -0.862181 0.0395537 0.4384157 -0.8979014 0.03955924 0.3692338 -0.9284932 0.03958332 0.2979645 -0.9537561 0.03957986 0.2249808 -0.9735587 0.03958797 0.1506955 -0.9877879 0.03957521 0.07558816 -0.9963542 0.03955805 0 -0.9992166 0.03957527 -0.07558822 -0.9963536 0.03957217 -0.1506955 -0.9877884 0.03956013 -0.2249805 -0.9735592 0.03957521 -0.2979646 -0.953756 0.0395841 -0.3692349 -0.9284929 0.03958112 -0.4384154 -0.8979006 0.03958076 -0.5050547 -0.8621806 0.0395559 -0.5688155 -0.8215134 0.03955566 -0.6293221 -0.7761359 0.03958588 -0.6862176 -0.7263199 0.0395596 -0.7391693 -0.6723563 0.03957056 -0.787914 -0.6145113 0.03959214 -0.8321263 -0.553174 0.0395525 -0.8715819 -0.4886498 0.03957611 -0.9060367 -0.4213452 0.03956717 -0.935314 -0.3515961 0.03959614 -0.9592255 -0.2798596 0.03956037 -0.977643 -0.2065162 0.03956443 -0.9904602 -0.131992 0.03958219 -0.9976063 -0.056701 0.03958255 -0.999037 0.01892775 0.03958332 -0.9947475 0.0944128 0.03954255 -0.9847584 0.1693705 0.0395556 -0.9691278 0.243364 0.0395646 -0.9479491 0.3159553 0.03955954 -0.9213311 0.3867601 0.03957176 -0.8894518 0.4553143 0.03955292 -0.8524663 0.5212839 0.0395528 -0.8106045 0.5842562 0.03955954 -0.7640836 0.6439018 0.03958147 -0.7132165 0.6998277 0.03954076 -0.6582367 0.7517697 0.03958344 -0.5994846 0.7994073 0.03957533 -0.5373221 0.8424493 0.03954994 -0.4720844 0.880666 0.03954416 -0.4041089 0.9138541 0.03958451 -0.3338464 0.9417963 0.03957772 -0.2616435 0.964353 0.03957498 -0.187982 0.9813758 0.03955274 -0.1132159 0.9927824 0.03956419 -0.03781676 0.9985017 0.03955239 -0.03780311 0.9985012 0.0395767 -0.03756618 0.9922483 0.1184571 -0.03756827 0.9922483 0.118457 -0.0370956 0.979778 0.1966189 -0.03709346 0.979778 0.1966195 -0.03638899 0.9611716 0.2735418 -0.03639793 0.961176 0.2735248 -0.03544712 0.9360859 0.3499811 -0.03635054 0.9365249 0.3487117 -0.1132175 0.9927828 0.03954994 -0.1125079 0.9865623 0.1184771 -0.1125184 0.9865633 0.1184589 -0.1111047 0.9741699 0.196593 -0.1110914 0.9741672 0.1966141 -0.1089817 0.9556644 0.2735481 -0.1089845 0.9556667 0.273539 -0.1060906 0.9302874 0.3511555 -0.1088674 0.9313858 0.3473739 -0.1879798 0.9813758 0.03956389 -0.1868027 0.97523 0.1184529 -0.1867917 0.9752295 0.1184749 -0.1844444 0.962976 0.1966155 -0.1844599 0.9629771 0.1965954 -0.1809567 0.9446878 0.273532 -0.1809487 0.9446861 0.2735431 -0.1760634 0.9191858 0.3522771 -0.1807866 0.9206464 0.3460151 -0.2616559 0.9643504 0.03955638 -0.2600169 0.9583108 0.1184552 -0.2600178 0.9583107 0.1184542 -0.2567498 0.9462696 0.1966044 -0.2567415 0.9462685 0.1966207 -0.2518676 0.9282997 0.2735371 -0.2518675 0.928302 0.2735293 -0.24496 0.9028396 0.353377 -0.2517765 0.9043873 0.3445174 -0.3338489 0.9417954 0.03957867 -0.3317571 0.9358996 0.1184448 -0.3317531 0.9358994 0.1184579 -0.327583 0.924135 0.1966316 -0.3276019 0.9241337 0.196606 -0.3213808 0.9065845 0.2735308 -0.3213782 0.9065841 0.2735349 -0.3124424 0.8813751 0.354341 -0.3212769 0.8826757 0.3430231 -0.4041117 0.913853 0.03958147 -0.4015815 0.9081286 0.1184682 -0.4015964 0.9081248 0.1184469 -0.3965501 0.8967165 0.1965894 -0.3965211 0.8967201 0.1966317 -0.3889909 0.8796902 0.2735534 -0.3890066 0.8796898 0.2735324 -0.3780481 0.8549067 0.3552663 -0.388949 0.8556632 0.341408 -0.4720621 0.8806762 0.03958433 -0.4691065 0.875162 0.1184509 -0.4690964 0.8751648 0.1184707 -0.463202 0.8641681 0.1966154 -0.4632195 0.8641649 0.1965879 -0.4544183 0.8477473 0.2735482 -0.4544121 0.8477485 0.2735546 -0.4414541 0.8235752 0.3561491 -0.4543876 0.8234745 0.339738 -0.5373234 0.8424487 0.03954386 -0.5339561 0.8371704 0.1184767 -0.5339703 0.8371648 0.1184523 -0.5272642 0.8266487 0.1965819 -0.5272455 0.8266531 0.1966137 -0.5172318 0.8109514 0.2735493 -0.5172314 0.810952 0.2735484 -0.5023192 0.7875691 0.3569462 -0.5171535 0.7863102 0.3380368 -0.5994969 0.7993997 0.0395444 -0.5957446 0.7943905 0.1184581 -0.595732 0.7943968 0.1184793 -0.5882478 0.7844184 0.1966024 -0.5882621 0.7844114 0.1965869 -0.5770831 0.7695085 0.2735543 -0.5770867 0.7695068 0.2735515 -0.5602837 0.7470971 0.3576706 -0.5769225 0.744382 0.3362379 -0.6582435 0.7517642 0.03957337 -0.6541219 0.7470558 0.118457 -0.6541219 0.7470557 0.118458 -0.6459048 0.7376706 0.1965941 -0.6458941 0.7376765 0.1966069 -0.6336265 0.7236606 0.2735559 -0.6336253 0.7236615 0.2735564 -0.6150043 0.7023923 0.3583502 -0.6333187 0.6979308 0.3343651 -0.7131978 0.6998444 0.03958296 -0.7087302 0.6954612 0.1184712 -0.7087357 0.6954579 0.118457 -0.6998284 0.6867185 0.1966162 -0.6998444 0.6867086 0.1965942 -0.6865521 0.6736654 0.2735348 -0.6865367 0.6736728 0.2735552 -0.666185 0.6536973 0.3589951 -0.6859911 0.647219 0.3324512 -0.7641017 0.6438828 0.03954154 -0.7593182 0.6398511 0.1184339 -0.7593009 0.6398647 0.1184708 -0.7497574 0.6318255 0.1966225 -0.7497617 0.6318215 0.1966191 -0.7355247 0.6198265 0.2735297 -0.7355211 0.6198285 0.273535 -0.7135432 0.601306 0.3595655 -0.7346376 0.592548 0.3304462 -0.8105973 0.5842648 0.03958266 -0.805519 0.5806068 0.1184702 -0.8055353 0.5805912 0.1184355 -0.7954146 0.573293 0.1965982 -0.7954003 0.5733049 0.1966212 -0.7802969 0.5624174 0.2735385 -0.7803012 0.5624154 0.2735307 -0.7568289 0.5454979 0.3600588 -0.7789246 0.5342511 0.328409 -0.8524654 0.521285 0.03955644 -0.8471249 0.5180187 0.1184745 -0.8471245 0.5180198 0.1184716 -0.8364856 0.5115121 0.1965889 -0.8364809 0.5115166 0.1965981 -0.8205912 0.5018014 0.2735427 -0.8205936 0.5017998 0.2735384 -0.7957586 0.4866126 0.3605225 -0.818654 0.4726285 0.3262334 -0.8894523 0.4553135 0.03955107 -0.8838806 0.4524614 0.118465 -0.883876 0.4524676 0.1184756 -0.8727743 0.4467824 0.1965976 -0.8727778 0.4467794 0.1965887 -0.856199 0.438291 0.2735404 -0.8561969 0.4382943 0.2735416 -0.8301571 0.424963 0.3608958 -0.8534896 0.4080978 0.3240552 -0.9213374 0.3867468 0.03955191 -0.9155681 0.3843254 0.1184443 -0.9155599 0.3843382 0.118467 -0.9040547 0.3795088 0.1966169 -0.9040648 0.3794952 0.1965965 -0.8868891 0.3722894 0.2735477 -0.8868936 0.3722846 0.2735397 -0.8598142 0.3609158 0.3611918 -0.8832684 0.3410261 0.3217738 -0.9479478 0.3159576 0.03957068 -0.9420119 0.313978 0.1184544 -0.9420142 0.3139747 0.1184446 -0.9301728 0.3100259 0.1966277 -0.9301754 0.3100238 0.1966191 -0.912519 0.3041378 0.2735133 -0.9125036 0.3041545 0.2735461 -0.8845364 0.2948324 0.3614822 -0.9078136 0.271758 0.3194092 -0.9691292 0.2433598 0.03955787 -0.9630609 0.2418397 0.1184377 -0.9630568 0.2418478 0.1184534 -0.9509524 0.2388083 0.1966218 -0.9509499 0.2388123 0.1966295 -0.9328917 0.2342774 0.2735455 -0.9329061 0.2342579 0.2735135 -0.9042471 0.2270613 0.3616358 -0.9269042 0.2008128 0.3170534 -0.9847577 0.1693722 0.03956371 -0.9785897 0.1683157 0.1184577 -0.9785947 0.1682996 0.1184385 -0.9662977 0.166186 0.1965991 -0.9662906 0.1662007 0.1966214 -0.9479368 0.1630451 0.2735549 -0.9479403 0.1630383 0.2735465 -0.9187702 0.1580194 0.3617891 -0.9405075 0.1284732 0.3145478 -0.994746 0.09442412 0.03955644 -0.9885134 0.09383177 0.1184777 -0.9885172 0.09381687 0.1184584 -0.9760968 0.09264057 0.1966032 -0.9760982 0.09263449 0.1965986 -0.95756 0.09087389 0.2735341 -0.9575525 0.09089094 0.2735546 -0.9280546 0.08809036 0.3618767 -0.9484933 0.05522572 0.3119469 -0.9990393 0.01889753 0.03954041 -0.992783 0.01878148 0.1184452 -0.9927787 0.01880097 0.1184783 -0.9803045 0.01856458 0.1966174 -0.9803077 0.01855975 0.1966024 -0.9616869 0.01820522 0.2735453 -0.96169 0.01819711 0.2735347 -0.932055 0.01763898 0.3618872 -0.950773 -0.01845979 0.3093379 -0.927767 -0.09026914 0.3620771 -0.9976061 -0.05670303 0.03958344 -0.9913594 -0.05634909 0.1184544 -0.9913603 -0.05635327 0.118445 -0.9788984 -0.05564361 0.1966258 -0.9788997 -0.05565208 0.1966167 -0.9603167 -0.05459493 0.2735164 -0.9603094 -0.05457317 0.2735465 -0.9403324 -0.05344086 0.3360347 -0.9319597 -0.01805436 0.3621123 -0.9180271 -0.1619096 0.3619555 -0.9904597 -0.1319963 0.03958034 -0.9842601 -0.1311694 0.1184344 -0.9842599 -0.1311523 0.1184554 -0.9718886 -0.129508 0.1966227 -0.9718883 -0.1295039 0.1966265 -0.9534333 -0.1270433 0.2735416 -0.9534379 -0.1270629 0.2735164 -0.9335709 -0.1244153 0.3361046 -0.9277727 -0.09021085 0.3620773 -0.9027825 -0.232576 0.3617904 -0.9776445 -0.2065057 0.03958302 -0.9715245 -0.2052085 0.1184467 -0.9715234 -0.2052203 0.1184355 -0.9593101 -0.202642 0.196622 -0.9593111 -0.2026366 0.1966232 -0.9410949 -0.1987882 0.273539 -0.9410933 -0.1987921 0.2735418 -0.9214417 -0.1946352 0.3362474 -0.9180365 -0.1618527 0.3619569 -0.8821448 -0.3018409 0.3615423 -0.9592269 -0.2798548 0.03956413 -0.9532183 -0.278104 0.1184614 -0.953217 -0.2781145 0.1184469 -0.9412326 -0.2746158 0.1966401 -0.9412336 -0.274625 0.1966225 -0.9233644 -0.2694172 0.2735193 -0.9233629 -0.2694016 0.2735396 -0.9040116 -0.263755 0.3364467 -0.9027975 -0.2325174 0.3617907 -0.8562031 -0.3693166 0.3612775 -0.935307 -0.351619 0.03955954 -0.9294492 -0.3494181 0.1184538 -0.9294506 -0.3494111 0.1184632 -0.9177712 -0.3450244 0.196607 -0.917773 -0.3450008 0.1966397 -0.9003551 -0.3384509 0.2735179 -0.9003551 -0.3384503 0.2735186 -0.8813804 -0.3313158 0.3367468 -0.8821389 -0.30186 0.3615405 -0.8251269 -0.4346318 0.3609166 -0.9060435 -0.4213281 0.03959763 -0.9003697 -0.4186878 0.1184698 -0.9003669 -0.418699 0.118451 -0.8890565 -0.4134386 0.1965892 -0.889059 -0.4134242 0.1966078 -0.8721756 -0.4055752 0.2735297 -0.8721755 -0.4055846 0.2735162 -0.8536898 -0.3969894 0.3370654 -0.8562036 -0.3693149 0.3612784 -0.7891089 -0.4973682 0.3604608 -0.8715792 -0.4886557 0.03956598 -0.8661215 -0.4855961 0.118448 -0.8661255 -0.4855834 0.118471 -0.8552427 -0.4794809 0.196617 -0.8552377 -0.4795005 0.1965901 -0.8389899 -0.4703904 0.2735486 -0.8389876 -0.4704053 0.2735298 -0.8210973 -0.4603742 0.3374241 -0.8251314 -0.4346238 0.360916 -0.7483494 -0.5571067 0.3600074 -0.8321349 -0.5531594 0.03957891 -0.8269229 -0.5496947 0.118467 -0.8269175 -0.5497065 0.1184499 -0.8165239 -0.5427967 0.1966229 -0.816522 -0.5428007 0.1966195 -0.8010199 -0.5324965 0.2735228 -0.8010258 -0.5324738 0.2735498 -0.7838078 -0.5210317 0.3378925 -0.7891089 -0.4973689 0.36046 -0.7030972 -0.6135524 0.3594548 -0.7879021 -0.6145287 0.03955596 -0.7829658 -0.6106849 0.1184424 -0.7829765 -0.610666 0.1184694 -0.7731341 -0.6029923 0.1966322 -0.7731326 -0.6029974 0.196622 -0.7584562 -0.5915517 0.2735157 -0.7584581 -0.5915459 0.273523 -0.7420033 -0.5787127 0.3384124 -0.7483381 -0.5571242 0.3600038 -0.6535449 -0.6664012 0.3588712 -0.739181 -0.6723423 0.03959006 -0.7345529 -0.6681346 0.1184403 -0.7345542 -0.6681333 0.1184403 -0.7253201 -0.6597375 0.1966143 -0.7253262 -0.6597254 0.1966327 -0.711557 -0.6472004 0.2735294 -0.7115539 -0.6472104 0.2735138 -0.695964 -0.6330313 0.3389774 -0.703079 -0.6135731 0.3594551 -0.6001155 -0.7152347 0.358191 -0.6862227 -0.7263145 0.03956854 -0.6819254 -0.7217653 0.1184594 -0.6819165 -0.7217769 0.1184402 -0.6733473 -0.712704 0.1966127 -0.6733469 -0.7127028 0.1966181 -0.6605592 -0.699167 0.2735453 -0.6605518 -0.6991804 0.2735291 -0.645928 -0.6836996 0.3396055 -0.6535826 -0.6663647 0.3588703 -0.543063 -0.7598016 0.3574692 -0.629308 -0.7761486 0.03955876 -0.6253693 -0.7712883 0.1184379 -0.6253778 -0.771278 0.1184608 -0.6175176 -0.7615849 0.1966229 -0.6175162 -0.7615887 0.1966127 -0.6057901 -0.7471271 0.2735317 -0.6057929 -0.747119 0.2735476 -0.5922214 -0.7303802 0.3403213 -0.6001382 -0.7152183 0.3581855 -0.4827774 -0.7998256 0.3566582 -0.5688282 -0.8215033 0.03958487 -0.5652663 -0.8163582 0.118463 -0.565257 -0.8163682 0.1184383 -0.558152 -0.8061068 0.196617 -0.558155 -0.8061043 0.1966192 -0.5475531 -0.790791 0.2735605 -0.547541 -0.7908081 0.2735354 -0.5351157 -0.77286 0.3410845 -0.5430609 -0.7598022 0.3574711 -0.4194886 -0.8351209 0.3558122 -0.5050523 -0.8621818 0.03955864 -0.5018903 -0.8567796 0.1184692 -0.501883 -0.8567843 0.1184661 -0.4955765 -0.8460178 0.1966161 -0.4955747 -0.8460191 0.1966154 -0.4861656 -0.829957 0.2735222 -0.4861812 -0.8299359 0.2735586 -0.4750002 -0.8108466 0.3419104 -0.4827122 -0.7998652 0.3566576 -0.3535574 -0.8654733 0.3548989 -0.4384018 -0.8979081 0.03956103 -0.4356564 -0.892286 0.1184458 -0.4356712 -0.8922753 0.1184714 -0.4301958 -0.8810607 0.196631 -0.4301881 -0.8810681 0.196615 -0.4220209 -0.8643373 0.2735313 -0.4220175 -0.8643419 0.2735223 -0.4121669 -0.8441688 0.342779 -0.4194303 -0.835148 0.3558179 -0.2856158 -0.8905954 0.353926 -0.3692342 -0.9284931 0.03958183 -0.3669222 -0.9226802 0.1184463 -0.3669235 -0.9226793 0.1184491 -0.3623139 -0.911084 0.196608 -0.3623214 -0.9110757 0.1966329 -0.3554431 -0.8937771 0.2735375 -0.3554412 -0.8937795 0.2735322 -0.3470152 -0.8725948 0.3437423 -0.3535723 -0.8654669 0.3548998 -0.2158513 -0.9104323 0.3528758 -0.2979602 -0.9537574 0.03958153 -0.296095 -0.9477862 0.1184449 -0.2960932 -0.9477867 0.1184457 -0.2923728 -0.9358733 0.1966202 -0.2923673 -0.9358776 0.1966081 -0.2868172 -0.9181092 0.2735172 -0.2868283 -0.9181 0.2735359 -0.2799195 -0.895987 0.3447497 -0.2855601 -0.8906143 0.3539234 -0.1447185 -0.9248221 0.3517962 -0.2249884 -0.973557 0.03958791 -0.2235795 -0.9674597 0.1184644 -0.2235677 -0.967465 0.1184442 -0.2207585 -0.9553095 0.1965953 -0.2207765 -0.9553008 0.1966168 -0.2165842 -0.9371616 0.2735313 -0.2165772 -0.9371677 0.273516 -0.2112693 -0.914201 0.3458349 -0.2157651 -0.9104508 0.3528808 -0.07244235 -0.9337109 0.3506226 -0.1507036 -0.9877866 0.03957539 -0.1497604 -0.9816014 0.1184515 -0.1497694 -0.9815986 0.1184636 -0.1478871 -0.9692632 0.196617 -0.1478717 -0.9692707 0.1965915 -0.1450634 -0.950864 0.2735219 -0.1450695 -0.9508605 0.2735313 -0.1414527 -0.9271548 0.3469512 -0.1446408 -0.9248352 0.3517938 -0.07558101 -0.9963545 0.03956514 -0.07510763 -0.9901132 0.1184683 -0.07509565 -0.9901163 0.1184504 -0.07415175 -0.9776709 0.1966246 -0.07414543 -0.9776732 0.1966158 -0.07273757 -0.9591091 0.2735309 -0.07273358 -0.9591129 0.2735183 -0.07088673 -0.9347606 0.3481348 -0.07257086 -0.9336996 0.350626 0 -0.9992167 0.03957593 0 -0.9929578 0.1184694 0 -0.9929579 0.1184677 0 -0.9804794 0.1966223 0 -0.9804783 0.1966272 0 -0.961863 0.2735317 0 -0.9618657 0.2735226 0 -0.9369812 0.3493801 0 -0.9369814 0.3493793 0.07558101 -0.9963539 0.03957951 0.07510757 -0.9901154 0.1184504 0.07509565 -0.9901142 0.1184676 0.07415229 -0.9776728 0.1966149 0.07414507 -0.9776709 0.1966271 0.07273781 -0.9591116 0.2735219 0.0727334 -0.9591107 0.2735265 0.07081776 -0.9338414 0.3506068 0.07264411 -0.9346467 0.3480781 0.1507037 -0.9877871 0.03956097 0.1497599 -0.9815993 0.1184681 0.14977 -0.9816005 0.1184465 0.1478881 -0.969268 0.1965929 0.1478706 -0.9692657 0.1966169 0.1450627 -0.9508617 0.2735306 0.14507 -0.9508635 0.2735202 0.1411826 -0.9253842 0.3517552 0.1449331 -0.9267043 0.3467183 0.2249885 -0.9735574 0.03957641 0.2235803 -0.9674619 0.1184462 0.2235671 -0.9674627 0.1184642 0.220757 -0.9553048 0.1966197 0.2207776 -0.9553052 0.1965944 0.2165852 -0.9371656 0.2735173 0.2165762 -0.937164 0.2735295 0.2106829 -0.911664 0.3528195 0.216416 -0.9131971 0.3453046 0.2979603 -0.9537571 0.03958731 0.2960952 -0.9477863 0.1184438 0.2960931 -0.9477864 0.1184486 0.2923732 -0.9358751 0.1966111 0.2923668 -0.9358753 0.1966195 0.2868158 -0.9181035 0.2735373 0.2868293 -0.9181054 0.2735168 0.2789081 -0.8927502 0.3538467 0.2867123 -0.894207 0.3437876 0.3692355 -0.9284927 0.03958183 0.3669225 -0.9226797 0.1184491 0.3669236 -0.9226796 0.1184462 0.3623122 -0.9110805 0.1966273 0.3623229 -0.9110792 0.1966131 0.355444 -0.8937785 0.2735317 0.3554406 -0.8937781 0.2735377 0.3454915 -0.8687633 0.354804 0.3553546 -0.8698298 0.3422272 0.4384019 -0.897907 0.0395841 0.4356546 -0.8922838 0.118468 0.4356729 -0.8922774 0.1184487 0.4301973 -0.8810638 0.1966141 0.4301866 -0.881065 0.1966319 0.4220219 -0.8643395 0.2735233 0.4220161 -0.8643407 0.2735283 0.410052 -0.8398395 0.3557064 0.4219716 -0.8402055 0.34058 0.5050535 -0.862181 0.03956162 0.5018904 -0.8567805 0.1184624 0.5018823 -0.856784 0.1184721 0.495577 -0.8460178 0.1966153 0.4955738 -0.846019 0.196618 0.4861609 -0.8299484 0.2735567 0.4861864 -0.8299446 0.2735229 0.4722456 -0.8061432 0.3565351 0.4861136 -0.8055043 0.3389052 0.5688303 -0.8215033 0.0395562 0.5652691 -0.8163596 0.1184392 0.5652534 -0.8163673 0.1184613 0.5581507 -0.8061058 0.1966246 0.5581563 -0.8061047 0.1966137 0.5475575 -0.7907972 0.2735336 0.5475371 -0.7908011 0.2735632 0.5316688 -0.7678827 0.3573299 0.5474392 -0.7659279 0.3371425 0.6293073 -0.7761477 0.03958755 0.6253663 -0.7712875 0.1184601 0.6253809 -0.771279 0.1184382 0.6175211 -0.7615841 0.1966148 0.6175128 -0.7615892 0.1966209 0.6057857 -0.7471253 0.2735463 0.6057984 -0.7471206 0.2735309 0.588062 -0.7252542 0.3580356 0.605576 -0.7216947 0.3353127 0.6862214 -0.7263162 0.03956001 0.6819272 -0.7217667 0.1184402 0.681915 -0.7217753 0.1184588 0.6733469 -0.7127032 0.1966165 0.6733475 -0.7127034 0.1966139 0.660562 -0.6991714 0.2735274 0.6605488 -0.6991757 0.2735486 0.6410403 -0.6785264 0.3587051 0.6601646 -0.6730755 0.3333948 0.7391803 -0.6723443 0.03956854 0.7345531 -0.6681344 0.1184406 0.7345535 -0.6681341 0.1184402 0.7253179 -0.6597343 0.1966335 0.7253277 -0.6597294 0.1966134 0.7115599 -0.6472024 0.273517 0.711551 -0.6472078 0.2735276 0.690367 -0.627941 0.359282 0.710848 -0.6203513 0.3314506 0.7878996 -0.6145296 0.0395947 0.782963 -0.6106833 0.1184694 0.782979 -0.610668 0.1184422 0.7731354 -0.6029941 0.196621 0.7731309 -0.6029961 0.1966332 0.758454 -0.5915507 0.2735239 0.7584612 -0.5915459 0.2735142 0.7357135 -0.5738075 0.3598203 0.7573446 -0.5638288 0.3294336 0.832134 -0.5531622 0.03955447 0.8269248 -0.5496958 0.118449 0.8269158 -0.5497053 0.1184671 0.8165233 -0.5427989 0.1966193 0.8165232 -0.5427981 0.196622 0.8010147 -0.5324906 0.2735494 0.8010316 -0.5324792 0.2735221 0.7768654 -0.5164169 0.3602692 0.7993741 -0.503839 0.3273336 0.8715782 -0.4886566 0.0395767 0.8661189 -0.4855955 0.1184697 0.8661284 -0.4855835 0.1184492 0.8552473 -0.4794843 0.196588 0.8552333 -0.4794966 0.1966191 0.8389956 -0.4703924 0.2735277 0.8389818 -0.4704036 0.2735509 0.8135282 -0.4561325 0.3607147 0.836699 -0.4407134 0.3251256 0.9060451 -0.4213274 0.03956741 0.9003723 -0.4186872 0.1184518 0.9003643 -0.4186992 0.1184695 0.8890528 -0.413437 0.1966087 0.8890626 -0.4134259 0.1965881 0.8721789 -0.4055761 0.273518 0.8721718 -0.4055842 0.2735286 0.8455817 -0.3932169 0.361071 0.869025 -0.3748486 0.3229303 0.9353062 -0.3516169 0.03959643 0.9294483 -0.3494173 0.1184628 0.9294515 -0.3494119 0.1184539 0.9177651 -0.3450222 0.1966392 0.9177791 -0.3450031 0.1966074 0.9003549 -0.3384506 0.2735183 0.9003552 -0.3384504 0.2735179 0.872808 -0.3280963 0.3613296 0.8961806 -0.30666 0.3206555 0.9592264 -0.2798568 0.03956043 0.9532201 -0.2781043 0.1184463 0.9532153 -0.278114 0.1184619 0.9412363 -0.2746161 0.1966222 0.9412299 -0.2746248 0.1966406 0.9233592 -0.2694143 0.2735395 0.9233684 -0.2694038 0.2735188 0.895028 -0.2611322 0.361573 0.9180603 -0.2364516 0.3182076 0.9776453 -0.2065052 0.03956454 0.9715253 -0.2052117 0.1184356 0.9715226 -0.2052172 0.1184468 0.9593113 -0.2026363 0.196623 0.9593101 -0.2026423 0.196622 0.9410935 -0.1987925 0.2735409 0.9410951 -0.1987874 0.2735392 0.9121531 -0.1926742 0.3617365 0.9344265 -0.1647401 0.3157656 0.9904596 -0.1319963 0.03958225 0.9842581 -0.1311662 0.1184546 0.9842619 -0.1311554 0.118435 0.9718881 -0.1295052 0.1966264 0.9718888 -0.1295065 0.1966224 0.95344 -0.1270471 0.2735165 0.9534311 -0.1270591 0.2735419 0.9240657 -0.1231469 0.3618531 0.9452198 -0.09191042 0.3132284 0.9976062 -0.05670303 0.03958249 0.9913605 -0.05634927 0.118445 0.9913592 -0.05635303 0.1184543 0.9789001 -0.05564647 0.1966164 0.9788981 -0.05564928 0.1966263 0.9603084 -0.05459463 0.2735456 0.9603178 -0.05457347 0.2735168 0.93072 -0.05289447 0.3618874 0.9503428 -0.01841056 0.31066 0.9305607 0.05421668 0.3621013 0.9990376 0.01890033 0.03958332 0.9927791 0.0187785 0.1184784 0.9927827 0.01880395 0.1184448 0.9803075 0.01856464 0.1966028 0.9803047 0.01855975 0.1966172 0.9616898 0.01820528 0.2735348 0.9616872 0.018197 0.2735447 0.9416866 0.01781833 0.336019 0.9319586 -0.01808845 0.3621132 0.9235961 0.1261712 0.3620099 0.9947465 0.09442394 0.03954249 0.9885162 0.09382635 0.1184584 0.9885143 0.09382212 0.1184775 0.976098 0.09263789 0.1965988 0.9760971 0.0926373 0.1966032 0.9575541 0.09087324 0.2735549 0.9575586 0.09089154 0.2735331 0.9376266 0.08900052 0.3360584 0.930563 0.05417871 0.3621012 0.9111135 0.1973131 0.3618561 0.9847581 0.1693722 0.03955566 0.9785929 0.1683104 0.1184383 0.9785915 0.1683049 0.118458 0.9662933 0.1661852 0.196621 0.966295 0.1662015 0.1965992 0.9479392 0.1630454 0.2735466 0.947938 0.1630378 0.2735547 0.9281682 0.1596371 0.3361842 0.9235976 0.1261606 0.3620095 0.8931263 0.2673965 0.361697 0.9691283 0.2433624 0.03956454 0.963059 0.2418392 0.1184535 0.9630587 0.2418482 0.1184375 0.9509509 0.2388081 0.1966293 0.9509515 0.238812 0.1966215 0.932901 0.2342785 0.273513 0.9328969 0.2342564 0.2735459 0.9133776 0.229354 0.3363601 0.9110976 0.1973883 0.3618553 0.8698309 0.3358337 0.3614 0.9479468 0.3159621 0.03955936 0.9420129 0.313979 0.1184443 0.9420134 0.3139735 0.1184551 0.9301741 0.3100281 0.1966185 0.9301744 0.3100211 0.1966278 0.9125102 0.3041351 0.2735458 0.9125128 0.3041566 0.2735128 0.8933355 0.2977685 0.3365795 0.8931373 0.2673588 0.3616975 0.8412848 0.4023029 0.3610987 0.9213362 0.3867477 0.039572 0.9155655 0.3843247 0.118467 0.9155628 0.3843382 0.1184439 0.9040589 0.3795089 0.1965974 0.9040607 0.3794949 0.1966161 0.886892 0.3722884 0.27354 0.8868911 0.3722853 0.2735469 0.868165 0.3644239 0.336875 0.8698301 0.3358337 0.3614019 0.8077122 0.4663496 0.3607204 0.8894516 0.4553146 0.03955322 0.8838798 0.4524602 0.1184752 0.8838772 0.4524682 0.1184648 0.8727759 0.4467831 0.1965888 0.8727762 0.4467786 0.1965979 0.8561981 0.4382925 0.273541 0.8561985 0.4382921 0.2735404 0.8379988 0.4289776 0.3372482 0.8413012 0.4022687 0.3610986 0.7693027 0.5276325 0.3602461 0.8524662 0.5212841 0.03955286 0.847124 0.5180208 0.1184717 0.8471257 0.5180176 0.118474 0.836484 0.5115109 0.1965992 0.8364825 0.5115176 0.1965883 0.8205911 0.5018034 0.273539 0.820593 0.5017983 0.2735428 0.8030267 0.4910584 0.3376535 0.8077296 0.4663194 0.3607203 0.7262791 0.5857511 0.3597422 0.8105973 0.5842663 0.0395596 0.8055219 0.5806099 0.118434 0.8055324 0.5805876 0.1184727 0.7954098 0.5732916 0.1966219 0.795405 0.5733067 0.1965975 0.7802982 0.562419 0.2735316 0.7803003 0.5624132 0.2735378 0.7634477 0.5502695 0.3381586 0.7692952 0.5276444 0.3602449 0.6788393 0.6404529 0.359162 0.7641005 0.6438817 0.03958332 0.7593146 0.6398485 0.1184704 0.7593042 0.6398674 0.118435 0.749759 0.6318251 0.1966176 0.7497603 0.6318219 0.1966232 0.7355231 0.6198266 0.2735342 0.7355223 0.6198295 0.2735295 0.7194926 0.6063186 0.3386862 0.7262507 0.5857849 0.3597443 0.6273949 0.6912637 0.3585109 0.713199 0.6998456 0.03953981 0.7087302 0.6954633 0.118458 0.7087345 0.6954567 0.1184713 0.6998322 0.6867212 0.1965935 0.6998404 0.6867062 0.1966165 0.6865466 0.6736618 0.2735572 0.6865422 0.6736768 0.2735316 0.6714218 0.6588404 0.3392963 0.6788323 0.6404589 0.3591644 0.572071 0.7380389 0.3578175 0.6582409 0.7517661 0.03958344 0.6541213 0.747056 0.1184599 0.6541212 0.7470568 0.1184555 0.645902 0.7376695 0.1966072 0.6458973 0.7376773 0.1965934 0.6336269 0.7236606 0.2735549 0.6336251 0.7236612 0.2735578 0.6195203 0.7075514 0.3399498 0.627326 0.6913267 0.3585101 0.5132881 0.7804051 0.3570761 0.5994979 0.7993974 0.03957599 0.5957435 0.7943884 0.1184777 0.5957327 0.7943992 0.1184591 0.588252 0.78442 0.1965833 0.5882582 0.7844096 0.1966065 0.577084 0.7695093 0.27355 0.5770851 0.769506 0.2735567 0.5640782 0.7521603 0.3406916 0.5720316 0.7380696 0.3578174 0.4513996 0.8181158 0.3562655 0.5373227 0.842449 0.03954958 0.5339578 0.8371729 0.1184514 0.5339686 0.8371621 0.118478 0.527261 0.8266438 0.1966111 0.5272488 0.8266583 0.1965828 0.517232 0.8109515 0.2735485 0.5172309 0.8109521 0.2735489 0.5054153 0.7924244 0.3414952 0.5132763 0.7804124 0.3570771 0.3867594 0.8509582 0.3553692 0.4720631 0.8806775 0.0395441 0.469106 0.8751599 0.1184689 0.4690971 0.8751668 0.1184535 0.4632055 0.8641725 0.1965876 0.4632157 0.8641605 0.1966162 0.4544172 0.8477458 0.2735548 0.4544126 0.8477501 0.2735489 0.4438883 0.8281151 0.3423285 0.4514216 0.8181025 0.3562678 0.3197554 0.8787153 0.3544232 0.4041116 0.9138528 0.03958433 0.401583 0.9081308 0.1184473 0.4015939 0.908123 0.1184698 0.3965462 0.8967091 0.1966317 0.3965248 0.8967278 0.1965897 0.3889938 0.8796953 0.2735327 0.3890037 0.8796842 0.2735542 0.3798597 0.8590044 0.3432466 0.3868017 0.8509383 0.3553712 0.2507801 0.901215 0.3534416 0.3338489 0.9417954 0.03957867 0.3317571 0.9358989 0.1184506 0.3317535 0.9359004 0.1184493 0.3275852 0.9241396 0.1966066 0.3275993 0.9241292 0.1966313 0.3213799 0.9065833 0.2735356 0.321379 0.9065848 0.2735319 0.3137005 0.884922 0.3442456 0.3198249 0.8786891 0.3544258 0.1803452 0.9183374 0.3523237 0.261655 0.9643499 0.03957366 0.2600176 0.9583104 0.1184574 0.2600173 0.9583112 0.1184514 0.2567492 0.9462665 0.1966204 0.2567422 0.9462718 0.1966037 0.2518674 0.9283019 0.2735298 0.251868 0.9282995 0.2735372 0.2457537 0.9057614 0.3452555 0.2508839 0.9011842 0.3534466 0.1090502 0.9299304 0.3511946 0.1879797 0.9813758 0.03956389 0.1868026 0.975228 0.1184709 0.1867914 0.9752317 0.1184578 0.1844453 0.9629802 0.1965939 0.184459 0.9629733 0.196615 0.1809569 0.9446839 0.273545 0.1809493 0.9446899 0.2735292 0.1764775 0.9213437 0.3463836 0.180333 0.9183395 0.3523246 0.03591209 0.9360666 0.3499854 0.1132175 0.9927825 0.03955858 0.1125086 0.9865645 0.1184579 0.1125177 0.986561 0.1184789 0.1111038 0.9741659 0.1966133 0.1110922 0.9741716 0.1965916 0.1089816 0.955666 0.2735428 0.1089844 0.9556652 0.2735444 0.1062443 0.9316418 0.3474992 0.1087026 0.9299728 0.35119 0.03780311 0.9985021 0.0395537 0.03756636 0.9922483 0.1184574 0.03756803 0.9922482 0.118457 0.03709596 0.9797776 0.1966206 0.0370931 0.9797786 0.1966167 0.03638875 0.9611754 0.2735286 0.03639811 0.9611722 0.2735385 0.03546637 0.9365543 0.3487238 0.03633093 0.9360482 0.3499911 -4.01121e-6 0 -1 4.01078e-6 0 -1 -3.97918e-6 0 -1 4.01107e-6 0 -1 -1.98937e-6 0 -1 0 0 -1 -2.00523e-6 0 -1 9.94716e-7 0 -1 2.00533e-6 0 -1 4.01036e-6 0 -1 4.01121e-6 0 -1 -4.01078e-6 0 -1 3.97918e-6 0 -1 -4.01107e-6 0 -1 1.98937e-6 0 -1 0 0 -1 2.00523e-6 0 -1 -9.94716e-7 0 -1 -2.00533e-6 0 -1 -4.01036e-6 0 -1 0.05814474 0.9983082 0 -0.05814474 0.9983082 0 -0.1736633 0.9848052 0 -0.1736623 0.9848053 0 -0.2867985 0.957991 0 -0.3960844 0.9182141 0 -0.3960859 0.9182134 0 -0.4999904 0.8660309 0 -0.4999917 0.8660303 0 -0.5971618 0.8021209 0 -0.6862396 0.7273756 0 -0.686239 0.7273761 0 -0.7660462 0.6427856 0 -0.7660452 0.6427868 0 -0.8354886 0.5495079 0 -0.835487 0.5495104 0 -0.8936355 0.4487935 0 -0.8936352 0.4487944 0 -0.9396908 0.3420251 0 -0.9396913 0.3420242 0 -0.973047 0.2306072 0 -0.9932364 0.1161097 0 -0.9932364 0.1161102 0 -1 0 0 -0.9932364 -0.1161097 0 -0.9932364 -0.1161102 0 -0.973047 -0.2306072 0 -0.9396913 -0.3420242 0 -0.9396908 -0.3420251 0 -0.8936359 -0.4487927 0 -0.8936347 -0.4487951 0 -0.8354881 -0.5495086 0 -0.8354873 -0.5495097 0 -0.7660452 -0.6427868 0 -0.7660462 -0.6427856 0 -0.686239 -0.7273761 0 -0.6862396 -0.7273756 0 -0.5971618 -0.8021209 0 -0.4999902 -0.8660312 0 -0.499992 -0.8660302 0 -0.3960843 -0.9182142 0 -0.3960861 -0.9182134 0 -0.2867985 -0.957991 0 -0.1736633 -0.9848052 0 -0.1736623 -0.9848053 0 -0.05814474 -0.9983082 0 0.05814474 -0.9983082 0 0.1736633 -0.9848052 0 0.1736623 -0.9848053 0 0.2867985 -0.957991 0 0.3960844 -0.9182141 0 0.3960859 -0.9182134 0 0.4999904 -0.8660309 0 0.4999917 -0.8660303 0 0.5971618 -0.8021209 0 0.6862396 -0.7273756 0 0.686239 -0.7273761 0 0.7660462 -0.6427856 0 0.7660452 -0.6427868 0 0.8354886 -0.5495079 0 0.835487 -0.5495104 0 0.8936355 -0.4487935 0 0.8936352 -0.4487944 0 0.9396908 -0.3420251 0 0.9396913 -0.3420242 0 0.973047 -0.2306072 0 0.9932364 -0.1161097 0 0.9932364 -0.1161102 0 1 0 0 0.9932364 0.1161097 0 0.9932364 0.1161102 0 0.973047 0.2306072 0 0.9396913 0.3420242 0 0.9396908 0.3420251 0 0.8936359 0.4487927 0 0.8936347 0.4487951 0 0.8354881 0.5495086 0 0.8354873 0.5495097 0 0.7660452 0.6427868 0 0.7660462 0.6427856 0 0.686239 0.7273761 0 0.6862396 0.7273756 0 0.5971618 0.8021209 0 0.4999902 0.8660312 0 0.499992 0.8660302 0 0.3960843 0.9182142 0 0.3960861 0.9182134 0 0.2867985 0.957991 0 0.1736633 0.9848052 0 0.1736623 0.9848053 0 -4.21378e-7 0 1 3.29008e-6 0 1 -8.42829e-7 0 1 -8.42804e-7 0 1 -3.29038e-6 0 1 -2.98127e-6 0 1 2.98127e-6 0 1 8.42886e-7 0 1 -3.29056e-6 0 1 1.68566e-6 0 1 7.45107e-7 0 1 1.49022e-6 0 1 -2.10697e-7 0 1 3.16027e-7 0 1 7.45041e-7 0 1 1.49012e-6 0 1 -1.49038e-6 0 1 1.49019e-6 0 1 -5.96075e-6 0 1 -7.45051e-7 0 1 -7.45041e-7 0 1 -8.42751e-7 0 1 -6.58042e-6 0 1 2.98068e-6 0 1 -2.98061e-6 0 1 5.96154e-6 0 1 -5.96161e-6 0 1 -7.45096e-7 0 1 3.37132e-6 0 1 -3.37128e-6 0 1 -1.68566e-6 0 1 -1.35071e-6 0 1 1.68564e-6 0 1 -1.86279e-7 0 1 5.96075e-6 0 1 5.96161e-6 0 1 -5.96154e-6 0 1 6.58042e-6 0 1 3.29038e-6 0 1 8.42835e-7 0 1 -3.29008e-6 0 1 -1.49044e-6 0 1 2.98077e-6 0 1 -1.68566e-6 0 1 3.29056e-6 0 1 -1.68577e-6 0 1 2.98061e-6 0 1 -2.98068e-6 0 1 -4.21372e-7 0 1 -1.49022e-6 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -0.03080433 -0.9995254 0 -0.1228806 -0.9924215 0 -0.1228806 -0.9924215 0 -0.2439218 -0.9697949 0 -0.2439218 -0.969795 0 -0.3612295 -0.932477 0 -0.3612293 -0.9324771 0 -0.4731075 -0.8810047 0 -0.4731076 -0.8810047 0 -0.5777671 -0.8162017 0 -0.5777676 -0.8162013 0 -0.6736868 -0.739017 0 -0.6736863 -0.7390175 0 -0.7594098 -0.6506126 0 -0.7594109 -0.6506115 0 -0.8336044 -0.552362 0 -0.8336045 -0.552362 0 -0.8951631 -0.4457388 0 -0.9431539 -0.3323564 0 -0.9431542 -0.3323554 0 -0.9768465 -0.2139416 0 -0.9768463 -0.2139427 0 -0.9957354 -0.09225583 0 -0.9957355 -0.09225481 0 -0.9995262 0.0307812 0 -0.9881637 0.1534037 0 -0.9618286 0.2736529 0 -0.9618285 0.2736529 0 -0.9209067 0.3897835 0 -0.9209063 0.3897843 0 -0.8660196 0.5000104 0 -0.8660186 0.5000119 0 -0.7980232 0.6026268 0 -0.7980227 0.6026275 0 -0.7179102 0.6961358 0 -0.7179106 0.6961353 0 -0.6269293 0.7790762 0 -0.6269303 0.7790753 0 -0.5264266 0.8502206 0 -0.526427 0.8502203 0 -0.4179658 0.9084629 0 -0.3031539 0.9529417 0 -0.3031539 0.9529417 0 -0.1837419 0.9829745 0 -0.1837418 0.9829745 0 -0.06155973 0.9981035 0 0.06155973 0.9981035 0 0.1837418 0.9829745 0 0.1837419 0.9829745 0 0.3031539 0.9529417 0 0.3031539 0.9529417 0 0.4179658 0.9084629 0 0.526427 0.8502203 0 0.5264266 0.8502206 0 0.6269302 0.7790753 0 0.6269293 0.7790763 0 0.7179107 0.6961353 0 0.7179101 0.6961358 0 0.7980227 0.6026275 0 0.7980232 0.6026268 0 0.8660186 0.5000119 0 0.8660196 0.5000104 0 0.9209063 0.3897843 0 0.9209066 0.3897835 0 0.9618286 0.2736529 0 0.9618285 0.2736529 0 0.9881637 0.1534037 0 0.9995262 0.0307812 0 0.9957355 -0.09225481 0 0.9957354 -0.09225583 0 0.9768463 -0.2139427 0 0.9768465 -0.2139416 0 0.9431542 -0.3323554 0 0.9431539 -0.3323564 0 0.8951631 -0.4457388 0 0.8336044 -0.552362 0 0.8336045 -0.552362 0 0.7594109 -0.6506115 0 0.7594099 -0.6506127 0 0.6736862 -0.7390175 0 0.6736868 -0.739017 0 0.5777676 -0.8162013 0 0.5777671 -0.8162017 0 0.4731075 -0.8810047 0 0.4731076 -0.8810047 0 0.3612293 -0.9324771 0 0.3612295 -0.932477 0 0.2439218 -0.969795 0 0.2439218 -0.9697949 0 0.1228806 -0.9924215 0 0.1228806 -0.9924215 0 0.03080433 -0.9995254 0 0 -0.9773941 -0.2114259 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0.05815446 0.9983076 0 -0.05815446 0.9983076 0 -0.1736349 0.9848102 0 -0.173635 0.9848102 0 -0.2868031 0.9579895 0 -0.3960813 0.9182155 0 -0.5000078 0.8660209 0 -0.5000085 0.8660205 0 -0.5971527 0.8021276 0 -0.597153 0.8021274 0 -0.686241 0.7273743 0 -0.7660434 0.642789 0 -0.766044 0.6427882 0 -0.8354862 0.5495116 0 -0.8936328 0.4487988 0 -0.893632 0.4488008 0 -0.9396961 0.3420109 0 -0.939696 0.3420109 0 -0.9730443 0.2306188 0 -0.9932379 0.1160973 0 -0.9932379 -0.1160973 0 -0.9730443 -0.2306188 0 -0.9396961 -0.3420109 0 -0.939696 -0.3420109 0 -0.893632 -0.4488008 0 -0.8936328 -0.4487988 0 -0.8354862 -0.5495116 0 -0.7660439 -0.6427882 0 -0.7660434 -0.6427889 0 -0.686241 -0.7273743 0 -0.597153 -0.8021274 0 -0.5971527 -0.8021277 0 -0.5000085 -0.8660205 0 -0.5000078 -0.8660209 0 -0.3960813 -0.9182155 0 -0.2868031 -0.9579895 0 -0.173635 -0.9848102 0 -0.1736349 -0.9848102 0 -0.05815446 -0.9983076 0 0.05815446 -0.9983076 0 0.1736349 -0.9848102 0 0.173635 -0.9848102 0 0.2868031 -0.9579895 0 0.3960813 -0.9182155 0 0.5000078 -0.8660209 0 0.5000085 -0.8660205 0 0.5971527 -0.8021276 0 0.597153 -0.8021274 0 0.686241 -0.7273743 0 0.7660434 -0.642789 0 0.766044 -0.6427882 0 0.8354862 -0.5495116 0 0.8936328 -0.4487988 0 0.893632 -0.4488008 0 0.9396961 -0.3420109 0 0.939696 -0.3420109 0 0.9730443 -0.2306188 0 0.9932379 -0.1160973 0 0.9932379 0.1160973 0 0.9730443 0.2306188 0 0.9396961 0.3420109 0 0.939696 0.3420109 0 0.893632 0.4488008 0 0.8936328 0.4487988 0 0.8354862 0.5495116 0 0.7660439 0.6427882 0 0.7660434 0.6427889 0 0.686241 0.7273743 0 0.597153 0.8021274 0 0.5971527 0.8021277 0 0.5000085 0.8660205 0 0.5000078 0.8660209 0 0.3960813 0.9182155 0 0.2868031 0.9579895 0 0.173635 0.9848102 0 0.1736349 0.9848102 0 + + + + + + + + + + + + + + + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +

0 0 1 0 2 0 2 1 1 1 3 1 2 1 3 1 4 1 4 2 3 2 5 2 4 3 5 3 6 3 6 4 5 4 7 4 6 4 7 4 8 4 8 5 7 5 9 5 8 5 9 5 10 5 10 6 9 6 11 6 10 7 11 7 12 7 12 8 11 8 13 8 12 9 13 9 14 9 14 10 13 10 15 10 14 11 15 11 16 11 16 12 15 12 17 12 16 13 17 13 18 13 18 14 17 14 19 14 18 15 19 15 20 15 20 16 19 16 21 16 20 17 21 17 22 17 22 18 21 18 23 18 22 19 23 19 24 19 24 20 23 20 25 20 24 21 25 21 26 21 26 22 25 22 27 22 26 23 27 23 28 23 28 24 27 24 29 24 28 25 29 25 30 25 30 26 29 26 31 26 30 27 31 27 32 27 32 28 31 28 33 28 32 28 33 28 34 28 34 29 33 29 35 29 34 30 35 30 36 30 36 31 35 31 37 31 36 31 37 31 38 31 38 32 37 32 39 32 38 33 39 33 40 33 40 34 39 34 41 34 40 35 41 35 42 35 42 36 41 36 43 36 42 37 43 37 44 37 44 38 43 38 45 38 44 39 45 39 46 39 46 40 45 40 47 40 46 41 47 41 48 41 48 42 47 42 49 42 48 43 49 43 50 43 50 44 49 44 51 44 50 45 51 45 52 45 52 46 51 46 53 46 52 47 53 47 54 47 54 48 53 48 55 48 54 48 55 48 56 48 56 49 55 49 57 49 56 49 57 49 58 49 58 50 57 50 59 50 58 50 59 50 60 50 60 51 59 51 61 51 60 51 61 51 62 51 62 52 61 52 63 52 62 52 63 52 64 52 64 53 63 53 65 53 64 53 65 53 66 53 66 54 65 54 67 54 66 54 67 54 68 54 68 55 67 55 69 55 68 56 69 56 70 56 70 57 69 57 71 57 70 58 71 58 72 58 72 59 71 59 73 59 72 60 73 60 74 60 74 61 73 61 75 61 74 62 75 62 76 62 76 63 75 63 77 63 76 64 77 64 78 64 78 65 77 65 79 65 78 66 79 66 80 66 80 67 79 67 81 67 80 68 81 68 82 68 82 69 81 69 83 69 82 70 83 70 84 70 84 71 83 71 85 71 84 71 85 71 86 71 86 72 85 72 87 72 86 73 87 73 88 73 88 74 87 74 89 74 88 74 89 74 90 74 90 75 89 75 91 75 90 76 91 76 92 76 92 77 91 77 93 77 92 78 93 78 94 78 94 79 93 79 95 79 94 80 95 80 96 80 96 81 95 81 97 81 96 82 97 82 98 82 98 83 97 83 99 83 98 84 99 84 100 84 100 85 99 85 101 85 100 86 101 86 102 86 102 87 101 87 103 87 102 88 103 88 104 88 104 89 103 89 105 89 104 90 105 90 106 90 106 91 105 91 107 91 106 92 107 92 108 92 108 93 107 93 109 93 108 94 109 94 110 94 110 95 109 95 111 95 110 96 111 96 112 96 112 97 111 97 113 97 112 97 113 97 114 97 114 98 113 98 115 98 114 99 115 99 116 99 116 100 115 100 117 100 116 101 117 101 0 101 0 0 117 0 1 0 118 102 29 102 119 102 119 103 29 103 27 103 119 104 27 104 120 104 120 103 27 103 25 103 120 105 25 105 121 105 121 103 25 103 23 103 121 106 23 106 122 106 122 103 23 103 21 103 122 107 21 107 123 107 123 103 21 103 19 103 123 108 19 108 124 108 124 103 19 103 17 103 124 103 17 103 125 103 125 103 17 103 15 103 125 109 15 109 126 109 126 110 15 110 13 110 126 111 13 111 127 111 127 103 13 103 11 103 127 112 11 112 128 112 128 113 11 113 9 113 128 114 9 114 129 114 129 103 9 103 7 103 129 103 7 103 130 103 130 115 7 115 5 115 130 103 5 103 131 103 131 103 5 103 3 103 131 103 3 103 132 103 132 116 3 116 133 116 132 103 133 103 134 103 134 117 133 117 117 117 134 103 117 103 135 103 135 103 117 103 115 103 135 103 115 103 136 103 136 103 115 103 113 103 136 103 113 103 137 103 137 103 113 103 111 103 137 103 111 103 138 103 138 103 111 103 109 103 138 103 109 103 139 103 139 103 109 103 107 103 139 118 107 118 140 118 140 103 107 103 105 103 140 103 105 103 141 103 141 103 105 103 103 103 141 119 103 119 142 119 142 120 103 120 101 120 142 121 101 121 143 121 143 122 101 122 99 122 143 103 99 103 144 103 144 123 99 123 97 123 144 124 97 124 145 124 145 125 97 125 95 125 145 103 95 103 146 103 146 126 95 126 93 126 146 127 93 127 147 127 93 103 91 103 147 103 147 128 91 128 89 128 147 129 89 129 148 129 148 130 89 130 87 130 148 131 87 131 149 131 149 103 87 103 85 103 149 103 85 103 150 103 150 103 85 103 83 103 150 103 83 103 151 103 151 132 83 132 81 132 151 103 81 103 152 103 152 103 81 103 79 103 152 133 79 133 153 133 153 103 79 103 77 103 153 134 77 134 154 134 154 103 77 103 75 103 154 135 75 135 155 135 155 103 75 103 73 103 155 136 73 136 156 136 156 103 73 103 71 103 156 137 71 137 157 137 157 138 71 138 69 138 157 139 69 139 158 139 158 103 69 103 67 103 158 140 67 140 159 140 159 103 67 103 65 103 159 141 65 141 160 141 160 142 65 142 63 142 160 103 63 103 161 103 161 143 63 143 61 143 161 103 61 103 162 103 162 103 61 103 59 103 162 103 59 103 163 103 163 144 59 144 57 144 163 103 57 103 164 103 164 145 57 145 55 145 164 103 55 103 165 103 165 103 55 103 53 103 165 103 53 103 166 103 166 146 53 146 51 146 166 147 51 147 167 147 167 148 51 148 49 148 167 103 49 103 168 103 168 103 49 103 47 103 168 103 47 103 169 103 169 103 47 103 45 103 169 103 45 103 170 103 170 149 45 149 43 149 170 103 43 103 171 103 171 103 43 103 41 103 171 103 41 103 172 103 172 150 41 150 39 150 172 103 39 103 173 103 173 103 39 103 37 103 173 151 37 151 174 151 174 152 37 152 35 152 174 153 35 153 175 153 175 154 35 154 33 154 175 103 33 103 118 103 118 155 33 155 31 155 118 156 31 156 29 156 176 157 177 157 178 157 178 158 177 158 134 158 178 158 134 158 179 158 179 159 134 159 135 159 179 160 135 160 180 160 180 161 135 161 136 161 180 162 136 162 181 162 181 163 136 163 137 163 181 164 137 164 182 164 182 165 137 165 138 165 182 166 138 166 183 166 183 167 138 167 139 167 183 168 139 168 184 168 184 169 139 169 140 169 184 170 140 170 185 170 185 171 140 171 141 171 185 172 141 172 186 172 186 173 141 173 142 173 186 173 142 173 187 173 187 174 142 174 143 174 187 174 143 174 188 174 188 175 143 175 144 175 188 176 144 176 189 176 189 177 144 177 145 177 189 178 145 178 190 178 190 179 145 179 146 179 190 180 146 180 191 180 191 181 146 181 147 181 191 182 147 182 192 182 192 183 147 183 148 183 192 184 148 184 193 184 193 185 148 185 149 185 193 186 149 186 194 186 194 187 149 187 150 187 194 188 150 188 195 188 195 189 150 189 151 189 195 190 151 190 196 190 196 191 151 191 152 191 196 191 152 191 197 191 197 192 152 192 153 192 197 193 153 193 198 193 198 194 153 194 154 194 198 194 154 194 199 194 199 195 154 195 155 195 199 196 155 196 200 196 200 197 155 197 156 197 200 198 156 198 201 198 201 199 156 199 157 199 201 200 157 200 202 200 202 201 157 201 158 201 202 202 158 202 203 202 203 203 158 203 159 203 203 204 159 204 204 204 204 205 159 205 160 205 204 206 160 206 205 206 205 207 160 207 161 207 205 208 161 208 206 208 206 209 161 209 162 209 206 209 162 209 207 209 207 210 162 210 163 210 207 211 163 211 208 211 208 212 163 212 164 212 208 213 164 213 209 213 209 214 164 214 165 214 209 215 165 215 210 215 210 216 165 216 166 216 210 217 166 217 211 217 211 218 166 218 167 218 211 219 167 219 212 219 212 220 167 220 168 220 212 221 168 221 213 221 213 222 168 222 169 222 213 223 169 223 214 223 214 224 169 224 170 224 214 224 170 224 215 224 215 225 170 225 171 225 215 226 171 226 216 226 216 227 171 227 172 227 216 227 172 227 217 227 217 228 172 228 173 228 217 229 173 229 218 229 218 230 173 230 174 230 218 231 174 231 219 231 219 232 174 232 175 232 219 233 175 233 220 233 220 234 175 234 118 234 220 235 118 235 221 235 221 236 118 236 119 236 221 237 119 237 222 237 222 238 119 238 120 238 222 239 120 239 223 239 223 240 120 240 121 240 223 241 121 241 224 241 224 242 121 242 122 242 224 243 122 243 225 243 225 244 122 244 123 244 225 244 123 244 226 244 226 245 123 245 124 245 226 245 124 245 227 245 227 246 124 246 125 246 227 247 125 247 228 247 228 248 125 248 126 248 228 249 126 249 229 249 229 250 126 250 127 250 229 251 127 251 230 251 230 252 127 252 128 252 230 253 128 253 231 253 231 254 128 254 129 254 231 255 129 255 232 255 232 256 129 256 130 256 232 257 130 257 233 257 233 258 130 258 131 258 233 259 131 259 176 259 176 157 131 157 177 157 220 260 221 260 234 260 203 103 204 103 235 103 236 103 192 103 237 103 237 261 192 261 193 261 237 262 193 262 238 262 238 263 193 263 239 263 236 103 240 103 192 103 192 103 240 103 241 103 192 103 241 103 191 103 191 264 241 264 242 264 243 265 185 265 186 265 232 103 244 103 231 103 231 266 244 266 245 266 231 267 245 267 230 267 230 268 245 268 229 268 243 269 186 269 246 269 185 270 243 270 184 270 184 271 243 271 247 271 184 103 247 103 183 103 183 103 247 103 182 103 182 272 247 272 248 272 182 273 248 273 181 273 181 274 248 274 180 274 180 275 248 275 249 275 180 103 249 103 179 103 232 103 233 103 244 103 244 276 233 276 176 276 244 103 176 103 249 103 249 277 176 277 178 277 249 278 178 278 179 278 216 103 217 103 250 103 250 279 217 279 218 279 250 103 218 103 234 103 234 103 218 103 219 103 234 280 219 280 220 280 242 103 251 103 191 103 191 281 251 281 252 281 191 103 252 103 190 103 252 103 253 103 190 103 190 282 253 282 254 282 190 103 254 103 189 103 189 283 254 283 255 283 189 284 255 284 188 284 188 285 255 285 246 285 188 286 246 286 187 286 187 103 246 103 186 103 229 103 245 103 228 103 228 287 245 287 256 287 228 103 256 103 227 103 227 103 256 103 226 103 226 288 256 288 257 288 226 103 257 103 225 103 221 103 222 103 234 103 234 103 222 103 223 103 234 289 223 289 257 289 257 290 223 290 224 290 257 291 224 291 225 291 216 103 250 103 215 103 215 292 250 292 258 292 215 103 258 103 214 103 259 103 260 103 199 103 194 103 195 103 261 103 262 103 206 103 263 103 263 103 206 103 207 103 235 103 204 103 262 103 262 293 204 293 205 293 262 103 205 103 206 103 199 103 200 103 259 103 259 294 200 294 201 294 259 103 201 103 235 103 235 295 201 295 202 295 235 296 202 296 203 296 207 103 208 103 263 103 263 297 208 297 209 297 263 103 209 103 264 103 264 298 209 298 210 298 210 103 211 103 264 103 264 299 211 299 212 299 264 300 212 300 258 300 258 301 212 301 213 301 258 302 213 302 214 302 261 303 195 303 265 303 265 304 195 304 196 304 265 103 196 103 266 103 266 305 196 305 197 305 266 306 197 306 260 306 260 307 197 307 198 307 260 308 198 308 199 308 261 309 267 309 194 309 194 310 267 310 268 310 194 311 268 311 193 311 193 103 268 103 269 103 193 312 269 312 239 312 270 313 246 313 271 313 271 314 246 314 255 314 271 315 255 315 272 315 272 316 255 316 254 316 272 317 254 317 273 317 273 318 254 318 253 318 273 319 253 319 274 319 274 320 253 320 252 320 274 321 252 321 275 321 275 322 252 322 251 322 275 323 251 323 276 323 276 324 251 324 242 324 276 325 242 325 277 325 277 326 242 326 241 326 277 327 241 327 278 327 278 328 241 328 240 328 278 329 240 329 279 329 279 330 240 330 236 330 279 331 236 331 280 331 280 332 236 332 237 332 280 333 237 333 281 333 281 334 237 334 238 334 281 335 238 335 282 335 282 336 238 336 239 336 282 337 239 337 283 337 283 338 239 338 269 338 283 339 269 339 284 339 284 340 269 340 268 340 284 341 268 341 285 341 285 342 268 342 267 342 285 343 267 343 286 343 286 344 267 344 261 344 286 345 261 345 287 345 287 346 261 346 265 346 287 347 265 347 288 347 288 348 265 348 266 348 288 349 266 349 289 349 289 350 266 350 260 350 289 351 260 351 290 351 290 352 260 352 259 352 290 353 259 353 291 353 291 354 259 354 235 354 291 355 235 355 292 355 292 356 235 356 262 356 292 357 262 357 293 357 293 358 262 358 263 358 293 359 263 359 294 359 294 360 263 360 264 360 294 360 264 360 295 360 295 361 264 361 258 361 295 362 258 362 296 362 296 363 258 363 250 363 296 364 250 364 297 364 297 365 250 365 234 365 297 366 234 366 298 366 298 367 234 367 257 367 298 368 257 368 299 368 299 369 257 369 256 369 299 370 256 370 300 370 300 371 256 371 245 371 300 372 245 372 301 372 301 373 245 373 244 373 301 373 244 373 302 373 302 374 244 374 249 374 302 375 249 375 303 375 303 376 249 376 248 376 303 377 248 377 304 377 304 378 248 378 247 378 304 379 247 379 305 379 305 380 247 380 243 380 305 381 243 381 270 381 270 382 243 382 246 382 300 383 301 383 283 383 283 384 301 384 282 384 303 103 304 103 277 103 278 103 279 103 301 103 279 103 280 103 301 103 301 385 280 385 281 385 301 386 281 386 282 386 284 103 295 103 283 103 283 103 295 103 296 103 283 103 296 103 297 103 278 103 301 103 277 103 277 103 301 103 302 103 277 387 302 387 303 387 290 103 291 103 292 103 297 103 298 103 283 103 283 388 298 388 299 388 283 389 299 389 300 389 305 103 275 103 304 103 304 103 275 103 276 103 304 103 276 103 277 103 284 390 285 390 295 390 295 391 285 391 286 391 295 392 286 392 287 392 287 103 288 103 295 103 295 393 288 393 289 393 295 103 289 103 294 103 290 394 292 394 289 394 289 395 292 395 293 395 289 396 293 396 294 396 305 397 270 397 275 397 275 398 270 398 271 398 275 399 271 399 274 399 274 400 271 400 272 400 274 103 272 103 273 103 306 401 110 401 307 401 307 401 110 401 112 401 307 401 112 401 308 401 308 402 112 402 114 402 308 403 114 403 309 403 309 401 114 401 116 401 309 401 116 401 310 401 310 404 116 404 0 404 310 405 0 405 311 405 311 401 0 401 2 401 311 401 2 401 312 401 312 406 2 406 4 406 312 401 4 401 313 401 313 407 4 407 6 407 313 408 6 408 314 408 314 401 6 401 8 401 314 401 8 401 315 401 315 409 8 409 10 409 315 410 10 410 316 410 316 411 10 411 12 411 316 401 12 401 317 401 317 412 12 412 14 412 317 401 14 401 318 401 318 401 14 401 16 401 318 401 16 401 319 401 319 401 16 401 18 401 319 401 18 401 320 401 320 413 18 413 20 413 320 401 20 401 321 401 321 401 20 401 22 401 321 401 22 401 322 401 322 414 22 414 24 414 322 401 24 401 323 401 323 401 24 401 26 401 323 401 26 401 324 401 324 401 26 401 28 401 324 401 28 401 325 401 325 401 28 401 30 401 325 415 30 415 326 415 326 401 30 401 32 401 326 401 32 401 327 401 327 401 32 401 34 401 327 401 34 401 328 401 328 416 34 416 36 416 328 417 36 417 329 417 329 401 36 401 38 401 329 401 38 401 330 401 330 418 38 418 40 418 330 401 40 401 331 401 331 401 40 401 42 401 331 401 42 401 332 401 332 401 42 401 44 401 332 401 44 401 333 401 333 401 44 401 46 401 333 401 46 401 334 401 334 401 46 401 48 401 334 401 48 401 335 401 335 401 48 401 50 401 335 419 50 419 336 419 336 420 50 420 52 420 336 421 52 421 337 421 337 401 52 401 54 401 337 401 54 401 338 401 338 401 54 401 56 401 338 401 56 401 339 401 339 401 56 401 58 401 339 422 58 422 340 422 340 401 58 401 60 401 340 401 60 401 341 401 341 401 60 401 62 401 341 401 62 401 342 401 342 401 62 401 64 401 342 401 64 401 343 401 343 401 64 401 66 401 343 401 66 401 344 401 344 401 66 401 68 401 344 423 68 423 345 423 345 401 68 401 70 401 345 401 70 401 346 401 346 401 70 401 72 401 346 424 72 424 347 424 347 420 72 420 74 420 347 425 74 425 348 425 348 426 74 426 76 426 348 401 76 401 349 401 349 401 76 401 78 401 349 401 78 401 350 401 350 401 78 401 80 401 350 401 80 401 351 401 351 401 80 401 82 401 351 427 82 427 352 427 352 401 82 401 84 401 352 401 84 401 353 401 353 428 84 428 86 428 353 429 86 429 354 429 354 401 86 401 88 401 354 401 88 401 355 401 355 401 88 401 90 401 355 401 90 401 356 401 356 430 90 430 92 430 356 401 92 401 357 401 357 401 92 401 94 401 357 401 94 401 358 401 358 401 94 401 96 401 358 431 96 431 359 431 359 432 96 432 98 432 359 433 98 433 360 433 360 401 98 401 100 401 360 401 100 401 361 401 361 401 100 401 102 401 361 401 102 401 362 401 362 401 102 401 104 401 362 401 104 401 363 401 363 401 104 401 106 401 363 401 106 401 364 401 364 401 106 401 108 401 364 401 108 401 306 401 306 434 108 434 110 434 365 435 366 435 367 435 367 436 366 436 312 436 367 436 312 436 368 436 368 437 312 437 313 437 368 438 313 438 369 438 369 439 313 439 314 439 369 439 314 439 370 439 370 440 314 440 315 440 370 441 315 441 371 441 371 442 315 442 316 442 371 443 316 443 372 443 372 444 316 444 317 444 372 445 317 445 373 445 373 446 317 446 318 446 373 447 318 447 374 447 374 448 318 448 319 448 374 448 319 448 375 448 375 449 319 449 320 449 375 450 320 450 376 450 376 451 320 451 321 451 376 452 321 452 377 452 377 453 321 453 322 453 377 454 322 454 378 454 378 455 322 455 323 455 378 456 323 456 379 456 379 457 323 457 324 457 379 458 324 458 380 458 380 459 324 459 325 459 380 459 325 459 381 459 381 460 325 460 326 460 381 461 326 461 382 461 382 462 326 462 327 462 382 463 327 463 383 463 383 464 327 464 328 464 383 465 328 465 384 465 384 466 328 466 329 466 384 467 329 467 385 467 385 468 329 468 330 468 385 469 330 469 386 469 386 470 330 470 331 470 386 471 331 471 387 471 387 472 331 472 332 472 387 472 332 472 388 472 388 473 332 473 333 473 388 473 333 473 389 473 389 474 333 474 334 474 389 475 334 475 390 475 390 476 334 476 335 476 390 477 335 477 391 477 391 478 335 478 336 478 391 479 336 479 392 479 392 480 336 480 337 480 392 480 337 480 393 480 393 481 337 481 338 481 393 482 338 482 394 482 394 483 338 483 339 483 394 484 339 484 395 484 395 485 339 485 340 485 395 486 340 486 396 486 396 51 340 51 341 51 396 51 341 51 397 51 397 487 341 487 342 487 397 488 342 488 398 488 398 489 342 489 343 489 398 490 343 490 399 490 399 491 343 491 344 491 399 492 344 492 400 492 400 493 344 493 345 493 400 493 345 493 401 493 401 494 345 494 346 494 401 495 346 495 402 495 402 496 346 496 347 496 402 497 347 497 403 497 403 498 347 498 348 498 403 499 348 499 404 499 404 500 348 500 349 500 404 500 349 500 405 500 405 501 349 501 350 501 405 501 350 501 406 501 406 502 350 502 351 502 406 503 351 503 407 503 407 504 351 504 352 504 407 505 352 505 408 505 408 506 352 506 353 506 408 507 353 507 409 507 409 508 353 508 354 508 409 509 354 509 410 509 410 510 354 510 355 510 410 511 355 511 411 511 411 512 355 512 356 512 411 513 356 513 412 513 412 514 356 514 357 514 412 514 357 514 413 514 413 515 357 515 358 515 413 516 358 516 414 516 414 517 358 517 359 517 414 518 359 518 415 518 415 519 359 519 360 519 415 520 360 520 416 520 416 521 360 521 361 521 416 522 361 522 417 522 417 523 361 523 362 523 417 524 362 524 418 524 418 525 362 525 363 525 418 525 363 525 419 525 419 526 363 526 364 526 419 527 364 527 420 527 420 528 364 528 306 528 420 529 306 529 421 529 421 530 306 530 307 530 421 531 307 531 422 531 422 532 307 532 308 532 422 533 308 533 423 533 423 534 308 534 309 534 423 534 309 534 424 534 424 535 309 535 310 535 424 536 310 536 365 536 365 435 310 435 366 435 369 103 425 103 368 103 368 103 425 103 426 103 368 537 426 537 367 537 372 538 427 538 371 538 371 103 427 103 428 103 371 103 428 103 370 103 370 103 428 103 429 103 370 103 429 103 369 103 369 103 429 103 430 103 369 103 430 103 425 103 374 539 431 539 373 539 373 103 431 103 432 103 373 103 432 103 372 103 372 103 432 103 433 103 372 103 433 103 427 103 386 540 434 540 385 540 385 541 434 541 435 541 385 103 435 103 384 103 401 542 436 542 400 542 400 103 436 103 437 103 400 543 437 543 399 543 406 103 438 103 405 103 405 103 438 103 439 103 405 103 439 103 404 103 381 544 440 544 380 544 380 545 440 545 441 545 380 546 441 546 379 546 435 547 442 547 384 547 384 103 442 103 443 103 384 548 443 548 383 548 383 103 443 103 444 103 383 549 444 549 382 549 382 103 444 103 445 103 382 550 445 550 381 550 381 103 445 103 446 103 381 551 446 551 440 551 389 103 447 103 388 103 388 103 447 103 448 103 388 103 448 103 387 103 387 103 448 103 449 103 387 552 449 552 386 552 386 103 449 103 450 103 386 103 450 103 434 103 396 103 451 103 395 103 395 103 451 103 452 103 395 103 452 103 394 103 408 553 453 553 407 553 407 103 453 103 454 103 407 554 454 554 406 554 406 103 454 103 455 103 406 103 455 103 438 103 377 103 456 103 376 103 376 103 456 103 457 103 376 555 457 555 375 555 375 103 457 103 458 103 375 103 458 103 374 103 374 103 458 103 459 103 374 103 459 103 431 103 391 103 460 103 390 103 390 103 460 103 461 103 390 103 461 103 389 103 389 556 461 556 462 556 389 103 462 103 447 103 439 557 463 557 404 557 404 558 463 558 464 558 404 559 464 559 403 559 403 103 464 103 465 103 403 103 465 103 402 103 402 103 465 103 466 103 402 560 466 560 401 560 401 561 466 561 467 561 401 562 467 562 436 562 413 563 468 563 412 563 412 564 468 564 469 564 412 565 469 565 411 565 423 103 470 103 422 103 422 103 470 103 471 103 422 566 471 566 421 566 441 103 472 103 379 103 379 103 472 103 473 103 379 103 473 103 378 103 378 567 473 567 474 567 378 568 474 568 377 568 377 103 474 103 475 103 377 103 475 103 456 103 437 569 476 569 399 569 399 103 476 103 477 103 399 570 477 570 398 570 398 103 477 103 478 103 398 571 478 571 397 571 397 103 478 103 479 103 397 103 479 103 396 103 396 103 479 103 480 103 396 103 480 103 451 103 416 572 481 572 415 572 415 573 481 573 482 573 415 103 482 103 414 103 414 103 482 103 483 103 414 103 483 103 413 103 413 574 483 574 484 574 413 575 484 575 468 575 418 103 485 103 417 103 417 103 485 103 486 103 417 103 486 103 416 103 416 103 486 103 487 103 416 103 487 103 481 103 426 103 488 103 367 103 367 576 488 576 489 576 367 577 489 577 365 577 365 103 489 103 490 103 365 103 490 103 424 103 424 103 490 103 491 103 424 578 491 578 423 578 423 579 491 579 492 579 423 103 492 103 470 103 452 103 493 103 394 103 394 580 493 580 494 580 394 581 494 581 393 581 393 103 494 103 495 103 393 103 495 103 392 103 392 582 495 582 496 582 392 103 496 103 391 103 391 583 496 583 497 583 391 103 497 103 460 103 469 584 498 584 411 584 411 103 498 103 499 103 411 585 499 585 410 585 410 103 499 103 500 103 410 586 500 586 409 586 409 103 500 103 501 103 409 103 501 103 408 103 408 103 501 103 502 103 408 587 502 587 453 587 471 588 503 588 421 588 421 103 503 103 504 103 421 103 504 103 420 103 420 103 504 103 505 103 420 103 505 103 419 103 419 103 505 103 506 103 419 103 506 103 418 103 418 103 506 103 507 103 418 103 507 103 485 103 508 589 509 589 510 589 508 590 511 590 509 590 509 591 511 591 512 591 509 592 512 592 513 592 512 593 514 593 513 593 513 594 514 594 515 594 513 595 515 595 516 595 515 596 517 596 516 596 516 597 517 597 518 597 516 598 518 598 519 598 518 599 520 599 519 599 519 600 520 600 521 600 519 601 521 601 522 601 521 602 523 602 522 602 522 603 523 603 524 603 522 604 524 604 525 604 524 605 526 605 525 605 525 606 526 606 527 606 525 607 527 607 528 607 527 608 529 608 528 608 528 609 529 609 530 609 528 610 530 610 531 610 530 611 532 611 531 611 531 612 532 612 533 612 531 613 533 613 534 613 533 614 535 614 534 614 534 615 535 615 536 615 534 616 536 616 537 616 536 617 538 617 537 617 537 618 538 618 539 618 537 619 539 619 540 619 539 620 541 620 540 620 540 621 541 621 542 621 540 622 542 622 543 622 542 623 544 623 543 623 543 624 544 624 545 624 543 625 545 625 546 625 545 626 547 626 546 626 546 627 547 627 548 627 546 628 548 628 549 628 548 629 550 629 549 629 549 630 550 630 551 630 549 631 551 631 552 631 551 632 553 632 552 632 552 633 553 633 554 633 552 634 554 634 555 634 554 635 556 635 555 635 555 636 556 636 557 636 555 637 557 637 558 637 557 638 559 638 558 638 558 639 559 639 560 639 558 640 560 640 561 640 560 641 562 641 561 641 561 642 562 642 563 642 561 643 563 643 564 643 563 644 565 644 564 644 564 645 565 645 566 645 564 646 566 646 567 646 566 647 568 647 567 647 567 648 568 648 569 648 567 649 569 649 570 649 569 650 571 650 570 650 570 651 571 651 572 651 570 652 572 652 573 652 572 653 574 653 573 653 573 654 574 654 575 654 573 655 575 655 576 655 575 656 577 656 576 656 576 657 577 657 578 657 576 658 578 658 579 658 578 659 580 659 579 659 579 660 580 660 581 660 579 661 581 661 582 661 581 662 583 662 582 662 582 663 583 663 584 663 582 664 584 664 585 664 584 665 586 665 585 665 585 666 586 666 587 666 585 667 587 667 588 667 587 668 589 668 588 668 588 669 589 669 590 669 588 670 590 670 591 670 590 671 592 671 591 671 591 672 592 672 593 672 591 673 593 673 594 673 593 674 595 674 594 674 594 675 595 675 596 675 594 676 596 676 597 676 596 677 598 677 597 677 597 678 598 678 599 678 597 679 599 679 600 679 599 680 601 680 600 680 600 681 601 681 602 681 600 682 602 682 603 682 602 683 604 683 603 683 603 684 604 684 605 684 603 685 605 685 606 685 605 686 607 686 606 686 606 687 607 687 608 687 606 688 608 688 609 688 608 689 610 689 609 689 609 690 610 690 611 690 609 691 611 691 612 691 611 692 613 692 612 692 612 693 613 693 614 693 612 694 614 694 615 694 614 695 616 695 615 695 615 696 616 696 617 696 615 697 617 697 618 697 617 698 619 698 618 698 618 699 619 699 620 699 618 700 620 700 621 700 620 701 622 701 621 701 621 702 622 702 623 702 621 703 623 703 624 703 625 704 626 704 627 704 627 705 626 705 624 705 627 706 624 706 628 706 628 707 624 707 623 707 625 708 629 708 626 708 626 709 629 709 630 709 626 710 630 710 631 710 630 711 632 711 631 711 631 712 632 712 633 712 631 713 633 713 634 713 633 714 635 714 634 714 634 715 635 715 636 715 634 716 636 716 637 716 636 717 638 717 637 717 637 718 638 718 639 718 637 719 639 719 640 719 639 720 641 720 640 720 640 721 641 721 642 721 640 722 642 722 643 722 642 723 644 723 643 723 643 724 644 724 645 724 643 725 645 725 646 725 645 726 647 726 646 726 646 727 647 727 648 727 646 728 648 728 649 728 648 729 650 729 649 729 649 730 650 730 651 730 649 731 651 731 652 731 651 732 653 732 652 732 652 733 653 733 654 733 652 734 654 734 655 734 654 735 656 735 655 735 655 736 656 736 657 736 655 737 657 737 658 737 657 738 659 738 658 738 658 739 659 739 660 739 658 740 660 740 661 740 660 741 662 741 661 741 661 742 662 742 663 742 661 743 663 743 664 743 663 744 665 744 664 744 664 745 665 745 666 745 664 746 666 746 667 746 666 747 668 747 667 747 667 748 668 748 669 748 667 749 669 749 670 749 669 750 671 750 670 750 670 751 671 751 672 751 670 752 672 752 673 752 672 753 674 753 673 753 673 754 674 754 675 754 673 755 675 755 676 755 675 756 677 756 676 756 676 757 677 757 678 757 676 758 678 758 679 758 678 759 680 759 679 759 679 760 680 760 681 760 679 761 681 761 682 761 681 762 683 762 682 762 682 763 683 763 684 763 682 764 684 764 685 764 684 765 686 765 685 765 685 766 686 766 687 766 685 767 687 767 688 767 687 768 689 768 688 768 688 769 689 769 690 769 688 770 690 770 691 770 690 771 692 771 691 771 691 772 692 772 693 772 691 773 693 773 694 773 693 774 695 774 694 774 694 775 695 775 696 775 694 776 696 776 697 776 696 777 698 777 697 777 697 778 698 778 699 778 697 779 699 779 700 779 699 780 701 780 700 780 700 781 701 781 702 781 700 782 702 782 703 782 702 783 704 783 703 783 703 784 704 784 705 784 703 785 705 785 706 785 705 786 707 786 706 786 706 787 707 787 708 787 706 788 708 788 709 788 708 789 710 789 709 789 709 790 710 790 711 790 709 791 711 791 712 791 711 792 713 792 712 792 712 793 713 793 714 793 712 794 714 794 715 794 714 795 716 795 715 795 715 796 716 796 717 796 715 797 717 797 718 797 717 798 719 798 718 798 718 799 719 799 720 799 718 800 720 800 721 800 720 801 722 801 721 801 721 802 722 802 723 802 721 803 723 803 724 803 723 804 725 804 724 804 724 805 725 805 726 805 724 806 726 806 727 806 726 807 728 807 727 807 727 808 728 808 729 808 727 809 729 809 730 809 729 810 731 810 730 810 730 811 731 811 732 811 730 812 732 812 733 812 732 813 734 813 733 813 733 814 734 814 735 814 733 815 735 815 736 815 735 816 737 816 736 816 736 817 737 817 738 817 736 818 738 818 739 818 738 819 740 819 739 819 739 820 740 820 741 820 739 821 741 821 742 821 741 822 743 822 742 822 742 823 743 823 744 823 742 824 744 824 745 824 744 825 746 825 745 825 745 826 746 826 747 826 745 827 747 827 748 827 747 828 749 828 748 828 748 829 749 829 750 829 748 830 750 830 510 830 510 831 750 831 751 831 510 832 751 832 508 832 748 833 752 833 745 833 745 834 752 834 753 834 745 835 753 835 742 835 742 836 753 836 754 836 742 837 754 837 739 837 739 838 754 838 755 838 739 839 755 839 736 839 736 840 755 840 756 840 736 841 756 841 733 841 733 842 756 842 757 842 733 843 757 843 730 843 730 844 757 844 758 844 730 845 758 845 727 845 727 846 758 846 759 846 727 847 759 847 724 847 724 848 759 848 760 848 724 849 760 849 721 849 721 850 760 850 761 850 721 851 761 851 718 851 718 852 761 852 762 852 718 853 762 853 715 853 715 854 762 854 763 854 715 855 763 855 712 855 712 856 763 856 764 856 712 857 764 857 709 857 709 858 764 858 765 858 709 859 765 859 706 859 706 860 765 860 766 860 706 861 766 861 703 861 703 862 766 862 767 862 703 863 767 863 700 863 700 864 767 864 768 864 700 865 768 865 697 865 697 866 768 866 769 866 697 867 769 867 694 867 694 868 769 868 770 868 694 869 770 869 691 869 691 870 770 870 771 870 691 871 771 871 688 871 688 872 771 872 772 872 688 873 772 873 685 873 685 874 772 874 773 874 685 875 773 875 682 875 682 876 773 876 774 876 682 877 774 877 679 877 679 878 774 878 775 878 679 879 775 879 676 879 676 880 775 880 776 880 676 881 776 881 673 881 673 882 776 882 777 882 673 883 777 883 670 883 670 884 777 884 778 884 670 885 778 885 667 885 667 886 778 886 779 886 667 887 779 887 664 887 664 888 779 888 780 888 664 889 780 889 661 889 661 890 780 890 781 890 661 891 781 891 658 891 658 892 781 892 782 892 658 893 782 893 655 893 655 894 782 894 783 894 655 895 783 895 652 895 652 896 783 896 784 896 652 897 784 897 649 897 649 898 784 898 785 898 649 899 785 899 646 899 646 900 785 900 786 900 646 901 786 901 643 901 643 902 786 902 787 902 643 903 787 903 640 903 640 904 787 904 788 904 640 905 788 905 637 905 637 906 788 906 789 906 637 907 789 907 634 907 634 908 789 908 790 908 634 909 790 909 631 909 631 910 790 910 791 910 631 911 791 911 626 911 626 912 791 912 792 912 626 913 792 913 624 913 624 914 792 914 793 914 624 915 793 915 621 915 621 916 793 916 794 916 621 917 794 917 618 917 618 918 794 918 795 918 618 919 795 919 615 919 615 920 795 920 796 920 615 921 796 921 612 921 612 922 796 922 797 922 612 923 797 923 609 923 609 924 797 924 798 924 609 925 798 925 606 925 606 926 798 926 799 926 606 927 799 927 603 927 603 928 799 928 800 928 603 929 800 929 600 929 600 930 800 930 801 930 600 931 801 931 597 931 597 932 801 932 802 932 597 933 802 933 594 933 594 934 802 934 803 934 594 935 803 935 591 935 591 936 803 936 804 936 591 937 804 937 588 937 588 938 804 938 805 938 588 939 805 939 585 939 585 940 805 940 806 940 585 941 806 941 582 941 582 942 806 942 807 942 582 943 807 943 579 943 579 944 807 944 808 944 579 945 808 945 576 945 576 946 808 946 809 946 576 947 809 947 573 947 573 948 809 948 810 948 573 949 810 949 570 949 570 950 810 950 811 950 570 951 811 951 567 951 567 952 811 952 812 952 567 953 812 953 564 953 564 954 812 954 813 954 564 955 813 955 561 955 561 956 813 956 814 956 561 957 814 957 558 957 558 958 814 958 815 958 558 959 815 959 555 959 555 960 815 960 816 960 555 961 816 961 552 961 552 962 816 962 817 962 552 963 817 963 549 963 549 964 817 964 818 964 549 965 818 965 546 965 546 966 818 966 819 966 546 967 819 967 543 967 543 968 819 968 820 968 543 969 820 969 540 969 540 970 820 970 821 970 540 971 821 971 537 971 537 972 821 972 822 972 537 973 822 973 534 973 534 974 822 974 823 974 534 975 823 975 531 975 531 976 823 976 824 976 531 977 824 977 528 977 528 978 824 978 825 978 528 979 825 979 525 979 525 980 825 980 826 980 525 981 826 981 522 981 522 982 826 982 827 982 522 983 827 983 519 983 519 984 827 984 828 984 519 985 828 985 516 985 516 986 828 986 829 986 516 987 829 987 513 987 513 988 829 988 830 988 513 989 830 989 509 989 509 990 830 990 831 990 509 991 831 991 510 991 510 992 831 992 832 992 510 993 832 993 748 993 748 994 832 994 752 994 752 995 833 995 753 995 753 996 833 996 834 996 753 997 834 997 754 997 754 998 834 998 835 998 754 999 835 999 755 999 755 1000 835 1000 836 1000 755 1001 836 1001 756 1001 756 1002 836 1002 837 1002 756 1003 837 1003 757 1003 757 1004 837 1004 838 1004 757 1005 838 1005 758 1005 758 1006 838 1006 839 1006 758 1007 839 1007 759 1007 759 1008 839 1008 840 1008 759 1009 840 1009 760 1009 760 1010 840 1010 841 1010 760 1011 841 1011 761 1011 761 1012 841 1012 842 1012 761 1013 842 1013 762 1013 762 1014 842 1014 843 1014 762 1015 843 1015 763 1015 763 1016 843 1016 844 1016 763 1017 844 1017 764 1017 764 1018 844 1018 845 1018 764 1019 845 1019 765 1019 765 1020 845 1020 846 1020 765 1021 846 1021 766 1021 766 1022 846 1022 847 1022 766 1023 847 1023 767 1023 767 1024 847 1024 848 1024 767 1025 848 1025 768 1025 768 1026 848 1026 849 1026 768 1027 849 1027 769 1027 769 1028 849 1028 850 1028 769 1029 850 1029 770 1029 770 1030 850 1030 851 1030 770 1031 851 1031 771 1031 771 1032 851 1032 852 1032 771 1033 852 1033 772 1033 772 1034 852 1034 853 1034 772 1035 853 1035 773 1035 773 1036 853 1036 854 1036 773 1037 854 1037 774 1037 774 1038 854 1038 855 1038 774 1039 855 1039 775 1039 775 1040 855 1040 856 1040 775 1041 856 1041 776 1041 776 1042 856 1042 857 1042 776 1043 857 1043 777 1043 777 1044 857 1044 858 1044 777 1045 858 1045 778 1045 778 1046 858 1046 859 1046 778 1047 859 1047 779 1047 779 1048 859 1048 860 1048 779 1049 860 1049 780 1049 780 1050 860 1050 861 1050 780 1051 861 1051 781 1051 781 1052 861 1052 862 1052 781 1053 862 1053 782 1053 782 1054 862 1054 863 1054 782 1055 863 1055 783 1055 783 1056 863 1056 864 1056 783 1057 864 1057 784 1057 784 1058 864 1058 865 1058 784 1059 865 1059 785 1059 785 1060 865 1060 866 1060 785 1061 866 1061 786 1061 786 1062 866 1062 867 1062 786 1063 867 1063 787 1063 787 1064 867 1064 868 1064 787 1065 868 1065 788 1065 788 1066 868 1066 869 1066 788 1067 869 1067 789 1067 789 1068 869 1068 870 1068 789 1069 870 1069 790 1069 790 1070 870 1070 871 1070 790 1071 871 1071 791 1071 791 1072 871 1072 872 1072 791 1073 872 1073 792 1073 792 1074 872 1074 873 1074 792 1075 873 1075 793 1075 793 1076 873 1076 874 1076 793 1077 874 1077 794 1077 794 1078 874 1078 875 1078 794 1079 875 1079 795 1079 795 1080 875 1080 876 1080 795 1081 876 1081 796 1081 796 1082 876 1082 877 1082 796 1083 877 1083 797 1083 797 1084 877 1084 878 1084 797 1085 878 1085 798 1085 798 1086 878 1086 879 1086 798 1087 879 1087 799 1087 799 1088 879 1088 880 1088 799 1089 880 1089 800 1089 800 1090 880 1090 881 1090 800 1091 881 1091 801 1091 801 1092 881 1092 882 1092 801 1093 882 1093 802 1093 802 1094 882 1094 883 1094 802 1095 883 1095 803 1095 803 1096 883 1096 884 1096 803 1097 884 1097 804 1097 804 1098 884 1098 885 1098 804 1099 885 1099 805 1099 805 1100 885 1100 886 1100 805 1101 886 1101 806 1101 806 1102 886 1102 887 1102 806 1103 887 1103 807 1103 807 1104 887 1104 888 1104 807 1105 888 1105 808 1105 808 1106 888 1106 889 1106 808 1107 889 1107 809 1107 809 1108 889 1108 890 1108 809 1109 890 1109 810 1109 810 1110 890 1110 891 1110 810 1111 891 1111 811 1111 811 1112 891 1112 892 1112 811 1113 892 1113 812 1113 812 1114 892 1114 893 1114 812 1115 893 1115 813 1115 813 1116 893 1116 894 1116 813 1117 894 1117 814 1117 814 1118 894 1118 895 1118 814 1119 895 1119 815 1119 815 1120 895 1120 896 1120 815 1121 896 1121 816 1121 816 1122 896 1122 897 1122 816 1123 897 1123 817 1123 817 1124 897 1124 898 1124 817 1125 898 1125 818 1125 818 1126 898 1126 899 1126 818 1127 899 1127 819 1127 819 1128 899 1128 900 1128 819 1129 900 1129 820 1129 820 1130 900 1130 901 1130 820 1131 901 1131 821 1131 821 1132 901 1132 902 1132 821 1133 902 1133 822 1133 822 1134 902 1134 903 1134 822 1135 903 1135 823 1135 823 1136 903 1136 904 1136 823 1137 904 1137 824 1137 824 1138 904 1138 905 1138 824 1139 905 1139 825 1139 825 1140 905 1140 906 1140 825 1141 906 1141 826 1141 826 1142 906 1142 907 1142 826 1143 907 1143 827 1143 827 1144 907 1144 908 1144 827 1145 908 1145 828 1145 828 1146 908 1146 909 1146 828 1147 909 1147 829 1147 829 1148 909 1148 910 1148 829 1149 910 1149 830 1149 830 1150 910 1150 911 1150 830 1151 911 1151 831 1151 831 1152 911 1152 912 1152 831 1153 912 1153 832 1153 832 1154 912 1154 913 1154 832 1155 913 1155 752 1155 752 1156 913 1156 833 1156 833 1157 914 1157 834 1157 834 1158 914 1158 915 1158 834 1159 915 1159 835 1159 835 1160 915 1160 916 1160 835 1161 916 1161 836 1161 836 1162 916 1162 917 1162 836 1163 917 1163 837 1163 837 1164 917 1164 918 1164 837 1165 918 1165 838 1165 838 1166 918 1166 919 1166 838 1167 919 1167 839 1167 839 1168 919 1168 920 1168 839 1169 920 1169 840 1169 840 1170 920 1170 921 1170 840 1171 921 1171 841 1171 841 1172 921 1172 922 1172 841 1173 922 1173 842 1173 842 1174 922 1174 923 1174 842 1175 923 1175 843 1175 843 1176 923 1176 924 1176 843 1177 924 1177 844 1177 844 1178 924 1178 925 1178 844 1179 925 1179 845 1179 845 1180 925 1180 926 1180 845 1181 926 1181 846 1181 846 1182 926 1182 927 1182 846 1183 927 1183 847 1183 847 1184 927 1184 928 1184 847 1185 928 1185 848 1185 848 1186 928 1186 929 1186 848 1187 929 1187 849 1187 849 1188 929 1188 930 1188 849 1189 930 1189 850 1189 850 1190 930 1190 931 1190 850 1191 931 1191 851 1191 851 1192 931 1192 932 1192 851 1193 932 1193 852 1193 852 1194 932 1194 933 1194 852 1195 933 1195 853 1195 853 1196 933 1196 934 1196 853 1197 934 1197 854 1197 854 1198 934 1198 935 1198 854 1199 935 1199 855 1199 855 1200 935 1200 936 1200 855 1201 936 1201 856 1201 856 1202 936 1202 937 1202 856 1203 937 1203 857 1203 857 1204 937 1204 938 1204 857 1205 938 1205 858 1205 858 1206 938 1206 939 1206 858 1207 939 1207 859 1207 859 1208 939 1208 940 1208 859 1209 940 1209 860 1209 860 1210 940 1210 941 1210 860 1211 941 1211 861 1211 861 1212 941 1212 942 1212 861 1213 942 1213 862 1213 862 1214 942 1214 943 1214 862 1215 943 1215 863 1215 863 1216 943 1216 944 1216 863 1217 944 1217 864 1217 864 1218 944 1218 945 1218 864 1219 945 1219 865 1219 865 1220 945 1220 946 1220 865 1221 946 1221 866 1221 866 1222 946 1222 947 1222 866 1223 947 1223 867 1223 867 1224 947 1224 948 1224 867 1225 948 1225 868 1225 868 1226 948 1226 949 1226 868 1227 949 1227 869 1227 869 1228 949 1228 950 1228 869 1229 950 1229 870 1229 870 1230 950 1230 951 1230 870 1231 951 1231 871 1231 871 1232 951 1232 952 1232 871 1233 952 1233 872 1233 872 1234 952 1234 953 1234 872 1235 953 1235 873 1235 873 1236 953 1236 954 1236 873 1237 954 1237 874 1237 874 1238 954 1238 955 1238 874 1239 955 1239 875 1239 875 1240 955 1240 956 1240 875 1241 956 1241 876 1241 876 1242 956 1242 957 1242 876 1243 957 1243 877 1243 877 1244 957 1244 958 1244 877 1245 958 1245 878 1245 878 1246 958 1246 959 1246 878 1247 959 1247 879 1247 879 1248 959 1248 960 1248 879 1249 960 1249 880 1249 880 1250 960 1250 961 1250 880 1251 961 1251 881 1251 881 1252 961 1252 962 1252 881 1253 962 1253 882 1253 882 1254 962 1254 963 1254 882 1255 963 1255 883 1255 883 1256 963 1256 964 1256 883 1257 964 1257 884 1257 884 1258 964 1258 965 1258 884 1259 965 1259 885 1259 885 1260 965 1260 966 1260 885 1261 966 1261 886 1261 886 1262 966 1262 967 1262 886 1263 967 1263 887 1263 887 1264 967 1264 968 1264 887 1265 968 1265 888 1265 888 1266 968 1266 969 1266 888 1267 969 1267 889 1267 889 1268 969 1268 970 1268 889 1269 970 1269 890 1269 890 1270 970 1270 971 1270 890 1271 971 1271 891 1271 891 1272 971 1272 972 1272 891 1273 972 1273 892 1273 892 1274 972 1274 973 1274 892 1275 973 1275 893 1275 893 1276 973 1276 974 1276 893 1277 974 1277 894 1277 894 1278 974 1278 975 1278 894 1279 975 1279 895 1279 895 1280 975 1280 976 1280 895 1281 976 1281 896 1281 896 1282 976 1282 977 1282 896 1283 977 1283 897 1283 897 1284 977 1284 978 1284 897 1285 978 1285 898 1285 898 1286 978 1286 979 1286 898 1287 979 1287 899 1287 899 1288 979 1288 980 1288 899 1289 980 1289 900 1289 900 1290 980 1290 981 1290 900 1291 981 1291 901 1291 901 1292 981 1292 982 1292 901 1293 982 1293 902 1293 902 1294 982 1294 983 1294 902 1295 983 1295 903 1295 903 1296 983 1296 984 1296 903 1297 984 1297 904 1297 904 1298 984 1298 985 1298 904 1299 985 1299 905 1299 905 1300 985 1300 986 1300 905 1301 986 1301 906 1301 906 1302 986 1302 987 1302 906 1303 987 1303 907 1303 907 1304 987 1304 988 1304 907 1305 988 1305 908 1305 908 1306 988 1306 989 1306 908 1307 989 1307 909 1307 909 1308 989 1308 990 1308 909 1309 990 1309 910 1309 910 1310 990 1310 991 1310 910 1311 991 1311 911 1311 911 1312 991 1312 992 1312 911 1313 992 1313 912 1313 912 1314 992 1314 993 1314 912 1315 993 1315 913 1315 913 1316 993 1316 994 1316 913 1317 994 1317 833 1317 833 1318 994 1318 914 1318 914 1319 995 1319 915 1319 915 1320 995 1320 996 1320 915 1321 996 1321 916 1321 916 1322 996 1322 997 1322 916 1323 997 1323 917 1323 917 1324 997 1324 998 1324 917 1325 998 1325 918 1325 918 1326 998 1326 999 1326 918 1327 999 1327 919 1327 919 1328 999 1328 1000 1328 919 1329 1000 1329 920 1329 920 1330 1000 1330 1001 1330 920 1331 1001 1331 921 1331 921 1332 1001 1332 1002 1332 921 1333 1002 1333 922 1333 922 1334 1002 1334 1003 1334 922 1335 1003 1335 923 1335 923 1336 1003 1336 1004 1336 923 1337 1004 1337 924 1337 924 1338 1004 1338 1005 1338 924 1339 1005 1339 925 1339 925 1340 1005 1340 1006 1340 925 1341 1006 1341 926 1341 926 1342 1006 1342 1007 1342 926 1343 1007 1343 927 1343 927 1344 1007 1344 1008 1344 927 1345 1008 1345 928 1345 928 1346 1008 1346 1009 1346 928 1347 1009 1347 929 1347 929 1348 1009 1348 1010 1348 929 1349 1010 1349 930 1349 930 1350 1010 1350 1011 1350 930 1351 1011 1351 931 1351 931 1352 1011 1352 1012 1352 931 1353 1012 1353 932 1353 932 1354 1012 1354 1013 1354 932 1355 1013 1355 933 1355 933 1356 1013 1356 1014 1356 933 1357 1014 1357 934 1357 934 1358 1014 1358 1015 1358 934 1359 1015 1359 935 1359 935 1360 1015 1360 1016 1360 935 1361 1016 1361 936 1361 936 1362 1016 1362 1017 1362 936 1363 1017 1363 937 1363 937 1364 1017 1364 1018 1364 937 1365 1018 1365 938 1365 938 1366 1018 1366 1019 1366 938 1367 1019 1367 939 1367 939 1368 1019 1368 1020 1368 939 1369 1020 1369 940 1369 940 1370 1020 1370 1021 1370 940 1371 1021 1371 941 1371 941 1372 1021 1372 1022 1372 941 1373 1022 1373 942 1373 942 1374 1022 1374 1023 1374 942 1375 1023 1375 943 1375 943 1376 1023 1376 1024 1376 943 1377 1024 1377 944 1377 944 1378 1024 1378 1025 1378 944 1379 1025 1379 945 1379 945 1380 1025 1380 1026 1380 945 1381 1026 1381 946 1381 946 1382 1026 1382 1027 1382 946 1383 1027 1383 947 1383 947 1384 1027 1384 1028 1384 947 1385 1028 1385 948 1385 948 1386 1028 1386 1029 1386 948 1387 1029 1387 949 1387 949 1388 1029 1388 1030 1388 949 1389 1030 1389 950 1389 950 1390 1030 1390 1031 1390 950 1391 1031 1391 951 1391 951 1392 1031 1392 1032 1392 951 1393 1032 1393 952 1393 952 1394 1032 1394 1033 1394 952 1395 1033 1395 953 1395 953 1396 1033 1396 1034 1396 953 1397 1034 1397 954 1397 954 1398 1034 1398 1035 1398 954 1399 1035 1399 955 1399 955 1400 1035 1400 1036 1400 955 1401 1036 1401 956 1401 956 1402 1036 1402 1037 1402 956 1403 1037 1403 957 1403 957 1404 1037 1404 1038 1404 957 1405 1038 1405 958 1405 958 1406 1038 1406 1039 1406 958 1407 1039 1407 959 1407 959 1408 1039 1408 1040 1408 959 1409 1040 1409 960 1409 960 1410 1040 1410 1041 1410 960 1411 1041 1411 961 1411 961 1412 1041 1412 1042 1412 961 1413 1042 1413 962 1413 962 1414 1042 1414 1043 1414 962 1415 1043 1415 963 1415 963 1416 1043 1416 1044 1416 963 1417 1044 1417 964 1417 964 1418 1044 1418 1045 1418 964 1419 1045 1419 965 1419 965 1420 1045 1420 1046 1420 965 1421 1046 1421 966 1421 966 1422 1046 1422 1047 1422 966 1423 1047 1423 967 1423 967 1424 1047 1424 1048 1424 967 1425 1048 1425 968 1425 968 1426 1048 1426 1049 1426 968 1427 1049 1427 969 1427 969 1428 1049 1428 1050 1428 969 1429 1050 1429 970 1429 970 1430 1050 1430 1051 1430 970 1431 1051 1431 971 1431 971 1432 1051 1432 1052 1432 971 1433 1052 1433 972 1433 972 1434 1052 1434 1053 1434 972 1435 1053 1435 973 1435 973 1436 1053 1436 1054 1436 973 1437 1054 1437 974 1437 974 1438 1054 1438 1055 1438 974 1439 1055 1439 975 1439 975 1440 1055 1440 1056 1440 975 1441 1056 1441 976 1441 976 1442 1056 1442 1057 1442 976 1443 1057 1443 977 1443 977 1444 1057 1444 1058 1444 977 1445 1058 1445 978 1445 978 1446 1058 1446 1059 1446 978 1447 1059 1447 979 1447 979 1448 1059 1448 1060 1448 979 1449 1060 1449 980 1449 980 1450 1060 1450 1061 1450 980 1451 1061 1451 981 1451 981 1452 1061 1452 1062 1452 981 1453 1062 1453 982 1453 982 1454 1062 1454 1063 1454 982 1455 1063 1455 983 1455 983 1456 1063 1456 1064 1456 983 1457 1064 1457 984 1457 984 1458 1064 1458 1065 1458 984 1459 1065 1459 985 1459 985 1460 1065 1460 1066 1460 985 1461 1066 1461 986 1461 986 1462 1066 1462 1067 1462 986 1463 1067 1463 987 1463 987 1464 1067 1464 1068 1464 987 1465 1068 1465 988 1465 988 1466 1068 1466 1069 1466 988 1467 1069 1467 989 1467 989 1468 1069 1468 1070 1468 989 1469 1070 1469 990 1469 990 1470 1070 1470 1071 1470 990 1471 1071 1471 991 1471 991 1472 1071 1472 1072 1472 991 1473 1072 1473 992 1473 992 1474 1072 1474 1073 1474 992 1475 1073 1475 993 1475 993 1476 1073 1476 1074 1476 993 1477 1074 1477 994 1477 994 1478 1074 1478 1075 1478 994 1479 1075 1479 914 1479 914 1480 1075 1480 995 1480 995 1481 1076 1481 996 1481 996 1482 1076 1482 1077 1482 996 1483 1077 1483 997 1483 997 1484 1077 1484 1078 1484 997 1485 1078 1485 998 1485 998 1486 1078 1486 1079 1486 998 1487 1079 1487 999 1487 999 1488 1079 1488 1080 1488 999 1489 1080 1489 1000 1489 1000 1490 1080 1490 1081 1490 1000 1491 1081 1491 1001 1491 1001 1492 1081 1492 1082 1492 1001 1493 1082 1493 1002 1493 1002 1494 1082 1494 1083 1494 1002 1495 1083 1495 1003 1495 1003 1496 1083 1496 1084 1496 1003 1497 1084 1497 1004 1497 1004 1498 1084 1498 1085 1498 1004 1499 1085 1499 1005 1499 1005 1500 1085 1500 1086 1500 1005 1501 1086 1501 1006 1501 1006 1502 1086 1502 1087 1502 1006 1503 1087 1503 1007 1503 1007 1504 1087 1504 1088 1504 1007 1505 1088 1505 1008 1505 1008 1506 1088 1506 1089 1506 1008 1507 1089 1507 1009 1507 1009 1508 1089 1508 1090 1508 1009 1509 1090 1509 1010 1509 1010 1510 1090 1510 1091 1510 1010 1511 1091 1511 1011 1511 1011 1512 1091 1512 1092 1512 1011 1513 1092 1513 1012 1513 1012 1514 1092 1514 1093 1514 1012 1515 1093 1515 1013 1515 1013 1516 1093 1516 1094 1516 1013 1517 1094 1517 1014 1517 1014 1518 1094 1518 1095 1518 1014 1519 1095 1519 1015 1519 1015 1520 1095 1520 1096 1520 1015 1521 1096 1521 1016 1521 1016 1522 1096 1522 1097 1522 1016 1523 1097 1523 1017 1523 1017 1524 1097 1524 1098 1524 1017 1525 1098 1525 1018 1525 1018 1526 1098 1526 1099 1526 1018 1527 1099 1527 1019 1527 1019 1528 1099 1528 1100 1528 1019 1529 1100 1529 1020 1529 1020 1530 1100 1530 1101 1530 1020 1531 1101 1531 1021 1531 1021 1532 1101 1532 1102 1532 1021 1533 1102 1533 1022 1533 1022 1534 1102 1534 1103 1534 1022 1535 1103 1535 1023 1535 1023 1536 1103 1536 1104 1536 1023 1537 1104 1537 1024 1537 1024 1538 1104 1538 1105 1538 1024 1539 1105 1539 1025 1539 1025 1540 1105 1540 1106 1540 1025 1541 1106 1541 1026 1541 1026 1542 1106 1542 1107 1542 1026 1543 1107 1543 1027 1543 1027 1544 1107 1544 1108 1544 1027 1545 1108 1545 1028 1545 1028 1546 1108 1546 1109 1546 1028 1547 1109 1547 1029 1547 1029 1548 1109 1548 1110 1548 1029 1549 1110 1549 1030 1549 1030 1550 1110 1550 1111 1550 1030 1551 1111 1551 1031 1551 1031 1552 1111 1552 1112 1552 1031 1553 1112 1553 1032 1553 1032 1554 1112 1554 1113 1554 1032 1555 1113 1555 1033 1555 1033 1556 1113 1556 1114 1556 1033 1557 1114 1557 1034 1557 1034 1558 1114 1558 1115 1558 1034 1559 1115 1559 1035 1559 1035 1560 1115 1560 1116 1560 1035 1561 1116 1561 1036 1561 1036 1562 1116 1562 1117 1562 1036 1563 1117 1563 1037 1563 1037 1564 1117 1564 1118 1564 1037 1565 1118 1565 1038 1565 1038 1566 1118 1566 1119 1566 1038 1567 1119 1567 1039 1567 1039 1568 1119 1568 1120 1568 1039 1569 1120 1569 1040 1569 1040 1570 1120 1570 1121 1570 1040 1571 1121 1571 1041 1571 1041 1572 1121 1572 1122 1572 1041 1573 1122 1573 1042 1573 1042 1574 1122 1574 1123 1574 1042 1575 1123 1575 1043 1575 1043 1576 1123 1576 1124 1576 1043 1577 1124 1577 1044 1577 1044 1578 1124 1578 1125 1578 1044 1579 1125 1579 1045 1579 1045 1580 1125 1580 1126 1580 1045 1581 1126 1581 1046 1581 1046 1582 1126 1582 1127 1582 1046 1583 1127 1583 1047 1583 1047 1584 1127 1584 1128 1584 1047 1585 1128 1585 1048 1585 1048 1586 1128 1586 1129 1586 1048 1587 1129 1587 1049 1587 1049 1588 1129 1588 1130 1588 1049 1589 1130 1589 1050 1589 1050 1590 1130 1590 1131 1590 1050 1591 1131 1591 1051 1591 1051 1592 1131 1592 1132 1592 1051 1593 1132 1593 1052 1593 1052 1594 1132 1594 1133 1594 1052 1595 1133 1595 1053 1595 1053 1596 1133 1596 1134 1596 1053 1597 1134 1597 1054 1597 1054 1598 1134 1598 1135 1598 1054 1599 1135 1599 1055 1599 1055 1600 1135 1600 1136 1600 1055 1601 1136 1601 1056 1601 1056 1602 1136 1602 1137 1602 1056 1603 1137 1603 1057 1603 1057 1604 1137 1604 1138 1604 1057 1605 1138 1605 1058 1605 1058 1606 1138 1606 1139 1606 1058 1607 1139 1607 1059 1607 1059 1608 1139 1608 1140 1608 1059 1609 1140 1609 1060 1609 1060 1610 1140 1610 1141 1610 1060 1611 1141 1611 1061 1611 1061 1612 1141 1612 1142 1612 1061 1613 1142 1613 1062 1613 1062 1614 1142 1614 1143 1614 1062 1615 1143 1615 1063 1615 1063 1616 1143 1616 1144 1616 1063 1617 1144 1617 1064 1617 1064 1618 1144 1618 1145 1618 1064 1619 1145 1619 1065 1619 1065 1620 1145 1620 1146 1620 1065 1621 1146 1621 1066 1621 1066 1622 1146 1622 1147 1622 1066 1623 1147 1623 1067 1623 1067 1624 1147 1624 1148 1624 1067 1625 1148 1625 1068 1625 1068 1626 1148 1626 1149 1626 1068 1627 1149 1627 1069 1627 1069 1628 1149 1628 1150 1628 1069 1629 1150 1629 1070 1629 1070 1630 1150 1630 1151 1630 1070 1631 1151 1631 1071 1631 1071 1632 1151 1632 1152 1632 1071 1633 1152 1633 1072 1633 1072 1634 1152 1634 1153 1634 1072 1635 1153 1635 1073 1635 1073 1636 1153 1636 1154 1636 1073 1637 1154 1637 1074 1637 1074 1638 1154 1638 1155 1638 1074 1639 1155 1639 1075 1639 1075 1640 1155 1640 1156 1640 1075 1641 1156 1641 995 1641 995 1642 1156 1642 1076 1642 1076 1643 1157 1643 1077 1643 1077 1644 1157 1644 1158 1644 1077 1645 1158 1645 1078 1645 1078 1646 1158 1646 1159 1646 1078 1647 1159 1647 1079 1647 1079 1648 1159 1648 1160 1648 1079 1649 1160 1649 1080 1649 1080 1650 1160 1650 1161 1650 1080 1651 1161 1651 1081 1651 1081 1652 1161 1652 1162 1652 1081 1653 1162 1653 1082 1653 1082 1654 1162 1654 1163 1654 1082 1655 1163 1655 1083 1655 1083 1656 1163 1656 1164 1656 1083 1657 1164 1657 1084 1657 1084 1658 1164 1658 1165 1658 1084 1659 1165 1659 1085 1659 1085 1660 1165 1660 1166 1660 1085 1661 1166 1661 1086 1661 1086 1662 1166 1662 1167 1662 1086 1663 1167 1663 1087 1663 1087 1664 1167 1664 1168 1664 1087 1665 1168 1665 1088 1665 1088 1666 1168 1666 1169 1666 1088 1667 1169 1667 1089 1667 1089 1668 1169 1668 1170 1668 1089 1669 1170 1669 1090 1669 1090 1670 1170 1670 1171 1670 1090 1671 1171 1671 1091 1671 1091 1672 1171 1672 1172 1672 1091 1673 1172 1673 1092 1673 1092 1674 1172 1674 1173 1674 1092 1675 1173 1675 1093 1675 1093 1676 1173 1676 1174 1676 1093 1677 1174 1677 1094 1677 1094 1678 1174 1678 1175 1678 1094 1679 1175 1679 1095 1679 1095 1680 1175 1680 1176 1680 1095 1681 1176 1681 1096 1681 1096 1682 1176 1682 1177 1682 1096 1683 1177 1683 1097 1683 1097 1684 1177 1684 1178 1684 1097 1685 1178 1685 1098 1685 1098 1686 1178 1686 1179 1686 1098 1687 1179 1687 1099 1687 1099 1688 1179 1688 1180 1688 1099 1689 1180 1689 1100 1689 1100 1690 1180 1690 1181 1690 1100 1691 1181 1691 1101 1691 1101 1692 1181 1692 1182 1692 1101 1693 1182 1693 1102 1693 1102 1694 1182 1694 1183 1694 1102 1695 1183 1695 1103 1695 1103 1696 1183 1696 1184 1696 1103 1697 1184 1697 1104 1697 1104 1698 1184 1698 1185 1698 1104 1699 1185 1699 1105 1699 1105 1700 1185 1700 1186 1700 1105 1701 1186 1701 1106 1701 1106 1702 1186 1702 1187 1702 1106 1703 1187 1703 1107 1703 1107 1704 1187 1704 1188 1704 1107 1705 1188 1705 1108 1705 1108 1706 1188 1706 1189 1706 1108 1707 1189 1707 1109 1707 1109 1708 1189 1708 1190 1708 1109 1709 1190 1709 1110 1709 1110 1710 1190 1710 1191 1710 1110 1711 1191 1711 1111 1711 1111 1712 1191 1712 1192 1712 1111 1713 1192 1713 1112 1713 1112 1714 1192 1714 1193 1714 1112 1715 1193 1715 1113 1715 1113 1716 1193 1716 1194 1716 1113 1717 1194 1717 1114 1717 1114 1718 1194 1718 1195 1718 1114 1719 1195 1719 1115 1719 1115 1720 1195 1720 1196 1720 1115 1721 1196 1721 1116 1721 1116 1722 1196 1722 1197 1722 1116 1723 1197 1723 1117 1723 1117 1724 1197 1724 1198 1724 1117 1725 1198 1725 1118 1725 1118 1726 1198 1726 1199 1726 1118 1727 1199 1727 1119 1727 1119 1728 1199 1728 1200 1728 1119 1729 1200 1729 1120 1729 1120 1730 1200 1730 1201 1730 1120 1731 1201 1731 1121 1731 1121 1732 1201 1732 1202 1732 1121 1733 1202 1733 1122 1733 1122 1734 1202 1734 1203 1734 1122 1735 1203 1735 1123 1735 1123 1736 1203 1736 1204 1736 1123 1737 1204 1737 1124 1737 1124 1738 1204 1738 1205 1738 1124 1739 1205 1739 1125 1739 1125 1740 1205 1740 1206 1740 1125 1741 1206 1741 1126 1741 1126 1742 1206 1742 1207 1742 1126 1743 1207 1743 1127 1743 1127 1744 1207 1744 1208 1744 1127 1745 1208 1745 1128 1745 1128 1746 1208 1746 1209 1746 1128 1747 1209 1747 1129 1747 1129 1748 1209 1748 1210 1748 1129 1749 1210 1749 1130 1749 1130 1750 1210 1750 1211 1750 1130 1751 1211 1751 1131 1751 1131 1752 1211 1752 1212 1752 1131 1753 1212 1753 1132 1753 1132 1754 1212 1754 1213 1754 1132 1755 1213 1755 1133 1755 1133 1756 1213 1756 1214 1756 1133 1757 1214 1757 1134 1757 1134 1758 1214 1758 1215 1758 1134 1759 1215 1759 1135 1759 1135 1760 1215 1760 1216 1760 1135 1761 1216 1761 1136 1761 1136 1762 1216 1762 1217 1762 1136 1763 1217 1763 1137 1763 1137 1764 1217 1764 1218 1764 1137 1765 1218 1765 1138 1765 1138 1766 1218 1766 1219 1766 1138 1767 1219 1767 1139 1767 1139 1768 1219 1768 1220 1768 1139 1769 1220 1769 1140 1769 1140 1770 1220 1770 1221 1770 1140 1771 1221 1771 1141 1771 1141 1772 1221 1772 1222 1772 1141 1773 1222 1773 1142 1773 1142 1774 1222 1774 1223 1774 1142 1775 1223 1775 1143 1775 1143 1776 1223 1776 1224 1776 1143 1777 1224 1777 1144 1777 1144 1778 1224 1778 1225 1778 1144 1779 1225 1779 1145 1779 1145 1780 1225 1780 1226 1780 1145 1781 1226 1781 1146 1781 1146 1782 1226 1782 1227 1782 1146 1783 1227 1783 1147 1783 1147 1784 1227 1784 1228 1784 1147 1785 1228 1785 1148 1785 1148 1786 1228 1786 1229 1786 1148 1787 1229 1787 1149 1787 1149 1788 1229 1788 1230 1788 1149 1789 1230 1789 1150 1789 1150 1790 1230 1790 1231 1790 1150 1791 1231 1791 1151 1791 1151 1792 1231 1792 1232 1792 1151 1793 1232 1793 1152 1793 1152 1794 1232 1794 1233 1794 1152 1795 1233 1795 1153 1795 1153 1796 1233 1796 1234 1796 1153 1797 1234 1797 1154 1797 1154 1798 1234 1798 1235 1798 1154 1799 1235 1799 1155 1799 1155 1800 1235 1800 1236 1800 1155 1801 1236 1801 1156 1801 1156 1802 1236 1802 1237 1802 1156 1803 1237 1803 1076 1803 1076 1804 1237 1804 1157 1804 689 1805 687 1805 1238 1805 686 1806 684 1806 1239 1806 683 1807 681 1807 1240 1807 680 1808 678 1808 1241 1808 677 1809 675 1809 1242 1809 674 1810 672 1810 1243 1810 671 1811 669 1811 1244 1811 668 1812 666 1812 1245 1812 665 1813 663 1813 1246 1813 662 1814 660 1814 1247 1814 659 1815 657 1815 1248 1815 656 1816 654 1816 1249 1816 653 1817 651 1817 1250 1817 650 1818 648 1818 1251 1818 647 1819 645 1819 1252 1819 644 1820 642 1820 1253 1820 641 1821 639 1821 1254 1821 638 1822 636 1822 1255 1822 635 1823 633 1823 1256 1823 632 1824 630 1824 1257 1824 568 1825 566 1825 1258 1825 565 1826 563 1826 1259 1826 562 1827 560 1827 1260 1827 559 1828 557 1828 1261 1828 556 1829 554 1829 1262 1829 553 1830 551 1830 1263 1830 550 1831 548 1831 1264 1831 547 1832 545 1832 1265 1832 544 1833 542 1833 1266 1833 541 1834 539 1834 1267 1834 538 1835 536 1835 1268 1835 535 1836 533 1836 1269 1836 532 1837 530 1837 1270 1837 529 1838 527 1838 1271 1838 526 1839 524 1839 1272 1839 523 1840 521 1840 1273 1840 520 1841 518 1841 1274 1841 517 1842 515 1842 1275 1842 514 1843 512 1843 1276 1843 511 1844 508 1844 1277 1844 489 1845 1278 1845 1279 1845 490 1846 489 1846 1280 1846 491 1847 490 1847 1281 1847 492 1848 491 1848 1282 1848 470 1849 492 1849 1283 1849 471 1850 470 1850 1284 1850 503 1851 471 1851 1285 1851 504 1852 503 1852 1286 1852 505 1853 504 1853 1287 1853 506 1854 505 1854 1288 1854 507 1855 506 1855 1289 1855 485 1856 507 1856 1290 1856 486 1857 485 1857 1291 1857 487 1858 486 1858 1292 1858 481 1859 487 1859 1293 1859 482 1860 481 1860 1294 1860 483 1861 482 1861 1295 1861 484 1862 483 1862 1296 1862 468 1863 484 1863 1297 1863 469 1864 468 1864 1298 1864 498 1865 469 1865 1299 1865 499 1866 498 1866 1300 1866 500 1867 499 1867 1301 1867 501 1868 500 1868 1302 1868 502 1869 501 1869 1303 1869 453 1870 502 1870 1304 1870 454 1871 453 1871 1305 1871 455 1872 454 1872 1306 1872 438 1873 455 1873 1307 1873 439 1874 438 1874 1308 1874 463 1875 439 1875 1309 1875 464 1876 463 1876 1310 1876 465 1877 464 1877 1311 1877 466 1878 465 1878 1312 1878 467 1879 466 1879 1313 1879 436 1880 467 1880 1314 1880 437 1881 436 1881 1315 1881 476 1882 437 1882 1316 1882 477 1883 476 1883 1317 1883 478 1884 477 1884 1318 1884 479 1885 478 1885 1319 1885 480 1886 479 1886 1320 1886 451 1887 480 1887 1321 1887 452 1888 451 1888 1322 1888 493 1889 452 1889 1323 1889 494 1890 493 1890 1324 1890 495 1891 494 1891 1325 1891 496 1892 495 1892 1326 1892 497 1893 496 1893 1327 1893 460 1894 497 1894 1328 1894 461 1895 460 1895 1329 1895 462 1896 461 1896 1330 1896 447 1897 462 1897 1331 1897 448 1898 447 1898 1332 1898 449 1899 448 1899 1333 1899 450 1900 449 1900 1334 1900 434 1901 450 1901 1335 1901 435 1902 434 1902 1336 1902 442 1903 435 1903 1337 1903 443 1904 442 1904 1338 1904 444 1905 443 1905 1339 1905 445 1906 444 1906 1340 1906 446 1907 445 1907 1341 1907 440 1908 446 1908 1342 1908 441 1909 440 1909 1343 1909 472 1910 441 1910 1344 1910 473 1911 472 1911 1345 1911 474 1912 473 1912 1346 1912 475 1913 474 1913 1347 1913 456 1914 475 1914 1348 1914 457 1915 456 1915 1349 1915 458 1916 457 1916 1350 1916 459 1917 458 1917 1351 1917 431 1918 459 1918 1352 1918 432 1919 431 1919 1353 1919 433 1920 432 1920 1354 1920 427 1921 433 1921 1355 1921 428 1922 427 1922 1356 1922 429 1923 428 1923 1357 1923 430 1924 429 1924 1358 1924 425 1925 430 1925 1359 1925 426 1926 425 1926 1360 1926 1278 1927 426 1927 1361 1927 1278 1928 1361 1928 1279 1928 1279 1929 1361 1929 1362 1929 1279 1930 1362 1930 1363 1930 1363 1931 1362 1931 1364 1931 1363 1932 1364 1932 1365 1932 1365 1933 1364 1933 1277 1933 1365 1934 1277 1934 1366 1934 1366 1935 1277 1935 508 1935 1366 1936 508 1936 751 1936 426 1937 1360 1937 1361 1937 1361 1938 1360 1938 1367 1938 1361 1939 1367 1939 1362 1939 1362 1940 1367 1940 1368 1940 1362 1941 1368 1941 1364 1941 1364 1942 1368 1942 1276 1942 1364 1943 1276 1943 1277 1943 1277 1944 1276 1944 512 1944 1277 1945 512 1945 511 1945 425 1946 1359 1946 1360 1946 1360 1947 1359 1947 1369 1947 1360 1948 1369 1948 1367 1948 1367 1949 1369 1949 1370 1949 1367 1950 1370 1950 1368 1950 1368 1951 1370 1951 1275 1951 1368 1952 1275 1952 1276 1952 1276 1953 1275 1953 515 1953 1276 1954 515 1954 514 1954 430 1955 1358 1955 1359 1955 1359 1956 1358 1956 1371 1956 1359 1957 1371 1957 1369 1957 1369 1958 1371 1958 1372 1958 1369 1959 1372 1959 1370 1959 1370 1960 1372 1960 1274 1960 1370 1961 1274 1961 1275 1961 1275 1962 1274 1962 518 1962 1275 1963 518 1963 517 1963 429 1964 1357 1964 1358 1964 1358 1965 1357 1965 1373 1965 1358 1966 1373 1966 1371 1966 1371 1967 1373 1967 1374 1967 1371 1968 1374 1968 1372 1968 1372 1969 1374 1969 1273 1969 1372 1970 1273 1970 1274 1970 1274 1971 1273 1971 521 1971 1274 1972 521 1972 520 1972 428 1973 1356 1973 1357 1973 1357 1974 1356 1974 1375 1974 1357 1975 1375 1975 1373 1975 1373 1976 1375 1976 1376 1976 1373 1977 1376 1977 1374 1977 1374 1978 1376 1978 1272 1978 1374 1979 1272 1979 1273 1979 1273 1980 1272 1980 524 1980 1273 1981 524 1981 523 1981 427 1982 1355 1982 1356 1982 1356 1983 1355 1983 1377 1983 1356 1984 1377 1984 1375 1984 1375 1985 1377 1985 1378 1985 1375 1986 1378 1986 1376 1986 1376 1987 1378 1987 1271 1987 1376 1988 1271 1988 1272 1988 1272 1989 1271 1989 527 1989 1272 1990 527 1990 526 1990 433 1991 1354 1991 1355 1991 1355 1992 1354 1992 1379 1992 1355 1993 1379 1993 1377 1993 1377 1994 1379 1994 1380 1994 1377 1995 1380 1995 1378 1995 1378 1996 1380 1996 1270 1996 1378 1997 1270 1997 1271 1997 1271 1998 1270 1998 530 1998 1271 1999 530 1999 529 1999 432 2000 1353 2000 1354 2000 1354 2001 1353 2001 1381 2001 1354 2002 1381 2002 1379 2002 1379 2003 1381 2003 1382 2003 1379 2004 1382 2004 1380 2004 1380 2005 1382 2005 1269 2005 1380 2006 1269 2006 1270 2006 1270 2007 1269 2007 533 2007 1270 2008 533 2008 532 2008 431 2009 1352 2009 1353 2009 1353 2010 1352 2010 1383 2010 1353 2011 1383 2011 1381 2011 1381 2012 1383 2012 1384 2012 1381 2013 1384 2013 1382 2013 1382 2014 1384 2014 1268 2014 1382 2015 1268 2015 1269 2015 1269 2016 1268 2016 536 2016 1269 2017 536 2017 535 2017 459 2018 1351 2018 1352 2018 1352 2019 1351 2019 1385 2019 1352 2020 1385 2020 1383 2020 1383 2021 1385 2021 1386 2021 1383 2022 1386 2022 1384 2022 1384 2023 1386 2023 1267 2023 1384 2024 1267 2024 1268 2024 1268 2025 1267 2025 539 2025 1268 2026 539 2026 538 2026 458 2027 1350 2027 1351 2027 1351 2028 1350 2028 1387 2028 1351 2029 1387 2029 1385 2029 1385 2030 1387 2030 1388 2030 1385 2031 1388 2031 1386 2031 1386 2032 1388 2032 1266 2032 1386 2033 1266 2033 1267 2033 1267 2034 1266 2034 542 2034 1267 2035 542 2035 541 2035 457 2036 1349 2036 1350 2036 1350 2037 1349 2037 1389 2037 1350 2038 1389 2038 1387 2038 1387 2039 1389 2039 1390 2039 1387 2040 1390 2040 1388 2040 1388 2041 1390 2041 1265 2041 1388 2042 1265 2042 1266 2042 1266 2043 1265 2043 545 2043 1266 2044 545 2044 544 2044 456 2045 1348 2045 1349 2045 1349 2046 1348 2046 1391 2046 1349 2047 1391 2047 1389 2047 1389 2048 1391 2048 1392 2048 1389 2049 1392 2049 1390 2049 1390 2050 1392 2050 1264 2050 1390 2051 1264 2051 1265 2051 1265 2052 1264 2052 548 2052 1265 2053 548 2053 547 2053 475 2054 1347 2054 1348 2054 1348 2055 1347 2055 1393 2055 1348 2056 1393 2056 1391 2056 1391 2057 1393 2057 1394 2057 1391 2058 1394 2058 1392 2058 1392 2059 1394 2059 1263 2059 1392 2060 1263 2060 1264 2060 1264 2061 1263 2061 551 2061 1264 2062 551 2062 550 2062 474 2063 1346 2063 1347 2063 1347 2064 1346 2064 1395 2064 1347 2065 1395 2065 1393 2065 1393 2066 1395 2066 1396 2066 1393 2067 1396 2067 1394 2067 1394 2068 1396 2068 1262 2068 1394 2069 1262 2069 1263 2069 1263 2070 1262 2070 554 2070 1263 2071 554 2071 553 2071 473 2072 1345 2072 1346 2072 1346 2073 1345 2073 1397 2073 1346 2074 1397 2074 1395 2074 1395 2075 1397 2075 1398 2075 1395 2076 1398 2076 1396 2076 1396 2077 1398 2077 1261 2077 1396 2078 1261 2078 1262 2078 1262 2079 1261 2079 557 2079 1262 2080 557 2080 556 2080 472 2081 1344 2081 1345 2081 1345 2082 1344 2082 1399 2082 1345 2083 1399 2083 1397 2083 1397 2084 1399 2084 1400 2084 1397 2085 1400 2085 1398 2085 1398 2086 1400 2086 1260 2086 1398 2087 1260 2087 1261 2087 1261 2088 1260 2088 560 2088 1261 2089 560 2089 559 2089 441 2090 1343 2090 1344 2090 1344 2091 1343 2091 1401 2091 1344 2092 1401 2092 1399 2092 1399 2093 1401 2093 1402 2093 1399 2094 1402 2094 1400 2094 1400 2095 1402 2095 1259 2095 1400 2096 1259 2096 1260 2096 1260 2097 1259 2097 563 2097 1260 2098 563 2098 562 2098 440 2099 1342 2099 1343 2099 1343 2100 1342 2100 1403 2100 1343 2101 1403 2101 1401 2101 1401 2102 1403 2102 1404 2102 1401 2103 1404 2103 1402 2103 1402 2104 1404 2104 1258 2104 1402 2105 1258 2105 1259 2105 1259 2106 1258 2106 566 2106 1259 2107 566 2107 565 2107 446 2108 1341 2108 1342 2108 1342 2109 1341 2109 1405 2109 1342 2110 1405 2110 1403 2110 1403 2111 1405 2111 1406 2111 1403 2112 1406 2112 1404 2112 1404 2113 1406 2113 1407 2113 1404 2114 1407 2114 1258 2114 1258 2115 1407 2115 569 2115 1258 2116 569 2116 568 2116 1408 2117 572 2117 571 2117 445 2118 1340 2118 1341 2118 1341 2119 1340 2119 1409 2119 1341 2120 1409 2120 1405 2120 1405 2121 1409 2121 1410 2121 1405 2122 1410 2122 1406 2122 1406 2123 1410 2123 1408 2123 1406 2124 1408 2124 1407 2124 1407 2125 1408 2125 571 2125 1407 2126 571 2126 569 2126 1411 2127 575 2127 574 2127 444 2128 1339 2128 1340 2128 1340 2129 1339 2129 1412 2129 1340 2130 1412 2130 1409 2130 1409 2131 1412 2131 1413 2131 1409 2132 1413 2132 1410 2132 1410 2133 1413 2133 1411 2133 1410 2134 1411 2134 1408 2134 1408 2135 1411 2135 574 2135 1408 2136 574 2136 572 2136 1414 2137 578 2137 577 2137 443 2138 1338 2138 1339 2138 1339 2139 1338 2139 1415 2139 1339 2140 1415 2140 1412 2140 1412 2141 1415 2141 1416 2141 1412 2142 1416 2142 1413 2142 1413 2143 1416 2143 1414 2143 1413 2144 1414 2144 1411 2144 1411 2145 1414 2145 577 2145 1411 2146 577 2146 575 2146 1417 2147 581 2147 580 2147 442 2148 1337 2148 1338 2148 1338 2149 1337 2149 1418 2149 1338 2150 1418 2150 1415 2150 1415 2151 1418 2151 1419 2151 1415 2152 1419 2152 1416 2152 1416 2153 1419 2153 1417 2153 1416 2154 1417 2154 1414 2154 1414 2155 1417 2155 580 2155 1414 2156 580 2156 578 2156 1420 2157 584 2157 583 2157 435 2158 1336 2158 1337 2158 1337 2159 1336 2159 1421 2159 1337 2160 1421 2160 1418 2160 1418 2161 1421 2161 1422 2161 1418 2162 1422 2162 1419 2162 1419 2163 1422 2163 1420 2163 1419 2164 1420 2164 1417 2164 1417 2165 1420 2165 583 2165 1417 2166 583 2166 581 2166 1423 2167 587 2167 586 2167 434 2168 1335 2168 1336 2168 1336 2169 1335 2169 1424 2169 1336 2170 1424 2170 1421 2170 1421 2171 1424 2171 1425 2171 1421 2172 1425 2172 1422 2172 1422 2173 1425 2173 1423 2173 1422 2174 1423 2174 1420 2174 1420 2175 1423 2175 586 2175 1420 2176 586 2176 584 2176 1426 2177 590 2177 589 2177 450 2178 1334 2178 1335 2178 1335 2179 1334 2179 1427 2179 1335 2180 1427 2180 1424 2180 1424 2181 1427 2181 1428 2181 1424 2182 1428 2182 1425 2182 1425 2183 1428 2183 1426 2183 1425 2184 1426 2184 1423 2184 1423 2185 1426 2185 589 2185 1423 2186 589 2186 587 2186 1429 2187 593 2187 592 2187 449 2188 1333 2188 1334 2188 1334 2189 1333 2189 1430 2189 1334 2190 1430 2190 1427 2190 1427 2191 1430 2191 1431 2191 1427 2192 1431 2192 1428 2192 1428 2193 1431 2193 1429 2193 1428 2194 1429 2194 1426 2194 1426 2195 1429 2195 592 2195 1426 2196 592 2196 590 2196 1432 2197 596 2197 595 2197 448 2198 1332 2198 1333 2198 1333 2199 1332 2199 1433 2199 1333 2200 1433 2200 1430 2200 1430 2201 1433 2201 1434 2201 1430 2202 1434 2202 1431 2202 1431 2203 1434 2203 1432 2203 1431 2204 1432 2204 1429 2204 1429 2205 1432 2205 595 2205 1429 2206 595 2206 593 2206 1435 2207 599 2207 598 2207 447 2208 1331 2208 1332 2208 1332 2209 1331 2209 1436 2209 1332 2210 1436 2210 1433 2210 1433 2211 1436 2211 1437 2211 1433 2212 1437 2212 1434 2212 1434 2213 1437 2213 1435 2213 1434 2214 1435 2214 1432 2214 1432 2215 1435 2215 598 2215 1432 2216 598 2216 596 2216 1438 2217 602 2217 601 2217 462 2218 1330 2218 1331 2218 1331 2219 1330 2219 1439 2219 1331 2220 1439 2220 1436 2220 1436 2221 1439 2221 1440 2221 1436 2222 1440 2222 1437 2222 1437 2223 1440 2223 1438 2223 1437 2224 1438 2224 1435 2224 1435 2225 1438 2225 601 2225 1435 2226 601 2226 599 2226 1441 2227 605 2227 604 2227 461 2228 1329 2228 1330 2228 1330 2229 1329 2229 1442 2229 1330 2230 1442 2230 1439 2230 1439 2231 1442 2231 1443 2231 1439 2232 1443 2232 1440 2232 1440 2233 1443 2233 1441 2233 1440 2234 1441 2234 1438 2234 1438 2235 1441 2235 604 2235 1438 2236 604 2236 602 2236 1444 2237 608 2237 607 2237 460 2238 1328 2238 1329 2238 1329 2239 1328 2239 1445 2239 1329 2240 1445 2240 1442 2240 1442 2241 1445 2241 1446 2241 1442 2242 1446 2242 1443 2242 1443 2243 1446 2243 1444 2243 1443 2244 1444 2244 1441 2244 1441 2245 1444 2245 607 2245 1441 2246 607 2246 605 2246 1447 2247 611 2247 610 2247 497 2248 1327 2248 1328 2248 1328 2249 1327 2249 1448 2249 1328 2250 1448 2250 1445 2250 1445 2251 1448 2251 1449 2251 1445 2252 1449 2252 1446 2252 1446 2253 1449 2253 1447 2253 1446 2254 1447 2254 1444 2254 1444 2255 1447 2255 610 2255 1444 2256 610 2256 608 2256 1450 2257 614 2257 613 2257 496 2258 1326 2258 1327 2258 1327 2259 1326 2259 1451 2259 1327 2260 1451 2260 1448 2260 1448 2261 1451 2261 1452 2261 1448 2262 1452 2262 1449 2262 1449 2263 1452 2263 1450 2263 1449 2264 1450 2264 1447 2264 1447 2265 1450 2265 613 2265 1447 2266 613 2266 611 2266 1453 2267 617 2267 616 2267 495 2268 1325 2268 1326 2268 1326 2269 1325 2269 1454 2269 1326 2270 1454 2270 1451 2270 1451 2271 1454 2271 1455 2271 1451 2272 1455 2272 1452 2272 1452 2273 1455 2273 1453 2273 1452 2274 1453 2274 1450 2274 1450 2275 1453 2275 616 2275 1450 2276 616 2276 614 2276 1456 2277 620 2277 619 2277 494 2278 1324 2278 1325 2278 1325 2279 1324 2279 1457 2279 1325 2280 1457 2280 1454 2280 1454 2281 1457 2281 1458 2281 1454 2282 1458 2282 1455 2282 1455 2283 1458 2283 1456 2283 1455 2284 1456 2284 1453 2284 1453 2285 1456 2285 619 2285 1453 2286 619 2286 617 2286 1459 2287 623 2287 622 2287 493 2288 1323 2288 1324 2288 1324 2289 1323 2289 1460 2289 1324 2290 1460 2290 1457 2290 1457 2291 1460 2291 1461 2291 1457 2292 1461 2292 1458 2292 1458 2293 1461 2293 1459 2293 1458 2294 1459 2294 1456 2294 1456 2295 1459 2295 622 2295 1456 2296 622 2296 620 2296 1462 2297 627 2297 628 2297 452 2298 1322 2298 1323 2298 1323 2299 1322 2299 1463 2299 1323 2300 1463 2300 1460 2300 1460 2301 1463 2301 1464 2301 1460 2302 1464 2302 1461 2302 1461 2303 1464 2303 1462 2303 1461 2304 1462 2304 1459 2304 1459 2305 1462 2305 628 2305 1459 2306 628 2306 623 2306 1465 1824 629 1824 625 1824 451 2307 1321 2307 1322 2307 1322 2308 1321 2308 1466 2308 1322 2309 1466 2309 1463 2309 1463 2310 1466 2310 1467 2310 1463 2311 1467 2311 1464 2311 1464 2312 1467 2312 1465 2312 1464 2313 1465 2313 1462 2313 1462 2314 1465 2314 625 2314 1462 2315 625 2315 627 2315 480 2316 1320 2316 1321 2316 1321 2317 1320 2317 1468 2317 1321 2318 1468 2318 1466 2318 1466 2319 1468 2319 1469 2319 1466 2320 1469 2320 1467 2320 1467 2321 1469 2321 1257 2321 1467 2322 1257 2322 1465 2322 1465 2323 1257 2323 630 2323 1465 2324 630 2324 629 2324 479 2325 1319 2325 1320 2325 1320 2326 1319 2326 1470 2326 1320 2327 1470 2327 1468 2327 1468 2328 1470 2328 1471 2328 1468 2329 1471 2329 1469 2329 1469 2330 1471 2330 1256 2330 1469 2331 1256 2331 1257 2331 1257 2332 1256 2332 633 2332 1257 2333 633 2333 632 2333 478 2334 1318 2334 1319 2334 1319 2335 1318 2335 1472 2335 1319 2336 1472 2336 1470 2336 1470 2337 1472 2337 1473 2337 1470 2338 1473 2338 1471 2338 1471 2339 1473 2339 1255 2339 1471 2340 1255 2340 1256 2340 1256 2341 1255 2341 636 2341 1256 2342 636 2342 635 2342 477 2343 1317 2343 1318 2343 1318 2344 1317 2344 1474 2344 1318 2345 1474 2345 1472 2345 1472 2346 1474 2346 1475 2346 1472 2347 1475 2347 1473 2347 1473 2348 1475 2348 1254 2348 1473 2349 1254 2349 1255 2349 1255 2350 1254 2350 639 2350 1255 2351 639 2351 638 2351 476 2352 1316 2352 1317 2352 1317 2353 1316 2353 1476 2353 1317 2354 1476 2354 1474 2354 1474 2355 1476 2355 1477 2355 1474 2356 1477 2356 1475 2356 1475 2357 1477 2357 1253 2357 1475 2358 1253 2358 1254 2358 1254 2359 1253 2359 642 2359 1254 2360 642 2360 641 2360 437 2361 1315 2361 1316 2361 1316 2362 1315 2362 1478 2362 1316 2363 1478 2363 1476 2363 1476 2364 1478 2364 1479 2364 1476 2365 1479 2365 1477 2365 1477 2366 1479 2366 1252 2366 1477 2367 1252 2367 1253 2367 1253 2368 1252 2368 645 2368 1253 2369 645 2369 644 2369 436 2370 1314 2370 1315 2370 1315 2371 1314 2371 1480 2371 1315 2372 1480 2372 1478 2372 1478 2373 1480 2373 1481 2373 1478 2374 1481 2374 1479 2374 1479 2375 1481 2375 1251 2375 1479 2376 1251 2376 1252 2376 1252 2377 1251 2377 648 2377 1252 2378 648 2378 647 2378 467 2379 1313 2379 1314 2379 1314 2380 1313 2380 1482 2380 1314 2381 1482 2381 1480 2381 1480 2382 1482 2382 1483 2382 1480 2383 1483 2383 1481 2383 1481 2384 1483 2384 1250 2384 1481 2385 1250 2385 1251 2385 1251 2386 1250 2386 651 2386 1251 2387 651 2387 650 2387 466 2388 1312 2388 1313 2388 1313 2389 1312 2389 1484 2389 1313 2390 1484 2390 1482 2390 1482 2391 1484 2391 1485 2391 1482 2392 1485 2392 1483 2392 1483 2393 1485 2393 1249 2393 1483 2394 1249 2394 1250 2394 1250 2395 1249 2395 654 2395 1250 2396 654 2396 653 2396 465 2397 1311 2397 1312 2397 1312 2398 1311 2398 1486 2398 1312 2399 1486 2399 1484 2399 1484 2400 1486 2400 1487 2400 1484 2401 1487 2401 1485 2401 1485 2402 1487 2402 1248 2402 1485 2403 1248 2403 1249 2403 1249 2404 1248 2404 657 2404 1249 2405 657 2405 656 2405 464 2406 1310 2406 1311 2406 1311 2407 1310 2407 1488 2407 1311 2408 1488 2408 1486 2408 1486 2409 1488 2409 1489 2409 1486 2410 1489 2410 1487 2410 1487 2411 1489 2411 1247 2411 1487 2412 1247 2412 1248 2412 1248 2413 1247 2413 660 2413 1248 2414 660 2414 659 2414 463 2415 1309 2415 1310 2415 1310 2416 1309 2416 1490 2416 1310 2417 1490 2417 1488 2417 1488 2418 1490 2418 1491 2418 1488 2419 1491 2419 1489 2419 1489 2420 1491 2420 1246 2420 1489 2421 1246 2421 1247 2421 1247 2422 1246 2422 663 2422 1247 2423 663 2423 662 2423 439 2424 1308 2424 1309 2424 1309 2425 1308 2425 1492 2425 1309 2426 1492 2426 1490 2426 1490 2427 1492 2427 1493 2427 1490 2428 1493 2428 1491 2428 1491 2429 1493 2429 1245 2429 1491 2430 1245 2430 1246 2430 1246 2431 1245 2431 666 2431 1246 2432 666 2432 665 2432 438 2433 1307 2433 1308 2433 1308 2434 1307 2434 1494 2434 1308 2435 1494 2435 1492 2435 1492 2436 1494 2436 1495 2436 1492 2437 1495 2437 1493 2437 1493 2438 1495 2438 1244 2438 1493 2439 1244 2439 1245 2439 1245 2440 1244 2440 669 2440 1245 2441 669 2441 668 2441 455 2442 1306 2442 1307 2442 1307 2443 1306 2443 1496 2443 1307 2444 1496 2444 1494 2444 1494 2445 1496 2445 1497 2445 1494 2446 1497 2446 1495 2446 1495 2447 1497 2447 1243 2447 1495 2448 1243 2448 1244 2448 1244 2449 1243 2449 672 2449 1244 2450 672 2450 671 2450 454 2451 1305 2451 1306 2451 1306 2452 1305 2452 1498 2452 1306 2453 1498 2453 1496 2453 1496 2454 1498 2454 1499 2454 1496 2455 1499 2455 1497 2455 1497 2456 1499 2456 1242 2456 1497 2457 1242 2457 1243 2457 1243 2458 1242 2458 675 2458 1243 2459 675 2459 674 2459 453 2460 1304 2460 1305 2460 1305 2461 1304 2461 1500 2461 1305 2462 1500 2462 1498 2462 1498 2463 1500 2463 1501 2463 1498 2464 1501 2464 1499 2464 1499 2465 1501 2465 1241 2465 1499 2466 1241 2466 1242 2466 1242 2467 1241 2467 678 2467 1242 2468 678 2468 677 2468 502 2469 1303 2469 1304 2469 1304 2470 1303 2470 1502 2470 1304 2471 1502 2471 1500 2471 1500 2472 1502 2472 1503 2472 1500 2473 1503 2473 1501 2473 1501 2474 1503 2474 1240 2474 1501 2475 1240 2475 1241 2475 1241 2476 1240 2476 681 2476 1241 2477 681 2477 680 2477 501 2478 1302 2478 1303 2478 1303 2479 1302 2479 1504 2479 1303 2480 1504 2480 1502 2480 1502 2481 1504 2481 1505 2481 1502 2482 1505 2482 1503 2482 1503 2483 1505 2483 1239 2483 1503 2484 1239 2484 1240 2484 1240 2485 1239 2485 684 2485 1240 2486 684 2486 683 2486 500 2487 1301 2487 1302 2487 1302 2488 1301 2488 1506 2488 1302 2489 1506 2489 1504 2489 1504 2490 1506 2490 1507 2490 1504 2491 1507 2491 1505 2491 1505 2492 1507 2492 1238 2492 1505 2493 1238 2493 1239 2493 1239 2494 1238 2494 687 2494 1239 2495 687 2495 686 2495 499 2496 1300 2496 1301 2496 1301 2497 1300 2497 1508 2497 1301 2498 1508 2498 1506 2498 1506 2499 1508 2499 1509 2499 1506 2500 1509 2500 1507 2500 1507 2501 1509 2501 1510 2501 1507 2502 1510 2502 1238 2502 1238 2503 1510 2503 690 2503 1238 2504 690 2504 689 2504 1511 2505 693 2505 692 2505 498 2506 1299 2506 1300 2506 1300 2507 1299 2507 1512 2507 1300 2508 1512 2508 1508 2508 1508 2509 1512 2509 1513 2509 1508 2510 1513 2510 1509 2510 1509 2511 1513 2511 1511 2511 1509 2512 1511 2512 1510 2512 1510 2513 1511 2513 692 2513 1510 2514 692 2514 690 2514 1514 2515 696 2515 695 2515 469 2516 1298 2516 1299 2516 1299 2517 1298 2517 1515 2517 1299 2518 1515 2518 1512 2518 1512 2519 1515 2519 1516 2519 1512 2520 1516 2520 1513 2520 1513 2521 1516 2521 1514 2521 1513 2522 1514 2522 1511 2522 1511 2523 1514 2523 695 2523 1511 2524 695 2524 693 2524 1517 2525 699 2525 698 2525 468 2526 1297 2526 1298 2526 1298 2527 1297 2527 1518 2527 1298 2528 1518 2528 1515 2528 1515 2529 1518 2529 1519 2529 1515 2530 1519 2530 1516 2530 1516 2531 1519 2531 1517 2531 1516 2532 1517 2532 1514 2532 1514 2533 1517 2533 698 2533 1514 2534 698 2534 696 2534 1520 2535 702 2535 701 2535 484 2536 1296 2536 1297 2536 1297 2537 1296 2537 1521 2537 1297 2538 1521 2538 1518 2538 1518 2539 1521 2539 1522 2539 1518 2540 1522 2540 1519 2540 1519 2541 1522 2541 1520 2541 1519 2542 1520 2542 1517 2542 1517 2543 1520 2543 701 2543 1517 2544 701 2544 699 2544 1523 2545 705 2545 704 2545 483 2546 1295 2546 1296 2546 1296 2547 1295 2547 1524 2547 1296 2548 1524 2548 1521 2548 1521 2549 1524 2549 1525 2549 1521 2550 1525 2550 1522 2550 1522 2551 1525 2551 1523 2551 1522 2552 1523 2552 1520 2552 1520 2553 1523 2553 704 2553 1520 2554 704 2554 702 2554 1526 2555 708 2555 707 2555 482 2556 1294 2556 1295 2556 1295 2557 1294 2557 1527 2557 1295 2558 1527 2558 1524 2558 1524 2559 1527 2559 1528 2559 1524 2560 1528 2560 1525 2560 1525 2561 1528 2561 1526 2561 1525 2562 1526 2562 1523 2562 1523 2563 1526 2563 707 2563 1523 2564 707 2564 705 2564 1529 2565 711 2565 710 2565 481 2566 1293 2566 1294 2566 1294 2567 1293 2567 1530 2567 1294 2568 1530 2568 1527 2568 1527 2569 1530 2569 1531 2569 1527 2570 1531 2570 1528 2570 1528 2571 1531 2571 1529 2571 1528 2572 1529 2572 1526 2572 1526 2573 1529 2573 710 2573 1526 2574 710 2574 708 2574 1532 2575 714 2575 713 2575 487 2576 1292 2576 1293 2576 1293 2577 1292 2577 1533 2577 1293 2578 1533 2578 1530 2578 1530 2579 1533 2579 1534 2579 1530 2580 1534 2580 1531 2580 1531 2581 1534 2581 1532 2581 1531 2582 1532 2582 1529 2582 1529 2583 1532 2583 713 2583 1529 2584 713 2584 711 2584 1535 2585 717 2585 716 2585 486 2586 1291 2586 1292 2586 1292 2587 1291 2587 1536 2587 1292 2588 1536 2588 1533 2588 1533 2589 1536 2589 1537 2589 1533 2590 1537 2590 1534 2590 1534 2591 1537 2591 1535 2591 1534 2592 1535 2592 1532 2592 1532 2593 1535 2593 716 2593 1532 2594 716 2594 714 2594 1538 2595 720 2595 719 2595 485 2596 1290 2596 1291 2596 1291 2597 1290 2597 1539 2597 1291 2598 1539 2598 1536 2598 1536 2599 1539 2599 1540 2599 1536 2600 1540 2600 1537 2600 1537 2601 1540 2601 1538 2601 1537 2602 1538 2602 1535 2602 1535 2603 1538 2603 719 2603 1535 2604 719 2604 717 2604 1541 2605 723 2605 722 2605 507 2606 1289 2606 1290 2606 1290 2607 1289 2607 1542 2607 1290 2608 1542 2608 1539 2608 1539 2609 1542 2609 1543 2609 1539 2610 1543 2610 1540 2610 1540 2611 1543 2611 1541 2611 1540 2612 1541 2612 1538 2612 1538 2613 1541 2613 722 2613 1538 2614 722 2614 720 2614 1544 2615 726 2615 725 2615 506 2616 1288 2616 1289 2616 1289 2617 1288 2617 1545 2617 1289 2618 1545 2618 1542 2618 1542 2619 1545 2619 1546 2619 1542 2620 1546 2620 1543 2620 1543 2621 1546 2621 1544 2621 1543 2622 1544 2622 1541 2622 1541 2623 1544 2623 725 2623 1541 2624 725 2624 723 2624 1547 2625 729 2625 728 2625 505 2626 1287 2626 1288 2626 1288 2627 1287 2627 1548 2627 1288 2628 1548 2628 1545 2628 1545 2629 1548 2629 1549 2629 1545 2630 1549 2630 1546 2630 1546 2631 1549 2631 1547 2631 1546 2632 1547 2632 1544 2632 1544 2633 1547 2633 728 2633 1544 2634 728 2634 726 2634 1550 2635 732 2635 731 2635 504 2636 1286 2636 1287 2636 1287 2637 1286 2637 1551 2637 1287 2638 1551 2638 1548 2638 1548 2639 1551 2639 1552 2639 1548 2640 1552 2640 1549 2640 1549 2641 1552 2641 1550 2641 1549 2642 1550 2642 1547 2642 1547 2643 1550 2643 731 2643 1547 2644 731 2644 729 2644 1553 2645 735 2645 734 2645 503 2646 1285 2646 1286 2646 1286 2647 1285 2647 1554 2647 1286 2648 1554 2648 1551 2648 1551 2649 1554 2649 1555 2649 1551 2650 1555 2650 1552 2650 1552 2651 1555 2651 1553 2651 1552 2652 1553 2652 1550 2652 1550 2653 1553 2653 734 2653 1550 2654 734 2654 732 2654 1556 2655 738 2655 737 2655 471 2656 1284 2656 1285 2656 1285 2657 1284 2657 1557 2657 1285 2658 1557 2658 1554 2658 1554 2659 1557 2659 1558 2659 1554 2660 1558 2660 1555 2660 1555 2661 1558 2661 1556 2661 1555 2662 1556 2662 1553 2662 1553 2663 1556 2663 737 2663 1553 2664 737 2664 735 2664 1559 2665 741 2665 740 2665 470 2666 1283 2666 1284 2666 1284 2667 1283 2667 1560 2667 1284 2668 1560 2668 1557 2668 1557 2669 1560 2669 1561 2669 1557 2670 1561 2670 1558 2670 1558 2671 1561 2671 1559 2671 1558 2672 1559 2672 1556 2672 1556 2673 1559 2673 740 2673 1556 2674 740 2674 738 2674 1562 2675 744 2675 743 2675 492 2676 1282 2676 1283 2676 1283 2677 1282 2677 1563 2677 1283 2678 1563 2678 1560 2678 1560 2679 1563 2679 1564 2679 1560 2680 1564 2680 1561 2680 1561 2681 1564 2681 1562 2681 1561 2682 1562 2682 1559 2682 1559 2683 1562 2683 743 2683 1559 2684 743 2684 741 2684 1565 2685 747 2685 746 2685 491 2686 1281 2686 1282 2686 1282 2687 1281 2687 1566 2687 1282 2688 1566 2688 1563 2688 1563 2689 1566 2689 1567 2689 1563 2690 1567 2690 1564 2690 1564 2691 1567 2691 1565 2691 1564 2692 1565 2692 1562 2692 1562 2693 1565 2693 746 2693 1562 2694 746 2694 744 2694 1568 2695 750 2695 749 2695 490 2696 1280 2696 1281 2696 1281 2697 1280 2697 1569 2697 1281 2698 1569 2698 1566 2698 1566 2699 1569 2699 1570 2699 1566 2700 1570 2700 1567 2700 1567 2701 1570 2701 1568 2701 1567 2702 1568 2702 1565 2702 1565 2703 1568 2703 749 2703 1565 2704 749 2704 747 2704 489 2705 1279 2705 1280 2705 1280 2706 1279 2706 1363 2706 1280 2707 1363 2707 1569 2707 1569 2708 1363 2708 1365 2708 1569 2709 1365 2709 1570 2709 1570 2710 1365 2710 1366 2710 1570 2711 1366 2711 1568 2711 1568 2712 1366 2712 751 2712 1568 2713 751 2713 750 2713 1571 103 1572 103 1573 103 1573 103 1572 103 1574 103 1573 103 1574 103 1575 103 1575 103 1574 103 1576 103 1575 103 1576 103 1577 103 1577 103 1576 103 1578 103 1577 103 1578 103 1579 103 1579 103 1578 103 1580 103 1579 2714 1580 2714 1581 2714 1581 103 1580 103 1582 103 1581 103 1582 103 1583 103 1583 103 1582 103 1584 103 1583 2715 1584 2715 1585 2715 1585 2716 1584 2716 1586 2716 1585 2717 1586 2717 1587 2717 1587 103 1586 103 1588 103 1587 103 1588 103 1589 103 1589 103 1588 103 1590 103 1589 103 1590 103 1591 103 1591 103 1590 103 1592 103 1591 103 1592 103 1593 103 1593 2718 1592 2718 1594 2718 1593 103 1594 103 1595 103 1595 103 1594 103 1596 103 1595 103 1596 103 1597 103 1597 103 1596 103 1598 103 1597 103 1598 103 1599 103 1599 103 1598 103 1600 103 1599 2719 1600 2719 1601 2719 1601 103 1600 103 1602 103 1601 103 1602 103 1603 103 1603 103 1602 103 1604 103 1603 103 1604 103 1605 103 1605 103 1604 103 1606 103 1605 2720 1606 2720 1607 2720 1607 2721 1606 2721 1608 2721 1607 103 1608 103 1609 103 1609 103 1608 103 1610 103 1609 2722 1610 2722 1611 2722 1611 103 1610 103 1612 103 1611 103 1612 103 1613 103 1613 103 1612 103 1614 103 1613 103 1614 103 1615 103 1615 103 1614 103 1616 103 1615 103 1616 103 1617 103 1617 2716 1616 2716 1618 2716 1617 103 1618 103 1619 103 1619 103 1618 103 1620 103 1619 103 1620 103 1621 103 1621 103 1620 103 1622 103 1621 2723 1622 2723 1623 2723 1623 103 1622 103 1624 103 1623 103 1624 103 1625 103 1625 103 1624 103 1626 103 1625 103 1626 103 1627 103 1627 103 1626 103 1628 103 1627 103 1628 103 1629 103 1629 103 1628 103 1630 103 1629 103 1630 103 1631 103 1631 103 1630 103 1632 103 1631 103 1632 103 1633 103 1633 103 1632 103 1634 103 1633 2724 1634 2724 1635 2724 1635 103 1634 103 1636 103 1635 103 1636 103 1637 103 1637 103 1636 103 1638 103 1637 2725 1638 2725 1639 2725 1639 2726 1638 2726 1640 2726 1639 2727 1640 2727 1641 2727 1641 103 1640 103 1642 103 1641 103 1642 103 1643 103 1643 103 1642 103 1644 103 1643 103 1644 103 1645 103 1645 103 1644 103 1646 103 1645 103 1646 103 1647 103 1647 2728 1646 2728 1648 2728 1647 103 1648 103 1649 103 1649 103 1648 103 1650 103 1649 103 1650 103 1651 103 1651 103 1650 103 1652 103 1651 103 1652 103 1653 103 1653 103 1652 103 1654 103 1653 2729 1654 2729 1655 2729 1655 103 1654 103 1656 103 1655 103 1656 103 1657 103 1657 103 1656 103 1658 103 1657 103 1658 103 1659 103 1659 103 1658 103 1660 103 1659 2730 1660 2730 1661 2730 1661 2731 1660 2731 1662 2731 1661 103 1662 103 1663 103 1663 103 1662 103 1664 103 1663 2732 1664 2732 1665 2732 1665 103 1664 103 1666 103 1665 103 1666 103 1667 103 1667 103 1666 103 1668 103 1667 103 1668 103 1669 103 1669 103 1668 103 1670 103 1669 103 1670 103 1671 103 1671 2726 1670 2726 1672 2726 1671 103 1672 103 1673 103 1673 103 1672 103 1674 103 1673 103 1674 103 1675 103 1675 103 1674 103 1676 103 1675 2733 1676 2733 1677 2733 1677 103 1676 103 1678 103 1677 103 1678 103 1571 103 1571 103 1678 103 1572 103 1657 2734 1679 2734 1655 2734 1655 2735 1679 2735 1680 2735 1655 2735 1680 2735 1653 2735 1653 2736 1680 2736 1681 2736 1653 2737 1681 2737 1651 2737 1651 2738 1681 2738 1682 2738 1651 2738 1682 2738 1649 2738 1649 2739 1682 2739 1683 2739 1649 2740 1683 2740 1647 2740 1647 2741 1683 2741 1684 2741 1647 2742 1684 2742 1645 2742 1645 2743 1684 2743 1685 2743 1645 2743 1685 2743 1643 2743 1643 2744 1685 2744 1686 2744 1643 2745 1686 2745 1641 2745 1641 2746 1686 2746 1687 2746 1641 2747 1687 2747 1639 2747 1639 2748 1687 2748 1688 2748 1639 2749 1688 2749 1637 2749 1637 2750 1688 2750 1689 2750 1637 2751 1689 2751 1635 2751 1635 2752 1689 2752 1690 2752 1635 2753 1690 2753 1633 2753 1633 2754 1690 2754 1691 2754 1633 2754 1691 2754 1631 2754 1631 2755 1691 2755 1692 2755 1631 2756 1692 2756 1629 2756 1629 2757 1692 2757 1693 2757 1629 2757 1693 2757 1627 2757 1627 2758 1693 2758 1694 2758 1627 2759 1694 2759 1625 2759 1625 2760 1694 2760 1695 2760 1625 2760 1695 2760 1623 2760 1623 2761 1695 2761 1696 2761 1623 2762 1696 2762 1621 2762 1621 2763 1696 2763 1697 2763 1621 2764 1697 2764 1619 2764 1619 2765 1697 2765 1698 2765 1619 2766 1698 2766 1617 2766 1617 2767 1698 2767 1699 2767 1617 2768 1699 2768 1615 2768 1615 2769 1699 2769 1700 2769 1615 2770 1700 2770 1613 2770 1613 2771 1700 2771 1701 2771 1613 2771 1701 2771 1611 2771 1611 2772 1701 2772 1702 2772 1611 2773 1702 2773 1609 2773 1609 2774 1702 2774 1703 2774 1609 2775 1703 2775 1607 2775 1607 2776 1703 2776 1704 2776 1607 2776 1704 2776 1605 2776 1605 2777 1704 2777 1705 2777 1605 2778 1705 2778 1603 2778 1603 2779 1705 2779 1706 2779 1603 2779 1706 2779 1601 2779 1601 2780 1706 2780 1707 2780 1601 2780 1707 2780 1599 2780 1599 2781 1707 2781 1708 2781 1599 2782 1708 2782 1597 2782 1597 2783 1708 2783 1709 2783 1597 2783 1709 2783 1595 2783 1595 2784 1709 2784 1710 2784 1595 2785 1710 2785 1593 2785 1593 2786 1710 2786 1711 2786 1593 2787 1711 2787 1591 2787 1591 2788 1711 2788 1712 2788 1591 2788 1712 2788 1589 2788 1589 2789 1712 2789 1713 2789 1589 2790 1713 2790 1587 2790 1587 2791 1713 2791 1714 2791 1587 2792 1714 2792 1585 2792 1585 2793 1714 2793 1715 2793 1585 2794 1715 2794 1583 2794 1583 2795 1715 2795 1716 2795 1583 2796 1716 2796 1581 2796 1581 2797 1716 2797 1717 2797 1581 2798 1717 2798 1579 2798 1579 2799 1717 2799 1718 2799 1579 2799 1718 2799 1577 2799 1577 2800 1718 2800 1719 2800 1577 2801 1719 2801 1575 2801 1575 2802 1719 2802 1720 2802 1575 2802 1720 2802 1573 2802 1573 2803 1720 2803 1721 2803 1573 2804 1721 2804 1571 2804 1571 2805 1721 2805 1722 2805 1571 2805 1722 2805 1677 2805 1677 2806 1722 2806 1723 2806 1677 2807 1723 2807 1675 2807 1675 2808 1723 2808 1724 2808 1675 2809 1724 2809 1673 2809 1673 2810 1724 2810 1725 2810 1673 2811 1725 2811 1671 2811 1671 2812 1725 2812 1726 2812 1671 2813 1726 2813 1669 2813 1669 2814 1726 2814 1727 2814 1669 2815 1727 2815 1667 2815 1667 2816 1727 2816 1728 2816 1667 2816 1728 2816 1665 2816 1665 2817 1728 2817 1729 2817 1665 2818 1729 2818 1663 2818 1663 2819 1729 2819 1730 2819 1663 2820 1730 2820 1661 2820 1661 2821 1730 2821 1731 2821 1661 2821 1731 2821 1659 2821 1659 2822 1731 2822 1732 2822 1659 2823 1732 2823 1657 2823 1657 2734 1732 2734 1679 2734 1701 2824 1203 2824 1702 2824 1702 2825 1203 2825 1202 2825 1702 2826 1202 2826 1703 2826 1699 2827 1206 2827 1700 2827 1700 2828 1206 2828 1205 2828 1700 401 1205 401 1701 401 1701 2829 1205 2829 1204 2829 1701 2830 1204 2830 1203 2830 1729 401 1161 401 1730 401 1730 401 1161 401 1160 401 1730 401 1160 401 1731 401 1725 2831 1167 2831 1726 2831 1726 2832 1167 2832 1166 2832 1726 2833 1166 2833 1727 2833 1705 401 1197 401 1706 401 1706 401 1197 401 1196 401 1706 401 1196 401 1707 401 1202 2834 1201 2834 1703 2834 1703 2835 1201 2835 1200 2835 1703 2836 1200 2836 1704 2836 1704 401 1200 401 1199 401 1704 2837 1199 2837 1705 2837 1705 401 1199 401 1198 401 1705 401 1198 401 1197 401 1681 401 1233 401 1682 401 1682 401 1233 401 1232 401 1682 401 1232 401 1683 401 1733 401 1236 401 1680 401 1680 401 1236 401 1235 401 1680 401 1235 401 1681 401 1681 2838 1235 2838 1234 2838 1681 2839 1234 2839 1233 2839 1166 2840 1165 2840 1727 2840 1727 401 1165 401 1164 401 1727 401 1164 401 1728 401 1728 401 1164 401 1163 401 1728 401 1163 401 1729 401 1729 401 1163 401 1162 401 1729 2841 1162 2841 1161 2841 1697 401 1209 401 1698 401 1698 401 1209 401 1208 401 1698 401 1208 401 1699 401 1699 401 1208 401 1207 401 1699 401 1207 401 1206 401 1695 401 1212 401 1696 401 1696 401 1212 401 1211 401 1696 401 1211 401 1697 401 1697 2842 1211 2842 1210 2842 1697 401 1210 401 1209 401 1160 2843 1159 2843 1731 2843 1731 2844 1159 2844 1158 2844 1731 401 1158 401 1732 401 1732 401 1158 401 1157 401 1732 401 1157 401 1733 401 1733 401 1157 401 1237 401 1733 401 1237 401 1236 401 1723 2845 1170 2845 1724 2845 1724 2846 1170 2846 1169 2846 1724 401 1169 401 1725 401 1725 2847 1169 2847 1168 2847 1725 2848 1168 2848 1167 2848 1693 401 1215 401 1694 401 1694 401 1215 401 1214 401 1694 401 1214 401 1695 401 1695 2849 1214 2849 1213 2849 1695 2850 1213 2850 1212 2850 1232 2851 1231 2851 1683 2851 1683 401 1231 401 1230 401 1683 401 1230 401 1684 401 1684 401 1230 401 1229 401 1684 401 1229 401 1685 401 1721 401 1173 401 1722 401 1722 401 1173 401 1172 401 1722 2852 1172 2852 1723 2852 1723 401 1172 401 1171 401 1723 401 1171 401 1170 401 1691 401 1218 401 1692 401 1692 401 1218 401 1217 401 1692 2853 1217 2853 1693 2853 1693 401 1217 401 1216 401 1693 401 1216 401 1215 401 1689 2854 1221 2854 1690 2854 1690 401 1221 401 1220 401 1690 401 1220 401 1691 401 1691 401 1220 401 1219 401 1691 401 1219 401 1218 401 1717 401 1179 401 1718 401 1718 401 1179 401 1178 401 1718 401 1178 401 1719 401 1713 401 1185 401 1714 401 1714 401 1185 401 1184 401 1714 401 1184 401 1715 401 1178 2855 1177 2855 1719 2855 1719 401 1177 401 1176 401 1719 2856 1176 2856 1720 2856 1720 401 1176 401 1175 401 1720 401 1175 401 1721 401 1721 401 1175 401 1174 401 1721 401 1174 401 1173 401 1184 2857 1183 2857 1715 2857 1715 2858 1183 2858 1182 2858 1715 401 1182 401 1716 401 1716 401 1182 401 1181 401 1716 401 1181 401 1717 401 1717 2859 1181 2859 1180 2859 1717 2860 1180 2860 1179 2860 1687 401 1224 401 1688 401 1688 2861 1224 2861 1223 2861 1688 401 1223 401 1689 401 1689 401 1223 401 1222 401 1689 401 1222 401 1221 401 1711 401 1188 401 1712 401 1712 2862 1188 2862 1187 2862 1712 401 1187 401 1713 401 1713 401 1187 401 1186 401 1713 401 1186 401 1185 401 1709 2863 1191 2863 1710 2863 1710 2864 1191 2864 1190 2864 1710 401 1190 401 1711 401 1711 2829 1190 2829 1189 2829 1711 2830 1189 2830 1188 2830 1229 2865 1228 2865 1685 2865 1685 2866 1228 2866 1227 2866 1685 2867 1227 2867 1686 2867 1686 2868 1227 2868 1226 2868 1686 2869 1226 2869 1687 2869 1687 2870 1226 2870 1225 2870 1687 2871 1225 2871 1224 2871 1196 401 1195 401 1707 401 1707 401 1195 401 1194 401 1707 2872 1194 2872 1708 2872 1708 401 1194 401 1193 401 1708 401 1193 401 1709 401 1709 2873 1193 2873 1192 2873 1709 2873 1192 2873 1191 2873 1734 401 1735 401 1736 401 1737 2874 1738 2874 1739 2874 1738 401 1737 401 1735 401 1735 2875 1737 2875 1740 2875 1735 2876 1740 2876 1736 2876 1741 401 1742 401 1743 401 1743 401 1742 401 1744 401 1745 2877 1746 2877 1736 2877 1736 401 1746 401 1747 401 1736 2878 1747 2878 1734 2878 1739 401 1748 401 1737 401 1737 2879 1748 2879 1749 2879 1737 401 1749 401 1750 401 1750 401 1751 401 1737 401 1737 2880 1751 2880 1752 2880 1737 401 1752 401 1753 401 1744 401 1754 401 1743 401 1743 401 1754 401 1755 401 1743 401 1755 401 1756 401 1757 2881 1758 2881 1737 2881 1737 2882 1758 2882 1743 2882 1737 401 1743 401 1759 401 1759 401 1743 401 1756 401 1760 401 1761 401 1736 401 1736 2883 1761 2883 1762 2883 1736 2884 1762 2884 1763 2884 1760 401 1764 401 1761 401 1761 2885 1764 2885 1765 2885 1761 2886 1765 2886 1766 2886 1763 2887 1767 2887 1736 2887 1736 401 1767 401 1768 401 1736 2888 1768 2888 1745 2888 1753 401 1769 401 1737 401 1737 2889 1769 2889 1770 2889 1737 2890 1770 2890 1757 2890 1741 2891 1771 2891 1742 2891 1742 2892 1771 2892 1772 2892 1742 2893 1772 2893 1773 2893 1773 401 1774 401 1742 401 1742 401 1774 401 1775 401 1742 401 1775 401 1776 401 1766 401 1777 401 1761 401 1761 401 1777 401 1778 401 1761 2894 1778 2894 1779 2894 1779 2895 1780 2895 1761 2895 1761 2896 1780 2896 1781 2896 1761 2897 1781 2897 1782 2897 1782 2898 1783 2898 1761 2898 1761 2899 1783 2899 1784 2899 1761 401 1784 401 1785 401 1786 2900 1735 2900 1787 2900 1787 2901 1735 2901 1734 2901 1787 2902 1734 2902 1788 2902 1788 2903 1734 2903 1747 2903 1788 2904 1747 2904 1789 2904 1789 2905 1747 2905 1746 2905 1789 2906 1746 2906 1790 2906 1790 2907 1746 2907 1745 2907 1790 2908 1745 2908 1791 2908 1791 2909 1745 2909 1768 2909 1791 2910 1768 2910 1792 2910 1792 2911 1768 2911 1767 2911 1792 2912 1767 2912 1793 2912 1793 2913 1767 2913 1763 2913 1793 2914 1763 2914 1794 2914 1794 2915 1763 2915 1762 2915 1794 2916 1762 2916 1795 2916 1795 2917 1762 2917 1761 2917 1795 2917 1761 2917 1796 2917 1796 2918 1761 2918 1785 2918 1796 2919 1785 2919 1797 2919 1797 2920 1785 2920 1784 2920 1797 2921 1784 2921 1798 2921 1798 2922 1784 2922 1783 2922 1798 2923 1783 2923 1799 2923 1799 2924 1783 2924 1782 2924 1799 2924 1782 2924 1800 2924 1800 2925 1782 2925 1781 2925 1800 2925 1781 2925 1801 2925 1801 2926 1781 2926 1780 2926 1801 2927 1780 2927 1802 2927 1802 2928 1780 2928 1779 2928 1802 2929 1779 2929 1803 2929 1803 2930 1779 2930 1778 2930 1803 2931 1778 2931 1804 2931 1804 2932 1778 2932 1777 2932 1804 2933 1777 2933 1805 2933 1805 2934 1777 2934 1766 2934 1805 2935 1766 2935 1806 2935 1806 2936 1766 2936 1765 2936 1806 2937 1765 2937 1807 2937 1807 2938 1765 2938 1764 2938 1807 2939 1764 2939 1808 2939 1808 2940 1764 2940 1760 2940 1808 2940 1760 2940 1809 2940 1809 2941 1760 2941 1736 2941 1809 2942 1736 2942 1810 2942 1810 2943 1736 2943 1740 2943 1810 2944 1740 2944 1811 2944 1811 2945 1740 2945 1737 2945 1811 2945 1737 2945 1812 2945 1812 2946 1737 2946 1759 2946 1812 2946 1759 2946 1813 2946 1813 2947 1759 2947 1756 2947 1813 2948 1756 2948 1814 2948 1814 2949 1756 2949 1755 2949 1814 2950 1755 2950 1815 2950 1815 2951 1755 2951 1754 2951 1815 2951 1754 2951 1816 2951 1816 2952 1754 2952 1744 2952 1816 2953 1744 2953 1817 2953 1817 2954 1744 2954 1742 2954 1817 2955 1742 2955 1818 2955 1818 2956 1742 2956 1776 2956 1818 2957 1776 2957 1819 2957 1819 2958 1776 2958 1775 2958 1819 2959 1775 2959 1820 2959 1820 2960 1775 2960 1774 2960 1820 2961 1774 2961 1821 2961 1821 2962 1774 2962 1773 2962 1821 2963 1773 2963 1822 2963 1822 2964 1773 2964 1772 2964 1822 2965 1772 2965 1823 2965 1823 2966 1772 2966 1771 2966 1823 2966 1771 2966 1824 2966 1824 2967 1771 2967 1741 2967 1824 2967 1741 2967 1825 2967 1825 2968 1741 2968 1743 2968 1825 2969 1743 2969 1826 2969 1826 2970 1743 2970 1758 2970 1826 2971 1758 2971 1827 2971 1827 2972 1758 2972 1757 2972 1827 2973 1757 2973 1828 2973 1828 2974 1757 2974 1770 2974 1828 2974 1770 2974 1829 2974 1829 2975 1770 2975 1769 2975 1829 2976 1769 2976 1830 2976 1830 2977 1769 2977 1753 2977 1830 2978 1753 2978 1831 2978 1831 2979 1753 2979 1752 2979 1831 2980 1752 2980 1832 2980 1832 2981 1752 2981 1751 2981 1832 2982 1751 2982 1833 2982 1833 2983 1751 2983 1750 2983 1833 2984 1750 2984 1834 2984 1834 2985 1750 2985 1749 2985 1834 2986 1749 2986 1835 2986 1835 2987 1749 2987 1748 2987 1835 2988 1748 2988 1836 2988 1836 2989 1748 2989 1739 2989 1836 2990 1739 2990 1837 2990 1837 2991 1739 2991 1786 2991 1837 2992 1786 2992 1787 2992 1803 2993 1838 2993 1802 2993 1802 401 1838 401 1839 401 1802 401 1839 401 1801 401 1801 401 1839 401 1840 401 1801 2994 1840 2994 1800 2994 1800 2995 1840 2995 1841 2995 1800 2996 1841 2996 1799 2996 1799 2997 1841 2997 1842 2997 1799 401 1842 401 1798 401 1798 401 1842 401 1843 401 1798 401 1843 401 1797 401 1797 401 1843 401 1844 401 1797 401 1844 401 1796 401 1796 401 1844 401 1845 401 1796 2998 1845 2998 1795 2998 1795 2999 1845 2999 1846 2999 1795 401 1846 401 1794 401 1794 401 1846 401 1847 401 1794 3000 1847 3000 1793 3000 1793 401 1847 401 1848 401 1793 401 1848 401 1792 401 1792 401 1848 401 1849 401 1792 3001 1849 3001 1791 3001 1791 3002 1849 3002 1850 3002 1791 3003 1850 3003 1790 3003 1790 3004 1850 3004 1851 3004 1790 3005 1851 3005 1789 3005 1789 3006 1851 3006 1852 3006 1789 401 1852 401 1788 401 1788 3007 1852 3007 1853 3007 1788 401 1853 401 1787 401 1787 3008 1853 3008 1854 3008 1787 401 1854 401 1837 401 1820 3009 1855 3009 1819 3009 1819 401 1855 401 1856 401 1819 3010 1856 3010 1818 3010 1818 3011 1856 3011 1857 3011 1818 401 1857 401 1817 401 1817 401 1857 401 1858 401 1817 3012 1858 3012 1816 3012 1816 3013 1858 3013 1859 3013 1816 3014 1859 3014 1815 3014 1815 3015 1859 3015 1860 3015 1815 401 1860 401 1814 401 1814 401 1860 401 1861 401 1814 401 1861 401 1813 401 1813 3016 1861 3016 1862 3016 1813 3017 1862 3017 1863 3017 1863 3018 1862 3018 1864 3018 1863 401 1864 401 1811 401 1811 3019 1864 3019 1865 3019 1811 3020 1865 3020 1810 3020 1810 3021 1865 3021 1866 3021 1810 401 1866 401 1809 401 1809 3022 1866 3022 1867 3022 1809 401 1867 401 1808 401 1808 3023 1867 3023 1868 3023 1808 401 1868 401 1807 401 1807 3024 1868 3024 1869 3024 1807 401 1869 401 1806 401 1806 3025 1869 3025 1870 3025 1806 401 1870 401 1805 401 1805 401 1870 401 1871 401 1805 401 1871 401 1804 401 1804 401 1871 401 1872 401 1804 401 1872 401 1803 401 1803 3026 1872 3026 1873 3026 1803 401 1873 401 1838 401 1854 3027 1874 3027 1837 3027 1837 3028 1874 3028 1875 3028 1837 401 1875 401 1836 401 1836 3029 1875 3029 1876 3029 1836 401 1876 401 1835 401 1835 401 1876 401 1877 401 1835 401 1877 401 1834 401 1834 3030 1877 3030 1878 3030 1834 3031 1878 3031 1833 3031 1833 3032 1878 3032 1879 3032 1833 3033 1879 3033 1832 3033 1832 3034 1879 3034 1880 3034 1832 401 1880 401 1831 401 1831 401 1880 401 1881 401 1831 401 1881 401 1830 401 1830 401 1881 401 1882 401 1830 401 1882 401 1829 401 1829 401 1882 401 1883 401 1829 401 1883 401 1828 401 1828 3035 1883 3035 1884 3035 1828 401 1884 401 1827 401 1827 401 1884 401 1885 401 1827 401 1885 401 1826 401 1826 3036 1885 3036 1886 3036 1826 3037 1886 3037 1825 3037 1825 3038 1886 3038 1887 3038 1825 401 1887 401 1824 401 1824 401 1887 401 1888 401 1824 401 1888 401 1823 401 1823 401 1888 401 1889 401 1823 3039 1889 3039 1822 3039 1822 3040 1889 3040 1890 3040 1822 401 1890 401 1821 401 1821 3041 1890 3041 1891 3041 1821 3042 1891 3042 1820 3042 1820 3043 1891 3043 1892 3043 1820 401 1892 401 1855 401 1862 3044 1893 3044 1864 3044 1864 3045 1893 3045 1654 3045 1864 3045 1654 3045 1865 3045 1865 3046 1654 3046 1652 3046 1865 3047 1652 3047 1866 3047 1866 3048 1652 3048 1650 3048 1866 3048 1650 3048 1867 3048 1867 3049 1650 3049 1648 3049 1867 3049 1648 3049 1868 3049 1868 3050 1648 3050 1646 3050 1868 3051 1646 3051 1869 3051 1869 3052 1646 3052 1644 3052 1869 3053 1644 3053 1870 3053 1870 3054 1644 3054 1642 3054 1870 3054 1642 3054 1871 3054 1871 3055 1642 3055 1640 3055 1871 3056 1640 3056 1872 3056 1872 3057 1640 3057 1638 3057 1872 3057 1638 3057 1873 3057 1873 3058 1638 3058 1636 3058 1873 3059 1636 3059 1838 3059 1838 3060 1636 3060 1634 3060 1838 3061 1634 3061 1839 3061 1839 3062 1634 3062 1632 3062 1839 3062 1632 3062 1840 3062 1840 3063 1632 3063 1630 3063 1840 3063 1630 3063 1841 3063 1841 2757 1630 2757 1628 2757 1841 2757 1628 2757 1842 2757 1842 3064 1628 3064 1626 3064 1842 3064 1626 3064 1843 3064 1843 3065 1626 3065 1624 3065 1843 3065 1624 3065 1844 3065 1844 3066 1624 3066 1622 3066 1844 3067 1622 3067 1845 3067 1845 3068 1622 3068 1620 3068 1845 3069 1620 3069 1846 3069 1846 3070 1620 3070 1618 3070 1846 3070 1618 3070 1847 3070 1847 3071 1618 3071 1616 3071 1847 3072 1616 3072 1848 3072 1848 3073 1616 3073 1614 3073 1848 3073 1614 3073 1849 3073 1849 3074 1614 3074 1612 3074 1849 3075 1612 3075 1850 3075 1850 3076 1612 3076 1610 3076 1850 3077 1610 3077 1851 3077 1851 3078 1610 3078 1608 3078 1851 3078 1608 3078 1852 3078 1852 3079 1608 3079 1606 3079 1852 3079 1606 3079 1853 3079 1853 3080 1606 3080 1604 3080 1853 3081 1604 3081 1854 3081 1854 3082 1604 3082 1602 3082 1854 3082 1602 3082 1874 3082 1874 3083 1602 3083 1600 3083 1874 3083 1600 3083 1875 3083 1875 3084 1600 3084 1598 3084 1875 3085 1598 3085 1876 3085 1876 3086 1598 3086 1596 3086 1876 3086 1596 3086 1877 3086 1877 3087 1596 3087 1594 3087 1877 3087 1594 3087 1878 3087 1878 3088 1594 3088 1592 3088 1878 3089 1592 3089 1879 3089 1879 3090 1592 3090 1590 3090 1879 3091 1590 3091 1880 3091 1880 3092 1590 3092 1588 3092 1880 3092 1588 3092 1881 3092 1881 3093 1588 3093 1586 3093 1881 3094 1586 3094 1882 3094 1882 3095 1586 3095 1584 3095 1882 3095 1584 3095 1883 3095 1883 3096 1584 3096 1582 3096 1883 3097 1582 3097 1884 3097 1884 3098 1582 3098 1580 3098 1884 3099 1580 3099 1885 3099 1885 3100 1580 3100 1578 3100 1885 3100 1578 3100 1886 3100 1886 3101 1578 3101 1576 3101 1886 3101 1576 3101 1887 3101 1887 2802 1576 2802 1574 2802 1887 2802 1574 2802 1888 2802 1888 3102 1574 3102 1572 3102 1888 3102 1572 3102 1889 3102 1889 3103 1572 3103 1678 3103 1889 3103 1678 3103 1890 3103 1890 3104 1678 3104 1676 3104 1890 3105 1676 3105 1891 3105 1891 3106 1676 3106 1674 3106 1891 3107 1674 3107 1892 3107 1892 3108 1674 3108 1672 3108 1892 3108 1672 3108 1855 3108 1855 3109 1672 3109 1670 3109 1855 3110 1670 3110 1856 3110 1856 3111 1670 3111 1668 3111 1856 3111 1668 3111 1857 3111 1857 3112 1668 3112 1666 3112 1857 3113 1666 3113 1858 3113 1858 3114 1666 3114 1664 3114 1858 3115 1664 3115 1859 3115 1859 3116 1664 3116 1662 3116 1859 3116 1662 3116 1860 3116 1860 3117 1662 3117 1660 3117 1860 3117 1660 3117 1861 3117 1861 3118 1660 3118 1658 3118 1861 3119 1658 3119 1862 3119 1862 3044 1658 3044 1893 3044

+
+
+
+
+ + + + + 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/kortex_description/grippers/robotiq_2f_85/meshes/visual/robotiq_85_base_link.dae b/kortex_description/grippers/robotiq_2f_85/meshes/visual/robotiq_85_base_link.dae new file mode 100644 index 00000000..b30b77cd --- /dev/null +++ b/kortex_description/grippers/robotiq_2f_85/meshes/visual/robotiq_85_base_link.dae @@ -0,0 +1,277 @@ + + + + + Blender User + Blender 2.74.0 commit date:2015-03-31, commit time:13:39, hash:000dfc0 + + 2015-09-02T16:38:59 + 2015-09-02T16:38:59 + + Z_UP + + + + + + + 49.13434 + 1.777778 + 0.1 + 100 + + + + + + 0 + 0 + 0 + + + + + + + + + 1 1 1 + 1 + 0 + 0.00111109 + + + + + 0.000999987 + 1 + 0.1 + 0.1 + 1 + 1 + 1 + 2 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 2880 + 2 + 30.002 + 1.000799 + 0.04999995 + 29.99998 + 1 + 2 + 0 + 0 + 1 + 1 + 1 + 1 + 8192 + 1 + 1 + 0 + 1 + 1 + 1 + 3 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 3 + 0.15 + 75 + 1 + 1 + 0 + 1 + 1 + 0 + + + + + + + + + + + + 0 0 0 1 + + + 0 0 0 1 + + + 0.03963915 0.03963915 0.03963915 1 + + + 0.5 0.5 0.5 1 + + + 50 + + + 1 + + + + + + + + + + + 0 0 0 1 + + + 0 0 0 1 + + + 0.64 0.64 0.64 1 + + + 0.5 0.5 0.5 1 + + + 50 + + + 1 + + + + + + + + + + + 0 0 0 1 + + + 0 0 0 1 + + + 0.4400001 0.4400001 0.4400001 1 + + + 0.5 0.5 0.5 1 + + + 50 + + + 1 1 1 1 + + + 0.2 + + + 1 + + + + + + + + + + + + + + + + + + + + + + -0.003999948 -0.02869659 -3.17983e-4 -0.003999948 -0.0287792 -6.26305e-4 -0.003999948 -0.03167706 -0.001402735 -0.003999948 -0.03190273 -0.001177012 -0.003999948 -0.03208583 -9.15596e-4 -0.003999948 -0.02869659 3.17983e-4 -0.003999948 -0.02891409 9.15596e-4 -0.003999948 -0.0287792 6.26305e-4 -0.003999948 -0.03230333 -3.17983e-4 -0.003999948 -0.03222072 -6.26305e-4 -0.003999948 -0.02866876 0 -0.003999948 -0.02909719 0.001177012 -0.003999948 -0.03233116 0 -0.003999948 -0.03230333 3.17983e-4 -0.003999948 -0.03222072 6.26305e-4 -0.003999948 -0.03208583 9.15596e-4 -0.003999948 -0.03190273 0.001177012 -0.003999948 -0.03112626 0.001720726 -0.003999948 -0.03081798 0.001803338 -0.003999948 -0.02891409 -9.15596e-4 -0.003999948 -0.02909719 -0.001177012 -0.003999948 -0.02932292 -0.001402735 -0.003999948 -0.030182 0.001803338 -0.003999948 -0.02987366 0.001720726 -0.003999948 -0.0295844 0.001585841 -0.003999948 -0.0295844 -0.001585841 -0.003999948 -0.02987366 -0.001720726 -0.003999948 -0.03141558 -0.001585841 -0.003999948 -0.030182 -0.001803338 -0.003999948 -0.03049999 -0.001831173 -0.003999948 -0.03081798 -0.001803338 -0.003999948 -0.03112626 -0.001720726 -0.003999948 -0.03167706 0.001402735 -0.003999948 -0.03141558 0.001585841 -0.003999948 -0.03049999 0.001831173 -0.003999948 -0.02932292 0.001402735 -0.003369987 -0.02853035 3.47296e-4 -0.003369987 -0.0286206 6.8404e-4 -0.003369987 -0.02876794 0.000999987 -0.003369987 -0.02896791 0.001285552 -0.003369987 -0.02921438 0.001532077 -0.003369987 -0.02949994 0.001731991 -0.003369987 -0.02981591 0.001879334 -0.003369987 -0.03015267 0.001969575 -0.003369987 -0.03049999 0.001999974 -0.003369987 -0.03084725 0.001969575 -0.003369987 -0.03118401 0.001879334 -0.003369987 -0.03149998 0.001731991 -0.003369987 -0.03178554 0.001532077 -0.003369987 -0.03203207 0.001285552 -0.003369987 -0.03223204 0.000999987 -0.003369987 -0.03237938 6.8404e-4 -0.003369987 -0.03246957 3.47296e-4 -0.003369987 -0.03249996 0 -0.003999948 -0.03233116 0 -0.003369987 -0.03246957 -3.47296e-4 -0.003369987 -0.03237938 -6.8404e-4 -0.003369987 -0.03223204 -0.000999987 -0.003369987 -0.03203207 -0.001285552 -0.003369987 -0.03178554 -0.001532077 -0.003369987 -0.03149998 -0.001731991 -0.003369987 -0.03118401 -0.001879334 -0.003369987 -0.03084725 -0.001969575 -0.003369987 -0.03049999 -0.001999974 -0.003369987 -0.03015267 -0.001969575 -0.003369987 -0.02981591 -0.001879334 -0.003369987 -0.02949994 -0.001731991 -0.003369987 -0.02921438 -0.001532077 -0.003369987 -0.02896791 -0.001285552 -0.003369987 -0.02876794 -0.000999987 -0.003369987 -0.0286206 -6.8404e-4 -0.003369987 -0.02853035 -3.47296e-4 -0.003369987 -0.02849996 0 1.125e-4 -0.02849996 0 1.125e-4 -0.02853035 -3.47296e-4 1.125e-4 -0.0286206 -6.8404e-4 1.125e-4 -0.02876794 -0.000999987 1.125e-4 -0.02896791 -0.001285552 1.125e-4 -0.02921438 -0.001532077 1.125e-4 -0.02949994 -0.001731991 1.125e-4 -0.02981591 -0.001879334 1.125e-4 -0.03015267 -0.001969575 1.125e-4 -0.03049999 -0.001999974 1.125e-4 -0.03084725 -0.001969575 1.125e-4 -0.03118401 -0.001879334 1.125e-4 -0.03149998 -0.001731991 1.125e-4 -0.03178554 -0.001532077 1.125e-4 -0.03203207 -0.001285552 1.125e-4 -0.03223204 -0.000999987 1.125e-4 -0.03237938 -6.8404e-4 1.125e-4 -0.03246957 -3.47296e-4 1.125e-4 -0.03249996 0 -0.003369987 -0.03249996 0 1.125e-4 -0.03246957 3.47296e-4 1.125e-4 -0.03237938 6.8404e-4 1.125e-4 -0.03223204 0.000999987 1.125e-4 -0.03203207 0.001285552 1.125e-4 -0.03178554 0.001532077 1.125e-4 -0.03149998 0.001731991 1.125e-4 -0.03118401 0.001879334 1.125e-4 -0.03084725 0.001969575 1.125e-4 -0.03049999 0.001999974 1.125e-4 -0.03015267 0.001969575 1.125e-4 -0.02981591 0.001879334 1.125e-4 -0.02949994 0.001731991 1.125e-4 -0.02921438 0.001532077 1.125e-4 -0.02896791 0.001285552 1.125e-4 -0.02876794 0.000999987 1.125e-4 -0.0286206 6.8404e-4 1.125e-4 -0.02853035 3.47296e-4 1.125e-4 -0.02571368 -0.01016455 1.125e-4 -0.02571439 0.01016294 1.125e-4 -0.02514511 -0.01053208 1.125e-4 -0.02460986 -0.01096707 1.125e-4 -0.03370445 -1.11029e-6 1.125e-4 0.02571088 -0.01016312 1.125e-4 0.02571016 0.01016443 1.125e-4 0.02634519 0.009930253 1.125e-4 0.02256745 0.01534742 1.125e-4 0.02263414 0.01464545 1.125e-4 0.003075897 0.03356754 1.125e-4 0.02283561 0.01397478 1.125e-4 0.02460628 0.01096647 1.125e-4 0.02487826 0.0107457 1.125e-4 0.02514147 0.01053196 1.125e-4 0.02661645 0.009858965 1.125e-4 0.02698051 0.009763062 1.125e-4 0.02634584 -0.009928822 1.125e-4 0.02698087 -0.009761571 1.125e-4 -0.005115509 0.03333449 1.125e-4 -0.003076553 0.03356736 1.125e-4 0.02514219 -0.01053071 1.125e-4 -0.02256578 -0.01534527 1.125e-4 -0.003074228 -0.03356593 1.125e-4 -0.005113184 -0.03333282 1.125e-4 -0.02263277 -0.0146436 1.125e-4 -0.02273994 -0.014288 1.125e-4 -0.02283358 -0.01397651 1.125e-4 -0.02297556 -0.01368004 1.125e-4 -0.02313733 -0.01334154 1.125e-4 -0.03350365 -0.003744959 1.125e-4 -0.0336706 -0.001872777 1.125e-4 -0.02698367 -0.009763121 1.125e-4 0.005117237 -0.03333246 1.125e-4 0.003310978 -0.03353905 1.125e-4 -0.02514582 0.01053065 1.125e-4 0.003077864 -0.0335657 1.125e-4 0.002952396 -0.03357398 1.125e-4 -0.0246092 0.01096463 1.125e-4 0.01491379 -0.0302245 1.125e-4 0.01304054 -0.0310924 1.125e-4 0.02263516 -0.01464205 1.125e-4 -0.02417188 0.01150041 1.125e-4 0.02015948 -0.02701371 1.125e-4 0.01966202 -0.02736294 1.125e-4 -0.02383935 -0.01206803 1.125e-4 -0.02417105 -0.01150041 1.125e-4 0.02768361 -0.009694576 1.125e-4 0.02742856 0.009720623 1.125e-4 0.0276829 0.009696424 1.125e-4 0.01110029 -0.03182977 1.125e-4 0.009163558 -0.0324645 1.125e-4 0.007156312 -0.03293055 1.125e-4 -0.01671826 0.02928775 1.125e-4 -0.01491212 0.03022301 1.125e-4 0.02460706 -0.0109657 1.125e-4 -0.01303881 0.03109413 1.125e-4 -0.01203292 0.03147542 1.125e-4 0.01849049 -0.0281853 1.125e-4 0.01671642 -0.02928602 1.125e-4 -0.007152259 -0.03293108 1.125e-4 -0.009159684 -0.0324651 1.125e-4 -0.01109999 -0.03183054 1.125e-4 -0.01303666 -0.03109329 1.125e-4 -0.01491004 -0.03022551 1.125e-4 -0.01671624 -0.02928721 1.125e-4 -0.001035153 -0.03369957 1.125e-4 0.001039147 -0.03369945 1.125e-4 -0.02634865 -0.009930312 1.125e-4 -0.03351742 0.003591954 1.125e-4 -0.03367072 0.001871049 1.125e-4 0.02176278 0.02574396 1.125e-4 0.02191776 0.02557045 1.125e-4 0.02290797 0.01382189 1.125e-4 0.02313548 0.01334005 1.125e-4 0.02383756 0.01207053 1.125e-4 0.03323298 -0.005615174 1.125e-4 0.03306573 -0.006536006 1.125e-4 -0.01110219 0.03182798 1.125e-4 -0.009161949 0.03246307 1.125e-4 -0.007154524 0.03293222 1.125e-4 -0.0217663 0.02574247 1.125e-4 -0.02016121 0.02701222 1.125e-4 -0.01848912 0.02818351 1.125e-4 -0.02199739 -0.0254774 1.125e-4 -0.02216678 -0.02514225 1.125e-4 -0.02223378 -0.02480679 1.125e-4 0.005114972 0.03333485 1.125e-4 0.007153987 0.03293269 1.125e-4 0.009161353 0.03246366 1.125e-4 0.01109844 0.03182876 1.125e-4 0.01176458 0.03157687 1.125e-4 0.01303839 0.03109502 1.125e-4 0.001036822 0.03370153 1.125e-4 -0.001037478 0.03370147 1.125e-4 0.02397447 0.01183837 1.125e-4 0.02417236 0.0115022 1.125e-4 0.03323256 0.005617916 1.125e-4 0.03336274 0.004707753 1.125e-4 0.03350007 0.003745317 1.125e-4 -0.02263379 0.0146442 1.125e-4 -0.02257329 0.01527869 1.125e-4 -0.02256685 0.01534587 1.125e-4 -0.02223545 0.02480733 1.125e-4 0.01491171 0.03022402 1.125e-4 0.01671439 0.02928894 1.125e-4 0.01848858 0.02818495 1.125e-4 0.02015721 0.02701365 1.125e-4 0.02079814 0.02650696 1.125e-4 0.02199912 0.02547913 1.125e-4 0.02216458 0.02514398 1.125e-4 0.02223163 0.02480888 1.125e-4 0.02256852 -0.01534372 1.125e-4 0.02223336 -0.0248056 1.125e-4 0.02216631 -0.02514076 1.125e-4 -0.01848721 -0.02818661 1.125e-4 -0.02015936 -0.02701508 1.125e-4 -0.02176451 -0.02574551 1.125e-4 -0.0332365 -0.005617141 1.125e-4 -0.03290158 -0.007456123 1.125e-4 -0.03270119 -0.007958173 1.125e-4 -0.03243345 -0.008459448 1.125e-4 -0.03206592 -0.008894026 1.125e-4 0.0336675 -0.00187081 1.125e-4 0.03350031 -0.003742992 1.125e-4 0.03335809 -0.004740238 1.125e-4 0.0220009 -0.02547585 1.125e-4 0.02176457 -0.02574402 1.125e-4 -0.03163087 -0.009228467 1.125e-4 -0.03116315 -0.009495496 1.125e-4 0.03365617 0.001997828 1.125e-4 0.03366732 0.001872837 1.125e-4 0.03370094 1.07618e-6 1.125e-4 -0.02313828 0.01333844 1.125e-4 -0.02299326 0.01364183 1.125e-4 0.02417314 -0.01149874 1.125e-4 -0.02283459 0.01397317 1.125e-4 -0.02270889 0.01439356 1.125e-4 -0.02216851 0.02514249 1.125e-4 -0.02199918 0.02547788 1.125e-4 -0.02768647 -0.009696125 1.125e-4 -0.03005999 -0.009696185 1.125e-4 -0.0306279 -0.009662687 1.125e-4 0.03005641 0.009696483 1.125e-4 0.03062474 0.009663283 1.125e-4 0.03115934 0.00949651 1.125e-4 0.03162735 0.009228408 1.125e-4 0.03191345 0.009008944 1.125e-4 0.03206235 0.008894681 1.125e-4 0.03243029 0.008459389 1.125e-4 0.03247731 0.008371353 1.125e-4 0.03269773 0.007958471 1.125e-4 0.03279078 0.007725894 1.125e-4 0.03289812 0.007456779 1.125e-4 0.03307747 0.006471753 1.125e-4 0.03243088 -0.008457541 1.125e-4 0.03206294 -0.008892178 1.125e-4 0.03005707 -0.009694457 1.125e-4 0.03162831 -0.00922662 1.125e-4 0.03116017 -0.009493708 1.125e-4 0.0306254 -0.009660959 1.125e-4 0.0328986 -0.007454216 1.125e-4 0.03279876 -0.007704854 1.125e-4 0.03269827 -0.007956266 1.125e-4 -0.02406156 0.01168942 1.125e-4 0.02313643 -0.01333993 1.125e-4 0.02283656 -0.01397496 1.125e-4 0.02400594 -0.01178258 1.125e-4 0.0238384 -0.01206642 1.125e-4 -0.02362757 0.01245337 1.125e-4 -0.02384018 0.01206856 1.125e-4 -0.03062897 0.009661316 1.125e-4 -0.0302757 0.009682178 1.125e-4 -0.03006064 0.009694695 1.125e-4 -0.02768713 0.009694814 1.125e-4 -0.02698433 0.009761929 1.125e-4 -0.02634936 0.009928822 1.125e-4 -0.03152161 0.009289562 1.125e-4 -0.0316317 0.009226322 1.125e-4 -0.03350389 0.003742992 1.125e-4 -0.03323692 0.00561589 1.125e-4 -0.03290212 0.007454633 1.125e-4 -0.0328527 0.00757867 1.125e-4 -0.03270179 0.007956504 1.125e-4 -0.03116381 0.009494721 1.125e-4 -0.03090864 0.009574294 1.125e-4 -0.03243404 0.008457422 1.125e-4 -0.03206652 0.008892774 0.03738278 0.03275084 -0.009499967 0.03701382 0.03192692 -0.009499967 0.03698027 0.03204572 -0.009499967 0.0367012 0.03061634 -0.009499967 0.03665953 0.03065598 -0.009499967 0.03671443 0.03116399 -0.009499967 0.03695064 0.0314452 -0.009499967 0.03680121 0.03056037 -0.009499967 0.03688752 0.03133904 -0.009499967 0.03680807 0.03124451 -0.009499967 0.03895181 0.03312766 -0.009499967 0.03897464 0.03300631 -0.009499967 0.03838568 0.03335434 -0.009499967 0.03901684 0.03289026 -0.009499967 0.03953367 0.03020823 -0.009499967 0.03941714 0.03024911 -0.009499967 0.03994172 0.03074043 -0.009499967 0.0369957 0.03156012 -0.009499967 0.03702169 0.03168088 -0.009499967 0.03702777 0.0318042 -0.009499967 0.03977221 0.03119575 -0.009499967 0.0397861 0.03107303 -0.009499967 0.03797733 0.03284049 -0.009499967 0.03987199 0.03084236 -0.009499967 0.03929555 0.03027063 -0.009499967 0.03917211 0.03027218 -0.009499967 0.03674888 0.03058421 -0.009499967 0.03885579 0.03333222 -0.009499967 0.03889232 0.03328782 -0.009499967 0.03934955 0.0325362 -0.009499967 0.0394628 0.03248691 -0.009499967 0.03999185 0.03175544 -0.009499967 0.03958249 0.03245657 -0.009499967 0.03774994 0.03274619 -0.009499967 0.03786748 0.03278404 -0.009499967 0.03778314 0.0301097 -0.009499967 0.03904998 0.03025376 -0.009499967 0.03893244 0.03021585 -0.009499967 0.03882259 0.03015947 -0.009499967 0.03863716 0.02999758 -0.009499967 0.0379076 0.02971208 -0.009499967 0.03872328 0.0300861 -0.009499967 0.03662508 0.03070193 -0.009499967 0.03659868 0.03075301 -0.009499967 0.03658121 0.03080779 -0.009499967 0.03660547 0.03103244 -0.009499967 0.03663426 0.03108215 -0.009499967 0.03667092 0.03112643 -0.009499967 0.03680187 0.0323593 -0.009499967 0.03678691 0.03241479 -0.009499967 0.03726625 0.03279173 -0.009499967 0.03892099 0.03323805 -0.009499967 0.03894102 0.03318411 -0.009499967 0.03787893 0.02976191 -0.009499967 0.03785896 0.02981579 -0.009499967 0.03784817 0.02987229 -0.009499967 0.03782528 0.02999365 -0.009499967 0.03981965 0.03095418 -0.009499967 0.03816276 0.03300237 -0.009499967 0.03823345 0.03310358 -0.009499967 0.03828686 0.03321492 -0.009499967 0.03851306 0.02978503 -0.009499967 0.0383675 0.02961218 -0.009499967 0.03831583 0.02958697 -0.009499967 0.03692793 0.03215759 -0.009499967 0.0368582 0.03225952 -0.009499967 0.03682589 0.03230702 -0.009499967 0.03750437 0.03272932 -0.009499967 0.03721749 0.03054338 -0.009499967 0.03762787 0.03272777 -0.009499967 0.03772276 0.0302174 -0.009499967 0.03764575 0.03031396 -0.009499967 0.03999805 0.03064066 -0.009499967 0.04001307 0.03058516 -0.009499967 0.03958797 0.03018933 -0.009499967 0.03841429 0.02964562 -0.009499967 0.03848809 0.02973324 -0.009499967 0.03845483 0.02968633 -0.009499967 0.03826069 0.02957069 -0.009499967 0.03820365 0.02956384 -0.009499967 0.03814619 0.02956658 -0.009499967 0.03809005 0.02957874 -0.009499967 0.0380367 0.02960014 -0.009499967 0.03798758 0.02963006 -0.009499967 0.03856647 0.02989637 -0.009499967 0.03794419 0.02966773 -0.009499967 0.03657299 0.03086465 -0.009499967 0.03657442 0.03092217 -0.009499967 0.03658533 0.03097856 -0.009499967 0.03679883 0.0325852 -0.009499967 0.03682142 0.03263807 -0.009499967 0.03685247 0.03268647 -0.009499967 0.0368911 0.03272897 -0.009499967 0.03709781 0.03282028 -0.009499967 0.03715527 0.03282022 -0.009499967 0.03704112 0.0328108 -0.009499967 0.03721195 0.03281062 -0.009499967 0.03843241 0.03338778 -0.009499967 0.03848409 0.03341299 -0.009499967 0.03876328 0.03339982 -0.009499967 0.03853923 0.0334292 -0.009499967 0.03881233 0.03336989 -0.009499967 0.03970551 0.03244596 -0.009499967 0.03982865 0.03245538 -0.009499967 0.04008549 0.03183591 -0.009499967 0.040129 0.03187352 -0.009499967 0.0399124 0.03166091 -0.009499967 0.03984934 0.03155475 -0.009499967 0.03807663 0.03291386 -0.009499967 0.03980422 0.03143978 -0.009499967 0.03977829 0.03131908 -0.009499967 0.03831189 0.03326672 -0.009499967 0.03834509 0.03331363 -0.009499967 0.03678131 0.03247201 -0.009499967 0.03678536 0.03252935 -0.009499967 0.03693628 0.03276455 -0.009499967 0.03698676 0.03279203 -0.009499967 0.03907722 0.03278255 -0.009499967 0.03915423 0.03268599 -0.009499967 0.03924578 0.03260314 -0.009499967 0.03709441 0.03055399 -0.009499967 0.03697133 0.03054457 -0.009499967 0.03691399 0.03054028 -0.009499967 0.03755414 0.03039675 -0.009499967 0.03745037 0.03046375 -0.009499967 0.03733718 0.03051304 -0.009499967 0.03997409 0.03069293 -0.009499967 0.03859633 0.03343611 -0.009499967 0.03865373 0.03343337 -0.009499967 0.03870993 0.03342115 -0.009499967 0.03685677 0.03054565 -0.009499967 0.04001861 0.03052794 -0.009499967 0.04001462 0.0304706 -0.009499967 0.04000109 0.03041476 -0.009499967 0.03997856 0.03036189 -0.009499967 0.0399475 0.03031349 -0.009499967 0.03964465 0.03017973 -0.009499967 0.03986364 0.0302354 -0.009499967 0.03981316 0.03020787 -0.009499967 0.03975886 0.03018915 -0.009499967 0.03990882 0.03027093 -0.009499967 0.04014039 0.03234398 -0.009499967 0.0401749 0.03229802 -0.009499967 0.04020124 0.03224694 -0.009499967 0.04021877 0.03219217 -0.009499967 0.03970211 0.03017967 -0.009499967 0.03994321 0.03245431 -0.009499967 0.03999876 0.03243952 -0.009499967 0.03988593 0.03245967 -0.009499967 0.0400511 0.03241574 -0.009499967 0.04009872 0.03238362 -0.009499967 0.04022693 0.03213524 -0.009499967 0.04022556 0.03207778 -0.009499967 0.04021465 0.03202134 -0.009499967 0.04019451 0.03196752 -0.009499967 0.04016566 0.03191775 -0.009499967 0.03907722 -0.0302174 -0.009499967 0.03915423 -0.03031396 -0.009499967 0.03755414 -0.03260314 -0.009499967 0.03698027 -0.03095418 -0.009499967 0.03738278 -0.03024911 -0.009499967 0.03701382 -0.03107303 -0.009499967 0.03702777 -0.03119575 -0.009499967 0.0367012 -0.03238362 -0.009499967 0.03665953 -0.03234398 -0.009499967 0.03671443 -0.03183591 -0.009499967 0.03680121 -0.03243952 -0.009499967 0.03680807 -0.03175544 -0.009499967 0.03688752 -0.03166091 -0.009499967 0.03786748 -0.03021585 -0.009499967 0.03797733 -0.03015947 -0.009499967 0.03897464 -0.02999365 -0.009499967 0.03807663 -0.0300861 -0.009499967 0.03828686 -0.02978503 -0.009499967 0.03895181 -0.02987229 -0.009499967 0.03823345 -0.02989637 -0.009499967 0.03816276 -0.02999758 -0.009499967 0.03999185 -0.03124451 -0.009499967 0.03924578 -0.03039675 -0.009499967 0.03934955 -0.03046375 -0.009499967 0.0394628 -0.03051304 -0.009499967 0.03958249 -0.03054338 -0.009499967 0.03970551 -0.03055399 -0.009499967 0.03982865 -0.03054457 -0.009499967 0.04008549 -0.03116399 -0.009499967 0.03901684 -0.0301097 -0.009499967 0.03674888 -0.03241574 -0.009499967 0.03662508 -0.03229802 -0.009499967 0.03659868 -0.03224694 -0.009499967 0.03667092 -0.03187352 -0.009499967 0.03695064 -0.03155475 -0.009499967 0.0369957 -0.03143978 -0.009499967 0.03702169 -0.03131908 -0.009499967 0.03831189 -0.02973324 -0.009499967 0.03834509 -0.02968633 -0.009499967 0.03894102 -0.02981579 -0.009499967 0.03745037 -0.0325362 -0.009499967 0.03733718 -0.03248691 -0.009499967 0.03762787 -0.03027218 -0.009499967 0.03721749 -0.03245657 -0.009499967 0.03980422 -0.03156012 -0.009499967 0.03984934 -0.0314452 -0.009499967 0.0399124 -0.03133904 -0.009499967 0.03774994 -0.03025376 -0.009499967 0.03657299 -0.03213524 -0.009499967 0.03657442 -0.03207778 -0.009499967 0.03663426 -0.03191775 -0.009499967 0.03658533 -0.03202134 -0.009499967 0.03660547 -0.03196752 -0.009499967 0.03709781 -0.03017967 -0.009499967 0.03715527 -0.03017973 -0.009499967 0.03682589 -0.03069293 -0.009499967 0.03778314 -0.03289026 -0.009499967 0.03981965 -0.03204572 -0.009499967 0.03782528 -0.03300631 -0.009499967 0.03987199 -0.03215759 -0.009499967 0.03784817 -0.03312766 -0.009499967 0.03863716 -0.03300237 -0.009499967 0.03856647 -0.03310358 -0.009499967 0.0379076 -0.03328782 -0.009499967 0.03851306 -0.03321492 -0.009499967 0.03772276 -0.03278255 -0.009499967 0.03977221 -0.0318042 -0.009499967 0.0397861 -0.03192692 -0.009499967 0.03977829 -0.03168088 -0.009499967 0.03764575 -0.03268599 -0.009499967 0.03709441 -0.03244596 -0.009499967 0.03697133 -0.03245538 -0.009499967 0.03658121 -0.03219217 -0.009499967 0.03692793 -0.03084236 -0.009499967 0.0368582 -0.03074043 -0.009499967 0.03726625 -0.03020823 -0.009499967 0.03721195 -0.03018933 -0.009499967 0.03750437 -0.03027063 -0.009499967 0.03678131 -0.03052794 -0.009499967 0.03698676 -0.03020787 -0.009499967 0.03678691 -0.03058516 -0.009499967 0.03680187 -0.03064066 -0.009499967 0.03704112 -0.03018915 -0.009499967 0.03885579 -0.02966773 -0.009499967 0.03889232 -0.02971208 -0.009499967 0.03892099 -0.02976191 -0.009499967 0.04009872 -0.03061634 -0.009499967 0.04014039 -0.03065598 -0.009499967 0.040129 -0.03112643 -0.009499967 0.0401749 -0.03070193 -0.009499967 0.04020124 -0.03075301 -0.009499967 0.03787893 -0.03323805 -0.009499967 0.03785896 -0.03318411 -0.009499967 0.03691399 -0.03245967 -0.009499967 0.03685677 -0.03245431 -0.009499967 0.03678536 -0.0304706 -0.009499967 0.03679883 -0.03041476 -0.009499967 0.03682142 -0.03036189 -0.009499967 0.03685247 -0.03031349 -0.009499967 0.0368911 -0.03027093 -0.009499967 0.03693628 -0.0302354 -0.009499967 0.03838568 -0.02964562 -0.009499967 0.03843241 -0.02961218 -0.009499967 0.03876328 -0.02960014 -0.009499967 0.03848409 -0.02958697 -0.009499967 0.03853923 -0.02957069 -0.009499967 0.03881233 -0.02963006 -0.009499967 0.03988593 -0.03054028 -0.009499967 0.03994321 -0.03054565 -0.009499967 0.04022556 -0.03092217 -0.009499967 0.04021465 -0.03097856 -0.009499967 0.04019451 -0.03103244 -0.009499967 0.04016566 -0.03108215 -0.009499967 0.03929555 -0.03272932 -0.009499967 0.03917211 -0.03272777 -0.009499967 0.03904998 -0.03274619 -0.009499967 0.03893244 -0.03278404 -0.009499967 0.03882259 -0.03284049 -0.009499967 0.03872328 -0.03291386 -0.009499967 0.0383675 -0.03338778 -0.009499967 0.03831583 -0.03341299 -0.009499967 0.03809005 -0.03342115 -0.009499967 0.03848809 -0.03326672 -0.009499967 0.03845483 -0.03331363 -0.009499967 0.03794419 -0.03333222 -0.009499967 0.03798758 -0.03336989 -0.009499967 0.03859633 -0.02956384 -0.009499967 0.03865373 -0.02956658 -0.009499967 0.03870993 -0.02957874 -0.009499967 0.03999876 -0.03056037 -0.009499967 0.0400511 -0.03058421 -0.009499967 0.04021877 -0.03080779 -0.009499967 0.04022693 -0.03086465 -0.009499967 0.03841429 -0.03335434 -0.009499967 0.03941714 -0.03275084 -0.009499967 0.03994172 -0.03225952 -0.009499967 0.03953367 -0.03279173 -0.009499967 0.03997409 -0.03230702 -0.009499967 0.03999805 -0.0323593 -0.009499967 0.03826069 -0.0334292 -0.009499967 0.03820365 -0.03343611 -0.009499967 0.03814619 -0.03343337 -0.009499967 0.0380367 -0.03339982 -0.009499967 0.04001307 -0.03241479 -0.009499967 0.04001861 -0.03247201 -0.009499967 0.03958797 -0.03281062 -0.009499967 0.04001462 -0.03252935 -0.009499967 0.04000109 -0.0325852 -0.009499967 0.03997856 -0.03263807 -0.009499967 0.0399475 -0.03268647 -0.009499967 0.03964465 -0.03282022 -0.009499967 0.03986364 -0.03276455 -0.009499967 0.03981316 -0.03279203 -0.009499967 0.03990882 -0.03272897 -0.009499967 0.03975886 -0.0328108 -0.009499967 0.03970211 -0.03282028 -0.009499967 0.04789769 0.01838254 -0.01099997 0.04807704 0.01857495 -0.01099997 0.04936832 0.01560354 -0.01099997 0.04990744 0.015675 -0.01099997 0.04959183 0.0156154 -0.01099997 0.04938197 0.01904964 -0.01099997 0.04937511 0.01904964 -0.01099997 0.05083394 0.01628071 -0.01099997 0.05066317 0.01609402 -0.01099997 0.04754638 0.0173369 -0.01099997 0.04757118 0.01763975 -0.01099997 0.04808664 0.01858365 -0.01099997 0.04830539 0.01875013 -0.01099997 0.04855811 0.01888489 -0.01099997 0.04884743 0.01898419 -0.01099997 0.04917216 0.01904034 -0.01099997 0.04755097 0.01720768 -0.01099997 0.04903662 0.0156309 -0.01099997 0.04872357 0.01571041 -0.01099997 0.04764264 0.0179187 -0.01099997 0.04775267 0.01816457 -0.01099997 0.05118596 0.01746237 -0.01099997 0.04971629 0.01902216 -0.01099997 0.05002981 0.01894235 -0.01099997 0.04843801 0.01583677 -0.01099997 0.04818582 0.01600396 -0.01099997 0.04798901 0.01618659 -0.01099997 0.04781419 0.01641207 -0.01099997 0.04768246 0.01665955 -0.01099997 0.04759454 0.01692503 -0.01099997 0.05031287 0.0188167 -0.01099997 0.05056113 0.01865148 -0.01099997 0.05075597 0.01846987 -0.01099997 0.05092746 0.0182476 -0.01099997 0.0510568 0.01800346 -0.01099997 0.05114322 0.01774138 -0.01099997 0.05119031 0.0173369 -0.01099997 0.05116569 0.01703727 -0.01099997 0.05044513 0.01592022 -0.01099997 0.05019271 0.01577872 -0.01099997 0.05109453 0.01675814 -0.01099997 0.05098295 0.01650661 -0.01099997 0.04760688 0.004618704 -0.01099997 0.04756402 0.004905879 -0.01099997 0.04937511 0.00673139 -0.01099997 0.04755979 0.00503236 -0.01099997 0.04854762 0.00656116 -0.01099997 0.04883247 0.006661772 -0.01099997 0.04915302 0.006720185 -0.01099997 0.05082285 0.003962159 -0.01099997 0.05066227 0.003786921 -0.01099997 0.04938197 0.00673139 -0.01099997 0.04798996 0.003884434 -0.01099997 0.04782116 0.0041067 -0.01099997 0.04769319 0.004352271 -0.01099997 0.04991924 0.003372669 -0.01099997 0.04960548 0.00331211 -0.01099997 0.04936832 0.003299057 -0.01099997 0.04903101 0.003326773 -0.01099997 0.04871582 0.00340718 -0.01099997 0.05117923 0.005154073 -0.01099997 0.04971587 0.006703913 -0.01099997 0.05002856 0.006624341 -0.01099997 0.04843413 0.003532946 -0.01099997 0.04818856 0.003697216 -0.01099997 0.04790884 0.006070315 -0.01099997 0.04808616 0.006260573 -0.01099997 0.04829907 0.006425619 -0.01099997 0.05031049 0.006499171 -0.01099997 0.05055785 0.006334722 -0.01099997 0.0507524 0.006153404 -0.01099997 0.05092304 0.005932152 -0.01099997 0.05105161 0.005689561 -0.01099997 0.0511372 0.005429685 -0.01099997 0.05118346 0.00503236 -0.01099997 0.05115824 0.004725098 -0.01099997 0.05044817 0.003615438 -0.01099997 0.0502004 0.003475785 -0.01099997 0.05108535 0.004440128 -0.01099997 0.05097228 0.004186868 -0.01099997 0.04776459 0.005853593 -0.01099997 0.04758435 0.00533241 -0.01099997 0.04765528 0.005609273 -0.01099997 0.05119717 -5.36413e-4 -0.01099997 0.04986655 -5.36413e-4 -0.01099997 0.04986053 -4.41817e-4 -0.01099997 0.05121082 -2.63412e-4 -0.01099997 0.0512095 -3.40132e-4 -0.01099997 0.05054885 4.59826e-4 -0.01099997 0.05054211 4.59826e-4 -0.01099997 0.04996371 1.20636e-4 -0.01099997 0.05002373 2.11654e-4 -0.01099997 0.04991424 9.45093e-6 -0.01099997 0.05113214 1.17508e-4 -0.01099997 0.05117195 1.50907e-5 -0.01099997 0.05119973 -1.08818e-4 -0.01099997 0.05120509 -4.10126e-4 -0.01099997 0.0498597 -3.52168e-4 -0.01099997 0.04987359 -1.63187e-4 -0.01099997 0.05009365 2.88404e-4 -0.01099997 0.05017626 3.53879e-4 -0.01099997 0.05026072 4.00928e-4 -0.01099997 0.05036199 4.37161e-4 -0.01099997 0.05047202 4.56585e-4 -0.01099997 0.05067718 4.50184e-4 -0.01099997 0.05078202 4.2546e-4 -0.01099997 0.05108273 2.03112e-4 -0.01099997 0.05087041 3.89269e-4 -0.01099997 0.05102258 2.76988e-4 -0.01099997 0.05095314 3.38172e-4 -0.01099997 0.04905021 -4.13617e-4 -0.01099997 0.04904079 -5.36413e-4 -0.01099997 0.04762822 -5.36413e-4 -0.01099997 0.04905444 -2.90616e-4 -0.01099997 0.04756677 -2.63412e-4 -0.01099997 0.04760909 -5.36183e-4 -0.01099997 0.0475685 -3.92218e-4 -0.01099997 0.0476005 -5.35426e-4 -0.01099997 0.04758042 -5.16078e-4 -0.01099997 0.04830276 6.37069e-4 -0.01099997 0.04766899 2.14304e-4 -0.01099997 0.0477308 3.25503e-4 -0.01099997 0.04780304 4.16678e-4 -0.01099997 0.04788833 4.94844e-4 -0.01099997 0.04797619 5.52677e-4 -0.01099997 0.04807084 5.95524e-4 -0.01099997 0.0475831 -6.71782e-5 -0.01099997 0.04762357 1.01942e-4 -0.01099997 0.04818445 6.25785e-4 -0.01099997 0.04759544 -5.34325e-4 -0.01099997 0.04758578 -5.27575e-4 -0.01099997 0.04758358 -5.23839e-4 -0.01099997 0.04895085 2.33528e-4 -0.01099997 0.04899299 1.32143e-4 -0.01099997 0.04903656 -7.66605e-5 -0.01099997 0.04873055 5.04266e-4 -0.01099997 0.04881536 4.28593e-4 -0.01099997 0.04888784 3.40012e-4 -0.01099997 0.04759204 -5.32976e-4 -0.01099997 0.04758977 -5.31592e-4 -0.01099997 0.04758763 -5.29764e-4 -0.01099997 0.04831737 6.37201e-4 -0.01099997 0.04832428 6.37201e-4 -0.01099997 0.04843741 6.28479e-4 -0.01099997 0.04854655 6.01719e-4 -0.01099997 0.04864305 5.60097e-4 -0.01099997 0.04760688 -0.005461335 -0.01099997 0.04756402 -0.00517416 -0.01099997 0.04937511 -0.003348529 -0.01099997 0.04755979 -0.005047559 -0.01099997 0.04854762 -0.00351876 -0.01099997 0.04883247 -0.003418147 -0.01099997 0.04915302 -0.003359735 -0.01099997 0.05082285 -0.006117761 -0.01099997 0.05066227 -0.006292998 -0.01099997 0.04938197 -0.003348529 -0.01099997 0.04798996 -0.006195545 -0.01099997 0.04782122 -0.005973279 -0.01099997 0.04769319 -0.005727708 -0.01099997 0.04991924 -0.006707251 -0.01099997 0.04960548 -0.006767809 -0.01099997 0.04936832 -0.006780862 -0.01099997 0.04903101 -0.006753146 -0.01099997 0.04871577 -0.00667268 -0.01099997 0.05117923 -0.004925608 -0.01099997 0.04971593 -0.003376007 -0.01099997 0.05002862 -0.003455638 -0.01099997 0.04843407 -0.006546914 -0.01099997 0.0481885 -0.006382644 -0.01099997 0.04790884 -0.004009604 -0.01099997 0.04808616 -0.003819346 -0.01099997 0.04829907 -0.00365436 -0.01099997 0.05031061 -0.003580808 -0.01099997 0.05055791 -0.003745257 -0.01099997 0.05075234 -0.003926396 -0.01099997 0.05092298 -0.004147589 -0.01099997 0.05105155 -0.00439012 -0.01099997 0.0511372 -0.004649996 -0.01099997 0.05118346 -0.005047559 -0.01099997 0.05115824 -0.005354821 -0.01099997 0.05044817 -0.006464481 -0.01099997 0.0502004 -0.006604135 -0.01099997 0.05108535 -0.005639791 -0.01099997 0.05097228 -0.005893051 -0.01099997 0.04776459 -0.004226326 -0.01099997 0.04758435 -0.004747509 -0.01099997 0.04765528 -0.004470646 -0.01099997 0.05119031 -0.01070493 -0.01099997 0.0495662 -0.01070493 -0.01099997 0.04956018 -0.01061117 -0.01099997 0.04961454 -0.01016831 -0.01099997 0.04966974 -0.01003557 -0.01099997 0.05119955 -0.01058894 -0.01099997 0.05021297 -0.009620428 -0.01099997 0.05036652 -0.009600758 -0.01099997 0.05041915 -0.009599447 -0.01099997 0.05119985 -0.0105853 -0.01099997 0.04957371 -0.01033413 -0.01099997 0.05120396 -0.01043212 -0.01099997 0.050426 -0.009599447 -0.01099997 0.05119925 -0.01032119 -0.01099997 0.04955935 -0.01050704 -0.01099997 0.0496959 -0.009988427 -0.01099997 0.0497601 -0.009894132 -0.01099997 0.04985058 -0.00979948 -0.01099997 0.04995512 -0.009722292 -0.01099997 0.05007708 -0.009661376 -0.01099997 0.05108278 -0.009935915 -0.01099997 0.05113476 -0.01004093 -0.01099997 0.0511747 -0.010167 -0.01099997 0.05058199 -0.009611189 -0.01099997 0.05070793 -0.009640753 -0.01099997 0.05099231 -0.009816408 -0.01099997 0.05081278 -0.009683609 -0.01099997 0.05091118 -0.009744405 -0.01099997 0.05101937 -0.009846687 -0.01099997 3.12504e-4 -0.02417105 -0.01150041 3.12504e-4 -0.02460986 -0.01096707 3.12504e-4 -0.02514511 -0.01053208 3.12504e-4 -0.02571368 -0.01016455 3.12504e-4 -0.02634865 -0.009930312 3.12504e-4 -0.02698367 -0.009763121 3.12504e-4 -0.02768647 -0.009696125 3.12504e-4 -0.03005999 -0.009696185 3.12504e-4 -0.0306279 -0.009662687 3.12504e-4 -0.03116315 -0.009495496 3.12504e-4 -0.03163087 -0.009228467 3.12504e-4 -0.03206592 -0.008894026 3.12504e-4 -0.03243345 -0.008459448 3.12504e-4 -0.03270119 -0.007958173 3.12504e-4 -0.03290158 -0.007456123 3.12504e-4 -0.0332365 -0.005617141 3.12504e-4 -0.03350365 -0.003744959 3.12504e-4 -0.0336706 -0.001872777 3.12504e-4 -0.03370445 -1.11029e-6 3.12504e-4 -0.03367072 0.001871049 3.12504e-4 -0.03351742 0.003591954 3.12504e-4 -0.03350389 0.003742992 3.12504e-4 -0.03323692 0.00561589 3.12504e-4 -0.03290212 0.007454633 3.12504e-4 -0.0328527 0.00757867 3.12504e-4 -0.03270179 0.007956504 3.12504e-4 -0.03243404 0.008457422 3.12504e-4 -0.03206652 0.008892774 3.12504e-4 -0.0316317 0.009226322 3.12504e-4 -0.03152161 0.009289562 3.12504e-4 -0.03116381 0.009494721 3.12504e-4 -0.03090864 0.009574294 3.12504e-4 -0.03062897 0.009661316 3.12504e-4 -0.0302757 0.009682178 3.12504e-4 -0.03006064 0.009694695 3.12504e-4 -0.02768713 0.009694814 3.12504e-4 -0.02698433 0.009761929 3.12504e-4 -0.02634936 0.009928822 3.12504e-4 -0.02571439 0.01016294 3.12504e-4 -0.02514582 0.01053065 3.12504e-4 -0.0246092 0.01096463 3.12504e-4 -0.02417188 0.01150041 3.12504e-4 -0.02406156 0.01168942 3.12504e-4 -0.02384018 0.01206856 3.12504e-4 -0.02362757 0.01245337 3.12504e-4 -0.02313828 0.01333844 3.12504e-4 -0.02299326 0.01364183 3.12504e-4 -0.02283459 0.01397317 3.12504e-4 -0.02270889 0.01439356 3.12504e-4 -0.02263379 0.0146442 3.12504e-4 -0.02257329 0.01527869 3.12504e-4 -0.02256685 0.01534587 3.12504e-4 -0.02223545 0.02480733 3.12504e-4 -0.02216851 0.02514249 3.12504e-4 -0.02199918 0.02547788 3.12504e-4 -0.0217663 0.02574247 3.12504e-4 -0.02016121 0.02701222 3.12504e-4 -0.01848912 0.02818351 3.12504e-4 -0.01671826 0.02928775 3.12504e-4 -0.01491212 0.03022301 3.12504e-4 -0.01303881 0.03109413 3.12504e-4 -0.01203292 0.03147542 3.12504e-4 -0.01110219 0.03182798 3.12504e-4 -0.009161949 0.03246307 3.12504e-4 -0.007154524 0.03293222 3.12504e-4 -0.005115509 0.03333449 3.12504e-4 -0.003076553 0.03356736 3.12504e-4 -0.001037478 0.03370147 3.12504e-4 0.001036822 0.03370153 3.12504e-4 0.003075897 0.03356754 3.12504e-4 0.005114972 0.03333485 3.12504e-4 0.007153987 0.03293269 3.12504e-4 0.009161353 0.03246366 3.12504e-4 0.01109844 0.03182876 3.12504e-4 0.01176458 0.03157687 3.12504e-4 0.01303839 0.03109502 3.12504e-4 0.01491171 0.03022402 3.12504e-4 0.01671439 0.02928894 3.12504e-4 0.01848858 0.02818495 3.12504e-4 0.02015721 0.02701365 3.12504e-4 0.02079814 0.02650696 3.12504e-4 0.02176278 0.02574396 3.12504e-4 0.02191776 0.02557045 3.12504e-4 0.02199912 0.02547913 3.12504e-4 0.02216458 0.02514398 3.12504e-4 0.02223163 0.02480888 3.12504e-4 0.02256745 0.01534742 3.12504e-4 0.02263414 0.01464545 3.12504e-4 0.02283561 0.01397478 3.12504e-4 0.02290797 0.01382189 3.12504e-4 0.02313548 0.01334005 3.12504e-4 0.02383756 0.01207053 3.12504e-4 0.02397447 0.01183837 3.12504e-4 0.02417236 0.0115022 3.12504e-4 0.02460628 0.01096647 3.12504e-4 0.02487826 0.0107457 3.12504e-4 0.02514147 0.01053196 3.12504e-4 0.02571016 0.01016443 3.12504e-4 0.02634519 0.009930253 3.12504e-4 0.02661645 0.009858965 3.12504e-4 0.02698051 0.009763062 3.12504e-4 0.02742856 0.009720623 3.12504e-4 0.0276829 0.009696424 3.12504e-4 0.03005641 0.009696483 3.12504e-4 0.03062474 0.009663283 3.12504e-4 0.03115934 0.00949651 3.12504e-4 0.03162735 0.009228408 3.12504e-4 0.03191345 0.009008944 3.12504e-4 0.03206235 0.008894681 3.12504e-4 0.03243029 0.008459389 3.12504e-4 0.03247731 0.008371353 3.12504e-4 0.03269773 0.007958471 3.12504e-4 0.03279078 0.007725894 3.12504e-4 0.03289812 0.007456779 3.12504e-4 0.03307747 0.006471753 3.12504e-4 0.03323256 0.005617916 3.12504e-4 0.03336274 0.004707753 3.12504e-4 0.03350007 0.003745317 3.12504e-4 0.03365617 0.001997828 3.12504e-4 0.03366732 0.001872837 3.12504e-4 0.03370094 1.07618e-6 3.12504e-4 0.0336675 -0.00187081 3.12504e-4 0.03350031 -0.003742992 3.12504e-4 0.03335809 -0.004740238 3.12504e-4 0.03323298 -0.005615174 3.12504e-4 0.03306573 -0.006536006 3.12504e-4 0.0328986 -0.007454216 3.12504e-4 0.03279876 -0.007704854 3.12504e-4 0.03269827 -0.007956266 3.12504e-4 0.03243088 -0.008457541 3.12504e-4 0.03206294 -0.008892178 3.12504e-4 0.03162831 -0.00922662 3.12504e-4 0.03116017 -0.009493708 3.12504e-4 0.0306254 -0.009660959 3.12504e-4 0.03005707 -0.009694457 3.12504e-4 0.02768361 -0.009694576 3.12504e-4 0.02698087 -0.009761571 3.12504e-4 0.02634584 -0.009928822 3.12504e-4 0.02571088 -0.01016312 3.12504e-4 0.02514219 -0.01053071 3.12504e-4 0.02460706 -0.0109657 3.12504e-4 0.02417314 -0.01149874 3.12504e-4 0.02400594 -0.01178258 3.12504e-4 0.0238384 -0.01206642 3.12504e-4 0.02313643 -0.01333993 3.12504e-4 0.02283656 -0.01397496 3.12504e-4 0.02263516 -0.01464205 3.12504e-4 0.02256852 -0.01534372 3.12504e-4 0.02223336 -0.0248056 3.12504e-4 0.02216631 -0.02514076 3.12504e-4 0.0220009 -0.02547585 3.12504e-4 0.02176457 -0.02574402 3.12504e-4 0.02015948 -0.02701371 3.12504e-4 0.01966202 -0.02736294 3.12504e-4 0.01849049 -0.0281853 3.12504e-4 0.01671642 -0.02928602 3.12504e-4 0.01491379 -0.0302245 3.12504e-4 0.01304054 -0.0310924 3.12504e-4 0.01110029 -0.03182977 3.12504e-4 0.009163558 -0.0324645 3.12504e-4 0.007156312 -0.03293055 3.12504e-4 0.005117237 -0.03333246 3.12504e-4 0.003310978 -0.03353905 3.12504e-4 0.003077864 -0.0335657 3.12504e-4 0.002952396 -0.03357398 3.12504e-4 0.001039147 -0.03369945 3.12504e-4 -0.001035153 -0.03369957 3.12504e-4 -0.003074228 -0.03356593 3.12504e-4 -0.005113184 -0.03333282 3.12504e-4 -0.007152259 -0.03293108 3.12504e-4 -0.009159684 -0.0324651 3.12504e-4 -0.01109999 -0.03183054 3.12504e-4 -0.01303666 -0.03109329 3.12504e-4 -0.01491004 -0.03022551 3.12504e-4 -0.01671624 -0.02928721 3.12504e-4 -0.01848721 -0.02818661 3.12504e-4 -0.02015936 -0.02701508 3.12504e-4 -0.02176451 -0.02574551 3.12504e-4 -0.02199739 -0.0254774 3.12504e-4 -0.02216678 -0.02514225 3.12504e-4 -0.02223378 -0.02480679 3.12504e-4 -0.02256578 -0.01534527 3.12504e-4 -0.02263277 -0.0146436 3.12504e-4 -0.02273994 -0.014288 3.12504e-4 -0.02283358 -0.01397651 3.12504e-4 -0.02297556 -0.01368004 3.12504e-4 -0.02313733 -0.01334154 3.12504e-4 -0.02383935 -0.01206803 0.03895181 0.03312766 -0.01029998 0.03897464 0.03300631 -0.01029998 0.03901684 0.03289026 -0.01029998 0.03907722 0.03278255 -0.01029998 0.03915423 0.03268599 -0.01029998 0.03924578 0.03260314 -0.01029998 0.03934955 0.0325362 -0.01029998 0.0394628 0.03248691 -0.01029998 0.03958249 0.03245657 -0.01029998 0.03970551 0.03244596 -0.01029998 0.03982865 0.03245538 -0.01029998 0.03828686 0.03321492 -0.01029998 0.03831189 0.03326672 -0.01029998 0.03834509 0.03331363 -0.01029998 0.03838568 0.03335434 -0.01029998 0.03843241 0.03338778 -0.01029998 0.03848409 0.03341299 -0.01029998 0.03853923 0.0334292 -0.01029998 0.03859633 0.03343611 -0.01029998 0.03865373 0.03343337 -0.01029998 0.03870993 0.03342115 -0.01029998 0.03876328 0.03339982 -0.01029998 0.03881233 0.03336989 -0.01029998 0.03885579 0.03333222 -0.01029998 0.03889232 0.03328782 -0.01029998 0.03892099 0.03323805 -0.01029998 0.03894102 0.03318411 -0.01029998 0.03726625 0.03279173 -0.01029998 0.03738278 0.03275084 -0.01029998 0.03750437 0.03272932 -0.01029998 0.03762787 0.03272777 -0.01029998 0.03774994 0.03274619 -0.01029998 0.03786748 0.03278404 -0.01029998 0.03797733 0.03284049 -0.01029998 0.03807663 0.03291386 -0.01029998 0.03816276 0.03300237 -0.01029998 0.03823345 0.03310358 -0.01029998 0.0368582 0.03225952 -0.01029998 0.03682589 0.03230702 -0.01029998 0.03680187 0.0323593 -0.01029998 0.03678691 0.03241479 -0.01029998 0.03678131 0.03247201 -0.01029998 0.03678536 0.03252935 -0.01029998 0.03679883 0.0325852 -0.01029998 0.03682142 0.03263807 -0.01029998 0.03685247 0.03268647 -0.01029998 0.0368911 0.03272897 -0.01029998 0.03693628 0.03276455 -0.01029998 0.03698676 0.03279203 -0.01029998 0.03704112 0.0328108 -0.01029998 0.03709781 0.03282028 -0.01029998 0.03715527 0.03282022 -0.01029998 0.03721195 0.03281062 -0.01029998 0.03671443 0.03116399 -0.01029998 0.03680807 0.03124451 -0.01029998 0.03688752 0.03133904 -0.01029998 0.03695064 0.0314452 -0.01029998 0.0369957 0.03156012 -0.01029998 0.03702169 0.03168088 -0.01029998 0.03702777 0.0318042 -0.01029998 0.03701382 0.03192692 -0.01029998 0.03698027 0.03204572 -0.01029998 0.03692793 0.03215759 -0.01029998 0.04008549 0.03183591 -0.01029998 0.03999185 0.03175544 -0.01029998 0.0399124 0.03166091 -0.01029998 0.03984934 0.03155475 -0.01029998 0.03980422 0.03143978 -0.01029998 0.03977829 0.03131908 -0.01029998 0.03977221 0.03119575 -0.01029998 0.0397861 0.03107303 -0.01029998 0.03981965 0.03095418 -0.01029998 0.03987199 0.03084236 -0.01029998 0.03994172 0.03074043 -0.01029998 0.03988593 0.03245967 -0.01029998 0.03994321 0.03245431 -0.01029998 0.03999876 0.03243952 -0.01029998 0.0400511 0.03241574 -0.01029998 0.04009872 0.03238362 -0.01029998 0.04014039 0.03234398 -0.01029998 0.0401749 0.03229802 -0.01029998 0.04020124 0.03224694 -0.01029998 0.04021877 0.03219217 -0.01029998 0.04022693 0.03213524 -0.01029998 0.04022556 0.03207778 -0.01029998 0.04021465 0.03202134 -0.01029998 0.04019451 0.03196752 -0.01029998 0.04016566 0.03191775 -0.01029998 0.040129 0.03187352 -0.01029998 0.03697133 0.03054457 -0.01029998 0.03691399 0.03054028 -0.01029998 0.03685677 0.03054565 -0.01029998 0.03680121 0.03056037 -0.01029998 0.03674888 0.03058421 -0.01029998 0.0367012 0.03061634 -0.01029998 0.03665953 0.03065598 -0.01029998 0.03662508 0.03070193 -0.01029998 0.03659868 0.03075301 -0.01029998 0.03658121 0.03080779 -0.01029998 0.03657299 0.03086465 -0.01029998 0.03657442 0.03092217 -0.01029998 0.03658533 0.03097856 -0.01029998 0.03660547 0.03103244 -0.01029998 0.03663426 0.03108215 -0.01029998 0.03667092 0.03112643 -0.01029998 0.03784817 0.02987229 -0.01029998 0.03782528 0.02999365 -0.01029998 0.03778314 0.0301097 -0.01029998 0.03772276 0.0302174 -0.01029998 0.03764575 0.03031396 -0.01029998 0.03755414 0.03039675 -0.01029998 0.03745037 0.03046375 -0.01029998 0.03733718 0.03051304 -0.01029998 0.03721749 0.03054338 -0.01029998 0.03709441 0.03055399 -0.01029998 0.03953367 0.03020823 -0.01029998 0.03941714 0.03024911 -0.01029998 0.03929555 0.03027063 -0.01029998 0.03917211 0.03027218 -0.01029998 0.03904998 0.03025376 -0.01029998 0.03893244 0.03021585 -0.01029998 0.03882259 0.03015947 -0.01029998 0.03872328 0.0300861 -0.01029998 0.03863716 0.02999758 -0.01029998 0.03856647 0.02989637 -0.01029998 0.03851306 0.02978503 -0.01029998 0.03997409 0.03069293 -0.01029998 0.03999805 0.03064066 -0.01029998 0.04001307 0.03058516 -0.01029998 0.04001861 0.03052794 -0.01029998 0.04001462 0.0304706 -0.01029998 0.04000109 0.03041476 -0.01029998 0.03997856 0.03036189 -0.01029998 0.0399475 0.03031349 -0.01029998 0.03990882 0.03027093 -0.01029998 0.03986364 0.0302354 -0.01029998 0.03981316 0.03020787 -0.01029998 0.03975886 0.03018915 -0.01029998 0.03970211 0.03017967 -0.01029998 0.03964465 0.03017973 -0.01029998 0.03958797 0.03018933 -0.01029998 0.03848809 0.02973324 -0.01029998 0.03845483 0.02968633 -0.01029998 0.03841429 0.02964562 -0.01029998 0.0383675 0.02961218 -0.01029998 0.03831583 0.02958697 -0.01029998 0.03826069 0.02957069 -0.01029998 0.03820365 0.02956384 -0.01029998 0.03814619 0.02956658 -0.01029998 0.03809005 0.02957874 -0.01029998 0.0380367 0.02960014 -0.01029998 0.03798758 0.02963006 -0.01029998 0.03794419 0.02966773 -0.01029998 0.0379076 0.02971208 -0.01029998 0.03787893 0.02976191 -0.01029998 0.03785896 0.02981579 -0.01029998 0.03895181 -0.02987229 -0.01029998 0.03897464 -0.02999365 -0.01029998 0.03901684 -0.0301097 -0.01029998 0.03907722 -0.0302174 -0.01029998 0.03915423 -0.03031396 -0.01029998 0.03924578 -0.03039675 -0.01029998 0.03934955 -0.03046375 -0.01029998 0.0394628 -0.03051304 -0.01029998 0.03958249 -0.03054338 -0.01029998 0.03970551 -0.03055399 -0.01029998 0.03982865 -0.03054457 -0.01029998 0.03828686 -0.02978503 -0.01029998 0.03831189 -0.02973324 -0.01029998 0.03834509 -0.02968633 -0.01029998 0.03838568 -0.02964562 -0.01029998 0.03843241 -0.02961218 -0.01029998 0.03848409 -0.02958697 -0.01029998 0.03853923 -0.02957069 -0.01029998 0.03859633 -0.02956384 -0.01029998 0.03865373 -0.02956658 -0.01029998 0.03870993 -0.02957874 -0.01029998 0.03876328 -0.02960014 -0.01029998 0.03881233 -0.02963006 -0.01029998 0.03885579 -0.02966773 -0.01029998 0.03889232 -0.02971208 -0.01029998 0.03892099 -0.02976191 -0.01029998 0.03894102 -0.02981579 -0.01029998 0.03726625 -0.03020823 -0.01029998 0.03738278 -0.03024911 -0.01029998 0.03750437 -0.03027063 -0.01029998 0.03762787 -0.03027218 -0.01029998 0.03774994 -0.03025376 -0.01029998 0.03786748 -0.03021585 -0.01029998 0.03797733 -0.03015947 -0.01029998 0.03807663 -0.0300861 -0.01029998 0.03816276 -0.02999758 -0.01029998 0.03823345 -0.02989637 -0.01029998 0.0368582 -0.03074043 -0.01029998 0.03682589 -0.03069293 -0.01029998 0.03680187 -0.03064066 -0.01029998 0.03678691 -0.03058516 -0.01029998 0.03678131 -0.03052794 -0.01029998 0.03678536 -0.0304706 -0.01029998 0.03679883 -0.03041476 -0.01029998 0.03682142 -0.03036189 -0.01029998 0.03685247 -0.03031349 -0.01029998 0.0368911 -0.03027093 -0.01029998 0.03693628 -0.0302354 -0.01029998 0.03698676 -0.03020787 -0.01029998 0.03704112 -0.03018915 -0.01029998 0.03709781 -0.03017967 -0.01029998 0.03715527 -0.03017973 -0.01029998 0.03721195 -0.03018933 -0.01029998 0.03671443 -0.03183591 -0.01029998 0.03680807 -0.03175544 -0.01029998 0.03688752 -0.03166091 -0.01029998 0.03695064 -0.03155475 -0.01029998 0.0369957 -0.03143978 -0.01029998 0.03702169 -0.03131908 -0.01029998 0.03702777 -0.03119575 -0.01029998 0.03701382 -0.03107303 -0.01029998 0.03698027 -0.03095418 -0.01029998 0.03692793 -0.03084236 -0.01029998 0.04008549 -0.03116399 -0.01029998 0.03999185 -0.03124451 -0.01029998 0.0399124 -0.03133904 -0.01029998 0.03984934 -0.0314452 -0.01029998 0.03980422 -0.03156012 -0.01029998 0.03977829 -0.03168088 -0.01029998 0.03977221 -0.0318042 -0.01029998 0.0397861 -0.03192692 -0.01029998 0.03981965 -0.03204572 -0.01029998 0.03987199 -0.03215759 -0.01029998 0.03994172 -0.03225952 -0.01029998 0.03988593 -0.03054028 -0.01029998 0.03994321 -0.03054565 -0.01029998 0.03999876 -0.03056037 -0.01029998 0.0400511 -0.03058421 -0.01029998 0.04009872 -0.03061634 -0.01029998 0.04014039 -0.03065598 -0.01029998 0.0401749 -0.03070193 -0.01029998 0.04020124 -0.03075301 -0.01029998 0.04021877 -0.03080779 -0.01029998 0.04022693 -0.03086465 -0.01029998 0.04022556 -0.03092217 -0.01029998 0.04021465 -0.03097856 -0.01029998 0.04019451 -0.03103244 -0.01029998 0.04016566 -0.03108215 -0.01029998 0.040129 -0.03112643 -0.01029998 0.03697133 -0.03245538 -0.01029998 0.03691399 -0.03245967 -0.01029998 0.03685677 -0.03245431 -0.01029998 0.03680121 -0.03243952 -0.01029998 0.03674888 -0.03241574 -0.01029998 0.0367012 -0.03238362 -0.01029998 0.03665953 -0.03234398 -0.01029998 0.03662508 -0.03229802 -0.01029998 0.03659868 -0.03224694 -0.01029998 0.03658121 -0.03219217 -0.01029998 0.03657299 -0.03213524 -0.01029998 0.03657442 -0.03207778 -0.01029998 0.03658533 -0.03202134 -0.01029998 0.03660547 -0.03196752 -0.01029998 0.03663426 -0.03191775 -0.01029998 0.03667092 -0.03187352 -0.01029998 0.03784817 -0.03312766 -0.01029998 0.03782528 -0.03300631 -0.01029998 0.03778314 -0.03289026 -0.01029998 0.03772276 -0.03278255 -0.01029998 0.03764575 -0.03268599 -0.01029998 0.03755414 -0.03260314 -0.01029998 0.03745037 -0.0325362 -0.01029998 0.03733718 -0.03248691 -0.01029998 0.03721749 -0.03245657 -0.01029998 0.03709441 -0.03244596 -0.01029998 0.03953367 -0.03279173 -0.01029998 0.03941714 -0.03275084 -0.01029998 0.03929555 -0.03272932 -0.01029998 0.03917211 -0.03272777 -0.01029998 0.03904998 -0.03274619 -0.01029998 0.03893244 -0.03278404 -0.01029998 0.03882259 -0.03284049 -0.01029998 0.03872328 -0.03291386 -0.01029998 0.03863716 -0.03300237 -0.01029998 0.03856647 -0.03310358 -0.01029998 0.03851306 -0.03321492 -0.01029998 0.03997409 -0.03230702 -0.01029998 0.03999805 -0.0323593 -0.01029998 0.04001307 -0.03241479 -0.01029998 0.04001861 -0.03247201 -0.01029998 0.04001462 -0.03252935 -0.01029998 0.04000109 -0.0325852 -0.01029998 0.03997856 -0.03263807 -0.01029998 0.0399475 -0.03268647 -0.01029998 0.03990882 -0.03272897 -0.01029998 0.03986364 -0.03276455 -0.01029998 0.03981316 -0.03279203 -0.01029998 0.03975886 -0.0328108 -0.01029998 0.03970211 -0.03282028 -0.01029998 0.03964465 -0.03282022 -0.01029998 0.03958797 -0.03281062 -0.01029998 0.03848809 -0.03326672 -0.01029998 0.03845483 -0.03331363 -0.01029998 0.03841429 -0.03335434 -0.01029998 0.0383675 -0.03338778 -0.01029998 0.03831583 -0.03341299 -0.01029998 0.03826069 -0.0334292 -0.01029998 0.03820365 -0.03343611 -0.01029998 0.03814619 -0.03343337 -0.01029998 0.03809005 -0.03342115 -0.01029998 0.0380367 -0.03339982 -0.01029998 0.03798758 -0.03336989 -0.01029998 0.03794419 -0.03333222 -0.01029998 0.0379076 -0.03328782 -0.01029998 0.03787893 -0.03323805 -0.01029998 0.03785896 -0.03318411 -0.01029998 0.04938197 0.01904964 -0.01097995 0.04937511 0.01904964 -0.01097995 0.04917216 0.01904034 -0.01097995 0.04884743 0.01898419 -0.01097995 0.04855811 0.01888489 -0.01097995 0.04830539 0.01875013 -0.01097995 0.04808664 0.01858365 -0.01097995 0.04807704 0.01857495 -0.01097995 0.04789769 0.01838254 -0.01097995 0.04775267 0.01816457 -0.01097995 0.04764264 0.0179187 -0.01097995 0.04757118 0.01763975 -0.01097995 0.04754638 0.0173369 -0.01097995 0.04755097 0.01720768 -0.01097995 0.04759454 0.01692503 -0.01097995 0.04768246 0.01665955 -0.01097995 0.04781419 0.01641207 -0.01097995 0.04798901 0.01618659 -0.01097995 0.04818582 0.01600396 -0.01097995 0.04843801 0.01583677 -0.01097995 0.04872357 0.01571041 -0.01097995 0.04903662 0.0156309 -0.01097995 0.04936832 0.01560354 -0.01097995 0.04959183 0.0156154 -0.01097995 0.04990744 0.015675 -0.01097995 0.05019271 0.01577872 -0.01097995 0.05044513 0.01592022 -0.01097995 0.05066317 0.01609402 -0.01097995 0.05083394 0.01628071 -0.01097995 0.05098295 0.01650661 -0.01097995 0.05109453 0.01675814 -0.01097995 0.05116569 0.01703727 -0.01097995 0.05119031 0.0173369 -0.01097995 0.05118596 0.01746237 -0.01097995 0.05114322 0.01774138 -0.01097995 0.0510568 0.01800346 -0.01097995 0.05092746 0.0182476 -0.01097995 0.05075597 0.01846987 -0.01097995 0.05056113 0.01865148 -0.01097995 0.05031287 0.0188167 -0.01097995 0.05002981 0.01894235 -0.01097995 0.04971629 0.01902216 -0.01097995 0.04938197 0.00673139 -0.01097995 0.04937511 0.00673139 -0.01097995 0.04915302 0.006720185 -0.01097995 0.04883247 0.006661772 -0.01097995 0.04854762 0.00656116 -0.01097995 0.04829907 0.006425619 -0.01097995 0.04808616 0.006260573 -0.01097995 0.04790884 0.006070315 -0.01097995 0.04776459 0.005853593 -0.01097995 0.04765528 0.005609273 -0.01097995 0.04758435 0.00533241 -0.01097995 0.04755979 0.00503236 -0.01097995 0.04756402 0.004905879 -0.01097995 0.04760688 0.004618704 -0.01097995 0.04769319 0.004352271 -0.01097995 0.04782116 0.0041067 -0.01097995 0.04798996 0.003884434 -0.01097995 0.04818856 0.003697216 -0.01097995 0.04843413 0.003532946 -0.01097995 0.04871582 0.00340718 -0.01097995 0.04903101 0.003326773 -0.01097995 0.04936832 0.003299057 -0.01097995 0.04960548 0.00331211 -0.01097995 0.04991924 0.003372669 -0.01097995 0.0502004 0.003475785 -0.01097995 0.05044817 0.003615438 -0.01097995 0.05066227 0.003786921 -0.01097995 0.05082285 0.003962159 -0.01097995 0.05097228 0.004186868 -0.01097995 0.05108535 0.004440128 -0.01097995 0.05115824 0.004725098 -0.01097995 0.05118346 0.00503236 -0.01097995 0.05117923 0.005154073 -0.01097995 0.0511372 0.005429685 -0.01097995 0.05105161 0.005689561 -0.01097995 0.05092304 0.005932152 -0.01097995 0.0507524 0.006153404 -0.01097995 0.05055785 0.006334722 -0.01097995 0.05031049 0.006499171 -0.01097995 0.05002856 0.006624341 -0.01097995 0.04971587 0.006703913 -0.01097995 0.05054885 4.59826e-4 -0.01097995 0.05054211 4.59826e-4 -0.01097995 0.05047202 4.56585e-4 -0.01097995 0.05036199 4.37161e-4 -0.01097995 0.05026072 4.00928e-4 -0.01097995 0.05017626 3.53879e-4 -0.01097995 0.05009365 2.88404e-4 -0.01097995 0.05002373 2.11654e-4 -0.01097995 0.04996371 1.20636e-4 -0.01097995 0.04991424 9.45093e-6 -0.01097995 0.04987359 -1.63187e-4 -0.01097995 0.0498597 -3.52168e-4 -0.01097995 0.04986053 -4.41817e-4 -0.01097995 0.04986655 -5.36413e-4 -0.01097995 0.05119717 -5.36413e-4 -0.01097995 0.05121082 -2.63412e-4 -0.01097995 0.0512095 -3.40132e-4 -0.01097995 0.05120509 -4.10126e-4 -0.01097995 0.05119973 -1.08818e-4 -0.01097995 0.05117195 1.50907e-5 -0.01097995 0.05113214 1.17508e-4 -0.01097995 0.05108273 2.03112e-4 -0.01097995 0.05102258 2.76988e-4 -0.01097995 0.05095314 3.38172e-4 -0.01097995 0.05087041 3.89269e-4 -0.01097995 0.05078202 4.2546e-4 -0.01097995 0.05067718 4.50184e-4 -0.01097995 0.04832428 6.37201e-4 -0.01097995 0.04831737 6.37201e-4 -0.01097995 0.04830276 6.37069e-4 -0.01097995 0.04818445 6.25785e-4 -0.01097995 0.04807084 5.95524e-4 -0.01097995 0.04797619 5.52677e-4 -0.01097995 0.04788833 4.94844e-4 -0.01097995 0.04780304 4.16678e-4 -0.01097995 0.0477308 3.25503e-4 -0.01097995 0.04766899 2.14304e-4 -0.01097995 0.04762357 1.01942e-4 -0.01097995 0.0475831 -6.71782e-5 -0.01097995 0.04756677 -2.63412e-4 -0.01097995 0.0475685 -3.92218e-4 -0.01097995 0.04758042 -5.16078e-4 -0.01097995 0.04758358 -5.23839e-4 -0.01097995 0.04758578 -5.27575e-4 -0.01097995 0.04758763 -5.29764e-4 -0.01097995 0.04758977 -5.31592e-4 -0.01097995 0.04759204 -5.32976e-4 -0.01097995 0.04759544 -5.34325e-4 -0.01097995 0.0476005 -5.35426e-4 -0.01097995 0.04760909 -5.36183e-4 -0.01097995 0.04762822 -5.36413e-4 -0.01097995 0.04904079 -5.36413e-4 -0.01097995 0.04905021 -4.13617e-4 -0.01097995 0.04905444 -2.90616e-4 -0.01097995 0.04903656 -7.66605e-5 -0.01097995 0.04899299 1.32143e-4 -0.01097995 0.04895085 2.33528e-4 -0.01097995 0.04888784 3.40012e-4 -0.01097995 0.04881536 4.28593e-4 -0.01097995 0.04873055 5.04266e-4 -0.01097995 0.04864305 5.60097e-4 -0.01097995 0.04854655 6.01719e-4 -0.01097995 0.04843741 6.28479e-4 -0.01097995 0.04938197 -0.003348529 -0.01097995 0.04937511 -0.003348529 -0.01097995 0.04915302 -0.003359735 -0.01097995 0.04883247 -0.003418147 -0.01097995 0.04854762 -0.00351876 -0.01097995 0.04829907 -0.00365436 -0.01097995 0.04808616 -0.003819346 -0.01097995 0.04790884 -0.004009604 -0.01097995 0.04776459 -0.004226326 -0.01097995 0.04765528 -0.004470646 -0.01097995 0.04758435 -0.004747509 -0.01097995 0.04755979 -0.005047559 -0.01097995 0.04756402 -0.00517416 -0.01097995 0.04760688 -0.005461335 -0.01097995 0.04769319 -0.005727708 -0.01097995 0.04782122 -0.005973279 -0.01097995 0.04798996 -0.006195545 -0.01097995 0.0481885 -0.006382644 -0.01097995 0.04843407 -0.006546914 -0.01097995 0.04871577 -0.00667268 -0.01097995 0.04903101 -0.006753146 -0.01097995 0.04936832 -0.006780862 -0.01097995 0.04960548 -0.006767809 -0.01097995 0.04991924 -0.006707251 -0.01097995 0.0502004 -0.006604135 -0.01097995 0.05044817 -0.006464481 -0.01097995 0.05066227 -0.006292998 -0.01097995 0.05082285 -0.006117761 -0.01097995 0.05097228 -0.005893051 -0.01097995 0.05108535 -0.005639791 -0.01097995 0.05115824 -0.005354821 -0.01097995 0.05118346 -0.005047559 -0.01097995 0.05117923 -0.004925608 -0.01097995 0.0511372 -0.004649996 -0.01097995 0.05105155 -0.00439012 -0.01097995 0.05092298 -0.004147589 -0.01097995 0.05075234 -0.003926396 -0.01097995 0.05055791 -0.003745257 -0.01097995 0.05031061 -0.003580808 -0.01097995 0.05002862 -0.003455638 -0.01097995 0.04971593 -0.003376007 -0.01097995 0.05120396 -0.01043212 -0.01097995 0.05119609 -0.01058876 -0.01097995 0.05119031 -0.01070493 -0.01097995 0.0495662 -0.01070493 -0.01097995 0.04955935 -0.01050704 -0.01097995 0.04956018 -0.01061117 -0.01097995 0.0496959 -0.009988427 -0.01097995 0.04966974 -0.01003557 -0.01097995 0.04961454 -0.01016831 -0.01097995 0.04957371 -0.01033413 -0.01097995 0.05041915 -0.009599447 -0.01097995 0.05036652 -0.009600758 -0.01097995 0.05021297 -0.009620428 -0.01097995 0.05007708 -0.009661376 -0.01097995 0.04995512 -0.009722292 -0.01097995 0.04985058 -0.00979948 -0.01097995 0.0497601 -0.009894132 -0.01097995 0.050426 -0.009599447 -0.01097995 0.05119925 -0.01032119 -0.01097995 0.0511747 -0.010167 -0.01097995 0.05113476 -0.01004093 -0.01097995 0.05108278 -0.009935915 -0.01097995 0.05101937 -0.009846687 -0.01097995 0.05099231 -0.009816408 -0.01097995 0.05091118 -0.009744405 -0.01097995 0.05081278 -0.009683609 -0.01097995 0.05070793 -0.009640753 -0.01097995 0.05058199 -0.009611189 -0.01097995 0.04014021 -0.03181725 0.009499967 0.04019105 -0.03179037 0.009499967 0.04023671 -0.0317555 0.009499967 0.03960382 -0.03080493 0.009499967 0.03955096 -0.03069329 0.009499967 0.03886044 -0.02995491 0.009499967 0.03951686 -0.03057461 0.009499967 0.03719609 -0.03219503 0.009499967 0.03724896 -0.03230661 0.009499967 0.03815704 -0.03007006 0.009499967 0.03724896 -0.03069329 0.009499967 0.03719609 -0.03080493 0.009499967 0.03683167 -0.03187376 0.009499967 0.03996831 -0.0311262 0.009499967 0.03985869 -0.03106927 0.009499967 0.03975975 -0.03099542 0.009499967 0.03967404 -0.03090649 0.009499967 0.03728312 -0.03057461 0.009499967 0.03770285 -0.02978157 0.009499967 0.0372976 -0.03045201 0.009499967 0.03729212 -0.03032863 0.009499967 0.03875637 -0.0300213 0.009499967 0.03827691 -0.03009986 0.009499967 0.03955096 -0.03230661 0.009499967 0.03960382 -0.03219503 0.009499967 0.03967404 -0.03209346 0.009499967 0.03975975 -0.03200453 0.009499967 0.03950232 -0.03045201 0.009499967 0.0395078 -0.03032863 0.009499967 0.03895241 -0.02987247 0.009499967 0.03953319 -0.03020781 0.009499967 0.03954488 -0.03015148 0.009499967 0.03758949 -0.02976512 0.009499967 0.03753232 -0.0297712 0.009499967 0.03726679 -0.03020781 0.009499967 0.03712588 -0.03090649 0.009499967 0.03704017 -0.03099542 0.009499967 0.03694123 -0.03106927 0.009499967 0.03804361 -0.03297865 0.009499967 0.0372976 -0.03254795 0.009499967 0.03729212 -0.03267127 0.009499967 0.03864288 -0.03007006 0.009499967 0.03852307 -0.03009986 0.009499967 0.03839999 -0.03010988 0.009499967 0.03815704 -0.03292989 0.009499967 0.03728312 -0.03242528 0.009499967 0.03950232 -0.03254795 0.009499967 0.03875637 -0.03297865 0.009499967 0.03886044 -0.03304505 0.009499967 0.03951686 -0.03242528 0.009499967 0.03864288 -0.03292989 0.009499967 0.04030764 -0.0316655 0.009499967 0.04033094 -0.03161293 0.009499967 0.04008561 -0.0311647 0.009499967 0.03764688 -0.02976858 0.009499967 0.03747695 -0.0297867 0.009499967 0.03742498 -0.0298112 0.009499967 0.03737777 -0.02984404 0.009499967 0.03733664 -0.02988421 0.009499967 0.03730279 -0.02993065 0.009499967 0.0372771 -0.02998208 0.009499967 0.03726035 -0.03003704 0.009499967 0.0372529 -0.03009408 0.009499967 0.0372551 -0.03015148 0.009499967 0.03694123 -0.03193068 0.009499967 0.03804361 -0.0300213 0.009499967 0.03704017 -0.03200453 0.009499967 0.03712588 -0.03209346 0.009499967 0.03954702 -0.03009408 0.009499967 0.03953963 -0.03003704 0.009499967 0.03952282 -0.02998208 0.009499967 0.03827691 -0.03290009 0.009499967 0.03839999 -0.03289008 0.009499967 0.03852307 -0.03290009 0.009499967 0.03985869 -0.03193068 0.009499967 0.03996831 -0.03187376 0.009499967 0.04008561 -0.03183525 0.009499967 0.04027593 -0.03171348 0.009499967 0.04034519 -0.03155726 0.009499967 0.04034996 -0.03149998 0.009499967 0.04034519 -0.0314427 0.009499967 0.04033094 -0.03138697 0.009499967 0.04030764 -0.03133445 0.009499967 0.04027593 -0.03128647 0.009499967 0.04023671 -0.03124445 0.009499967 0.04019105 -0.03120952 0.009499967 0.04014021 -0.0311827 0.009499967 0.03949713 -0.02993065 0.009499967 0.03946328 -0.02988421 0.009499967 0.03899532 -0.02983427 0.009499967 0.03904402 -0.02980363 0.009499967 0.03793948 -0.02995491 0.009499967 0.03784751 -0.02987247 0.009499967 0.0378046 -0.02983427 0.009499967 0.03753232 -0.03322875 0.009499967 0.03758949 -0.03323483 0.009499967 0.03726679 -0.03279215 0.009499967 0.03942221 -0.02984404 0.009499967 0.03937494 -0.0298112 0.009499967 0.03915309 -0.02976858 0.009499967 0.03932297 -0.0297867 0.009499967 0.03921043 -0.02976512 0.009499967 0.03926759 -0.0297712 0.009499967 0.03683167 -0.0311262 0.009499967 0.03671431 -0.0311647 0.009499967 0.03671431 -0.03183525 0.009499967 0.03665971 -0.0311827 0.009499967 0.03660887 -0.03120952 0.009499967 0.03656321 -0.03124445 0.009499967 0.03652399 -0.03128647 0.009499967 0.03649228 -0.03133445 0.009499967 0.03646898 -0.03138697 0.009499967 0.03645479 -0.0314427 0.009499967 0.03644996 -0.03149998 0.009499967 0.03775596 -0.02980363 0.009499967 0.03946328 -0.03311574 0.009499967 0.03949713 -0.03306931 0.009499967 0.03895241 -0.03312742 0.009499967 0.03909707 -0.02978157 0.009499967 0.03645479 -0.03155726 0.009499967 0.03646898 -0.03161293 0.009499967 0.03649228 -0.0316655 0.009499967 0.03652399 -0.03171348 0.009499967 0.03656321 -0.0317555 0.009499967 0.03665971 -0.03181725 0.009499967 0.03660887 -0.03179037 0.009499967 0.03764688 -0.03323137 0.009499967 0.03770285 -0.03321838 0.009499967 0.03775596 -0.03319633 0.009499967 0.0378046 -0.03316569 0.009499967 0.03784751 -0.03312742 0.009499967 0.03793948 -0.03304505 0.009499967 0.03952282 -0.03301787 0.009499967 0.03953963 -0.03296291 0.009499967 0.03954702 -0.03290587 0.009499967 0.03737777 -0.03315591 0.009499967 0.03733664 -0.03311574 0.009499967 0.0372551 -0.03284841 0.009499967 0.03742498 -0.0331887 0.009499967 0.03747695 -0.03321319 0.009499967 0.03954488 -0.03284841 0.009499967 0.03953319 -0.03279215 0.009499967 0.0395078 -0.03267127 0.009499967 0.0372771 -0.03301787 0.009499967 0.03730279 -0.03306931 0.009499967 0.03726035 -0.03296291 0.009499967 0.0372529 -0.03290587 0.009499967 0.03932297 -0.03321319 0.009499967 0.03937494 -0.0331887 0.009499967 0.03942221 -0.03315591 0.009499967 0.03899532 -0.03316569 0.009499967 0.03904402 -0.03319633 0.009499967 0.03921043 -0.03323483 0.009499967 0.03909707 -0.03321838 0.009499967 0.03915309 -0.03323137 0.009499967 0.03926759 -0.03322875 0.009499967 0.03895241 0.03312742 0.009499967 0.03886044 0.03304505 0.009499967 0.0395078 0.03267127 0.009499967 0.03967404 0.03209346 0.009499967 0.03960382 0.03219503 0.009499967 0.03955096 0.03230661 0.009499967 0.03729212 0.03267127 0.009499967 0.0372976 0.03254795 0.009499967 0.03770285 0.03321838 0.009499967 0.03728312 0.03242528 0.009499967 0.03724896 0.03230661 0.009499967 0.04008561 0.03183525 0.009499967 0.03996831 0.03187376 0.009499967 0.04023671 0.03124445 0.009499967 0.03985869 0.03193068 0.009499967 0.03975975 0.03200453 0.009499967 0.03951686 0.03242528 0.009499967 0.03950232 0.03254795 0.009499967 0.03719609 0.03219503 0.009499967 0.03683167 0.0311262 0.009499967 0.03784751 0.02987247 0.009499967 0.03793948 0.02995491 0.009499967 0.03726679 0.03020781 0.009499967 0.03815704 0.03007006 0.009499967 0.03827691 0.03009986 0.009499967 0.03729212 0.03032863 0.009499967 0.03960382 0.03080493 0.009499967 0.03784751 0.03312742 0.009499967 0.0378046 0.03316569 0.009499967 0.04033094 0.03161293 0.009499967 0.04030764 0.0316655 0.009499967 0.04027593 0.03171348 0.009499967 0.04023671 0.0317555 0.009499967 0.03726679 0.03279215 0.009499967 0.03764688 0.03323137 0.009499967 0.03758949 0.03323483 0.009499967 0.03804361 0.0300213 0.009499967 0.03839999 0.03289008 0.009499967 0.03827691 0.03290009 0.009499967 0.03815704 0.03292989 0.009499967 0.04019105 0.03179037 0.009499967 0.04014021 0.03181725 0.009499967 0.03753232 0.03322875 0.009499967 0.03747695 0.03321319 0.009499967 0.03730279 0.03306931 0.009499967 0.03712588 0.03209346 0.009499967 0.03704017 0.03200453 0.009499967 0.03694123 0.03193068 0.009499967 0.03954488 0.03015148 0.009499967 0.03954702 0.03009408 0.009499967 0.03953963 0.03003704 0.009499967 0.03694123 0.03106927 0.009499967 0.03704017 0.03099542 0.009499967 0.03712588 0.03090649 0.009499967 0.03775596 0.03319633 0.009499967 0.03967404 0.03090649 0.009499967 0.03975975 0.03099542 0.009499967 0.03864288 0.03292989 0.009499967 0.03985869 0.03106927 0.009499967 0.03996831 0.0311262 0.009499967 0.04008561 0.0311647 0.009499967 0.04014021 0.0311827 0.009499967 0.03852307 0.03290009 0.009499967 0.03804361 0.03297865 0.009499967 0.03793948 0.03304505 0.009499967 0.04027593 0.03128647 0.009499967 0.04030764 0.03133445 0.009499967 0.04033094 0.03138697 0.009499967 0.04034519 0.0314427 0.009499967 0.04034996 0.03149998 0.009499967 0.04034519 0.03155726 0.009499967 0.03953319 0.03279215 0.009499967 0.03954488 0.03284841 0.009499967 0.03899532 0.03316569 0.009499967 0.03904402 0.03319633 0.009499967 0.0372771 0.03301787 0.009499967 0.03726035 0.03296291 0.009499967 0.03719609 0.03080493 0.009499967 0.03724896 0.03069329 0.009499967 0.03955096 0.03069329 0.009499967 0.03728312 0.03057461 0.009499967 0.04019105 0.03120952 0.009499967 0.03742498 0.0331887 0.009499967 0.03737777 0.03315591 0.009499967 0.03733664 0.03311574 0.009499967 0.0372529 0.03290587 0.009499967 0.0372551 0.03284841 0.009499967 0.03644996 0.03149998 0.009499967 0.03645479 0.0314427 0.009499967 0.03671431 0.0311647 0.009499967 0.03839999 0.03010988 0.009499967 0.03852307 0.03009986 0.009499967 0.03864288 0.03007006 0.009499967 0.03875637 0.0300213 0.009499967 0.03886044 0.02995491 0.009499967 0.03895241 0.02987247 0.009499967 0.03875637 0.03297865 0.009499967 0.03953963 0.03296291 0.009499967 0.03952282 0.03301787 0.009499967 0.03909707 0.03321838 0.009499967 0.03949713 0.03306931 0.009499967 0.03946328 0.03311574 0.009499967 0.03660887 0.03179037 0.009499967 0.03656321 0.0317555 0.009499967 0.03652399 0.03171348 0.009499967 0.03649228 0.0316655 0.009499967 0.03726035 0.03003704 0.009499967 0.0372771 0.02998208 0.009499967 0.0378046 0.02983427 0.009499967 0.03954702 0.03290587 0.009499967 0.03921043 0.03323483 0.009499967 0.03937494 0.0331887 0.009499967 0.03926759 0.03322875 0.009499967 0.03932297 0.03321319 0.009499967 0.03942221 0.03315591 0.009499967 0.03915309 0.03323137 0.009499967 0.03646898 0.03161293 0.009499967 0.03645479 0.03155726 0.009499967 0.0372529 0.03009408 0.009499967 0.03730279 0.02993065 0.009499967 0.03733664 0.02988421 0.009499967 0.03737777 0.02984404 0.009499967 0.03753232 0.0297712 0.009499967 0.03758949 0.02976512 0.009499967 0.03764688 0.02976858 0.009499967 0.03683167 0.03187376 0.009499967 0.03671431 0.03183525 0.009499967 0.03665971 0.03181725 0.009499967 0.03646898 0.03138697 0.009499967 0.03649228 0.03133445 0.009499967 0.03652399 0.03128647 0.009499967 0.03656321 0.03124445 0.009499967 0.03660887 0.03120952 0.009499967 0.03665971 0.0311827 0.009499967 0.03953319 0.03020781 0.009499967 0.0395078 0.03032863 0.009499967 0.0372976 0.03045201 0.009499967 0.03950232 0.03045201 0.009499967 0.03951686 0.03057461 0.009499967 0.03742498 0.0298112 0.009499967 0.03747695 0.0297867 0.009499967 0.03775596 0.02980363 0.009499967 0.03899532 0.02983427 0.009499967 0.03949713 0.02993065 0.009499967 0.03952282 0.02998208 0.009499967 0.0372551 0.03015148 0.009499967 0.03770285 0.02978157 0.009499967 0.03904402 0.02980363 0.009499967 0.03909707 0.02978157 0.009499967 0.03915309 0.02976858 0.009499967 0.03921043 0.02976512 0.009499967 0.03926759 0.0297712 0.009499967 0.03932297 0.0297867 0.009499967 0.03937494 0.0298112 0.009499967 0.03942221 0.02984404 0.009499967 0.03946328 0.02988421 0.009499967 0.04789769 -0.01838254 0.01099997 0.04807704 -0.01857495 0.01099997 0.04936832 -0.01560354 0.01099997 0.04990744 -0.015675 0.01099997 0.04959183 -0.0156154 0.01099997 0.04938197 -0.01904964 0.01099997 0.04937511 -0.01904964 0.01099997 0.05083394 -0.01628071 0.01099997 0.05066317 -0.01609402 0.01099997 0.04754638 -0.0173369 0.01099997 0.04757118 -0.01763975 0.01099997 0.04808664 -0.01858365 0.01099997 0.04830539 -0.01875013 0.01099997 0.04855811 -0.01888489 0.01099997 0.04884743 -0.01898419 0.01099997 0.04917216 -0.01904034 0.01099997 0.04755097 -0.01720768 0.01099997 0.04903662 -0.0156309 0.01099997 0.04872357 -0.01571041 0.01099997 0.04764264 -0.0179187 0.01099997 0.04775267 -0.01816457 0.01099997 0.05118596 -0.01746237 0.01099997 0.04971629 -0.01902216 0.01099997 0.05002981 -0.01894235 0.01099997 0.04843801 -0.01583677 0.01099997 0.04818582 -0.01600396 0.01099997 0.04798901 -0.01618659 0.01099997 0.04781419 -0.01641207 0.01099997 0.04768246 -0.01665955 0.01099997 0.04759454 -0.01692503 0.01099997 0.05031287 -0.0188167 0.01099997 0.05056113 -0.01865148 0.01099997 0.05075597 -0.01846987 0.01099997 0.05092746 -0.0182476 0.01099997 0.0510568 -0.01800346 0.01099997 0.05114322 -0.01774138 0.01099997 0.05119031 -0.0173369 0.01099997 0.05116569 -0.01703727 0.01099997 0.05044513 -0.01592022 0.01099997 0.05019271 -0.01577872 0.01099997 0.05109453 -0.01675814 0.01099997 0.05098295 -0.01650661 0.01099997 0.04760688 -0.004618704 0.01099997 0.04756402 -0.004905879 0.01099997 0.04937511 -0.00673139 0.01099997 0.04755979 -0.00503236 0.01099997 0.04854762 -0.00656116 0.01099997 0.04883247 -0.006661772 0.01099997 0.04915302 -0.006720185 0.01099997 0.05082285 -0.003962159 0.01099997 0.05066227 -0.003786921 0.01099997 0.04938197 -0.00673139 0.01099997 0.04798996 -0.003884434 0.01099997 0.04782116 -0.0041067 0.01099997 0.04769319 -0.004352271 0.01099997 0.04991924 -0.003372669 0.01099997 0.04960548 -0.00331211 0.01099997 0.04936832 -0.003299057 0.01099997 0.04903101 -0.003326773 0.01099997 0.04871582 -0.00340718 0.01099997 0.05117923 -0.005154073 0.01099997 0.04971587 -0.006703913 0.01099997 0.05002856 -0.006624341 0.01099997 0.04843413 -0.003532946 0.01099997 0.04818856 -0.003697216 0.01099997 0.04790884 -0.006070315 0.01099997 0.04808616 -0.006260573 0.01099997 0.04829907 -0.006425619 0.01099997 0.05031049 -0.006499171 0.01099997 0.05055785 -0.006334722 0.01099997 0.0507524 -0.006153404 0.01099997 0.05092304 -0.005932152 0.01099997 0.05105161 -0.005689561 0.01099997 0.0511372 -0.005429685 0.01099997 0.05118346 -0.00503236 0.01099997 0.05115824 -0.004725098 0.01099997 0.05044817 -0.003615438 0.01099997 0.0502004 -0.003475785 0.01099997 0.05108535 -0.004440128 0.01099997 0.05097228 -0.004186868 0.01099997 0.04776459 -0.005853593 0.01099997 0.04758435 -0.00533241 0.01099997 0.04765528 -0.005609273 0.01099997 0.05119717 5.36413e-4 0.01099997 0.04986655 5.36413e-4 0.01099997 0.04986053 4.41817e-4 0.01099997 0.05121082 2.63412e-4 0.01099997 0.0512095 3.40132e-4 0.01099997 0.05054885 -4.59826e-4 0.01099997 0.05054211 -4.59826e-4 0.01099997 0.04996371 -1.20636e-4 0.01099997 0.05002373 -2.11654e-4 0.01099997 0.04991424 -9.45093e-6 0.01099997 0.05113214 -1.17508e-4 0.01099997 0.05117195 -1.50907e-5 0.01099997 0.05119973 1.08818e-4 0.01099997 0.05120509 4.10126e-4 0.01099997 0.0498597 3.52168e-4 0.01099997 0.04987359 1.63187e-4 0.01099997 0.05009365 -2.88404e-4 0.01099997 0.05017626 -3.53879e-4 0.01099997 0.05026072 -4.00928e-4 0.01099997 0.05036199 -4.37161e-4 0.01099997 0.05047202 -4.56585e-4 0.01099997 0.05067718 -4.50184e-4 0.01099997 0.05078202 -4.2546e-4 0.01099997 0.05108273 -2.03112e-4 0.01099997 0.05087041 -3.89269e-4 0.01099997 0.05102258 -2.76988e-4 0.01099997 0.05095314 -3.38172e-4 0.01099997 0.04905021 4.13617e-4 0.01099997 0.04904079 5.36413e-4 0.01099997 0.04762822 5.36413e-4 0.01099997 0.04905444 2.90616e-4 0.01099997 0.04756677 2.63412e-4 0.01099997 0.04760909 5.36183e-4 0.01099997 0.0475685 3.92218e-4 0.01099997 0.0476005 5.35426e-4 0.01099997 0.04758042 5.16078e-4 0.01099997 0.04830276 -6.37069e-4 0.01099997 0.04766899 -2.14304e-4 0.01099997 0.0477308 -3.25503e-4 0.01099997 0.04780304 -4.16678e-4 0.01099997 0.04788833 -4.94844e-4 0.01099997 0.04797619 -5.52677e-4 0.01099997 0.04807084 -5.95524e-4 0.01099997 0.0475831 6.71782e-5 0.01099997 0.04762357 -1.01942e-4 0.01099997 0.04818445 -6.25785e-4 0.01099997 0.04759544 5.34325e-4 0.01099997 0.04758578 5.27575e-4 0.01099997 0.04758358 5.23839e-4 0.01099997 0.04895085 -2.33528e-4 0.01099997 0.04899299 -1.32143e-4 0.01099997 0.04903656 7.66605e-5 0.01099997 0.04873055 -5.04266e-4 0.01099997 0.04881536 -4.28593e-4 0.01099997 0.04888784 -3.40012e-4 0.01099997 0.04759204 5.32976e-4 0.01099997 0.04758977 5.31592e-4 0.01099997 0.04758763 5.29764e-4 0.01099997 0.04831737 -6.37201e-4 0.01099997 0.04832428 -6.37201e-4 0.01099997 0.04843741 -6.28479e-4 0.01099997 0.04854655 -6.01719e-4 0.01099997 0.04864305 -5.60097e-4 0.01099997 0.04760688 0.005461335 0.01099997 0.04756402 0.00517416 0.01099997 0.04937511 0.003348529 0.01099997 0.04755979 0.005047559 0.01099997 0.04854762 0.00351876 0.01099997 0.04883247 0.003418147 0.01099997 0.04915302 0.003359735 0.01099997 0.05082285 0.006117761 0.01099997 0.05066227 0.006292998 0.01099997 0.04938197 0.003348529 0.01099997 0.04798996 0.006195545 0.01099997 0.04782122 0.005973279 0.01099997 0.04769319 0.005727708 0.01099997 0.04991924 0.006707251 0.01099997 0.04960548 0.006767809 0.01099997 0.04936832 0.006780862 0.01099997 0.04903101 0.006753146 0.01099997 0.04871577 0.00667268 0.01099997 0.05117923 0.004925608 0.01099997 0.04971593 0.003376007 0.01099997 0.05002862 0.003455638 0.01099997 0.04843407 0.006546914 0.01099997 0.0481885 0.006382644 0.01099997 0.04790884 0.004009604 0.01099997 0.04808616 0.003819346 0.01099997 0.04829907 0.00365436 0.01099997 0.05031061 0.003580808 0.01099997 0.05055791 0.003745257 0.01099997 0.05075234 0.003926396 0.01099997 0.05092298 0.004147589 0.01099997 0.05105155 0.00439012 0.01099997 0.0511372 0.004649996 0.01099997 0.05118346 0.005047559 0.01099997 0.05115824 0.005354821 0.01099997 0.05044817 0.006464481 0.01099997 0.0502004 0.006604135 0.01099997 0.05108535 0.005639791 0.01099997 0.05097228 0.005893051 0.01099997 0.04776459 0.004226326 0.01099997 0.04758435 0.004747509 0.01099997 0.04765528 0.004470646 0.01099997 0.05119031 0.01070493 0.01099997 0.0495662 0.01070493 0.01099997 0.04956018 0.01061117 0.01099997 0.04961454 0.01016831 0.01099997 0.04966974 0.01003557 0.01099997 0.05119955 0.01058894 0.01099997 0.05021297 0.009620428 0.01099997 0.05036652 0.009600758 0.01099997 0.05041915 0.009599447 0.01099997 0.05119985 0.0105853 0.01099997 0.04957371 0.01033413 0.01099997 0.05120396 0.01043212 0.01099997 0.050426 0.009599447 0.01099997 0.05119925 0.01032119 0.01099997 0.04955935 0.01050704 0.01099997 0.0496959 0.009988427 0.01099997 0.0497601 0.009894132 0.01099997 0.04985058 0.00979948 0.01099997 0.04995512 0.009722292 0.01099997 0.05007708 0.009661376 0.01099997 0.05108278 0.009935915 0.01099997 0.05113476 0.01004093 0.01099997 0.0511747 0.010167 0.01099997 0.05058199 0.009611189 0.01099997 0.05070793 0.009640753 0.01099997 0.05099231 0.009816408 0.01099997 0.05081278 0.009683609 0.01099997 0.05091118 0.009744405 0.01099997 0.05101937 0.009846687 0.01099997 3.12504e-4 -0.02280706 -0.02468669 3.12504e-4 -0.02257132 -0.0251922 3.12504e-4 -0.02225148 -0.02564907 3.12504e-4 -0.02185714 -0.02604347 3.12504e-4 -0.02295136 -0.02414798 3.12504e-4 -0.023 -0.02359235 3.12504e-4 -0.023 -0.01523154 3.12504e-4 -0.02305847 -0.01455003 3.12504e-4 -0.02323222 -0.01388847 3.12504e-4 0.01061046 0.03230196 3.12504e-4 -0.023 0.01523154 3.12504e-4 -0.02305847 0.01455003 3.12504e-4 0.01061046 -0.03230196 3.12504e-4 0.006435334 -0.03338539 3.12504e-4 0.02185714 0.02604347 3.12504e-4 0.02225148 0.02564907 3.12504e-4 -0.03109818 0.009819924 3.12504e-4 -0.03158974 0.009599626 3.12504e-4 -0.03378957 -0.003776609 3.12504e-4 -0.03399997 0 3.12504e-4 -0.01838386 0.02860122 3.12504e-4 -0.01461476 0.03069865 3.12504e-4 -0.023 0.02359235 3.12504e-4 -0.03203737 -0.009300053 3.12504e-4 -0.03242838 -0.00892961 3.12504e-4 -0.03275173 -0.008498847 3.12504e-4 -0.03299826 -0.008019924 3.12504e-4 -0.03316098 -0.007506489 3.12504e-4 -0.02351611 -0.01326614 3.12504e-4 -0.02408975 -0.0121935 3.12504e-4 -0.02441716 -0.01165622 3.12504e-4 -0.02482479 -0.01117694 3.12504e-4 -0.02530252 -0.01076751 3.12504e-4 -0.02583855 -0.01043802 3.12504e-4 -0.02641963 -0.01019668 3.12504e-4 -0.02703136 -0.01004946 3.12504e-4 -0.02765858 -0.00999999 3.12504e-4 -0.03003996 -0.00999999 3.12504e-4 -0.03057664 -0.009954631 3.12504e-4 -0.03109818 -0.009819924 3.12504e-4 -0.03158974 -0.009599626 3.12504e-4 -0.02441716 0.01165622 3.12504e-4 -0.02408975 0.0121935 3.12504e-4 -0.03316098 0.007506489 3.12504e-4 -0.03299826 0.008019924 3.12504e-4 -0.03275173 0.008498847 3.12504e-4 -0.03242838 0.00892961 3.12504e-4 -0.03203737 0.009300053 3.12504e-4 0.01461476 -0.03069865 3.12504e-4 0.01838386 -0.02860122 3.12504e-4 0.02280706 0.02468669 3.12504e-4 0.02257132 0.0251922 3.12504e-4 0.01838386 0.02860122 3.12504e-4 0.01461476 0.03069865 3.12504e-4 0.006435334 0.03338539 3.12504e-4 -0.006435334 0.03338539 3.12504e-4 -0.01061046 0.03230196 3.12504e-4 -0.02482479 0.01117694 3.12504e-4 -0.02530252 0.01076751 3.12504e-4 -0.02583855 0.01043802 3.12504e-4 -0.02641963 0.01019668 3.12504e-4 -0.02703136 0.01004946 3.12504e-4 -0.02765858 0.00999999 3.12504e-4 -0.03003996 0.00999999 3.12504e-4 -0.02323222 0.01388847 3.12504e-4 -0.02351611 0.01326614 3.12504e-4 -0.03378957 0.003776609 3.12504e-4 -0.02185714 0.02604347 3.12504e-4 -0.02225148 0.02564907 3.12504e-4 -0.02257132 0.0251922 3.12504e-4 -0.02280706 0.02468669 3.12504e-4 -0.02295136 0.02414798 3.12504e-4 -0.03057664 0.009954631 3.12504e-4 -0.01838386 -0.02860122 3.12504e-4 -0.01461476 -0.03069865 3.12504e-4 -0.01061046 -0.03230196 3.12504e-4 -0.006435334 -0.03338539 3.12504e-4 0.02185714 -0.02604347 3.12504e-4 0.02225148 -0.02564907 3.12504e-4 0.02257132 -0.0251922 3.12504e-4 0.02280706 -0.02468669 3.12504e-4 0.02295136 -0.02414798 3.12504e-4 0.023 -0.02359235 3.12504e-4 0.02323222 0.01388847 3.12504e-4 0.02305847 0.01455003 3.12504e-4 0.023 0.01523154 3.12504e-4 0.023 0.02359235 3.12504e-4 0.02295136 0.02414798 3.12504e-4 0.002156674 0.03393149 3.12504e-4 -0.002156674 0.03393149 3.12504e-4 0.002156674 -0.03393149 3.12504e-4 -0.002156674 -0.03393149 3.12504e-4 0.023 -0.01523154 3.12504e-4 0.02305847 -0.01455003 3.12504e-4 0.02323222 -0.01388847 3.12504e-4 0.02351611 -0.01326614 3.12504e-4 0.02408975 -0.0121935 3.12504e-4 0.02441716 -0.01165622 3.12504e-4 0.02482479 0.01117694 3.12504e-4 0.02441716 0.01165622 3.12504e-4 0.02408975 0.0121935 3.12504e-4 0.02482479 -0.01117694 3.12504e-4 0.02530252 -0.01076751 3.12504e-4 0.02583855 -0.01043802 3.12504e-4 0.02641963 -0.01019668 3.12504e-4 0.02703136 -0.01004946 3.12504e-4 0.02765858 -0.00999999 3.12504e-4 0.03003996 -0.00999999 3.12504e-4 0.03057664 -0.009954631 3.12504e-4 0.03109818 -0.009819924 3.12504e-4 0.03158974 -0.009599626 3.12504e-4 0.03203737 -0.009300053 3.12504e-4 0.03242838 -0.00892961 3.12504e-4 0.03275173 -0.008498847 3.12504e-4 0.03299826 -0.008019924 3.12504e-4 0.03275173 0.008498847 3.12504e-4 0.03299826 0.008019924 3.12504e-4 0.02351611 0.01326614 3.12504e-4 0.02641963 0.01019668 3.12504e-4 0.02583855 0.01043802 3.12504e-4 0.02530252 0.01076751 3.12504e-4 0.02765858 0.00999999 3.12504e-4 0.02703136 0.01004946 3.12504e-4 0.03316098 0.007506489 3.12504e-4 0.03242838 0.00892961 3.12504e-4 0.03203737 0.009300053 3.12504e-4 0.03158974 0.009599626 3.12504e-4 0.03109818 0.009819924 3.12504e-4 0.03057664 0.009954631 3.12504e-4 0.03003996 0.00999999 3.12504e-4 0.03316098 -0.007506489 3.12504e-4 0.03399997 0 3.12504e-4 0.03378957 -0.003776609 3.12504e-4 0.03378957 0.003776609 0 -0.03003996 -0.00999999 0 -0.03057664 -0.009954631 0 -0.03109818 -0.009819924 0 -0.03158974 -0.009599626 0 -0.03203737 -0.009300053 0 -0.03242838 -0.00892961 0 -0.03275173 -0.008498847 0 -0.03299826 -0.008019924 0 -0.03316098 -0.007506489 0 0.03316098 -0.007506489 0 0.03299826 -0.008019924 0 0.03275173 -0.008498847 0 0.03242838 -0.00892961 0 0.03203737 -0.009300053 0 0.03158974 -0.009599626 0 0.03109818 -0.009819924 0 0.03057664 -0.009954631 0 0.03003996 -0.00999999 0 0.02765858 -0.00999999 0 0.02703136 -0.01004946 0 0.02641963 -0.01019668 0 0.02583855 -0.01043802 0 0.02530252 -0.01076751 0 0.02482479 -0.01117694 0 0.02441716 -0.01165622 0 0.02408975 -0.0121935 0 0.02351611 -0.01326614 0 0.02323222 -0.01388847 0 0.02305847 -0.01455003 0 0.023 -0.01523154 0 0.023 -0.02359235 0 0.02295136 -0.02414798 0 0.02280706 -0.02468669 0 0.02257132 -0.0251922 0 0.02225148 -0.02564907 0 0.02185714 -0.02604347 0 0.01838386 -0.02860122 0 0.01461476 -0.03069865 0 0.01061046 -0.03230196 0 0.006435334 -0.03338539 0 0.002156674 -0.03393149 0 0 -0.03393149 0 -0.002156674 -0.03393149 0 -0.006435334 -0.03338539 0 -0.01061046 -0.03230196 0 -0.01461476 -0.03069865 0 -0.01838386 -0.02860122 0 -0.02185714 -0.02604347 0 -0.02225148 -0.02564907 0 -0.02257132 -0.0251922 0 -0.02280706 -0.02468669 0 -0.02295136 -0.02414798 0 -0.023 -0.02359235 0 -0.023 -0.01523154 0 -0.02305847 -0.01455003 0 -0.02323222 -0.01388847 0 -0.02351611 -0.01326614 0 -0.02408975 -0.0121935 0 -0.02441716 -0.01165622 0 -0.02482479 -0.01117694 0 -0.02530252 -0.01076751 0 -0.02583855 -0.01043802 0 -0.02641963 -0.01019668 0 -0.02703136 -0.01004946 0 -0.02765858 -0.00999999 0.04006659 0.03251022 -0.01029998 0.03886967 0.03338676 -0.01029998 0.03905552 0.03333646 -0.01029998 0.03876024 0.03341639 -0.01029998 0.04005992 0.03252327 -0.01029998 0.03987956 0.03277009 -0.01029998 0.0393399 0.03320848 -0.01029998 0.03867864 0.03342944 -0.01029998 0.03937572 0.03318828 -0.01029998 0.03964972 0.03299403 -0.01029998 0.03962761 0.03301501 -0.01029998 0.0394997 0.03310298 -0.01029998 0.03985244 0.03280103 -0.01029998 0.03692042 0.03277021 -0.01029998 0.03713726 0.03298592 -0.01029998 0.03834378 0.03344917 -0.01029998 0.0380398 0.03341645 -0.01029998 0.03799945 0.0334084 -0.01029998 0.03797453 0.03340107 -0.01029998 0.03770172 0.03332066 -0.01029998 0.03735572 0.03314328 -0.01029998 0.03739035 0.03316825 -0.01029998 0.03742575 0.03318917 -0.01029998 0.03656017 0.03085374 -0.01029998 0.03673183 0.03250008 -0.01029998 0.03668379 0.03242588 -0.01029998 0.03656017 0.03214627 -0.01029998 0.03648173 0.03114944 -0.01029998 0.03645038 0.03145974 -0.01029998 0.03651171 0.03103631 -0.01029998 0.03683835 0.03266465 -0.01029998 0.03644996 0.03150087 -0.01029998 0.03646361 0.03167337 -0.01029998 0.0364741 0.03180563 -0.01029998 0.0364868 0.03185838 -0.01029998 0.03654694 0.03210735 -0.01029998 0.04023981 0.03214621 -0.01029998 0.04006808 0.03049987 -0.01029998 0.0402882 0.03196364 -0.01029998 0.04031819 0.03185051 -0.01029998 0.04011613 0.03057408 -0.01029998 0.04023975 0.03085368 -0.01029998 0.03996157 0.0303353 -0.01029998 0.04034954 0.03154021 -0.01029998 0.04025298 0.03089261 -0.01029998 0.04031312 0.03114157 -0.01029998 0.04034996 0.03149908 -0.01029998 0.04033631 0.03132659 -0.01029998 0.04032588 0.03119432 -0.01029998 0.03793025 0.02961319 -0.01029998 0.0377444 0.02966344 -0.01029998 0.03673338 0.03048974 -0.01029998 0.03746002 0.02979147 -0.01029998 0.03674 0.03047668 -0.01029998 0.03692036 0.0302298 -0.01029998 0.03803974 0.02958357 -0.01029998 0.03812134 0.02957051 -0.01029998 0.03715026 0.03000593 -0.01029998 0.03717231 0.02998495 -0.01029998 0.0374242 0.02981168 -0.01029998 0.03730022 0.02989691 -0.01029998 0.03694748 0.03019893 -0.01029998 0.0398795 0.03022974 -0.01029998 0.03966265 0.03001397 -0.01029998 0.0384562 0.02955079 -0.01029998 0.03876012 0.02958351 -0.01029998 0.03880047 0.02959156 -0.01029998 0.03882539 0.02959889 -0.01029998 0.0394442 0.02985662 -0.01029998 0.03940963 0.0298317 -0.01029998 0.03937417 0.02981078 -0.01029998 0.0390982 0.02967929 -0.01029998 0.04006659 -0.03048974 -0.01029998 0.04005992 -0.03047668 -0.01029998 0.03987956 -0.0302298 -0.01029998 0.03905552 -0.02966344 -0.01029998 0.0393399 -0.02979147 -0.01029998 0.03876024 -0.02958357 -0.01029998 0.03886967 -0.02961319 -0.01029998 0.03867864 -0.02957051 -0.01029998 0.03964972 -0.03000593 -0.01029998 0.03937572 -0.02981168 -0.01029998 0.03985244 -0.03019893 -0.01029998 0.0394997 -0.02989691 -0.01029998 0.03962761 -0.02998495 -0.01029998 0.03692042 -0.03022974 -0.01029998 0.03834378 -0.02955079 -0.01029998 0.0380398 -0.02958351 -0.01029998 0.03713726 -0.03001397 -0.01029998 0.03799945 -0.02959156 -0.01029998 0.03797453 -0.02959889 -0.01029998 0.03735572 -0.02985662 -0.01029998 0.03739035 -0.0298317 -0.01029998 0.03742575 -0.02981078 -0.01029998 0.03770172 -0.02967929 -0.01029998 0.03656017 -0.03214621 -0.01029998 0.03673183 -0.03049987 -0.01029998 0.03656017 -0.03085368 -0.01029998 0.03668379 -0.03057408 -0.01029998 0.03651171 -0.03196364 -0.01029998 0.03648173 -0.03185051 -0.01029998 0.03645038 -0.03154021 -0.01029998 0.03683835 -0.0303353 -0.01029998 0.0364868 -0.03114157 -0.01029998 0.03654694 -0.03089261 -0.01029998 0.03644996 -0.03149908 -0.01029998 0.03646361 -0.03132659 -0.01029998 0.0364741 -0.03119432 -0.01029998 0.04023981 -0.03085374 -0.01029998 0.04006808 -0.03250008 -0.01029998 0.04023975 -0.03214627 -0.01029998 0.04011613 -0.03242588 -0.01029998 0.04031819 -0.03114944 -0.01029998 0.04034954 -0.03145974 -0.01029998 0.0402882 -0.03103631 -0.01029998 0.03996157 -0.03266465 -0.01029998 0.04031312 -0.03185838 -0.01029998 0.04034996 -0.03150087 -0.01029998 0.04033631 -0.03167337 -0.01029998 0.04032588 -0.03180563 -0.01029998 0.04025298 -0.03210735 -0.01029998 0.03803974 -0.03341639 -0.01029998 0.03793025 -0.03338676 -0.01029998 0.03673338 -0.03251022 -0.01029998 0.03674 -0.03252327 -0.01029998 0.03692036 -0.03277009 -0.01029998 0.0377444 -0.03333646 -0.01029998 0.03746002 -0.03320848 -0.01029998 0.03812134 -0.03342944 -0.01029998 0.0374242 -0.03318828 -0.01029998 0.03715026 -0.03299403 -0.01029998 0.03717231 -0.03301501 -0.01029998 0.03730022 -0.03310298 -0.01029998 0.03694748 -0.03280103 -0.01029998 0.0398795 -0.03277021 -0.01029998 0.0384562 -0.03344917 -0.01029998 0.03876012 -0.03341645 -0.01029998 0.03880047 -0.0334084 -0.01029998 0.03882539 -0.03340107 -0.01029998 0.03966265 -0.03298592 -0.01029998 0.03937417 -0.03318917 -0.01029998 0.03940963 -0.03316825 -0.01029998 0.0394442 -0.03314328 -0.01029998 0.0390982 -0.03332066 -0.01029998 0.05437231 0.01013481 -0.01199996 0.05403393 0.0113976 -0.01199996 0.06516999 0.006204783 -0.01199996 0.05492478 0.01644998 -0.01199996 0.06880605 0.0113976 -0.01199996 0.05437231 0.0152651 -0.01199996 0.05403393 0.01400232 -0.01199996 0.06846767 0.01013481 -0.01199996 0.0679152 0.008949995 -0.01199996 0.06716531 0.007879078 -0.01199996 0.05391997 0.01269996 -0.01199996 0.0662409 0.00695461 -0.01199996 0.06846767 0.0152651 -0.01199996 0.05567461 0.0175209 -0.01199996 0.06272232 0.02008605 -0.01199996 0.0639851 0.01974767 -0.01199996 0.06880605 0.01400232 -0.01199996 0.06891995 0.01269996 -0.01199996 0.0639851 0.005652248 -0.01199996 0.05567461 0.007879078 -0.01199996 0.05492478 0.008949995 -0.01199996 0.05659908 0.01844531 -0.01199996 0.05766999 0.01919513 -0.01199996 0.05885481 0.01974767 -0.01199996 0.06516999 0.01919513 -0.01199996 0.0662409 0.01844531 -0.01199996 0.0679152 0.01644998 -0.01199996 0.06716531 0.0175209 -0.01199996 0.06272232 0.005313932 -0.01199996 0.06141996 0.005199968 -0.01199996 0.0601176 0.005313932 -0.01199996 0.0601176 0.02008605 -0.01199996 0.06141996 0.02019995 -0.01199996 0.05885481 0.005652248 -0.01199996 0.05766999 0.006204783 -0.01199996 0.05659908 0.00695461 -0.01199996 0.04465079 -0.01533502 -0.01097995 0.04540646 -0.01550924 -0.01097995 0.04421079 -0.02029627 -0.01097995 0.04505914 -0.02013379 -0.01097995 0.04648911 -0.01646381 -0.01097995 0.04661339 -0.0172435 -0.01097995 0.04692655 -0.01929217 -0.01097995 0.04652863 -0.01985239 -0.01097995 0.04663014 -0.01982241 -0.01097995 0.04396843 -0.0164355 -0.01097995 0.04411137 -0.01562219 -0.01097995 0.04458516 -0.01532167 -0.01097995 0.04446971 -0.01531106 -0.01097995 0.04342114 -0.01974278 -0.01097995 0.04342299 -0.01961845 -0.01097995 0.04406702 -0.02032405 -0.01097995 0.04342496 -0.01960325 -0.01097995 0.04352861 -0.01899826 -0.01097995 0.04623943 -0.01580816 -0.01097995 0.04629558 -0.0158835 -0.01097995 0.045937 -0.01563161 -0.01097995 0.04594814 -0.01563411 -0.01097995 0.04603326 -0.01566022 -0.01097995 0.04635995 -0.01600438 -0.01097995 0.04643118 -0.01621037 -0.01097995 0.04693692 -0.01940065 -0.01097995 0.04677635 -0.01974594 -0.01097995 0.04671353 -0.01978546 -0.01097995 0.04413306 -0.01553833 -0.01097995 0.04434382 -0.01532709 -0.01097995 0.04439979 -0.01531541 -0.01097995 0.04355818 -0.02017766 -0.01097995 0.0435183 -0.02011859 -0.01097995 0.04611223 -0.01569956 -0.01097995 0.04617935 -0.01574826 -0.01097995 0.04360228 -0.02022582 -0.01097995 0.04394125 -0.02033901 -0.01097995 0.04384726 -0.02033555 -0.01097995 0.04347628 -0.02002924 -0.01097995 0.04344111 -0.01990616 -0.01097995 0.0469321 -0.01948231 -0.01097995 0.04691773 -0.01954829 -0.01097995 0.04682552 -0.01970356 -0.01097995 0.04689598 -0.0196042 -0.01097995 0.04686492 -0.01965671 -0.01097995 0.04415863 -0.01547908 -0.01097995 0.04418683 -0.01543432 -0.01097995 0.04429692 -0.01534461 -0.01097995 0.0442177 -0.01539909 -0.01097995 0.04425531 -0.01536828 -0.01097995 0.04377222 -0.02032089 -0.01097995 0.04370933 -0.02029788 -0.01097995 0.04365199 -0.02026557 -0.01097995 0.0474016 -0.01318967 -0.01097995 0.04853302 -0.01806765 -0.01097995 0.0472908 -0.01317006 -0.01097995 0.04778933 -0.01820546 -0.01097995 0.04691344 -0.0157243 -0.01097995 0.04665541 -0.0140447 -0.01097995 0.04689997 -0.01326578 -0.01097995 0.04664152 -0.01389491 -0.01097995 0.04665344 -0.01375395 -0.01097995 0.05011248 -0.01435446 -0.01097995 0.04972219 -0.01655453 -0.01097995 0.0495755 -0.01738119 -0.01097995 0.04732638 -0.01809412 -0.01097995 0.0472961 -0.01804143 -0.01097995 0.04776787 -0.01820904 -0.01097995 0.0472635 -0.01795613 -0.01097995 0.04724156 -0.01785975 -0.01097995 0.04696041 -0.01322603 -0.01097995 0.04702007 -0.01319849 -0.01097995 0.04668885 -0.01359856 -0.01097995 0.04673558 -0.01347798 -0.01097995 0.04684317 -0.01331758 -0.01097995 0.04678899 -0.01338499 -0.01097995 0.04957473 -0.01738506 -0.01097995 0.04953873 -0.01753801 -0.01097995 0.04907727 -0.0179668 -0.01097995 0.04950278 -0.01764082 -0.01097995 0.04919964 -0.01792997 -0.01097995 0.04709804 -0.01317626 -0.01097995 0.04718631 -0.01316601 -0.01097995 0.04886794 -0.01354593 -0.01097995 0.04980176 -0.01377278 -0.01097995 0.04980641 -0.01377391 -0.01097995 0.05012392 -0.01425522 -0.01097995 0.04987293 -0.01379519 -0.01097995 0.05012315 -0.01415109 -0.01097995 0.04739475 -0.01816809 -0.01097995 0.04758256 -0.01823252 -0.01097995 0.04743123 -0.01819229 -0.01097995 0.0475226 -0.01822543 -0.01097995 0.04747343 -0.01821166 -0.01097995 0.04765975 -0.01822966 -0.01097995 0.04735893 -0.01813519 -0.01097995 0.04946017 -0.01772218 -0.01097995 0.04941374 -0.01778441 -0.01097995 0.04928737 -0.01788783 -0.01097995 0.04935908 -0.0178377 -0.01097995 0.04993069 -0.01382321 -0.01097995 0.04997992 -0.013857 -0.01097995 0.05011016 -0.01406931 -0.01097995 0.05002111 -0.01389586 -0.01097995 0.05008816 -0.01400196 -0.01097995 0.05005776 -0.01394391 -0.01097995 0.0515694 -0.01889979 -0.01097995 0.05072057 -0.01905989 -0.01097995 0.05042952 -0.01557016 -0.01097995 0.05063432 -0.01443767 -0.01097995 0.05065888 -0.01434445 -0.01097995 0.05068641 -0.01428115 -0.01097995 0.05117452 -0.01415222 -0.01097995 0.05192917 -0.01433879 -0.01097995 0.05245596 -0.01446902 -0.01097995 0.04993414 -0.01849925 -0.01097995 0.04993593 -0.01837074 -0.01097995 0.05057686 -0.01908725 -0.01097995 0.04993659 -0.01836466 -0.01097995 0.04999792 -0.01801031 -0.01097995 0.05289101 -0.01506882 -0.01097995 0.05304586 -0.0158894 -0.01097995 0.05343931 -0.01806354 -0.01097995 0.05303966 -0.01862245 -0.01097995 0.05314105 -0.01859283 -0.01097995 0.0509122 -0.01412165 -0.01097995 0.0509724 -0.01411777 -0.01097995 0.05106574 -0.01412624 -0.01097995 0.05007129 -0.01893991 -0.01097995 0.0500316 -0.01888072 -0.01097995 0.05071574 -0.01423484 -0.01097995 0.05074673 -0.01419961 -0.01097995 0.05078011 -0.01417195 -0.01097995 0.05344933 -0.01817202 -0.01097995 0.05328756 -0.01851683 -0.01097995 0.05322456 -0.01855611 -0.01097995 0.05011522 -0.01898813 -0.01097995 0.05045211 -0.01910173 -0.01097995 0.05035871 -0.0190981 -0.01097995 0.04998958 -0.0187909 -0.01097995 0.04995429 -0.01866644 -0.01097995 0.05081903 -0.01414912 -0.01097995 0.05086237 -0.01413244 -0.01097995 0.05246633 -0.01447165 -0.01097995 0.05253422 -0.01449495 -0.01097995 0.05259728 -0.01452869 -0.01097995 0.05265319 -0.01457118 -0.01097995 0.05270475 -0.01462429 -0.01097995 0.05276191 -0.01470524 -0.01097995 0.05281847 -0.01482117 -0.01097995 0.05288237 -0.015033 -0.01097995 0.0502842 -0.01908326 -0.01097995 0.05022168 -0.01906019 -0.01097995 0.05016463 -0.01902788 -0.01097995 0.05344426 -0.01825368 -0.01097995 0.05342966 -0.0183196 -0.01097995 0.05333685 -0.01847451 -0.01097995 0.05340766 -0.01837545 -0.01097995 0.05337649 -0.01842778 -0.01097995 0.04712331 0.01880401 -0.01097995 0.04659092 0.02006638 -0.01097995 0.04584711 0.01971846 -0.01097995 0.04655331 0.0201987 -0.01097995 0.0461713 0.02002274 -0.01097995 0.04653638 0.02030527 -0.01097995 0.0465033 0.02033436 -0.01097995 0.04650908 0.02033948 -0.01097995 0.0460388 0.01922357 -0.01097995 0.04585009 0.01963543 -0.01097995 0.04670542 0.01972508 -0.01097995 0.04680252 0.01947957 -0.01097995 0.04695409 0.01912194 -0.01097995 0.0462498 0.01876306 -0.01097995 0.04698574 0.01904726 -0.01097995 0.04632413 0.01861649 -0.01097995 0.04710268 0.01880401 -0.01097995 0.04584711 0.01964336 -0.01097995 0.04669266 0.01976317 -0.01097995 0.04583889 0.0196678 -0.01097995 0.04583704 0.01967906 -0.01097995 0.04583704 0.01968771 -0.01097995 0.04811429 0.01977646 -0.01097995 0.04845488 0.01993876 -0.01097995 0.04583853 0.01969665 -0.01097995 0.04584276 0.01970911 -0.01097995 0.04667085 0.01786869 -0.01097995 0.04669344 0.01796466 -0.01097995 0.04730981 0.01908707 -0.01097995 0.04758191 0.01938283 -0.01097995 0.04787278 0.01961398 -0.01097995 0.04792845 0.01965004 -0.01097995 0.04662418 0.01749724 -0.01097995 0.04662507 0.0175234 -0.01097995 0.0466386 0.01767134 -0.01097995 0.04666465 0.01783061 -0.01097995 0.04648333 0.01833552 -0.01097995 0.04887837 0.02006173 -0.01097995 0.0492807 0.02011156 -0.01097995 0.04939556 0.02011418 -0.01097995 0.04940241 0.02011418 -0.01097995 0.04989421 0.02007377 -0.01097995 0.05035048 0.01995706 -0.01097995 0.05075681 0.01977556 -0.01097995 0.05111467 0.01953697 -0.01097995 0.05142211 0.01924806 -0.01097995 0.05167925 0.0189104 -0.01097995 0.05188077 0.01852875 -0.01097995 0.05202162 0.01810592 -0.01097995 0.05209541 0.01764357 -0.01097995 0.05210465 0.01740509 -0.01097995 0.05206078 0.01687127 -0.01097995 0.05193418 0.01637595 -0.01097995 0.05173736 0.01593512 -0.01097995 0.05147999 0.01554971 -0.01097995 0.05117499 0.01522624 -0.01097995 0.05082094 0.01495814 -0.01097995 0.05042791 0.01475328 -0.01097995 0.05000078 0.01461464 -0.01097995 0.04954177 0.01454579 -0.01097995 0.04934102 0.01453906 -0.01097995 0.04888534 0.01457655 -0.01097995 0.04845345 0.0146858 -0.01097995 0.04805135 0.01486182 -0.01097995 0.04768323 0.01510137 -0.01097995 0.04735463 0.01540231 -0.01097995 0.04707783 0.01575613 -0.01097995 0.04685974 0.0161572 -0.01097995 0.04670798 0.01659768 -0.01097995 0.04662877 0.01707112 -0.01097995 0.04661828 0.01732343 -0.01097995 0.04671382 0.01384961 -0.01097995 0.04675477 0.01384961 -0.01097995 0.04671382 0.01263493 -0.01097995 0.04676795 0.01383638 -0.01097995 0.0520364 0.01264178 -0.01097995 0.05198878 0.01264178 -0.01097995 0.0520364 0.0138427 -0.01097995 0.05197918 0.01265239 -0.01097995 0.05198878 0.0138427 -0.01097995 0.05198097 0.01383388 -0.01097995 0.0519694 0.01382398 -0.01097995 0.05196624 0.01266264 -0.01097995 0.05194979 0.012672 -0.01097995 0.04676145 0.01263493 -0.01097995 0.04676938 0.01264393 -0.01097995 0.04678231 0.01265513 -0.01097995 0.04678571 0.01382374 -0.01097995 0.04680788 0.01381278 -0.01097995 0.05191767 0.0126841 -0.01097995 0.05184412 0.01269942 -0.01097995 0.05195349 0.01381421 -0.01097995 0.05192905 0.01380389 -0.01097995 0.04687422 0.01269018 -0.01097995 0.04682594 0.01267719 -0.01097995 0.04679965 0.01266592 -0.01097995 0.04685395 0.01379829 -0.01097995 0.04693555 0.01378411 -0.01097995 0.04707056 0.01271241 -0.01097995 0.04787677 0.01375561 -0.01097995 0.04906117 0.01273053 -0.01097995 0.04906803 0.01375412 -0.01097995 0.04981857 0.01273053 -0.01097995 0.04981857 0.01375412 -0.01097995 0.05129778 0.01272588 -0.01097995 0.05171853 0.01377242 -0.01097995 0.05188298 0.01379173 -0.01097995 0.05111503 0.008148849 -0.01097995 0.05113774 0.008197188 -0.01097995 0.0520364 0.008042275 -0.01097995 0.05116081 0.008278369 -0.01097995 0.04677861 0.0106191 -0.01097995 0.04679441 0.01061069 -0.01097995 0.04671382 0.009441196 -0.01097995 0.0510742 0.01200014 -0.01097995 0.0510742 0.0120477 -0.01097995 0.05110013 0.01196712 -0.01097995 0.0520364 0.0120477 -0.01097995 0.0510742 0.008042275 -0.01097995 0.0510742 0.008096933 -0.01097995 0.0510959 0.008120417 -0.01097995 0.04671382 0.01065587 -0.01097995 0.04675477 0.01065587 -0.01097995 0.04675573 0.01064884 -0.01097995 0.04677742 0.009465873 -0.01097995 0.04676717 0.00945729 -0.01097995 0.05118346 0.009536683 -0.01097995 0.05118346 0.008560657 -0.01097995 0.05118036 0.008440196 -0.01097995 0.04677057 0.01062512 -0.01097995 0.05116999 0.01175856 -0.01097995 0.05114805 0.0118612 -0.01097995 0.05112487 0.01192295 -0.01097995 0.04675763 0.0106427 -0.01097995 0.04676073 0.0106365 -0.01097995 0.04676491 0.01063078 -0.01097995 0.04675948 0.009448468 -0.01097995 0.04675477 0.009441196 -0.01097995 0.04685997 0.00949639 -0.01097995 0.04681611 0.009484708 -0.01097995 0.04679238 0.009474873 -0.01097995 0.04682701 0.01059961 -0.01097995 0.04688113 0.01058852 -0.01097995 0.04706013 0.009518682 -0.01097995 0.0473597 0.01056063 -0.01097995 0.04906803 0.009536683 -0.01097995 0.04906803 0.01055341 -0.01097995 0.05118346 0.01055341 -0.01097995 0.05118346 0.01153606 -0.01097995 0.04955941 0.002241551 -0.01097995 0.04935461 0.002234518 -0.01097995 0.0488941 0.002272427 -0.01097995 0.04845881 0.002382576 -0.01097995 0.04805493 0.002559542 -0.01097995 0.04768615 0.00279963 -0.01097995 0.04735743 0.003100872 -0.01097995 0.04708105 0.003454387 -0.01097995 0.04686379 0.003854215 -0.01097995 0.04671317 0.00429207 -0.01097995 0.04663521 0.004760503 -0.01097995 0.04662513 0.005004882 -0.01097995 0.04666662 0.005509793 -0.01097995 0.04678618 0.005977928 -0.01097995 0.04697245 0.006396353 -0.01097995 0.0472182 0.006766676 -0.01097995 0.04751813 0.007087647 -0.01097995 0.04786783 0.00735563 -0.01097995 0.04826235 0.007565438 -0.01097995 0.04869645 0.007711172 -0.01097995 0.04916554 0.007786691 -0.01097995 0.04940241 0.007795929 -0.01097995 0.04940932 0.007795929 -0.01097995 0.04989945 0.007755637 -0.01097995 0.05035442 0.007639169 -0.01097995 0.05075907 0.00745815 -0.01097995 0.05111515 0.007220447 -0.01097995 0.05142086 0.006932556 -0.01097995 0.05167704 0.006595671 -0.01097995 0.05187839 0.006213784 -0.01097995 0.05201995 0.005788683 -0.01097995 0.05209493 0.005320787 -0.01097995 0.05210465 0.005073308 -0.01097995 0.05206131 0.004545569 -0.01097995 0.05193608 0.004055857 -0.01097995 0.05174154 0.003620386 -0.01097995 0.05148714 0.003239452 -0.01097995 0.05118507 0.002919018 -0.01097995 0.050834 0.002653121 -0.01097995 0.05044347 0.002449333 -0.01097995 0.05001789 0.002310752 -0.01097995 0.05171334 9.44244e-4 -0.01097995 0.05201607 -0.001573681 -0.01097995 0.05197513 -0.001573681 -0.01097995 0.05202573 -0.001357793 -0.01097995 0.05196851 -0.001565337 -0.01097995 0.05195957 -0.001557171 -0.01097995 0.05159193 0.001086831 -0.01097995 0.05144268 0.001215338 -0.01097995 0.05128049 0.001314342 -0.01097995 0.04822188 0.001674473 -0.01097995 0.05194807 -0.001549541 -0.01097995 0.05192679 -0.001539945 -0.01097995 0.05188143 -0.001527607 -0.01097995 0.04949116 6.16866e-4 -0.01097995 0.04950475 6.16866e-4 -0.01097995 0.05200564 1.8249e-4 -0.01097995 0.05192732 5.21241e-4 -0.01097995 0.05191695 5.52346e-4 -0.01097995 0.05181866 7.77229e-4 -0.01097995 0.04821503 0.001674473 -0.01097995 0.04816168 0.001673519 -0.01097995 0.04674762 2.01682e-4 -0.01097995 0.04672253 -0.001331329 -0.01097995 0.04678153 -0.0015679 -0.01097995 0.04673421 -0.001580595 -0.01097995 0.04677772 -0.001574337 -0.01097995 0.04677528 -0.001580595 -0.01097995 0.04703271 -0.00151056 -0.01097995 0.04906815 -0.001491844 -0.01097995 0.05108612 0.001392543 -0.01097995 0.05087304 0.001439929 -0.01097995 0.0506376 0.001456201 -0.01097995 0.05053228 0.00145179 -0.01097995 0.05033075 0.001418113 -0.01097995 0.05014359 0.001353919 -0.01097995 0.04997479 0.001262903 -0.01097995 0.04989922 0.001209318 -0.01097995 0.04981875 -0.001491844 -0.01097995 0.05139583 -0.001497685 -0.01097995 0.0518549 -0.001522839 -0.01097995 0.04670011 -5.70624e-4 -0.01097995 0.0484364 0.001658082 -0.01097995 0.04864734 0.001606702 -0.01097995 0.04883503 0.001525998 -0.01097995 0.0470072 9.78485e-4 -0.01097995 0.04713249 0.001158595 -0.01097995 0.04729813 0.001330018 -0.01097995 0.04680472 -0.001549065 -0.01097995 0.0467934 -0.001556098 -0.01097995 0.04678642 -0.001562118 -0.01097995 0.05205017 -3.93249e-4 -0.01097995 0.05204886 -2.9628e-4 -0.01097995 0.04749184 0.001472413 -0.01097995 0.04750829 0.001482307 -0.01097995 0.04771733 0.001583337 -0.01097995 0.04794305 0.001648247 -0.01097995 0.04682767 5.69367e-4 -0.01097995 0.04693257 8.40451e-4 -0.01097995 0.04976415 0.001086711 -0.01097995 0.04965335 9.47344e-4 -0.01097995 0.0495674 7.93333e-4 -0.01097995 0.04900312 0.001418232 -0.01097995 0.04914963 0.0012874 -0.01097995 0.04927963 0.001127839 -0.01097995 0.04938548 9.44287e-4 -0.01097995 0.04946202 7.41433e-4 -0.01097995 0.05204302 -7.70068e-4 -0.01097995 0.05203652 -0.001116454 -0.01097995 0.04686969 -0.001528859 -0.01097995 0.04686176 -0.001530468 -0.01097995 0.04682499 -0.001540422 -0.01097995 0.04670268 -7.8386e-4 -0.01097995 0.04670476 -8.51994e-4 -0.01097995 0.0467137 -0.001143634 -0.01097995 0.04955941 -0.007838368 -0.01097995 0.04935461 -0.007845401 -0.01097995 0.04889416 -0.007807493 -0.01097995 0.04845887 -0.007697343 -0.01097995 0.04805499 -0.007520377 -0.01097995 0.04768621 -0.00728029 -0.01097995 0.04735749 -0.006979048 -0.01097995 0.04708111 -0.006625533 -0.01097995 0.04686379 -0.006225705 -0.01097995 0.04671317 -0.005787849 -0.01097995 0.04663521 -0.005319416 -0.01097995 0.04662513 -0.005075037 -0.01097995 0.04666662 -0.004570007 -0.01097995 0.04678624 -0.004101753 -0.01097995 0.04697251 -0.003683388 -0.01097995 0.0472182 -0.003313064 -0.01097995 0.04751813 -0.002992212 -0.01097995 0.04786783 -0.002724289 -0.01097995 0.04826223 -0.002514481 -0.01097995 0.04869633 -0.002368748 -0.01097995 0.04916548 -0.002293288 -0.01097995 0.04940241 -0.002284049 -0.01097995 0.04940932 -0.002284049 -0.01097995 0.04989951 -0.002324283 -0.01097995 0.05035454 -0.00244081 -0.01097995 0.05075919 -0.002621769 -0.01097995 0.05111521 -0.002859532 -0.01097995 0.05142098 -0.003147363 -0.01097995 0.0516771 -0.003484249 -0.01097995 0.05187845 -0.003866136 -0.01097995 0.05201995 -0.004291236 -0.01097995 0.05209493 -0.004759132 -0.01097995 0.05210465 -0.005006611 -0.01097995 0.05206131 -0.00553435 -0.01097995 0.05193608 -0.006023943 -0.01097995 0.0517416 -0.006459474 -0.01097995 0.0514872 -0.006840348 -0.01097995 0.05118507 -0.007160842 -0.01097995 0.050834 -0.007426738 -0.01097995 0.05044347 -0.007630586 -0.01097995 0.05001783 -0.007769107 -0.01097995 0.04671376 -0.01062303 -0.01097995 0.04675471 -0.01062303 -0.01097995 0.04675906 -0.01062959 -0.01097995 0.0467723 -0.01064163 -0.01097995 0.04678642 -0.01064962 -0.01097995 0.04671376 -0.01175582 -0.01097995 0.04677063 -0.01173722 -0.01097995 0.04676353 -0.01174348 -0.01097995 0.05202275 -0.01175582 -0.01097995 0.05198186 -0.01175582 -0.01097995 0.05197948 -0.0117501 -0.01097995 0.04676467 -0.01063561 -0.01097995 0.04675841 -0.01174968 -0.01097995 0.04675471 -0.01175582 -0.01097995 0.0488224 -0.01052069 -0.01097995 0.05196446 -0.01173359 -0.01097995 0.05195289 -0.01172667 -0.01097995 0.05203187 -0.01153492 -0.01097995 0.05173122 -0.009194493 -0.01097995 0.05184203 -0.009382843 -0.01097995 0.0468387 -0.01171153 -0.01097995 0.04679811 -0.01172292 -0.01097995 0.04688292 -0.01067388 -0.01097995 0.05197101 -0.01173895 -0.01097995 0.05192732 -0.009592592 -0.01097995 0.05201578 -0.009980916 -0.01097995 0.05159944 -0.009031116 -0.01097995 0.05143719 -0.008884131 -0.01097995 0.05125671 -0.008767545 -0.01097995 0.05103957 -0.008673906 -0.01097995 0.05080145 -0.008614718 -0.01097995 0.05048739 -0.008589446 -0.01097995 0.04681408 -0.01065981 -0.01097995 0.04678136 -0.01173043 -0.01097995 0.0488224 -0.01070493 -0.01097995 0.04671376 -0.007879853 -0.01097995 0.04675471 -0.007879853 -0.01097995 0.04671376 -0.008903443 -0.01097995 0.04676711 -0.00789684 -0.01097995 0.04908382 -0.009434401 -0.01097995 0.04921472 -0.009230256 -0.01097995 0.04902708 -0.009558498 -0.01097995 0.04901349 -0.009558498 -0.01097995 0.0490095 -0.009555757 -0.01097995 0.05197578 -0.01174432 -0.01097995 0.04926598 -0.009162724 -0.01097995 0.04939037 -0.00901848 -0.01097995 0.04956513 -0.008871912 -0.01097995 0.04976379 -0.008753299 -0.01097995 0.04998588 -0.008664131 -0.01097995 0.05025839 -0.008604228 -0.01097995 0.05204325 -0.0112577 -0.01097995 0.05205619 -0.01051288 -0.01097995 0.05205702 -0.01061618 -0.01097995 0.05205005 -0.01094204 -0.01097995 0.04694068 -0.01169729 -0.01097995 0.04742521 -0.01070016 -0.01097995 0.04906803 -0.01167392 -0.01097995 0.04683679 -0.007965981 -0.01097995 0.04714006 -0.008209466 -0.01097995 0.04671394 -0.008921146 -0.01097995 0.0472939 -0.008323371 -0.01097995 0.04672241 -0.009031414 -0.01097995 0.04674112 -0.009121775 -0.01097995 0.05193048 -0.01171785 -0.01097995 0.05187439 -0.01170533 -0.01097995 0.05149573 -0.01168167 -0.01097995 0.04981875 -0.01167392 -0.01097995 0.04854935 -0.01070493 -0.01097995 0.04863595 -0.009287416 -0.01097995 0.04770588 -0.009769856 -0.01097995 0.04686915 -0.009207129 -0.01097995 0.05437231 -0.01013481 -0.01199996 0.05492478 -0.008949995 -0.01199996 0.0679152 -0.01644998 -0.01199996 0.05567461 -0.007879078 -0.01199996 0.05659908 -0.00695461 -0.01199996 0.05766999 -0.006204783 -0.01199996 0.05885481 -0.005652248 -0.01199996 0.06716531 -0.007879078 -0.01199996 0.0679152 -0.008949995 -0.01199996 0.06846767 -0.01013481 -0.01199996 0.05659908 -0.01844531 -0.01199996 0.06272232 -0.02008605 -0.01199996 0.06141996 -0.02019995 -0.01199996 0.0601176 -0.02008605 -0.01199996 0.05885481 -0.01974767 -0.01199996 0.05766999 -0.01919513 -0.01199996 0.05567461 -0.0175209 -0.01199996 0.05492478 -0.01644998 -0.01199996 0.05437231 -0.0152651 -0.01199996 0.05403393 -0.01400232 -0.01199996 0.05391997 -0.01269996 -0.01199996 0.05403393 -0.0113976 -0.01199996 0.06516999 -0.006204783 -0.01199996 0.0639851 -0.005652248 -0.01199996 0.06272232 -0.005313932 -0.01199996 0.06880605 -0.0113976 -0.01199996 0.06891995 -0.01269996 -0.01199996 0.06880605 -0.01400232 -0.01199996 0.0662409 -0.00695461 -0.01199996 0.06846767 -0.0152651 -0.01199996 0.06716531 -0.0175209 -0.01199996 0.0662409 -0.01844531 -0.01199996 0.0601176 -0.005313932 -0.01199996 0.06141996 -0.005199968 -0.01199996 0.06516999 -0.01919513 -0.01199996 0.0639851 -0.01974767 -0.01199996 0.03726679 -0.03020781 0.01029998 0.03729212 -0.03032863 0.01029998 0.0372976 -0.03045201 0.01029998 0.03728312 -0.03057461 0.01029998 0.03724896 -0.03069329 0.01029998 0.03719609 -0.03080493 0.01029998 0.03712588 -0.03090649 0.01029998 0.03704017 -0.03099542 0.01029998 0.03694123 -0.03106927 0.01029998 0.03683167 -0.0311262 0.01029998 0.03671431 -0.0311647 0.01029998 0.03784751 -0.02987247 0.01029998 0.0378046 -0.02983427 0.01029998 0.03775596 -0.02980363 0.01029998 0.03770285 -0.02978157 0.01029998 0.03764688 -0.02976858 0.01029998 0.03758949 -0.02976512 0.01029998 0.03753232 -0.0297712 0.01029998 0.03747695 -0.0297867 0.01029998 0.03742498 -0.0298112 0.01029998 0.03737777 -0.02984404 0.01029998 0.03733664 -0.02988421 0.01029998 0.03730279 -0.02993065 0.01029998 0.0372771 -0.02998208 0.01029998 0.03726035 -0.03003704 0.01029998 0.0372529 -0.03009408 0.01029998 0.0372551 -0.03015148 0.01029998 0.03895241 -0.02987247 0.01029998 0.03886044 -0.02995491 0.01029998 0.03875637 -0.0300213 0.01029998 0.03864288 -0.03007006 0.01029998 0.03852307 -0.03009986 0.01029998 0.03839999 -0.03010988 0.01029998 0.03827691 -0.03009986 0.01029998 0.03815704 -0.03007006 0.01029998 0.03804361 -0.0300213 0.01029998 0.03793948 -0.02995491 0.01029998 0.03953319 -0.03020781 0.01029998 0.03954488 -0.03015148 0.01029998 0.03954702 -0.03009408 0.01029998 0.03953963 -0.03003704 0.01029998 0.03952282 -0.02998208 0.01029998 0.03949713 -0.02993065 0.01029998 0.03946328 -0.02988421 0.01029998 0.03942221 -0.02984404 0.01029998 0.03937494 -0.0298112 0.01029998 0.03932297 -0.0297867 0.01029998 0.03926759 -0.0297712 0.01029998 0.03921043 -0.02976512 0.01029998 0.03915309 -0.02976858 0.01029998 0.03909707 -0.02978157 0.01029998 0.03904402 -0.02980363 0.01029998 0.03899532 -0.02983427 0.01029998 0.04008561 -0.0311647 0.01029998 0.03996831 -0.0311262 0.01029998 0.03985869 -0.03106927 0.01029998 0.03975975 -0.03099542 0.01029998 0.03967404 -0.03090649 0.01029998 0.03960382 -0.03080493 0.01029998 0.03955096 -0.03069329 0.01029998 0.03951686 -0.03057461 0.01029998 0.03950232 -0.03045201 0.01029998 0.0395078 -0.03032863 0.01029998 0.03671431 -0.03183525 0.01029998 0.03683167 -0.03187376 0.01029998 0.03694123 -0.03193068 0.01029998 0.03704017 -0.03200453 0.01029998 0.03712588 -0.03209346 0.01029998 0.03719609 -0.03219503 0.01029998 0.03724896 -0.03230661 0.01029998 0.03728312 -0.03242528 0.01029998 0.0372976 -0.03254795 0.01029998 0.03729212 -0.03267127 0.01029998 0.03726679 -0.03279215 0.01029998 0.03665971 -0.0311827 0.01029998 0.03660887 -0.03120952 0.01029998 0.03656321 -0.03124445 0.01029998 0.03652399 -0.03128647 0.01029998 0.03649228 -0.03133445 0.01029998 0.03646898 -0.03138697 0.01029998 0.03645479 -0.0314427 0.01029998 0.03644996 -0.03149998 0.01029998 0.03645479 -0.03155726 0.01029998 0.03646898 -0.03161293 0.01029998 0.03649228 -0.0316655 0.01029998 0.03652399 -0.03171348 0.01029998 0.03656321 -0.0317555 0.01029998 0.03660887 -0.03179037 0.01029998 0.03665971 -0.03181725 0.01029998 0.04008561 -0.03183525 0.01029998 0.04014021 -0.03181725 0.01029998 0.04019105 -0.03179037 0.01029998 0.04023671 -0.0317555 0.01029998 0.04027593 -0.03171348 0.01029998 0.04030764 -0.0316655 0.01029998 0.04033094 -0.03161293 0.01029998 0.04034519 -0.03155726 0.01029998 0.04034996 -0.03149998 0.01029998 0.04034519 -0.0314427 0.01029998 0.04033094 -0.03138697 0.01029998 0.04030764 -0.03133445 0.01029998 0.04027593 -0.03128647 0.01029998 0.04023671 -0.03124445 0.01029998 0.04019105 -0.03120952 0.01029998 0.04014021 -0.0311827 0.01029998 0.03953319 -0.03279215 0.01029998 0.0395078 -0.03267127 0.01029998 0.03950232 -0.03254795 0.01029998 0.03951686 -0.03242528 0.01029998 0.03955096 -0.03230661 0.01029998 0.03960382 -0.03219503 0.01029998 0.03967404 -0.03209346 0.01029998 0.03975975 -0.03200453 0.01029998 0.03985869 -0.03193068 0.01029998 0.03996831 -0.03187376 0.01029998 0.03784751 -0.03312742 0.01029998 0.03793948 -0.03304505 0.01029998 0.03804361 -0.03297865 0.01029998 0.03815704 -0.03292989 0.01029998 0.03827691 -0.03290009 0.01029998 0.03839999 -0.03289008 0.01029998 0.03852307 -0.03290009 0.01029998 0.03864288 -0.03292989 0.01029998 0.03875637 -0.03297865 0.01029998 0.03886044 -0.03304505 0.01029998 0.03895241 -0.03312742 0.01029998 0.0372551 -0.03284841 0.01029998 0.0372529 -0.03290587 0.01029998 0.03726035 -0.03296291 0.01029998 0.0372771 -0.03301787 0.01029998 0.03730279 -0.03306931 0.01029998 0.03733664 -0.03311574 0.01029998 0.03737777 -0.03315591 0.01029998 0.03742498 -0.0331887 0.01029998 0.03747695 -0.03321319 0.01029998 0.03753232 -0.03322875 0.01029998 0.03758949 -0.03323483 0.01029998 0.03764688 -0.03323137 0.01029998 0.03770285 -0.03321838 0.01029998 0.03775596 -0.03319633 0.01029998 0.0378046 -0.03316569 0.01029998 0.03899532 -0.03316569 0.01029998 0.03904402 -0.03319633 0.01029998 0.03909707 -0.03321838 0.01029998 0.03915309 -0.03323137 0.01029998 0.03921043 -0.03323483 0.01029998 0.03926759 -0.03322875 0.01029998 0.03932297 -0.03321319 0.01029998 0.03937494 -0.0331887 0.01029998 0.03942221 -0.03315591 0.01029998 0.03946328 -0.03311574 0.01029998 0.03949713 -0.03306931 0.01029998 0.03952282 -0.03301787 0.01029998 0.03953963 -0.03296291 0.01029998 0.03954702 -0.03290587 0.01029998 0.03954488 -0.03284841 0.01029998 0.03726679 0.03279215 0.01029998 0.03729212 0.03267127 0.01029998 0.0372976 0.03254795 0.01029998 0.03728312 0.03242528 0.01029998 0.03724896 0.03230661 0.01029998 0.03719609 0.03219503 0.01029998 0.03712588 0.03209346 0.01029998 0.03704017 0.03200453 0.01029998 0.03694123 0.03193068 0.01029998 0.03683167 0.03187376 0.01029998 0.03671431 0.03183525 0.01029998 0.03784751 0.03312742 0.01029998 0.0378046 0.03316569 0.01029998 0.03775596 0.03319633 0.01029998 0.03770285 0.03321838 0.01029998 0.03764688 0.03323137 0.01029998 0.03758949 0.03323483 0.01029998 0.03753232 0.03322875 0.01029998 0.03747695 0.03321319 0.01029998 0.03742498 0.0331887 0.01029998 0.03737777 0.03315591 0.01029998 0.03733664 0.03311574 0.01029998 0.03730279 0.03306931 0.01029998 0.0372771 0.03301787 0.01029998 0.03726035 0.03296291 0.01029998 0.0372529 0.03290587 0.01029998 0.0372551 0.03284841 0.01029998 0.03895241 0.03312742 0.01029998 0.03886044 0.03304505 0.01029998 0.03875637 0.03297865 0.01029998 0.03864288 0.03292989 0.01029998 0.03852307 0.03290009 0.01029998 0.03839999 0.03289008 0.01029998 0.03827691 0.03290009 0.01029998 0.03815704 0.03292989 0.01029998 0.03804361 0.03297865 0.01029998 0.03793948 0.03304505 0.01029998 0.03953319 0.03279215 0.01029998 0.03954488 0.03284841 0.01029998 0.03954702 0.03290587 0.01029998 0.03953963 0.03296291 0.01029998 0.03952282 0.03301787 0.01029998 0.03949713 0.03306931 0.01029998 0.03946328 0.03311574 0.01029998 0.03942221 0.03315591 0.01029998 0.03937494 0.0331887 0.01029998 0.03932297 0.03321319 0.01029998 0.03926759 0.03322875 0.01029998 0.03921043 0.03323483 0.01029998 0.03915309 0.03323137 0.01029998 0.03909707 0.03321838 0.01029998 0.03904402 0.03319633 0.01029998 0.03899532 0.03316569 0.01029998 0.04008561 0.03183525 0.01029998 0.03996831 0.03187376 0.01029998 0.03985869 0.03193068 0.01029998 0.03975975 0.03200453 0.01029998 0.03967404 0.03209346 0.01029998 0.03960382 0.03219503 0.01029998 0.03955096 0.03230661 0.01029998 0.03951686 0.03242528 0.01029998 0.03950232 0.03254795 0.01029998 0.0395078 0.03267127 0.01029998 0.03671431 0.0311647 0.01029998 0.03683167 0.0311262 0.01029998 0.03694123 0.03106927 0.01029998 0.03704017 0.03099542 0.01029998 0.03712588 0.03090649 0.01029998 0.03719609 0.03080493 0.01029998 0.03724896 0.03069329 0.01029998 0.03728312 0.03057461 0.01029998 0.0372976 0.03045201 0.01029998 0.03729212 0.03032863 0.01029998 0.03726679 0.03020781 0.01029998 0.03665971 0.03181725 0.01029998 0.03660887 0.03179037 0.01029998 0.03656321 0.0317555 0.01029998 0.03652399 0.03171348 0.01029998 0.03649228 0.0316655 0.01029998 0.03646898 0.03161293 0.01029998 0.03645479 0.03155726 0.01029998 0.03644996 0.03149998 0.01029998 0.03645479 0.0314427 0.01029998 0.03646898 0.03138697 0.01029998 0.03649228 0.03133445 0.01029998 0.03652399 0.03128647 0.01029998 0.03656321 0.03124445 0.01029998 0.03660887 0.03120952 0.01029998 0.03665971 0.0311827 0.01029998 0.04008561 0.0311647 0.01029998 0.04014021 0.0311827 0.01029998 0.04019105 0.03120952 0.01029998 0.04023671 0.03124445 0.01029998 0.04027593 0.03128647 0.01029998 0.04030764 0.03133445 0.01029998 0.04033094 0.03138697 0.01029998 0.04034519 0.0314427 0.01029998 0.04034996 0.03149998 0.01029998 0.04034519 0.03155726 0.01029998 0.04033094 0.03161293 0.01029998 0.04030764 0.0316655 0.01029998 0.04027593 0.03171348 0.01029998 0.04023671 0.0317555 0.01029998 0.04019105 0.03179037 0.01029998 0.04014021 0.03181725 0.01029998 0.03953319 0.03020781 0.01029998 0.0395078 0.03032863 0.01029998 0.03950232 0.03045201 0.01029998 0.03951686 0.03057461 0.01029998 0.03955096 0.03069329 0.01029998 0.03960382 0.03080493 0.01029998 0.03967404 0.03090649 0.01029998 0.03975975 0.03099542 0.01029998 0.03985869 0.03106927 0.01029998 0.03996831 0.0311262 0.01029998 0.03784751 0.02987247 0.01029998 0.03793948 0.02995491 0.01029998 0.03804361 0.0300213 0.01029998 0.03815704 0.03007006 0.01029998 0.03827691 0.03009986 0.01029998 0.03839999 0.03010988 0.01029998 0.03852307 0.03009986 0.01029998 0.03864288 0.03007006 0.01029998 0.03875637 0.0300213 0.01029998 0.03886044 0.02995491 0.01029998 0.03895241 0.02987247 0.01029998 0.0372551 0.03015148 0.01029998 0.0372529 0.03009408 0.01029998 0.03726035 0.03003704 0.01029998 0.0372771 0.02998208 0.01029998 0.03730279 0.02993065 0.01029998 0.03733664 0.02988421 0.01029998 0.03737777 0.02984404 0.01029998 0.03742498 0.0298112 0.01029998 0.03747695 0.0297867 0.01029998 0.03753232 0.0297712 0.01029998 0.03758949 0.02976512 0.01029998 0.03764688 0.02976858 0.01029998 0.03770285 0.02978157 0.01029998 0.03775596 0.02980363 0.01029998 0.0378046 0.02983427 0.01029998 0.03899532 0.02983427 0.01029998 0.03904402 0.02980363 0.01029998 0.03909707 0.02978157 0.01029998 0.03915309 0.02976858 0.01029998 0.03921043 0.02976512 0.01029998 0.03926759 0.0297712 0.01029998 0.03932297 0.0297867 0.01029998 0.03937494 0.0298112 0.01029998 0.03942221 0.02984404 0.01029998 0.03946328 0.02988421 0.01029998 0.03949713 0.02993065 0.01029998 0.03952282 0.02998208 0.01029998 0.03953963 0.03003704 0.01029998 0.03954702 0.03009408 0.01029998 0.03954488 0.03015148 0.01029998 0.04938197 -0.01904964 0.01097995 0.04937511 -0.01904964 0.01097995 0.04917216 -0.01904034 0.01097995 0.04884743 -0.01898419 0.01097995 0.04855811 -0.01888489 0.01097995 0.04830539 -0.01875013 0.01097995 0.04808664 -0.01858365 0.01097995 0.04807704 -0.01857495 0.01097995 0.04789769 -0.01838254 0.01097995 0.04775267 -0.01816457 0.01097995 0.04764264 -0.0179187 0.01097995 0.04757118 -0.01763975 0.01097995 0.04754638 -0.0173369 0.01097995 0.04755097 -0.01720768 0.01097995 0.04759454 -0.01692503 0.01097995 0.04768246 -0.01665955 0.01097995 0.04781419 -0.01641207 0.01097995 0.04798901 -0.01618659 0.01097995 0.04818582 -0.01600396 0.01097995 0.04843801 -0.01583677 0.01097995 0.04872357 -0.01571041 0.01097995 0.04903662 -0.0156309 0.01097995 0.04936832 -0.01560354 0.01097995 0.04959183 -0.0156154 0.01097995 0.04990744 -0.015675 0.01097995 0.05019271 -0.01577872 0.01097995 0.05044513 -0.01592022 0.01097995 0.05066317 -0.01609402 0.01097995 0.05083394 -0.01628071 0.01097995 0.05098295 -0.01650661 0.01097995 0.05109453 -0.01675814 0.01097995 0.05116569 -0.01703727 0.01097995 0.05119031 -0.0173369 0.01097995 0.05118596 -0.01746237 0.01097995 0.05114322 -0.01774138 0.01097995 0.0510568 -0.01800346 0.01097995 0.05092746 -0.0182476 0.01097995 0.05075597 -0.01846987 0.01097995 0.05056113 -0.01865148 0.01097995 0.05031287 -0.0188167 0.01097995 0.05002981 -0.01894235 0.01097995 0.04971629 -0.01902216 0.01097995 0.04938197 -0.00673139 0.01097995 0.04937511 -0.00673139 0.01097995 0.04915302 -0.006720185 0.01097995 0.04883247 -0.006661772 0.01097995 0.04854762 -0.00656116 0.01097995 0.04829907 -0.006425619 0.01097995 0.04808616 -0.006260573 0.01097995 0.04790884 -0.006070315 0.01097995 0.04776459 -0.005853593 0.01097995 0.04765528 -0.005609273 0.01097995 0.04758435 -0.00533241 0.01097995 0.04755979 -0.00503236 0.01097995 0.04756402 -0.004905879 0.01097995 0.04760688 -0.004618704 0.01097995 0.04769319 -0.004352271 0.01097995 0.04782116 -0.0041067 0.01097995 0.04798996 -0.003884434 0.01097995 0.04818856 -0.003697216 0.01097995 0.04843413 -0.003532946 0.01097995 0.04871582 -0.00340718 0.01097995 0.04903101 -0.003326773 0.01097995 0.04936832 -0.003299057 0.01097995 0.04960548 -0.00331211 0.01097995 0.04991924 -0.003372669 0.01097995 0.0502004 -0.003475785 0.01097995 0.05044817 -0.003615438 0.01097995 0.05066227 -0.003786921 0.01097995 0.05082285 -0.003962159 0.01097995 0.05097228 -0.004186868 0.01097995 0.05108535 -0.004440128 0.01097995 0.05115824 -0.004725098 0.01097995 0.05118346 -0.00503236 0.01097995 0.05117923 -0.005154073 0.01097995 0.0511372 -0.005429685 0.01097995 0.05105161 -0.005689561 0.01097995 0.05092304 -0.005932152 0.01097995 0.0507524 -0.006153404 0.01097995 0.05055785 -0.006334722 0.01097995 0.05031049 -0.006499171 0.01097995 0.05002856 -0.006624341 0.01097995 0.04971587 -0.006703913 0.01097995 0.05054885 -4.59826e-4 0.01097995 0.05054211 -4.59826e-4 0.01097995 0.05047202 -4.56585e-4 0.01097995 0.05036199 -4.37161e-4 0.01097995 0.05026072 -4.00928e-4 0.01097995 0.05017626 -3.53879e-4 0.01097995 0.05009365 -2.88404e-4 0.01097995 0.05002373 -2.11654e-4 0.01097995 0.04996371 -1.20636e-4 0.01097995 0.04991424 -9.45093e-6 0.01097995 0.04987359 1.63187e-4 0.01097995 0.0498597 3.52168e-4 0.01097995 0.04986053 4.41817e-4 0.01097995 0.04986655 5.36413e-4 0.01097995 0.05119717 5.36413e-4 0.01097995 0.05121082 2.63412e-4 0.01097995 0.0512095 3.40132e-4 0.01097995 0.05120509 4.10126e-4 0.01097995 0.05119973 1.08818e-4 0.01097995 0.05117195 -1.50907e-5 0.01097995 0.05113214 -1.17508e-4 0.01097995 0.05108273 -2.03112e-4 0.01097995 0.05102258 -2.76988e-4 0.01097995 0.05095314 -3.38172e-4 0.01097995 0.05087041 -3.89269e-4 0.01097995 0.05078202 -4.2546e-4 0.01097995 0.05067718 -4.50184e-4 0.01097995 0.04832428 -6.37201e-4 0.01097995 0.04831737 -6.37201e-4 0.01097995 0.04830276 -6.37069e-4 0.01097995 0.04818445 -6.25785e-4 0.01097995 0.04807084 -5.95524e-4 0.01097995 0.04797619 -5.52677e-4 0.01097995 0.04788833 -4.94844e-4 0.01097995 0.04780304 -4.16678e-4 0.01097995 0.0477308 -3.25503e-4 0.01097995 0.04766899 -2.14304e-4 0.01097995 0.04762357 -1.01942e-4 0.01097995 0.0475831 6.71782e-5 0.01097995 0.04756677 2.63412e-4 0.01097995 0.0475685 3.92218e-4 0.01097995 0.04758042 5.16078e-4 0.01097995 0.04758358 5.23839e-4 0.01097995 0.04758578 5.27575e-4 0.01097995 0.04758763 5.29764e-4 0.01097995 0.04758977 5.31592e-4 0.01097995 0.04759204 5.32976e-4 0.01097995 0.04759544 5.34325e-4 0.01097995 0.0476005 5.35426e-4 0.01097995 0.04760909 5.36183e-4 0.01097995 0.04762822 5.36413e-4 0.01097995 0.04904079 5.36413e-4 0.01097995 0.04905021 4.13617e-4 0.01097995 0.04905444 2.90616e-4 0.01097995 0.04903656 7.66605e-5 0.01097995 0.04899299 -1.32143e-4 0.01097995 0.04895085 -2.33528e-4 0.01097995 0.04888784 -3.40012e-4 0.01097995 0.04881536 -4.28593e-4 0.01097995 0.04873055 -5.04266e-4 0.01097995 0.04864305 -5.60097e-4 0.01097995 0.04854655 -6.01719e-4 0.01097995 0.04843741 -6.28479e-4 0.01097995 0.04938197 0.003348529 0.01097995 0.04937511 0.003348529 0.01097995 0.04915302 0.003359735 0.01097995 0.04883247 0.003418147 0.01097995 0.04854762 0.00351876 0.01097995 0.04829907 0.00365436 0.01097995 0.04808616 0.003819346 0.01097995 0.04790884 0.004009604 0.01097995 0.04776459 0.004226326 0.01097995 0.04765528 0.004470646 0.01097995 0.04758435 0.004747509 0.01097995 0.04755979 0.005047559 0.01097995 0.04756402 0.00517416 0.01097995 0.04760688 0.005461335 0.01097995 0.04769319 0.005727708 0.01097995 0.04782122 0.005973279 0.01097995 0.04798996 0.006195545 0.01097995 0.0481885 0.006382644 0.01097995 0.04843407 0.006546914 0.01097995 0.04871577 0.00667268 0.01097995 0.04903101 0.006753146 0.01097995 0.04936832 0.006780862 0.01097995 0.04960548 0.006767809 0.01097995 0.04991924 0.006707251 0.01097995 0.0502004 0.006604135 0.01097995 0.05044817 0.006464481 0.01097995 0.05066227 0.006292998 0.01097995 0.05082285 0.006117761 0.01097995 0.05097228 0.005893051 0.01097995 0.05108535 0.005639791 0.01097995 0.05115824 0.005354821 0.01097995 0.05118346 0.005047559 0.01097995 0.05117923 0.004925608 0.01097995 0.0511372 0.004649996 0.01097995 0.05105155 0.00439012 0.01097995 0.05092298 0.004147589 0.01097995 0.05075234 0.003926396 0.01097995 0.05055791 0.003745257 0.01097995 0.05031061 0.003580808 0.01097995 0.05002862 0.003455638 0.01097995 0.04971593 0.003376007 0.01097995 0.05120396 0.01043212 0.01097995 0.05119609 0.01058876 0.01097995 0.05119031 0.01070493 0.01097995 0.0495662 0.01070493 0.01097995 0.04955935 0.01050704 0.01097995 0.04956018 0.01061117 0.01097995 0.0496959 0.009988427 0.01097995 0.04966974 0.01003557 0.01097995 0.04961454 0.01016831 0.01097995 0.04957371 0.01033413 0.01097995 0.05041915 0.009599447 0.01097995 0.05036652 0.009600758 0.01097995 0.05021297 0.009620428 0.01097995 0.05007708 0.009661376 0.01097995 0.04995512 0.009722292 0.01097995 0.04985058 0.00979948 0.01097995 0.0497601 0.009894132 0.01097995 0.050426 0.009599447 0.01097995 0.05119925 0.01032119 0.01097995 0.0511747 0.010167 0.01097995 0.05113476 0.01004093 0.01097995 0.05108278 0.009935915 0.01097995 0.05101937 0.009846687 0.01097995 0.05099231 0.009816408 0.01097995 0.05091118 0.009744405 0.01097995 0.05081278 0.009683609 0.01097995 0.05070793 0.009640753 0.01097995 0.05058199 0.009611189 0.01097995 0 0.03003996 0.00999999 0 0.03057664 0.009954631 0 0.03109818 0.009819924 0 0.03158974 0.009599626 0 0.03203737 0.009300053 0 0.03242838 0.00892961 0 0.03275173 0.008498847 0 0.03299826 0.008019924 0 0.03316098 0.007506489 0 0.03378957 0.003776609 0 0.03399997 0 0 0.03378957 -0.003776609 0 -0.03378957 -0.003776609 0 -0.03399997 0 0 -0.03378957 0.003776609 0 -0.03316098 0.007506489 0 -0.03299826 0.008019924 0 -0.03275173 0.008498847 0 -0.03242838 0.00892961 0 -0.03203737 0.009300053 0 -0.03158974 0.009599626 0 -0.03109818 0.009819924 0 -0.03057664 0.009954631 0 -0.03003996 0.00999999 0 -0.02765858 0.00999999 0 -0.02703136 0.01004946 0 -0.02641963 0.01019668 0 -0.02583855 0.01043802 0 -0.02530252 0.01076751 0 -0.02482479 0.01117694 0 -0.02441716 0.01165622 0 -0.02408975 0.0121935 0 -0.02351611 0.01326614 0 -0.02323222 0.01388847 0 -0.02305847 0.01455003 0 -0.023 0.01523154 0 -0.023 0.02359235 0 -0.02295136 0.02414798 0 -0.02280706 0.02468669 0 -0.02257132 0.0251922 0 -0.02225148 0.02564907 0 -0.02185714 0.02604347 0 -0.01838386 0.02860122 0 -0.01461476 0.03069865 0 -0.01061046 0.03230196 0 -0.006435334 0.03338539 0 -0.002156674 0.03393149 0 0 0.03393149 0 0.002156674 0.03393149 0 0.006435334 0.03338539 0 0.01061046 0.03230196 0 0.01461476 0.03069865 0 0.01838386 0.02860122 0 0.02185714 0.02604347 0 0.02225148 0.02564907 0 0.02257132 0.0251922 0 0.02280706 0.02468669 0 0.02295136 0.02414798 0 0.023 0.02359235 0 0.023 0.01523154 0 0.02305847 0.01455003 0 0.02323222 0.01388847 0 0.02351611 0.01326614 0 0.02408975 0.0121935 0 0.02441716 0.01165622 0 0.02482479 0.01117694 0 0.02530252 0.01076751 0 0.02583855 0.01043802 0 0.02641963 0.01019668 0 0.02703136 0.01004946 0 0.02765858 0.00999999 0.0358293 0.03190815 -0.009848475 0.03564113 0.03236192 -0.009579122 0.03611636 0.03275144 -0.009847521 0.04218876 0.03179162 -0.008099973 0.04219239 0.0317372 -0.008099973 0.04217684 0.03167682 -0.008153557 0.04205024 0.03044384 -0.008099973 0.0419805 0.03025919 -0.008099973 0.0419321 0.03014791 -0.008150577 0.03757196 0.02779126 -0.008099973 0.0375331 0.02780324 -0.008099973 0.03748834 0.02790737 -0.008343815 0.03462034 0.03189295 -0.008099973 0.03467065 0.0321663 -0.008099973 0.03470438 0.03207069 -0.00826323 0.04004865 0.03491187 -0.008099973 0.0399388 0.03495484 -0.008150577 0.03992825 0.03497415 -0.008099973 0.04085707 0.03439497 -0.008099973 0.04060721 0.03451848 -0.00826323 0.04056364 0.0346114 -0.008099973 0.03666979 0.02988123 -0.01003235 0.03746592 0.02949702 -0.01014268 0.03955763 0.02958357 -0.01012355 0.03933399 0.03350293 -0.01014268 0.03724235 0.03341633 -0.01012355 0.03645819 0.03039151 -0.01012557 0.03624361 0.030909 -0.01012557 0.03603202 0.03141927 -0.01003235 0.03632259 0.03225415 -0.01014268 0.03665512 0.0331062 -0.01003068 0.03786176 0.03367322 -0.01012355 0.03849613 0.03386962 -0.01003068 0.03912782 0.03400021 -0.009847521 0.03992742 0.03360754 -0.009848475 0.04013013 0.03311872 -0.01003235 0.04034173 0.03260844 -0.01012557 0.04055637 0.0320909 -0.01012557 0.04076796 0.03158062 -0.01003235 0.04047733 0.0307458 -0.01014268 0.04097068 0.0310918 -0.009848475 0.04068356 0.03024846 -0.009847521 0.04014486 0.02989369 -0.01003068 0.03893822 0.02932673 -0.01012355 0.03830385 0.02913028 -0.01003068 0.03767216 0.02899974 -0.009847521 0.0368725 0.02939242 -0.009848475 0.04173773 0.03331631 -0.008099973 0.04150676 0.03329282 -0.008601665 0.04169869 0.03338634 -0.008099973 0.04139328 0.03356647 -0.008498728 0.04163247 0.03348356 -0.008099973 0.04122334 0.03402721 -0.008099973 0.04136329 0.03387874 -0.008099973 0.04128795 0.03382045 -0.008347988 0.04146248 0.03373312 -0.008099973 0.04088836 0.03437191 -0.008099973 0.04071193 0.03426581 -0.008565902 0.04094839 0.0343188 -0.008099973 0.04119366 0.03404778 -0.008153557 0.04117959 0.03407359 -0.008099973 0.0404089 0.03472554 -0.008099973 0.04003989 0.034711 -0.008564472 0.03931164 0.03509259 -0.008343815 0.03979748 0.0350337 -0.008099973 0.03987169 0.03500342 -0.008099973 0.03859084 0.03529495 -0.008099973 0.03862905 0.03529304 -0.008099973 0.03865915 0.03513044 -0.008493661 0.03922796 0.03520864 -0.008099973 0.03926682 0.03519672 -0.008099973 0.03799945 0.03506743 -0.008595943 0.03795367 0.03527367 -0.008099973 0.038549 0.03529703 -0.008099973 0.03735083 0.03490519 -0.008647739 0.0373606 0.03515505 -0.008099973 0.03791648 0.03526622 -0.008099973 0.03673142 0.03464835 -0.008647739 0.03672975 0.03491324 -0.008099973 0.03728377 0.03513234 -0.008099973 0.03607845 0.03450101 -0.008099973 0.03614431 0.03455811 -0.008099973 0.03615844 0.03430402 -0.008595943 0.03620934 0.03460502 -0.008099973 0.03664368 0.03486222 -0.008099973 0.03569406 0.03416794 -0.008099973 0.03564769 0.03388166 -0.008493661 0.03558629 0.03403961 -0.008099973 0.03521347 0.0333932 -0.008343815 0.03525924 0.03363907 -0.008099973 0.03530508 0.03370487 -0.008099973 0.03481948 0.03274071 -0.008099973 0.0348677 0.03286838 -0.008099973 0.03486782 0.03285205 -0.008150577 0.03496348 0.03312188 -0.008099973 0.03517645 0.03349435 -0.008099973 0.03496897 0.03260821 -0.008564472 0.03472822 0.03247886 -0.008099973 0.03474968 0.03255611 -0.008099973 0.03461849 0.03181588 -0.008099973 0.03480917 0.03181803 -0.008565902 0.0346077 0.03136473 -0.008099973 0.03462308 0.03132307 -0.008153557 0.03460586 0.03128832 -0.008099973 0.03460758 0.03126275 -0.008099973 0.03505462 0.03028249 -0.008653879 0.03478276 0.03037464 -0.008099973 0.03493618 0.03056812 -0.008601665 0.03470331 0.03061974 -0.008099973 0.0348227 0.03084176 -0.008498728 0.03465723 0.03091406 -0.008099973 0.03471738 0.0310958 -0.008347988 0.03461116 0.03120833 -0.008099973 0.03506219 0.02968358 -0.008099973 0.03503638 0.02973765 -0.008099973 0.03529322 0.02970713 -0.008601665 0.03493791 0.0299437 -0.008099973 0.03517478 0.02999281 -0.008653879 0.03488981 0.03004437 -0.008099973 0.03485512 0.03015142 -0.008099973 0.03510123 0.02961361 -0.008099973 0.0354067 0.02943348 -0.008498728 0.03516745 0.02951639 -0.008099973 0.03551203 0.02917951 -0.008347988 0.03533744 0.02926683 -0.008099973 0.03585159 0.02868115 -0.008099973 0.03562039 0.02892637 -0.008099973 0.03560626 0.02895218 -0.008153557 0.03557664 0.02897274 -0.008099973 0.03543663 0.02912122 -0.008099973 0.03639107 0.02827441 -0.008099973 0.03623634 0.02838855 -0.008099973 0.03619277 0.02848148 -0.00826323 0.03594291 0.02860498 -0.008099973 0.03608798 0.02873414 -0.008565902 0.03591161 0.02862805 -0.008099973 0.03676003 0.0282889 -0.008564472 0.03686118 0.02804511 -0.008150577 0.03675127 0.02808809 -0.008099973 0.0370025 0.02796626 -0.008099973 0.03692829 0.02799654 -0.008099973 0.03687173 0.0280258 -0.008099973 0.03814083 0.02786946 -0.008493661 0.03820914 0.02770495 -0.008099973 0.03817087 0.02770686 -0.008099973 0.03880053 0.02793252 -0.008595943 0.03884625 0.02772629 -0.008099973 0.03825092 0.02770292 -0.008099973 0.03944909 0.0280947 -0.008647739 0.03943932 0.0278449 -0.008099973 0.0388835 0.02773374 -0.008099973 0.0400685 0.0283516 -0.008647739 0.04007023 0.02808672 -0.008099973 0.03951621 0.02786761 -0.008099973 0.04072147 0.02849894 -0.008099973 0.04065561 0.02844184 -0.008099973 0.04064154 0.02869594 -0.008595943 0.04059058 0.02839493 -0.008099973 0.0401563 0.02813768 -0.008099973 0.04110586 0.02883201 -0.008099973 0.04115223 0.02911823 -0.008493661 0.04121369 0.02896034 -0.008099973 0.04158645 0.02960675 -0.008343815 0.04154068 0.02936089 -0.008099973 0.0414949 0.02929508 -0.008099973 0.04193222 0.03013151 -0.008099973 0.04183644 0.02987807 -0.008099973 0.04162347 0.02950561 -0.008099973 0.04218143 0.03118407 -0.008099973 0.04217958 0.03110694 -0.008099973 0.04209554 0.03092926 -0.00826323 0.04212927 0.03083366 -0.008099973 0.04183101 0.03039175 -0.008564472 0.0420717 0.03052103 -0.008099973 0.04199075 0.03118187 -0.008565902 0.04219222 0.03163522 -0.008099973 0.04219406 0.03171163 -0.008099973 0.0420826 0.03190416 -0.008347988 0.04214268 0.03208589 -0.008099973 0.0417453 0.03271746 -0.008653879 0.04201716 0.03262531 -0.008099973 0.04186379 0.03243178 -0.008601665 0.04209661 0.03238022 -0.008099973 0.04197722 0.03215813 -0.008498728 0.0417636 0.03326231 -0.008099973 0.04186207 0.03305625 -0.008099973 0.0416252 0.03300714 -0.008653879 0.04191017 0.03295558 -0.008099973 0.04194486 0.03284853 -0.008099973 0.04097157 0.03363972 -0.009014904 0.04111915 0.03328382 -0.009148776 0.04127323 0.03291225 -0.009216666 0.04142951 0.03253543 -0.009216666 0.04158359 0.03216391 -0.009148776 0.04173117 0.03180795 -0.009014904 0.0404784 0.03365355 -0.009469032 0.04065603 0.03322523 -0.009630143 0.0408414 0.03277808 -0.009711802 0.04102945 0.03232467 -0.009711802 0.04121488 0.03187751 -0.009630143 0.0413925 0.03144919 -0.009469032 0.0418682 0.03147757 -0.008818805 0.04155737 0.03105157 -0.009233057 0.04115879 0.03063803 -0.009579122 0.04083454 0.03397017 -0.008818805 0.04031348 0.03405117 -0.009233057 0.03973925 0.03406131 -0.009579122 0.04147106 0.02988505 -0.008816182 0.04102581 0.02942323 -0.009011328 0.04050749 0.02901911 -0.009144544 0.03993064 0.02868402 -0.009212076 0.03931123 0.02842712 -0.009212076 0.03866648 0.0282557 -0.009144544 0.03801435 0.02817445 -0.009011328 0.04170489 0.03069579 -0.008928656 0.04132717 0.03023201 -0.009231805 0.0408681 0.02980351 -0.009466826 0.04034042 0.02942216 -0.009627282 0.03975874 0.02909851 -0.009708583 0.03913933 0.02884167 -0.009708583 0.03849941 0.02865868 -0.009627282 0.03785669 0.02855473 -0.009466826 0.03706067 0.02893865 -0.009579122 0.03722906 0.02853262 -0.009231805 0.03737294 0.0281856 -0.008816182 0.03524255 0.03194838 -0.009233057 0.03540742 0.03155076 -0.009469032 0.03558504 0.03112244 -0.009630143 0.03577047 0.03067529 -0.009711802 0.03595852 0.03022181 -0.009711802 0.03614395 0.02977472 -0.009630143 0.03632158 0.02934634 -0.009469032 0.03648644 0.02894878 -0.009233057 0.03663396 0.028593 -0.008928656 0.03942704 0.03481429 -0.008816182 0.03878557 0.0348255 -0.009011328 0.03813344 0.03474426 -0.009144544 0.03748869 0.03457278 -0.009212076 0.03686928 0.03431594 -0.009212076 0.03629243 0.03398084 -0.009144544 0.03577417 0.03357672 -0.009011328 0.03532886 0.03311491 -0.008816182 0.03493177 0.03152239 -0.008818805 0.03506875 0.031192 -0.009014904 0.03521639 0.03083604 -0.009148776 0.03537046 0.03046452 -0.009216666 0.03552669 0.0300877 -0.009216666 0.03568077 0.02971613 -0.009148776 0.03582841 0.02936017 -0.009014904 0.03596538 0.02902978 -0.008818805 0.04016596 0.03440696 -0.008928656 0.03957092 0.03446733 -0.009231805 0.03894329 0.03444522 -0.009466826 0.03830057 0.03434121 -0.009627282 0.03766059 0.03415828 -0.009708583 0.03704118 0.03390139 -0.009708583 0.03645956 0.03357779 -0.009627282 0.03593182 0.03319644 -0.009466826 0.03547275 0.03276795 -0.009231805 0.03509503 0.03230416 -0.008928656 0 0.0297082 -0.01647752 0.02899998 0.02974998 -0.01599997 0 0.02974998 -0.01599997 0.02899998 0.0297082 -0.01552242 0 0.0297082 -0.01552242 0.02899998 0.0295841 -0.01505941 0 0.0295841 -0.01505941 0.02899998 0.02938157 -0.01462495 0 0.02938157 -0.01462495 0.02899998 0.02910661 -0.01423233 0 0.02910661 -0.01423233 0.02899998 0.02876764 -0.01389336 0 0.02876764 -0.01389336 0.02899998 0.02837496 -0.0136184 0 0.02837496 -0.0136184 0.02899998 0.02794051 -0.01341581 0 0.02794051 -0.01341581 0.02899998 0.0274775 -0.01329177 0 0.0274775 -0.01329177 0.02899998 0.02699995 -0.01324999 0 0.02699995 -0.01324999 0.02899998 0.02652245 -0.01329177 0 0.02652245 -0.01329177 0.02899998 0.02605944 -0.01341581 0 0.02605944 -0.01341581 0.02899998 0.02562499 -0.0136184 0 0.02562499 -0.0136184 0.02899998 0.02523231 -0.01389336 0 0.02523231 -0.01389336 0.02899998 0.02489334 -0.01423233 0 0.02489334 -0.01423233 0.02899998 0.02461838 -0.01462495 0 0.02461838 -0.01462495 0.02899998 0.02441585 -0.01505941 0 0.02441585 -0.01505941 0.02899998 0.02429175 -0.01552242 0 0.02429175 -0.01552242 0.02899998 0.02424997 -0.01599997 0 0.02424997 -0.01599997 0.02899998 0.02429175 -0.01647752 0 0.02429175 -0.01647752 0.02899998 0.02441585 -0.01694053 0 0.02441585 -0.01694053 0.02899998 0.02461838 -0.01737499 0 0.02461838 -0.01737499 0.02899998 0.02489334 -0.01776766 0 0.02489334 -0.01776766 0.02899998 0.02523231 -0.01810657 0 0.02523231 -0.01810657 0.02899998 0.02562499 -0.01838153 0 0.02562499 -0.01838153 0.02899998 0.02605944 -0.01858413 0 0.02605944 -0.01858413 0.02899998 0.02652245 -0.01870816 0 0.02652245 -0.01870816 0.02899998 0.02699995 -0.01874995 0 0.02699995 -0.01874995 0.02899998 0.0274775 -0.01870816 0 0.0274775 -0.01870816 0.02899998 0.02794051 -0.01858413 0 0.02794051 -0.01858413 0.02899998 0.02837496 -0.01838153 0 0.02837496 -0.01838153 0.02899998 0.02876764 -0.01810657 0 0.02876764 -0.01810657 0.02899998 0.02910661 -0.01776766 0 0.02910661 -0.01776766 0.02899998 0.02938157 -0.01737499 0 0.02938157 -0.01737499 0.02899998 0.0295841 -0.01694053 0 0.0295841 -0.01694053 0.02899998 0.0297082 -0.01647752 0 -0.02429175 -0.01647752 0.02899998 -0.02424997 -0.01599997 0 -0.02424997 -0.01599997 0.02899998 -0.02429175 -0.01552242 0 -0.02429175 -0.01552242 0.02899998 -0.02441585 -0.01505941 0 -0.02441585 -0.01505941 0.02899998 -0.02461838 -0.01462495 0 -0.02461838 -0.01462495 0.02899998 -0.02489334 -0.01423233 0 -0.02489334 -0.01423233 0.02899998 -0.02523231 -0.01389336 0 -0.02523231 -0.01389336 0.02899998 -0.02562499 -0.0136184 0 -0.02562499 -0.0136184 0.02899998 -0.02605944 -0.01341581 0 -0.02605944 -0.01341581 0.02899998 -0.02652245 -0.01329177 0 -0.02652245 -0.01329177 0.02899998 -0.02699995 -0.01324999 0 -0.02699995 -0.01324999 0.02899998 -0.0274775 -0.01329177 0 -0.0274775 -0.01329177 0.02899998 -0.02794051 -0.01341581 0 -0.02794051 -0.01341581 0.02899998 -0.02837496 -0.0136184 0 -0.02837496 -0.0136184 0.02899998 -0.02876764 -0.01389336 0 -0.02876764 -0.01389336 0.02899998 -0.02910661 -0.01423233 0 -0.02910661 -0.01423233 0.02899998 -0.02938157 -0.01462495 0 -0.02938157 -0.01462495 0.02899998 -0.0295841 -0.01505941 0 -0.0295841 -0.01505941 0.02899998 -0.0297082 -0.01552242 0 -0.0297082 -0.01552242 0.02899998 -0.02974998 -0.01599997 0 -0.02974998 -0.01599997 0.02899998 -0.0297082 -0.01647752 0 -0.0297082 -0.01647752 0.02899998 -0.0295841 -0.01694053 0 -0.0295841 -0.01694053 0.02899998 -0.02938157 -0.01737499 0 -0.02938157 -0.01737499 0.02899998 -0.02910661 -0.01776766 0 -0.02910661 -0.01776766 0.02899998 -0.02876764 -0.01810657 0 -0.02876764 -0.01810657 0.02899998 -0.02837496 -0.01838153 0 -0.02837496 -0.01838153 0.02899998 -0.02794051 -0.01858413 0 -0.02794051 -0.01858413 0.02899998 -0.0274775 -0.01870816 0 -0.0274775 -0.01870816 0.02899998 -0.02699995 -0.01874995 0 -0.02699995 -0.01874995 0.02899998 -0.02652245 -0.01870816 0 -0.02652245 -0.01870816 0.02899998 -0.02605944 -0.01858413 0 -0.02605944 -0.01858413 0.02899998 -0.02562499 -0.01838153 0 -0.02562499 -0.01838153 0.02899998 -0.02523231 -0.01810657 0 -0.02523231 -0.01810657 0.02899998 -0.02489334 -0.01776766 0 -0.02489334 -0.01776766 0.02899998 -0.02461838 -0.01737499 0 -0.02461838 -0.01737499 0.02899998 -0.02441585 -0.01694053 0 -0.02441585 -0.01694053 0.02899998 -0.02429175 -0.01647752 0.0358293 -0.0310918 -0.009848475 0.03564113 -0.03063803 -0.009579122 0.03611636 -0.03024846 -0.009847521 0.04218876 -0.03120833 -0.008099973 0.04219239 -0.03126275 -0.008099973 0.04217684 -0.03132307 -0.008153557 0.04205024 -0.03255611 -0.008099973 0.0419805 -0.03274071 -0.008099973 0.0419321 -0.03285205 -0.008150577 0.03757196 -0.03520864 -0.008099973 0.0375331 -0.03519672 -0.008099973 0.03748834 -0.03509259 -0.008343815 0.03462034 -0.03110694 -0.008099973 0.03467065 -0.03083366 -0.008099973 0.03470438 -0.03092926 -0.00826323 0.04004865 -0.02808809 -0.008099973 0.0399388 -0.02804511 -0.008150577 0.03992825 -0.0280258 -0.008099973 0.04085707 -0.02860498 -0.008099973 0.04060721 -0.02848148 -0.00826323 0.04056364 -0.02838855 -0.008099973 0.03666979 -0.03311872 -0.01003235 0.03746592 -0.03350293 -0.01014268 0.03955763 -0.03341633 -0.01012355 0.03933399 -0.02949702 -0.01014268 0.03724235 -0.02958357 -0.01012355 0.03645819 -0.03260844 -0.01012557 0.03624361 -0.0320909 -0.01012557 0.03603202 -0.03158062 -0.01003235 0.03632259 -0.0307458 -0.01014268 0.03665512 -0.02989369 -0.01003068 0.03786176 -0.02932673 -0.01012355 0.03849613 -0.02913028 -0.01003068 0.03912782 -0.02899974 -0.009847521 0.03992742 -0.02939242 -0.009848475 0.04013013 -0.02988123 -0.01003235 0.04034173 -0.03039151 -0.01012557 0.04055637 -0.030909 -0.01012557 0.04076796 -0.03141927 -0.01003235 0.04047733 -0.03225415 -0.01014268 0.04097068 -0.03190815 -0.009848475 0.04068356 -0.03275144 -0.009847521 0.04014486 -0.0331062 -0.01003068 0.03893822 -0.03367322 -0.01012355 0.03830385 -0.03386962 -0.01003068 0.03767216 -0.03400021 -0.009847521 0.0368725 -0.03360754 -0.009848475 0.04173773 -0.02968358 -0.008099973 0.04150676 -0.02970713 -0.008601665 0.04169869 -0.02961361 -0.008099973 0.04139328 -0.02943348 -0.008498728 0.04163247 -0.02951639 -0.008099973 0.04122334 -0.02897274 -0.008099973 0.04136329 -0.02912122 -0.008099973 0.04128795 -0.02917951 -0.008347988 0.04146248 -0.02926683 -0.008099973 0.04088836 -0.02862805 -0.008099973 0.04071193 -0.02873414 -0.008565902 0.04094839 -0.02868115 -0.008099973 0.04119366 -0.02895218 -0.008153557 0.04117959 -0.02892637 -0.008099973 0.0404089 -0.02827441 -0.008099973 0.04003989 -0.0282889 -0.008564472 0.03931164 -0.02790737 -0.008343815 0.03979748 -0.02796626 -0.008099973 0.03987169 -0.02799654 -0.008099973 0.03859084 -0.02770495 -0.008099973 0.03862905 -0.02770686 -0.008099973 0.03865915 -0.02786946 -0.008493661 0.03922796 -0.02779126 -0.008099973 0.03926682 -0.02780324 -0.008099973 0.03799945 -0.02793252 -0.008595943 0.03795367 -0.02772629 -0.008099973 0.038549 -0.02770292 -0.008099973 0.03735083 -0.0280947 -0.008647739 0.0373606 -0.0278449 -0.008099973 0.03791648 -0.02773374 -0.008099973 0.03673142 -0.0283516 -0.008647739 0.03672975 -0.02808672 -0.008099973 0.03728377 -0.02786761 -0.008099973 0.03607845 -0.02849894 -0.008099973 0.03614431 -0.02844184 -0.008099973 0.03615844 -0.02869594 -0.008595943 0.03620934 -0.02839493 -0.008099973 0.03664368 -0.02813768 -0.008099973 0.03569406 -0.02883201 -0.008099973 0.03564769 -0.02911823 -0.008493661 0.03558629 -0.02896034 -0.008099973 0.03521347 -0.02960675 -0.008343815 0.03525924 -0.02936089 -0.008099973 0.03530508 -0.02929508 -0.008099973 0.03481948 -0.03025919 -0.008099973 0.0348677 -0.03013151 -0.008099973 0.03486782 -0.03014791 -0.008150577 0.03496348 -0.02987807 -0.008099973 0.03517645 -0.02950561 -0.008099973 0.03496897 -0.03039175 -0.008564472 0.03472822 -0.03052103 -0.008099973 0.03474968 -0.03044384 -0.008099973 0.03461849 -0.03118407 -0.008099973 0.03480917 -0.03118187 -0.008565902 0.0346077 -0.03163522 -0.008099973 0.03462308 -0.03167682 -0.008153557 0.03460586 -0.03171163 -0.008099973 0.03460758 -0.0317372 -0.008099973 0.03505462 -0.03271746 -0.008653879 0.03478276 -0.03262531 -0.008099973 0.03493618 -0.03243178 -0.008601665 0.03470331 -0.03238022 -0.008099973 0.0348227 -0.03215813 -0.008498728 0.03465723 -0.03208589 -0.008099973 0.03471738 -0.03190416 -0.008347988 0.03461116 -0.03179162 -0.008099973 0.03506219 -0.03331631 -0.008099973 0.03503638 -0.03326231 -0.008099973 0.03529322 -0.03329282 -0.008601665 0.03493791 -0.03305625 -0.008099973 0.03517478 -0.03300714 -0.008653879 0.03488981 -0.03295558 -0.008099973 0.03485512 -0.03284853 -0.008099973 0.03510123 -0.03338634 -0.008099973 0.0354067 -0.03356647 -0.008498728 0.03516745 -0.03348356 -0.008099973 0.03551203 -0.03382045 -0.008347988 0.03533744 -0.03373312 -0.008099973 0.03585159 -0.0343188 -0.008099973 0.03562039 -0.03407359 -0.008099973 0.03560626 -0.03404778 -0.008153557 0.03557664 -0.03402721 -0.008099973 0.03543663 -0.03387874 -0.008099973 0.03639107 -0.03472554 -0.008099973 0.03623634 -0.0346114 -0.008099973 0.03619277 -0.03451848 -0.00826323 0.03594291 -0.03439497 -0.008099973 0.03608798 -0.03426581 -0.008565902 0.03591161 -0.03437191 -0.008099973 0.03676003 -0.034711 -0.008564472 0.03686118 -0.03495484 -0.008150577 0.03675127 -0.03491187 -0.008099973 0.0370025 -0.0350337 -0.008099973 0.03692829 -0.03500342 -0.008099973 0.03687173 -0.03497415 -0.008099973 0.03814083 -0.03513044 -0.008493661 0.03820914 -0.03529495 -0.008099973 0.03817087 -0.03529304 -0.008099973 0.03880053 -0.03506743 -0.008595943 0.03884625 -0.03527367 -0.008099973 0.03825092 -0.03529703 -0.008099973 0.03944909 -0.03490519 -0.008647739 0.03943932 -0.03515505 -0.008099973 0.0388835 -0.03526622 -0.008099973 0.0400685 -0.03464835 -0.008647739 0.04007023 -0.03491324 -0.008099973 0.03951621 -0.03513234 -0.008099973 0.04072147 -0.03450101 -0.008099973 0.04065561 -0.03455811 -0.008099973 0.04064154 -0.03430402 -0.008595943 0.04059058 -0.03460502 -0.008099973 0.0401563 -0.03486222 -0.008099973 0.04110586 -0.03416794 -0.008099973 0.04115223 -0.03388166 -0.008493661 0.04121369 -0.03403961 -0.008099973 0.04158645 -0.0333932 -0.008343815 0.04154068 -0.03363907 -0.008099973 0.0414949 -0.03370487 -0.008099973 0.04193222 -0.03286838 -0.008099973 0.04183644 -0.03312188 -0.008099973 0.04162347 -0.03349435 -0.008099973 0.04218143 -0.03181588 -0.008099973 0.04217958 -0.03189295 -0.008099973 0.04209554 -0.03207069 -0.00826323 0.04212927 -0.0321663 -0.008099973 0.04183101 -0.03260821 -0.008564472 0.0420717 -0.03247886 -0.008099973 0.04199075 -0.03181803 -0.008565902 0.04219222 -0.03136473 -0.008099973 0.04219406 -0.03128832 -0.008099973 0.0420826 -0.0310958 -0.008347988 0.04214268 -0.03091406 -0.008099973 0.0417453 -0.03028249 -0.008653879 0.04201716 -0.03037464 -0.008099973 0.04186379 -0.03056812 -0.008601665 0.04209661 -0.03061974 -0.008099973 0.04197722 -0.03084176 -0.008498728 0.0417636 -0.02973765 -0.008099973 0.04186207 -0.0299437 -0.008099973 0.0416252 -0.02999281 -0.008653879 0.04191017 -0.03004437 -0.008099973 0.04194486 -0.03015142 -0.008099973 0.04097157 -0.02936017 -0.009014904 0.04111915 -0.02971613 -0.009148776 0.04127323 -0.0300877 -0.009216666 0.04142951 -0.03046452 -0.009216666 0.04158359 -0.03083604 -0.009148776 0.04173117 -0.031192 -0.009014904 0.0404784 -0.02934634 -0.009469032 0.04065603 -0.02977472 -0.009630143 0.0408414 -0.03022181 -0.009711802 0.04102945 -0.03067529 -0.009711802 0.04121488 -0.03112244 -0.009630143 0.0413925 -0.03155076 -0.009469032 0.0418682 -0.03152239 -0.008818805 0.04155737 -0.03194838 -0.009233057 0.04115879 -0.03236192 -0.009579122 0.04083454 -0.02902978 -0.008818805 0.04031348 -0.02894878 -0.009233057 0.03973925 -0.02893865 -0.009579122 0.04147106 -0.03311491 -0.008816182 0.04102581 -0.03357672 -0.009011328 0.04050749 -0.03398084 -0.009144544 0.03993064 -0.03431594 -0.009212076 0.03931123 -0.03457278 -0.009212076 0.03866648 -0.03474426 -0.009144544 0.03801435 -0.0348255 -0.009011328 0.04170489 -0.03230416 -0.008928656 0.04132717 -0.03276795 -0.009231805 0.0408681 -0.03319644 -0.009466826 0.04034042 -0.03357779 -0.009627282 0.03975874 -0.03390139 -0.009708583 0.03913933 -0.03415828 -0.009708583 0.03849941 -0.03434121 -0.009627282 0.03785669 -0.03444522 -0.009466826 0.03706067 -0.03406131 -0.009579122 0.03722906 -0.03446733 -0.009231805 0.03737294 -0.03481429 -0.008816182 0.03524255 -0.03105157 -0.009233057 0.03540742 -0.03144919 -0.009469032 0.03558504 -0.03187751 -0.009630143 0.03577047 -0.03232467 -0.009711802 0.03595852 -0.03277808 -0.009711802 0.03614395 -0.03322523 -0.009630143 0.03632158 -0.03365355 -0.009469032 0.03648644 -0.03405117 -0.009233057 0.03663396 -0.03440696 -0.008928656 0.03942704 -0.0281856 -0.008816182 0.03878557 -0.02817445 -0.009011328 0.03813344 -0.0282557 -0.009144544 0.03748869 -0.02842712 -0.009212076 0.03686928 -0.02868402 -0.009212076 0.03629243 -0.02901911 -0.009144544 0.03577417 -0.02942323 -0.009011328 0.03532886 -0.02988505 -0.008816182 0.03493177 -0.03147757 -0.008818805 0.03506875 -0.03180795 -0.009014904 0.03521639 -0.03216391 -0.009148776 0.03537046 -0.03253543 -0.009216666 0.03552669 -0.03291225 -0.009216666 0.03568077 -0.03328382 -0.009148776 0.03582841 -0.03363972 -0.009014904 0.03596538 -0.03397017 -0.008818805 0.04016596 -0.028593 -0.008928656 0.03957092 -0.02853262 -0.009231805 0.03894329 -0.02855473 -0.009466826 0.03830057 -0.02865868 -0.009627282 0.03766059 -0.02884167 -0.009708583 0.03704118 -0.02909851 -0.009708583 0.03645956 -0.02942216 -0.009627282 0.03593182 -0.02980351 -0.009466826 0.03547275 -0.03023201 -0.009231805 0.03509503 -0.03069579 -0.008928656 0.05403393 0.01400232 -0.01099997 0.05408537 0.0141943 -0.01099997 0.05437231 0.0152651 -0.01099997 0.05492478 0.01644998 -0.01099997 0.05567461 0.0175209 -0.01099997 0.05659908 0.01844531 -0.01099997 0.05766999 0.01919513 -0.01099997 0.05885481 0.01974767 -0.01099997 0.0601176 0.02008605 -0.01099997 0.06141996 0.02019995 -0.01099997 0.06272232 0.02008605 -0.01099997 0.0639851 0.01974767 -0.01099997 0.06516999 0.01919513 -0.01099997 0.0662409 0.01844531 -0.01099997 0.06716531 0.0175209 -0.01099997 0.0679152 0.01644998 -0.01099997 0.06846767 0.0152651 -0.01099997 0.06875461 0.0141943 -0.01099997 0.06880605 0.01400232 -0.01099997 0.06891995 0.01269996 -0.01099997 0.0688886 0.01234132 -0.01099997 0.06880605 0.0113976 -0.01099997 0.06846767 0.01013481 -0.01099997 0.0679152 0.008949995 -0.01099997 0.06719332 0.007919073 -0.01099997 0.06716531 0.007879078 -0.01099997 0.0662409 0.00695461 -0.01099997 0.06516999 0.006204783 -0.01099997 0.0639851 0.005652248 -0.01099997 0.06272232 0.005313932 -0.01099997 0.06141996 0.005199968 -0.01099997 0.0601176 0.005313932 -0.01099997 0.05885481 0.005652248 -0.01099997 0.05766999 0.006204783 -0.01099997 0.05659908 0.00695461 -0.01099997 0.05567461 0.007879078 -0.01099997 0.05564659 0.007919073 -0.01099997 0.05492478 0.008949995 -0.01099997 0.05437231 0.01013481 -0.01099997 0.05403393 0.0113976 -0.01099997 0.05395138 0.01234132 -0.01099997 0.05391997 0.01269996 -0.01099997 0.04692655 -0.01929217 -0.01099997 0.04693692 -0.01940065 -0.01099997 0.0469321 -0.01948231 -0.01099997 0.04691773 -0.01954829 -0.01099997 0.04689598 -0.0196042 -0.01099997 0.04686826 -0.01965111 -0.01099997 0.04686492 -0.01965671 -0.01099997 0.04682552 -0.01970356 -0.01099997 0.04677635 -0.01974594 -0.01099997 0.04671353 -0.01978546 -0.01099997 0.04667079 -0.01980435 -0.01099997 0.04663014 -0.01982241 -0.01099997 0.04652863 -0.01985239 -0.01099997 0.04661339 -0.0172435 -0.01099997 0.04648911 -0.01646381 -0.01099997 0.04667079 -0.01761919 -0.01099997 0.04683107 -0.01866775 -0.01099997 0.04617935 -0.01574826 -0.01099997 0.04611223 -0.01569956 -0.01099997 0.04603326 -0.01566022 -0.01099997 0.04594814 -0.01563411 -0.01099997 0.04623091 -0.01579964 -0.01099997 0.04623943 -0.01580816 -0.01099997 0.04629558 -0.0158835 -0.01099997 0.04635995 -0.01600438 -0.01099997 0.04643118 -0.01621037 -0.01099997 0.04465079 -0.01533502 -0.01099997 0.04469108 -0.01534444 -0.01099997 0.04540646 -0.01550924 -0.01099997 0.04411137 -0.01562219 -0.01099997 0.04413306 -0.01553833 -0.01099997 0.04415863 -0.01547908 -0.01099997 0.04418683 -0.01543432 -0.01099997 0.0442177 -0.01539909 -0.01099997 0.04425531 -0.01536828 -0.01099997 0.04429692 -0.01534461 -0.01099997 0.04434382 -0.01532709 -0.01099997 0.04439979 -0.01531541 -0.01099997 0.04446971 -0.01531106 -0.01099997 0.04458516 -0.01532167 -0.01099997 0.04342496 -0.01960325 -0.01099997 0.04352861 -0.01899826 -0.01099997 0.04358536 -0.01866775 -0.01099997 0.04396843 -0.0164355 -0.01099997 0.04342114 -0.01974278 -0.01099997 0.04344111 -0.01990616 -0.01099997 0.04347628 -0.02002924 -0.01099997 0.0435183 -0.02011859 -0.01099997 0.04355818 -0.02017766 -0.01099997 0.04360228 -0.02022582 -0.01099997 0.04365199 -0.02026557 -0.01099997 0.04370933 -0.02029788 -0.01099997 0.04377222 -0.02032089 -0.01099997 0.04384726 -0.02033555 -0.01099997 0.04394125 -0.02033901 -0.01099997 0.04406702 -0.02032405 -0.01099997 0.04342252 -0.01965111 -0.01099997 0.04342299 -0.01961845 -0.01099997 0.04638481 -0.01987981 -0.01099997 0.04623091 -0.01990932 -0.01099997 0.04505914 -0.02013391 -0.01099997 0.04980641 -0.01377391 -0.01099997 0.04987293 -0.01379519 -0.01099997 0.04993069 -0.01382321 -0.01099997 0.04997992 -0.013857 -0.01099997 0.05002111 -0.01389586 -0.01099997 0.05005776 -0.01394391 -0.01099997 0.05008816 -0.01400196 -0.01099997 0.05011016 -0.01406931 -0.01099997 0.05012315 -0.01415109 -0.01099997 0.05012392 -0.01425522 -0.01099997 0.05011248 -0.01435446 -0.01099997 0.04886794 -0.01354593 -0.01099997 0.0474016 -0.01318967 -0.01099997 0.04664152 -0.01389491 -0.01099997 0.04665344 -0.01375395 -0.01099997 0.04667079 -0.01367765 -0.01099997 0.04668885 -0.01359856 -0.01099997 0.04673558 -0.01347798 -0.01099997 0.04678899 -0.01338499 -0.01099997 0.04684317 -0.01331758 -0.01099997 0.04689997 -0.01326578 -0.01099997 0.04696041 -0.01322603 -0.01099997 0.04702007 -0.01319849 -0.01099997 0.04709804 -0.01317626 -0.01099997 0.04718631 -0.01316601 -0.01099997 0.0472908 -0.01317006 -0.01099997 0.04724156 -0.01785975 -0.01099997 0.04723322 -0.0178101 -0.01099997 0.04691791 -0.01572364 -0.01099997 0.04667079 -0.01408869 -0.01099997 0.04776787 -0.01820904 -0.01099997 0.04765975 -0.01822966 -0.01099997 0.04758256 -0.01823252 -0.01099997 0.0475226 -0.01822543 -0.01099997 0.04747343 -0.01821166 -0.01099997 0.04743123 -0.01819229 -0.01099997 0.04739475 -0.01816809 -0.01099997 0.04735893 -0.01813519 -0.01099997 0.04732638 -0.01809412 -0.01099997 0.0472961 -0.01804143 -0.01099997 0.0472635 -0.01795613 -0.01099997 0.04907727 -0.0179668 -0.01099997 0.04905605 -0.01797145 -0.01099997 0.04853308 -0.01806789 -0.01099997 0.04957473 -0.01738506 -0.01099997 0.04953873 -0.01753801 -0.01099997 0.04950278 -0.01764082 -0.01099997 0.04946017 -0.01772218 -0.01099997 0.04941374 -0.01778441 -0.01099997 0.04935908 -0.0178377 -0.01099997 0.04928737 -0.01788783 -0.01099997 0.04919964 -0.01792997 -0.01099997 0.05008774 -0.01449525 -0.01099997 0.04972213 -0.01655453 -0.01099997 0.05343931 -0.01806354 -0.01099997 0.05344933 -0.01817202 -0.01099997 0.05344426 -0.01825368 -0.01099997 0.05342966 -0.0183196 -0.01099997 0.05340766 -0.01837545 -0.01099997 0.05337649 -0.01842778 -0.01099997 0.05333685 -0.01847451 -0.01099997 0.05328756 -0.01851683 -0.01099997 0.05322456 -0.01855611 -0.01099997 0.05314105 -0.01859283 -0.01099997 0.05303966 -0.01862245 -0.01099997 0.05289101 -0.01506882 -0.01099997 0.05304586 -0.0158894 -0.01099997 0.05246633 -0.01447165 -0.01099997 0.05253422 -0.01449495 -0.01099997 0.05259728 -0.01452869 -0.01099997 0.05265319 -0.01457118 -0.01099997 0.05270475 -0.01462429 -0.01099997 0.05276191 -0.01470524 -0.01099997 0.05281847 -0.01482117 -0.01099997 0.05288237 -0.015033 -0.01099997 0.05117452 -0.01415222 -0.01099997 0.05121409 -0.01416182 -0.01099997 0.05192923 -0.01433879 -0.01099997 0.05208086 -0.01437628 -0.01099997 0.05063432 -0.01443767 -0.01099997 0.05065888 -0.01434445 -0.01099997 0.05068641 -0.01428115 -0.01099997 0.05071574 -0.01423484 -0.01099997 0.05074673 -0.01419961 -0.01099997 0.05078011 -0.01417195 -0.01099997 0.05081903 -0.01414912 -0.01099997 0.05086237 -0.01413244 -0.01099997 0.0509122 -0.01412165 -0.01099997 0.0509724 -0.01411777 -0.01099997 0.05106574 -0.01412624 -0.01099997 0.04993659 -0.01836466 -0.01099997 0.04999792 -0.01801031 -0.01099997 0.05042952 -0.01557016 -0.01099997 0.05057686 -0.01908725 -0.01099997 0.05045211 -0.01910173 -0.01099997 0.05035871 -0.0190981 -0.01099997 0.0502842 -0.01908326 -0.01099997 0.05022168 -0.01906019 -0.01099997 0.05016463 -0.01902788 -0.01099997 0.05011522 -0.01898813 -0.01099997 0.05007129 -0.01893991 -0.01099997 0.0500316 -0.01888072 -0.01099997 0.04998958 -0.0187909 -0.01099997 0.04995465 -0.01866775 -0.01099997 0.04995429 -0.01866644 -0.01099997 0.04993414 -0.01849925 -0.01099997 0.04993593 -0.01837074 -0.01099997 0.0528959 -0.01864945 -0.01099997 0.05279916 -0.01866775 -0.01099997 0.05208086 -0.01880335 -0.01099997 0.0515694 -0.01889985 -0.01099997 0.04792845 0.01965004 -0.01099997 0.04811429 0.01977646 -0.01099997 0.04845488 0.01993876 -0.01099997 0.04887837 0.02006173 -0.01099997 0.0492807 0.02011156 -0.01099997 0.04939556 0.02011418 -0.01099997 0.04712331 0.01880401 -0.01099997 0.04730981 0.01908707 -0.01099997 0.04758191 0.01938283 -0.01099997 0.04787278 0.01961398 -0.01099997 0.04710268 0.01880401 -0.01099997 0.04680252 0.01947957 -0.01099997 0.04690545 0.01923012 -0.01099997 0.04695522 0.01912254 -0.01099997 0.04667079 0.01982164 -0.01099997 0.04659092 0.02006638 -0.01099997 0.04669296 0.01976335 -0.01099997 0.04667288 0.01981538 -0.01099997 0.04653638 0.02030527 -0.01099997 0.04655331 0.0201987 -0.01099997 0.04650908 0.02033948 -0.01099997 0.04623091 0.02007853 -0.01099997 0.04617136 0.02002269 -0.01099997 0.04584711 0.01971846 -0.01099997 0.04584711 0.01964336 -0.01099997 0.04583889 0.0196678 -0.01099997 0.04583704 0.01967906 -0.01099997 0.04583704 0.01968771 -0.01099997 0.04583853 0.01969665 -0.01099997 0.04584276 0.01970911 -0.01099997 0.0462498 0.01876306 -0.01099997 0.04623091 0.01880013 -0.01099997 0.04622781 0.01880621 -0.01099997 0.04603815 0.01922327 -0.01099997 0.04669344 0.01796466 -0.01099997 0.04667079 0.01800304 -0.01099997 0.04661542 0.01809692 -0.01099997 0.04648423 0.01833593 -0.01099997 0.04667079 0.01785606 -0.01099997 0.04666548 0.01783037 -0.01099997 0.04665267 0.01776891 -0.01099997 0.0466386 0.01767134 -0.01099997 0.04661828 0.01732343 -0.01099997 0.04662412 0.01749718 -0.01099997 0.04662203 0.01747196 -0.01099997 0.04934102 0.01453906 -0.01099997 0.04888534 0.01457655 -0.01099997 0.04845345 0.0146858 -0.01099997 0.04805135 0.01486182 -0.01099997 0.04768323 0.01510137 -0.01099997 0.04735463 0.01540231 -0.01099997 0.04707783 0.01575613 -0.01099997 0.04685974 0.0161572 -0.01099997 0.04670798 0.01659768 -0.01099997 0.04667079 0.01681995 -0.01099997 0.04662877 0.01707112 -0.01099997 0.05208086 0.01711511 -0.01099997 0.05210465 0.01740509 -0.01099997 0.05206078 0.01687127 -0.01099997 0.05193418 0.01637595 -0.01099997 0.05173736 0.01593512 -0.01099997 0.05147999 0.01554971 -0.01099997 0.05117499 0.01522624 -0.01099997 0.05082094 0.01495814 -0.01099997 0.05042791 0.01475328 -0.01099997 0.05000078 0.01461464 -0.01099997 0.04954177 0.01454579 -0.01099997 0.04940241 0.02011418 -0.01099997 0.04989421 0.02007377 -0.01099997 0.05035048 0.01995706 -0.01099997 0.05075681 0.01977556 -0.01099997 0.05111467 0.01953697 -0.01099997 0.05142211 0.01924806 -0.01099997 0.05167925 0.0189104 -0.01099997 0.05188077 0.01852875 -0.01099997 0.05202162 0.01810592 -0.01099997 0.05208086 0.01773482 -0.01099997 0.05209541 0.01764357 -0.01099997 0.04675477 0.01384961 -0.01099997 0.04676795 0.01383638 -0.01099997 0.04678571 0.01382374 -0.01099997 0.04680788 0.01381278 -0.01099997 0.04685395 0.01379829 -0.01099997 0.04693555 0.01378411 -0.01099997 0.04787677 0.01375561 -0.01099997 0.04906803 0.01375412 -0.01099997 0.04671382 0.01384961 -0.01099997 0.04671382 0.01263493 -0.01099997 0.04676145 0.01263493 -0.01099997 0.04906117 0.01273053 -0.01099997 0.04707056 0.01271241 -0.01099997 0.04687422 0.01269018 -0.01099997 0.04682594 0.01267719 -0.01099997 0.04679965 0.01266592 -0.01099997 0.04678231 0.01265513 -0.01099997 0.04676938 0.01264393 -0.01099997 0.04981857 0.01273053 -0.01099997 0.05198878 0.01264178 -0.01099997 0.05197918 0.01265239 -0.01099997 0.05196624 0.01266264 -0.01099997 0.05194979 0.012672 -0.01099997 0.05191767 0.0126841 -0.01099997 0.05184412 0.01269942 -0.01099997 0.05129778 0.01272588 -0.01099997 0.0520364 0.01264178 -0.01099997 0.0520364 0.0138427 -0.01099997 0.05198878 0.0138427 -0.01099997 0.04981857 0.01375412 -0.01099997 0.05171853 0.01377242 -0.01099997 0.05188298 0.01379173 -0.01099997 0.05192905 0.01380389 -0.01099997 0.05195349 0.01381421 -0.01099997 0.0519694 0.01382398 -0.01099997 0.05198097 0.01383388 -0.01099997 0.0510742 0.008096933 -0.01099997 0.0510959 0.008120417 -0.01099997 0.05111503 0.008148849 -0.01099997 0.05113774 0.008197188 -0.01099997 0.05116081 0.008278369 -0.01099997 0.05118036 0.008440196 -0.01099997 0.05118346 0.008560657 -0.01099997 0.0510742 0.008042275 -0.01099997 0.0520364 0.008042275 -0.01099997 0.0520364 0.0120477 -0.01099997 0.0510742 0.0120477 -0.01099997 0.0510742 0.01200014 -0.01099997 0.05118346 0.01153606 -0.01099997 0.05116999 0.01175856 -0.01099997 0.05114805 0.0118612 -0.01099997 0.05112487 0.01192295 -0.01099997 0.05110013 0.01196712 -0.01099997 0.05118346 0.01055341 -0.01099997 0.04906803 0.01055341 -0.01099997 0.04675477 0.01065587 -0.01099997 0.04675573 0.01064884 -0.01099997 0.04675763 0.0106427 -0.01099997 0.04676073 0.0106365 -0.01099997 0.04676491 0.01063078 -0.01099997 0.04677057 0.01062512 -0.01099997 0.04677861 0.0106191 -0.01099997 0.04679441 0.01061069 -0.01099997 0.04682701 0.01059961 -0.01099997 0.04688113 0.01058852 -0.01099997 0.0473597 0.01056063 -0.01099997 0.04671382 0.01065587 -0.01099997 0.04671382 0.009441196 -0.01099997 0.04675477 0.009441196 -0.01099997 0.04906803 0.009536683 -0.01099997 0.04706013 0.009518682 -0.01099997 0.04685997 0.00949639 -0.01099997 0.04681611 0.009484708 -0.01099997 0.04679238 0.009474873 -0.01099997 0.04677742 0.009465873 -0.01099997 0.04676717 0.00945729 -0.01099997 0.04675948 0.009448468 -0.01099997 0.05118346 0.009536683 -0.01099997 0.04662513 0.005004882 -0.01099997 0.04666662 0.005509793 -0.01099997 0.04667079 0.005526185 -0.01099997 0.04678618 0.005977928 -0.01099997 0.04697245 0.006396353 -0.01099997 0.0472182 0.006766676 -0.01099997 0.04751813 0.007087647 -0.01099997 0.04786783 0.00735563 -0.01099997 0.04826235 0.007565438 -0.01099997 0.04869645 0.007711172 -0.01099997 0.04916554 0.007786691 -0.01099997 0.04940241 0.007795929 -0.01099997 0.04935461 0.002234518 -0.01099997 0.0488941 0.002272427 -0.01099997 0.04845881 0.002382576 -0.01099997 0.04805493 0.002559542 -0.01099997 0.04768615 0.00279963 -0.01099997 0.04735743 0.003100872 -0.01099997 0.04708105 0.003454387 -0.01099997 0.04686379 0.003854215 -0.01099997 0.04671317 0.00429207 -0.01099997 0.04667079 0.004546582 -0.01099997 0.04663521 0.004760503 -0.01099997 0.05208086 0.004783332 -0.01099997 0.05210465 0.005073308 -0.01099997 0.05206131 0.004545569 -0.01099997 0.05193608 0.004055857 -0.01099997 0.05174154 0.003620386 -0.01099997 0.05148714 0.003239452 -0.01099997 0.05118507 0.002919018 -0.01099997 0.050834 0.002653121 -0.01099997 0.05044347 0.002449333 -0.01099997 0.05001789 0.002310752 -0.01099997 0.04955941 0.002241551 -0.01099997 0.04940932 0.007795929 -0.01099997 0.04989945 0.007755637 -0.01099997 0.05035442 0.007639169 -0.01099997 0.05075907 0.00745815 -0.01099997 0.05111515 0.007220447 -0.01099997 0.05142086 0.006932556 -0.01099997 0.05167704 0.006595671 -0.01099997 0.05187839 0.006213784 -0.01099997 0.05201995 0.005788683 -0.01099997 0.05208086 0.005408763 -0.01099997 0.05209493 0.005320787 -0.01099997 0.0470072 9.78485e-4 -0.01099997 0.04713249 0.001158595 -0.01099997 0.04729813 0.001330018 -0.01099997 0.04749184 0.001472413 -0.01099997 0.04750829 0.001482307 -0.01099997 0.04771733 0.001583337 -0.01099997 0.04794305 0.001648247 -0.01099997 0.04816168 0.001673519 -0.01099997 0.04821503 0.001674473 -0.01099997 0.04670011 -5.70624e-4 -0.01099997 0.04674762 2.01682e-4 -0.01099997 0.04682767 5.69367e-4 -0.01099997 0.04693257 8.40451e-4 -0.01099997 0.0467137 -0.001143634 -0.01099997 0.04670673 -9.30558e-4 -0.01099997 0.0467053 -8.51988e-4 -0.01099997 0.04673421 -0.001580595 -0.01099997 0.04672658 -0.001422047 -0.01099997 0.04672241 -0.001331388 -0.01099997 0.04677528 -0.001580595 -0.01099997 0.04906815 -0.001491844 -0.01099997 0.04703271 -0.00151056 -0.01099997 0.04686969 -0.001528859 -0.01099997 0.04686176 -0.001530468 -0.01099997 0.04682499 -0.001540422 -0.01099997 0.04680472 -0.001549065 -0.01099997 0.0467934 -0.001556098 -0.01099997 0.04678642 -0.001562118 -0.01099997 0.04678153 -0.0015679 -0.01099997 0.04677772 -0.001574337 -0.01099997 0.04981875 -0.001491844 -0.01099997 0.05197513 -0.001573681 -0.01099997 0.05196851 -0.001565337 -0.01099997 0.05195957 -0.001557171 -0.01099997 0.05194807 -0.001549541 -0.01099997 0.05192679 -0.001539945 -0.01099997 0.05188143 -0.001527607 -0.01099997 0.0518549 -0.001522839 -0.01099997 0.05139583 -0.001497685 -0.01099997 0.05201607 -0.001573681 -0.01099997 0.05203652 -0.001116454 -0.01099997 0.05203193 -0.001294136 -0.01099997 0.05202829 -0.001357853 -0.01099997 0.05205017 -3.93249e-4 -0.01099997 0.05204957 -6.55009e-4 -0.01099997 0.05204629 -7.7011e-4 -0.01099997 0.05192732 5.21241e-4 -0.01099997 0.05200564 1.8249e-4 -0.01099997 0.05204886 -2.9628e-4 -0.01099997 0.0506376 0.001456201 -0.01099997 0.05087304 0.001439929 -0.01099997 0.05108612 0.001392543 -0.01099997 0.05128049 0.001314342 -0.01099997 0.05144268 0.001215338 -0.01099997 0.05159193 0.001086831 -0.01099997 0.05171334 9.44244e-4 -0.01099997 0.05181866 7.77229e-4 -0.01099997 0.05191695 5.52346e-4 -0.01099997 0.04950475 6.16866e-4 -0.01099997 0.0495674 7.93333e-4 -0.01099997 0.04965335 9.47344e-4 -0.01099997 0.04976415 0.001086711 -0.01099997 0.04989922 0.001209318 -0.01099997 0.04997479 0.001262903 -0.01099997 0.05014359 0.001353919 -0.01099997 0.05033075 0.001418113 -0.01099997 0.05053228 0.00145179 -0.01099997 0.04949116 6.16866e-4 -0.01099997 0.04822188 0.001674473 -0.01099997 0.0484364 0.001658082 -0.01099997 0.04864734 0.001606702 -0.01099997 0.04883503 0.001525998 -0.01099997 0.04900312 0.001418232 -0.01099997 0.04914963 0.0012874 -0.01099997 0.04927963 0.001127839 -0.01099997 0.04938548 9.44287e-4 -0.01099997 0.04946202 7.41433e-4 -0.01099997 0.04662513 -0.005075037 -0.01099997 0.04666662 -0.004570007 -0.01099997 0.04667079 -0.004553675 -0.01099997 0.04678624 -0.004101753 -0.01099997 0.04697251 -0.003683388 -0.01099997 0.0472182 -0.003313064 -0.01099997 0.04751813 -0.002992212 -0.01099997 0.04786783 -0.002724289 -0.01099997 0.04826223 -0.002514481 -0.01099997 0.04869633 -0.002368748 -0.01099997 0.04916548 -0.002293288 -0.01099997 0.04940241 -0.002284049 -0.01099997 0.04935461 -0.007845401 -0.01099997 0.04889416 -0.007807493 -0.01099997 0.04845887 -0.007697343 -0.01099997 0.04805499 -0.007520377 -0.01099997 0.04768621 -0.00728029 -0.01099997 0.04735749 -0.006979048 -0.01099997 0.04708111 -0.006625533 -0.01099997 0.04686379 -0.006225705 -0.01099997 0.04671317 -0.005787849 -0.01099997 0.04667079 -0.005533277 -0.01099997 0.04663521 -0.005319416 -0.01099997 0.05208086 -0.005296587 -0.01099997 0.05210465 -0.005006611 -0.01099997 0.05206131 -0.00553435 -0.01099997 0.05193608 -0.006023943 -0.01099997 0.0517416 -0.006459474 -0.01099997 0.0514872 -0.006840348 -0.01099997 0.05118507 -0.007160842 -0.01099997 0.050834 -0.007426738 -0.01099997 0.05044347 -0.007630586 -0.01099997 0.05001783 -0.007769107 -0.01099997 0.04955941 -0.007838368 -0.01099997 0.04940932 -0.002284049 -0.01099997 0.04989951 -0.002324283 -0.01099997 0.05035454 -0.00244081 -0.01099997 0.05075919 -0.002621769 -0.01099997 0.05111521 -0.002859532 -0.01099997 0.05142098 -0.003147363 -0.01099997 0.0516771 -0.003484249 -0.01099997 0.05187845 -0.003866136 -0.01099997 0.05201995 -0.004291236 -0.01099997 0.05208086 -0.004671096 -0.01099997 0.05209493 -0.004759132 -0.01099997 0.05198186 -0.01175582 -0.01099997 0.05197948 -0.0117501 -0.01099997 0.05197578 -0.01174432 -0.01099997 0.05197101 -0.01173895 -0.01099997 0.05196446 -0.01173359 -0.01099997 0.05195289 -0.01172667 -0.01099997 0.05193048 -0.01171785 -0.01099997 0.05187439 -0.01170533 -0.01099997 0.05149573 -0.01168167 -0.01099997 0.04981875 -0.01167392 -0.01099997 0.05202275 -0.01175582 -0.01099997 0.05204325 -0.0112577 -0.01099997 0.05203533 -0.01147615 -0.01099997 0.0520327 -0.01153492 -0.01099997 0.05205702 -0.01061618 -0.01099997 0.05205005 -0.01094204 -0.01099997 0.05192732 -0.009592592 -0.01099997 0.05201578 -0.009980916 -0.01099997 0.05205619 -0.01051288 -0.01099997 0.05048739 -0.008589446 -0.01099997 0.05080145 -0.008614718 -0.01099997 0.05103957 -0.008673906 -0.01099997 0.05125671 -0.008767545 -0.01099997 0.05143719 -0.008884131 -0.01099997 0.05159944 -0.009031116 -0.01099997 0.05173122 -0.009194493 -0.01099997 0.05184203 -0.009382843 -0.01099997 0.04926598 -0.009162724 -0.01099997 0.04939037 -0.00901848 -0.01099997 0.04956513 -0.008871912 -0.01099997 0.04976379 -0.008753299 -0.01099997 0.04998588 -0.008664131 -0.01099997 0.05025839 -0.008604228 -0.01099997 0.04902708 -0.009558498 -0.01099997 0.04908382 -0.009434401 -0.01099997 0.04921472 -0.009230256 -0.01099997 0.04901349 -0.009558498 -0.01099997 0.0472939 -0.008323371 -0.01099997 0.04736369 -0.008373737 -0.01099997 0.04863595 -0.009287416 -0.01099997 0.04675471 -0.007879853 -0.01099997 0.04676711 -0.00789684 -0.01099997 0.04683679 -0.007965981 -0.01099997 0.04714006 -0.008209466 -0.01099997 0.04671376 -0.007879853 -0.01099997 0.04671376 -0.008903443 -0.01099997 0.04674112 -0.009121775 -0.01099997 0.04672241 -0.009031414 -0.01099997 0.04671394 -0.008921146 -0.01099997 0.0488224 -0.01052069 -0.01099997 0.04863405 -0.01039266 -0.01099997 0.04770606 -0.009769618 -0.01099997 0.0488224 -0.01070493 -0.01099997 0.04854935 -0.01070493 -0.01099997 0.04675471 -0.01062303 -0.01099997 0.04675906 -0.01062959 -0.01099997 0.04676467 -0.01063561 -0.01099997 0.0467723 -0.01064163 -0.01099997 0.04678642 -0.01064962 -0.01099997 0.04681408 -0.01065981 -0.01099997 0.04688292 -0.01067388 -0.01099997 0.04742521 -0.01070016 -0.01099997 0.04671376 -0.01062303 -0.01099997 0.04671376 -0.01175582 -0.01099997 0.04675471 -0.01175582 -0.01099997 0.04906803 -0.01167392 -0.01099997 0.04694068 -0.01169729 -0.01099997 0.0468387 -0.01171153 -0.01099997 0.04679811 -0.01172292 -0.01099997 0.04678136 -0.01173043 -0.01099997 0.04677063 -0.01173722 -0.01099997 0.04676353 -0.01174348 -0.01099997 0.04675841 -0.01174968 -0.01099997 0.08403974 0.01429229 -0.01097178 0.08371138 0.01544594 -0.01097178 0.08472692 0.01580768 -0.01077491 0.08360636 0.01321196 -0.01099997 0.08345293 0.01416587 -0.01099997 0.08275645 0.01617169 -0.01099997 0.08269888 0.0162726 -0.01099997 0.08323645 0.01654738 -0.01097178 0.08224004 0.01707655 -0.01099997 0.08212256 0.01723396 -0.01099997 0.082623 0.01757812 -0.01097178 0.08160096 0.01793301 -0.01099997 0.08142828 0.01811361 -0.01099997 0.08188128 0.01852071 -0.01097178 0.08545434 0.02305549 -0.004649996 0.08616173 0.02236366 -0.004649996 0.08614075 0.02234482 -0.005247533 0.08690679 0.02141672 -0.004649996 0.08736485 0.02083462 -0.004649996 0.0873416 0.02081871 -0.005247533 0.08810836 0.01958554 -0.004649996 0.08835995 0.01916277 -0.004649996 0.08833485 0.01914995 -0.005247533 0.08599996 0.01506054 -0.01039409 0.08599996 0.01472121 -0.01042646 0.08509355 0.01451951 -0.01077491 0.08599996 0.01391494 -0.01050335 0.08599996 0.01325577 -0.01052254 0.08529037 0.01319479 -0.01077491 0.08361417 0.01305621 -0.01099997 0.08421605 0.01310586 -0.01097178 0.08364999 0.01234287 -0.01099997 0.08424758 0.01234287 -0.01097178 0.08523648 0.01234287 -0.01079118 0.08444768 0.01234287 -0.01093524 0.08532559 0.01234287 -0.01077491 0.08599996 0.01234287 -0.01054912 0.08569538 0.01615267 -0.01039564 0.08658802 0.01647061 -0.009845197 0.08673143 0.01549994 -0.009949088 0.08775305 0.01549994 -0.009138345 0.08772391 0.01549994 -0.009170293 0.08737826 0.01675212 -0.009140074 0.08707344 0.01549994 -0.009715318 0.08688718 0.01549994 -0.009842634 0.0882979 0.01549994 -0.008541822 0.08804249 0.01698869 -0.008301258 0.0884782 0.01549994 -0.008299708 0.08856099 0.0171734 -0.007353663 0.08897882 0.01549994 -0.007487177 0.08854722 0.01549994 -0.008206963 0.08891826 0.01730066 -0.006325542 0.08931165 0.01549994 -0.006712257 0.08903747 0.01549994 -0.007350564 0.08964008 0.01549994 -0.005002617 0.08962351 0.01549994 -0.005246818 0.08910375 0.0173667 -0.005247533 0.08960711 0.01549994 -0.005488336 0.08943909 0.01549994 -0.006306171 0.08903396 0.01759964 -0.004649996 0.08913028 0.01737618 -0.004649996 0.0896629 0.01550489 -0.004649996 0.08966398 0.01549994 -0.004649996 0.08475244 0.02370268 -0.005247533 0.08477079 0.02372401 -0.004649996 0.08379846 0.02449136 -0.004649996 0.08378195 0.02446854 -0.005247533 0.08372831 0.02439445 -0.005748391 0.08462423 0.02355331 -0.006325542 0.0836665 0.02430909 -0.006325542 0.08356088 0.0241633 -0.006813645 0.08437711 0.02326548 -0.007353663 0.08344399 0.02400189 -0.007353663 0.08328747 0.02378576 -0.007813096 0.08401858 0.02284789 -0.008301258 0.08312118 0.02355617 -0.008301258 0.08291643 0.02327352 -0.008716464 0.08355933 0.02231287 -0.009140074 0.08270752 0.0229851 -0.009140074 0.08245903 0.02264195 -0.009496212 0.08301287 0.02167642 -0.009845197 0.08221548 0.02230566 -0.009845197 0.08192914 0.0219103 -0.01012879 0.08239567 0.02095741 -0.01039564 0.08165967 0.02153825 -0.01039564 0.08134293 0.02110087 -0.01059484 0.08172595 0.02017736 -0.01077491 0.08105665 0.02070558 -0.01077491 0.08102375 0.0193594 -0.01097178 0.0804243 0.01983249 -0.01097178 0.0807181 0.02023816 -0.01088035 0.08007377 0.0193485 -0.01099997 0.08062595 0.01889562 -0.01099997 0.08087956 0.0186876 -0.01099997 0.08344835 0.0141943 -0.01099997 0.08344513 0.01421427 -0.01099997 0.08316034 0.01521253 -0.01099997 0.08314675 0.01524472 -0.01099997 0.08599996 0.01549994 -0.01035219 0.0881595 0.01906043 -0.006325542 0.08782166 0.01888799 -0.007353663 0.08733147 0.01863777 -0.008301258 0.08670341 0.01831716 -0.009140074 0.08595627 0.01793581 -0.009845197 0.08511233 0.01750493 -0.01039564 0.08419662 0.01703751 -0.01077491 0.0871793 0.02070724 -0.006325542 0.08686667 0.02049249 -0.007353663 0.08641296 0.02018094 -0.008301258 0.0858317 0.0197817 -0.009140074 0.08514022 0.01930683 -0.009845197 0.0843591 0.01877039 -0.01039564 0.08351159 0.01818835 -0.01077491 0.08599424 0.02221328 -0.006325542 0.08571201 0.0219599 -0.007353663 0.08530247 0.02159219 -0.008301258 0.08477777 0.02112114 -0.009140074 0.08415353 0.02056074 -0.009845197 0.08344846 0.01992774 -0.01039564 0.08268344 0.01924091 -0.01077491 0.08364999 -0.001932322 -0.01099997 0.08444768 -0.01234287 -0.01093524 0.08364999 -0.007862627 -0.01099997 0.08424758 -0.01234287 -0.01097178 0.08364999 -0.01234287 -0.01099997 0.08364999 0.001954495 -0.01099997 0.08364999 0.007919073 -0.01099997 0.08364999 0.01234132 -0.01099997 0.08599996 -0.01234287 -0.01054912 0.08532559 -0.01234287 -0.01077491 0.08523648 -0.01234287 -0.01079118 0.05437231 -0.01013481 -0.01099997 0.05492478 -0.008949995 -0.01099997 0.05567461 -0.007879078 -0.01099997 0.05569106 -0.007862627 -0.01099997 0.05659908 -0.00695461 -0.01099997 0.05766999 -0.006204783 -0.01099997 0.05885481 -0.005652248 -0.01099997 0.0601176 -0.005313932 -0.01099997 0.06141996 -0.005199968 -0.01099997 0.06272232 -0.005313932 -0.01099997 0.0639851 -0.005652248 -0.01099997 0.06516999 -0.006204783 -0.01099997 0.0662409 -0.00695461 -0.01099997 0.06714886 -0.007862627 -0.01099997 0.06716531 -0.007879078 -0.01099997 0.0679152 -0.008949995 -0.01099997 0.06846767 -0.01013481 -0.01099997 0.06880605 -0.0113976 -0.01099997 0.06889903 -0.0124607 -0.01099997 0.06891995 -0.01269996 -0.01099997 0.06880605 -0.01400232 -0.01099997 0.06846767 -0.0152651 -0.01099997 0.0679152 -0.01644998 -0.01099997 0.06716531 -0.0175209 -0.01099997 0.0662409 -0.01844531 -0.01099997 0.06592321 -0.01866775 -0.01099997 0.06516999 -0.01919513 -0.01099997 0.06419223 -0.01965111 -0.01099997 0.0639851 -0.01974767 -0.01099997 0.06272232 -0.02008605 -0.01099997 0.06141996 -0.02019995 -0.01099997 0.0601176 -0.02008605 -0.01099997 0.05885481 -0.01974767 -0.01099997 0.05864769 -0.01965111 -0.01099997 0.05766999 -0.01919513 -0.01099997 0.05691671 -0.01866775 -0.01099997 0.05659908 -0.01844531 -0.01099997 0.05567461 -0.0175209 -0.01099997 0.05492478 -0.01644998 -0.01099997 0.05437231 -0.0152651 -0.01099997 0.05403393 -0.01400232 -0.01099997 0.05391997 -0.01269996 -0.01099997 0.05394089 -0.0124607 -0.01099997 0.05403393 -0.0113976 -0.01099997 0.0896629 -0.01550489 -0.004649996 0.08964002 -0.01549994 -0.005087018 0.08966398 -0.01549994 -0.004649996 0.08690679 -0.02141672 -0.004649996 0.08616173 -0.02236366 -0.004649996 0.08614075 -0.02234482 -0.005247533 0.0807181 -0.02023816 -0.01088035 0.0804243 -0.01983249 -0.01097178 0.08102375 -0.0193594 -0.01097178 0.08007377 -0.0193485 -0.01099997 0.08063054 -0.0189011 -0.01099997 0.08105665 -0.02070558 -0.01077491 0.08172595 -0.02017736 -0.01077491 0.08134293 -0.02110087 -0.01059484 0.08239567 -0.02095741 -0.01039564 0.08165967 -0.02153825 -0.01039564 0.08192914 -0.0219103 -0.01012879 0.08301287 -0.02167642 -0.009845197 0.08221548 -0.02230566 -0.009845197 0.08245903 -0.02264195 -0.009496212 0.08355933 -0.02231287 -0.009140074 0.08270752 -0.0229851 -0.009140074 0.08291643 -0.02327352 -0.008716464 0.08401858 -0.02284789 -0.008301258 0.08312118 -0.02355617 -0.008301258 0.08328747 -0.02378576 -0.007813096 0.08437711 -0.02326548 -0.007353663 0.08344399 -0.02400189 -0.007353663 0.08356088 -0.0241633 -0.006813645 0.08462423 -0.02355331 -0.006325542 0.0836665 -0.02430909 -0.006325542 0.08372831 -0.02439445 -0.005748391 0.08475244 -0.02370268 -0.005247533 0.08378195 -0.02446854 -0.005247533 0.08379846 -0.02449136 -0.004649996 0.08477079 -0.02372401 -0.004649996 0.08545434 -0.02305549 -0.004649996 0.08810836 -0.01958554 -0.004649996 0.08736485 -0.02083462 -0.004649996 0.0873416 -0.02081871 -0.005247533 0.08903396 -0.01759964 -0.004649996 0.08835995 -0.01916277 -0.004649996 0.08833485 -0.01914995 -0.005247533 0.08910375 -0.0173667 -0.005247533 0.08913028 -0.01737618 -0.004649996 0.08963125 -0.01549994 -0.005247354 0.08962678 -0.01549994 -0.005328536 0.0895608 -0.01549994 -0.005777239 0.08891826 -0.01730066 -0.006325542 0.08942168 -0.01549994 -0.006322681 0.08935451 -0.01549994 -0.006586074 0.08856099 -0.0171734 -0.007353663 0.08903926 -0.01549994 -0.007365822 0.08880978 -0.01549994 -0.007795631 0.08804249 -0.01698869 -0.008301258 0.08847093 -0.01549994 -0.008295238 0.08833897 -0.01549994 -0.008489787 0.08737826 -0.01675212 -0.009140074 0.08777523 -0.01549994 -0.009120583 0.08743113 -0.01549994 -0.009433805 0.08658802 -0.01647061 -0.009845197 0.08688348 -0.01549994 -0.009838461 0.08674895 -0.01549994 -0.009937882 0.08569538 -0.01615267 -0.01039564 0.08599996 -0.01549994 -0.01035219 0.08509355 -0.01451951 -0.01077491 0.08599996 -0.01472103 -0.01042681 0.08599996 -0.01506233 -0.01039415 0.08472692 -0.01580768 -0.01077491 0.08529037 -0.01319479 -0.01077491 0.08599996 -0.01325583 -0.01052218 0.08599996 -0.01393443 -0.01050221 0.08364289 -0.0124607 -0.01099997 0.08421605 -0.01310586 -0.01097178 0.08360707 -0.01305574 -0.01099997 0.08403974 -0.01429229 -0.01097178 0.08371138 -0.01544594 -0.01097178 0.08313918 -0.01524251 -0.01099997 0.08339935 -0.01441001 -0.01099997 0.08344435 -0.01416426 -0.01099997 0.08358734 -0.01338315 -0.01099997 0.08323645 -0.01654738 -0.01097178 0.082623 -0.01757812 -0.01097178 0.08212882 -0.01723885 -0.01099997 0.08265066 -0.01637899 -0.01099997 0.08269858 -0.01627314 -0.01099997 0.08308058 -0.01542997 -0.01099997 0.08188128 -0.01852071 -0.01097178 0.08146929 -0.01808494 -0.01099997 0.0821107 -0.01726871 -0.01099997 0.08075207 -0.01880341 -0.01099997 0.08088755 -0.01866775 -0.01099997 0.08143466 -0.01811957 -0.01099997 0.08599424 -0.02221328 -0.006325542 0.08571201 -0.0219599 -0.007353663 0.08530247 -0.02159219 -0.008301258 0.08477777 -0.02112114 -0.009140074 0.08415353 -0.02056074 -0.009845197 0.08344846 -0.01992774 -0.01039564 0.08268344 -0.01924091 -0.01077491 0.0871793 -0.02070724 -0.006325542 0.08686667 -0.02049249 -0.007353663 0.08641296 -0.02018094 -0.008301258 0.0858317 -0.0197817 -0.009140074 0.08514022 -0.01930683 -0.009845197 0.0843591 -0.01877039 -0.01039564 0.08351159 -0.01818835 -0.01077491 0.0881595 -0.01906043 -0.006325542 0.08782166 -0.01888799 -0.007353663 0.08733147 -0.01863777 -0.008301258 0.08670341 -0.01831716 -0.009140074 0.08595627 -0.01793581 -0.009845197 0.08511233 -0.01750493 -0.01039564 0.08419662 -0.01703751 -0.01077491 0.03647351 -0.03120517 0.01029998 0.03733313 -0.0298677 0.01029998 0.03724336 -0.02993702 0.01029998 0.03709095 -0.03005462 0.01029998 0.03687727 -0.03028184 0.01029998 0.03740352 -0.02982443 0.01029998 0.0364747 -0.03119057 0.01029998 0.0365467 -0.03089344 0.01029998 0.0366733 -0.03059858 0.01029998 0.03668558 -0.03057074 0.01029998 0.03685194 -0.0303142 0.01029998 0.0367701 -0.03044044 0.01029998 0.03655987 -0.03085452 0.01029998 0.03928011 -0.02975988 0.01029998 0.03770524 -0.02967792 0.01029998 0.03799855 -0.02959173 0.01029998 0.03899717 -0.02964365 0.01029998 0.0380389 -0.02958369 0.01029998 0.03806471 -0.02958095 0.01029998 0.03865283 -0.02956646 0.01029998 0.03869354 -0.02957218 0.01029998 0.03873509 -0.02958196 0.01029998 0.03834754 -0.02955067 0.01029998 0.04034698 -0.03139215 0.01029998 0.04032176 -0.03120499 0.01029998 0.03939634 -0.02982592 0.01029998 0.04030615 -0.031089 0.01029998 0.04021626 -0.03079032 0.01029998 0.03955775 -0.02993714 0.01029998 0.03985184 -0.03019821 0.01029998 0.03963053 -0.02998733 0.01029998 0.03987902 -0.03022915 0.01029998 0.04002988 -0.03043603 0.01029998 0.04020088 -0.03075218 0.01029998 0.04012221 -0.0305981 0.01029998 0.04006189 -0.0304799 0.01029998 0.03645294 -0.0316078 0.01029998 0.03724217 -0.03306281 0.01029998 0.03716939 -0.03301262 0.01029998 0.03740358 -0.03317397 0.01029998 0.03649377 -0.03191095 0.01029998 0.03658366 -0.03220957 0.01029998 0.03647816 -0.03179496 0.01029998 0.03694808 -0.03280168 0.01029998 0.03677004 -0.03256386 0.01029998 0.03659904 -0.03224772 0.01029998 0.03667771 -0.03240185 0.01029998 0.03673803 -0.03252005 0.01029998 0.03692096 -0.03277081 0.01029998 0.03946685 -0.03313225 0.01029998 0.03939646 -0.03317552 0.01029998 0.03955662 -0.03306293 0.01029998 0.04032641 -0.03179472 0.01029998 0.04032528 -0.03180938 0.01029998 0.04025328 -0.03210645 0.01029998 0.03970897 -0.03294527 0.01029998 0.03992265 -0.03271812 0.01029998 0.03994804 -0.03268575 0.01029998 0.04024004 -0.03214544 0.01029998 0.04012668 -0.03240138 0.01029998 0.04002988 -0.03255951 0.01029998 0.04011434 -0.03242921 0.01029998 0.03751981 -0.03324002 0.01029998 0.03909468 -0.03332203 0.01029998 0.03780281 -0.0333563 0.01029998 0.03880137 -0.03340822 0.01029998 0.03876101 -0.03341627 0.01029998 0.03873521 -0.03341901 0.01029998 0.03806483 -0.03341799 0.01029998 0.03810638 -0.03342777 0.01029998 0.03814709 -0.03343349 0.01029998 0.03845244 -0.03344929 0.01029998 0.03647351 0.03179472 0.01029998 0.03733313 0.03313225 0.01029998 0.03724336 0.03306293 0.01029998 0.03740352 0.03317552 0.01029998 0.0364747 0.03180938 0.01029998 0.0365467 0.03210645 0.01029998 0.03709095 0.03294527 0.01029998 0.03687727 0.03271812 0.01029998 0.03685194 0.03268575 0.01029998 0.0366733 0.03240138 0.01029998 0.03655987 0.03214544 0.01029998 0.0367701 0.03255951 0.01029998 0.03668558 0.03242921 0.01029998 0.03928011 0.03324002 0.01029998 0.03770524 0.03332203 0.01029998 0.03899717 0.0333563 0.01029998 0.03799855 0.03340822 0.01029998 0.0380389 0.03341627 0.01029998 0.03806471 0.03341901 0.01029998 0.03873509 0.03341799 0.01029998 0.03869354 0.03342777 0.01029998 0.03865283 0.03343349 0.01029998 0.03834754 0.03344929 0.01029998 0.04034698 0.0316078 0.01029998 0.04032176 0.03179496 0.01029998 0.03939634 0.03317397 0.01029998 0.04030615 0.03191095 0.01029998 0.04021626 0.03220957 0.01029998 0.03955775 0.03306281 0.01029998 0.03985184 0.03280168 0.01029998 0.03963053 0.03301262 0.01029998 0.04002988 0.03256386 0.01029998 0.04020088 0.03224772 0.01029998 0.04012221 0.03240185 0.01029998 0.04006189 0.03252005 0.01029998 0.03987902 0.03277081 0.01029998 0.03645294 0.03139215 0.01029998 0.03740358 0.02982592 0.01029998 0.03647816 0.03120499 0.01029998 0.03724217 0.02993714 0.01029998 0.03694808 0.03019821 0.01029998 0.03716939 0.02998733 0.01029998 0.03649377 0.031089 0.01029998 0.03658366 0.03079032 0.01029998 0.03692096 0.03022915 0.01029998 0.03677004 0.03043603 0.01029998 0.03659904 0.03075218 0.01029998 0.03667771 0.0305981 0.01029998 0.03673803 0.0304799 0.01029998 0.03946685 0.0298677 0.01029998 0.03955662 0.02993702 0.01029998 0.03939646 0.02982443 0.01029998 0.04032641 0.03120517 0.01029998 0.04032528 0.03119057 0.01029998 0.04025328 0.03089344 0.01029998 0.03970897 0.03005462 0.01029998 0.03992265 0.03028184 0.01029998 0.04012668 0.03059858 0.01029998 0.04011434 0.03057074 0.01029998 0.03994804 0.0303142 0.01029998 0.04002988 0.03044044 0.01029998 0.04024004 0.03085452 0.01029998 0.03751981 0.02975988 0.01029998 0.03909468 0.02967792 0.01029998 0.03880137 0.02959173 0.01029998 0.03780281 0.02964365 0.01029998 0.03876101 0.02958369 0.01029998 0.03873521 0.02958095 0.01029998 0.03814709 0.02956646 0.01029998 0.03810638 0.02957218 0.01029998 0.03806483 0.02958196 0.01029998 0.03845244 0.02955067 0.01029998 0.05437231 0.0152651 0.01199996 0.06846767 0.01013481 0.01199996 0.06880605 0.0113976 0.01199996 0.06891995 0.01269996 0.01199996 0.06880605 0.01400232 0.01199996 0.06846767 0.0152651 0.01199996 0.06272232 0.02008605 0.01199996 0.06141996 0.02019995 0.01199996 0.0601176 0.02008605 0.01199996 0.05885481 0.01974767 0.01199996 0.05766999 0.01919513 0.01199996 0.05659908 0.01844531 0.01199996 0.0679152 0.008949995 0.01199996 0.05766999 0.006204783 0.01199996 0.06716531 0.007879078 0.01199996 0.0662409 0.00695461 0.01199996 0.05567461 0.0175209 0.01199996 0.05492478 0.01644998 0.01199996 0.05403393 0.01400232 0.01199996 0.05391997 0.01269996 0.01199996 0.05403393 0.0113976 0.01199996 0.05437231 0.01013481 0.01199996 0.05492478 0.008949995 0.01199996 0.0662409 0.01844531 0.01199996 0.06516999 0.01919513 0.01199996 0.06716531 0.0175209 0.01199996 0.0679152 0.01644998 0.01199996 0.0639851 0.01974767 0.01199996 0.05567461 0.007879078 0.01199996 0.05659908 0.00695461 0.01199996 0.05885481 0.005652248 0.01199996 0.0639851 0.005652248 0.01199996 0.06516999 0.006204783 0.01199996 0.0601176 0.005313932 0.01199996 0.06141996 0.005199968 0.01199996 0.06272232 0.005313932 0.01199996 0.04465079 0.01533502 0.01097995 0.04540646 0.01550924 0.01097995 0.04421079 0.02029627 0.01097995 0.04505914 0.02013379 0.01097995 0.04648911 0.01646381 0.01097995 0.04661339 0.0172435 0.01097995 0.04692655 0.01929217 0.01097995 0.04652863 0.01985239 0.01097995 0.04663014 0.01982241 0.01097995 0.04396843 0.0164355 0.01097995 0.04411137 0.01562219 0.01097995 0.04458516 0.01532167 0.01097995 0.04446971 0.01531106 0.01097995 0.04342114 0.01974278 0.01097995 0.04342299 0.01961845 0.01097995 0.04406702 0.02032405 0.01097995 0.04342496 0.01960325 0.01097995 0.04352861 0.01899826 0.01097995 0.04623943 0.01580816 0.01097995 0.04629558 0.0158835 0.01097995 0.045937 0.01563161 0.01097995 0.04594814 0.01563411 0.01097995 0.04603326 0.01566022 0.01097995 0.04635995 0.01600438 0.01097995 0.04643118 0.01621037 0.01097995 0.04693692 0.01940065 0.01097995 0.04677635 0.01974594 0.01097995 0.04671353 0.01978546 0.01097995 0.04413306 0.01553833 0.01097995 0.04434382 0.01532709 0.01097995 0.04439979 0.01531541 0.01097995 0.04355818 0.02017766 0.01097995 0.0435183 0.02011859 0.01097995 0.04611223 0.01569956 0.01097995 0.04617935 0.01574826 0.01097995 0.04360228 0.02022582 0.01097995 0.04394125 0.02033901 0.01097995 0.04384726 0.02033555 0.01097995 0.04347628 0.02002924 0.01097995 0.04344111 0.01990616 0.01097995 0.0469321 0.01948231 0.01097995 0.04691773 0.01954829 0.01097995 0.04682552 0.01970356 0.01097995 0.04689598 0.0196042 0.01097995 0.04686492 0.01965671 0.01097995 0.04415863 0.01547908 0.01097995 0.04418683 0.01543432 0.01097995 0.04429692 0.01534461 0.01097995 0.0442177 0.01539909 0.01097995 0.04425531 0.01536828 0.01097995 0.04377222 0.02032089 0.01097995 0.04370933 0.02029788 0.01097995 0.04365199 0.02026557 0.01097995 0.0474016 0.01318967 0.01097995 0.04853302 0.01806765 0.01097995 0.0472908 0.01317006 0.01097995 0.04778933 0.01820546 0.01097995 0.04691344 0.0157243 0.01097995 0.04665541 0.0140447 0.01097995 0.04689997 0.01326578 0.01097995 0.04664152 0.01389491 0.01097995 0.04665344 0.01375395 0.01097995 0.05011248 0.01435446 0.01097995 0.04972219 0.01655453 0.01097995 0.0495755 0.01738119 0.01097995 0.04732638 0.01809412 0.01097995 0.0472961 0.01804143 0.01097995 0.04776787 0.01820904 0.01097995 0.0472635 0.01795613 0.01097995 0.04724156 0.01785975 0.01097995 0.04696041 0.01322603 0.01097995 0.04702007 0.01319849 0.01097995 0.04668885 0.01359856 0.01097995 0.04673558 0.01347798 0.01097995 0.04684317 0.01331758 0.01097995 0.04678899 0.01338499 0.01097995 0.04957473 0.01738506 0.01097995 0.04953873 0.01753801 0.01097995 0.04907727 0.0179668 0.01097995 0.04950278 0.01764082 0.01097995 0.04919964 0.01792997 0.01097995 0.04709804 0.01317626 0.01097995 0.04718631 0.01316601 0.01097995 0.04886794 0.01354593 0.01097995 0.04980176 0.01377278 0.01097995 0.04980641 0.01377391 0.01097995 0.05012392 0.01425522 0.01097995 0.04987293 0.01379519 0.01097995 0.05012315 0.01415109 0.01097995 0.04739475 0.01816809 0.01097995 0.04758256 0.01823252 0.01097995 0.04743123 0.01819229 0.01097995 0.0475226 0.01822543 0.01097995 0.04747343 0.01821166 0.01097995 0.04765975 0.01822966 0.01097995 0.04735893 0.01813519 0.01097995 0.04946017 0.01772218 0.01097995 0.04941374 0.01778441 0.01097995 0.04928737 0.01788783 0.01097995 0.04935908 0.0178377 0.01097995 0.04993069 0.01382321 0.01097995 0.04997992 0.013857 0.01097995 0.05011016 0.01406931 0.01097995 0.05002111 0.01389586 0.01097995 0.05008816 0.01400196 0.01097995 0.05005776 0.01394391 0.01097995 0.0515694 0.01889979 0.01097995 0.05072057 0.01905989 0.01097995 0.05042952 0.01557016 0.01097995 0.05063432 0.01443767 0.01097995 0.05065888 0.01434445 0.01097995 0.05068641 0.01428115 0.01097995 0.05117452 0.01415222 0.01097995 0.05192917 0.01433879 0.01097995 0.05245596 0.01446902 0.01097995 0.04993414 0.01849925 0.01097995 0.04993593 0.01837074 0.01097995 0.05057686 0.01908725 0.01097995 0.04993659 0.01836466 0.01097995 0.04999792 0.01801031 0.01097995 0.05289101 0.01506882 0.01097995 0.05304586 0.0158894 0.01097995 0.05343931 0.01806354 0.01097995 0.05303966 0.01862245 0.01097995 0.05314105 0.01859283 0.01097995 0.0509122 0.01412165 0.01097995 0.0509724 0.01411777 0.01097995 0.05106574 0.01412624 0.01097995 0.05007129 0.01893991 0.01097995 0.0500316 0.01888072 0.01097995 0.05071574 0.01423484 0.01097995 0.05074673 0.01419961 0.01097995 0.05078011 0.01417195 0.01097995 0.05344933 0.01817202 0.01097995 0.05328756 0.01851683 0.01097995 0.05322456 0.01855611 0.01097995 0.05011522 0.01898813 0.01097995 0.05045211 0.01910173 0.01097995 0.05035871 0.0190981 0.01097995 0.04998958 0.0187909 0.01097995 0.04995429 0.01866644 0.01097995 0.05081903 0.01414912 0.01097995 0.05086237 0.01413244 0.01097995 0.05246633 0.01447165 0.01097995 0.05253422 0.01449495 0.01097995 0.05259728 0.01452869 0.01097995 0.05265319 0.01457118 0.01097995 0.05270475 0.01462429 0.01097995 0.05276191 0.01470524 0.01097995 0.05281847 0.01482117 0.01097995 0.05288237 0.015033 0.01097995 0.0502842 0.01908326 0.01097995 0.05022168 0.01906019 0.01097995 0.05016463 0.01902788 0.01097995 0.05344426 0.01825368 0.01097995 0.05342966 0.0183196 0.01097995 0.05333685 0.01847451 0.01097995 0.05340766 0.01837545 0.01097995 0.05337649 0.01842778 0.01097995 0.04712331 -0.01880401 0.01097995 0.04659092 -0.02006638 0.01097995 0.04584711 -0.01971846 0.01097995 0.04655331 -0.0201987 0.01097995 0.0461713 -0.02002274 0.01097995 0.04653638 -0.02030527 0.01097995 0.0465033 -0.02033436 0.01097995 0.04650908 -0.02033948 0.01097995 0.0460388 -0.01922357 0.01097995 0.04585009 -0.01963543 0.01097995 0.04670542 -0.01972508 0.01097995 0.04680252 -0.01947957 0.01097995 0.04695409 -0.01912194 0.01097995 0.0462498 -0.01876306 0.01097995 0.04698574 -0.01904726 0.01097995 0.04632413 -0.01861649 0.01097995 0.04710268 -0.01880401 0.01097995 0.04584711 -0.01964336 0.01097995 0.04669266 -0.01976317 0.01097995 0.04583889 -0.0196678 0.01097995 0.04583704 -0.01967906 0.01097995 0.04583704 -0.01968771 0.01097995 0.04811429 -0.01977646 0.01097995 0.04845488 -0.01993876 0.01097995 0.04583853 -0.01969665 0.01097995 0.04584276 -0.01970911 0.01097995 0.04730981 -0.01908707 0.01097995 0.04758191 -0.01938283 0.01097995 0.04787278 -0.01961398 0.01097995 0.04792845 -0.01965004 0.01097995 0.04662418 -0.01749724 0.01097995 0.04662507 -0.0175234 0.01097995 0.0466386 -0.01767134 0.01097995 0.04666823 -0.01782989 0.01097995 0.04669344 -0.01796466 0.01097995 0.04648333 -0.01833552 0.01097995 0.04887837 -0.02006173 0.01097995 0.0492807 -0.02011156 0.01097995 0.04939556 -0.02011418 0.01097995 0.04940241 -0.02011418 0.01097995 0.04989421 -0.02007377 0.01097995 0.05035048 -0.01995706 0.01097995 0.05075681 -0.01977556 0.01097995 0.05111467 -0.01953697 0.01097995 0.05142211 -0.01924806 0.01097995 0.05167925 -0.0189104 0.01097995 0.05188077 -0.01852875 0.01097995 0.05202162 -0.01810592 0.01097995 0.05209541 -0.01764357 0.01097995 0.05210465 -0.01740509 0.01097995 0.05206078 -0.01687127 0.01097995 0.05193418 -0.01637595 0.01097995 0.05173736 -0.01593512 0.01097995 0.05147999 -0.01554971 0.01097995 0.05117499 -0.01522624 0.01097995 0.05082094 -0.01495814 0.01097995 0.05042791 -0.01475328 0.01097995 0.05000078 -0.01461464 0.01097995 0.04954177 -0.01454579 0.01097995 0.04934102 -0.01453906 0.01097995 0.04888534 -0.01457655 0.01097995 0.04845345 -0.0146858 0.01097995 0.04805135 -0.01486182 0.01097995 0.04768323 -0.01510137 0.01097995 0.04735463 -0.01540231 0.01097995 0.04707783 -0.01575613 0.01097995 0.04685974 -0.0161572 0.01097995 0.04670798 -0.01659768 0.01097995 0.04662877 -0.01707112 0.01097995 0.04661828 -0.01732343 0.01097995 0.04671382 -0.01384961 0.01097995 0.04675477 -0.01384961 0.01097995 0.04671382 -0.01263493 0.01097995 0.04676795 -0.01383638 0.01097995 0.0520364 -0.01264178 0.01097995 0.05198878 -0.01264178 0.01097995 0.0520364 -0.0138427 0.01097995 0.05197918 -0.01265239 0.01097995 0.05198878 -0.0138427 0.01097995 0.05198097 -0.01383388 0.01097995 0.0519694 -0.01382398 0.01097995 0.05196624 -0.01266264 0.01097995 0.05194979 -0.012672 0.01097995 0.04676145 -0.01263493 0.01097995 0.04676938 -0.01264393 0.01097995 0.04678231 -0.01265513 0.01097995 0.04678571 -0.01382374 0.01097995 0.04680788 -0.01381278 0.01097995 0.05191767 -0.0126841 0.01097995 0.05184412 -0.01269942 0.01097995 0.05195349 -0.01381421 0.01097995 0.05192905 -0.01380389 0.01097995 0.04687422 -0.01269018 0.01097995 0.04682594 -0.01267719 0.01097995 0.04679965 -0.01266592 0.01097995 0.04685395 -0.01379829 0.01097995 0.04693555 -0.01378411 0.01097995 0.04707056 -0.01271241 0.01097995 0.04787677 -0.01375561 0.01097995 0.04906117 -0.01273053 0.01097995 0.04906803 -0.01375412 0.01097995 0.04981857 -0.01273053 0.01097995 0.04981857 -0.01375412 0.01097995 0.05129778 -0.01272588 0.01097995 0.05171853 -0.01377242 0.01097995 0.05188298 -0.01379173 0.01097995 0.0510742 -0.01200014 0.01097995 0.0510742 -0.0120477 0.01097995 0.05110013 -0.01196712 0.01097995 0.0520364 -0.0120477 0.01097995 0.05112487 -0.01192295 0.01097995 0.05114805 -0.0118612 0.01097995 0.05111503 -0.008148849 0.01097995 0.05113774 -0.008197188 0.01097995 0.0520364 -0.008042275 0.01097995 0.05116081 -0.008278369 0.01097995 0.04677861 -0.0106191 0.01097995 0.04679441 -0.01061069 0.01097995 0.04671382 -0.009441196 0.01097995 0.04671382 -0.01065587 0.01097995 0.04675477 -0.01065587 0.01097995 0.04675573 -0.01064884 0.01097995 0.04677742 -0.009465873 0.01097995 0.04676717 -0.00945729 0.01097995 0.0510742 -0.008042275 0.01097995 0.0510742 -0.008096933 0.01097995 0.0510959 -0.008120417 0.01097995 0.04677057 -0.01062512 0.01097995 0.05118346 -0.01055341 0.01097995 0.05118346 -0.01153606 0.01097995 0.05116999 -0.01175856 0.01097995 0.05118036 -0.008440196 0.01097995 0.05118346 -0.008560657 0.01097995 0.05118346 -0.009536683 0.01097995 0.04675763 -0.0106427 0.01097995 0.04676073 -0.0106365 0.01097995 0.04676491 -0.01063078 0.01097995 0.04675948 -0.009448468 0.01097995 0.04675477 -0.009441196 0.01097995 0.04685997 -0.00949639 0.01097995 0.04681611 -0.009484708 0.01097995 0.04679238 -0.009474873 0.01097995 0.04682701 -0.01059961 0.01097995 0.04688113 -0.01058852 0.01097995 0.04706013 -0.009518682 0.01097995 0.0473597 -0.01056063 0.01097995 0.04906803 -0.009536683 0.01097995 0.04906803 -0.01055341 0.01097995 0.04955941 -0.002241551 0.01097995 0.04935461 -0.002234518 0.01097995 0.0488941 -0.002272427 0.01097995 0.04845881 -0.002382576 0.01097995 0.04805493 -0.002559542 0.01097995 0.04768615 -0.00279963 0.01097995 0.04735743 -0.003100872 0.01097995 0.04708105 -0.003454387 0.01097995 0.04686379 -0.003854215 0.01097995 0.04671317 -0.00429207 0.01097995 0.04663521 -0.004760503 0.01097995 0.04662513 -0.005004882 0.01097995 0.04666662 -0.005509793 0.01097995 0.04678618 -0.005977928 0.01097995 0.04697245 -0.006396353 0.01097995 0.0472182 -0.006766676 0.01097995 0.04751813 -0.007087647 0.01097995 0.04786783 -0.00735563 0.01097995 0.04826235 -0.007565438 0.01097995 0.04869645 -0.007711172 0.01097995 0.04916554 -0.007786691 0.01097995 0.04940241 -0.007795929 0.01097995 0.04940932 -0.007795929 0.01097995 0.04989945 -0.007755637 0.01097995 0.05035442 -0.007639169 0.01097995 0.05075907 -0.00745815 0.01097995 0.05111515 -0.007220447 0.01097995 0.05142086 -0.006932556 0.01097995 0.05167704 -0.006595671 0.01097995 0.05187839 -0.006213784 0.01097995 0.05201995 -0.005788683 0.01097995 0.05209493 -0.005320787 0.01097995 0.05210465 -0.005073308 0.01097995 0.05206131 -0.004545569 0.01097995 0.05193608 -0.004055857 0.01097995 0.05174154 -0.003620386 0.01097995 0.05148714 -0.003239452 0.01097995 0.05118507 -0.002919018 0.01097995 0.050834 -0.002653121 0.01097995 0.05044347 -0.002449333 0.01097995 0.05001789 -0.002310752 0.01097995 0.05201607 0.001573681 0.01097995 0.05197513 0.001573681 0.01097995 0.05202573 0.001357793 0.01097995 0.05196851 0.001565337 0.01097995 0.05195957 0.001557171 0.01097995 0.05144268 -0.001215338 0.01097995 0.05159193 -0.001086831 0.01097995 0.05171334 -9.44244e-4 0.01097995 0.04822188 -0.001674473 0.01097995 0.05194807 0.001549541 0.01097995 0.05192679 0.001539945 0.01097995 0.05188143 0.001527607 0.01097995 0.04949116 -6.16866e-4 0.01097995 0.04950475 -6.16866e-4 0.01097995 0.05200564 -1.8249e-4 0.01097995 0.05192732 -5.21241e-4 0.01097995 0.05191695 -5.52346e-4 0.01097995 0.05181866 -7.77229e-4 0.01097995 0.04821503 -0.001674473 0.01097995 0.04816168 -0.001673519 0.01097995 0.04674762 -2.01682e-4 0.01097995 0.04672253 0.001331329 0.01097995 0.04678153 0.0015679 0.01097995 0.04673421 0.001580595 0.01097995 0.04677772 0.001574337 0.01097995 0.04677528 0.001580595 0.01097995 0.04703271 0.00151056 0.01097995 0.04906815 0.001491844 0.01097995 0.0484364 -0.001658082 0.01097995 0.04864734 -0.001606702 0.01097995 0.04883503 -0.001525998 0.01097995 0.04989922 -0.001209318 0.01097995 0.04997479 -0.001262903 0.01097995 0.04981875 0.001491844 0.01097995 0.05139583 0.001497685 0.01097995 0.0518549 0.001522839 0.01097995 0.04670011 5.70624e-4 0.01097995 0.05014359 -0.001353919 0.01097995 0.05033075 -0.001418113 0.01097995 0.05053228 -0.00145179 0.01097995 0.0506376 -0.001456201 0.01097995 0.05087304 -0.001439929 0.01097995 0.05108612 -0.001392543 0.01097995 0.05128049 -0.001314342 0.01097995 0.0470072 -9.78485e-4 0.01097995 0.04713249 -0.001158595 0.01097995 0.04729813 -0.001330018 0.01097995 0.04680472 0.001549065 0.01097995 0.0467934 0.001556098 0.01097995 0.04678642 0.001562118 0.01097995 0.05205017 3.93249e-4 0.01097995 0.05204886 2.9628e-4 0.01097995 0.04749184 -0.001472413 0.01097995 0.04750829 -0.001482307 0.01097995 0.04771733 -0.001583337 0.01097995 0.04794305 -0.001648247 0.01097995 0.04682767 -5.69367e-4 0.01097995 0.04693257 -8.40451e-4 0.01097995 0.04976415 -0.001086711 0.01097995 0.04965335 -9.47344e-4 0.01097995 0.0495674 -7.93333e-4 0.01097995 0.04900312 -0.001418232 0.01097995 0.04914963 -0.0012874 0.01097995 0.04927963 -0.001127839 0.01097995 0.04938548 -9.44287e-4 0.01097995 0.04946202 -7.41433e-4 0.01097995 0.05204302 7.70068e-4 0.01097995 0.05203652 0.001116454 0.01097995 0.04686969 0.001528859 0.01097995 0.04686176 0.001530468 0.01097995 0.04682499 0.001540422 0.01097995 0.04670268 7.8386e-4 0.01097995 0.04670476 8.51994e-4 0.01097995 0.0467137 0.001143634 0.01097995 0.04955941 0.007838368 0.01097995 0.04935461 0.007845401 0.01097995 0.04889416 0.007807493 0.01097995 0.04845887 0.007697343 0.01097995 0.04805499 0.007520377 0.01097995 0.04768621 0.00728029 0.01097995 0.04735749 0.006979048 0.01097995 0.04708111 0.006625533 0.01097995 0.04686379 0.006225705 0.01097995 0.04671317 0.005787849 0.01097995 0.04663521 0.005319416 0.01097995 0.04662513 0.005075037 0.01097995 0.04666662 0.004570007 0.01097995 0.04678624 0.004101753 0.01097995 0.04697251 0.003683388 0.01097995 0.0472182 0.003313064 0.01097995 0.04751813 0.002992212 0.01097995 0.04786783 0.002724289 0.01097995 0.04826223 0.002514481 0.01097995 0.04869633 0.002368748 0.01097995 0.04916548 0.002293288 0.01097995 0.04940241 0.002284049 0.01097995 0.04940932 0.002284049 0.01097995 0.04989951 0.002324283 0.01097995 0.05035454 0.00244081 0.01097995 0.05075919 0.002621769 0.01097995 0.05111521 0.002859532 0.01097995 0.05142098 0.003147363 0.01097995 0.0516771 0.003484249 0.01097995 0.05187845 0.003866136 0.01097995 0.05201995 0.004291236 0.01097995 0.05209493 0.004759132 0.01097995 0.05210465 0.005006611 0.01097995 0.05206131 0.00553435 0.01097995 0.05193608 0.006023943 0.01097995 0.0517416 0.006459474 0.01097995 0.0514872 0.006840348 0.01097995 0.05118507 0.007160842 0.01097995 0.050834 0.007426738 0.01097995 0.05044347 0.007630586 0.01097995 0.05001783 0.007769107 0.01097995 0.04671376 0.01062303 0.01097995 0.04675471 0.01062303 0.01097995 0.04675906 0.01062959 0.01097995 0.0467723 0.01064163 0.01097995 0.04678642 0.01064962 0.01097995 0.04671376 0.01175582 0.01097995 0.04677063 0.01173722 0.01097995 0.04676353 0.01174348 0.01097995 0.05202275 0.01175582 0.01097995 0.05198186 0.01175582 0.01097995 0.05197948 0.0117501 0.01097995 0.04676467 0.01063561 0.01097995 0.04675841 0.01174968 0.01097995 0.04675471 0.01175582 0.01097995 0.0488224 0.01052069 0.01097995 0.05196446 0.01173359 0.01097995 0.05195289 0.01172667 0.01097995 0.05203187 0.01153492 0.01097995 0.05173122 0.009194493 0.01097995 0.05184203 0.009382843 0.01097995 0.0468387 0.01171153 0.01097995 0.04679811 0.01172292 0.01097995 0.04688292 0.01067388 0.01097995 0.05197101 0.01173895 0.01097995 0.05192732 0.009592592 0.01097995 0.05201578 0.009980916 0.01097995 0.05159944 0.009031116 0.01097995 0.05143719 0.008884131 0.01097995 0.05125671 0.008767545 0.01097995 0.05103957 0.008673906 0.01097995 0.05080145 0.008614718 0.01097995 0.05048739 0.008589446 0.01097995 0.04681408 0.01065981 0.01097995 0.04678136 0.01173043 0.01097995 0.0488224 0.01070493 0.01097995 0.04671376 0.007879853 0.01097995 0.04675471 0.007879853 0.01097995 0.04671376 0.008903443 0.01097995 0.04676711 0.00789684 0.01097995 0.04908382 0.009434401 0.01097995 0.04921472 0.009230256 0.01097995 0.04902708 0.009558498 0.01097995 0.04901349 0.009558498 0.01097995 0.0490095 0.009555757 0.01097995 0.05197578 0.01174432 0.01097995 0.05204325 0.0112577 0.01097995 0.04926598 0.009162724 0.01097995 0.04939037 0.00901848 0.01097995 0.04956513 0.008871912 0.01097995 0.04976379 0.008753299 0.01097995 0.04998588 0.008664131 0.01097995 0.05025839 0.008604228 0.01097995 0.05205619 0.01051288 0.01097995 0.05205702 0.01061618 0.01097995 0.05205005 0.01094204 0.01097995 0.04694068 0.01169729 0.01097995 0.04742521 0.01070016 0.01097995 0.04906803 0.01167392 0.01097995 0.04683679 0.007965981 0.01097995 0.04714006 0.008209466 0.01097995 0.04671394 0.008921146 0.01097995 0.0472939 0.008323371 0.01097995 0.04672241 0.009031414 0.01097995 0.04674112 0.009121775 0.01097995 0.05193048 0.01171785 0.01097995 0.05187439 0.01170533 0.01097995 0.05149573 0.01168167 0.01097995 0.04981875 0.01167392 0.01097995 0.04854935 0.01070493 0.01097995 0.04863595 0.009287416 0.01097995 0.04770588 0.009769856 0.01097995 0.04686915 0.009207129 0.01097995 0.08379846 -0.02449136 0.004649996 0.08477079 -0.02372401 0.004649996 0.08545434 -0.02305549 0.004649996 0.08616173 -0.02236366 0.004649996 0.08690679 -0.02141672 0.004649996 0.08736485 -0.02083462 0.004649996 0.08810836 -0.01958554 0.004649996 0.08835995 -0.01916277 0.004649996 0.08903396 -0.01759964 0.004649996 0.08913028 -0.01737618 0.004649996 0.0896629 -0.01550489 0.004649996 0.08966398 -0.01549994 0.004649996 0.08599996 -0.01549994 0.01035219 0.08673143 -0.01549994 0.009949088 0.08688718 -0.01549994 0.009842634 0.08707344 -0.01549994 0.009715318 0.08772391 -0.01549994 0.009170293 0.08775305 -0.01549994 0.009138345 0.0882979 -0.01549994 0.008541822 0.0884782 -0.01549994 0.008299708 0.08854722 -0.01549994 0.008206963 0.08897882 -0.01549994 0.007487177 0.08903747 -0.01549994 0.007350564 0.08931165 -0.01549994 0.006712257 0.08943909 -0.01549994 0.006306171 0.08960711 -0.01549994 0.005488336 0.08962351 -0.01549994 0.005246818 0.08964008 -0.01549994 0.005002617 0.06516999 -0.01919513 0.01199996 0.0662409 -0.01844531 0.01199996 0.05885481 -0.005652248 0.01199996 0.05659908 -0.00695461 0.01199996 0.05567461 -0.007879078 0.01199996 0.0639851 -0.01974767 0.01199996 0.05492478 -0.008949995 0.01199996 0.05437231 -0.01013481 0.01199996 0.05403393 -0.0113976 0.01199996 0.05391997 -0.01269996 0.01199996 0.05403393 -0.01400232 0.01199996 0.05437231 -0.0152651 0.01199996 0.05492478 -0.01644998 0.01199996 0.05567461 -0.0175209 0.01199996 0.05659908 -0.01844531 0.01199996 0.06716531 -0.0175209 0.01199996 0.0679152 -0.01644998 0.01199996 0.06846767 -0.0152651 0.01199996 0.06880605 -0.01400232 0.01199996 0.06891995 -0.01269996 0.01199996 0.06880605 -0.0113976 0.01199996 0.05766999 -0.006204783 0.01199996 0.05885481 -0.01974767 0.01199996 0.0601176 -0.02008605 0.01199996 0.05766999 -0.01919513 0.01199996 0.06141996 -0.02019995 0.01199996 0.06272232 -0.02008605 0.01199996 0.06846767 -0.01013481 0.01199996 0.0679152 -0.008949995 0.01199996 0.06716531 -0.007879078 0.01199996 0.0662409 -0.00695461 0.01199996 0.06516999 -0.006204783 0.01199996 0.0639851 -0.005652248 0.01199996 0.06272232 -0.005313932 0.01199996 0.06141996 -0.005199968 0.01199996 0.0601176 -0.005313932 0.01199996 0.08599996 -0.01325583 0.01052218 0.08599996 -0.01234287 0.01054912 0.08599996 0.01234287 0.01054912 0.08599996 -0.01506233 0.01039415 0.08599996 -0.01393443 0.01050221 0.08599996 -0.01472103 0.01042681 0.08599996 0.01325577 0.01052254 0.08599996 0.01391494 0.01050335 0.08599996 0.01549994 0.01035219 0.08599996 0.01506054 0.01039409 0.08599996 0.01472121 0.01042646 0.08964002 0.01549994 0.005087018 0.08963125 0.01549994 0.005247354 0.08966398 0.01549994 0.004649996 0.08962678 0.01549994 0.005328536 0.0895608 0.01549994 0.005777239 0.08942168 0.01549994 0.006322681 0.08688348 0.01549994 0.009838461 0.08674895 0.01549994 0.009937882 0.08847093 0.01549994 0.008295238 0.08880978 0.01549994 0.007795631 0.08935451 0.01549994 0.006586074 0.08903926 0.01549994 0.007365822 0.08833897 0.01549994 0.008489787 0.08777523 0.01549994 0.009120583 0.08743113 0.01549994 0.009433805 0.08379846 0.02449136 0.004649996 0.08477079 0.02372401 0.004649996 0.08545434 0.02305549 0.004649996 0.08616173 0.02236366 0.004649996 0.08690679 0.02141672 0.004649996 0.08736485 0.02083462 0.004649996 0.08810836 0.01958554 0.004649996 0.08835995 0.01916277 0.004649996 0.08903396 0.01759964 0.004649996 0.08913028 0.01737618 0.004649996 0.0896629 0.01550489 0.004649996 0 0.02523231 0.01810657 0 0.02489334 0.01776766 0 0.02699995 0.01324999 0 0.02652245 0.01329177 0 0.02605944 0.01341581 0 0.02910661 0.01423233 0 0.02938157 0.01462495 0 0.03263652 0.01264345 0 0.0295841 0.01505941 0 0.0297082 0.01552242 0 0.03083539 0.01655822 0 0.02974998 0.01599997 0 0.0297082 0.01647752 0 0.02586531 0.02357929 0 0.02856689 0.02022206 0 0.0274775 0.01870816 0 0.02429175 0.01647752 0 0.02441585 0.01694053 0 0.02461838 0.01737499 0 0.02424997 0.01599997 0 0.02429175 0.01552242 0 0.02441585 0.01505941 0 0.02461838 0.01462495 0 0.02489334 0.01423233 0 0.02523231 0.01389336 0 0.02562499 0.0136184 0 0.02837496 0.0136184 0 0.02794051 0.01341581 0 0.0274775 0.01329177 0 0.03394287 0.008536934 0 0.0295841 0.01694053 0 0.02938157 0.01737499 0 0.02910661 0.01776766 0 0.02876764 0.01810657 0 0.02837496 0.01838153 0 0.02794051 0.01858413 0 0.02876764 0.01389336 0 0.02605944 0.01858413 0 0.02562499 0.01838153 0 0.02277159 0.02657914 0 0.02699995 0.01874995 0 0.02652245 0.01870816 0 0.02856689 -0.02022206 0 0.02586531 -0.02357929 0 0.03263652 -0.01264345 0 0.03394287 -0.008536934 0 0.03083539 -0.01655822 0 0.03473466 -0.004301071 0 0.03499996 0 0 0.03399997 0 0 0.03473466 0.004301071 0 0.02277159 -0.02657914 0 -0.02726781 -0.02194231 0 -0.02436465 -0.02512687 0 -0.02975755 -0.0184251 0 -0.03440403 -0.006431221 0 -0.03335297 -0.01061034 0 -0.03179627 -0.01462858 0 -0.02109217 -0.02793055 0 -0.01749998 -0.03031086 0 -0.01364248 -0.03223168 0 -0.009578168 -0.03366386 0 -0.005368649 -0.03458577 0 -0.001077771 -0.03498339 0 0 -0.03495019 0 0.003229379 -0.03485065 0 0.007487654 -0.03418964 0 0.01163238 -0.03301036 0 0.0156008 -0.0313307 0 0.01933276 -0.02917605 0 -0.02562499 0.0136184 0 -0.02605944 0.01341581 0 -0.02652245 0.01329177 0 -0.02429175 0.01552242 0 -0.02424997 0.01599997 0 -0.02429175 0.01647752 0 -0.02441585 0.01694053 0 -0.02461838 0.01737499 0 -0.02441585 0.01505941 0 -0.02461838 0.01462495 0 -0.02489334 0.01423233 0 -0.02523231 0.01389336 0 -0.02523231 0.01810657 0 -0.02489334 0.01776766 0 -0.02974998 0.01599997 0 -0.0297082 0.01552242 0 -0.03179627 0.01462858 0 -0.0295841 0.01505941 0 -0.03335297 0.01061034 0 -0.02910661 0.01776766 0 -0.02938157 0.01737499 0 -0.02975755 0.0184251 0 -0.0295841 0.01694053 0 -0.0297082 0.01647752 0 -0.03440403 0.006431221 0 -0.02436465 0.02512687 0 -0.0274775 0.01870816 0 -0.02794051 0.01858413 0 -0.02726781 0.02194231 0 -0.02837496 0.01838153 0 -0.02876764 0.01810657 0 -0.02876764 0.01389336 0 -0.02562499 0.01838153 0 -0.02605944 0.01858413 0 -0.02652245 0.01870816 0 -0.02699995 0.01874995 0 -0.02699995 0.01324999 0 -0.0274775 0.01329177 0 -0.02794051 0.01341581 0 -0.02837496 0.0136184 0 -0.02910661 0.01423233 0 -0.02938157 0.01462495 0 -0.03493356 0.002154588 0 -0.03493356 0 0 -0.03399997 0 0 -0.03493356 -0.002154588 0 0.01933276 0.02917605 0 0.0156008 0.0313307 0 0.01163238 0.03301036 0 0.007487654 0.03418964 0 0.003229379 0.03485065 0 0 0.03495019 0 -0.001077771 0.03498339 0 -0.005368649 0.03458577 0 -0.009578168 0.03366386 0 -0.01364248 0.03223168 0 -0.01749998 0.03031086 0 -0.02109217 0.02793055 0.05518853 0.03608095 -0.01099997 0.05440288 0.03603261 -0.01099997 0.0543335 0.03658044 -0.01097625 0.05833393 0.03509032 -0.01099997 0.05773645 0.03543817 -0.01099997 0.0580002 0.03594857 -0.01097452 0.0509777 0.04159092 -0.005765974 0.05183738 0.0418775 -0.005737841 0.05187046 0.04176181 -0.006285369 0.05627006 0.04182344 -0.007234811 0.0571345 0.04171919 -0.007199287 0.05708646 0.04144906 -0.007750868 0.05685108 0.03581166 -0.01099997 0.05611485 0.03598791 -0.01099997 0.05621373 0.03654205 -0.01097548 0.05763959 0.03549456 -0.01099997 0.05694293 0.0357747 -0.01099997 0.05712538 0.03631359 -0.010975 0.0560289 0.03600847 -0.01099997 0.05525749 0.03607499 -0.01099997 0.05527144 0.03663223 -0.01097589 0.05532705 0.03889739 -0.01034015 0.05534029 0.03943812 -0.01003849 0.05670952 0.0393297 -0.01002013 0.05535292 0.03995162 -0.009681999 0.05536466 0.04042971 -0.009274721 0.05688422 0.04031193 -0.009241402 0.06161427 0.04053241 -0.004699945 0.06220012 0.04013365 -0.004699945 0.06217509 0.04009914 -0.00516653 0.0614295 0.04061722 -0.005229592 0.06143903 0.04063218 -0.004713773 0.06063693 0.04105806 -0.005288779 0.06064909 0.04108202 -0.00477612 0.05981099 0.04143887 -0.005346059 0.06019616 0.04129451 -0.004809141 0.0605728 0.04112553 -0.00478214 0.05896371 0.04175436 -0.005400717 0.0595653 0.04157745 -0.00485444 0.05982095 0.04146283 -0.004836082 0.05855625 0.04192447 -0.004920721 0.05857288 0.04191875 -0.004919648 0.05897271 0.04178124 -0.004893362 0.05810707 0.04203361 -0.0049479 0.05809938 0.04200422 -0.005452692 0.05742806 0.04219865 -0.004988908 0.05721801 0.04218864 -0.005502045 0.05722516 0.04222714 -0.005000054 0.05631875 0.04230695 -0.005549013 0.05632328 0.04235386 -0.005049765 0.05683845 0.04228144 -0.005021393 0.05506104 0.0424143 -0.005113482 0.05541276 0.04240006 -0.005095839 0.05541199 0.04235732 -0.005593121 0.05622965 0.04236698 -0.005054891 0.05361282 0.04225343 -0.00567156 0.05390101 0.0423485 -0.005166649 0.05450969 0.04233926 -0.00563389 0.05450755 0.04238289 -0.005138874 0.05505669 0.04241406 -0.005113661 0.0526967 0.04215919 -0.005216658 0.05328226 0.04225122 -0.005192339 0.05360698 0.04230225 -0.005178868 0.05156797 0.04186242 -0.00525856 0.0518223 0.0419293 -0.005249142 0.05152511 0.04185116 -0.005260169 0.0503962 0.04142898 -0.005297064 0.05012202 0.04129385 -0.005304813 0.04932075 0.04089879 -0.005327403 0.04997587 0.04122173 -0.005308926 0.05014562 0.0412417 -0.00579065 0.04934132 0.04082953 -0.005811989 0.04857629 0.04033708 -0.005826115 0.0493074 0.04089069 -0.005327761 0.04852515 0.04041445 -0.005346775 0.04967629 0.03867125 -0.009364485 0.05096948 0.03944903 -0.009346365 0.04988759 0.03835123 -0.009707927 0.05116695 0.0390194 -0.009736597 0.05021011 0.03786283 -0.01008152 0.05137819 0.03855973 -0.01007801 0.0503658 0.03762704 -0.01026189 0.05160009 0.03807687 -0.01036691 0.05020004 0.03787803 -0.0100699 0.04992979 0.03828728 -0.009756863 0.04991805 0.03830516 -0.009743213 0.05079728 0.03697359 -0.0105983 0.05079019 0.03698438 -0.01059275 0.05182927 0.03757816 -0.0106011 0.05049854 0.03742611 -0.01036536 0.05048948 0.03743976 -0.01035833 0.05088704 0.03683769 -0.01066827 0.05206245 0.03707087 -0.01078003 0.05109643 0.0365206 -0.01076269 0.05110192 0.03651225 -0.01076519 0.05229628 0.03656208 -0.01090455 0.05140173 0.03605824 -0.01090031 0.05208086 0.03519088 -0.01099997 0.05200314 0.03514754 -0.01099997 0.05143767 0.03600382 -0.01091653 0.05355912 0.03586041 -0.01099997 0.05340856 0.03638702 -0.01097649 0.05368596 0.03588753 -0.01099997 0.05434727 0.03602921 -0.01099997 0.05140531 0.03605282 -0.01090192 0.05273765 0.03555762 -0.01099997 0.05275481 0.03556406 -0.01099997 0.05352485 0.03585308 -0.01099997 0.05680006 0.03983879 -0.009656608 0.05531328 0.038338 -0.01058459 0.05661404 0.03879284 -0.01032775 0.0597884 0.0394138 -0.009162664 0.06111234 0.03863173 -0.009100675 0.06086975 0.03829675 -0.009514331 0.05836182 0.03997302 -0.009204149 0.05820721 0.03951531 -0.009628236 0.0595656 0.03898203 -0.009596586 0.06083369 0.03824692 -0.009557366 0.05932486 0.03851544 -0.009976744 0.0605179 0.03781098 -0.009934306 0.0603379 0.03756242 -0.01014924 0.05804044 0.03902179 -0.009999573 0.05786436 0.03850072 -0.0103138 0.05907022 0.03802204 -0.01029837 0.06019181 0.03736072 -0.01026535 0.05631363 0.03710359 -0.010899 0.05528533 0.03719741 -0.01090073 0.05641454 0.0376712 -0.01076698 0.05529934 0.03776854 -0.01077109 0.05651521 0.03823709 -0.0105769 0.05880618 0.03751033 -0.01055884 0.0598514 0.03689068 -0.01053601 0.05974948 0.03674995 -0.01061701 0.05826711 0.03646582 -0.01089495 0.05730974 0.03685921 -0.01089709 0.05853706 0.03698885 -0.01075726 0.05749613 0.03741085 -0.01076239 0.05768197 0.03796082 -0.01056832 0.05950319 0.03640985 -0.01072955 0.05538481 0.04125183 -0.008331716 0.05539304 0.04158544 -0.007810831 0.05539983 0.04186308 -0.007268071 0.05873101 0.04106557 -0.007683813 0.05702835 0.04112231 -0.008280813 0.05537533 0.04086506 -0.008822321 0.05540925 0.04224783 -0.006151199 0.05630809 0.04220122 -0.00611025 0.05720007 0.04208761 -0.006066679 0.05807483 0.0419085 -0.006020784 0.05893343 0.04166465 -0.005972445 0.05977576 0.04135566 -0.005921542 0.06059759 0.04098188 -0.005868136 0.05798339 0.04155182 -0.007161915 0.05881756 0.04132181 -0.007122457 0.05953246 0.04078173 -0.007647454 0.05963718 0.04102873 -0.007080852 0.0569607 0.0407418 -0.008780419 0.05862551 0.0407533 -0.008223831 0.05850195 0.04038769 -0.008733451 0.06016623 0.04014593 -0.008160531 0.05998963 0.03980368 -0.008681297 0.06031614 0.04043644 -0.007609307 0.06043809 0.04067277 -0.007037162 0.06120878 0.04025852 -0.006991982 0.06178462 0.03955996 -0.007520139 0.06107074 0.04003417 -0.007569789 0.06170123 0.0394448 -0.007824957 0.06214368 0.04005569 -0.005752623 0.06138706 0.04054832 -0.005812942 0.06205058 0.03992718 -0.006344854 0.06131398 0.04042953 -0.006403267 0.06197559 0.03982371 -0.006821811 0.06194305 0.0397787 -0.006940841 0.04874414 0.04008287 -0.006904602 0.04864448 0.04023379 -0.006414353 0.05027115 0.04096853 -0.006878614 0.04863554 0.04024738 -0.006370306 0.04940235 0.04071968 -0.006353974 0.04863291 0.04025125 -0.00635761 0.04858142 0.04032927 -0.005874276 0.0510202 0.04147619 -0.006311416 0.05019748 0.04112887 -0.006334245 0.05191814 0.04159528 -0.006834149 0.05036735 0.0407592 -0.007416427 0.04882931 0.03995388 -0.007323563 0.04875266 0.04006993 -0.006946563 0.06053173 0.04085427 -0.006453752 0.05971813 0.04121977 -0.006502568 0.05888497 0.04152125 -0.00654906 0.05803638 0.04175847 -0.006593167 0.05717235 0.0419318 -0.006635069 0.05629193 0.04204076 -0.006674826 0.05540525 0.04208368 -0.006712138 0.05451542 0.04222673 -0.006189048 0.05452394 0.04206019 -0.00674659 0.05362737 0.04213893 -0.006223976 0.05277943 0.04181641 -0.006807565 0.05367702 0.04174828 -0.007327139 0.04903787 0.03963804 -0.007991194 0.0490272 0.03965419 -0.007957041 0.05048614 0.0405007 -0.007939994 0.04887747 0.03988093 -0.00747776 0.04886603 0.03989821 -0.007441163 0.0491091 0.03953015 -0.008219182 0.05062699 0.04019421 -0.008441269 0.04921251 0.03937357 -0.008452177 0.04922497 0.03935474 -0.00848025 0.0507887 0.03984236 -0.008912503 0.04942226 0.03905594 -0.008924782 0.04966431 0.03868937 -0.009345054 0.049465 0.03899121 -0.009021043 0.04943352 0.03903883 -0.008950173 0.05426281 0.03713697 -0.01090228 0.0532552 0.03692287 -0.01090353 0.05419141 0.03769928 -0.01077467 0.05310034 0.03746408 -0.01077765 0.05412018 0.03825986 -0.01059114 0.05294591 0.03800374 -0.01059669 0.0540502 0.03881078 -0.01035082 0.05279409 0.03853416 -0.01035976 0.05398249 0.03934365 -0.01005423 0.05264723 0.03904753 -0.01006752 0.05391812 0.03985017 -0.009703755 0.05250746 0.03953588 -0.009722054 0.05385816 0.04032248 -0.009303271 0.05237698 0.03999185 -0.009327292 0.05380338 0.04075348 -0.008858263 0.05225765 0.04040873 -0.008888483 0.05375462 0.04113751 -0.008375346 0.05215114 0.04078096 -0.008412063 0.05371236 0.04146999 -0.007862269 0.05205863 0.04110437 -0.007905542 0.05198085 0.04137617 -0.007376909 0.05364871 0.04197114 -0.006778359 0.05274504 0.04198426 -0.006256043 0.05272132 0.04209983 -0.005706191 0.05847555 0.03499096 -0.01099997 0.058811 0.03545421 -0.0109499 0.05912232 0.03588402 -0.01090347 0.05915665 0.03593146 -0.0108878 0.06159615 0.03929972 -0.00808078 0.0613752 0.03899466 -0.008618772 0.06132882 0.03893065 -0.008731663 0.08015549 0.02712982 -0.004649996 0.08009743 0.02717161 -0.004699945 0.04851102 0.04044657 -0.005023717 0.04849767 0.04047673 -0.004699945 0.04889988 0.04072952 -0.004699945 0.04851663 0.04043388 -0.00515151 0.04994332 0.0412873 -0.004699945 0.05099391 0.04172635 -0.004699945 0.05154109 0.04190927 -0.004699945 0.04992097 0.04127794 -0.004699945 0.05503135 0.04244238 -0.004699945 0.05499404 0.04244297 -0.004699945 0.05382508 0.04237723 -0.004699945 0.05325585 0.04228943 -0.004699945 0.05267781 0.0422002 -0.004699945 0.05155456 0.0419138 -0.004699945 0.05673569 0.04232996 -0.004699945 0.05681699 0.04231476 -0.004699945 0.05557757 0.04243332 -0.004699945 0.05788028 0.0421155 -0.004699945 0.05855131 0.04192125 -0.004699945 0.05953139 0.04159617 -0.004699945 0.05900847 0.04178893 -0.004699945 0.06059646 0.04111534 -0.004699945 0.06018531 0.04130095 -0.004699945 0.03839999 0.03599995 -0.008099973 0.03761857 0.03593158 -0.008099973 0.03614997 0.03539711 -0.008099973 0.04064995 0.02760285 -0.008099973 0.04129254 0.03494715 -0.008099973 0.03550744 0.03494715 -0.008099973 0.04129254 0.02805274 -0.008099973 0.04262858 0.03303909 -0.008099973 0.04184716 0.03439253 -0.008099973 0.03993904 0.03572857 -0.008099973 0.03918141 0.03593158 -0.008099973 0.03686088 0.03572857 -0.008099973 0.03417134 0.03303909 -0.008099973 0.03495275 0.02860742 -0.008099973 0.03550744 0.02805274 -0.008099973 0.03839999 0.02699995 -0.008099973 0.03761857 0.02706831 -0.008099973 0.03686088 0.02727133 -0.008099973 0.03918141 0.02706831 -0.008099973 0.03993904 0.02727133 -0.008099973 0.04229706 0.02924996 -0.008099973 0.04184716 0.02860742 -0.008099973 0.04289996 0.03149998 -0.008099973 0.04064995 0.03539711 -0.008099973 0.03495275 0.03439253 -0.008099973 0.03450286 0.03374999 -0.008099973 0.03614997 0.02760285 -0.008099973 0.04283159 0.03228139 -0.008099973 0.03396832 0.03228139 -0.008099973 0.04262858 0.02996087 -0.008099973 0.04283159 0.03071856 -0.008099973 0.04229706 0.03374999 -0.008099973 0.03389996 0.03149998 -0.008099973 0.03396832 0.03071856 -0.008099973 0.03417134 0.02996087 -0.008099973 0.03450286 0.02924996 -0.008099973 0.02899998 0.02266985 -0.01349997 0.02899998 0.02230149 -0.01428985 0.02899998 0.02207595 -0.01513171 0.02899998 0.02199995 -0.01599997 0.02899998 0.02207595 -0.01686823 0.02899998 0.02230149 -0.01771008 0.02899998 0.02266985 -0.01849997 0.02899998 0.02316975 -0.01921391 0.02899998 0.02378606 -0.01983022 0.02899998 0.02449995 -0.02033013 0.02899998 0.02528989 -0.02069842 0.02899998 0.02613174 -0.02092403 0.02899998 0.02699995 -0.02099996 0.02899998 0.02786821 -0.02092403 0.02899998 0.02871006 -0.02069842 0.02899998 0.02949994 -0.02033013 0.02899998 0.03021389 -0.01983022 0.02899998 0.0308302 -0.01921391 0.02899998 0.0313301 -0.01849997 0.02899998 0.03169846 -0.01771008 0.02899998 0.031924 -0.01686823 0.02899998 0.032 -0.01599997 0.02899998 0.031924 -0.01513171 0.02899998 0.03169846 -0.01428985 0.02899998 0.0313301 -0.01349997 0.02899998 0.0308302 -0.01278603 0.02899998 0.03021389 -0.01216977 0.02899998 0.02949994 -0.01166987 0.02899998 0.02871006 -0.01130151 0.02899998 0.02786821 -0.01107591 0.02899998 0.02699995 -0.01099997 0.02899998 0.02613174 -0.01107591 0.02899998 0.02528989 -0.01130151 0.02899998 0.02449995 -0.01166987 0.02899998 0.02378606 -0.01216977 0.02899998 0.02316975 -0.01278603 0.03633034 0.02205348 -0.01672941 0.0363 -0.02218568 -0.01734995 0.03632366 0.02208274 -0.01686674 0.0363 0.02218568 -0.01734995 0.03640156 0.02201265 -0.01624804 0.03639882 -0.02200913 -0.01624763 0.03632313 -0.02206575 -0.01680827 0.03631919 -0.02207708 -0.01686799 0.03630667 -0.0221132 -0.01705801 0.03658759 -0.02202916 -0.01546055 0.03655475 -0.02201855 -0.01556932 0.03642147 0.02200126 -0.01611381 0.03645223 -0.02200835 -0.01600015 0.03640604 -0.02200376 -0.0161944 0.0366913 -0.02207785 -0.01518124 0.03644526 0.02200013 -0.01599997 0.03644818 0.02200001 -0.01598596 0.0366311 0.02204561 -0.01532614 0.03668904 0.02207517 -0.01518058 0.03670901 -0.0220862 -0.0151335 0.03670775 0.02208471 -0.0151335 0.03682333 -0.02213984 -0.01482552 0.03688555 0.02217555 -0.01468652 0.03708982 -0.02230584 -0.01429122 0.03712844 -0.02232986 -0.01421386 0.03715145 -0.02234578 -0.01417541 0.03709542 0.02231204 -0.01429355 0.03715699 0.02235203 -0.01417833 0.03723061 0.02239996 -0.01404041 0.03779023 -0.02281731 -0.01327246 0.03769743 -0.02274399 -0.01337569 0.03760629 -0.02267646 -0.01350349 0.0372802 -0.02243477 -0.01396059 0.03760379 0.02267372 -0.01350194 0.0376482 0.02270632 -0.0134378 0.0377717 0.02280133 -0.01328492 0.03778654 0.0228132 -0.01326918 0.03823935 0.02317458 -0.01278972 0.03817254 -0.02311921 -0.01284724 0.03831273 0.02323311 -0.012712 0.03823739 -0.02317249 -0.01278847 0.03947931 0.02421474 -0.01185882 0.03948014 -0.02421563 -0.01185989 0.03923153 -0.02400171 -0.01199865 0.03898429 -0.02379339 -0.0121783 0.03861624 -0.02348321 -0.01244574 0.03932386 0.02408057 -0.01194077 0.03897881 0.02378755 -0.01217162 0.03857004 -0.0234453 -0.01248753 0.03857588 0.02345174 -0.0124948 0.03891873 0.02373653 -0.01221185 0.03981733 0.02450644 -0.01168054 0.04006516 0.02472037 -0.01154983 0.039891 -0.02456909 -0.01163065 0.04025632 -0.02488696 -0.01146841 0.03981357 -0.02450251 -0.01167386 0.04154956 0.02602487 -0.01110684 0.0415495 -0.02602487 -0.01110792 0.04084593 0.02540367 -0.01126164 0.04102808 -0.02556401 -0.01121062 0.04072064 -0.0252943 -0.01131331 0.04048162 -0.02508461 -0.01139312 0.04048281 0.02508592 -0.01139569 0.04071915 0.02529275 -0.01130843 0.04182273 -0.02626633 -0.01105409 0.04264998 -0.01965111 -0.01099997 0.04263806 -0.0269894 -0.01099997 0.04264998 -0.02699995 -0.01099997 0.04167163 0.0261327 -0.01108002 0.04264998 0.0141943 -0.01099997 0.04264998 0.01234132 -0.01099997 0.04264998 0.007919073 -0.01099997 0.04264998 0.001954495 -0.01099997 0.04264998 -0.001932322 -0.01099997 0.04264998 -0.007862627 -0.01099997 0.04264998 -0.0124607 -0.01099997 0.04264998 -0.01866775 -0.01099997 0.04167228 -0.02613341 -0.01108372 0.0417329 0.02618676 -0.01106655 0.04263806 0.0269894 -0.01099997 0.04264998 0.02699995 -0.01099997 0.02899998 -0.02449995 -0.01166987 0.02899998 -0.02528989 -0.01130151 0.02899998 -0.02613174 -0.01107591 0.02899998 -0.02699995 -0.01099997 0.02899998 -0.02786821 -0.01107591 0.02899998 -0.02871006 -0.01130151 0.02899998 -0.02949994 -0.01166987 0.02899998 -0.03021389 -0.01216977 0.02899998 -0.0308302 -0.01278603 0.02899998 -0.0313301 -0.01349997 0.02899998 -0.03169846 -0.01428985 0.02899998 -0.031924 -0.01513171 0.02899998 -0.032 -0.01599997 0.02899998 -0.031924 -0.01686823 0.02899998 -0.03169846 -0.01771008 0.02899998 -0.0313301 -0.01849997 0.02899998 -0.0308302 -0.01921391 0.02899998 -0.03021389 -0.01983022 0.02899998 -0.02949994 -0.02033013 0.02899998 -0.02871006 -0.02069842 0.02899998 -0.02786821 -0.02092403 0.02899998 -0.02699995 -0.02099996 0.02899998 -0.02613174 -0.02092403 0.02899998 -0.02528989 -0.02069842 0.02899998 -0.02449995 -0.02033013 0.02899998 -0.02378606 -0.01983022 0.02899998 -0.02316975 -0.01921391 0.02899998 -0.02266985 -0.01849997 0.02899998 -0.02230149 -0.01771008 0.02899998 -0.02207595 -0.01686823 0.02899998 -0.02199995 -0.01599997 0.02899998 -0.02207595 -0.01513171 0.02899998 -0.02230149 -0.01428985 0.02899998 -0.02266985 -0.01349997 0.02899998 -0.02316975 -0.01278603 0.02899998 -0.02378606 -0.01216977 0.03839999 -0.02699995 -0.008099973 0.03761857 -0.02706831 -0.008099973 0.03550744 -0.03494715 -0.008099973 0.03686088 -0.02727133 -0.008099973 0.03614997 -0.02760285 -0.008099973 0.03550744 -0.02805274 -0.008099973 0.03417134 -0.02996087 -0.008099973 0.03450286 -0.03374999 -0.008099973 0.03495275 -0.03439253 -0.008099973 0.03614997 -0.03539711 -0.008099973 0.03450286 -0.02924996 -0.008099973 0.03495275 -0.02860742 -0.008099973 0.03396832 -0.03228139 -0.008099973 0.03417134 -0.03303909 -0.008099973 0.04064995 -0.03539711 -0.008099973 0.04229706 -0.03374999 -0.008099973 0.04184716 -0.03439253 -0.008099973 0.04262858 -0.03303909 -0.008099973 0.04229706 -0.02924996 -0.008099973 0.04129254 -0.02805274 -0.008099973 0.03396832 -0.03071856 -0.008099973 0.03389996 -0.03149998 -0.008099973 0.03686088 -0.03572857 -0.008099973 0.04129254 -0.03494715 -0.008099973 0.04262858 -0.02996087 -0.008099973 0.04283159 -0.03071856 -0.008099973 0.04184716 -0.02860742 -0.008099973 0.03993904 -0.02727133 -0.008099973 0.04064995 -0.02760285 -0.008099973 0.03918141 -0.02706831 -0.008099973 0.03761857 -0.03593158 -0.008099973 0.03839999 -0.03599995 -0.008099973 0.04283159 -0.03228139 -0.008099973 0.04289996 -0.03149998 -0.008099973 0.03918141 -0.03593158 -0.008099973 0.03993904 -0.03572857 -0.008099973 0.05368596 0.001954495 -0.01099997 0.05368596 -0.001932322 -0.01099997 0.05208086 -0.001932322 -0.01099997 0.05368596 0.01234132 -0.01099997 0.05368596 0.0141943 -0.01099997 0.05368596 0.007919073 -0.01099997 0.04623091 -0.0124607 -0.01099997 0.05208086 -0.0124607 -0.01099997 0.04667079 -0.0124607 -0.01099997 0.05208086 -0.01965111 -0.01099997 0.05208086 -0.02821522 -0.01099997 0.04667079 -0.02821522 -0.01099997 0.04623091 -0.02821522 -0.01099997 0.05368596 -0.01866775 -0.01099997 0.05368596 -0.0124607 -0.01099997 0.05368596 -0.01965111 -0.01099997 0.05208086 0.0141943 -0.01099997 0.04667079 0.0141943 -0.01099997 0.04184716 0.02860742 -0.01099997 0.04229706 0.02924996 -0.01099997 0.04623091 0.0141943 -0.01099997 0.04623091 0.03229677 -0.01099997 0.04262858 0.02996087 -0.01099997 0.04283159 0.03071856 -0.01099997 0.04289752 0.03135097 -0.01099997 0.04372739 0.03153818 -0.01099997 0.04512625 0.03192991 -0.01099997 0.04548263 0.03202968 -0.01099997 0.04667079 0.03245377 -0.01099997 0.04750972 0.0327782 -0.01099997 0.04885166 0.03336411 -0.01099997 0.04719656 0.03264147 -0.01099997 0.05045211 0.0341981 -0.01099997 0.04979848 0.03385746 -0.01099997 0.05208086 0.001954495 -0.01099997 0.04667079 0.001954495 -0.01099997 0.04623091 0.001954495 -0.01099997 0.04623091 0.007919073 -0.01099997 0.05208086 0.007919073 -0.01099997 0.04667079 0.007919073 -0.01099997 0.05368596 -0.007862627 -0.01099997 0.05208086 -0.007862627 -0.01099997 0.04667079 -0.007862627 -0.01099997 0.04623091 -0.007862627 -0.01099997 0.04623091 -0.001932322 -0.01099997 0.04667079 -0.001932322 -0.01099997 0.03993904 0.02727133 -0.01099997 0.04090994 0.02699995 -0.01099997 0.03918141 0.02706831 -0.01099997 0.03839999 0.02699995 -0.01099997 0.04064995 0.02760285 -0.01099997 0.04090994 0.02778494 -0.01099997 0.04129254 0.02805274 -0.01099997 0.04623091 0.01234132 -0.01099997 0.04064995 -0.02760285 -0.01099997 0.03993904 -0.02727133 -0.01099997 0.04090994 -0.02699995 -0.01099997 0.03918141 -0.02706831 -0.01099997 0.03839999 -0.02699995 -0.01099997 0.04283159 -0.03071856 -0.01099997 0.04262858 -0.02996087 -0.01099997 0.04229706 -0.02924996 -0.01099997 0.04184716 -0.02860742 -0.01099997 0.04145497 -0.02821522 -0.01099997 0.04129254 -0.02805274 -0.01099997 0.04090994 -0.02778494 -0.01099997 0.04289752 -0.03135097 -0.01099997 0.04465317 -0.03178089 -0.01099997 0.04512524 -0.03193175 -0.01099997 0.04623091 -0.03228497 -0.01099997 0.04636377 -0.03232741 -0.01099997 0.05275952 -0.03556603 -0.01099997 0.05208086 -0.03519052 -0.01099997 0.05200314 -0.03514754 -0.01099997 0.05126923 -0.03467994 -0.01099997 0.04980319 -0.03384804 -0.01099997 0.0496813 -0.0337789 -0.01099997 0.04803913 -0.03299248 -0.01099997 0.04750859 -0.03278189 -0.01099997 0.04667079 -0.0324493 -0.01099997 0.05368596 -0.03589445 -0.01099997 0.05364668 -0.0358873 -0.01099997 0.05368596 -0.02821522 -0.01099997 0.05357015 -0.03585976 -0.01099997 0.05277281 -0.03557342 -0.01099997 0.05733066 -0.03563505 -0.01099997 0.05694872 -0.03575932 -0.01099997 0.05642688 -0.03592902 -0.01099997 0.05611747 -0.03597563 -0.01099997 0.05550014 -0.03606855 -0.01099997 0.05526864 -0.03606498 -0.01099997 0.06783109 -0.02821522 -0.01099997 0.05847555 -0.03499096 -0.01099997 0.05456095 -0.03605395 -0.01099997 0.05440866 -0.03602617 -0.01099997 0.05816912 -0.03519839 -0.01099997 0.0577346 -0.03542464 -0.01099997 0.079656 -0.01965111 -0.01099997 0.05208086 0.01234132 -0.01099997 0.04667079 0.01234132 -0.01099997 0.05621796 -0.03654128 -0.01097548 0.05630701 -0.04203969 -0.00667417 0.05542689 -0.04208344 -0.006711244 0.05542111 -0.0418629 -0.007267296 0.06131613 -0.04042875 -0.006403148 0.06205058 -0.03992718 -0.006344795 0.06214368 -0.04005569 -0.005752623 0.0613892 -0.04054749 -0.005812823 0.06217509 -0.04009914 -0.00516653 0.05433803 -0.03658103 -0.01097619 0.05528301 -0.036632 -0.01097589 0.05534279 -0.03889727 -0.01034003 0.05535709 -0.03943806 -0.01003831 0.05398899 -0.0393446 -0.01005417 0.05537062 -0.03995156 -0.009681701 0.05538326 -0.04042959 -0.009274363 0.05386537 -0.04032349 -0.009303152 0.05800461 -0.03594678 -0.01097452 0.05713564 -0.03631019 -0.010975 0.058811 -0.03545421 -0.0109499 0.06161433 -0.04053246 -0.004699945 0.06144422 -0.04063683 -0.004713833 0.06143158 -0.04061633 -0.005229473 0.06126588 -0.04074627 -0.004728376 0.06065309 -0.04106992 -0.004775226 0.06064534 -0.04105466 -0.005288183 0.06019991 -0.04130256 -0.004809439 0.05983704 -0.04144948 -0.004834592 0.05982923 -0.04143172 -0.005344867 0.05906778 -0.0417611 -0.004887819 0.05899524 -0.04178243 -0.004892408 0.05898332 -0.04174786 -0.005399465 0.04934388 -0.04083055 -0.005811929 0.04931563 -0.04088217 -0.005327105 0.04852515 -0.04041445 -0.005346775 0.0501554 -0.0412454 -0.005790352 0.05013334 -0.04129344 -0.005304217 0.04997569 -0.04122108 -0.005308866 0.04958677 -0.04104256 -0.00532037 0.05073082 -0.04156774 -0.005286633 0.05099755 -0.04159796 -0.005765318 0.05097764 -0.04165107 -0.005278229 0.05185735 -0.04188334 -0.005737125 0.05184072 -0.04194253 -0.005248785 0.05157172 -0.04185169 -0.005257964 0.05191731 -0.0419684 -0.005246222 0.05273199 -0.04210215 -0.005705773 0.05272251 -0.04214984 -0.005215048 0.05362147 -0.04225462 -0.005671203 0.05328065 -0.04225981 -0.005192816 0.05313223 -0.04224216 -0.005199193 0.05505692 -0.04240012 -0.005113065 0.05452328 -0.04239094 -0.005138456 0.05452603 -0.04233998 -0.005633175 0.05436235 -0.0423882 -0.005146086 0.05361562 -0.04229956 -0.005178332 0.0554341 -0.04235696 -0.005592048 0.05543565 -0.04240661 -0.005095064 0.05554604 -0.04240852 -0.005089819 0.05633413 -0.0423057 -0.005548238 0.05633819 -0.04234325 -0.005048513 0.05722618 -0.04218721 -0.005501627 0.0568397 -0.04229182 -0.00502187 0.05674409 -0.04230982 -0.005027353 0.05856955 -0.04190731 -0.00491923 0.05811971 -0.04203921 -0.004947543 0.05811017 -0.04200148 -0.005452036 0.05800503 -0.04207289 -0.004954814 0.05723148 -0.0422182 -0.004999279 0.06025475 -0.04128032 -0.004805684 0.05979561 -0.039411 -0.009162425 0.05957245 -0.03897941 -0.009596467 0.06086975 -0.03829675 -0.009514331 0.0590763 -0.03801971 -0.01029831 0.06019181 -0.03736072 -0.01026535 0.0603379 -0.03756242 -0.01014924 0.05933129 -0.03851294 -0.009976625 0.0605179 -0.03781098 -0.009934306 0.06083369 -0.03824698 -0.009557366 0.0598514 -0.03689068 -0.01053601 0.05881184 -0.03750813 -0.01055878 0.05974948 -0.03674995 -0.01061701 0.05854231 -0.03698676 -0.01075726 0.05950319 -0.03640985 -0.01072955 0.05915665 -0.03593146 -0.0108878 0.05827194 -0.03646385 -0.01089495 0.05912232 -0.03588402 -0.01090347 0.05392503 -0.03985118 -0.009703695 0.05532801 -0.03833782 -0.01058447 0.05405628 -0.03881168 -0.01035076 0.05239361 -0.03999686 -0.009327054 0.05252331 -0.0395407 -0.009721875 0.05097758 -0.03945219 -0.009346246 0.05117464 -0.03902244 -0.009736537 0.05266219 -0.03905206 -0.01006734 0.05280822 -0.03853839 -0.0103597 0.05138552 -0.03856253 -0.01007795 0.05160701 -0.0380795 -0.01036685 0.04966431 -0.03868937 -0.009345054 0.04967629 -0.03867125 -0.009364485 0.04988759 -0.03835123 -0.009707927 0.04991805 -0.03830516 -0.009743213 0.04992979 -0.03828728 -0.009756863 0.05020004 -0.03787803 -0.0100699 0.0542677 -0.03713762 -0.01090222 0.05529791 -0.03719723 -0.01090073 0.05419671 -0.03769999 -0.01077467 0.05531299 -0.03776836 -0.01077109 0.0541259 -0.03826069 -0.01059114 0.05079019 -0.03698438 -0.01059275 0.05079728 -0.03697359 -0.0105983 0.05183577 -0.0375806 -0.0106011 0.05088704 -0.03683769 -0.01066827 0.05206841 -0.03707313 -0.01078003 0.05230182 -0.03656417 -0.01090449 0.05109643 -0.0365206 -0.01076269 0.05110192 -0.03651225 -0.01076519 0.05295908 -0.03800767 -0.01059663 0.05311262 -0.03746771 -0.01077765 0.05326652 -0.03692615 -0.01090347 0.05341893 -0.03639006 -0.01097649 0.05021011 -0.03786283 -0.01008152 0.0503658 -0.03762704 -0.01026189 0.05048948 -0.03743976 -0.01035833 0.05049854 -0.03742611 -0.01036536 0.05543124 -0.04224747 -0.006150245 0.05453163 -0.0422275 -0.006188392 0.05363595 -0.04214006 -0.006223618 0.05275553 -0.04198652 -0.006255686 0.05540496 -0.04125171 -0.00833112 0.05541378 -0.04158526 -0.007810115 0.05372041 -0.04147118 -0.007862031 0.05539476 -0.040865 -0.008821845 0.05381089 -0.04075461 -0.008858084 0.05455088 -0.04183852 -0.00729829 0.05453985 -0.04206097 -0.006745994 0.05368524 -0.04174947 -0.0073269 0.05365711 -0.04197227 -0.006778061 0.0527898 -0.04181873 -0.006807208 0.05103987 -0.04148316 -0.00631082 0.05020713 -0.04113256 -0.006333947 0.05028069 -0.04097217 -0.006878376 0.04940485 -0.04072064 -0.006353914 0.04857629 -0.04033708 -0.005826115 0.04858142 -0.04032927 -0.005874276 0.04863291 -0.04025125 -0.00635761 0.05189019 -0.04176765 -0.006284713 0.04863554 -0.04024738 -0.006370306 0.05037671 -0.04076272 -0.007416248 0.05199986 -0.04138189 -0.007376372 0.05110037 -0.04131901 -0.006857335 0.05193758 -0.041601 -0.006833612 0.04886603 -0.03989827 -0.007441163 0.04887747 -0.03988093 -0.00747776 0.05207717 -0.04110991 -0.007905125 0.05049526 -0.04050415 -0.007939815 0.05063581 -0.04019761 -0.00844109 0.04921251 -0.03937357 -0.008452177 0.04922497 -0.03935474 -0.00848025 0.05079722 -0.03984564 -0.008912324 0.05227506 -0.04041397 -0.008888185 0.05216914 -0.04078638 -0.008411705 0.05376243 -0.04113864 -0.008375167 0.0490272 -0.03965419 -0.007957041 0.04903787 -0.03963804 -0.007991194 0.0491091 -0.03953015 -0.008219182 0.04864448 -0.04023379 -0.006414353 0.04874414 -0.04008287 -0.006904602 0.04875266 -0.04006993 -0.006946563 0.04882931 -0.03995388 -0.007323563 0.05632334 -0.04220008 -0.006109535 0.05720812 -0.04208624 -0.006066262 0.05979388 -0.04134869 -0.00592041 0.05895292 -0.04165834 -0.005971312 0.05890423 -0.04151505 -0.006547987 0.05804699 -0.04175585 -0.006592631 0.05799382 -0.04154932 -0.007161438 0.05714237 -0.04171794 -0.007198989 0.05709415 -0.04144787 -0.00775057 0.06220012 -0.04013365 -0.004699945 0.060606 -0.04097855 -0.0058676 0.06054008 -0.04085093 -0.006453275 0.05973607 -0.04121297 -0.006501555 0.05965477 -0.04102212 -0.007079958 0.05883651 -0.04131579 -0.007121503 0.05874955 -0.04105973 -0.007682979 0.06032413 -0.04043334 -0.00760895 0.06107276 -0.0400334 -0.00756967 0.06121087 -0.04025769 -0.006991863 0.06194305 -0.0397787 -0.006940841 0.06197559 -0.03982371 -0.006821811 0.06044626 -0.04066956 -0.007036745 0.05954968 -0.04077529 -0.007646679 0.05864351 -0.0407477 -0.008223176 0.06111234 -0.03863173 -0.009100675 0.06132882 -0.03893065 -0.008731663 0.05999714 -0.03980082 -0.008680999 0.0613752 -0.03899466 -0.008618772 0.06017404 -0.04014295 -0.008160173 0.06159615 -0.03929972 -0.00808078 0.06170123 -0.0394448 -0.007824957 0.06178462 -0.03955996 -0.007520139 0.05631822 -0.03710281 -0.010899 0.05732095 -0.03685551 -0.01089709 0.05641961 -0.03767037 -0.01076698 0.05750834 -0.03740692 -0.01076233 0.05652064 -0.03823626 -0.01057684 0.05769509 -0.03795665 -0.0105682 0.05661988 -0.03879195 -0.01032763 0.05787849 -0.03849631 -0.01031368 0.05671572 -0.03932869 -0.01002007 0.05805546 -0.03901714 -0.009999334 0.05680662 -0.03983777 -0.009656488 0.05822306 -0.03951036 -0.009627878 0.05689108 -0.04031091 -0.009241282 0.05837851 -0.03996789 -0.009203672 0.05696785 -0.04074072 -0.008780181 0.05851936 -0.04038232 -0.008732914 0.0570358 -0.04112118 -0.008280575 0.05808556 -0.04190582 -0.006020188 0.05718034 -0.04193055 -0.006634652 0.05628484 -0.04182243 -0.007234215 0.05140173 -0.03605824 -0.01090031 0.05140531 -0.03605282 -0.01090192 0.05143767 -0.03600382 -0.01091653 0.04942226 -0.03905594 -0.008924782 0.04943352 -0.03903883 -0.008950173 0.049465 -0.03899121 -0.009021043 0.06117272 -0.04080134 -0.004699945 0.06018942 -0.0413106 -0.004699945 0.05904537 -0.04177623 -0.004699945 0.06013381 -0.04133939 -0.004699945 0.05739223 -0.04222089 -0.004699945 0.05681574 -0.04230445 -0.004699945 0.05852419 -0.0419436 -0.004699945 0.05855482 -0.04193377 -0.004699945 0.05506545 -0.04244333 -0.004699945 0.05623853 -0.04238808 -0.004699945 0.05325454 -0.04229891 -0.004699945 0.05335301 -0.04231816 -0.004699945 0.05450892 -0.04242956 -0.004699945 0.05503135 -0.0424425 -0.004699945 0.05154496 -0.0418964 -0.004699945 0.05221271 -0.0420956 -0.004699945 0.05109089 -0.04176098 -0.004699945 0.05055135 -0.04155617 -0.004699945 0.04994869 -0.04127585 -0.004699945 0.04849767 -0.04047673 -0.004699945 0.04851102 -0.04044657 -0.005023717 0.04851597 -0.04043525 -0.005137324 0.04949992 -0.04106718 -0.004699945 0.08009743 -0.02717161 -0.004699945 0.08015549 -0.02712982 -0.004649996 0.08015549 -0.02712982 0.004649996 0.0478568 -0.02803599 0.005499958 0.05746966 -0.02355343 0.005499958 0.04751843 -0.02929878 0.005499958 0.04740446 -0.03060114 0.005499958 0.06064981 -0.03542202 0.005499958 0.0597254 -0.03634643 0.005499958 0.05865448 -0.03709632 0.005499958 0.05746966 -0.03764879 0.005499958 0.05360215 -0.03798717 0.005499958 0.05233931 -0.03764879 0.005499958 0.05115449 -0.03709632 0.005499958 0.05008357 -0.03634643 0.005499958 0.04915916 -0.03542202 0.005499958 0.04840928 -0.03435111 0.005499958 0.0478568 -0.03316628 0.005499958 0.04751843 -0.0319035 0.005499958 0.05865448 -0.0241059 0.005499958 0.0597254 -0.02485579 0.005499958 0.06139969 -0.03435111 0.005499958 0.06195217 -0.03316628 0.005499958 0.05620688 -0.03798717 0.005499958 0.05490452 -0.03810113 0.005499958 0.04840928 -0.02685111 0.005499958 0.04915916 -0.0257802 0.005499958 0.05008357 -0.02485579 0.005499958 0.06139969 -0.02685111 0.005499958 0.06195217 -0.02803599 0.005499958 0.06229054 -0.02929878 0.005499958 0.05233931 -0.02355343 0.005499958 0.05360215 -0.02321505 0.005499958 0.05115449 -0.0241059 0.005499958 0.05490452 -0.02310109 0.005499958 0.05620688 -0.02321505 0.005499958 0.06064981 -0.0257802 0.005499958 0.06240451 -0.03060114 0.005499958 0.06229054 -0.0319035 0.005499958 0.05360215 -0.03798717 -0.005499958 0.05490452 -0.03810113 -0.005499958 0.05746966 -0.02355343 -0.005499958 0.0478568 -0.02803599 -0.005499958 0.04751843 -0.02929878 -0.005499958 0.04740446 -0.03060114 -0.005499958 0.04751843 -0.0319035 -0.005499958 0.0478568 -0.03316628 -0.005499958 0.04840928 -0.03435111 -0.005499958 0.04915916 -0.03542202 -0.005499958 0.05008357 -0.03634643 -0.005499958 0.05115449 -0.03709632 -0.005499958 0.05233931 -0.03764879 -0.005499958 0.05865448 -0.03709632 -0.005499958 0.0597254 -0.03634643 -0.005499958 0.06064981 -0.03542202 -0.005499958 0.05865448 -0.0241059 -0.005499958 0.05490452 -0.02310109 -0.005499958 0.05008357 -0.02485579 -0.005499958 0.04915916 -0.0257802 -0.005499958 0.05620688 -0.03798717 -0.005499958 0.05746966 -0.03764879 -0.005499958 0.06195217 -0.02803599 -0.005499958 0.06139969 -0.02685111 -0.005499958 0.06064981 -0.0257802 -0.005499958 0.05115449 -0.0241059 -0.005499958 0.05360215 -0.02321505 -0.005499958 0.05233931 -0.02355343 -0.005499958 0.05620688 -0.02321505 -0.005499958 0.04840928 -0.02685111 -0.005499958 0.0597254 -0.02485579 -0.005499958 0.06139969 -0.03435111 -0.005499958 0.06195217 -0.03316628 -0.005499958 0.06229054 -0.0319035 -0.005499958 0.06240451 -0.03060114 -0.005499958 0.06229054 -0.02929878 -0.005499958 0.04835563 -0.03609621 0.004699945 0.04835563 -0.03609621 -0.004699945 0.04915916 -0.03542202 0.004699945 0.04915916 -0.03542202 -0.004699945 0.04061824 -0.03013825 0.009848475 0.04061824 -0.02964699 0.009579122 0.04003 -0.02946919 0.009847521 0.03478842 -0.03268188 0.008099973 0.03480595 -0.03273355 0.008099973 0.03484344 -0.03278332 0.008153557 0.03543269 -0.03387379 0.008099973 0.03556782 -0.03401762 0.008099973 0.03565514 -0.0341019 0.008150577 0.04058545 -0.03460866 0.008099973 0.04061675 -0.03458273 0.008099973 0.04061824 -0.03446936 0.008343815 0.04174077 -0.02968919 0.008099973 0.04158961 -0.02945595 0.008099973 0.04159504 -0.02955716 0.00826323 0.03557008 -0.02897983 0.008099973 0.03565514 -0.02889806 0.008150577 0.03565752 -0.02887618 0.008099973 0.03502136 -0.02976697 0.008099973 0.03520488 -0.02955716 0.00826323 0.03520953 -0.02945464 0.008099973 0.04061824 -0.03233247 0.01003235 0.04003 -0.03299236 0.01014268 0.03806471 -0.03371363 0.01012355 0.03676992 -0.0300076 0.01014268 0.03873527 -0.02928632 0.01012355 0.04061824 -0.03178006 0.01012557 0.04061824 -0.03121984 0.01012557 0.04061824 -0.03066742 0.01003235 0.04003 -0.0300076 0.01014268 0.03939646 -0.02934783 0.01003068 0.03806471 -0.02928632 0.01012355 0.03740346 -0.02934783 0.01003068 0.03676992 -0.02946919 0.009847521 0.03618168 -0.03013825 0.009848475 0.03618168 -0.03066742 0.01003235 0.03618168 -0.03121984 0.01012557 0.03618168 -0.03178006 0.01012557 0.03618168 -0.03233247 0.01003235 0.03676992 -0.03299236 0.01014268 0.03618168 -0.0328617 0.009848475 0.03676992 -0.03353071 0.009847521 0.03740346 -0.03365206 0.01003068 0.03873527 -0.03371363 0.01012355 0.03939646 -0.03365206 0.01003068 0.04003 -0.03353071 0.009847521 0.04061824 -0.0328617 0.009848475 0.034621 -0.03110069 0.008099973 0.03484344 -0.03103393 0.008601665 0.03463029 -0.03102105 0.008099973 0.03484344 -0.03073769 0.008498728 0.0346542 -0.0309059 0.008099973 0.03482389 -0.03024697 0.008099973 0.03475147 -0.03043776 0.008099973 0.03484344 -0.03046268 0.008347988 0.03471565 -0.03061026 0.008099973 0.03500127 -0.02980029 0.008099973 0.03520488 -0.02983069 0.008565902 0.03496623 -0.02987235 0.008099973 0.03484344 -0.03021663 0.008153557 0.03484654 -0.03018736 0.008099973 0.03530871 -0.02928996 0.008099973 0.03565514 -0.02916198 0.008564472 0.03618168 -0.02853059 0.008343815 0.03575551 -0.0287711 0.008099973 0.03569853 -0.02882748 0.008099973 0.03676998 -0.02806752 0.008099973 0.03673541 -0.02808392 0.008099973 0.03676992 -0.02824568 0.008493661 0.03621453 -0.0283913 0.008099973 0.03618317 -0.02841722 0.008099973 0.03740346 -0.02805119 0.008595943 0.03736668 -0.02784317 0.008099973 0.03680783 -0.02804958 0.008099973 0.03806471 -0.02795261 0.008647739 0.03795999 -0.02772551 0.008099973 0.03740394 -0.02783578 0.008099973 0.03873527 -0.02795261 0.008647739 0.03863537 -0.02770727 0.008099973 0.03803968 -0.02771711 0.008099973 0.03939485 -0.02783858 0.008099973 0.03931218 -0.02781111 0.008099973 0.03939646 -0.02805119 0.008595943 0.03923416 -0.02779269 0.008099973 0.03873443 -0.0277214 0.008099973 0.03987753 -0.02799898 0.008099973 0.04003 -0.02824568 0.008493661 0.04002624 -0.02807623 0.008099973 0.04061824 -0.02853059 0.008343815 0.0404818 -0.02832096 0.008099973 0.04041427 -0.02827775 0.008099973 0.0412321 -0.02898234 0.008099973 0.04113864 -0.02888286 0.008099973 0.04114478 -0.02889806 0.008150577 0.04095304 -0.02868545 0.008099973 0.04061371 -0.02842295 0.008099973 0.04114478 -0.02916198 0.008564472 0.0414167 -0.02918928 0.008099973 0.04136729 -0.02912616 0.008099973 0.041772 -0.02975964 0.008099973 0.04159504 -0.02983069 0.008565902 0.04195481 -0.03017228 0.008099973 0.04195654 -0.03021663 0.008153557 0.04198575 -0.03024214 0.008099973 0.04199397 -0.0302664 0.008099973 0.04195654 -0.03134316 0.008653879 0.04217237 -0.03115391 0.008099973 0.04195654 -0.03103393 0.008601665 0.04215186 -0.03089708 0.008099973 0.04195654 -0.03073769 0.008498728 0.04208165 -0.03060752 0.008099973 0.04195654 -0.03046268 0.008347988 0.04201149 -0.03031808 0.008099973 0.04217892 -0.03189927 0.008099973 0.04218208 -0.03183948 0.008099973 0.04195654 -0.03196603 0.008601665 0.04219412 -0.03161138 0.008099973 0.04195654 -0.0316568 0.008653879 0.04219996 -0.03149998 0.008099973 0.04219102 -0.0313878 0.008099973 0.04216969 -0.0319789 0.008099973 0.04195654 -0.03226226 0.008498728 0.04214572 -0.03209406 0.008099973 0.04195654 -0.03253722 0.008347988 0.04208433 -0.0323897 0.008099973 0.04183375 -0.0331276 0.008099973 0.04195338 -0.03281259 0.008099973 0.04195654 -0.03278332 0.008153557 0.04197603 -0.03275299 0.008099973 0.04204851 -0.03256219 0.008099973 0.04149121 -0.03371 0.008099973 0.04159045 -0.03354531 0.008099973 0.04159504 -0.03344279 0.00826323 0.04177856 -0.03323298 0.008099973 0.04159504 -0.03316926 0.008565902 0.04179865 -0.03319966 0.008099973 0.04114478 -0.03383791 0.008564472 0.04114478 -0.0341019 0.008150577 0.04122984 -0.03402006 0.008099973 0.04104447 -0.03422886 0.008099973 0.04110139 -0.03417247 0.008099973 0.04114246 -0.03412377 0.008099973 0.04003 -0.03475427 0.008493661 0.04002994 -0.03493243 0.008099973 0.04006451 -0.03491598 0.008099973 0.03939646 -0.03494876 0.008595943 0.03943324 -0.03515678 0.008099973 0.03999209 -0.03495037 0.008099973 0.03873527 -0.03504735 0.008647739 0.03883999 -0.03527444 0.008099973 0.03939598 -0.03516417 0.008099973 0.03806471 -0.03504735 0.008647739 0.03816455 -0.03529268 0.008099973 0.03876024 -0.03528285 0.008099973 0.03740507 -0.03516137 0.008099973 0.0374878 -0.03518885 0.008099973 0.03740346 -0.03494876 0.008595943 0.03756582 -0.03520727 0.008099973 0.03806555 -0.03527855 0.008099973 0.03692245 -0.03500097 0.008099973 0.03676992 -0.03475427 0.008493661 0.03677368 -0.03492373 0.008099973 0.03618168 -0.03446936 0.008343815 0.03631818 -0.03467899 0.008099973 0.03638571 -0.0347222 0.008099973 0.03566128 -0.03411704 0.008099973 0.03584688 -0.03431451 0.008099973 0.03618627 -0.03457695 0.008099973 0.03502792 -0.03324031 0.008099973 0.03505915 -0.03331077 0.008099973 0.03520488 -0.03344279 0.00826323 0.03521037 -0.033544 0.008099973 0.03565514 -0.03383791 0.008564472 0.03538328 -0.03381067 0.008099973 0.03520488 -0.03316926 0.008565902 0.03484511 -0.03282767 0.008099973 0.03481417 -0.03275781 0.008099973 0.03484344 -0.03253722 0.008347988 0.03471827 -0.03239244 0.008099973 0.03484344 -0.0316568 0.008653879 0.03462761 -0.03184604 0.008099973 0.03484344 -0.03196603 0.008601665 0.03464812 -0.03210288 0.008099973 0.03484344 -0.03226226 0.008498728 0.03461784 -0.03116047 0.008099973 0.03460586 -0.03138858 0.008099973 0.03484344 -0.03134316 0.008653879 0.03459995 -0.03149998 0.008099973 0.0346089 -0.03161215 0.008099973 0.03520488 -0.03050845 0.009014904 0.03520488 -0.0308938 0.009148776 0.03520488 -0.03129601 0.009216666 0.03520488 -0.03170394 0.009216666 0.03520488 -0.03210616 0.009148776 0.03520488 -0.0324915 0.009014904 0.03565514 -0.03030675 0.009469032 0.03565514 -0.03077048 0.009630143 0.03565514 -0.03125452 0.009711802 0.03565514 -0.03174543 0.009711802 0.03565514 -0.03222948 0.009630143 0.03565514 -0.0326932 0.009469032 0.03520488 -0.03284919 0.008818805 0.03565514 -0.03312361 0.009233057 0.03618168 -0.03335291 0.009579122 0.03520488 -0.03015077 0.008818805 0.03565514 -0.02987635 0.009233057 0.03618168 -0.02964699 0.009579122 0.03618168 -0.03416812 0.008816182 0.03676992 -0.03442412 0.009011328 0.03740346 -0.03459888 0.009144544 0.03806471 -0.03468751 0.009212076 0.03873527 -0.03468751 0.009212076 0.03939646 -0.03459888 0.009144544 0.04003 -0.03442412 0.009011328 0.03565514 -0.03350877 0.008928656 0.03618168 -0.03379249 0.009231805 0.03676992 -0.03401249 0.009466826 0.03740346 -0.03416264 0.009627282 0.03806471 -0.03423875 0.009708583 0.03873527 -0.03423875 0.009708583 0.03939646 -0.03416264 0.009627282 0.04003 -0.03401249 0.009466826 0.04061824 -0.03335291 0.009579122 0.04061824 -0.03379249 0.009231805 0.04061824 -0.03416812 0.008816182 0.04114478 -0.02987635 0.009233057 0.04114478 -0.03030675 0.009469032 0.04114478 -0.03077048 0.009630143 0.04114478 -0.03125452 0.009711802 0.04114478 -0.03174543 0.009711802 0.04114478 -0.03222948 0.009630143 0.04114478 -0.0326932 0.009469032 0.04114478 -0.03312361 0.009233057 0.04114478 -0.03350877 0.008928656 0.03618168 -0.02883183 0.008816182 0.03676992 -0.02857577 0.009011328 0.03740346 -0.02840107 0.009144544 0.03806471 -0.02831244 0.009212076 0.03873527 -0.02831244 0.009212076 0.03939646 -0.02840107 0.009144544 0.04003 -0.02857577 0.009011328 0.04061824 -0.02883183 0.008816182 0.04159504 -0.03015077 0.008818805 0.04159504 -0.03050845 0.009014904 0.04159504 -0.0308938 0.009148776 0.04159504 -0.03129601 0.009216666 0.04159504 -0.03170394 0.009216666 0.04159504 -0.03210616 0.009148776 0.04159504 -0.0324915 0.009014904 0.04159504 -0.03284919 0.008818805 0.03565514 -0.02949118 0.008928656 0.03618168 -0.02920746 0.009231805 0.03676992 -0.02898746 0.009466826 0.03740346 -0.02883732 0.009627282 0.03806471 -0.0287612 0.009708583 0.03873527 -0.0287612 0.009708583 0.03939646 -0.02883732 0.009627282 0.04003 -0.02898746 0.009466826 0.04061824 -0.02920746 0.009231805 0.04114478 -0.02949118 0.008928656 0.02899998 -0.02699995 0.01874995 0.02899998 -0.0274775 0.01870816 0.02899998 -0.02794051 0.01858413 0.02899998 -0.02837496 0.01838153 0.02899998 -0.02876764 0.01810657 0.02899998 -0.02910661 0.01776766 0.02899998 -0.02938157 0.01737499 0.02899998 -0.0295841 0.01694053 0.02899998 -0.0297082 0.01647752 0.02899998 -0.02974998 0.01599997 0.02899998 -0.0297082 0.01552242 0.02899998 -0.0295841 0.01505941 0.02899998 -0.02938157 0.01462495 0.02899998 -0.02910661 0.01423233 0.02899998 -0.02876764 0.01389336 0.02899998 -0.02837496 0.0136184 0.02899998 -0.02794051 0.01341581 0.02899998 -0.0274775 0.01329177 0.02899998 -0.02699995 0.01324999 0.02899998 -0.02652245 0.01329177 0.02899998 -0.02605944 0.01341581 0.02899998 -0.02562499 0.0136184 0.02899998 -0.02523231 0.01389336 0.02899998 -0.02489334 0.01423233 0.02899998 -0.02461838 0.01462495 0.02899998 -0.02441585 0.01505941 0.02899998 -0.02429175 0.01552242 0.02899998 -0.02424997 0.01599997 0.02899998 -0.02429175 0.01647752 0.02899998 -0.02441585 0.01694053 0.02899998 -0.02461838 0.01737499 0.02899998 -0.02489334 0.01776766 0.02899998 -0.02523231 0.01810657 0.02899998 -0.02562499 0.01838153 0.02899998 -0.02605944 0.01858413 0.02899998 -0.02652245 0.01870816 0.02899998 0.02699995 0.01874995 0.02899998 0.02652245 0.01870816 0.02899998 0.02605944 0.01858413 0.02899998 0.02562499 0.01838153 0.02899998 0.02523231 0.01810657 0.02899998 0.02489334 0.01776766 0.02899998 0.02461838 0.01737499 0.02899998 0.02441585 0.01694053 0.02899998 0.02429175 0.01647752 0.02899998 0.02424997 0.01599997 0.02899998 0.02429175 0.01552242 0.02899998 0.02441585 0.01505941 0.02899998 0.02461838 0.01462495 0.02899998 0.02489334 0.01423233 0.02899998 0.02523231 0.01389336 0.02899998 0.02562499 0.0136184 0.02899998 0.02605944 0.01341581 0.02899998 0.02652245 0.01329177 0.02899998 0.02699995 0.01324999 0.02899998 0.0274775 0.01329177 0.02899998 0.02794051 0.01341581 0.02899998 0.02837496 0.0136184 0.02899998 0.02876764 0.01389336 0.02899998 0.02910661 0.01423233 0.02899998 0.02938157 0.01462495 0.02899998 0.0295841 0.01505941 0.02899998 0.0297082 0.01552242 0.02899998 0.02974998 0.01599997 0.02899998 0.0297082 0.01647752 0.02899998 0.0295841 0.01694053 0.02899998 0.02938157 0.01737499 0.02899998 0.02910661 0.01776766 0.02899998 0.02876764 0.01810657 0.02899998 0.02837496 0.01838153 0.02899998 0.02794051 0.01858413 0.02899998 0.0274775 0.01870816 0.04061824 0.0328617 0.009848475 0.04061824 0.03335291 0.009579122 0.04003 0.03353071 0.009847521 0.03478842 0.03031808 0.008099973 0.03480595 0.0302664 0.008099973 0.03484344 0.03021663 0.008153557 0.03543269 0.02912616 0.008099973 0.03556782 0.02898234 0.008099973 0.03565514 0.02889806 0.008150577 0.04058545 0.0283913 0.008099973 0.04061675 0.02841722 0.008099973 0.04061824 0.02853059 0.008343815 0.04174077 0.03331077 0.008099973 0.04158961 0.033544 0.008099973 0.04159504 0.03344279 0.00826323 0.03557008 0.03402006 0.008099973 0.03565514 0.0341019 0.008150577 0.03565752 0.03412377 0.008099973 0.03502136 0.03323298 0.008099973 0.03520488 0.03344279 0.00826323 0.03520953 0.03354531 0.008099973 0.04061824 0.03066742 0.01003235 0.04003 0.0300076 0.01014268 0.03806471 0.02928632 0.01012355 0.03676992 0.03299236 0.01014268 0.03873527 0.03371363 0.01012355 0.04061824 0.03121984 0.01012557 0.04061824 0.03178006 0.01012557 0.04061824 0.03233247 0.01003235 0.04003 0.03299236 0.01014268 0.03939646 0.03365206 0.01003068 0.03806471 0.03371363 0.01012355 0.03740346 0.03365206 0.01003068 0.03676992 0.03353071 0.009847521 0.03618168 0.0328617 0.009848475 0.03618168 0.03233247 0.01003235 0.03618168 0.03178006 0.01012557 0.03618168 0.03121984 0.01012557 0.03618168 0.03066742 0.01003235 0.03676992 0.0300076 0.01014268 0.03618168 0.03013825 0.009848475 0.03676992 0.02946919 0.009847521 0.03740346 0.02934783 0.01003068 0.03873527 0.02928632 0.01012355 0.03939646 0.02934783 0.01003068 0.04003 0.02946919 0.009847521 0.04061824 0.03013825 0.009848475 0.034621 0.03189927 0.008099973 0.03484344 0.03196603 0.008601665 0.03463029 0.0319789 0.008099973 0.03484344 0.03226226 0.008498728 0.0346542 0.03209406 0.008099973 0.03482389 0.03275299 0.008099973 0.03475147 0.03256219 0.008099973 0.03484344 0.03253722 0.008347988 0.03471565 0.0323897 0.008099973 0.03500127 0.03319966 0.008099973 0.03520488 0.03316926 0.008565902 0.03496623 0.0331276 0.008099973 0.03484344 0.03278332 0.008153557 0.03484654 0.03281259 0.008099973 0.03530871 0.03371 0.008099973 0.03565514 0.03383791 0.008564472 0.03618168 0.03446936 0.008343815 0.03575551 0.03422886 0.008099973 0.03569853 0.03417247 0.008099973 0.03676998 0.03493243 0.008099973 0.03673541 0.03491598 0.008099973 0.03676992 0.03475427 0.008493661 0.03621453 0.03460866 0.008099973 0.03618317 0.03458273 0.008099973 0.03740346 0.03494876 0.008595943 0.03736668 0.03515678 0.008099973 0.03680783 0.03495037 0.008099973 0.03806471 0.03504735 0.008647739 0.03795999 0.03527444 0.008099973 0.03740394 0.03516417 0.008099973 0.03873527 0.03504735 0.008647739 0.03863537 0.03529268 0.008099973 0.03803968 0.03528285 0.008099973 0.03939485 0.03516137 0.008099973 0.03931218 0.03518885 0.008099973 0.03939646 0.03494876 0.008595943 0.03923416 0.03520727 0.008099973 0.03873443 0.03527855 0.008099973 0.03987753 0.03500097 0.008099973 0.04003 0.03475427 0.008493661 0.04002624 0.03492373 0.008099973 0.04061824 0.03446936 0.008343815 0.0404818 0.03467899 0.008099973 0.04041427 0.0347222 0.008099973 0.0412321 0.03401762 0.008099973 0.04113864 0.03411704 0.008099973 0.04114478 0.0341019 0.008150577 0.04095304 0.03431451 0.008099973 0.04061371 0.03457695 0.008099973 0.04114478 0.03383791 0.008564472 0.0414167 0.03381067 0.008099973 0.04136729 0.03387379 0.008099973 0.041772 0.03324031 0.008099973 0.04159504 0.03316926 0.008565902 0.04195481 0.03282767 0.008099973 0.04195654 0.03278332 0.008153557 0.04198575 0.03275781 0.008099973 0.04199397 0.03273355 0.008099973 0.04195654 0.0316568 0.008653879 0.04217237 0.03184604 0.008099973 0.04195654 0.03196603 0.008601665 0.04215186 0.03210288 0.008099973 0.04195654 0.03226226 0.008498728 0.04208165 0.03239244 0.008099973 0.04195654 0.03253722 0.008347988 0.04201149 0.03268188 0.008099973 0.04217892 0.03110069 0.008099973 0.04218208 0.03116047 0.008099973 0.04195654 0.03103393 0.008601665 0.04219412 0.03138858 0.008099973 0.04195654 0.03134316 0.008653879 0.04219996 0.03149998 0.008099973 0.04219102 0.03161215 0.008099973 0.04216969 0.03102105 0.008099973 0.04195654 0.03073769 0.008498728 0.04214572 0.0309059 0.008099973 0.04195654 0.03046268 0.008347988 0.04208433 0.03061026 0.008099973 0.04183375 0.02987235 0.008099973 0.04195338 0.03018736 0.008099973 0.04195654 0.03021663 0.008153557 0.04197603 0.03024697 0.008099973 0.04204851 0.03043776 0.008099973 0.04149121 0.02928996 0.008099973 0.04159045 0.02945464 0.008099973 0.04159504 0.02955716 0.00826323 0.04177856 0.02976697 0.008099973 0.04159504 0.02983069 0.008565902 0.04179865 0.02980029 0.008099973 0.04114478 0.02916198 0.008564472 0.04114478 0.02889806 0.008150577 0.04122984 0.02897983 0.008099973 0.04104447 0.0287711 0.008099973 0.04110139 0.02882748 0.008099973 0.04114246 0.02887618 0.008099973 0.04003 0.02824568 0.008493661 0.04002994 0.02806752 0.008099973 0.04006451 0.02808392 0.008099973 0.03939646 0.02805119 0.008595943 0.03943324 0.02784317 0.008099973 0.03999209 0.02804958 0.008099973 0.03873527 0.02795261 0.008647739 0.03883999 0.02772551 0.008099973 0.03939598 0.02783578 0.008099973 0.03806471 0.02795261 0.008647739 0.03816455 0.02770727 0.008099973 0.03876024 0.02771711 0.008099973 0.03740507 0.02783858 0.008099973 0.0374878 0.02781111 0.008099973 0.03740346 0.02805119 0.008595943 0.03756582 0.02779269 0.008099973 0.03806555 0.0277214 0.008099973 0.03692245 0.02799898 0.008099973 0.03676992 0.02824568 0.008493661 0.03677368 0.02807623 0.008099973 0.03618168 0.02853059 0.008343815 0.03631818 0.02832096 0.008099973 0.03638571 0.02827775 0.008099973 0.03566128 0.02888286 0.008099973 0.03584688 0.02868545 0.008099973 0.03618627 0.02842295 0.008099973 0.03502792 0.02975964 0.008099973 0.03505915 0.02968919 0.008099973 0.03520488 0.02955716 0.00826323 0.03521037 0.02945595 0.008099973 0.03565514 0.02916198 0.008564472 0.03538328 0.02918928 0.008099973 0.03520488 0.02983069 0.008565902 0.03484511 0.03017228 0.008099973 0.03481417 0.03024214 0.008099973 0.03484344 0.03046268 0.008347988 0.03471827 0.03060752 0.008099973 0.03484344 0.03134316 0.008653879 0.03462761 0.03115391 0.008099973 0.03484344 0.03103393 0.008601665 0.03464812 0.03089708 0.008099973 0.03484344 0.03073769 0.008498728 0.03461784 0.03183948 0.008099973 0.03460586 0.03161138 0.008099973 0.03484344 0.0316568 0.008653879 0.03459995 0.03149998 0.008099973 0.0346089 0.0313878 0.008099973 0.03520488 0.0324915 0.009014904 0.03520488 0.03210616 0.009148776 0.03520488 0.03170394 0.009216666 0.03520488 0.03129601 0.009216666 0.03520488 0.0308938 0.009148776 0.03520488 0.03050845 0.009014904 0.03565514 0.0326932 0.009469032 0.03565514 0.03222948 0.009630143 0.03565514 0.03174543 0.009711802 0.03565514 0.03125452 0.009711802 0.03565514 0.03077048 0.009630143 0.03565514 0.03030675 0.009469032 0.03520488 0.03015077 0.008818805 0.03565514 0.02987635 0.009233057 0.03618168 0.02964699 0.009579122 0.03520488 0.03284919 0.008818805 0.03565514 0.03312361 0.009233057 0.03618168 0.03335291 0.009579122 0.03618168 0.02883183 0.008816182 0.03676992 0.02857577 0.009011328 0.03740346 0.02840107 0.009144544 0.03806471 0.02831244 0.009212076 0.03873527 0.02831244 0.009212076 0.03939646 0.02840107 0.009144544 0.04003 0.02857577 0.009011328 0.03565514 0.02949118 0.008928656 0.03618168 0.02920746 0.009231805 0.03676992 0.02898746 0.009466826 0.03740346 0.02883732 0.009627282 0.03806471 0.0287612 0.009708583 0.03873527 0.0287612 0.009708583 0.03939646 0.02883732 0.009627282 0.04003 0.02898746 0.009466826 0.04061824 0.02964699 0.009579122 0.04061824 0.02920746 0.009231805 0.04061824 0.02883183 0.008816182 0.04114478 0.03312361 0.009233057 0.04114478 0.0326932 0.009469032 0.04114478 0.03222948 0.009630143 0.04114478 0.03174543 0.009711802 0.04114478 0.03125452 0.009711802 0.04114478 0.03077048 0.009630143 0.04114478 0.03030675 0.009469032 0.04114478 0.02987635 0.009233057 0.04114478 0.02949118 0.008928656 0.03618168 0.03416812 0.008816182 0.03676992 0.03442412 0.009011328 0.03740346 0.03459888 0.009144544 0.03806471 0.03468751 0.009212076 0.03873527 0.03468751 0.009212076 0.03939646 0.03459888 0.009144544 0.04003 0.03442412 0.009011328 0.04061824 0.03416812 0.008816182 0.04159504 0.03284919 0.008818805 0.04159504 0.0324915 0.009014904 0.04159504 0.03210616 0.009148776 0.04159504 0.03170394 0.009216666 0.04159504 0.03129601 0.009216666 0.04159504 0.0308938 0.009148776 0.04159504 0.03050845 0.009014904 0.04159504 0.03015077 0.008818805 0.03565514 0.03350877 0.008928656 0.03618168 0.03379249 0.009231805 0.03676992 0.03401249 0.009466826 0.03740346 0.03416264 0.009627282 0.03806471 0.03423875 0.009708583 0.03873527 0.03423875 0.009708583 0.03939646 0.03416264 0.009627282 0.04003 0.03401249 0.009466826 0.04061824 0.03379249 0.009231805 0.04114478 0.03350877 0.008928656 0.05691671 0.01866775 0.01099997 0.05659908 0.01844531 0.01099997 0.05567461 0.0175209 0.01099997 0.05492478 0.01644998 0.01099997 0.05437231 0.0152651 0.01099997 0.05403393 0.01400232 0.01099997 0.05391997 0.01269996 0.01099997 0.05394089 0.0124607 0.01099997 0.05403393 0.0113976 0.01099997 0.05437231 0.01013481 0.01099997 0.05492478 0.008949995 0.01099997 0.05567461 0.007879078 0.01099997 0.05569106 0.007862627 0.01099997 0.05659908 0.00695461 0.01099997 0.05766999 0.006204783 0.01099997 0.05885481 0.005652248 0.01099997 0.0601176 0.005313932 0.01099997 0.06141996 0.005199968 0.01099997 0.06272232 0.005313932 0.01099997 0.0639851 0.005652248 0.01099997 0.06516999 0.006204783 0.01099997 0.0662409 0.00695461 0.01099997 0.06714886 0.007862627 0.01099997 0.06716531 0.007879078 0.01099997 0.0679152 0.008949995 0.01099997 0.06846767 0.01013481 0.01099997 0.06880605 0.0113976 0.01099997 0.06889903 0.0124607 0.01099997 0.06891995 0.01269996 0.01099997 0.06880605 0.01400232 0.01099997 0.06846767 0.0152651 0.01099997 0.0679152 0.01644998 0.01099997 0.06716531 0.0175209 0.01099997 0.0662409 0.01844531 0.01099997 0.06592321 0.01866775 0.01099997 0.06516999 0.01919513 0.01099997 0.06419223 0.01965111 0.01099997 0.0639851 0.01974767 0.01099997 0.06272232 0.02008605 0.01099997 0.06141996 0.02019995 0.01099997 0.0601176 0.02008605 0.01099997 0.05885481 0.01974767 0.01099997 0.05864769 0.01965111 0.01099997 0.05766999 0.01919513 0.01099997 0.04692655 0.01929217 0.01099997 0.04693692 0.01940065 0.01099997 0.0469321 0.01948231 0.01099997 0.04691773 0.01954829 0.01099997 0.04689598 0.0196042 0.01099997 0.04686826 0.01965111 0.01099997 0.04686492 0.01965671 0.01099997 0.04682552 0.01970356 0.01099997 0.04677635 0.01974594 0.01099997 0.04671353 0.01978546 0.01099997 0.04667079 0.01980435 0.01099997 0.04663014 0.01982241 0.01099997 0.04652863 0.01985239 0.01099997 0.04661339 0.0172435 0.01099997 0.04648911 0.01646381 0.01099997 0.04667079 0.01761919 0.01099997 0.04683107 0.01866775 0.01099997 0.04617935 0.01574826 0.01099997 0.04611223 0.01569956 0.01099997 0.04603326 0.01566022 0.01099997 0.04594814 0.01563411 0.01099997 0.04623091 0.01579964 0.01099997 0.04623943 0.01580816 0.01099997 0.04629558 0.0158835 0.01099997 0.04635995 0.01600438 0.01099997 0.04643118 0.01621037 0.01099997 0.04465079 0.01533502 0.01099997 0.04469108 0.01534444 0.01099997 0.04540646 0.01550924 0.01099997 0.04411137 0.01562219 0.01099997 0.04413306 0.01553833 0.01099997 0.04415863 0.01547908 0.01099997 0.04418683 0.01543432 0.01099997 0.0442177 0.01539909 0.01099997 0.04425531 0.01536828 0.01099997 0.04429692 0.01534461 0.01099997 0.04434382 0.01532709 0.01099997 0.04439979 0.01531541 0.01099997 0.04446971 0.01531106 0.01099997 0.04458516 0.01532167 0.01099997 0.04342496 0.01960325 0.01099997 0.04352861 0.01899826 0.01099997 0.04358536 0.01866775 0.01099997 0.04396843 0.0164355 0.01099997 0.04342114 0.01974278 0.01099997 0.04344111 0.01990616 0.01099997 0.04347628 0.02002924 0.01099997 0.0435183 0.02011859 0.01099997 0.04355818 0.02017766 0.01099997 0.04360228 0.02022582 0.01099997 0.04365199 0.02026557 0.01099997 0.04370933 0.02029788 0.01099997 0.04377222 0.02032089 0.01099997 0.04384726 0.02033555 0.01099997 0.04394125 0.02033901 0.01099997 0.04406702 0.02032405 0.01099997 0.04342252 0.01965111 0.01099997 0.04342299 0.01961845 0.01099997 0.04638481 0.01987981 0.01099997 0.04623091 0.01990932 0.01099997 0.04505914 0.02013391 0.01099997 0.04980641 0.01377391 0.01099997 0.04987293 0.01379519 0.01099997 0.04993069 0.01382321 0.01099997 0.04997992 0.013857 0.01099997 0.05002111 0.01389586 0.01099997 0.05005776 0.01394391 0.01099997 0.05008816 0.01400196 0.01099997 0.05011016 0.01406931 0.01099997 0.05012315 0.01415109 0.01099997 0.05012392 0.01425522 0.01099997 0.05011248 0.01435446 0.01099997 0.04886794 0.01354593 0.01099997 0.0474016 0.01318967 0.01099997 0.04664152 0.01389491 0.01099997 0.04665344 0.01375395 0.01099997 0.04667079 0.01367765 0.01099997 0.04668885 0.01359856 0.01099997 0.04673558 0.01347798 0.01099997 0.04678899 0.01338499 0.01099997 0.04684317 0.01331758 0.01099997 0.04689997 0.01326578 0.01099997 0.04696041 0.01322603 0.01099997 0.04702007 0.01319849 0.01099997 0.04709804 0.01317626 0.01099997 0.04718631 0.01316601 0.01099997 0.0472908 0.01317006 0.01099997 0.04724156 0.01785975 0.01099997 0.04723322 0.0178101 0.01099997 0.04691791 0.01572364 0.01099997 0.04667079 0.01408869 0.01099997 0.04776787 0.01820904 0.01099997 0.04765975 0.01822966 0.01099997 0.04758256 0.01823252 0.01099997 0.0475226 0.01822543 0.01099997 0.04747343 0.01821166 0.01099997 0.04743123 0.01819229 0.01099997 0.04739475 0.01816809 0.01099997 0.04735893 0.01813519 0.01099997 0.04732638 0.01809412 0.01099997 0.0472961 0.01804143 0.01099997 0.0472635 0.01795613 0.01099997 0.04907727 0.0179668 0.01099997 0.04905605 0.01797145 0.01099997 0.04853308 0.01806789 0.01099997 0.04957473 0.01738506 0.01099997 0.04953873 0.01753801 0.01099997 0.04950278 0.01764082 0.01099997 0.04946017 0.01772218 0.01099997 0.04941374 0.01778441 0.01099997 0.04935908 0.0178377 0.01099997 0.04928737 0.01788783 0.01099997 0.04919964 0.01792997 0.01099997 0.05008774 0.01449525 0.01099997 0.04972213 0.01655453 0.01099997 0.05343931 0.01806354 0.01099997 0.05344933 0.01817202 0.01099997 0.05344426 0.01825368 0.01099997 0.05342966 0.0183196 0.01099997 0.05340766 0.01837545 0.01099997 0.05337649 0.01842778 0.01099997 0.05333685 0.01847451 0.01099997 0.05328756 0.01851683 0.01099997 0.05322456 0.01855611 0.01099997 0.05314105 0.01859283 0.01099997 0.05303966 0.01862245 0.01099997 0.05289101 0.01506882 0.01099997 0.05304586 0.0158894 0.01099997 0.05246633 0.01447165 0.01099997 0.05253422 0.01449495 0.01099997 0.05259728 0.01452869 0.01099997 0.05265319 0.01457118 0.01099997 0.05270475 0.01462429 0.01099997 0.05276191 0.01470524 0.01099997 0.05281847 0.01482117 0.01099997 0.05288237 0.015033 0.01099997 0.05117452 0.01415222 0.01099997 0.05121409 0.01416182 0.01099997 0.05192923 0.01433879 0.01099997 0.05208086 0.01437628 0.01099997 0.05063432 0.01443767 0.01099997 0.05065888 0.01434445 0.01099997 0.05068641 0.01428115 0.01099997 0.05071574 0.01423484 0.01099997 0.05074673 0.01419961 0.01099997 0.05078011 0.01417195 0.01099997 0.05081903 0.01414912 0.01099997 0.05086237 0.01413244 0.01099997 0.0509122 0.01412165 0.01099997 0.0509724 0.01411777 0.01099997 0.05106574 0.01412624 0.01099997 0.04993659 0.01836466 0.01099997 0.04999792 0.01801031 0.01099997 0.05042952 0.01557016 0.01099997 0.05057686 0.01908725 0.01099997 0.05045211 0.01910173 0.01099997 0.05035871 0.0190981 0.01099997 0.0502842 0.01908326 0.01099997 0.05022168 0.01906019 0.01099997 0.05016463 0.01902788 0.01099997 0.05011522 0.01898813 0.01099997 0.05007129 0.01893991 0.01099997 0.0500316 0.01888072 0.01099997 0.04998958 0.0187909 0.01099997 0.04995465 0.01866775 0.01099997 0.04995429 0.01866644 0.01099997 0.04993414 0.01849925 0.01099997 0.04993593 0.01837074 0.01099997 0.0528959 0.01864945 0.01099997 0.05279916 0.01866775 0.01099997 0.05208086 0.01880335 0.01099997 0.0515694 0.01889985 0.01099997 0.04792845 -0.01965004 0.01099997 0.04811429 -0.01977646 0.01099997 0.04845488 -0.01993876 0.01099997 0.04887837 -0.02006173 0.01099997 0.0492807 -0.02011156 0.01099997 0.04939556 -0.02011418 0.01099997 0.04712331 -0.01880401 0.01099997 0.04730981 -0.01908707 0.01099997 0.04758191 -0.01938283 0.01099997 0.04787278 -0.01961398 0.01099997 0.04710268 -0.01880401 0.01099997 0.04680252 -0.01947957 0.01099997 0.04690545 -0.01923012 0.01099997 0.04695522 -0.01912254 0.01099997 0.04667079 -0.01982164 0.01099997 0.04659092 -0.02006638 0.01099997 0.04669296 -0.01976335 0.01099997 0.04667288 -0.01981538 0.01099997 0.04653638 -0.02030527 0.01099997 0.04655331 -0.0201987 0.01099997 0.04650908 -0.02033948 0.01099997 0.04623091 -0.02007853 0.01099997 0.04617136 -0.02002269 0.01099997 0.04584711 -0.01971846 0.01099997 0.04584711 -0.01964336 0.01099997 0.04583889 -0.0196678 0.01099997 0.04583704 -0.01967906 0.01099997 0.04583704 -0.01968771 0.01099997 0.04583853 -0.01969665 0.01099997 0.04584276 -0.01970911 0.01099997 0.0462498 -0.01876306 0.01099997 0.04623091 -0.01880013 0.01099997 0.04622781 -0.01880621 0.01099997 0.04603815 -0.01922327 0.01099997 0.04669344 -0.01796466 0.01099997 0.04667079 -0.01800537 0.01099997 0.04648643 -0.01833719 0.01099997 0.04665267 -0.01776891 0.01099997 0.0466386 -0.01767134 0.01099997 0.04667079 -0.01785606 0.01099997 0.04666548 -0.01783037 0.01099997 0.04661828 -0.01732343 0.01099997 0.04662412 -0.01749718 0.01099997 0.04662203 -0.01747196 0.01099997 0.04934102 -0.01453906 0.01099997 0.04888534 -0.01457655 0.01099997 0.04845345 -0.0146858 0.01099997 0.04805135 -0.01486182 0.01099997 0.04768323 -0.01510137 0.01099997 0.04735463 -0.01540231 0.01099997 0.04707783 -0.01575613 0.01099997 0.04685974 -0.0161572 0.01099997 0.04670798 -0.01659768 0.01099997 0.04667079 -0.01681995 0.01099997 0.04662877 -0.01707112 0.01099997 0.05208086 -0.01711511 0.01099997 0.05210465 -0.01740509 0.01099997 0.05206078 -0.01687127 0.01099997 0.05193418 -0.01637595 0.01099997 0.05173736 -0.01593512 0.01099997 0.05147999 -0.01554971 0.01099997 0.05117499 -0.01522624 0.01099997 0.05082094 -0.01495814 0.01099997 0.05042791 -0.01475328 0.01099997 0.05000078 -0.01461464 0.01099997 0.04954177 -0.01454579 0.01099997 0.04940241 -0.02011418 0.01099997 0.04989421 -0.02007377 0.01099997 0.05035048 -0.01995706 0.01099997 0.05075681 -0.01977556 0.01099997 0.05111467 -0.01953697 0.01099997 0.05142211 -0.01924806 0.01099997 0.05167925 -0.0189104 0.01099997 0.05188077 -0.01852875 0.01099997 0.05202162 -0.01810592 0.01099997 0.05208086 -0.01773482 0.01099997 0.05209541 -0.01764357 0.01099997 0.04675477 -0.01384961 0.01099997 0.04676795 -0.01383638 0.01099997 0.04678571 -0.01382374 0.01099997 0.04680788 -0.01381278 0.01099997 0.04685395 -0.01379829 0.01099997 0.04693555 -0.01378411 0.01099997 0.04787677 -0.01375561 0.01099997 0.04906803 -0.01375412 0.01099997 0.04671382 -0.01384961 0.01099997 0.04671382 -0.01263493 0.01099997 0.04676145 -0.01263493 0.01099997 0.04906117 -0.01273053 0.01099997 0.04707056 -0.01271241 0.01099997 0.04687422 -0.01269018 0.01099997 0.04682594 -0.01267719 0.01099997 0.04679965 -0.01266592 0.01099997 0.04678231 -0.01265513 0.01099997 0.04676938 -0.01264393 0.01099997 0.04981857 -0.01273053 0.01099997 0.05198878 -0.01264178 0.01099997 0.05197918 -0.01265239 0.01099997 0.05196624 -0.01266264 0.01099997 0.05194979 -0.012672 0.01099997 0.05191767 -0.0126841 0.01099997 0.05184412 -0.01269942 0.01099997 0.05129778 -0.01272588 0.01099997 0.0520364 -0.01264178 0.01099997 0.0520364 -0.0138427 0.01099997 0.05198878 -0.0138427 0.01099997 0.04981857 -0.01375412 0.01099997 0.05171853 -0.01377242 0.01099997 0.05188298 -0.01379173 0.01099997 0.05192905 -0.01380389 0.01099997 0.05195349 -0.01381421 0.01099997 0.0519694 -0.01382398 0.01099997 0.05198097 -0.01383388 0.01099997 0.0510742 -0.008096933 0.01099997 0.0510959 -0.008120417 0.01099997 0.05111503 -0.008148849 0.01099997 0.05113774 -0.008197188 0.01099997 0.05116081 -0.008278369 0.01099997 0.05118036 -0.008440196 0.01099997 0.05118346 -0.008560657 0.01099997 0.0510742 -0.008042275 0.01099997 0.0520364 -0.008042275 0.01099997 0.0520364 -0.0120477 0.01099997 0.0510742 -0.0120477 0.01099997 0.0510742 -0.01200014 0.01099997 0.05118346 -0.01153606 0.01099997 0.05116999 -0.01175856 0.01099997 0.05114805 -0.0118612 0.01099997 0.05112487 -0.01192295 0.01099997 0.05110013 -0.01196712 0.01099997 0.05118346 -0.01055341 0.01099997 0.04906803 -0.01055341 0.01099997 0.04675477 -0.01065587 0.01099997 0.04675573 -0.01064884 0.01099997 0.04675763 -0.0106427 0.01099997 0.04676073 -0.0106365 0.01099997 0.04676491 -0.01063078 0.01099997 0.04677057 -0.01062512 0.01099997 0.04677861 -0.0106191 0.01099997 0.04679441 -0.01061069 0.01099997 0.04682701 -0.01059961 0.01099997 0.04688113 -0.01058852 0.01099997 0.0473597 -0.01056063 0.01099997 0.04671382 -0.01065587 0.01099997 0.04671382 -0.009441196 0.01099997 0.04675477 -0.009441196 0.01099997 0.04906803 -0.009536683 0.01099997 0.04706013 -0.009518682 0.01099997 0.04685997 -0.00949639 0.01099997 0.04681611 -0.009484708 0.01099997 0.04679238 -0.009474873 0.01099997 0.04677742 -0.009465873 0.01099997 0.04676717 -0.00945729 0.01099997 0.04675948 -0.009448468 0.01099997 0.05118346 -0.009536683 0.01099997 0.04662513 -0.005004882 0.01099997 0.04666662 -0.005509793 0.01099997 0.04667079 -0.005526185 0.01099997 0.04678618 -0.005977928 0.01099997 0.04697245 -0.006396353 0.01099997 0.0472182 -0.006766676 0.01099997 0.04751813 -0.007087647 0.01099997 0.04786783 -0.00735563 0.01099997 0.04826235 -0.007565438 0.01099997 0.04869645 -0.007711172 0.01099997 0.04916554 -0.007786691 0.01099997 0.04940241 -0.007795929 0.01099997 0.04935461 -0.002234518 0.01099997 0.0488941 -0.002272427 0.01099997 0.04845881 -0.002382576 0.01099997 0.04805493 -0.002559542 0.01099997 0.04768615 -0.00279963 0.01099997 0.04735743 -0.003100872 0.01099997 0.04708105 -0.003454387 0.01099997 0.04686379 -0.003854215 0.01099997 0.04671317 -0.00429207 0.01099997 0.04667079 -0.004546582 0.01099997 0.04663521 -0.004760503 0.01099997 0.05208086 -0.004783332 0.01099997 0.05210465 -0.005073308 0.01099997 0.05206131 -0.004545569 0.01099997 0.05193608 -0.004055857 0.01099997 0.05174154 -0.003620386 0.01099997 0.05148714 -0.003239452 0.01099997 0.05118507 -0.002919018 0.01099997 0.050834 -0.002653121 0.01099997 0.05044347 -0.002449333 0.01099997 0.05001789 -0.002310752 0.01099997 0.04955941 -0.002241551 0.01099997 0.04940932 -0.007795929 0.01099997 0.04989945 -0.007755637 0.01099997 0.05035442 -0.007639169 0.01099997 0.05075907 -0.00745815 0.01099997 0.05111515 -0.007220447 0.01099997 0.05142086 -0.006932556 0.01099997 0.05167704 -0.006595671 0.01099997 0.05187839 -0.006213784 0.01099997 0.05201995 -0.005788683 0.01099997 0.05208086 -0.005408763 0.01099997 0.05209493 -0.005320787 0.01099997 0.0470072 -9.78485e-4 0.01099997 0.04713249 -0.001158595 0.01099997 0.04729813 -0.001330018 0.01099997 0.04749184 -0.001472413 0.01099997 0.04750829 -0.001482307 0.01099997 0.04771733 -0.001583337 0.01099997 0.04794305 -0.001648247 0.01099997 0.04816168 -0.001673519 0.01099997 0.04821503 -0.001674473 0.01099997 0.04670011 5.70624e-4 0.01099997 0.04674762 -2.01682e-4 0.01099997 0.04682767 -5.69367e-4 0.01099997 0.04693257 -8.40451e-4 0.01099997 0.0467137 0.001143634 0.01099997 0.04670673 9.30558e-4 0.01099997 0.0467053 8.51988e-4 0.01099997 0.04673421 0.001580595 0.01099997 0.04672658 0.001422047 0.01099997 0.04672241 0.001331388 0.01099997 0.04677528 0.001580595 0.01099997 0.04906815 0.001491844 0.01099997 0.04703271 0.00151056 0.01099997 0.04686969 0.001528859 0.01099997 0.04686176 0.001530468 0.01099997 0.04682499 0.001540422 0.01099997 0.04680472 0.001549065 0.01099997 0.0467934 0.001556098 0.01099997 0.04678642 0.001562118 0.01099997 0.04678153 0.0015679 0.01099997 0.04677772 0.001574337 0.01099997 0.04981875 0.001491844 0.01099997 0.05197513 0.001573681 0.01099997 0.05196851 0.001565337 0.01099997 0.05195957 0.001557171 0.01099997 0.05194807 0.001549541 0.01099997 0.05192679 0.001539945 0.01099997 0.05188143 0.001527607 0.01099997 0.0518549 0.001522839 0.01099997 0.05139583 0.001497685 0.01099997 0.05201607 0.001573681 0.01099997 0.05203652 0.001116454 0.01099997 0.05203193 0.001294136 0.01099997 0.05202829 0.001357853 0.01099997 0.05205017 3.93249e-4 0.01099997 0.05204957 6.55009e-4 0.01099997 0.05204629 7.7011e-4 0.01099997 0.05192732 -5.21241e-4 0.01099997 0.05200564 -1.8249e-4 0.01099997 0.05204886 2.9628e-4 0.01099997 0.0506376 -0.001456201 0.01099997 0.05087304 -0.001439929 0.01099997 0.05108612 -0.001392543 0.01099997 0.05128049 -0.001314342 0.01099997 0.05144268 -0.001215338 0.01099997 0.05159193 -0.001086831 0.01099997 0.05171334 -9.44244e-4 0.01099997 0.05181866 -7.77229e-4 0.01099997 0.05191695 -5.52346e-4 0.01099997 0.04950475 -6.16866e-4 0.01099997 0.0495674 -7.93333e-4 0.01099997 0.04965335 -9.47344e-4 0.01099997 0.04976415 -0.001086711 0.01099997 0.04989922 -0.001209318 0.01099997 0.04997479 -0.001262903 0.01099997 0.05014359 -0.001353919 0.01099997 0.05033075 -0.001418113 0.01099997 0.05053228 -0.00145179 0.01099997 0.04949116 -6.16866e-4 0.01099997 0.04822188 -0.001674473 0.01099997 0.0484364 -0.001658082 0.01099997 0.04864734 -0.001606702 0.01099997 0.04883503 -0.001525998 0.01099997 0.04900312 -0.001418232 0.01099997 0.04914963 -0.0012874 0.01099997 0.04927963 -0.001127839 0.01099997 0.04938548 -9.44287e-4 0.01099997 0.04946202 -7.41433e-4 0.01099997 0.04662513 0.005075037 0.01099997 0.04666662 0.004570007 0.01099997 0.04667079 0.004553675 0.01099997 0.04678624 0.004101753 0.01099997 0.04697251 0.003683388 0.01099997 0.0472182 0.003313064 0.01099997 0.04751813 0.002992212 0.01099997 0.04786783 0.002724289 0.01099997 0.04826223 0.002514481 0.01099997 0.04869633 0.002368748 0.01099997 0.04916548 0.002293288 0.01099997 0.04940241 0.002284049 0.01099997 0.04935461 0.007845401 0.01099997 0.04889416 0.007807493 0.01099997 0.04845887 0.007697343 0.01099997 0.04805499 0.007520377 0.01099997 0.04768621 0.00728029 0.01099997 0.04735749 0.006979048 0.01099997 0.04708111 0.006625533 0.01099997 0.04686379 0.006225705 0.01099997 0.04671317 0.005787849 0.01099997 0.04667079 0.005533277 0.01099997 0.04663521 0.005319416 0.01099997 0.05208086 0.005296587 0.01099997 0.05210465 0.005006611 0.01099997 0.05206131 0.00553435 0.01099997 0.05193608 0.006023943 0.01099997 0.0517416 0.006459474 0.01099997 0.0514872 0.006840348 0.01099997 0.05118507 0.007160842 0.01099997 0.050834 0.007426738 0.01099997 0.05044347 0.007630586 0.01099997 0.05001783 0.007769107 0.01099997 0.04955941 0.007838368 0.01099997 0.04940932 0.002284049 0.01099997 0.04989951 0.002324283 0.01099997 0.05035454 0.00244081 0.01099997 0.05075919 0.002621769 0.01099997 0.05111521 0.002859532 0.01099997 0.05142098 0.003147363 0.01099997 0.0516771 0.003484249 0.01099997 0.05187845 0.003866136 0.01099997 0.05201995 0.004291236 0.01099997 0.05208086 0.004671096 0.01099997 0.05209493 0.004759132 0.01099997 0.05198186 0.01175582 0.01099997 0.05197948 0.0117501 0.01099997 0.05197578 0.01174432 0.01099997 0.05197101 0.01173895 0.01099997 0.05196446 0.01173359 0.01099997 0.05195289 0.01172667 0.01099997 0.05193048 0.01171785 0.01099997 0.05187439 0.01170533 0.01099997 0.05149573 0.01168167 0.01099997 0.04981875 0.01167392 0.01099997 0.05202275 0.01175582 0.01099997 0.05204325 0.0112577 0.01099997 0.05203533 0.01147615 0.01099997 0.0520327 0.01153492 0.01099997 0.05205702 0.01061618 0.01099997 0.05205005 0.01094204 0.01099997 0.05192732 0.009592592 0.01099997 0.05201578 0.009980916 0.01099997 0.05205619 0.01051288 0.01099997 0.05048739 0.008589446 0.01099997 0.05080145 0.008614718 0.01099997 0.05103957 0.008673906 0.01099997 0.05125671 0.008767545 0.01099997 0.05143719 0.008884131 0.01099997 0.05159944 0.009031116 0.01099997 0.05173122 0.009194493 0.01099997 0.05184203 0.009382843 0.01099997 0.04926598 0.009162724 0.01099997 0.04939037 0.00901848 0.01099997 0.04956513 0.008871912 0.01099997 0.04976379 0.008753299 0.01099997 0.04998588 0.008664131 0.01099997 0.05025839 0.008604228 0.01099997 0.04902708 0.009558498 0.01099997 0.04908382 0.009434401 0.01099997 0.04921472 0.009230256 0.01099997 0.04901349 0.009558498 0.01099997 0.0472939 0.008323371 0.01099997 0.04736369 0.008373737 0.01099997 0.04863595 0.009287416 0.01099997 0.04675471 0.007879853 0.01099997 0.04676711 0.00789684 0.01099997 0.04683679 0.007965981 0.01099997 0.04714006 0.008209466 0.01099997 0.04671376 0.007879853 0.01099997 0.04671376 0.008903443 0.01099997 0.04674112 0.009121775 0.01099997 0.04672241 0.009031414 0.01099997 0.04671394 0.008921146 0.01099997 0.0488224 0.01052069 0.01099997 0.04863405 0.01039266 0.01099997 0.04770606 0.009769618 0.01099997 0.0488224 0.01070493 0.01099997 0.04854935 0.01070493 0.01099997 0.04675471 0.01062303 0.01099997 0.04675906 0.01062959 0.01099997 0.04676467 0.01063561 0.01099997 0.0467723 0.01064163 0.01099997 0.04678642 0.01064962 0.01099997 0.04681408 0.01065981 0.01099997 0.04688292 0.01067388 0.01099997 0.04742521 0.01070016 0.01099997 0.04671376 0.01062303 0.01099997 0.04671376 0.01175582 0.01099997 0.04675471 0.01175582 0.01099997 0.04906803 0.01167392 0.01099997 0.04694068 0.01169729 0.01099997 0.0468387 0.01171153 0.01099997 0.04679811 0.01172292 0.01099997 0.04678136 0.01173043 0.01099997 0.04677063 0.01173722 0.01099997 0.04676353 0.01174348 0.01099997 0.04675841 0.01174968 0.01099997 0.08403974 -0.01429229 0.01097178 0.08371138 -0.01544594 0.01097178 0.08472692 -0.01580768 0.01077491 0.08360636 -0.01321196 0.01099997 0.08345293 -0.01416587 0.01099997 0.08275645 -0.01617169 0.01099997 0.08269888 -0.0162726 0.01099997 0.08323645 -0.01654738 0.01097178 0.08224004 -0.01707655 0.01099997 0.08212256 -0.01723396 0.01099997 0.082623 -0.01757812 0.01097178 0.08160096 -0.01793301 0.01099997 0.08142828 -0.01811361 0.01099997 0.08188128 -0.01852071 0.01097178 0.08614075 -0.02234482 0.005247533 0.0873416 -0.02081871 0.005247533 0.08509355 -0.01451951 0.01077491 0.08529037 -0.01319479 0.01077491 0.08361417 -0.01305621 0.01099997 0.08421605 -0.01310586 0.01097178 0.08364999 -0.01234287 0.01099997 0.08424758 -0.01234287 0.01097178 0.08523648 -0.01234287 0.01079118 0.08444768 -0.01234287 0.01093524 0.08532559 -0.01234287 0.01077491 0.08569538 -0.01615267 0.01039564 0.08658802 -0.01647061 0.009845197 0.08737826 -0.01675212 0.009140074 0.08804249 -0.01698869 0.008301258 0.08856099 -0.0171734 0.007353663 0.08891826 -0.01730066 0.006325542 0.08910375 -0.0173667 0.005247533 0.08833485 -0.01914995 0.005247533 0.08475244 -0.02370268 0.005247533 0.08378195 -0.02446854 0.005247533 0.08372831 -0.02439445 0.005748391 0.08462423 -0.02355331 0.006325542 0.0836665 -0.02430909 0.006325542 0.08356088 -0.0241633 0.006813645 0.08437711 -0.02326548 0.007353663 0.08344399 -0.02400189 0.007353663 0.08328747 -0.02378576 0.007813096 0.08401858 -0.02284789 0.008301258 0.08312118 -0.02355617 0.008301258 0.08291643 -0.02327352 0.008716464 0.08355933 -0.02231287 0.009140074 0.08270752 -0.0229851 0.009140074 0.08245903 -0.02264195 0.009496212 0.08301287 -0.02167642 0.009845197 0.08221548 -0.02230566 0.009845197 0.08192914 -0.0219103 0.01012879 0.08239567 -0.02095741 0.01039564 0.08165967 -0.02153825 0.01039564 0.08134293 -0.02110087 0.01059484 0.08172595 -0.02017736 0.01077491 0.08105665 -0.02070558 0.01077491 0.08102375 -0.0193594 0.01097178 0.0804243 -0.01983249 0.01097178 0.0807181 -0.02023816 0.01088035 0.08007377 -0.0193485 0.01099997 0.08062595 -0.01889562 0.01099997 0.08087956 -0.0186876 0.01099997 0.08344835 -0.0141943 0.01099997 0.08344513 -0.01421427 0.01099997 0.08316034 -0.01521253 0.01099997 0.08314675 -0.01524472 0.01099997 0.0881595 -0.01906043 0.006325542 0.08782166 -0.01888799 0.007353663 0.08733147 -0.01863777 0.008301258 0.08670341 -0.01831716 0.009140074 0.08595627 -0.01793581 0.009845197 0.08511233 -0.01750493 0.01039564 0.08419662 -0.01703751 0.01077491 0.0871793 -0.02070724 0.006325542 0.08686667 -0.02049249 0.007353663 0.08641296 -0.02018094 0.008301258 0.0858317 -0.0197817 0.009140074 0.08514022 -0.01930683 0.009845197 0.0843591 -0.01877039 0.01039564 0.08351159 -0.01818835 0.01077491 0.08599424 -0.02221328 0.006325542 0.08571201 -0.0219599 0.007353663 0.08530247 -0.02159219 0.008301258 0.08477777 -0.02112114 0.009140074 0.08415353 -0.02056074 0.009845197 0.08344846 -0.01992774 0.01039564 0.08268344 -0.01924091 0.01077491 0.08424758 0.01234287 0.01097178 0.08364999 0.01234287 0.01099997 0.08364999 0.007862627 0.01099997 0.08364999 0.001932322 0.01099997 0.08364999 -0.001954495 0.01099997 0.08364999 -0.007919073 0.01099997 0.08364999 -0.01234132 0.01099997 0.08444768 0.01234287 0.01093524 0.08532559 0.01234287 0.01077491 0.08523648 0.01234287 0.01079118 0.05437231 -0.01013481 0.01099997 0.05403393 -0.0113976 0.01099997 0.05395138 -0.01234132 0.01099997 0.05391997 -0.01269996 0.01099997 0.05403393 -0.01400232 0.01099997 0.05408537 -0.0141943 0.01099997 0.05437231 -0.0152651 0.01099997 0.05492478 -0.01644998 0.01099997 0.05567461 -0.0175209 0.01099997 0.05659908 -0.01844531 0.01099997 0.05766999 -0.01919513 0.01099997 0.05885481 -0.01974767 0.01099997 0.0601176 -0.02008605 0.01099997 0.06141996 -0.02019995 0.01099997 0.06272232 -0.02008605 0.01099997 0.0639851 -0.01974767 0.01099997 0.06516999 -0.01919513 0.01099997 0.0662409 -0.01844531 0.01099997 0.06716531 -0.0175209 0.01099997 0.0679152 -0.01644998 0.01099997 0.06846767 -0.0152651 0.01099997 0.06875461 -0.0141943 0.01099997 0.06880605 -0.01400232 0.01099997 0.06891995 -0.01269996 0.01099997 0.0688886 -0.01234132 0.01099997 0.06880605 -0.0113976 0.01099997 0.06846767 -0.01013481 0.01099997 0.0679152 -0.008949995 0.01099997 0.06719332 -0.007919073 0.01099997 0.06716531 -0.007879078 0.01099997 0.0662409 -0.00695461 0.01099997 0.06516999 -0.006204783 0.01099997 0.0639851 -0.005652248 0.01099997 0.06272232 -0.005313932 0.01099997 0.06141996 -0.005199968 0.01099997 0.0601176 -0.005313932 0.01099997 0.05885481 -0.005652248 0.01099997 0.05766999 -0.006204783 0.01099997 0.05659908 -0.00695461 0.01099997 0.05567461 -0.007879078 0.01099997 0.05564659 -0.007919073 0.01099997 0.05492478 -0.008949995 0.01099997 0.04915916 0.03542202 -0.004699945 0.04835563 0.03609621 -0.004699945 0.04915916 0.03542202 0.004699945 0.04835563 0.03609621 0.004699945 0.08364289 0.0124607 0.01099997 0.08614075 0.02234482 0.005247533 0.0807181 0.02023816 0.01088035 0.0804243 0.01983249 0.01097178 0.08102375 0.0193594 0.01097178 0.08007377 0.0193485 0.01099997 0.08063054 0.0189011 0.01099997 0.08105665 0.02070558 0.01077491 0.08172595 0.02017736 0.01077491 0.08134293 0.02110087 0.01059484 0.08239567 0.02095741 0.01039564 0.08165967 0.02153825 0.01039564 0.08192914 0.0219103 0.01012879 0.08301287 0.02167642 0.009845197 0.08221548 0.02230566 0.009845197 0.08245903 0.02264195 0.009496212 0.08355933 0.02231287 0.009140074 0.08270752 0.0229851 0.009140074 0.08291643 0.02327352 0.008716464 0.08401858 0.02284789 0.008301258 0.08312118 0.02355617 0.008301258 0.08328747 0.02378576 0.007813096 0.08437711 0.02326548 0.007353663 0.08344399 0.02400189 0.007353663 0.08356088 0.0241633 0.006813645 0.08462423 0.02355331 0.006325542 0.0836665 0.02430909 0.006325542 0.08372831 0.02439445 0.005748391 0.08475244 0.02370268 0.005247533 0.08378195 0.02446854 0.005247533 0.0873416 0.02081871 0.005247533 0.08833485 0.01914995 0.005247533 0.08910375 0.0173667 0.005247533 0.08891826 0.01730066 0.006325542 0.08856099 0.0171734 0.007353663 0.08804249 0.01698869 0.008301258 0.08737826 0.01675212 0.009140074 0.08658802 0.01647061 0.009845197 0.08569538 0.01615267 0.01039564 0.08509355 0.01451951 0.01077491 0.08472692 0.01580768 0.01077491 0.08529037 0.01319479 0.01077491 0.08360707 0.01305574 0.01099997 0.08421605 0.01310586 0.01097178 0.08403974 0.01429229 0.01097178 0.08371138 0.01544594 0.01097178 0.08313918 0.01524251 0.01099997 0.08339935 0.01441001 0.01099997 0.08344435 0.01416426 0.01099997 0.08358734 0.01338315 0.01099997 0.08323645 0.01654738 0.01097178 0.082623 0.01757812 0.01097178 0.08212882 0.01723885 0.01099997 0.08265066 0.01637899 0.01099997 0.08269858 0.01627314 0.01099997 0.08308058 0.01542997 0.01099997 0.08188128 0.01852071 0.01097178 0.08146929 0.01808494 0.01099997 0.0821107 0.01726871 0.01099997 0.08075207 0.01880341 0.01099997 0.08088755 0.01866775 0.01099997 0.08143466 0.01811957 0.01099997 0.08599424 0.02221328 0.006325542 0.08571201 0.0219599 0.007353663 0.08530247 0.02159219 0.008301258 0.08477777 0.02112114 0.009140074 0.08415353 0.02056074 0.009845197 0.08344846 0.01992774 0.01039564 0.08268344 0.01924091 0.01077491 0.0871793 0.02070724 0.006325542 0.08686667 0.02049249 0.007353663 0.08641296 0.02018094 0.008301258 0.0858317 0.0197817 0.009140074 0.08514022 0.01930683 0.009845197 0.0843591 0.01877039 0.01039564 0.08351159 0.01818835 0.01077491 0.0881595 0.01906043 0.006325542 0.08782166 0.01888799 0.007353663 0.08733147 0.01863777 0.008301258 0.08670341 0.01831716 0.009140074 0.08595627 0.01793581 0.009845197 0.08511233 0.01750493 0.01039564 0.08419662 0.01703751 0.01077491 0.08015549 0.02712982 0.004649996 0.05115449 0.03709632 0.005499958 0.05233931 0.03764879 0.005499958 0.05620688 0.02321505 0.005499958 0.05490452 0.03810113 0.005499958 0.05620688 0.03798717 0.005499958 0.05746966 0.02355343 0.005499958 0.05360215 0.03798717 0.005499958 0.05746966 0.03764879 0.005499958 0.05865448 0.03709632 0.005499958 0.0597254 0.03634643 0.005499958 0.06139969 0.02685111 0.005499958 0.06064981 0.0257802 0.005499958 0.04840928 0.02685111 0.005499958 0.0478568 0.02803599 0.005499958 0.04751843 0.02929878 0.005499958 0.0478568 0.03316628 0.005499958 0.04840928 0.03435111 0.005499958 0.06064981 0.03542202 0.005499958 0.06139969 0.03435111 0.005499958 0.06229054 0.02929878 0.005499958 0.06195217 0.03316628 0.005499958 0.06229054 0.0319035 0.005499958 0.06240451 0.03060114 0.005499958 0.04915916 0.0257802 0.005499958 0.05490452 0.02310109 0.005499958 0.05360215 0.02321505 0.005499958 0.04915916 0.03542202 0.005499958 0.05008357 0.03634643 0.005499958 0.06195217 0.02803599 0.005499958 0.0597254 0.02485579 0.005499958 0.05865448 0.0241059 0.005499958 0.05233931 0.02355343 0.005499958 0.05115449 0.0241059 0.005499958 0.05008357 0.02485579 0.005499958 0.04740446 0.03060114 0.005499958 0.04751843 0.0319035 0.005499958 0.05746966 0.03764879 -0.005499958 0.05620688 0.03798717 -0.005499958 0.05746966 0.02355343 -0.005499958 0.05865448 0.03709632 -0.005499958 0.05490452 0.03810113 -0.005499958 0.05360215 0.03798717 -0.005499958 0.05233931 0.03764879 -0.005499958 0.0597254 0.03634643 -0.005499958 0.05865448 0.0241059 -0.005499958 0.0597254 0.02485579 -0.005499958 0.05620688 0.02321505 -0.005499958 0.0478568 0.02803599 -0.005499958 0.04840928 0.02685111 -0.005499958 0.05115449 0.03709632 -0.005499958 0.05008357 0.03634643 -0.005499958 0.04915916 0.03542202 -0.005499958 0.04840928 0.03435111 -0.005499958 0.0478568 0.03316628 -0.005499958 0.04751843 0.0319035 -0.005499958 0.06064981 0.0257802 -0.005499958 0.06139969 0.02685111 -0.005499958 0.06195217 0.02803599 -0.005499958 0.06229054 0.02929878 -0.005499958 0.06240451 0.03060114 -0.005499958 0.06229054 0.0319035 -0.005499958 0.04740446 0.03060114 -0.005499958 0.04751843 0.02929878 -0.005499958 0.05233931 0.02355343 -0.005499958 0.05360215 0.02321505 -0.005499958 0.05115449 0.0241059 -0.005499958 0.05008357 0.02485579 -0.005499958 0.04915916 0.0257802 -0.005499958 0.05490452 0.02310109 -0.005499958 0.06195217 0.03316628 -0.005499958 0.06139969 0.03435111 -0.005499958 0.06064981 0.03542202 -0.005499958 4.99997e-4 0.03536546 -0.002181231 4.99997e-4 0.03523087 -0.004362523 4.99997e-4 0.03482931 -0.006510734 4.99997e-4 0.03442776 -0.008658885 4.99997e-4 0.03376525 -0.01074147 4.99997e-4 0.03310275 -0.01282405 4.99997e-4 0.0321893 -0.01480942 4.99997e-4 0.03127592 -0.0167948 4.99997e-4 0.03012543 -0.01865285 4.99997e-4 0.02897495 -0.02051097 4.99997e-4 0.02760487 -0.02221357 4.99997e-4 0.0262348 -0.02391618 4.99997e-4 0.02466583 -0.02543753 4.99997e-4 0.02309691 -0.02695882 4.99997e-4 0.02135294 -0.02827584 4.99997e-4 0.01960891 -0.02959287 4.99997e-4 0.01771628 -0.03068554 4.99997e-4 0.01582366 -0.03177827 4.99997e-4 0.01381111 -0.03263008 4.99997e-4 0.01179856 -0.03348195 4.99997e-4 0.009696602 -0.03408002 4.99997e-4 0.007594585 -0.0346781 4.99997e-4 0.005435049 -0.03501331 4.99997e-4 0.003275513 -0.03534853 4.99997e-4 0.001091122 -0.03541582 4.99997e-4 -0.001093208 -0.03548312 4.99997e-4 -0.003269255 -0.03528147 4.99997e-4 -0.005445361 -0.03507983 4.99997e-4 -0.007580161 -0.03461229 4.99997e-4 -0.00971502 -0.03414475 4.99997e-4 -0.0117762 -0.03341847 4.99997e-4 -0.01383739 -0.03269213 4.99997e-4 -0.01579368 -0.03171801 4.99997e-4 -0.01774996 -0.03074389 4.99997e-4 -0.01957172 -0.02953672 4.99997e-4 -0.02139347 -0.02832961 4.99997e-4 -0.0230531 -0.02690774 4.99997e-4 -0.02471274 -0.02548587 4.99997e-4 -0.02618503 -0.02387082 4.99997e-4 -0.02765733 -0.02225577 4.99997e-4 -0.02891999 -0.02047204 4.99997e-4 -0.03018265 -0.01868832 4.99997e-4 -0.03121656 -0.01676297 4.99997e-4 -0.03225046 -0.01483756 4.99997e-4 -0.03303992 -0.01279973 4.99997e-4 -0.03382939 -0.01076191 4.99997e-4 -0.03436249 -0.008642494 4.99997e-4 -0.03489553 -0.006523072 4.99997e-4 -0.03516405 -0.004354238 4.99997e-4 -0.03543263 -0.002185404 4.99997e-4 -0.03549998 0 4.99997e-4 -0.03543263 0.002185404 4.99997e-4 -0.03516405 0.004354238 4.99997e-4 -0.03489553 0.006523072 4.99997e-4 -0.03436249 0.008642494 4.99997e-4 -0.03382939 0.01076191 4.99997e-4 -0.03303992 0.01279973 4.99997e-4 -0.03225046 0.01483756 4.99997e-4 -0.03121656 0.01676297 4.99997e-4 -0.03018265 0.01868832 4.99997e-4 -0.02891999 0.02047204 4.99997e-4 -0.02765733 0.02225577 4.99997e-4 -0.02618503 0.02387082 4.99997e-4 -0.02471274 0.02548587 4.99997e-4 -0.0230531 0.02690774 4.99997e-4 -0.02139347 0.02832961 4.99997e-4 -0.01957172 0.02953672 4.99997e-4 -0.01774996 0.03074389 4.99997e-4 -0.01579368 0.03171801 4.99997e-4 -0.01383739 0.03269213 4.99997e-4 -0.0117762 0.03341847 4.99997e-4 -0.00971502 0.03414475 4.99997e-4 -0.007580161 0.03461229 4.99997e-4 -0.005445361 0.03507983 4.99997e-4 -0.003269255 0.03528147 4.99997e-4 -0.001093208 0.03548312 4.99997e-4 0.001091122 0.03541582 4.99997e-4 0.003275513 0.03534853 4.99997e-4 0.005435049 0.03501331 4.99997e-4 0.007594585 0.0346781 4.99997e-4 0.009696602 0.03408002 4.99997e-4 0.01179856 0.03348195 4.99997e-4 0.01381111 0.03263008 4.99997e-4 0.01582366 0.03177827 4.99997e-4 0.01771628 0.03068554 4.99997e-4 0.01960891 0.02959287 4.99997e-4 0.02135294 0.02827584 4.99997e-4 0.02309691 0.02695882 4.99997e-4 0.02466583 0.02543753 4.99997e-4 0.0262348 0.02391618 4.99997e-4 0.02760487 0.02221357 4.99997e-4 0.02897495 0.02051097 4.99997e-4 0.03012543 0.01865285 4.99997e-4 0.03127592 0.0167948 4.99997e-4 0.0321893 0.01480942 4.99997e-4 0.03310275 0.01282405 4.99997e-4 0.03376525 0.01074147 4.99997e-4 0.03442776 0.008658885 4.99997e-4 0.03482931 0.006510734 4.99997e-4 0.03523087 0.004362523 4.99997e-4 0.03536546 0.002181231 4.99997e-4 0.03549998 0 0.04403042 0.03817635 -0.005508184 0.04421645 0.03825569 -0.005502223 0.04425263 0.03815644 -0.006024599 0.04774308 0.03982073 -0.00591129 0.04282271 0.0322799 -0.01092576 0.04280012 0.03241735 -0.01090645 0.04481983 0.03294175 -0.01090961 0.0422886 0.0337646 -0.01049274 0.04217869 0.03393763 -0.01040488 0.0443502 0.03449398 -0.01040244 0.04210245 0.03405767 -0.01034396 0.0442 0.03499037 -0.01013016 0.04229611 0.03374946 -0.01049876 0.04450494 0.03398245 -0.01062321 0.04244548 0.03344768 -0.01061874 0.04466217 0.03346276 -0.01079201 0.04261982 0.03303611 -0.01075929 0.0425589 0.03321844 -0.01070994 0.04278439 0.03251326 -0.01089298 0.04275667 0.03262645 -0.01087021 0.0426523 0.03293895 -0.01078563 0.04289263 0.03149974 -0.01099324 0.04287815 0.03194242 -0.01097315 0.04729425 0.03858977 -0.008040666 0.04745322 0.03828924 -0.00852704 0.04763448 0.03794676 -0.008983433 0.04704767 0.03905576 -0.00700742 0.04715883 0.03884565 -0.007531642 0.04781085 0.0397064 -0.00644648 0.04696077 0.03921991 -0.006475448 0.04689759 0.0393393 -0.005942702 0.04609209 0.03877764 -0.006502628 0.04603385 0.03890174 -0.005972206 0.0464996 0.03922957 -0.00542891 0.04598432 0.03900974 -0.00544542 0.04531359 0.03872364 -0.005466997 0.04768329 0.03992193 -0.005380928 0.04723757 0.03966122 -0.005398988 0.04684716 0.03943282 -0.005414783 0.04168444 0.03616243 -0.008592903 0.0416494 0.03633892 -0.008383154 0.04368537 0.03669112 -0.008583843 0.0416423 0.03637468 -0.008323371 0.04358655 0.03701776 -0.008107841 0.04174095 0.03587794 -0.008930921 0.04379749 0.0363205 -0.009030103 0.04175901 0.03578686 -0.009039163 0.04333508 0.037849 -0.00604707 0.04337626 0.03771293 -0.00657171 0.04429984 0.03802394 -0.006550967 0.04527699 0.03820425 -0.007054924 0.04343175 0.03752946 -0.007094562 0.04350185 0.03729766 -0.007609009 0.04154562 0.03686147 -0.007509946 0.04144889 0.0373485 -0.00607866 0.04239928 0.03758597 -0.006066739 0.04145711 0.03730714 -0.00626266 0.04243409 0.03744679 -0.00658977 0.04147052 0.03723973 -0.00656259 0.04151451 0.03701829 -0.007117211 0.04150229 0.03707963 -0.006963491 0.0414738 0.03722327 -0.006603777 0.04161834 0.0364952 -0.008122026 0.04156315 0.03677332 -0.007657289 0.04155999 0.03678923 -0.007630646 0.04710525 0.0337615 -0.01090872 0.0420295 0.0344249 -0.01011991 0.04197657 0.03469139 -0.009957373 0.04405653 0.03546458 -0.009808301 0.04536837 0.03798216 -0.007573783 0.04547917 0.03771293 -0.008077263 0.04560881 0.03739786 -0.008558034 0.04575622 0.03703969 -0.009008884 0.04392176 0.03590995 -0.009440124 0.04591977 0.03664225 -0.009423255 0.04609739 0.03621053 -0.009795486 0.0462867 0.03575056 -0.01012086 0.046485 0.03526878 -0.01039612 0.04668939 0.03477215 -0.01061928 0.04689705 0.03426748 -0.01078987 0.04904329 0.03528439 -0.01078736 0.04930073 0.03479784 -0.01090764 0.04878646 0.0357697 -0.01061457 0.04853379 0.03624719 -0.01038855 0.04805505 0.03715193 -0.009780049 0.04828882 0.0367102 -0.01010972 0.04783594 0.03756606 -0.009403049 0.04331034 0.03797936 -0.005524039 0.04329764 0.03797584 -0.005524337 0.04236453 0.03772062 -0.0055449 0.041426 0.03746384 -0.005565583 0.04510003 0.03863257 -0.005473852 0.04515218 0.03850752 -0.005999565 0.04520505 0.03837901 -0.0065279 0.04193145 0.0349186 -0.009818732 0.04185301 0.0353136 -0.009479224 0.04184341 0.03536212 -0.009437561 0.04177916 0.03568565 -0.009159445 0.05233931 0.03764879 -0.004699945 0.07841891 0.02819085 -0.004699945 0.04725229 0.03972458 -0.004699945 0.05008357 0.03634643 -0.004699945 0.05115449 0.03709632 -0.004699945 0.05360215 0.03798717 -0.004699945 0.05746966 0.03764879 -0.004699945 0.05865448 0.03709632 -0.004699945 0.07653802 0.02896785 -0.004699945 0.0597254 0.03634643 -0.004699945 0.04720515 0.03969609 -0.004699945 0.04615277 0.03726756 -0.004699945 0.04586827 0.03902029 -0.004699945 0.04533398 0.03744161 -0.004699945 0.05490452 0.03810113 -0.004699945 0.06064981 0.03542202 -0.004699945 0.06139969 0.03435111 -0.004699945 0.06195217 0.03316628 -0.004699945 0.07455891 0.02944183 -0.004699945 0.04532575 0.03879535 -0.004699945 0.04448974 0.03844863 -0.004699945 0.04449892 0.03749996 -0.004699945 0.04331725 0.03806251 -0.004699945 0.0430715 0.03798156 -0.004699945 0.05620688 0.03798717 -0.004699945 0.06229054 0.0319035 -0.004699945 0.06240451 0.03060114 -0.004699945 0.07253009 0.02960109 -0.004699945 0.06233751 0.02960109 -0.004699945 0.04236608 0.0377922 -0.004699945 0.04124146 0.03755438 -0.004699945 0.04098409 0.03749996 -0.004699945 0.04693937 0.03698122 -0.004699945 0.04767847 0.03658825 -0.004699945 0.0408954 0.03620505 -0.008419275 0.04128491 0.03493863 -0.009743034 0.04122203 0.03499501 -0.009699404 0.04118716 0.0351445 -0.009581267 0.03918135 0.03593152 -0.008887708 0.03887224 0.03597509 -0.008892536 0.03920274 0.03629297 -0.008289933 0.0395503 0.03585046 -0.008934497 0.03944474 0.03587371 -0.008920967 0.03944104 0.03588277 -0.008908092 0.03942441 0.03587818 -0.008918404 0.03918397 0.03593116 -0.008887648 0.03993892 0.03572827 -0.009039342 0.03993368 0.03573054 -0.009037196 0.04016232 0.0360409 -0.008613467 0.04103827 0.03571373 -0.009032487 0.04034709 0.03555303 -0.009205043 0.04064482 0.03538829 -0.009357333 0.04041182 0.0355252 -0.009231328 0.04035866 0.03554803 -0.009209692 0.04113221 0.0350756 -0.009637057 0.04107767 0.035115 -0.009603083 0.04093813 0.03521585 -0.009516 0.04165846 0.03460335 -0.01000213 0.04165732 0.03460472 -0.0100013 0.04183685 0.03438413 -0.01013946 0.0405308 0.03714472 -0.006361842 0.03962051 0.03698599 -0.006599485 0.03974413 0.03716522 -0.005821704 0.04044044 0.03728348 -0.005683243 0.04084944 0.03735291 -0.005601882 0.04124265 0.03742855 -0.005577147 0.04076159 0.03660959 -0.007757961 0.04063946 0.03692281 -0.007066369 0.03979331 0.03676259 -0.007290124 0.0399751 0.03644752 -0.007967174 0.03757095 0.03686457 -0.006873786 0.03851228 0.03698855 -0.006329715 0.03785634 0.03670197 -0.007497429 0.03872936 0.03684329 -0.006977617 0.03872358 0.03701639 -0.006207644 0.03912377 0.03707474 -0.006056308 0.03946518 0.03712457 -0.005927205 0.03823012 0.03638452 -0.008294999 0.03814744 0.03645807 -0.008119165 0.03896379 0.03661328 -0.007641017 0.03795129 0.03663253 -0.007702171 0.0379033 0.03667515 -0.007600188 0.03833878 0.03625148 -0.008519113 0.03843879 0.03612887 -0.008725523 0.03854596 0.03599762 -0.008946597 0.0369209 0.02724999 -0.01100623 0.03686267 0.02727538 -0.0110082 0.03390532 0.03168606 -0.01429408 0.03391289 0.03184103 -0.01474934 0.03391921 0.03191024 -0.01513421 0.03392493 0.03197348 -0.01548594 0.0339806 0.03227925 -0.01679998 0.03392589 0.03198194 -0.01557594 0.0339263 0.03198605 -0.01600009 0.03392666 0.03198927 -0.01632738 0.03391921 0.03191304 -0.01686668 0.03394728 0.03208708 -0.01709866 0.03391647 0.03188461 -0.01706784 0.03392124 0.03193724 -0.01733154 0.03391295 0.03184175 -0.01724791 0.03390532 0.03171986 -0.01764994 0.03394073 0.03089576 -0.01286584 0.03390407 0.03130728 -0.01346087 0.03390389 0.03132766 -0.01350122 0.0339021 0.03149998 -0.0138421 0.03390103 0.03159862 -0.01403725 0.03409624 0.03020775 -0.01217687 0.03401076 0.03050756 -0.01243674 0.03397256 0.03071933 -0.01267081 0.03395318 0.03082656 -0.0127893 0.03437077 0.02949917 -0.01167112 0.03418201 0.02993202 -0.01194989 0.03417158 0.02996098 -0.01197141 0.03414714 0.03002917 -0.01202207 0.03479492 0.02880668 -0.01133781 0.03465062 0.02901154 -0.01142245 0.03450977 0.02925395 -0.01154434 0.03438138 0.02947485 -0.01165544 0.03487801 0.02870893 -0.01130491 0.03495943 0.02861309 -0.01127272 0.03573548 0.02787363 -0.01107686 0.03560721 0.02797144 -0.01109528 0.03551197 0.02805781 -0.01111614 0.03516042 0.02837663 -0.01119321 0.03574413 0.02786821 -0.01107615 0.03615474 0.02761042 -0.01103973 0.03629225 0.02752411 -0.01102751 0.03768891 0.02705651 -0.01100027 0.0376197 0.0270732 -0.01100075 0.03700548 0.0272215 -0.01100486 0.03839999 0.03599995 -0.008987188 0.03803229 0.03598493 -0.009130358 0.03778016 0.03595238 -0.00927329 0.03686308 0.03572314 -0.01001518 0.03697043 0.03576689 -0.009895563 0.03711175 0.03580462 -0.009776115 0.03751033 0.03591114 -0.00943917 0.03761601 0.03593116 -0.009366393 0.03761857 0.03593146 -0.009364902 0.03652822 0.03558671 -0.01038837 0.0364412 0.0355513 -0.01048535 0.03558558 0.03499525 -0.01179945 0.03586268 0.03521645 -0.01130622 0.0360254 0.03531062 -0.01107531 0.03615617 0.03538632 -0.0108897 0.03495746 0.03439813 -0.01306688 0.03520107 0.0346539 -0.01253759 0.03533774 0.03479737 -0.01224064 0.03538656 0.03483635 -0.0121538 0.03551447 0.03493845 -0.01192605 0.03455072 0.03383088 -0.01416248 0.03459364 0.03389078 -0.01404684 0.03487569 0.03428405 -0.01328712 0.03495323 0.03439217 -0.01307833 0.03424537 0.03322899 -0.01524549 0.03436702 0.03346872 -0.01481413 0.03438609 0.03350639 -0.01474636 0.03450822 0.03374713 -0.01431316 0.0340358 0.03259724 -0.01630574 0.03417968 0.03303086 -0.01557803 0.03418129 0.03303569 -0.01556986 0.03364944 0.03130435 -0.01854401 0.03365564 0.03132992 -0.01849985 0.03629505 0.02412897 -0.02009356 0.03627729 0.02436953 -0.02025216 0.03626912 0.02442431 -0.02028143 0.0363 0.02266985 -0.01849997 0.0363 0.02316975 -0.01921391 0.0363 0.02378606 -0.01983022 0.0363 0.02392762 -0.01994466 0.0363 0.02230149 -0.01771008 0.03375005 0.03154939 -0.01807433 0.03388369 0.03169608 -0.01770913 0.03366047 0.03134977 -0.01846551 0.03364354 0.03121924 -0.01867413 0.03363227 0.03105485 -0.01892542 0.03385084 0.03027904 -0.01977455 0.03369653 0.03069746 -0.01936572 0.03367751 0.03076875 -0.01928573 0.03366822 0.03082746 -0.01921176 0.03402549 0.02991509 -0.02006226 0.03388309 0.03021192 -0.01982766 0.03467482 0.02870726 -0.02069169 0.03443759 0.02914518 -0.02050644 0.03436166 0.02928537 -0.02044713 0.03425043 0.02949368 -0.02031981 0.03473299 0.02859979 -0.02073711 0.034909 0.02826583 -0.02083706 0.03551667 0.02699995 -0.02099996 0.03545814 0.02712851 -0.02099287 0.03526592 0.02755075 -0.02096956 0.03514009 0.02780288 -0.02092283 0.03510862 0.02786582 -0.02091115 0.03568917 0.02657133 -0.02097046 0.03579246 0.02631473 -0.02095282 0.03607082 0.02543872 -0.02074402 0.03604787 0.02553427 -0.02078032 0.03601747 0.02563977 -0.02081143 0.03585284 0.02613365 -0.02091485 0.03625726 0.0245034 -0.02032369 0.03619426 0.02492517 -0.02054917 0.03610575 0.02529346 -0.02068895 0.0363 0.02114957 -0.02286952 0.0363 0.02297121 -0.02103906 0.0363 0 -0.03114998 0.0363 0.002580165 -0.03104293 0.0363 0.005142688 -0.03072249 0.0363 -0.02266985 -0.01849997 0.0363 -0.007669806 -0.03019094 0.0363 -0.005142688 -0.03072249 0.0363 0.01486742 -0.02737301 0.0363 0.0170837 -0.0260474 0.0363 0.01918256 -0.0245428 0.0363 0.007669806 -0.03019094 0.0363 0.01014423 -0.0294519 0.0363 0.01254898 -0.02851045 0.0363 -0.0170837 -0.0260474 0.0363 -0.01486742 -0.02737301 0.0363 -0.02316975 -0.01921391 0.0363 -0.01254898 -0.02851045 0.0363 -0.01014423 -0.0294519 0.0363 -0.002580165 -0.03104293 0.0363 -0.02230149 -0.01771008 0.0363 -0.02392762 -0.01994466 0.0363 -0.02297121 -0.02103906 0.0363 -0.02378606 -0.01983022 0.0363 -0.02114957 -0.02286952 0.0363 -0.01918256 -0.0245428 0.03390103 -0.03159862 -0.01403725 0.03390532 -0.03168606 -0.01429408 0.03363841 -0.03097856 -0.01902836 0.03367018 -0.03082627 -0.01921063 0.03381693 -0.03035837 -0.01970422 0.03388702 -0.03020936 -0.01982456 0.03369903 -0.03068798 -0.01937615 0.03365516 -0.03132998 -0.01849991 0.03363633 -0.0312258 -0.01867252 0.03363639 -0.03122037 -0.01868027 0.03365582 -0.03133332 -0.01849436 0.03375059 -0.03155052 -0.01807177 0.03391647 -0.03188461 -0.01706784 0.03391295 -0.03184175 -0.01724791 0.03390532 -0.03171986 -0.01764994 0.03388363 -0.03169608 -0.01770913 0.03392666 -0.03198927 -0.01632738 0.03391921 -0.03191304 -0.01686668 0.03391921 -0.03191024 -0.01513421 0.03392493 -0.03197348 -0.01548594 0.03392589 -0.03198194 -0.01557594 0.0339263 -0.03198605 -0.01600009 0.03391289 -0.03184103 -0.01474934 0.0339021 -0.03149998 -0.0138421 0.03390389 -0.03132766 -0.01350122 0.03395318 -0.03082656 -0.0127893 0.03394073 -0.03089576 -0.01286584 0.03390407 -0.03130728 -0.01346087 0.03397256 -0.03071933 -0.01267081 0.03401076 -0.03050756 -0.01243674 0.03418201 -0.02993202 -0.01194989 0.03417158 -0.02996098 -0.01197141 0.03414714 -0.03002917 -0.01202207 0.03409624 -0.03020775 -0.01217687 0.03479492 -0.02880668 -0.01133781 0.03465062 -0.02901154 -0.01142245 0.03450977 -0.02925395 -0.01154434 0.03438138 -0.02947485 -0.01165544 0.03437077 -0.02949917 -0.01167112 0.03573548 -0.02787363 -0.01107686 0.03560721 -0.02797144 -0.01109528 0.03551197 -0.02805781 -0.01111614 0.03516042 -0.02837663 -0.01119321 0.03495943 -0.02861309 -0.01127272 0.03487801 -0.02870893 -0.01130491 0.03768891 -0.02705651 -0.01100027 0.0376197 -0.0270732 -0.01100075 0.03700548 -0.0272215 -0.01100486 0.0369209 -0.02724999 -0.01100623 0.03686267 -0.02727538 -0.0110082 0.03629225 -0.02752411 -0.01102751 0.03615474 -0.02761042 -0.01103973 0.03574413 -0.02786821 -0.01107615 0.03617095 -0.02503883 -0.0205993 0.03626084 -0.02450114 -0.02032786 0.0362671 -0.02446377 -0.02030897 0.03626954 -0.02442413 -0.02028203 0.0361402 -0.02517634 -0.02065557 0.03610813 -0.02529197 -0.02069181 0.03571653 -0.02651464 -0.02097636 0.03585183 -0.02613365 -0.02091264 0.03595602 -0.02584016 -0.02086359 0.03606677 -0.02544111 -0.02073854 0.03517329 -0.02774262 -0.02094453 0.03545838 -0.02712595 -0.02099055 0.03551667 -0.02699995 -0.02099996 0.0356943 -0.02656865 -0.02097898 0.03480261 -0.02846878 -0.02077937 0.03511005 -0.02786648 -0.02091634 0.03514361 -0.02780079 -0.0209313 0.03443694 -0.02914702 -0.02050137 0.03462249 -0.02880555 -0.02066254 0.03467398 -0.02870923 -0.02069598 0.03402549 -0.02991509 -0.02006226 0.0342465 -0.02949851 -0.0203278 0.03427106 -0.02945226 -0.02035731 0.03854596 -0.03599762 -0.008946597 0.03839999 -0.03599995 -0.008987188 0.03647518 -0.03556758 -0.01044297 0.03615373 -0.03539037 -0.01088398 0.03399658 -0.03242743 -0.01657789 0.03397756 -0.03228008 -0.01680105 0.03395104 -0.03207427 -0.01711291 0.03438675 -0.03350698 -0.01474499 0.03419667 -0.03310692 -0.01545625 0.03417623 -0.03303754 -0.01557081 0.03417372 -0.03302896 -0.015585 0.03467524 -0.03402513 -0.01379632 0.03458493 -0.03388077 -0.01406705 0.0345031 -0.03374981 -0.01431256 0.03449928 -0.03374379 -0.01432389 0.03519654 -0.03464722 -0.01255047 0.03506326 -0.03451931 -0.01282155 0.03495949 -0.03438717 -0.0130822 0.03486931 -0.03427231 -0.01330876 0.03557169 -0.03499525 -0.01180654 0.03551882 -0.03495669 -0.01189482 0.03550809 -0.03494644 -0.01191657 0.03538924 -0.03483223 -0.01215851 0.03598839 -0.03529924 -0.01111078 0.03710097 -0.035802 -0.009784698 0.03690403 -0.03574407 -0.009961605 0.03686165 -0.0357266 -0.01000916 0.03651112 -0.0355823 -0.01040267 0.03820317 -0.03599566 -0.009056389 0.03783547 -0.03596442 -0.009231984 0.03777521 -0.03595346 -0.009272515 0.0376197 -0.03592526 -0.009377241 0.03735941 -0.035878 -0.009552478 0.0392673 -0.03591561 -0.008893787 0.03942364 -0.03587782 -0.008919179 0.0394504 -0.03587132 -0.00892353 0.03964483 -0.03582435 -0.00895518 0.03918164 -0.03593158 -0.008887767 0.03918141 -0.03593158 -0.008887767 0.03886073 -0.03597635 -0.008893668 0.04035562 -0.03553968 -0.009216606 0.04034966 -0.03554272 -0.009213805 0.04011011 -0.03566235 -0.009100914 0.03993701 -0.03572261 -0.009046733 0.04129183 -0.03494644 -0.009742677 0.04128205 -0.03495591 -0.009735703 0.0412265 -0.03499525 -0.009701609 0.04106706 -0.03510808 -0.009603857 0.04070067 -0.03536736 -0.009379148 0.04064822 -0.03539359 -0.009354412 0.04165011 -0.03459781 -0.009999692 0.04177582 -0.0344755 -0.01008981 0.042288 -0.03374457 -0.0104925 0.04217475 -0.03393572 -0.01040184 0.04210245 -0.03405767 -0.01034396 0.04184317 -0.03438937 -0.0101422 0.04242098 -0.03352022 -0.01059895 0.04245012 -0.03345 -0.01062244 0.04282766 -0.03228086 -0.01092946 0.04281866 -0.03235143 -0.01092153 0.04280143 -0.03241759 -0.01090735 0.04267072 -0.03291791 -0.01080024 0.04262167 -0.03303623 -0.01076072 0.04289126 -0.0317794 -0.01098603 0.04289901 -0.0315926 -0.01099556 0.04289841 -0.03149998 -0.01099729 0.04930073 -0.03479784 -0.01090764 0.04531592 -0.03872013 -0.005467116 0.04510068 -0.03863334 -0.005473732 0.04515218 -0.03850752 -0.005999565 0.04429984 -0.03802394 -0.006550967 0.04337626 -0.03771293 -0.00657171 0.04343175 -0.03752946 -0.007094562 0.04239928 -0.03758597 -0.006066739 0.04236757 -0.0377109 -0.005545556 0.041426 -0.03746384 -0.005565583 0.04481983 -0.03294175 -0.01090961 0.04466217 -0.03346276 -0.01079201 0.04450494 -0.03398245 -0.01062321 0.0443502 -0.03449398 -0.01040244 0.0442 -0.03499037 -0.01013016 0.04392176 -0.03590995 -0.009440124 0.04379749 -0.0363205 -0.009030103 0.04177916 -0.03568565 -0.009159445 0.0416494 -0.03633892 -0.008383154 0.04368537 -0.03669112 -0.008583843 0.0416423 -0.03637468 -0.008323371 0.04358655 -0.03701776 -0.008107841 0.04168444 -0.03616243 -0.008592903 0.04174095 -0.03587794 -0.008930921 0.04175901 -0.03578686 -0.009039163 0.04154562 -0.03686147 -0.007509946 0.04350185 -0.03729766 -0.007609009 0.04151451 -0.03701829 -0.007117211 0.04150229 -0.03707963 -0.006963491 0.04144889 -0.0373485 -0.00607866 0.04145711 -0.03730714 -0.00626266 0.04243409 -0.03744679 -0.00658977 0.04147052 -0.03723973 -0.00656259 0.0414738 -0.03722327 -0.006603777 0.04155999 -0.03678923 -0.007630646 0.04156315 -0.03677332 -0.007657289 0.04161834 -0.0364952 -0.008122026 0.04333508 -0.037849 -0.00604707 0.04425263 -0.03815644 -0.006024599 0.04420924 -0.03827404 -0.005501091 0.04364091 -0.03804492 -0.005518496 0.0433157 -0.03795963 -0.00552541 0.04330325 -0.03795635 -0.005525708 0.04763448 -0.03794676 -0.008983433 0.04783594 -0.03756606 -0.009403049 0.04729425 -0.03858977 -0.008040666 0.04745322 -0.03828924 -0.00852704 0.04609209 -0.03877764 -0.006502628 0.04696077 -0.03921991 -0.006475448 0.04603385 -0.03890174 -0.005972206 0.04689759 -0.0393393 -0.005942702 0.04599189 -0.03899258 -0.005446374 0.04520505 -0.03837901 -0.0065279 0.04781085 -0.0397064 -0.00644648 0.04704767 -0.03905576 -0.00700742 0.04715883 -0.03884565 -0.007531642 0.04767888 -0.03993028 -0.00538057 0.04723083 -0.03967398 -0.005398452 0.04683792 -0.03944927 -0.005414068 0.04615366 -0.03905779 -0.005441367 0.04710525 -0.0337615 -0.01090872 0.04904329 -0.03528439 -0.01078736 0.04853379 -0.03624719 -0.01038855 0.04878646 -0.0357697 -0.01061457 0.04805505 -0.03715193 -0.009780049 0.04828882 -0.0367102 -0.01010972 0.04527699 -0.03820425 -0.007054924 0.04536837 -0.03798216 -0.007573783 0.04547917 -0.03771293 -0.008077263 0.04560881 -0.03739786 -0.008558034 0.04575622 -0.03703969 -0.009008884 0.04591977 -0.03664225 -0.009423255 0.04609739 -0.03621053 -0.009795486 0.0462867 -0.03575056 -0.01012086 0.046485 -0.03526878 -0.01039612 0.04668939 -0.03477215 -0.01061928 0.04689705 -0.03426748 -0.01078987 0.04405653 -0.03546458 -0.009808301 0.04197657 -0.03469139 -0.009957373 0.0420295 -0.0344249 -0.01011991 0.04184341 -0.03536212 -0.009437561 0.04185301 -0.0353136 -0.009479224 0.04193145 -0.0349186 -0.009818732 0.04774308 -0.03982073 -0.00591129 0.04104238 -0.03571474 -0.009031534 0.0411911 -0.03514552 -0.009580314 0.04017037 -0.03604269 -0.008610725 0.04035836 -0.03554898 -0.009209096 0.03843879 -0.03612887 -0.008725523 0.03920745 -0.03629392 -0.008287847 0.03944545 -0.03588372 -0.008906185 0.04089975 -0.03620606 -0.008418202 0.03757095 -0.03686457 -0.006873786 0.03785634 -0.03670197 -0.007497429 0.03843528 -0.03697746 -0.006350696 0.03873479 -0.03684413 -0.006975233 0.03851205 -0.03698825 -0.006317853 0.03912383 -0.0370745 -0.006056189 0.03833878 -0.03625148 -0.008519113 0.0389688 -0.03661417 -0.007638752 0.03823012 -0.03638452 -0.008294999 0.0379033 -0.03667515 -0.007600188 0.03795129 -0.03663253 -0.007702171 0.03814744 -0.03645807 -0.008119165 0.03998374 -0.03644925 -0.007964253 0.03980261 -0.03676426 -0.007286965 0.03963053 -0.03698766 -0.006596088 0.03947585 -0.03712409 -0.005905687 0.04044353 -0.03728103 -0.00566399 0.04053622 -0.03714567 -0.00636053 0.04050427 -0.03729087 -0.005648791 0.04124242 -0.03742939 -0.005582153 0.04064452 -0.03692376 -0.007065117 0.04076629 -0.03661054 -0.007756829 0.05233931 -0.03764879 -0.004699945 0.05008357 -0.03634643 -0.004699945 0.04725301 -0.03972351 -0.004699945 0.05490452 -0.03810113 -0.004699945 0.05620688 -0.03798717 -0.004699945 0.05360215 -0.03798717 -0.004699945 0.04729032 -0.03974354 -0.004699945 0.05115449 -0.03709632 -0.004699945 0.04245972 -0.03781574 -0.004699945 0.04449892 -0.03749996 -0.004699945 0.04124128 -0.03755503 -0.004699945 0.04098409 -0.03749996 -0.004699945 0.06233751 -0.02960109 -0.004699945 0.06240451 -0.03060114 -0.004699945 0.07253009 -0.02960109 -0.004699945 0.07455891 -0.02944183 -0.004699945 0.06229054 -0.0319035 -0.004699945 0.06195217 -0.03316628 -0.004699945 0.07653802 -0.02896785 -0.004699945 0.04331594 -0.03806787 -0.004699945 0.04389673 -0.03823894 -0.004699945 0.04533398 -0.03744161 -0.004699945 0.05865448 -0.03709632 -0.004699945 0.05746966 -0.03764879 -0.004699945 0.04767847 -0.03658825 -0.004699945 0.04693937 -0.03698122 -0.004699945 0.04664897 -0.03939956 -0.004699945 0.04615277 -0.03726756 -0.004699945 0.04533022 -0.03878432 -0.004699945 0.04529374 -0.03876727 -0.004699945 0.07841891 -0.02819085 -0.004699945 0.0597254 -0.03634643 -0.004699945 0.06064981 -0.03542202 -0.004699945 0.06139969 -0.03435111 -0.004699945 0.05518853 -0.03608095 0.01099997 0.05440288 -0.03603261 0.01099997 0.0543335 -0.03658044 0.01097625 0.05833393 -0.03509032 0.01099997 0.05773645 -0.03543817 0.01099997 0.0580002 -0.03594857 0.01097452 0.0509777 -0.04159092 0.005765974 0.05183738 -0.0418775 0.005737841 0.05187046 -0.04176181 0.006285369 0.05627006 -0.04182344 0.007234811 0.0571345 -0.04171919 0.007199287 0.05708646 -0.04144906 0.007750868 0.05685108 -0.03581166 0.01099997 0.05611485 -0.03598791 0.01099997 0.05621373 -0.03654205 0.01097548 0.05763959 -0.03549456 0.01099997 0.05694293 -0.0357747 0.01099997 0.05712538 -0.03631359 0.010975 0.0560289 -0.03600847 0.01099997 0.05525749 -0.03607499 0.01099997 0.05527144 -0.03663223 0.01097589 0.05532705 -0.03889739 0.01034015 0.05534029 -0.03943812 0.01003849 0.05670952 -0.0393297 0.01002013 0.05535292 -0.03995162 0.009681999 0.05536466 -0.04042971 0.009274721 0.05688422 -0.04031193 0.009241402 0.06161427 -0.04053241 0.004699945 0.06220012 -0.04013365 0.004699945 0.06217509 -0.04009914 0.00516653 0.0614295 -0.04061722 0.005229592 0.06143903 -0.04063218 0.004713773 0.06063693 -0.04105806 0.005288779 0.06064909 -0.04108202 0.00477612 0.05981099 -0.04143887 0.005346059 0.06019616 -0.04129451 0.004809141 0.0605728 -0.04112553 0.00478214 0.05896371 -0.04175436 0.005400717 0.0595653 -0.04157745 0.00485444 0.05982095 -0.04146283 0.004836082 0.05855625 -0.04192447 0.004920721 0.05857288 -0.04191875 0.004919648 0.05897271 -0.04178124 0.004893362 0.05810707 -0.04203361 0.0049479 0.05809938 -0.04200422 0.005452692 0.05742806 -0.04219865 0.004988908 0.05721801 -0.04218864 0.005502045 0.05722516 -0.04222714 0.005000054 0.05631875 -0.04230695 0.005549013 0.05632328 -0.04235386 0.005049765 0.05683845 -0.04228144 0.005021393 0.05506104 -0.0424143 0.005113482 0.05541276 -0.04240006 0.005095839 0.05541199 -0.04235732 0.005593121 0.05622965 -0.04236698 0.005054891 0.05361282 -0.04225343 0.00567156 0.05390101 -0.0423485 0.005166649 0.05450969 -0.04233926 0.00563389 0.05450755 -0.04238289 0.005138874 0.05505669 -0.04241406 0.005113661 0.0526967 -0.04215919 0.005216658 0.05328226 -0.04225122 0.005192339 0.05360698 -0.04230225 0.005178868 0.05156797 -0.04186242 0.00525856 0.0518223 -0.0419293 0.005249142 0.05152511 -0.04185116 0.005260169 0.0503962 -0.04142898 0.005297064 0.05012202 -0.04129385 0.005304813 0.04932075 -0.04089879 0.005327403 0.04997587 -0.04122173 0.005308926 0.05014562 -0.0412417 0.00579065 0.04934132 -0.04082953 0.005811989 0.04857629 -0.04033708 0.005826115 0.0493074 -0.04089069 0.005327761 0.04852515 -0.04041445 0.005346775 0.04967629 -0.03867125 0.009364485 0.05096948 -0.03944903 0.009346365 0.04988759 -0.03835123 0.009707927 0.05116695 -0.0390194 0.009736597 0.05021011 -0.03786283 0.01008152 0.05137819 -0.03855973 0.01007801 0.0503658 -0.03762704 0.01026189 0.05160009 -0.03807687 0.01036691 0.05048948 -0.03743976 0.01035833 0.05020004 -0.03787803 0.0100699 0.04992979 -0.03828728 0.009756863 0.04991805 -0.03830516 0.009743213 0.05049854 -0.03742611 0.01036536 0.05182927 -0.03757816 0.0106011 0.05079019 -0.03698438 0.01059275 0.05206245 -0.03707087 0.01078003 0.05088704 -0.03683769 0.01066827 0.05079728 -0.03697359 0.0105983 0.05140531 -0.03605282 0.01090192 0.05140173 -0.03605824 0.01090031 0.05229628 -0.03656208 0.01090455 0.05110192 -0.03651225 0.01076519 0.05109643 -0.0365206 0.01076269 0.05355912 -0.03586041 0.01099997 0.05340856 -0.03638702 0.01097649 0.05368596 -0.03588753 0.01099997 0.05434727 -0.03602921 0.01099997 0.05200314 -0.03514754 0.01099997 0.05143767 -0.03600382 0.01091653 0.05208086 -0.03519088 0.01099997 0.05273765 -0.03555762 0.01099997 0.05275481 -0.03556406 0.01099997 0.05352485 -0.03585308 0.01099997 0.05680006 -0.03983879 0.009656608 0.05531328 -0.038338 0.01058459 0.05661404 -0.03879284 0.01032775 0.0597884 -0.0394138 0.009162664 0.06111234 -0.03863173 0.009100675 0.06086975 -0.03829675 0.009514331 0.05836182 -0.03997302 0.009204149 0.05820721 -0.03951531 0.009628236 0.0595656 -0.03898203 0.009596586 0.06083369 -0.03824692 0.009557366 0.05932486 -0.03851544 0.009976744 0.0605179 -0.03781098 0.009934306 0.0603379 -0.03756242 0.01014924 0.05804044 -0.03902179 0.009999573 0.05786436 -0.03850072 0.0103138 0.05907022 -0.03802204 0.01029837 0.06019181 -0.03736072 0.01026535 0.05631363 -0.03710359 0.010899 0.05528533 -0.03719741 0.01090073 0.05641454 -0.0376712 0.01076698 0.05529934 -0.03776854 0.01077109 0.05651521 -0.03823709 0.0105769 0.05880618 -0.03751033 0.01055884 0.0598514 -0.03689068 0.01053601 0.05974948 -0.03674995 0.01061701 0.05826711 -0.03646582 0.01089495 0.05730974 -0.03685921 0.01089709 0.05853706 -0.03698885 0.01075726 0.05749613 -0.03741085 0.01076239 0.05768197 -0.03796082 0.01056832 0.05950319 -0.03640985 0.01072955 0.05538481 -0.04125183 0.008331716 0.05539304 -0.04158544 0.007810831 0.05539983 -0.04186308 0.007268071 0.05873101 -0.04106557 0.007683813 0.05702835 -0.04112231 0.008280813 0.05537533 -0.04086506 0.008822321 0.05540925 -0.04224783 0.006151199 0.05630809 -0.04220122 0.00611025 0.05720007 -0.04208761 0.006066679 0.05807483 -0.0419085 0.006020784 0.05893343 -0.04166465 0.005972445 0.05977576 -0.04135566 0.005921542 0.06059759 -0.04098188 0.005868136 0.05798339 -0.04155182 0.007161915 0.05881756 -0.04132181 0.007122457 0.05953246 -0.04078173 0.007647454 0.05963718 -0.04102873 0.007080852 0.0569607 -0.0407418 0.008780419 0.05862551 -0.0407533 0.008223831 0.05850195 -0.04038769 0.008733451 0.06016623 -0.04014593 0.008160531 0.05998963 -0.03980368 0.008681297 0.06031614 -0.04043644 0.007609307 0.06043809 -0.04067277 0.007037162 0.06120878 -0.04025852 0.006991982 0.06178462 -0.03955996 0.007520139 0.06107074 -0.04003417 0.007569789 0.06170123 -0.0394448 0.007824957 0.06214368 -0.04005569 0.005752623 0.06138706 -0.04054832 0.005812942 0.06205058 -0.03992718 0.006344854 0.06131398 -0.04042953 0.006403267 0.06197559 -0.03982371 0.006821811 0.06194305 -0.0397787 0.006940841 0.04874414 -0.04008287 0.006904602 0.04864448 -0.04023379 0.006414353 0.05027115 -0.04096853 0.006878614 0.04863554 -0.04024738 0.006370306 0.04940235 -0.04071968 0.006353974 0.04863291 -0.04025125 0.00635761 0.04858142 -0.04032927 0.005874276 0.0510202 -0.04147619 0.006311416 0.05019748 -0.04112887 0.006334245 0.05191814 -0.04159528 0.006834149 0.05036735 -0.0407592 0.007416427 0.04882931 -0.03995388 0.007323563 0.04875266 -0.04006993 0.006946563 0.06053173 -0.04085427 0.006453752 0.05971813 -0.04121977 0.006502568 0.05888497 -0.04152125 0.00654906 0.05803638 -0.04175847 0.006593167 0.05717235 -0.0419318 0.006635069 0.05629193 -0.04204076 0.006674826 0.05540525 -0.04208368 0.006712138 0.05451542 -0.04222673 0.006189048 0.05452394 -0.04206019 0.00674659 0.05362737 -0.04213893 0.006223976 0.05277943 -0.04181641 0.006807565 0.05367702 -0.04174828 0.007327139 0.04903787 -0.03963804 0.007991194 0.0490272 -0.03965419 0.007957041 0.05048614 -0.0405007 0.007939994 0.04887747 -0.03988093 0.00747776 0.04886603 -0.03989821 0.007441163 0.0491091 -0.03953015 0.008219182 0.05062699 -0.04019421 0.008441269 0.04921251 -0.03937357 0.008452177 0.04922497 -0.03935474 0.00848025 0.0507887 -0.03984236 0.008912503 0.04942226 -0.03905594 0.008924782 0.04966431 -0.03868937 0.009345054 0.049465 -0.03899121 0.009021043 0.04943352 -0.03903883 0.008950173 0.05426281 -0.03713697 0.01090228 0.0532552 -0.03692287 0.01090353 0.05419141 -0.03769928 0.01077467 0.05310034 -0.03746408 0.01077765 0.05412018 -0.03825986 0.01059114 0.05294591 -0.03800374 0.01059669 0.0540502 -0.03881078 0.01035082 0.05279409 -0.03853416 0.01035976 0.05398249 -0.03934365 0.01005423 0.05264723 -0.03904753 0.01006752 0.05391812 -0.03985017 0.009703755 0.05250746 -0.03953588 0.009722054 0.05385816 -0.04032248 0.009303271 0.05237698 -0.03999185 0.009327292 0.05380338 -0.04075348 0.008858263 0.05225765 -0.04040873 0.008888483 0.05375462 -0.04113751 0.008375346 0.05215114 -0.04078096 0.008412063 0.05371236 -0.04146999 0.007862269 0.05205863 -0.04110437 0.007905542 0.05198085 -0.04137617 0.007376909 0.05364871 -0.04197114 0.006778359 0.05274504 -0.04198426 0.006256043 0.05272132 -0.04209983 0.005706191 0.05847555 -0.03499096 0.01099997 0.058811 -0.03545421 0.0109499 0.05912232 -0.03588402 0.01090347 0.05915665 -0.03593146 0.0108878 0.06159615 -0.03929972 0.00808078 0.0613752 -0.03899466 0.008618772 0.06132882 -0.03893065 0.008731663 0.06233751 -0.02960109 0.004699945 0.07253009 -0.02960109 0.004699945 0.08009743 -0.02717161 0.004699945 0.07841891 -0.02819085 0.004699945 0.07653802 -0.02896785 0.004699945 0.07455891 -0.02944183 0.004699945 0.04851102 -0.04044657 0.005023717 0.04849767 -0.04047673 0.004699945 0.04889988 -0.04072952 0.004699945 0.04851663 -0.04043388 0.00515151 0.04994332 -0.0412873 0.004699945 0.05099391 -0.04172635 0.004699945 0.05154109 -0.04190927 0.004699945 0.04992097 -0.04127794 0.004699945 0.05503135 -0.04244238 0.004699945 0.05499404 -0.04244297 0.004699945 0.05382508 -0.04237723 0.004699945 0.05325585 -0.04228943 0.004699945 0.05267781 -0.0422002 0.004699945 0.05155456 -0.0419138 0.004699945 0.05673569 -0.04232996 0.004699945 0.05681699 -0.04231476 0.004699945 0.05557757 -0.04243332 0.004699945 0.05788028 -0.0421155 0.004699945 0.05855131 -0.04192125 0.004699945 0.05953139 -0.04159617 0.004699945 0.05900847 -0.04178893 0.004699945 0.06059646 -0.04111534 0.004699945 0.06018531 -0.04130095 0.004699945 0.06240451 -0.03060114 0.004699945 0.06229054 -0.0319035 0.004699945 0.06195217 -0.03316628 0.004699945 0.06139969 -0.03435111 0.004699945 0.06064981 -0.03542202 0.004699945 0.0597254 -0.03634643 0.004699945 0.05865448 -0.03709632 0.004699945 0.05746966 -0.03764879 0.004699945 0.05620688 -0.03798717 0.004699945 0.05490452 -0.03810113 0.004699945 0.05360215 -0.03798717 0.004699945 0.05233931 -0.03764879 0.004699945 0.05115449 -0.03709632 0.004699945 0.05008357 -0.03634643 0.004699945 0.04449892 -0.03749996 0.004699945 0.04533398 -0.03744161 0.004699945 0.04615277 -0.03726756 0.004699945 0.04693937 -0.03698122 0.004699945 0.04767847 -0.03658825 0.004699945 0.04129254 -0.03494715 0.008099973 0.03495275 -0.03439253 0.008099973 0.04064995 -0.03539711 0.008099973 0.03417134 -0.02996087 0.008099973 0.03450286 -0.02924996 0.008099973 0.03495275 -0.02860742 0.008099973 0.03550744 -0.02805274 0.008099973 0.04262858 -0.03303909 0.008099973 0.04229706 -0.03374999 0.008099973 0.03993904 -0.03572857 0.008099973 0.03918141 -0.03593158 0.008099973 0.03839999 -0.03599995 0.008099973 0.03761857 -0.03593158 0.008099973 0.03614997 -0.03539711 0.008099973 0.03686088 -0.03572857 0.008099973 0.03450286 -0.03374999 0.008099973 0.03417134 -0.03303909 0.008099973 0.03396832 -0.03228139 0.008099973 0.03614997 -0.02760285 0.008099973 0.04184716 -0.03439253 0.008099973 0.03550744 -0.03494715 0.008099973 0.03389996 -0.03149998 0.008099973 0.03396832 -0.03071856 0.008099973 0.03918141 -0.02706831 0.008099973 0.03839999 -0.02699995 0.008099973 0.04262858 -0.02996087 0.008099973 0.04283159 -0.03071856 0.008099973 0.04289996 -0.03149998 0.008099973 0.03686088 -0.02727133 0.008099973 0.03761857 -0.02706831 0.008099973 0.03993904 -0.02727133 0.008099973 0.04064995 -0.02760285 0.008099973 0.04229706 -0.02924996 0.008099973 0.04283159 -0.03228139 0.008099973 0.04129254 -0.02805274 0.008099973 0.04184716 -0.02860742 0.008099973 0.02899998 -0.0308302 0.01278603 0.02899998 -0.03021389 0.01216977 0.02899998 -0.02949994 0.01166987 0.02899998 -0.02871006 0.01130151 0.02899998 -0.02786821 0.01107591 0.02899998 -0.02699995 0.01099997 0.02899998 -0.02613174 0.01107591 0.02899998 -0.02528989 0.01130151 0.02899998 -0.02449995 0.01166987 0.02899998 -0.02378606 0.01216977 0.02899998 -0.02316975 0.01278603 0.02899998 -0.02266985 0.01349997 0.02899998 -0.02230149 0.01428985 0.02899998 -0.02207595 0.01513171 0.02899998 -0.02199995 0.01599997 0.02899998 -0.02207595 0.01686823 0.02899998 -0.02230149 0.01771008 0.02899998 -0.02266985 0.01849997 0.02899998 -0.02316975 0.01921391 0.02899998 -0.02378606 0.01983022 0.02899998 -0.02449995 0.02033013 0.02899998 -0.02528989 0.02069842 0.02899998 -0.02613174 0.02092403 0.02899998 -0.02699995 0.02099996 0.02899998 -0.02786821 0.02092403 0.02899998 -0.02871006 0.02069842 0.02899998 -0.02949994 0.02033013 0.02899998 -0.03021389 0.01983022 0.02899998 -0.0308302 0.01921391 0.02899998 -0.0313301 0.01849997 0.02899998 -0.03169846 0.01771008 0.02899998 -0.031924 0.01686823 0.02899998 -0.032 0.01599997 0.02899998 -0.031924 0.01513171 0.02899998 -0.03169846 0.01428985 0.02899998 -0.0313301 0.01349997 0.03633034 -0.02205348 0.01672941 0.0363 0.02218568 0.01734995 0.03632366 -0.02208274 0.01686674 0.0363 -0.02218568 0.01734995 0.03640156 -0.02201265 0.01624804 0.03639882 0.02200913 0.01624763 0.03632313 0.02206575 0.01680827 0.03631919 0.02207708 0.01686799 0.03630667 0.0221132 0.01705801 0.03658759 0.02202916 0.01546055 0.03655475 0.02201855 0.01556932 0.03642147 -0.02200126 0.01611381 0.03645223 0.02200835 0.01600015 0.03640604 0.02200376 0.0161944 0.0366913 0.02207785 0.01518124 0.03644526 -0.02200013 0.01599997 0.03644818 -0.02200001 0.01598596 0.0366311 -0.02204561 0.01532614 0.03668904 -0.02207517 0.01518058 0.03670901 0.0220862 0.0151335 0.03670775 -0.02208471 0.0151335 0.03682333 0.02213984 0.01482552 0.03688555 -0.02217555 0.01468652 0.03708982 0.02230584 0.01429122 0.03712844 0.02232986 0.01421386 0.03715145 0.02234578 0.01417541 0.03709542 -0.02231204 0.01429355 0.03715699 -0.02235203 0.01417833 0.03723061 -0.02239996 0.01404041 0.03779023 0.02281731 0.01327246 0.03769743 0.02274399 0.01337569 0.03760629 0.02267646 0.01350349 0.0372802 0.02243477 0.01396059 0.03760379 -0.02267372 0.01350194 0.0376482 -0.02270632 0.0134378 0.0377717 -0.02280133 0.01328492 0.03778654 -0.0228132 0.01326918 0.03823935 -0.02317458 0.01278972 0.03817254 0.02311921 0.01284724 0.03831273 -0.02323311 0.012712 0.03823739 0.02317249 0.01278847 0.03947931 -0.02421474 0.01185882 0.03948014 0.02421563 0.01185989 0.03923153 0.02400171 0.01199865 0.03898429 0.02379339 0.0121783 0.03861624 0.02348321 0.01244574 0.03932386 -0.02408057 0.01194077 0.03897881 -0.02378755 0.01217162 0.03857004 0.0234453 0.01248753 0.03857588 -0.02345174 0.0124948 0.03891873 -0.02373653 0.01221185 0.03981733 -0.02450644 0.01168054 0.04006516 -0.02472037 0.01154983 0.039891 0.02456909 0.01163065 0.04025632 0.02488696 0.01146841 0.03981357 0.02450251 0.01167386 0.04154956 -0.02602487 0.01110684 0.0415495 0.02602487 0.01110792 0.04084593 -0.02540367 0.01126164 0.04102808 0.02556401 0.01121062 0.04072064 0.0252943 0.01131331 0.04048162 0.02508461 0.01139312 0.04048281 -0.02508592 0.01139569 0.04071915 -0.02529275 0.01130843 0.04182273 0.02626633 0.01105409 0.04264998 0.01965111 0.01099997 0.04263806 0.0269894 0.01099997 0.04264998 0.02699995 0.01099997 0.04167163 -0.0261327 0.01108002 0.04264998 -0.0141943 0.01099997 0.04264998 -0.01234132 0.01099997 0.04264998 -0.007919073 0.01099997 0.04264998 -0.001954495 0.01099997 0.04264998 0.001932322 0.01099997 0.04264998 0.007862627 0.01099997 0.04264998 0.0124607 0.01099997 0.04264998 0.01866775 0.01099997 0.04167228 0.02613341 0.01108372 0.0417329 -0.02618676 0.01106655 0.04263806 -0.0269894 0.01099997 0.04264998 -0.02699995 0.01099997 0.02899998 0.02316975 0.01278603 0.02899998 0.02378606 0.01216977 0.02899998 0.02449995 0.01166987 0.02899998 0.02528989 0.01130151 0.02899998 0.02613174 0.01107591 0.02899998 0.02699995 0.01099997 0.02899998 0.02786821 0.01107591 0.02899998 0.02871006 0.01130151 0.02899998 0.02949994 0.01166987 0.02899998 0.03021389 0.01216977 0.02899998 0.0308302 0.01278603 0.02899998 0.0313301 0.01349997 0.02899998 0.03169846 0.01428985 0.02899998 0.031924 0.01513171 0.02899998 0.032 0.01599997 0.02899998 0.031924 0.01686823 0.02899998 0.03169846 0.01771008 0.02899998 0.0313301 0.01849997 0.02899998 0.0308302 0.01921391 0.02899998 0.03021389 0.01983022 0.02899998 0.02949994 0.02033013 0.02899998 0.02871006 0.02069842 0.02899998 0.02786821 0.02092403 0.02899998 0.02699995 0.02099996 0.02899998 0.02613174 0.02092403 0.02899998 0.02528989 0.02069842 0.02899998 0.02449995 0.02033013 0.02899998 0.02378606 0.01983022 0.02899998 0.02316975 0.01921391 0.02899998 0.02266985 0.01849997 0.02899998 0.02230149 0.01771008 0.02899998 0.02207595 0.01686823 0.02899998 0.02199995 0.01599997 0.02899998 0.02207595 0.01513171 0.02899998 0.02230149 0.01428985 0.02899998 0.02266985 0.01349997 0.03761857 0.02706831 0.008099973 0.03839999 0.02699995 0.008099973 0.03686088 0.02727133 0.008099973 0.03993904 0.02727133 0.008099973 0.03918141 0.02706831 0.008099973 0.03614997 0.02760285 0.008099973 0.04064995 0.02760285 0.008099973 0.03495275 0.02860742 0.008099973 0.03417134 0.03303909 0.008099973 0.03450286 0.03374999 0.008099973 0.04064995 0.03539711 0.008099973 0.03993904 0.03572857 0.008099973 0.03550744 0.02805274 0.008099973 0.03450286 0.02924996 0.008099973 0.03417134 0.02996087 0.008099973 0.03396832 0.03071856 0.008099973 0.03389996 0.03149998 0.008099973 0.03550744 0.03494715 0.008099973 0.03918141 0.03593158 0.008099973 0.03839999 0.03599995 0.008099973 0.04129254 0.03494715 0.008099973 0.03396832 0.03228139 0.008099973 0.03614997 0.03539711 0.008099973 0.04184716 0.03439253 0.008099973 0.04229706 0.03374999 0.008099973 0.04262858 0.02996087 0.008099973 0.04229706 0.02924996 0.008099973 0.04184716 0.02860742 0.008099973 0.04129254 0.02805274 0.008099973 0.03686088 0.03572857 0.008099973 0.03761857 0.03593158 0.008099973 0.04262858 0.03303909 0.008099973 0.04283159 0.03228139 0.008099973 0.04289996 0.03149998 0.008099973 0.03495275 0.03439253 0.008099973 0.04283159 0.03071856 0.008099973 0.05368596 -0.001954495 0.01099997 0.05368596 0.001932322 0.01099997 0.05208086 0.001932322 0.01099997 0.05368596 -0.0141943 0.01099997 0.079656 0.01965111 0.01099997 0.06783109 0.02821522 0.01099997 0.05368596 0.01965111 0.01099997 0.05368596 0.02821522 0.01099997 0.05368596 0.01866775 0.01099997 0.05368596 0.0124607 0.01099997 0.05368596 0.007862627 0.01099997 0.04623091 0.0124607 0.01099997 0.05208086 0.0124607 0.01099997 0.04667079 0.0124607 0.01099997 0.05208086 0.01965111 0.01099997 0.05208086 0.02821522 0.01099997 0.04667079 0.02821522 0.01099997 0.04623091 0.02821522 0.01099997 0.05208086 -0.0141943 0.01099997 0.04667079 -0.0141943 0.01099997 0.04090994 -0.02699995 0.01099997 0.04090994 -0.02778494 0.01099997 0.04129254 -0.02805274 0.01099997 0.04623091 -0.0141943 0.01099997 0.04184716 -0.02860742 0.01099997 0.04229706 -0.02924996 0.01099997 0.04623091 -0.03229677 0.01099997 0.04262858 -0.02996087 0.01099997 0.04283159 -0.03071856 0.01099997 0.04289752 -0.03135097 0.01099997 0.04372739 -0.03153818 0.01099997 0.04512625 -0.03192991 0.01099997 0.04548263 -0.03202968 0.01099997 0.04667079 -0.03245377 0.01099997 0.04750972 -0.0327782 0.01099997 0.04885166 -0.03336411 0.01099997 0.04719656 -0.03264147 0.01099997 0.05045211 -0.0341981 0.01099997 0.04979848 -0.03385746 0.01099997 0.05368596 -0.007919073 0.01099997 0.05208086 -0.001954495 0.01099997 0.04667079 -0.001954495 0.01099997 0.04623091 -0.001954495 0.01099997 0.04623091 -0.007919073 0.01099997 0.04667079 -0.007919073 0.01099997 0.05208086 -0.007919073 0.01099997 0.05208086 0.007862627 0.01099997 0.04667079 0.007862627 0.01099997 0.04623091 0.007862627 0.01099997 0.04623091 0.001932322 0.01099997 0.04667079 0.001932322 0.01099997 0.03839999 -0.02699995 0.01099997 0.03918141 -0.02706831 0.01099997 0.03993904 -0.02727133 0.01099997 0.04064995 -0.02760285 0.01099997 0.04623091 -0.01234132 0.01099997 0.04145497 0.02821522 0.01099997 0.04129254 0.02805274 0.01099997 0.04090994 0.02699995 0.01099997 0.04090994 0.02778494 0.01099997 0.04064995 0.02760285 0.01099997 0.03993904 0.02727133 0.01099997 0.03918141 0.02706831 0.01099997 0.03839999 0.02699995 0.01099997 0.04283159 0.03071856 0.01099997 0.04262858 0.02996087 0.01099997 0.04229706 0.02924996 0.01099997 0.04184716 0.02860742 0.01099997 0.04289752 0.03135097 0.01099997 0.04465317 0.03178089 0.01099997 0.04512524 0.03193175 0.01099997 0.04623091 0.03228497 0.01099997 0.04636377 0.03232741 0.01099997 0.05275952 0.03556603 0.01099997 0.05208086 0.03519052 0.01099997 0.05200314 0.03514754 0.01099997 0.05126923 0.03467994 0.01099997 0.04980319 0.03384804 0.01099997 0.0496813 0.0337789 0.01099997 0.04803913 0.03299248 0.01099997 0.04750859 0.03278189 0.01099997 0.04667079 0.0324493 0.01099997 0.05368596 0.03589445 0.01099997 0.05364668 0.0358873 0.01099997 0.05357015 0.03585976 0.01099997 0.05277281 0.03557342 0.01099997 0.05816912 0.03519839 0.01099997 0.0577346 0.03542464 0.01099997 0.05642688 0.03592902 0.01099997 0.05611747 0.03597563 0.01099997 0.05550014 0.03606855 0.01099997 0.05526864 0.03606498 0.01099997 0.05733066 0.03563505 0.01099997 0.05694872 0.03575932 0.01099997 0.05456095 0.03605395 0.01099997 0.05440866 0.03602617 0.01099997 0.05847555 0.03499096 0.01099997 0.05368596 -0.01234132 0.01099997 0.05208086 -0.01234132 0.01099997 0.04667079 -0.01234132 0.01099997 0.05621796 0.03654128 0.01097548 0.05630701 0.04203969 0.00667417 0.05542689 0.04208344 0.006711244 0.05542111 0.0418629 0.007267296 0.06131613 0.04042875 0.006403148 0.06205058 0.03992718 0.006344795 0.06214368 0.04005569 0.005752623 0.0613892 0.04054749 0.005812823 0.06217509 0.04009914 0.00516653 0.05433803 0.03658103 0.01097619 0.05528301 0.036632 0.01097589 0.05534279 0.03889727 0.01034003 0.05535709 0.03943806 0.01003831 0.05398899 0.0393446 0.01005417 0.05537062 0.03995156 0.009681701 0.05538326 0.04042959 0.009274363 0.05386537 0.04032349 0.009303152 0.05800461 0.03594678 0.01097452 0.05713564 0.03631019 0.010975 0.058811 0.03545421 0.0109499 0.06161433 0.04053246 0.004699945 0.06144422 0.04063683 0.004713833 0.06143158 0.04061633 0.005229473 0.06126588 0.04074627 0.004728376 0.06065309 0.04106992 0.004775226 0.06064534 0.04105466 0.005288183 0.06019991 0.04130256 0.004809439 0.05983704 0.04144948 0.004834592 0.05982923 0.04143172 0.005344867 0.05906778 0.0417611 0.004887819 0.05899524 0.04178243 0.004892408 0.05898332 0.04174786 0.005399465 0.04934388 0.04083055 0.005811929 0.04931563 0.04088217 0.005327105 0.04852515 0.04041445 0.005346775 0.0501554 0.0412454 0.005790352 0.05013334 0.04129344 0.005304217 0.04997569 0.04122108 0.005308866 0.04958677 0.04104256 0.00532037 0.05073082 0.04156774 0.005286633 0.05099755 0.04159796 0.005765318 0.05097764 0.04165107 0.005278229 0.05185735 0.04188334 0.005737125 0.05184072 0.04194253 0.005248785 0.05157172 0.04185169 0.005257964 0.05191731 0.0419684 0.005246222 0.05273199 0.04210215 0.005705773 0.05272251 0.04214984 0.005215048 0.05362147 0.04225462 0.005671203 0.05328065 0.04225981 0.005192816 0.05313223 0.04224216 0.005199193 0.05505692 0.04240012 0.005113065 0.05452328 0.04239094 0.005138456 0.05452603 0.04233998 0.005633175 0.05436235 0.0423882 0.005146086 0.05361562 0.04229956 0.005178332 0.0554341 0.04235696 0.005592048 0.05543565 0.04240661 0.005095064 0.05554604 0.04240852 0.005089819 0.05633413 0.0423057 0.005548238 0.05633819 0.04234325 0.005048513 0.05722618 0.04218721 0.005501627 0.0568397 0.04229182 0.00502187 0.05674409 0.04230982 0.005027353 0.05856955 0.04190731 0.00491923 0.05811971 0.04203921 0.004947543 0.05811017 0.04200148 0.005452036 0.05800503 0.04207289 0.004954814 0.05723148 0.0422182 0.004999279 0.06025475 0.04128032 0.004805684 0.05979561 0.039411 0.009162425 0.05957245 0.03897941 0.009596467 0.06086975 0.03829675 0.009514331 0.0590763 0.03801971 0.01029831 0.06019181 0.03736072 0.01026535 0.0603379 0.03756242 0.01014924 0.05933129 0.03851294 0.009976625 0.0605179 0.03781098 0.009934306 0.06083369 0.03824698 0.009557366 0.0598514 0.03689068 0.01053601 0.05881184 0.03750813 0.01055878 0.05974948 0.03674995 0.01061701 0.05854231 0.03698676 0.01075726 0.05950319 0.03640985 0.01072955 0.05915665 0.03593146 0.0108878 0.05827194 0.03646385 0.01089495 0.05912232 0.03588402 0.01090347 0.05392503 0.03985118 0.009703695 0.05532801 0.03833782 0.01058447 0.05405628 0.03881168 0.01035076 0.05239361 0.03999686 0.009327054 0.05252331 0.0395407 0.009721875 0.05097758 0.03945219 0.009346246 0.05117464 0.03902244 0.009736537 0.05266219 0.03905206 0.01006734 0.05280822 0.03853839 0.0103597 0.05138552 0.03856253 0.01007795 0.05160701 0.0380795 0.01036685 0.04966431 0.03868937 0.009345054 0.04967629 0.03867125 0.009364485 0.04988759 0.03835123 0.009707927 0.04991805 0.03830516 0.009743213 0.04992979 0.03828728 0.009756863 0.05020004 0.03787803 0.0100699 0.0542677 0.03713762 0.01090222 0.05529791 0.03719723 0.01090073 0.05419671 0.03769999 0.01077467 0.05531299 0.03776836 0.01077109 0.0541259 0.03826069 0.01059114 0.05079019 0.03698438 0.01059275 0.05079728 0.03697359 0.0105983 0.05183577 0.0375806 0.0106011 0.05088704 0.03683769 0.01066827 0.05206841 0.03707313 0.01078003 0.05230182 0.03656417 0.01090449 0.05109643 0.0365206 0.01076269 0.05110192 0.03651225 0.01076519 0.05295908 0.03800767 0.01059663 0.05311262 0.03746771 0.01077765 0.05326652 0.03692615 0.01090347 0.05341893 0.03639006 0.01097649 0.05021011 0.03786283 0.01008152 0.0503658 0.03762704 0.01026189 0.05048948 0.03743976 0.01035833 0.05049854 0.03742611 0.01036536 0.05543124 0.04224747 0.006150245 0.05453163 0.0422275 0.006188392 0.05363595 0.04214006 0.006223618 0.05275553 0.04198652 0.006255686 0.05540496 0.04125171 0.00833112 0.05541378 0.04158526 0.007810115 0.05372041 0.04147118 0.007862031 0.05539476 0.040865 0.008821845 0.05381089 0.04075461 0.008858084 0.05455088 0.04183852 0.00729829 0.05453985 0.04206097 0.006745994 0.05368524 0.04174947 0.0073269 0.05365711 0.04197227 0.006778061 0.0527898 0.04181873 0.006807208 0.05103987 0.04148316 0.00631082 0.05020713 0.04113256 0.006333947 0.05028069 0.04097217 0.006878376 0.04940485 0.04072064 0.006353914 0.04857629 0.04033708 0.005826115 0.04858142 0.04032927 0.005874276 0.04863291 0.04025125 0.00635761 0.05189019 0.04176765 0.006284713 0.04863554 0.04024738 0.006370306 0.05037671 0.04076272 0.007416248 0.05199986 0.04138189 0.007376372 0.05110037 0.04131901 0.006857335 0.05193758 0.041601 0.006833612 0.04886603 0.03989827 0.007441163 0.04887747 0.03988093 0.00747776 0.05207717 0.04110991 0.007905125 0.05049526 0.04050415 0.007939815 0.05063581 0.04019761 0.00844109 0.04921251 0.03937357 0.008452177 0.04922497 0.03935474 0.00848025 0.05079722 0.03984564 0.008912324 0.05227506 0.04041397 0.008888185 0.05216914 0.04078638 0.008411705 0.05376243 0.04113864 0.008375167 0.0490272 0.03965419 0.007957041 0.04903787 0.03963804 0.007991194 0.0491091 0.03953015 0.008219182 0.04864448 0.04023379 0.006414353 0.04874414 0.04008287 0.006904602 0.04875266 0.04006993 0.006946563 0.04882931 0.03995388 0.007323563 0.05632334 0.04220008 0.006109535 0.05720812 0.04208624 0.006066262 0.05979388 0.04134869 0.00592041 0.05895292 0.04165834 0.005971312 0.05890423 0.04151505 0.006547987 0.05804699 0.04175585 0.006592631 0.05799382 0.04154932 0.007161438 0.05714237 0.04171794 0.007198989 0.05709415 0.04144787 0.00775057 0.06220012 0.04013365 0.004699945 0.060606 0.04097855 0.0058676 0.06054008 0.04085093 0.006453275 0.05973607 0.04121297 0.006501555 0.05965477 0.04102212 0.007079958 0.05883651 0.04131579 0.007121503 0.05874955 0.04105973 0.007682979 0.06032413 0.04043334 0.00760895 0.06107276 0.0400334 0.00756967 0.06121087 0.04025769 0.006991863 0.06194305 0.0397787 0.006940841 0.06197559 0.03982371 0.006821811 0.06044626 0.04066956 0.007036745 0.05954968 0.04077529 0.007646679 0.05864351 0.0407477 0.008223176 0.06111234 0.03863173 0.009100675 0.06132882 0.03893065 0.008731663 0.05999714 0.03980082 0.008680999 0.0613752 0.03899466 0.008618772 0.06017404 0.04014295 0.008160173 0.06159615 0.03929972 0.00808078 0.06170123 0.0394448 0.007824957 0.06178462 0.03955996 0.007520139 0.05631822 0.03710281 0.010899 0.05732095 0.03685551 0.01089709 0.05641961 0.03767037 0.01076698 0.05750834 0.03740692 0.01076233 0.05652064 0.03823626 0.01057684 0.05769509 0.03795665 0.0105682 0.05661988 0.03879195 0.01032763 0.05787849 0.03849631 0.01031368 0.05671572 0.03932869 0.01002007 0.05805546 0.03901714 0.009999334 0.05680662 0.03983777 0.009656488 0.05822306 0.03951036 0.009627878 0.05689108 0.04031091 0.009241282 0.05837851 0.03996789 0.009203672 0.05696785 0.04074072 0.008780181 0.05851936 0.04038232 0.008732914 0.0570358 0.04112118 0.008280575 0.05808556 0.04190582 0.006020188 0.05718034 0.04193055 0.006634652 0.05628484 0.04182243 0.007234215 0.05140173 0.03605824 0.01090031 0.05140531 0.03605282 0.01090192 0.05143767 0.03600382 0.01091653 0.04942226 0.03905594 0.008924782 0.04943352 0.03903883 0.008950173 0.049465 0.03899121 0.009021043 0.04767847 0.03658825 0.004699945 0.04693937 0.03698122 0.004699945 0.04615277 0.03726756 0.004699945 0.04533398 0.03744161 0.004699945 0.04449892 0.03749996 0.004699945 0.06117272 0.04080134 0.004699945 0.06018942 0.0413106 0.004699945 0.05904537 0.04177623 0.004699945 0.06013381 0.04133939 0.004699945 0.05739223 0.04222089 0.004699945 0.05681574 0.04230445 0.004699945 0.05852419 0.0419436 0.004699945 0.05855482 0.04193377 0.004699945 0.05506545 0.04244333 0.004699945 0.05623853 0.04238808 0.004699945 0.05325454 0.04229891 0.004699945 0.05335301 0.04231816 0.004699945 0.05450892 0.04242956 0.004699945 0.05503135 0.0424425 0.004699945 0.05154496 0.0418964 0.004699945 0.05221271 0.0420956 0.004699945 0.05109089 0.04176098 0.004699945 0.05055135 0.04155617 0.004699945 0.04994869 0.04127585 0.004699945 0.04849767 0.04047673 0.004699945 0.04851102 0.04044657 0.005023717 0.04851597 0.04043525 0.005137324 0.04949992 0.04106718 0.004699945 0.08009743 0.02717161 0.004699945 0.07841891 0.02819085 0.004699945 0.07653802 0.02896785 0.004699945 0.07455891 0.02944183 0.004699945 0.07253009 0.02960109 0.004699945 0.06233751 0.02960109 0.004699945 0.06240451 0.03060114 0.004699945 0.06229054 0.0319035 0.004699945 0.06195217 0.03316628 0.004699945 0.06139969 0.03435111 0.004699945 0.06064981 0.03542202 0.004699945 0.0597254 0.03634643 0.004699945 0.05865448 0.03709632 0.004699945 0.05746966 0.03764879 0.004699945 0.05620688 0.03798717 0.004699945 0.05490452 0.03810113 0.004699945 0.05360215 0.03798717 0.004699945 0.05233931 0.03764879 0.004699945 0.05115449 0.03709632 0.004699945 0.05008357 0.03634643 0.004699945 0.003099977 -0.03523087 -0.004362523 0.003099977 -0.03549998 0 0.003099977 -0.03442776 -0.008658885 0.003099977 -0.03310275 -0.01282405 0.003099977 -0.03127592 -0.0167948 0.003099977 -0.02897495 -0.02051097 0.003099977 -0.0262348 -0.02391618 0.003099977 -0.02309691 -0.02695882 0.003099977 -0.01960891 -0.02959287 0.003099977 -0.01582366 -0.03177827 0.003099977 -0.01179856 -0.03348195 0.003099977 -0.007594585 -0.0346781 0.003099977 -0.003275513 -0.03534853 0.003099977 0.001093208 -0.03548312 0.003099977 0.005445361 -0.03507983 0.003099977 0.00971502 -0.03414475 0.003099977 0.01383739 -0.03269213 0.003099977 0.01774996 -0.03074389 0.003099977 0.02139347 -0.02832961 0.003099977 0.02471274 -0.02548587 0.003099977 0.02765733 -0.02225577 0.003099977 0.03018265 -0.01868832 0.003099977 0.03225046 -0.01483756 0.003099977 0.03382939 -0.01076191 0.003099977 0.03489553 -0.006523072 0.003099977 0.03543263 -0.002185404 0.003099977 0.03543263 0.002185404 4.99997e-4 0.03549998 0 0.003099977 0.03489553 0.006523072 0.003099977 0.03382939 0.01076191 0.003099977 0.03225046 0.01483756 0.003099977 0.03018265 0.01868832 0.003099977 0.02765733 0.02225577 0.003099977 0.02471274 0.02548587 0.003099977 0.02139347 0.02832961 0.003099977 0.01774996 0.03074389 0.003099977 0.01383739 0.03269213 0.003099977 0.00971502 0.03414475 0.003099977 0.005445361 0.03507983 0.003099977 0.001093208 0.03548312 0.003099977 -0.003275513 0.03534853 0.003099977 -0.007594585 0.0346781 0.003099977 -0.01179856 0.03348195 0.003099977 -0.01582366 0.03177827 0.003099977 -0.01960891 0.02959287 0.003099977 -0.02309691 0.02695882 0.003099977 -0.0262348 0.02391618 0.003099977 -0.02897495 0.02051097 0.003099977 -0.03127592 0.0167948 0.003099977 -0.03310275 0.01282405 0.003099977 -0.03442776 0.008658885 0.003099977 -0.03523087 0.004362523 0.04725337 0.03967916 -0.005055367 0.03757095 0.03719925 -0.004739403 0.03757095 0.03743535 -0.002200901 0.03757095 0.03749996 0 0.0391162 0.03749996 -0.002127826 0.03912431 0.03749561 -0.002204477 0.03757095 0.0372197 -0.004519462 0.03912431 0.03725922 -0.004747033 0.04124301 0.03753656 -0.004782378 0.0433197 0.03803652 -0.004846096 0.04533082 0.03875344 -0.00493741 0.0391764 0.03749996 -0.002210736 0.03357625 0.03019762 -0.02025175 0.03307282 0.0304405 -0.02041459 0.03305959 0.03156375 -0.01879811 0.03296768 0.03325724 -0.01628488 0.03341925 0.03299903 -0.0163232 0.03324443 0.0325545 -0.01714289 0.03407216 0.03311043 -0.01556974 0.03364986 0.03340905 -0.01551532 0.03393781 0.03378611 -0.01472103 0.03713589 0.03653562 -0.008178293 0.03353381 0.03128969 -0.01870089 0.03360128 0.03018558 -0.02024364 0.03369528 0.03226679 -0.01712197 0.0343436 0.03348296 -0.01481246 0.03468251 0.03443795 -0.01320308 0.03428411 0.03413051 -0.01394468 0.03513103 0.03471052 -0.01250004 0.03495627 0.03547793 -0.01132243 0.03441011 0.03523337 -0.01205027 0.03619796 0.03587448 -0.0100153 0.03555595 0.03569185 -0.01063948 0.03687638 0.0360282 -0.009454727 0.03759044 0.03615647 -0.008957445 0.03506642 0.03648841 -0.008641421 0.03555548 0.03659117 -0.008205831 0.03562182 0.0362569 -0.009333312 0.03635936 0.03640931 -0.008721709 0.0366944 0.03676342 -0.007392406 0.03653478 0.03674501 -0.007486879 0.03586012 0.03663903 -0.007982134 0.03492373 0.03607445 -0.0100131 0.03427135 0.03585928 -0.01075559 0.03380042 0.03616392 -0.009920656 0.03367644 0.03561186 -0.01154541 0.03303164 0.03588032 -0.0109018 0.03360784 0.03609287 -0.0101664 0.03431403 0.03630715 -0.009371638 0.03465038 0.03640097 -0.009012043 0.03469288 0.03640991 -0.008974194 0.03313815 0.03532928 -0.01237976 0.03391712 0.03495556 -0.01282042 0.03265631 0.03500813 -0.01325702 0.03347736 0.03464132 -0.01363152 0.03223234 0.03464591 -0.01417261 0.03309273 0.03428834 -0.01447951 0.03140008 0.034855 -0.01382064 0.03163105 0.03506106 -0.01329684 0.03169304 0.03511637 -0.01315629 0.0315774 0.03381085 -0.01605433 0.03067535 0.03399384 -0.01582205 0.030743 0.03411579 -0.01556789 0.03187334 0.03424698 -0.01510673 0.0310077 0.03444266 -0.01481515 0.03118956 0.03466719 -0.01429796 0.03015697 0.03282225 -0.01813685 0.03020781 0.0329647 -0.0178672 0.03116679 0.03282064 -0.0179823 0.03029137 0.03319871 -0.01742398 0.03039401 0.03348642 -0.0168792 0.03007173 0.03238856 -0.01888471 0.03105056 0.03227096 -0.01894545 0.03155761 0.03215306 -0.0189436 0.03215539 0.03252434 -0.0180208 0.03206539 0.03199613 -0.01891911 0.03277844 0.03280615 -0.01714152 0.03230255 0.03302043 -0.01711863 0.03250694 0.03347891 -0.01622623 0.03134244 0.03333586 -0.01701372 0.03040415 0.03350466 -0.01684111 0.03321409 0.03367304 -0.01544028 0.03276968 0.03390103 -0.01534593 0.03265368 0.03064268 -0.02055019 0.03256803 0.03179961 -0.01887083 0.03256934 0.03066855 -0.02056753 0.03203845 0.03083121 -0.02067661 0.03162556 0.03095769 -0.02076143 0.03151351 0.03097474 -0.02077287 0.0309807 0.03105551 -0.02082705 0.03054755 0.03112125 -0.0208711 0.03000354 0.03204184 -0.01948249 0.02994996 0.03114461 -0.02088683 0.03186112 0.03522753 -0.01284408 0.0323202 0.03553098 -0.01199156 0.03237736 0.03555905 -0.01190394 0.03296071 0.03584545 -0.01101052 0.0309807 -0.03105551 -0.02082705 0.03054755 -0.03112125 -0.0208711 0.03054755 -0.02963459 -0.02293306 0.02994996 0.03085076 -0.02129441 0.0344401 0.02818602 -0.02181202 0.03514522 0.02752262 -0.02129864 0.03569561 0.02496504 -0.02286517 0.03627181 -0.02341192 -0.02144271 0.03627181 -0.0215553 -0.02330827 0.03627181 0.02341192 -0.02144271 0.03627181 -0.01955056 -0.02501368 0.03627181 -0.01741141 -0.02654713 0.03627181 -0.01515263 -0.02789813 0.03627181 -0.01278972 -0.02905738 0.03627181 -0.01033884 -0.03001689 0.03627181 -0.00781697 -0.03077018 0.03627181 -0.005241334 -0.03131192 0.03627181 -0.002629697 -0.03163844 0.03627181 0 -0.03174757 0.03627181 0.002629697 -0.03163844 0.03627181 0.005241334 -0.03131192 0.03627181 0.00781697 -0.03077018 0.03627181 0.01033884 -0.03001689 0.03627181 0.01278972 -0.02905738 0.03627181 0.01515263 -0.02789813 0.03627181 0.01741141 -0.02654713 0.03627181 0.01955056 -0.02501368 0.03627181 0.0215553 -0.02330827 0.03607493 0.02420687 -0.02217078 0.03514522 0.02566385 -0.02350521 0.03360128 0.02874368 -0.02224355 0.03265368 0.02917897 -0.02258044 0.03162556 0.0294789 -0.02281254 0.03054755 0.02963459 -0.02293306 0.02994996 0.02965688 -0.02295029 0.02994996 0.0280534 -0.02485382 0.03054755 0.02763319 -0.0253089 0.02994996 0.02765399 -0.02532798 0.03054755 0.02544182 -0.02751088 0.02994996 0.02546095 -0.02753156 0.02994996 0.01741904 -0.0331881 0.02994996 0.0178982 -0.03295302 0.03054755 0.01788473 -0.03292828 0.02994996 0.02056622 -0.03135722 0.03054755 0.02055078 -0.03133368 0.02994996 0.02128708 -0.03084051 0.03054755 0.02307558 -0.02952373 0.02994996 0.02309298 -0.02954596 0.02994996 0.02485108 -0.02805036 0.02994996 0.01510709 -0.03432232 0.03054755 0.01509577 -0.03429657 0.02994996 0.0132867 -0.03503507 0.03054755 0.01220303 -0.03542912 0.02994996 0.01221221 -0.03545576 0.03054755 0.009226381 -0.03631818 0.02994996 0.009233355 -0.03634548 0.02994996 0.008972227 -0.03640037 0.03054755 0.006186366 -0.03695762 0.02994996 0.006191015 -0.03698539 0.02994996 0.004516124 -0.03719478 0.03054755 0.003103852 -0.03734302 0.02994996 0.003106176 -0.03737109 0.03054755 0 -0.03747177 0.02994996 0 -0.03749996 0.03054755 -0.003103852 -0.03734302 0.02994996 -0.003106176 -0.03737109 0.02994996 -0.0132867 -0.03503507 0.02994996 -0.01221221 -0.03545576 0.03054755 -0.01220303 -0.03542912 0.02994996 -0.009233355 -0.03634548 0.03054755 -0.009226381 -0.03631818 0.02994996 -0.008972227 -0.03640037 0.03054755 -0.006186366 -0.03695762 0.02994996 -0.006191015 -0.03698539 0.02994996 -0.004516124 -0.03719478 0.02994996 -0.01510709 -0.03432232 0.03054755 -0.01509577 -0.03429657 0.02994996 -0.01741904 -0.0331881 0.03054755 -0.01788473 -0.03292828 0.02994996 -0.0178982 -0.03295302 0.03054755 -0.02055078 -0.03133368 0.02994996 -0.02056622 -0.03135722 0.02994996 -0.0280534 -0.02485382 0.02994996 -0.02765399 -0.02532798 0.03054755 -0.02763319 -0.0253089 0.02994996 -0.02546095 -0.02753156 0.03054755 -0.02544182 -0.02751088 0.02994996 -0.02485108 -0.02805036 0.03054755 -0.02307558 -0.02952373 0.02994996 -0.02309298 -0.02954596 0.02994996 -0.02128708 -0.03084051 0.02994996 -0.02965688 -0.02295029 0.02994996 -0.03085076 -0.02129441 0.02994996 -0.03114461 -0.02088683 0.03203845 -0.03083121 -0.02067661 0.03162556 -0.03095769 -0.02076143 0.03162556 -0.0294789 -0.02281254 0.03151351 -0.03097474 -0.02077287 0.03307282 -0.0304405 -0.02041459 0.03265368 -0.03064268 -0.02055019 0.03265368 -0.02917897 -0.02258044 0.03256934 -0.03066855 -0.02056753 0.03360128 -0.02874368 -0.02224355 0.03360128 -0.03018558 -0.02024364 0.03357625 -0.03019762 -0.02025175 0.0344401 -0.02818602 -0.02181202 0.03514522 -0.02752262 -0.02129864 0.03514522 -0.02566385 -0.02350521 0.03569561 -0.02496504 -0.02286517 0.03607493 -0.02420687 -0.02217078 0.03162556 -0.02748799 -0.02517592 0.03162556 -0.02530813 -0.02736634 0.03162556 -0.02295434 -0.02936863 0.03162556 -0.02044284 -0.03116905 0.03162556 -0.01779073 -0.03275525 0.03162556 -0.01501643 -0.03411632 0.03162556 -0.0121389 -0.03524297 0.03162556 -0.009177923 -0.03612732 0.03162556 -0.006153881 -0.03676342 0.03162556 -0.00308752 -0.0371468 0.03162556 0 -0.03727489 0.03162556 0.00308752 -0.0371468 0.03162556 0.006153881 -0.03676342 0.03162556 0.009177923 -0.03612732 0.03162556 0.0121389 -0.03524297 0.03162556 0.01501643 -0.03411632 0.03162556 0.01779073 -0.03275525 0.03162556 0.02044284 -0.03116905 0.03162556 0.02295434 -0.02936863 0.03162556 0.02530813 -0.02736634 0.03162556 0.02748799 -0.02517592 0.03265368 -0.02720826 -0.0249198 0.03265368 -0.02505064 -0.02708786 0.03265368 -0.02272081 -0.02906978 0.03265368 -0.02023482 -0.0308519 0.03265368 -0.01760971 -0.03242194 0.03265368 -0.01486361 -0.03376919 0.03265368 -0.0120154 -0.03488433 0.03265368 -0.009084522 -0.03575974 0.03265368 -0.006091237 -0.03638935 0.03265368 -0.003056108 -0.03676885 0.03265368 0 -0.03689563 0.03265368 0.003056108 -0.03676885 0.03265368 0.006091237 -0.03638935 0.03265368 0.009084522 -0.03575974 0.03265368 0.0120154 -0.03488433 0.03265368 0.01486361 -0.03376919 0.03265368 0.01760971 -0.03242194 0.03265368 0.02023482 -0.0308519 0.03265368 0.02272081 -0.02906978 0.03265368 0.02505064 -0.02708786 0.03265368 0.02720826 -0.0249198 0.03360128 -0.02680242 -0.02454805 0.03360128 -0.02467691 -0.02668374 0.03360128 -0.02238184 -0.02863609 0.03360128 -0.01993292 -0.03039163 0.03360128 -0.01734703 -0.03193831 0.03360128 -0.01464188 -0.03326547 0.03360128 -0.01183611 -0.03436392 0.03360128 -0.008949041 -0.03522628 0.03360128 -0.006000399 -0.03584647 0.03360128 -0.003010511 -0.03622031 0.03360128 0 -0.03634524 0.03360128 0.003010511 -0.03622031 0.03360128 0.006000399 -0.03584647 0.03360128 0.008949041 -0.03522628 0.03360128 0.01183611 -0.03436392 0.03360128 0.01464188 -0.03326547 0.03360128 0.01734703 -0.03193831 0.03360128 0.01993292 -0.03039163 0.03360128 0.02238184 -0.02863609 0.03360128 0.02467691 -0.02668374 0.03360128 0.02680242 -0.02454805 0.0344401 -0.02628242 -0.02407175 0.0344401 -0.02419817 -0.02616608 0.0344401 -0.02194762 -0.02808058 0.0344401 -0.01954621 -0.02980202 0.0344401 -0.0170105 -0.03131866 0.0344401 -0.01435786 -0.03262007 0.0344401 -0.01160651 -0.03369724 0.0344401 -0.008775413 -0.03454285 0.0344401 -0.005883991 -0.03515106 0.0344401 -0.002952098 -0.03551763 0.0344401 0 -0.03564012 0.0344401 0.002952098 -0.03551763 0.0344401 0.005883991 -0.03515106 0.0344401 0.008775413 -0.03454285 0.0344401 0.01160651 -0.03369724 0.0344401 0.01435786 -0.03262007 0.0344401 0.0170105 -0.03131866 0.0344401 0.01954621 -0.02980202 0.0344401 0.02194762 -0.02808058 0.0344401 0.02419817 -0.02616608 0.0344401 0.02628242 -0.02407175 0.03514522 -0.02362865 -0.02555024 0.03514522 -0.02143102 -0.02741962 0.03514522 -0.01908618 -0.02910059 0.03514522 -0.01661014 -0.03058153 0.03514522 -0.0140199 -0.0318523 0.03514522 -0.01133334 -0.03290414 0.03514522 -0.008568882 -0.03372985 0.03514522 -0.00574547 -0.03432369 0.03514522 -0.002882659 -0.03468167 0.03514522 0 -0.03480124 0.03514522 0.002882659 -0.03468167 0.03514522 0.00574547 -0.03432369 0.03514522 0.008568882 -0.03372985 0.03514522 0.01133334 -0.03290414 0.03514522 0.0140199 -0.0318523 0.03514522 0.01661014 -0.03058153 0.03514522 0.01908618 -0.02910059 0.03514522 0.02143102 -0.02741962 0.03514522 0.02362865 -0.02555024 0.03569561 -0.02298527 -0.02485454 0.03569561 -0.02084749 -0.02667301 0.03569561 -0.01856648 -0.02830821 0.03569561 -0.01615786 -0.02974885 0.03569561 -0.01363813 -0.03098499 0.03569561 -0.01102471 -0.03200823 0.03569561 -0.00833553 -0.0328114 0.03569561 -0.005589067 -0.03338915 0.03569561 -0.00280416 -0.03373736 0.03569561 0 -0.03385365 0.03569561 0.00280416 -0.03373736 0.03569561 0.005589067 -0.03338915 0.03569561 0.00833553 -0.0328114 0.03569561 0.01102471 -0.03200823 0.03569561 0.01363813 -0.03098499 0.03569561 0.01615786 -0.02974885 0.03569561 0.01856648 -0.02830821 0.03569561 0.02084749 -0.02667301 0.03569561 0.02298527 -0.02485454 0.03607493 -0.02228724 -0.0240997 0.03607493 -0.02021437 -0.02586299 0.03607493 -0.01800262 -0.02744853 0.03607493 -0.01566714 -0.02884542 0.03607493 -0.013224 -0.03004401 0.03607493 -0.01068991 -0.03103613 0.03607493 -0.008082389 -0.03181499 0.03607493 -0.005419313 -0.03237509 0.03607493 -0.002718985 -0.03271275 0.03607493 0 -0.03282558 0.03607493 0.002718985 -0.03271275 0.03607493 0.005419313 -0.03237509 0.03607493 0.008082389 -0.03181499 0.03607493 0.01068991 -0.03103613 0.03607493 0.013224 -0.03004401 0.03607493 0.01566714 -0.02884542 0.03607493 0.01800262 -0.02744853 0.03607493 0.02021437 -0.02586299 0.03607493 0.02228724 -0.0240997 0.03353339 -0.03128665 -0.01870536 0.03369247 -0.03225737 -0.0171383 0.03324139 -0.03254491 -0.01715999 0.03305912 -0.03156065 -0.01880282 0.03235131 -0.03554856 -0.01193934 0.03184401 -0.03522026 -0.01286846 0.03264415 -0.03499901 -0.01328104 0.03181827 -0.03318685 -0.01709485 0.03229892 -0.03301054 -0.01713722 0.03250384 -0.03347301 -0.01623815 0.03104966 -0.03226774 -0.01895099 0.03155684 -0.03214985 -0.01894891 0.03116458 -0.03281331 -0.01799547 0.03407013 -0.03310722 -0.01557612 0.03427416 -0.03412175 -0.01396501 0.03467059 -0.03442972 -0.01322352 0.03758692 -0.03615587 -0.00895971 0.03686487 -0.03602582 -0.009463489 0.03618091 -0.03587013 -0.01003068 0.03554213 -0.03568744 -0.01065403 0.03494888 -0.03547501 -0.01133149 0.03512334 -0.03470635 -0.01251119 0.03440159 -0.03522908 -0.01206254 0.03206467 -0.03199297 -0.01892423 0.03029364 -0.03319764 -0.01742345 0.0302065 -0.03295648 -0.01788109 0.03015398 -0.03281116 -0.01815694 0.03007143 -0.03238493 -0.01889044 0.03000098 -0.03202104 -0.0195167 0.03040051 -0.03349339 -0.01686209 0.03133821 -0.03332555 -0.01703369 0.03041338 -0.03352904 -0.01679438 0.03157389 -0.03380471 -0.0160672 0.0318706 -0.03424346 -0.0151146 0.03222697 -0.03464072 -0.0141853 0.03119748 -0.03467535 -0.01427811 0.03100496 -0.0344389 -0.01482355 0.03074812 -0.03412336 -0.01555132 0.03067153 -0.0339874 -0.0158357 0.03276723 -0.03389763 -0.01535326 0.03308784 -0.03428328 -0.01449126 0.03426337 -0.03585636 -0.01076537 0.03307229 -0.03589743 -0.01084536 0.0329532 -0.03583979 -0.01102608 0.03366714 -0.03560751 -0.01155877 0.03312379 -0.03532075 -0.01240402 0.03390401 -0.03494721 -0.01284283 0.03346633 -0.03463238 -0.01365375 0.03393346 -0.03378117 -0.01473182 0.03560328 -0.03625255 -0.009350061 0.03490877 -0.03607004 -0.01002895 0.03713208 -0.03653508 -0.008180737 0.03634685 -0.03640699 -0.008731305 0.03584176 -0.03663903 -0.007986545 0.03575646 -0.03662657 -0.008046209 0.0350449 -0.03648483 -0.00865817 0.03479278 -0.03643465 -0.008875012 0.03469806 -0.03640913 -0.008974015 0.03429961 -0.03630185 -0.009390354 0.03387689 -0.03618806 -0.009832084 0.0336017 -0.0360887 -0.01017868 0.0334165 -0.03299325 -0.01633417 0.03364771 -0.03340578 -0.01552206 0.03321182 -0.03366971 -0.01544725 0.03296476 -0.03325146 -0.01629632 0.0327751 -0.03279638 -0.01715934 0.0325675 -0.03179651 -0.01887571 0.03668987 -0.03676319 -0.007393479 0.03680115 -0.03677946 -0.007315635 0.03174883 -0.03515869 -0.01304274 0.0316357 -0.03505951 -0.01329624 0.03139543 -0.03484892 -0.01383453 0.0391162 -0.03749996 -0.002127826 0.03912431 -0.03749728 -0.002176105 0.03915572 -0.03749996 -0.002182304 0.03912431 -0.03726089 -0.004733979 0.04124301 -0.03753823 -0.004769206 0.0433197 -0.03803819 -0.004832744 0.04533082 -0.03875517 -0.00492382 0.04725337 -0.03968095 -0.00504148 0.03757095 -0.03720092 -0.00472635 0.03757095 -0.03722006 -0.004519522 0.03757095 -0.03743696 -0.002172648 0.03757095 -0.03749996 0 0.04403042 -0.03817635 0.005508184 0.04421645 -0.03825569 0.005502223 0.04425263 -0.03815644 0.006024599 0.04774308 -0.03982073 0.00591129 0.04282271 -0.0322799 0.01092576 0.04280012 -0.03241735 0.01090645 0.04481983 -0.03294175 0.01090961 0.0422886 -0.0337646 0.01049274 0.04217869 -0.03393763 0.01040488 0.0443502 -0.03449398 0.01040244 0.04210245 -0.03405767 0.01034396 0.0442 -0.03499037 0.01013016 0.04229611 -0.03374946 0.01049876 0.04450494 -0.03398245 0.01062321 0.04244548 -0.03344768 0.01061874 0.04466217 -0.03346276 0.01079201 0.04261982 -0.03303611 0.01075929 0.0425589 -0.03321844 0.01070994 0.04278439 -0.03251326 0.01089298 0.04275667 -0.03262645 0.01087021 0.0426523 -0.03293895 0.01078563 0.04289263 -0.03149974 0.01099324 0.04287815 -0.03194242 0.01097315 0.04729425 -0.03858977 0.008040666 0.04745322 -0.03828924 0.00852704 0.04763448 -0.03794676 0.008983433 0.04704767 -0.03905576 0.00700742 0.04715883 -0.03884565 0.007531642 0.04781085 -0.0397064 0.00644648 0.04696077 -0.03921991 0.006475448 0.04689759 -0.0393393 0.005942702 0.04609209 -0.03877764 0.006502628 0.04603385 -0.03890174 0.005972206 0.0464996 -0.03922957 0.00542891 0.04598432 -0.03900974 0.00544542 0.04531359 -0.03872364 0.005466997 0.04768329 -0.03992193 0.005380928 0.04723757 -0.03966122 0.005398988 0.04684716 -0.03943282 0.005414783 0.04168444 -0.03616243 0.008592903 0.0416494 -0.03633892 0.008383154 0.04368537 -0.03669112 0.008583843 0.0416423 -0.03637468 0.008323371 0.04358655 -0.03701776 0.008107841 0.04174095 -0.03587794 0.008930921 0.04379749 -0.0363205 0.009030103 0.04175901 -0.03578686 0.009039163 0.04333508 -0.037849 0.00604707 0.04337626 -0.03771293 0.00657171 0.04429984 -0.03802394 0.006550967 0.04527699 -0.03820425 0.007054924 0.04343175 -0.03752946 0.007094562 0.04350185 -0.03729766 0.007609009 0.04154562 -0.03686147 0.007509946 0.04144889 -0.0373485 0.00607866 0.04239928 -0.03758597 0.006066739 0.04145711 -0.03730714 0.00626266 0.04243409 -0.03744679 0.00658977 0.04147052 -0.03723973 0.00656259 0.04151451 -0.03701829 0.007117211 0.04150229 -0.03707963 0.006963491 0.0414738 -0.03722327 0.006603777 0.04161834 -0.0364952 0.008122026 0.04156315 -0.03677332 0.007657289 0.04155999 -0.03678923 0.007630646 0.04710525 -0.0337615 0.01090872 0.0420295 -0.0344249 0.01011991 0.04197657 -0.03469139 0.009957373 0.04405653 -0.03546458 0.009808301 0.04536837 -0.03798216 0.007573783 0.04547917 -0.03771293 0.008077263 0.04560881 -0.03739786 0.008558034 0.04575622 -0.03703969 0.009008884 0.04392176 -0.03590995 0.009440124 0.04591977 -0.03664225 0.009423255 0.04609739 -0.03621053 0.009795486 0.0462867 -0.03575056 0.01012086 0.046485 -0.03526878 0.01039612 0.04668939 -0.03477215 0.01061928 0.04689705 -0.03426748 0.01078987 0.04904329 -0.03528439 0.01078736 0.04930073 -0.03479784 0.01090764 0.04878646 -0.0357697 0.01061457 0.04853379 -0.03624719 0.01038855 0.04805505 -0.03715193 0.009780049 0.04828882 -0.0367102 0.01010972 0.04783594 -0.03756606 0.009403049 0.04331034 -0.03797936 0.005524039 0.04329764 -0.03797584 0.005524337 0.04236453 -0.03772062 0.0055449 0.041426 -0.03746384 0.005565583 0.04510003 -0.03863257 0.005473852 0.04515218 -0.03850752 0.005999565 0.04520505 -0.03837901 0.0065279 0.04193145 -0.0349186 0.009818732 0.04185301 -0.0353136 0.009479224 0.04184341 -0.03536212 0.009437561 0.04177916 -0.03568565 0.009159445 0.04725229 -0.03972458 0.004699945 0.04720515 -0.03969609 0.004699945 0.04586827 -0.03902029 0.004699945 0.04532575 -0.03879535 0.004699945 0.04448974 -0.03844863 0.004699945 0.04331725 -0.03806251 0.004699945 0.0430715 -0.03798156 0.004699945 0.04236608 -0.0377922 0.004699945 0.04124146 -0.03755438 0.004699945 0.04098409 -0.03749996 0.004699945 0.0391764 -0.03749996 0.002210736 0.0391162 -0.03749996 0.002127826 0.0408954 -0.03620505 0.008419275 0.04128491 -0.03493863 0.009743034 0.04122203 -0.03499501 0.009699404 0.04118716 -0.0351445 0.009581267 0.03918135 -0.03593152 0.008887708 0.03887224 -0.03597509 0.008892536 0.03920274 -0.03629297 0.008289933 0.0395503 -0.03585046 0.008934497 0.03944474 -0.03587371 0.008920967 0.03944104 -0.03588277 0.008908092 0.03942441 -0.03587818 0.008918404 0.03918397 -0.03593116 0.008887648 0.03993892 -0.03572827 0.009039342 0.03993368 -0.03573054 0.009037196 0.04016232 -0.0360409 0.008613467 0.04103827 -0.03571373 0.009032487 0.04034709 -0.03555303 0.009205043 0.04064482 -0.03538829 0.009357333 0.04041182 -0.0355252 0.009231328 0.04035866 -0.03554803 0.009209692 0.04113221 -0.0350756 0.009637057 0.04107767 -0.035115 0.009603083 0.04093813 -0.03521585 0.009516 0.04165732 -0.03460472 0.0100013 0.04165846 -0.03460335 0.01000213 0.04183685 -0.03438413 0.01013946 0.0405308 -0.03714472 0.006361842 0.03962051 -0.03698599 0.006599485 0.03974413 -0.03716522 0.005821704 0.04044044 -0.03728348 0.005683243 0.04084944 -0.03735291 0.005601882 0.04124265 -0.03742855 0.005577147 0.04076159 -0.03660959 0.007757961 0.04063946 -0.03692281 0.007066369 0.03979331 -0.03676259 0.007290124 0.0399751 -0.03644752 0.007967174 0.03757095 -0.03686457 0.006873786 0.03851228 -0.03698855 0.006329715 0.03785634 -0.03670197 0.007497429 0.03872936 -0.03684329 0.006977617 0.03872358 -0.03701639 0.006207644 0.03912377 -0.03707474 0.006056308 0.03946518 -0.03712457 0.005927205 0.03823012 -0.03638452 0.008294999 0.03814744 -0.03645807 0.008119165 0.03896379 -0.03661328 0.007641017 0.03795129 -0.03663253 0.007702171 0.0379033 -0.03667515 0.007600188 0.03833878 -0.03625148 0.008519113 0.03843879 -0.03612887 0.008725523 0.03854596 -0.03599762 0.008946597 0.0369209 -0.02724999 0.01100623 0.03686267 -0.02727538 0.0110082 0.03390532 -0.03168606 0.01429408 0.03391289 -0.03184103 0.01474934 0.03391921 -0.03191024 0.01513421 0.03392493 -0.03197348 0.01548594 0.0339806 -0.03227925 0.01679998 0.03392589 -0.03198194 0.01557594 0.0339263 -0.03198605 0.01600009 0.03392666 -0.03198927 0.01632738 0.03391921 -0.03191304 0.01686668 0.03394728 -0.03208708 0.01709866 0.03391647 -0.03188461 0.01706784 0.03392124 -0.03193724 0.01733154 0.03391295 -0.03184175 0.01724791 0.03390532 -0.03171986 0.01764994 0.03394073 -0.03089576 0.01286584 0.03390407 -0.03130728 0.01346087 0.03390389 -0.03132766 0.01350122 0.0339021 -0.03149998 0.0138421 0.03390103 -0.03159862 0.01403725 0.03409624 -0.03020775 0.01217687 0.03401076 -0.03050756 0.01243674 0.03397256 -0.03071933 0.01267081 0.03395318 -0.03082656 0.0127893 0.03437077 -0.02949917 0.01167112 0.03418201 -0.02993202 0.01194989 0.03417158 -0.02996098 0.01197141 0.03414714 -0.03002917 0.01202207 0.03479492 -0.02880668 0.01133781 0.03465062 -0.02901154 0.01142245 0.03450977 -0.02925395 0.01154434 0.03438138 -0.02947485 0.01165544 0.03487801 -0.02870893 0.01130491 0.03495943 -0.02861309 0.01127272 0.03573548 -0.02787363 0.01107686 0.03560721 -0.02797144 0.01109528 0.03551197 -0.02805781 0.01111614 0.03516042 -0.02837663 0.01119321 0.03574413 -0.02786821 0.01107615 0.03615474 -0.02761042 0.01103973 0.03629225 -0.02752411 0.01102751 0.03768891 -0.02705651 0.01100027 0.0376197 -0.0270732 0.01100075 0.03700548 -0.0272215 0.01100486 0.03839999 -0.03599995 0.008987188 0.03803229 -0.03598493 0.009130358 0.03778016 -0.03595238 0.00927329 0.03686308 -0.03572314 0.01001518 0.03697043 -0.03576689 0.009895563 0.03711175 -0.03580462 0.009776115 0.03751033 -0.03591114 0.00943917 0.03761601 -0.03593116 0.009366393 0.03761857 -0.03593146 0.009364902 0.03652822 -0.03558671 0.01038837 0.0364412 -0.0355513 0.01048535 0.03558558 -0.03499525 0.01179945 0.03586268 -0.03521645 0.01130622 0.0360254 -0.03531062 0.01107531 0.03615617 -0.03538632 0.0108897 0.03495746 -0.03439813 0.01306688 0.03520107 -0.0346539 0.01253759 0.03533774 -0.03479737 0.01224064 0.03538656 -0.03483635 0.0121538 0.03551447 -0.03493845 0.01192605 0.03455072 -0.03383088 0.01416248 0.03459364 -0.03389078 0.01404684 0.03487569 -0.03428405 0.01328712 0.03495323 -0.03439217 0.01307833 0.03424537 -0.03322899 0.01524549 0.03436702 -0.03346872 0.01481413 0.03438609 -0.03350639 0.01474636 0.03450822 -0.03374713 0.01431316 0.0340358 -0.03259724 0.01630574 0.03417968 -0.03303086 0.01557803 0.03418129 -0.03303569 0.01556986 0.03364944 -0.03130435 0.01854401 0.03365564 -0.03132992 0.01849985 0.03629505 -0.02412897 0.02009356 0.03627729 -0.02436953 0.02025216 0.03626912 -0.02442431 0.02028143 0.0363 -0.02266985 0.01849997 0.0363 -0.02316975 0.01921391 0.0363 -0.02378606 0.01983022 0.0363 -0.02392762 0.01994466 0.0363 -0.02230149 0.01771008 0.03375005 -0.03154939 0.01807433 0.03388369 -0.03169608 0.01770913 0.03366047 -0.03134977 0.01846551 0.03364354 -0.03121924 0.01867413 0.03363227 -0.03105485 0.01892542 0.03385084 -0.03027904 0.01977455 0.03369653 -0.03069746 0.01936572 0.03367751 -0.03076875 0.01928573 0.03366822 -0.03082746 0.01921176 0.03402549 -0.02991509 0.02006226 0.03388309 -0.03021192 0.01982766 0.03467482 -0.02870726 0.02069169 0.03443759 -0.02914518 0.02050644 0.03436166 -0.02928537 0.02044713 0.03425043 -0.02949368 0.02031981 0.03473299 -0.02859979 0.02073711 0.034909 -0.02826583 0.02083706 0.03551667 -0.02699995 0.02099996 0.03545814 -0.02712851 0.02099287 0.03526592 -0.02755075 0.02096956 0.03514009 -0.02780288 0.02092283 0.03510862 -0.02786582 0.02091115 0.03568917 -0.02657133 0.02097046 0.03579246 -0.02631473 0.02095282 0.03607082 -0.02543872 0.02074402 0.03604787 -0.02553427 0.02078032 0.03601747 -0.02563977 0.02081143 0.03585284 -0.02613365 0.02091485 0.03625726 -0.0245034 0.02032369 0.03619426 -0.02492517 0.02054917 0.03610575 -0.02529346 0.02068895 0.0363 0.02230149 0.01771008 0.0363 0.02266985 0.01849997 0.0363 0 0.03114998 0.0363 -0.02114957 0.02286952 0.0363 -0.02297121 0.02103906 0.0363 -0.002580165 0.03104293 0.0363 -0.005142688 0.03072249 0.0363 -0.01486742 0.02737301 0.0363 -0.0170837 0.0260474 0.0363 -0.01918256 0.0245428 0.0363 -0.007669806 0.03019094 0.0363 -0.01014423 0.0294519 0.0363 -0.01254898 0.02851045 0.0363 0.007669806 0.03019094 0.0363 0.005142688 0.03072249 0.0363 0.002580165 0.03104293 0.0363 0.0170837 0.0260474 0.0363 0.01486742 0.02737301 0.0363 0.02316975 0.01921391 0.0363 0.01254898 0.02851045 0.0363 0.01014423 0.0294519 0.0363 0.02392762 0.01994466 0.0363 0.02297121 0.02103906 0.0363 0.02378606 0.01983022 0.0363 0.02114957 0.02286952 0.0363 0.01918256 0.0245428 0.03390103 0.03159862 0.01403725 0.03390532 0.03168606 0.01429408 0.03363841 0.03097856 0.01902836 0.03367018 0.03082627 0.01921063 0.03381693 0.03035837 0.01970422 0.03388702 0.03020936 0.01982456 0.03369903 0.03068798 0.01937615 0.03365516 0.03132998 0.01849991 0.03363633 0.0312258 0.01867252 0.03363639 0.03122037 0.01868027 0.03365582 0.03133332 0.01849436 0.03375059 0.03155052 0.01807177 0.03391647 0.03188461 0.01706784 0.03391295 0.03184175 0.01724791 0.03390532 0.03171986 0.01764994 0.03388363 0.03169608 0.01770913 0.03392666 0.03198927 0.01632738 0.03391921 0.03191304 0.01686668 0.03391921 0.03191024 0.01513421 0.03392493 0.03197348 0.01548594 0.03392589 0.03198194 0.01557594 0.0339263 0.03198605 0.01600009 0.03391289 0.03184103 0.01474934 0.0339021 0.03149998 0.0138421 0.03390389 0.03132766 0.01350122 0.03395318 0.03082656 0.0127893 0.03394073 0.03089576 0.01286584 0.03390407 0.03130728 0.01346087 0.03397256 0.03071933 0.01267081 0.03401076 0.03050756 0.01243674 0.03418201 0.02993202 0.01194989 0.03417158 0.02996098 0.01197141 0.03414714 0.03002917 0.01202207 0.03409624 0.03020775 0.01217687 0.03479492 0.02880668 0.01133781 0.03465062 0.02901154 0.01142245 0.03450977 0.02925395 0.01154434 0.03438138 0.02947485 0.01165544 0.03437077 0.02949917 0.01167112 0.03573548 0.02787363 0.01107686 0.03560721 0.02797144 0.01109528 0.03551197 0.02805781 0.01111614 0.03516042 0.02837663 0.01119321 0.03495943 0.02861309 0.01127272 0.03487801 0.02870893 0.01130491 0.03768891 0.02705651 0.01100027 0.0376197 0.0270732 0.01100075 0.03700548 0.0272215 0.01100486 0.0369209 0.02724999 0.01100623 0.03686267 0.02727538 0.0110082 0.03629225 0.02752411 0.01102751 0.03615474 0.02761042 0.01103973 0.03574413 0.02786821 0.01107615 0.03617095 0.02503883 0.0205993 0.03626084 0.02450114 0.02032786 0.0362671 0.02446377 0.02030897 0.03626954 0.02442413 0.02028203 0.0361402 0.02517634 0.02065557 0.03610813 0.02529197 0.02069181 0.03571653 0.02651464 0.02097636 0.03585183 0.02613365 0.02091264 0.03595602 0.02584016 0.02086359 0.03606677 0.02544111 0.02073854 0.03517329 0.02774262 0.02094453 0.03545838 0.02712595 0.02099055 0.03551667 0.02699995 0.02099996 0.0356943 0.02656865 0.02097898 0.03480261 0.02846878 0.02077937 0.03511005 0.02786648 0.02091634 0.03514361 0.02780079 0.0209313 0.03443694 0.02914702 0.02050137 0.03462249 0.02880555 0.02066254 0.03467398 0.02870923 0.02069598 0.03402549 0.02991509 0.02006226 0.0342465 0.02949851 0.0203278 0.03427106 0.02945226 0.02035731 0.03854596 0.03599762 0.008946597 0.03839999 0.03599995 0.008987188 0.03647518 0.03556758 0.01044297 0.03615373 0.03539037 0.01088398 0.03399658 0.03242743 0.01657789 0.03397756 0.03228008 0.01680105 0.03395104 0.03207427 0.01711291 0.03438675 0.03350698 0.01474499 0.03419667 0.03310692 0.01545625 0.03417623 0.03303754 0.01557081 0.03417372 0.03302896 0.015585 0.03467524 0.03402513 0.01379632 0.03458493 0.03388077 0.01406705 0.0345031 0.03374981 0.01431256 0.03449928 0.03374379 0.01432389 0.03519654 0.03464722 0.01255047 0.03506326 0.03451931 0.01282155 0.03495949 0.03438717 0.0130822 0.03486931 0.03427231 0.01330876 0.03557169 0.03499525 0.01180654 0.03551882 0.03495669 0.01189482 0.03550809 0.03494644 0.01191657 0.03538924 0.03483223 0.01215851 0.03598839 0.03529924 0.01111078 0.03710097 0.035802 0.009784698 0.03690403 0.03574407 0.009961605 0.03686165 0.0357266 0.01000916 0.03651112 0.0355823 0.01040267 0.03820317 0.03599566 0.009056389 0.03783547 0.03596442 0.009231984 0.03777521 0.03595346 0.009272515 0.0376197 0.03592526 0.009377241 0.03735941 0.035878 0.009552478 0.0392673 0.03591561 0.008893787 0.03942364 0.03587782 0.008919179 0.0394504 0.03587132 0.00892353 0.03964483 0.03582435 0.00895518 0.03918164 0.03593158 0.008887767 0.03918141 0.03593158 0.008887767 0.03886073 0.03597635 0.008893668 0.04035562 0.03553968 0.009216606 0.04034966 0.03554272 0.009213805 0.04011011 0.03566235 0.009100914 0.03993701 0.03572261 0.009046733 0.04129183 0.03494644 0.009742677 0.04128205 0.03495591 0.009735703 0.0412265 0.03499525 0.009701609 0.04106706 0.03510808 0.009603857 0.04070067 0.03536736 0.009379148 0.04064822 0.03539359 0.009354412 0.04165011 0.03459781 0.009999692 0.04177582 0.0344755 0.01008981 0.042288 0.03374457 0.0104925 0.04217475 0.03393572 0.01040184 0.04210245 0.03405767 0.01034396 0.04184317 0.03438937 0.0101422 0.04242098 0.03352022 0.01059895 0.04245012 0.03345 0.01062244 0.04282766 0.03228086 0.01092946 0.04281866 0.03235143 0.01092153 0.04280143 0.03241759 0.01090735 0.04267072 0.03291791 0.01080024 0.04262167 0.03303623 0.01076072 0.04289126 0.0317794 0.01098603 0.04289901 0.0315926 0.01099556 0.04289841 0.03149998 0.01099729 0.04930073 0.03479784 0.01090764 0.04531592 0.03872013 0.005467116 0.04510068 0.03863334 0.005473732 0.04515218 0.03850752 0.005999565 0.04429984 0.03802394 0.006550967 0.04337626 0.03771293 0.00657171 0.04343175 0.03752946 0.007094562 0.04239928 0.03758597 0.006066739 0.04236757 0.0377109 0.005545556 0.041426 0.03746384 0.005565583 0.04481983 0.03294175 0.01090961 0.04466217 0.03346276 0.01079201 0.04450494 0.03398245 0.01062321 0.0443502 0.03449398 0.01040244 0.0442 0.03499037 0.01013016 0.04392176 0.03590995 0.009440124 0.04379749 0.0363205 0.009030103 0.04177916 0.03568565 0.009159445 0.0416494 0.03633892 0.008383154 0.04368537 0.03669112 0.008583843 0.0416423 0.03637468 0.008323371 0.04358655 0.03701776 0.008107841 0.04168444 0.03616243 0.008592903 0.04174095 0.03587794 0.008930921 0.04175901 0.03578686 0.009039163 0.04154562 0.03686147 0.007509946 0.04350185 0.03729766 0.007609009 0.04151451 0.03701829 0.007117211 0.04150229 0.03707963 0.006963491 0.04144889 0.0373485 0.00607866 0.04145711 0.03730714 0.00626266 0.04243409 0.03744679 0.00658977 0.04147052 0.03723973 0.00656259 0.0414738 0.03722327 0.006603777 0.04155999 0.03678923 0.007630646 0.04156315 0.03677332 0.007657289 0.04161834 0.0364952 0.008122026 0.04333508 0.037849 0.00604707 0.04425263 0.03815644 0.006024599 0.04420924 0.03827404 0.005501091 0.04364091 0.03804492 0.005518496 0.0433157 0.03795963 0.00552541 0.04330325 0.03795635 0.005525708 0.04763448 0.03794676 0.008983433 0.04783594 0.03756606 0.009403049 0.04729425 0.03858977 0.008040666 0.04745322 0.03828924 0.00852704 0.04609209 0.03877764 0.006502628 0.04696077 0.03921991 0.006475448 0.04603385 0.03890174 0.005972206 0.04689759 0.0393393 0.005942702 0.04599189 0.03899258 0.005446374 0.04520505 0.03837901 0.0065279 0.04781085 0.0397064 0.00644648 0.04704767 0.03905576 0.00700742 0.04715883 0.03884565 0.007531642 0.04767888 0.03993028 0.00538057 0.04723083 0.03967398 0.005398452 0.04683792 0.03944927 0.005414068 0.04615366 0.03905779 0.005441367 0.04710525 0.0337615 0.01090872 0.04904329 0.03528439 0.01078736 0.04853379 0.03624719 0.01038855 0.04878646 0.0357697 0.01061457 0.04805505 0.03715193 0.009780049 0.04828882 0.0367102 0.01010972 0.04527699 0.03820425 0.007054924 0.04536837 0.03798216 0.007573783 0.04547917 0.03771293 0.008077263 0.04560881 0.03739786 0.008558034 0.04575622 0.03703969 0.009008884 0.04591977 0.03664225 0.009423255 0.04609739 0.03621053 0.009795486 0.0462867 0.03575056 0.01012086 0.046485 0.03526878 0.01039612 0.04668939 0.03477215 0.01061928 0.04689705 0.03426748 0.01078987 0.04405653 0.03546458 0.009808301 0.04197657 0.03469139 0.009957373 0.0420295 0.0344249 0.01011991 0.04184341 0.03536212 0.009437561 0.04185301 0.0353136 0.009479224 0.04193145 0.0349186 0.009818732 0.04774308 0.03982073 0.00591129 0.04104238 0.03571474 0.009031534 0.0411911 0.03514552 0.009580314 0.04017037 0.03604269 0.008610725 0.04035836 0.03554898 0.009209096 0.03843879 0.03612887 0.008725523 0.03920745 0.03629392 0.008287847 0.03944545 0.03588372 0.008906185 0.04089975 0.03620606 0.008418202 0.03757095 0.03686457 0.006873786 0.03785634 0.03670197 0.007497429 0.03843528 0.03697746 0.006350696 0.03873479 0.03684413 0.006975233 0.03851205 0.03698825 0.006317853 0.03912383 0.0370745 0.006056189 0.03833878 0.03625148 0.008519113 0.0389688 0.03661417 0.007638752 0.03823012 0.03638452 0.008294999 0.0379033 0.03667515 0.007600188 0.03795129 0.03663253 0.007702171 0.03814744 0.03645807 0.008119165 0.03998374 0.03644925 0.007964253 0.03980261 0.03676426 0.007286965 0.03963053 0.03698766 0.006596088 0.03947585 0.03712409 0.005905687 0.04053622 0.03714567 0.00636053 0.04044353 0.03728103 0.00566399 0.04050427 0.03729087 0.005648791 0.04124242 0.03742939 0.005582153 0.04064452 0.03692376 0.007065117 0.04076629 0.03661054 0.007756829 0.04098409 0.03749996 0.004699945 0.03915572 0.03749996 0.002182304 0.0391162 0.03749996 0.002127826 0.04245972 0.03781574 0.004699945 0.04124128 0.03755503 0.004699945 0.04725301 0.03972351 0.004699945 0.04729032 0.03974354 0.004699945 0.04331594 0.03806787 0.004699945 0.04389673 0.03823894 0.004699945 0.04664897 0.03939956 0.004699945 0.04533022 0.03878432 0.004699945 0.04529374 0.03876727 0.004699945 0.003099977 0.03641027 0.008974313 0.003099977 0.03722655 0.004520118 0.003099977 0.03749996 0 0.003099977 0.03722655 -0.004520118 0.003099977 0.03641027 -0.008974313 0.003099977 0.03506308 -0.01329767 0.003099977 0.03320455 -0.01742708 0.003099977 0.03086185 -0.0213024 0.003099977 0.02806913 -0.02486705 0.003099977 0.02486705 -0.02806913 0.003099977 0.0213024 -0.03086185 0.003099977 0.01742708 -0.03320455 0.003099977 0.01329767 -0.03506308 0.003099977 0.008974313 -0.03641027 0.003099977 0.004520118 -0.03722655 0.003099977 0 -0.03749996 0.003099977 -0.004520118 -0.03722655 0.003099977 -0.008974313 -0.03641027 0.003099977 -0.01329767 -0.03506308 0.003099977 -0.01742708 -0.03320455 0.003099977 -0.0213024 -0.03086185 0.003099977 -0.02486705 -0.02806913 0.003099977 -0.02806913 -0.02486705 0.003099977 -0.03086185 -0.0213024 0.003099977 -0.03320455 -0.01742708 0.003099977 -0.03506308 -0.01329767 0.003099977 -0.03641027 -0.008974313 0.003099977 -0.03722655 -0.004520118 0.003099977 -0.03749996 0 0.003099977 -0.03722655 0.004520118 0.003099977 -0.03641027 0.008974313 0.003099977 -0.03506308 0.01329767 0.003099977 -0.03320455 0.01742708 0.003099977 -0.03086185 0.0213024 0.003099977 -0.02806913 0.02486705 0.003099977 -0.02486705 0.02806913 0.003099977 -0.0213024 0.03086185 0.003099977 -0.01742708 0.03320455 0.003099977 -0.01329767 0.03506308 0.003099977 -0.008974313 0.03641027 0.003099977 -0.004520118 0.03722655 0.003099977 0 0.03749996 0.003099977 0.004520118 0.03722655 0.003099977 0.008974313 0.03641027 0.003099977 0.01329767 0.03506308 0.003099977 0.01742708 0.03320455 0.003099977 0.0213024 0.03086185 0.003099977 0.02486705 0.02806913 0.003099977 0.02806913 0.02486705 0.003099977 0.03086185 0.0213024 0.003099977 0.03320455 0.01742708 0.003099977 0.03506308 0.01329767 0.04725337 -0.03967916 0.005055367 0.03757095 -0.03719925 0.004739403 0.03757095 -0.03743535 0.002200901 0.03912431 -0.03749561 0.002204477 0.03757095 -0.0372197 0.004519462 0.03912431 -0.03725922 0.004747033 0.04124301 -0.03753656 0.004782378 0.0433197 -0.03803652 0.004846096 0.04533082 -0.03875344 0.00493741 0.03357625 -0.03019762 0.02025175 0.03307282 -0.0304405 0.02041459 0.03305959 -0.03156375 0.01879811 0.03296768 -0.03325724 0.01628488 0.03341925 -0.03299903 0.0163232 0.03324443 -0.0325545 0.01714289 0.03407216 -0.03311043 0.01556974 0.03364986 -0.03340905 0.01551532 0.03393781 -0.03378611 0.01472103 0.03713589 -0.03653562 0.008178293 0.03353381 -0.03128969 0.01870089 0.03360128 -0.03018558 0.02024364 0.03369528 -0.03226679 0.01712197 0.0343436 -0.03348296 0.01481246 0.03468251 -0.03443795 0.01320308 0.03428411 -0.03413051 0.01394468 0.03513103 -0.03471052 0.01250004 0.03495627 -0.03547793 0.01132243 0.03441011 -0.03523337 0.01205027 0.03619796 -0.03587448 0.0100153 0.03555595 -0.03569185 0.01063948 0.03687638 -0.0360282 0.009454727 0.03759044 -0.03615647 0.008957445 0.03506642 -0.03648841 0.008641421 0.03555548 -0.03659117 0.008205831 0.03562182 -0.0362569 0.009333312 0.03635936 -0.03640931 0.008721709 0.0366944 -0.03676342 0.007392406 0.03653478 -0.03674501 0.007486879 0.03586012 -0.03663903 0.007982134 0.03492373 -0.03607445 0.0100131 0.03427135 -0.03585928 0.01075559 0.03380042 -0.03616392 0.009920656 0.03367644 -0.03561186 0.01154541 0.03303164 -0.03588032 0.0109018 0.03360784 -0.03609287 0.0101664 0.03431403 -0.03630715 0.009371638 0.03465038 -0.03640097 0.009012043 0.03469288 -0.03640991 0.008974194 0.03313815 -0.03532928 0.01237976 0.03391712 -0.03495556 0.01282042 0.03265631 -0.03500813 0.01325702 0.03347736 -0.03464132 0.01363152 0.03223234 -0.03464591 0.01417261 0.03309273 -0.03428834 0.01447951 0.03140008 -0.034855 0.01382064 0.03163105 -0.03506106 0.01329684 0.03169304 -0.03511637 0.01315629 0.0315774 -0.03381085 0.01605433 0.03067535 -0.03399384 0.01582205 0.030743 -0.03411579 0.01556789 0.03187334 -0.03424698 0.01510673 0.0310077 -0.03444266 0.01481515 0.03118956 -0.03466719 0.01429796 0.03015697 -0.03282225 0.01813685 0.03020781 -0.0329647 0.0178672 0.03116679 -0.03282064 0.0179823 0.03029137 -0.03319871 0.01742398 0.03039401 -0.03348642 0.0168792 0.03007173 -0.03238856 0.01888471 0.03105056 -0.03227096 0.01894545 0.03155761 -0.03215306 0.0189436 0.03215539 -0.03252434 0.0180208 0.03206539 -0.03199613 0.01891911 0.03277844 -0.03280615 0.01714152 0.03230255 -0.03302043 0.01711863 0.03250694 -0.03347891 0.01622623 0.03134244 -0.03333586 0.01701372 0.03040415 -0.03350466 0.01684111 0.03321409 -0.03367304 0.01544028 0.03276968 -0.03390103 0.01534593 0.03265368 -0.03064268 0.02055019 0.03256803 -0.03179961 0.01887083 0.03256934 -0.03066855 0.02056753 0.03203845 -0.03083121 0.02067661 0.03162556 -0.03095769 0.02076143 0.03151351 -0.03097474 0.02077287 0.0309807 -0.03105551 0.02082705 0.03054755 -0.03112125 0.0208711 0.03000354 -0.03204184 0.01948249 0.02994996 -0.03114461 0.02088683 0.03186112 -0.03522753 0.01284408 0.0323202 -0.03553098 0.01199156 0.03237736 -0.03555905 0.01190394 0.03296071 -0.03584545 0.01101052 0.0309807 0.03105551 0.02082705 0.03054755 0.03112125 0.0208711 0.03054755 0.02963459 0.02293306 0.02994996 -0.03085076 0.02129441 0.0344401 -0.02818602 0.02181202 0.03514522 -0.02752262 0.02129864 0.03569561 -0.02496504 0.02286517 0.03627181 0.02341192 0.02144271 0.03627181 0.0215553 0.02330827 0.03627181 -0.02341192 0.02144271 0.03627181 0.01955056 0.02501368 0.03627181 0.01741141 0.02654713 0.03627181 0.01515263 0.02789813 0.03627181 0.01278972 0.02905738 0.03627181 0.01033884 0.03001689 0.03627181 0.00781697 0.03077018 0.03627181 0.005241334 0.03131192 0.03627181 0.002629697 0.03163844 0.03627181 0 0.03174757 0.03627181 -0.002629697 0.03163844 0.03627181 -0.005241334 0.03131192 0.03627181 -0.00781697 0.03077018 0.03627181 -0.01033884 0.03001689 0.03627181 -0.01278972 0.02905738 0.03627181 -0.01515263 0.02789813 0.03627181 -0.01741141 0.02654713 0.03627181 -0.01955056 0.02501368 0.03627181 -0.0215553 0.02330827 0.03607493 -0.02420687 0.02217078 0.03514522 -0.02566385 0.02350521 0.03360128 -0.02874368 0.02224355 0.03265368 -0.02917897 0.02258044 0.03162556 -0.0294789 0.02281254 0.03054755 -0.02963459 0.02293306 0.02994996 -0.02965688 0.02295029 0.02994996 -0.0280534 0.02485382 0.03054755 -0.02763319 0.0253089 0.02994996 -0.02765399 0.02532798 0.03054755 -0.02544182 0.02751088 0.02994996 -0.02546095 0.02753156 0.02994996 -0.01741904 0.0331881 0.02994996 -0.0178982 0.03295302 0.03054755 -0.01788473 0.03292828 0.02994996 -0.02056622 0.03135722 0.03054755 -0.02055078 0.03133368 0.02994996 -0.02128708 0.03084051 0.03054755 -0.02307558 0.02952373 0.02994996 -0.02309298 0.02954596 0.02994996 -0.02485108 0.02805036 0.02994996 -0.01510709 0.03432232 0.03054755 -0.01509577 0.03429657 0.02994996 -0.0132867 0.03503507 0.03054755 -0.01220303 0.03542912 0.02994996 -0.01221221 0.03545576 0.03054755 -0.009226381 0.03631818 0.02994996 -0.009233355 0.03634548 0.02994996 -0.008972227 0.03640037 0.03054755 -0.006186366 0.03695762 0.02994996 -0.006191015 0.03698539 0.02994996 -0.004516124 0.03719478 0.03054755 -0.003103852 0.03734302 0.02994996 -0.003106176 0.03737109 0.03054755 0 0.03747177 0.02994996 0 0.03749996 0.03054755 0.003103852 0.03734302 0.02994996 0.003106176 0.03737109 0.02994996 0.0132867 0.03503507 0.02994996 0.01221221 0.03545576 0.03054755 0.01220303 0.03542912 0.02994996 0.009233355 0.03634548 0.03054755 0.009226381 0.03631818 0.02994996 0.008972227 0.03640037 0.03054755 0.006186366 0.03695762 0.02994996 0.006191015 0.03698539 0.02994996 0.004516124 0.03719478 0.02994996 0.01510709 0.03432232 0.03054755 0.01509577 0.03429657 0.02994996 0.01741904 0.0331881 0.03054755 0.01788473 0.03292828 0.02994996 0.0178982 0.03295302 0.03054755 0.02055078 0.03133368 0.02994996 0.02056622 0.03135722 0.02994996 0.0280534 0.02485382 0.02994996 0.02765399 0.02532798 0.03054755 0.02763319 0.0253089 0.02994996 0.02546095 0.02753156 0.03054755 0.02544182 0.02751088 0.02994996 0.02485108 0.02805036 0.03054755 0.02307558 0.02952373 0.02994996 0.02309298 0.02954596 0.02994996 0.02128708 0.03084051 0.02994996 0.02965688 0.02295029 0.02994996 0.03085076 0.02129441 0.02994996 0.03114461 0.02088683 0.03203845 0.03083121 0.02067661 0.03162556 0.03095769 0.02076143 0.03162556 0.0294789 0.02281254 0.03151351 0.03097474 0.02077287 0.03307282 0.0304405 0.02041459 0.03265368 0.03064268 0.02055019 0.03265368 0.02917897 0.02258044 0.03256934 0.03066855 0.02056753 0.03360128 0.02874368 0.02224355 0.03360128 0.03018558 0.02024364 0.03357625 0.03019762 0.02025175 0.0344401 0.02818602 0.02181202 0.03514522 0.02752262 0.02129864 0.03514522 0.02566385 0.02350521 0.03569561 0.02496504 0.02286517 0.03607493 0.02420687 0.02217078 0.03162556 0.02748799 0.02517592 0.03162556 0.02530813 0.02736634 0.03162556 0.02295434 0.02936863 0.03162556 0.02044284 0.03116905 0.03162556 0.01779073 0.03275525 0.03162556 0.01501643 0.03411632 0.03162556 0.0121389 0.03524297 0.03162556 0.009177923 0.03612732 0.03162556 0.006153881 0.03676342 0.03162556 0.00308752 0.0371468 0.03162556 0 0.03727489 0.03162556 -0.00308752 0.0371468 0.03162556 -0.006153881 0.03676342 0.03162556 -0.009177923 0.03612732 0.03162556 -0.0121389 0.03524297 0.03162556 -0.01501643 0.03411632 0.03162556 -0.01779073 0.03275525 0.03162556 -0.02044284 0.03116905 0.03162556 -0.02295434 0.02936863 0.03162556 -0.02530813 0.02736634 0.03162556 -0.02748799 0.02517592 0.03265368 0.02720826 0.0249198 0.03265368 0.02505064 0.02708786 0.03265368 0.02272081 0.02906978 0.03265368 0.02023482 0.0308519 0.03265368 0.01760971 0.03242194 0.03265368 0.01486361 0.03376919 0.03265368 0.0120154 0.03488433 0.03265368 0.009084522 0.03575974 0.03265368 0.006091237 0.03638935 0.03265368 0.003056108 0.03676885 0.03265368 0 0.03689563 0.03265368 -0.003056108 0.03676885 0.03265368 -0.006091237 0.03638935 0.03265368 -0.009084522 0.03575974 0.03265368 -0.0120154 0.03488433 0.03265368 -0.01486361 0.03376919 0.03265368 -0.01760971 0.03242194 0.03265368 -0.02023482 0.0308519 0.03265368 -0.02272081 0.02906978 0.03265368 -0.02505064 0.02708786 0.03265368 -0.02720826 0.0249198 0.03360128 0.02680242 0.02454805 0.03360128 0.02467691 0.02668374 0.03360128 0.02238184 0.02863609 0.03360128 0.01993292 0.03039163 0.03360128 0.01734703 0.03193831 0.03360128 0.01464188 0.03326547 0.03360128 0.01183611 0.03436392 0.03360128 0.008949041 0.03522628 0.03360128 0.006000399 0.03584647 0.03360128 0.003010511 0.03622031 0.03360128 0 0.03634524 0.03360128 -0.003010511 0.03622031 0.03360128 -0.006000399 0.03584647 0.03360128 -0.008949041 0.03522628 0.03360128 -0.01183611 0.03436392 0.03360128 -0.01464188 0.03326547 0.03360128 -0.01734703 0.03193831 0.03360128 -0.01993292 0.03039163 0.03360128 -0.02238184 0.02863609 0.03360128 -0.02467691 0.02668374 0.03360128 -0.02680242 0.02454805 0.0344401 0.02628242 0.02407175 0.0344401 0.02419817 0.02616608 0.0344401 0.02194762 0.02808058 0.0344401 0.01954621 0.02980202 0.0344401 0.0170105 0.03131866 0.0344401 0.01435786 0.03262007 0.0344401 0.01160651 0.03369724 0.0344401 0.008775413 0.03454285 0.0344401 0.005883991 0.03515106 0.0344401 0.002952098 0.03551763 0.0344401 0 0.03564012 0.0344401 -0.002952098 0.03551763 0.0344401 -0.005883991 0.03515106 0.0344401 -0.008775413 0.03454285 0.0344401 -0.01160651 0.03369724 0.0344401 -0.01435786 0.03262007 0.0344401 -0.0170105 0.03131866 0.0344401 -0.01954621 0.02980202 0.0344401 -0.02194762 0.02808058 0.0344401 -0.02419817 0.02616608 0.0344401 -0.02628242 0.02407175 0.03514522 0.02362865 0.02555024 0.03514522 0.02143102 0.02741962 0.03514522 0.01908618 0.02910059 0.03514522 0.01661014 0.03058153 0.03514522 0.0140199 0.0318523 0.03514522 0.01133334 0.03290414 0.03514522 0.008568882 0.03372985 0.03514522 0.00574547 0.03432369 0.03514522 0.002882659 0.03468167 0.03514522 0 0.03480124 0.03514522 -0.002882659 0.03468167 0.03514522 -0.00574547 0.03432369 0.03514522 -0.008568882 0.03372985 0.03514522 -0.01133334 0.03290414 0.03514522 -0.0140199 0.0318523 0.03514522 -0.01661014 0.03058153 0.03514522 -0.01908618 0.02910059 0.03514522 -0.02143102 0.02741962 0.03514522 -0.02362865 0.02555024 0.03569561 0.02298527 0.02485454 0.03569561 0.02084749 0.02667301 0.03569561 0.01856648 0.02830821 0.03569561 0.01615786 0.02974885 0.03569561 0.01363813 0.03098499 0.03569561 0.01102471 0.03200823 0.03569561 0.00833553 0.0328114 0.03569561 0.005589067 0.03338915 0.03569561 0.00280416 0.03373736 0.03569561 0 0.03385365 0.03569561 -0.00280416 0.03373736 0.03569561 -0.005589067 0.03338915 0.03569561 -0.00833553 0.0328114 0.03569561 -0.01102471 0.03200823 0.03569561 -0.01363813 0.03098499 0.03569561 -0.01615786 0.02974885 0.03569561 -0.01856648 0.02830821 0.03569561 -0.02084749 0.02667301 0.03569561 -0.02298527 0.02485454 0.03607493 0.02228724 0.0240997 0.03607493 0.02021437 0.02586299 0.03607493 0.01800262 0.02744853 0.03607493 0.01566714 0.02884542 0.03607493 0.013224 0.03004401 0.03607493 0.01068991 0.03103613 0.03607493 0.008082389 0.03181499 0.03607493 0.005419313 0.03237509 0.03607493 0.002718985 0.03271275 0.03607493 0 0.03282558 0.03607493 -0.002718985 0.03271275 0.03607493 -0.005419313 0.03237509 0.03607493 -0.008082389 0.03181499 0.03607493 -0.01068991 0.03103613 0.03607493 -0.013224 0.03004401 0.03607493 -0.01566714 0.02884542 0.03607493 -0.01800262 0.02744853 0.03607493 -0.02021437 0.02586299 0.03607493 -0.02228724 0.0240997 0.03353339 0.03128665 0.01870536 0.03369247 0.03225737 0.0171383 0.03324139 0.03254491 0.01715999 0.03305912 0.03156065 0.01880282 0.03235131 0.03554856 0.01193934 0.03184401 0.03522026 0.01286846 0.03264415 0.03499901 0.01328104 0.03181827 0.03318685 0.01709485 0.03229892 0.03301054 0.01713722 0.03250384 0.03347301 0.01623815 0.03104966 0.03226774 0.01895099 0.03155684 0.03214985 0.01894891 0.03116458 0.03281331 0.01799547 0.03407013 0.03310722 0.01557612 0.03427416 0.03412175 0.01396501 0.03467059 0.03442972 0.01322352 0.03758692 0.03615587 0.00895971 0.03686487 0.03602582 0.009463489 0.03618091 0.03587013 0.01003068 0.03554213 0.03568744 0.01065403 0.03494888 0.03547501 0.01133149 0.03512334 0.03470635 0.01251119 0.03440159 0.03522908 0.01206254 0.03206467 0.03199297 0.01892423 0.03029364 0.03319764 0.01742345 0.0302065 0.03295648 0.01788109 0.03015398 0.03281116 0.01815694 0.03007143 0.03238493 0.01889044 0.03000098 0.03202104 0.0195167 0.03040051 0.03349339 0.01686209 0.03133821 0.03332555 0.01703369 0.03041338 0.03352904 0.01679438 0.03157389 0.03380471 0.0160672 0.0318706 0.03424346 0.0151146 0.03222697 0.03464072 0.0141853 0.03119748 0.03467535 0.01427811 0.03100496 0.0344389 0.01482355 0.03074812 0.03412336 0.01555132 0.03067153 0.0339874 0.0158357 0.03276723 0.03389763 0.01535326 0.03308784 0.03428328 0.01449126 0.03426337 0.03585636 0.01076537 0.03307229 0.03589743 0.01084536 0.0329532 0.03583979 0.01102608 0.03366714 0.03560751 0.01155877 0.03312379 0.03532075 0.01240402 0.03390401 0.03494721 0.01284283 0.03346633 0.03463238 0.01365375 0.03393346 0.03378117 0.01473182 0.03560328 0.03625255 0.009350061 0.03490877 0.03607004 0.01002895 0.03713208 0.03653508 0.008180737 0.03634685 0.03640699 0.008731305 0.03584176 0.03663903 0.007986545 0.03575646 0.03662657 0.008046209 0.0350449 0.03648483 0.00865817 0.03479278 0.03643465 0.008875012 0.03469806 0.03640913 0.008974015 0.03429961 0.03630185 0.009390354 0.03387689 0.03618806 0.009832084 0.0336017 0.0360887 0.01017868 0.0334165 0.03299325 0.01633417 0.03364771 0.03340578 0.01552206 0.03321182 0.03366971 0.01544725 0.03296476 0.03325146 0.01629632 0.0327751 0.03279638 0.01715934 0.0325675 0.03179651 0.01887571 0.03668987 0.03676319 0.007393479 0.03680115 0.03677946 0.007315635 0.03174883 0.03515869 0.01304274 0.0316357 0.03505951 0.01329624 0.03139543 0.03484892 0.01383453 0.03912431 0.03749728 0.002176105 0.03912431 0.03726089 0.004733979 0.04124301 0.03753823 0.004769206 0.0433197 0.03803819 0.004832744 0.04533082 0.03875517 0.00492382 0.04725337 0.03968095 0.00504148 0.03757095 0.03720092 0.00472635 0.03757095 0.03722006 0.004519522 0.03757095 0.03743696 0.002172648 0.003099977 0 0.03749996 0.02994996 0 0.03749996 0.003099977 0 -0.03749996 0.02994996 0 -0.03749996 0.08792263 -0.0115 -0.005999982 0.08849996 -0.01051515 -0.005826294 0.08849996 -0.01056027 -0.00565797 0.08849996 -0.01049995 -0.005999982 0.08849996 -0.0107339 -0.005357205 0.08849996 -0.01085716 -0.005233943 0.08849996 -0.01063394 -0.005499958 0.08849996 -0.01115792 -0.005060255 0.08849996 -0.01132631 -0.005015134 0.08849996 -0.01099997 -0.005133926 0.08849996 -0.01167362 -0.005015134 0.08849996 -0.01184201 -0.005060255 0.08849996 -0.0115 -0.004999995 0.08849996 -0.01214277 -0.005233943 0.08849996 -0.01226603 -0.005357205 0.08849996 -0.01199996 -0.005133926 0.08849996 -0.01243966 -0.00565797 0.08849996 -0.01248478 -0.005826294 0.08849996 -0.01236599 -0.005499958 0.08849996 -0.01248478 -0.00617361 0.08849996 -0.01243966 -0.006341993 0.08849996 -0.01249998 -0.005999982 0.08849996 -0.01226603 -0.006642758 0.08849996 -0.01214277 -0.006766021 0.08849996 -0.01236599 -0.006499946 0.08849996 -0.01184201 -0.006939649 0.08849996 -0.01167362 -0.00698477 0.08849996 -0.01199996 -0.006865978 0.08849996 -0.01132631 -0.00698477 0.08849996 -0.01115792 -0.006939649 0.08849996 -0.0115 -0.006999969 0.08849996 -0.01085716 -0.006766021 0.08849996 -0.0107339 -0.006642758 0.08849996 -0.01099997 -0.006865978 0.08849996 -0.01056027 -0.006341993 0.08849996 -0.01051515 -0.00617361 0.08849996 -0.01063394 -0.006499946 0.08849996 -0.01207733 -0.004999995 0.08849996 -0.01092261 -0.004999995 0.08849996 -0.01034528 -0.005999982 0.08849996 -0.01092261 -0.006999969 0.08849996 -0.01265466 -0.005999982 0.08849996 -0.01207733 -0.006999969 0.08999997 -0.01207733 -0.004999995 0.08999997 -0.01265466 -0.005999982 0.08999997 -0.01092261 -0.004999995 0.08999997 -0.01034528 -0.005999982 0.08999997 -0.01092261 -0.006999969 0.08999997 -0.01207733 -0.006999969 0.08999997 -0.01036143 -0.003830611 0.08999997 -0.01057606 -0.003730833 0.08999997 -0.009627401 -0.004420101 0.08999997 -0.009788632 -0.004246771 0.08999997 -0.0107994 -0.003652274 0.08999997 -0.01102924 -0.00359559 0.08999997 -0.01126348 -0.003561437 0.08999997 -0.0115 -0.003549993 0.08999997 -0.01173645 -0.003561437 0.08999997 -0.01197069 -0.00359559 0.08999997 -0.01220053 -0.003652274 0.08999997 -0.009067833 -0.005704641 0.08999997 -0.009107708 -0.005471289 0.08999997 -0.009169876 -0.005242884 0.08999997 -0.009705901 -0.007668435 0.08999997 -0.009875297 -0.007833838 0.08999997 -0.01005989 -0.007982075 0.08999997 -0.009965837 -0.004089772 0.08999997 -0.01015734 -0.003950595 0.08999997 -0.009136021 -0.006643593 0.08999997 -0.009084939 -0.006412446 0.08999997 -0.01274204 -0.008111774 0.08999997 -0.01253241 -0.008221805 0.08999997 -0.01231312 -0.008311092 0.08999997 -0.01208627 -0.008378803 0.08999997 -0.01329404 -0.007668435 0.08999997 -0.01312464 -0.007833838 0.08999997 -0.01294004 -0.007982075 0.08999997 -0.01383006 -0.005242884 0.08999997 -0.01374614 -0.005021512 0.08999997 -0.01364117 -0.004809319 0.08999997 -0.009253859 -0.005021512 0.08999997 -0.009358763 -0.004809319 0.08999997 -0.009483635 -0.004608213 0.08999997 -0.009209156 -0.006868779 0.08999997 -0.009056389 -0.006177425 0.08999997 -0.009050667 -0.005940794 0.08999997 -0.01185399 -0.008424282 0.08999997 -0.01161831 -0.00844711 0.08999997 -0.0115 -0.008449971 0.08999997 -0.01138162 -0.00844711 0.08999997 -0.01114594 -0.008424282 0.08999997 -0.01091367 -0.008378803 0.08999997 -0.01068681 -0.008311092 0.08999997 -0.01046752 -0.008221805 0.08999997 -0.01025789 -0.008111774 0.08999997 -0.01386392 -0.006643593 0.08999997 -0.01379078 -0.006868779 0.08999997 -0.01242387 -0.003730833 0.08999997 -0.01263856 -0.003830611 0.08999997 -0.01284259 -0.003950595 0.08999997 -0.0135163 -0.004608213 0.08999997 -0.01337254 -0.004420101 0.08999997 -0.01389223 -0.005471289 0.08999997 -0.0139321 -0.005704641 0.08999997 -0.01394927 -0.005940794 0.08999997 -0.01394355 -0.006177425 0.08999997 -0.013915 -0.006412446 0.08999997 -0.0130341 -0.004089772 0.08999997 -0.0132113 -0.004246771 0.08999997 -0.01369619 -0.0070858 0.08999997 -0.01358115 -0.007292687 0.08999997 -0.01344668 -0.007487535 0.08999997 -0.009553253 -0.007487535 0.08999997 -0.009418785 -0.007292687 0.08999997 -0.009303748 -0.0070858 0.08999866 -0.01161968 -0.008475303 0.08999866 -0.01185804 -0.008452177 0.08999866 -0.01209306 -0.008406162 0.08999866 -0.01232254 -0.008337736 0.08999866 -0.01254433 -0.008247435 0.08999866 -0.01275634 -0.008136153 0.08999866 -0.01295661 -0.008004903 0.08999866 -0.01314336 -0.007854938 0.08999866 -0.01331472 -0.007687687 0.08999866 -0.01346909 -0.007504642 0.08999866 -0.01360517 -0.007307589 0.08999866 -0.01372152 -0.007098317 0.08999866 -0.01381719 -0.006878793 0.08999866 -0.01389116 -0.006651043 0.08999866 -0.01394283 -0.006417214 0.08999866 -0.01397168 -0.006179451 0.08999866 -0.01397746 -0.005940079 0.08999866 -0.01396012 -0.005701243 0.08999866 -0.01391983 -0.005465209 0.08999866 -0.01385688 -0.005234181 0.08999866 -0.01377201 -0.005010247 0.08999866 -0.01366585 -0.00479561 0.08999866 -0.01353949 -0.00459218 0.08999866 -0.01339411 -0.004401922 0.08999866 -0.01323103 -0.004226565 0.08999866 -0.0130518 -0.004067778 0.08999866 -0.01285809 -0.003926992 0.08999866 -0.01265168 -0.003805577 0.08999866 -0.01243448 -0.003704667 0.08999866 -0.01220864 -0.003625214 0.08999866 -0.01197612 -0.003567934 0.08999866 -0.01173913 -0.003533303 0.08999866 -0.0115 -0.00352174 0.08999866 -0.0112608 -0.003533303 0.08999866 -0.01102381 -0.003567934 0.08999866 -0.01079136 -0.003625214 0.08999866 -0.01056545 -0.003704667 0.08999866 -0.01034826 -0.003805577 0.08999866 -0.01014184 -0.003926992 0.08999866 -0.009948134 -0.004067778 0.08999866 -0.009768903 -0.004226565 0.08999866 -0.009605824 -0.004401922 0.08999866 -0.009460449 -0.00459218 0.08999866 -0.009334087 -0.00479561 0.08999866 -0.009227931 -0.005010247 0.08999866 -0.009143054 -0.005234181 0.08999866 -0.009080111 -0.005465209 0.08999866 -0.009039819 -0.005701243 0.08999866 -0.009022474 -0.005940079 0.08999866 -0.009028255 -0.006179451 0.08999866 -0.009057104 -0.006417214 0.08999866 -0.009108781 -0.006651043 0.08999866 -0.00918281 -0.006878793 0.08999866 -0.009278416 -0.007098317 0.08999866 -0.009394764 -0.007307589 0.08999866 -0.009530842 -0.007504642 0.08999866 -0.009685218 -0.007687687 0.08999866 -0.009856581 -0.007854938 0.08999866 -0.01004332 -0.008004903 0.08999866 -0.01024359 -0.008136153 0.08999866 -0.01045566 -0.008247435 0.08999866 -0.01067745 -0.008337736 0.08999866 -0.01090687 -0.008406162 0.08999866 -0.01114189 -0.008452177 0.08999866 -0.01138025 -0.008475303 0.08972823 -0.0112347 -0.003264129 0.08972823 -0.0109719 -0.003302514 0.08969998 -0.01112598 -0.003278672 0.08969998 -0.0109716 -0.003301203 0.08969998 -0.01075845 -0.003353714 0.08972823 -0.01071399 -0.003366053 0.08969998 -0.01071363 -0.003364801 0.08972823 -0.01046347 -0.003454208 0.08969998 -0.01046293 -0.003453016 0.08969998 -0.009764969 -0.003867328 0.08969998 -0.009777963 -0.003855884 0.08972823 -0.009778797 -0.003856897 0.08969998 -0.009992957 -0.00369966 0.08972823 -0.009993672 -0.003700792 0.08969998 -0.01007258 -0.003652811 0.08972823 -0.01022261 -0.003566145 0.08969998 -0.01022195 -0.003564953 0.08969998 -0.01040536 -0.003479778 0.08969998 -0.009579062 -0.004032075 0.08972823 -0.009580016 -0.004033029 0.08969998 -0.009492516 -0.004125118 0.08972823 -0.009399116 -0.004227519 0.08969998 -0.009398102 -0.004226684 0.08969998 -0.009254276 -0.004414856 0.08972823 -0.009237885 -0.004438519 0.08969998 -0.009236752 -0.004437804 0.08972823 -0.009097695 -0.004664182 0.08969998 -0.009096562 -0.004663527 0.08969998 -0.00880891 -0.005440711 0.08969998 -0.008814752 -0.005406558 0.08972823 -0.008816063 -0.005406856 0.08969998 -0.008884549 -0.005150198 0.08972823 -0.00888586 -0.005150556 0.08969998 -0.008911192 -0.005079984 0.08972823 -0.008980035 -0.004902243 0.08969998 -0.008978784 -0.004901707 0.08969998 -0.00906074 -0.004736006 0.08969998 -0.008770048 -0.00566852 0.08972823 -0.008771359 -0.00566864 0.08969998 -0.008759558 -0.005812525 0.08972823 -0.008752107 -0.005933523 0.08969998 -0.008750796 -0.005933523 0.08969998 -0.008756935 -0.006187617 0.08972823 -0.008758544 -0.006199061 0.08969998 -0.008757174 -0.006199181 0.08972823 -0.008790552 -0.006462752 0.08969998 -0.008789241 -0.006462931 0.08969998 -0.0088104 -0.006558835 0.08972823 -0.008847832 -0.006722092 0.08969998 -0.00884658 -0.00672239 0.08969998 -0.008910834 -0.006920218 0.08972823 -0.008929908 -0.006974637 0.08969998 -0.008928656 -0.006975114 0.08972823 -0.009036004 -0.007218182 0.08969998 -0.009034812 -0.007218718 0.08972823 -0.009487211 -0.007871866 0.08969998 -0.009314894 -0.007669687 0.08972823 -0.009315967 -0.007668852 0.08969998 -0.009255826 -0.007584095 0.08972823 -0.009165048 -0.007450282 0.08969998 -0.009163916 -0.007450997 0.08969998 -0.009060025 -0.007264196 0.08972823 -0.00967729 -0.008057355 0.08969998 -0.00949037 -0.007876813 0.08969998 -0.009486258 -0.00787276 0.08972823 -0.009884357 -0.008223712 0.08969998 -0.009766459 -0.008130729 0.08969998 -0.009676396 -0.008058369 0.08969998 -0.0104053 -0.008520007 0.08969998 -0.0103411 -0.0084939 0.08972823 -0.0103417 -0.008492648 0.08969998 -0.01010584 -0.008370399 0.08972823 -0.0101065 -0.008369266 0.08969998 -0.01007205 -0.008348226 0.08969998 -0.009883582 -0.008224785 0.08969998 -0.01058721 -0.008594095 0.08972823 -0.01058769 -0.008592844 0.08969998 -0.01075881 -0.008645296 0.08972823 -0.0108422 -0.00866878 0.08969998 -0.01084184 -0.008670032 0.08972823 -0.01110279 -0.008719801 0.08969998 -0.01110261 -0.008721113 0.08972823 -0.0116328 -0.008745431 0.08969998 -0.0115 -0.008746743 0.08972823 -0.0113672 -0.008745431 0.08969998 -0.01136714 -0.008746743 0.08969998 -0.01112562 -0.008723318 0.08969998 -0.01224112 -0.008645296 0.08969998 -0.01215809 -0.008670032 0.08972823 -0.01215779 -0.00866878 0.08969998 -0.01189732 -0.008721113 0.08972823 -0.01189714 -0.008719801 0.08969998 -0.01187431 -0.008723318 0.08969998 -0.01163285 -0.008746743 0.08969998 -0.01241272 -0.008594095 0.08972823 -0.0124123 -0.008592844 0.08969998 -0.01259464 -0.008520007 0.08972823 -0.01265823 -0.008492648 0.08969998 -0.01265883 -0.0084939 0.08972823 -0.01289343 -0.008369266 0.08969998 -0.01289409 -0.008370399 0.08972823 -0.01332265 -0.008057355 0.08969998 -0.01323348 -0.008130729 0.08972823 -0.01311558 -0.008223712 0.08969998 -0.01311635 -0.008224785 0.08969998 -0.01292794 -0.008348226 0.08972823 -0.01368403 -0.007668852 0.08969998 -0.01351374 -0.00787276 0.08972823 -0.01351273 -0.007871866 0.08969998 -0.01350957 -0.007876813 0.08969998 -0.01332354 -0.008058369 0.08972823 -0.01383489 -0.007450282 0.08969998 -0.01374411 -0.007584095 0.08969998 -0.01368504 -0.007669687 0.08969998 -0.0140891 -0.006920218 0.08969998 -0.01407128 -0.006975114 0.08972823 -0.01407003 -0.006974637 0.08969998 -0.01396512 -0.007218718 0.08972823 -0.01396393 -0.007218182 0.08969998 -0.01393991 -0.007264196 0.08969998 -0.01383602 -0.007450997 0.08969998 -0.01415336 -0.00672239 0.08972823 -0.0141521 -0.006722092 0.08969998 -0.01418954 -0.006558835 0.08972823 -0.01420938 -0.006462752 0.08969998 -0.0142107 -0.006462931 0.08972823 -0.01424139 -0.006199061 0.08969998 -0.01424276 -0.006199181 0.08969998 -0.014243 -0.006187617 0.08972823 -0.01424783 -0.005933523 0.08969998 -0.01424914 -0.005933523 0.08969998 -0.01424038 -0.005812525 0.08972823 -0.01422858 -0.00566864 0.08969998 -0.01422995 -0.00566852 0.08969998 -0.01419103 -0.005440711 0.08972823 -0.01418387 -0.005406856 0.08969998 -0.01418519 -0.005406558 0.08972823 -0.01411414 -0.005150556 0.08969998 -0.01411539 -0.005150198 0.08969998 -0.01374566 -0.004414856 0.08969998 -0.01376318 -0.004437804 0.08972823 -0.01376205 -0.004438519 0.08969998 -0.01390337 -0.004663527 0.08972823 -0.01390224 -0.004664182 0.08969998 -0.0139392 -0.004736006 0.08972823 -0.0140199 -0.004902243 0.08969998 -0.01402115 -0.004901707 0.08969998 -0.01408874 -0.005079984 0.08969998 -0.01360183 -0.004226684 0.08972823 -0.01360082 -0.004227519 0.08969998 -0.01350742 -0.004125118 0.08972823 -0.01341992 -0.004033029 0.08969998 -0.01342087 -0.004032075 0.08969998 -0.01323497 -0.003867328 0.08972823 -0.01322114 -0.003856897 0.08969998 -0.01322197 -0.003855884 0.08972823 -0.01300626 -0.003700792 0.08969998 -0.01300698 -0.00369966 0.08969998 -0.01292735 -0.003652811 0.08972823 -0.01277732 -0.003566145 0.08969998 -0.01277798 -0.003564953 0.08969998 -0.01259458 -0.003479778 0.08972823 -0.01253646 -0.003454208 0.08969998 -0.012537 -0.003453016 0.08972823 -0.01228594 -0.003366053 0.08969998 -0.0122863 -0.003364801 0.08969998 -0.01123458 -0.003262817 0.08969998 -0.0115 -0.003249943 0.08972823 -0.0115 -0.003251314 0.08969998 -0.01176536 -0.003262817 0.08972823 -0.01176524 -0.003264129 0.08969998 -0.01187396 -0.003278672 0.08972823 -0.01202803 -0.003302514 0.08969998 -0.01202833 -0.003301203 0.08969998 -0.01224148 -0.003353714 0.08977913 -0.01176434 -0.003273367 0.08977913 -0.0120263 -0.003311634 0.08977913 -0.01228326 -0.003374993 0.08977913 -0.01253294 -0.003462851 0.08977913 -0.01277303 -0.003574371 0.08977913 -0.0130012 -0.0037086 0.08977913 -0.0132153 -0.003864169 0.08977913 -0.01341342 -0.004039704 0.08977913 -0.01359373 -0.004233539 0.08977913 -0.01375442 -0.004443824 0.08977913 -0.01389408 -0.004668712 0.08977913 -0.01401138 -0.004905939 0.08977913 -0.01410526 -0.005153477 0.08977913 -0.01417481 -0.005408883 0.08977913 -0.01421934 -0.005669772 0.08977913 -0.01423853 -0.005933761 0.08977913 -0.01423215 -0.006198406 0.08977913 -0.01420027 -0.006461143 0.08977913 -0.0141431 -0.006719648 0.08977913 -0.01406133 -0.006971359 0.08977913 -0.01395559 -0.007214009 0.08977913 -0.01382696 -0.007445394 0.08977913 -0.01367664 -0.00766319 0.08977913 -0.01350593 -0.007865548 0.08977913 -0.01331651 -0.008050441 0.08977913 -0.01311016 -0.008216142 0.08977913 -0.01288872 -0.00836122 0.08977913 -0.01265436 -0.008484244 0.08977913 -0.01240921 -0.008584022 0.08977913 -0.01215553 -0.00865972 0.08977913 -0.01189577 -0.008710622 0.08977913 -0.01163232 -0.008736133 0.08977913 -0.01136761 -0.008736133 0.08977913 -0.01110416 -0.008710622 0.08977913 -0.0108444 -0.00865972 0.08977913 -0.01059073 -0.008584022 0.08977913 -0.01034557 -0.008484244 0.08977913 -0.01011121 -0.00836122 0.08977913 -0.009889841 -0.008216142 0.08977913 -0.00968343 -0.008050441 0.08977913 -0.009494006 -0.007865548 0.08977913 -0.009323358 -0.00766319 0.08977913 -0.009172976 -0.007445394 0.08977913 -0.009044349 -0.007214009 0.08977913 -0.00893861 -0.006971359 0.08977913 -0.008856832 -0.006719648 0.08977913 -0.008799731 -0.006461143 0.08977913 -0.008767783 -0.006198406 0.08977913 -0.008761405 -0.005933761 0.08977913 -0.008780598 -0.005669772 0.08977913 -0.008825123 -0.005408883 0.08977913 -0.008894681 -0.005153477 0.08977913 -0.008988559 -0.004905939 0.08977913 -0.009105861 -0.004668712 0.08977913 -0.009245514 -0.004443824 0.08977913 -0.009406208 -0.004233539 0.08977913 -0.009586513 -0.004039704 0.08977913 -0.009784638 -0.003864169 0.08977913 -0.009998738 -0.0037086 0.08977913 -0.0102269 -0.003574371 0.08977913 -0.01046699 -0.003462851 0.08977913 -0.01071667 -0.003374993 0.08977913 -0.01097369 -0.003311634 0.08977913 -0.01123559 -0.003273367 0.08977913 -0.0115 -0.003260612 0.08982771 -0.01176261 -0.003291249 0.08982771 -0.01202285 -0.003329217 0.08982771 -0.01227813 -0.003392159 0.08982771 -0.01252621 -0.003479421 0.08982771 -0.01276469 -0.003590226 0.08982771 -0.01299136 -0.003723561 0.08982771 -0.01320409 -0.003878116 0.08982771 -0.01340091 -0.004052519 0.08982771 -0.01358002 -0.004245042 0.08982771 -0.0137397 -0.004454016 0.08982771 -0.0138784 -0.004677414 0.08982771 -0.01399499 -0.004913091 0.08982771 -0.01408821 -0.00515902 0.08982771 -0.01415729 -0.005412697 0.08982771 -0.01420158 -0.005671918 0.08982771 -0.01422065 -0.005934238 0.08982771 -0.01421427 -0.006197094 0.08982771 -0.01418256 -0.006458163 0.08982771 -0.01412582 -0.00671494 0.08982771 -0.01404458 -0.006964981 0.08982771 -0.01393955 -0.007206082 0.08982771 -0.01381176 -0.007435917 0.08982771 -0.01366239 -0.007652342 0.08982771 -0.01349282 -0.007853329 0.08982771 -0.01330465 -0.00803703 0.08982771 -0.01309961 -0.008201658 0.08982771 -0.01287966 -0.008345782 0.08982771 -0.01264679 -0.008467972 0.08982771 -0.01240324 -0.008567154 0.08982771 -0.01215124 -0.008642315 0.08982771 -0.01189321 -0.00869286 0.08982771 -0.01163142 -0.008718252 0.08982771 -0.01136851 -0.008718252 0.08982771 -0.01110672 -0.00869286 0.08982771 -0.0108487 -0.008642315 0.08982771 -0.01059669 -0.008567154 0.08982771 -0.01035314 -0.008467972 0.08982771 -0.01012033 -0.008345782 0.08982771 -0.009900331 -0.008201658 0.08982771 -0.009695291 -0.00803703 0.08982771 -0.009507119 -0.007853329 0.08982771 -0.009337544 -0.007652342 0.08982771 -0.009188175 -0.007435917 0.08982771 -0.009060382 -0.007206082 0.08982771 -0.008955359 -0.006964981 0.08982771 -0.008874118 -0.00671494 0.08982771 -0.008817374 -0.006458163 0.08982771 -0.008785665 -0.006197094 0.08982771 -0.008779346 -0.005934238 0.08982771 -0.00879836 -0.005671918 0.08982771 -0.008842647 -0.005412697 0.08982771 -0.008911728 -0.00515902 0.08982771 -0.00900495 -0.004913091 0.08982771 -0.009121537 -0.004677414 0.08982771 -0.009260237 -0.004454016 0.08982771 -0.009419918 -0.004245042 0.08982771 -0.00959903 -0.004052519 0.08982771 -0.009795844 -0.003878116 0.08982771 -0.01000857 -0.003723561 0.08982771 -0.01023524 -0.003590226 0.08982771 -0.01047372 -0.003479421 0.08982771 -0.0107218 -0.003392159 0.08982771 -0.01097708 -0.003329217 0.08982771 -0.01123732 -0.003291249 0.08982771 -0.0115 -0.003278493 0.08987247 -0.01176011 -0.003317117 0.08987247 -0.01201784 -0.003354728 0.08987247 -0.01227074 -0.003417074 0.08987247 -0.01251643 -0.003503501 0.08987247 -0.01275259 -0.003613293 0.08987247 -0.01297712 -0.003745317 0.08987247 -0.01318782 -0.003898382 0.08987247 -0.01338279 -0.004071116 0.08987247 -0.01356017 -0.004261851 0.08987247 -0.0137183 -0.004468798 0.08987247 -0.01385569 -0.004690051 0.08987247 -0.01397114 -0.004923522 0.08987247 -0.01406347 -0.005167007 0.08987247 -0.0141319 -0.00541836 0.08987247 -0.01417577 -0.005675077 0.08987247 -0.0141946 -0.005934834 0.08987247 -0.01418834 -0.006195187 0.08987247 -0.01415693 -0.006453752 0.08987247 -0.01410073 -0.006708085 0.08987247 -0.01402026 -0.006955802 0.08987247 -0.01391625 -0.007194578 0.08987247 -0.01378965 -0.007422208 0.08987247 -0.01364171 -0.007636547 0.08987247 -0.01347374 -0.007835626 0.08987247 -0.01328736 -0.008017539 0.08987247 -0.01308429 -0.008180618 0.08987247 -0.01286643 -0.008323371 0.08987247 -0.01263582 -0.008444428 0.08987247 -0.0123946 -0.008542597 0.08987247 -0.01214504 -0.008617103 0.08987247 -0.01188945 -0.008667111 0.08987247 -0.01163017 -0.008692264 0.08987247 -0.01136976 -0.008692264 0.08987247 -0.01111048 -0.008667111 0.08987247 -0.01085489 -0.008617103 0.08987247 -0.01060533 -0.008542597 0.08987247 -0.01036411 -0.008444428 0.08987247 -0.0101335 -0.008323371 0.08987247 -0.009915649 -0.008180618 0.08987247 -0.009712576 -0.008017539 0.08987247 -0.009526193 -0.007835626 0.08987247 -0.009358227 -0.007636547 0.08987247 -0.009210288 -0.007422208 0.08987247 -0.009083688 -0.007194578 0.08987247 -0.008979678 -0.006955802 0.08987247 -0.008899211 -0.006708085 0.08987247 -0.008843004 -0.006453752 0.08987247 -0.008811593 -0.006195187 0.08987247 -0.008805334 -0.005934834 0.08987247 -0.008824169 -0.005675077 0.08987247 -0.008868038 -0.00541836 0.08987247 -0.008936464 -0.005167007 0.08987247 -0.009028792 -0.004923522 0.08987247 -0.009144246 -0.004690051 0.08987247 -0.009281635 -0.004468798 0.08987247 -0.009439826 -0.004261851 0.08987247 -0.009617149 -0.004071116 0.08987247 -0.009812116 -0.003898382 0.08987247 -0.01002281 -0.003745317 0.08987247 -0.01024734 -0.003613293 0.08987247 -0.01048356 -0.003503501 0.08987247 -0.01072925 -0.003417074 0.08987247 -0.01098209 -0.003354728 0.08987247 -0.01123982 -0.003317117 0.08987247 -0.0115 -0.003304541 0.08991211 -0.01175689 -0.003350257 0.08991211 -0.01201146 -0.003387451 0.08991211 -0.01226121 -0.003449022 0.08991211 -0.01250386 -0.003534376 0.08991211 -0.01273715 -0.003642797 0.08991211 -0.01295888 -0.003773152 0.08991211 -0.01316696 -0.003924369 0.08991211 -0.01335948 -0.004094958 0.08991211 -0.01353466 -0.004283308 0.08991211 -0.01369088 -0.004487693 0.08991211 -0.0138266 -0.004706203 0.08991211 -0.01394057 -0.004936814 0.08991211 -0.01403182 -0.005177319 0.08991211 -0.01409941 -0.005425512 0.08991211 -0.01414269 -0.00567907 0.08991211 -0.01416134 -0.005935668 0.08991211 -0.01415508 -0.006192803 0.08991211 -0.01412409 -0.006448149 0.08991211 -0.0140686 -0.006699323 0.08991211 -0.01398909 -0.006944 0.08991211 -0.01388639 -0.007179796 0.08991211 -0.01376134 -0.007404625 0.08991211 -0.01361525 -0.007616341 0.08991211 -0.01344937 -0.007812917 0.08991211 -0.01326531 -0.007992625 0.08991211 -0.01306474 -0.008153676 0.08991211 -0.01284956 -0.008294641 0.08991211 -0.01262181 -0.008414208 0.08991211 -0.01238358 -0.008511185 0.08991211 -0.01213705 -0.008584737 0.08991211 -0.01188462 -0.00863415 0.08991211 -0.01162856 -0.008659005 0.08991211 -0.01137137 -0.008659005 0.08991211 -0.01111531 -0.00863415 0.08991211 -0.01086288 -0.008584737 0.08991211 -0.01061642 -0.008511185 0.08991211 -0.01037812 -0.008414208 0.08991211 -0.01015037 -0.008294641 0.08991211 -0.0099352 -0.008153676 0.08991211 -0.00973463 -0.007992625 0.08991211 -0.009550571 -0.007812917 0.08991211 -0.009384691 -0.007616341 0.08991211 -0.0092386 -0.007404625 0.08991211 -0.00911355 -0.007179796 0.08991211 -0.009010851 -0.006944 0.08991211 -0.008931338 -0.006699323 0.08991211 -0.008875846 -0.006448149 0.08991211 -0.008844852 -0.006192803 0.08991211 -0.008838593 -0.005935668 0.08991211 -0.00885725 -0.00567907 0.08991211 -0.008900582 -0.005425512 0.08991211 -0.008968114 -0.005177319 0.08991211 -0.009059369 -0.004936814 0.08991211 -0.009173333 -0.004706203 0.08991211 -0.009309053 -0.004487693 0.08991211 -0.009465277 -0.004283308 0.08991211 -0.009640455 -0.004094958 0.08991211 -0.009832978 -0.003924369 0.08991211 -0.01004111 -0.003773152 0.08991211 -0.01026284 -0.003642797 0.08991211 -0.01049607 -0.003534376 0.08991211 -0.01073873 -0.003449022 0.08991211 -0.01098853 -0.003387451 0.08991211 -0.01124304 -0.003350257 0.08991211 -0.0115 -0.00333786 0.08994543 -0.01175308 -0.003389716 0.08994543 -0.01200383 -0.003426313 0.08994543 -0.01224988 -0.00348699 0.08994543 -0.0124889 -0.003571093 0.08994543 -0.01271873 -0.003677845 0.08994543 -0.01293712 -0.003806352 0.08994543 -0.01314216 -0.003955245 0.08994543 -0.01333183 -0.00412333 0.08994543 -0.01350438 -0.004308879 0.08994543 -0.01365822 -0.004510223 0.08994543 -0.01379197 -0.004725456 0.08994543 -0.01390427 -0.004952609 0.08994543 -0.01399409 -0.005189597 0.08994543 -0.01406067 -0.005434095 0.08994543 -0.01410335 -0.005683839 0.08994543 -0.01412171 -0.005936622 0.08994543 -0.01411557 -0.006189942 0.08994543 -0.01408505 -0.006441473 0.08994543 -0.01403033 -0.006688892 0.08994543 -0.01395207 -0.006929934 0.08994543 -0.01385086 -0.007162213 0.08994543 -0.01372772 -0.007383704 0.08994543 -0.01358377 -0.00759226 0.08994543 -0.01342034 -0.007785916 0.08994543 -0.01323902 -0.007962942 0.08994543 -0.01304143 -0.008121609 0.08994543 -0.01282948 -0.008260488 0.08994543 -0.01260507 -0.008378267 0.08994543 -0.0123704 -0.008473813 0.08994543 -0.01212757 -0.008546292 0.08994543 -0.0118789 -0.00859493 0.08994543 -0.01162666 -0.008619427 0.08994543 -0.01137328 -0.008619427 0.08994543 -0.01112103 -0.00859493 0.08994543 -0.01087236 -0.008546292 0.08994543 -0.01062953 -0.008473813 0.08994543 -0.01039487 -0.008378267 0.08994543 -0.01017045 -0.008260488 0.08994543 -0.009958505 -0.008121609 0.08994543 -0.009760916 -0.007962942 0.08994543 -0.009579598 -0.007785916 0.08994543 -0.009416162 -0.00759226 0.08994543 -0.009272217 -0.007383704 0.08994543 -0.009149074 -0.007162213 0.08994543 -0.009047865 -0.006929934 0.08994543 -0.008969604 -0.006688892 0.08994543 -0.008914887 -0.006441473 0.08994543 -0.00888437 -0.006189942 0.08994543 -0.008878231 -0.005936622 0.08994543 -0.008896589 -0.005683839 0.08994543 -0.008939266 -0.005434095 0.08994543 -0.009005844 -0.005189597 0.08994543 -0.009095668 -0.004952609 0.08994543 -0.009207963 -0.004725456 0.08994543 -0.009341716 -0.004510223 0.08994543 -0.009495556 -0.004308879 0.08994543 -0.009668111 -0.00412333 0.08994543 -0.009857773 -0.003955245 0.08994543 -0.01006281 -0.003806352 0.08994543 -0.01028126 -0.003677845 0.08994543 -0.01051104 -0.003571093 0.08994543 -0.01075005 -0.00348699 0.08994543 -0.0109961 -0.003426313 0.08994543 -0.01124686 -0.003389716 0.08994543 -0.0115 -0.003377497 0.08997142 -0.01174879 -0.0034343 0.08997142 -0.01199525 -0.003470242 0.08997142 -0.01223707 -0.003529846 0.08997142 -0.01247203 -0.003612518 0.08997142 -0.01269793 -0.003717482 0.08997142 -0.01291263 -0.003843784 0.08997142 -0.01311409 -0.003990173 0.08997142 -0.01330053 -0.004155337 0.08997142 -0.01347017 -0.004337728 0.08997142 -0.01362138 -0.004535675 0.08997142 -0.01375281 -0.004747211 0.08997142 -0.0138632 -0.00497049 0.08997142 -0.01395153 -0.005203425 0.08997142 -0.01401698 -0.005443751 0.08997142 -0.01405888 -0.005689263 0.08997142 -0.01407694 -0.005937695 0.08997142 -0.01407092 -0.006186664 0.08997142 -0.01404088 -0.006433963 0.08997142 -0.01398718 -0.00667715 0.08997142 -0.01391017 -0.006914019 0.08997142 -0.01381075 -0.007142424 0.08997142 -0.01368969 -0.0073601 0.08997142 -0.01354819 -0.007565081 0.08997142 -0.01338756 -0.007755458 0.08997142 -0.01320934 -0.007929444 0.08997142 -0.01301515 -0.008085429 0.08997142 -0.01280677 -0.008221924 0.08997142 -0.01258623 -0.008337676 0.08997142 -0.01235556 -0.008431553 0.08997142 -0.01211684 -0.008502781 0.08997142 -0.01187241 -0.008550643 0.08997142 -0.01162451 -0.008574724 0.08997142 -0.01137542 -0.008574724 0.08997142 -0.01112753 -0.008550643 0.08997142 -0.01088309 -0.008502781 0.08997142 -0.01064437 -0.008431553 0.08997142 -0.0104137 -0.008337676 0.08997142 -0.01019316 -0.008221924 0.08997142 -0.009984791 -0.008085429 0.08997142 -0.009790599 -0.007929444 0.08997142 -0.009612381 -0.007755458 0.08997142 -0.009451746 -0.007565081 0.08997142 -0.009310245 -0.0073601 0.08997142 -0.009189248 -0.007142424 0.08997142 -0.009089767 -0.006914019 0.08997142 -0.009012758 -0.00667715 0.08997142 -0.008959054 -0.006433963 0.08997142 -0.008929014 -0.006186664 0.08997142 -0.008922994 -0.005937695 0.08997142 -0.008941054 -0.005689263 0.08997142 -0.008982956 -0.005443751 0.08997142 -0.009048402 -0.005203425 0.08997142 -0.009136736 -0.00497049 0.08997142 -0.009247124 -0.004747211 0.08997142 -0.009378552 -0.004535675 0.08997142 -0.009529769 -0.004337728 0.08997142 -0.009699404 -0.004155337 0.08997142 -0.009885847 -0.003990173 0.08997142 -0.01008737 -0.003843784 0.08997142 -0.01030206 -0.003717482 0.08997142 -0.0105279 -0.003612518 0.08997142 -0.01076287 -0.003529846 0.08997142 -0.01100474 -0.003470242 0.08997142 -0.01125121 -0.0034343 0.08997142 -0.0115 -0.00342226 0.08998936 -0.01174408 -0.003482639 0.08998936 -0.01198589 -0.003517925 0.08998936 -0.01222318 -0.003576397 0.08998936 -0.01245373 -0.003657519 0.08998936 -0.01267534 -0.003760516 0.08998936 -0.01288598 -0.003884375 0.08998936 -0.01308369 -0.004028022 0.08998936 -0.01326662 -0.004190087 0.08998936 -0.01343303 -0.00436908 0.08998936 -0.01358145 -0.004563271 0.08998936 -0.01371037 -0.004770815 0.08998936 -0.01381868 -0.004989922 0.08998936 -0.01390534 -0.005218446 0.08998936 -0.01396954 -0.005454242 0.08998936 -0.01401066 -0.005695104 0.08998936 -0.01402837 -0.005938827 0.08998936 -0.01402246 -0.006183147 0.08998936 -0.01399302 -0.006425797 0.08998936 -0.01394027 -0.006664395 0.08998936 -0.01386475 -0.006896853 0.08998936 -0.01376718 -0.007120847 0.08998936 -0.01364839 -0.00733447 0.08998936 -0.01350957 -0.007535576 0.08998936 -0.01335197 -0.007722377 0.08998936 -0.01317709 -0.007893085 0.08998936 -0.0129866 -0.00804609 0.08998936 -0.01278215 -0.008180022 0.08998936 -0.01256579 -0.008293628 0.08998936 -0.01233941 -0.008385777 0.08998936 -0.01210522 -0.008455634 0.08998936 -0.01186543 -0.008502602 0.08998936 -0.01162219 -0.008526206 0.08998936 -0.01137781 -0.008526206 0.08998936 -0.01113456 -0.008502602 0.08998936 -0.01089471 -0.008455634 0.08998936 -0.01066052 -0.008385777 0.08998936 -0.01043421 -0.008293628 0.08998936 -0.01021778 -0.008180022 0.08998936 -0.01001334 -0.00804609 0.08998936 -0.009822845 -0.007893085 0.08998936 -0.009647965 -0.007722377 0.08998936 -0.00949037 -0.007535576 0.08998936 -0.009351551 -0.00733447 0.08998936 -0.009232759 -0.007120847 0.08998936 -0.009135186 -0.006896853 0.08998936 -0.009059667 -0.006664395 0.08998936 -0.009006917 -0.006425797 0.08998936 -0.008977472 -0.006183147 0.08998936 -0.008971571 -0.005938827 0.08998936 -0.008989274 -0.005695104 0.08998936 -0.009030401 -0.005454242 0.08998936 -0.009094595 -0.005218446 0.08998936 -0.009181261 -0.004989922 0.08998936 -0.009289562 -0.004770815 0.08998936 -0.009418487 -0.004563271 0.08998936 -0.009566903 -0.00436908 0.08998936 -0.009733319 -0.004190087 0.08998936 -0.009916245 -0.004028022 0.08998936 -0.01011395 -0.003884375 0.08998936 -0.01032459 -0.003760516 0.08998936 -0.01054626 -0.003657519 0.08998936 -0.01077675 -0.003576397 0.08998936 -0.01101404 -0.003517925 0.08998936 -0.01125586 -0.003482639 0.08998936 -0.0115 -0.003470838 0.08799999 -0.0111255 -0.003275573 0.08799999 -0.0115 -0.003249943 0.08799999 -0.01075804 -0.003351926 0.08799999 -0.01040434 -0.003477632 0.08799999 -0.01007109 -0.003650307 0.08799999 -0.009764492 -0.003866791 0.08799999 -0.009490191 -0.004122972 0.08799999 -0.009253323 -0.004414081 0.08799999 -0.009058296 -0.004734814 0.08799999 -0.008908748 -0.00507903 0.08799999 -0.00880748 -0.005440473 0.08799999 -0.008756399 -0.005812287 0.08799999 -0.008756399 -0.006187617 0.08799999 -0.00880748 -0.006559491 0.08799999 -0.008908748 -0.006920874 0.08799999 -0.009058296 -0.00726515 0.08799999 -0.009253323 -0.007585823 0.08799999 -0.009490191 -0.007876992 0.08799999 -0.009764492 -0.008133172 0.08799999 -0.01007109 -0.008349597 0.08799999 -0.01040434 -0.008522331 0.08799999 -0.01075804 -0.008647978 0.08799999 -0.0111255 -0.008724331 0.08799999 -0.0115 -0.008749961 0.08799999 -0.01187443 -0.008724331 0.08799999 -0.01224189 -0.008647978 0.08799999 -0.01259559 -0.008522331 0.08799999 -0.01292884 -0.008349597 0.08799999 -0.01323544 -0.008133172 0.08799999 -0.01350975 -0.007876992 0.08799999 -0.01374661 -0.007585823 0.08799999 -0.01394164 -0.00726515 0.08799999 -0.01409119 -0.006920874 0.08799999 -0.01419246 -0.006559491 0.08799999 -0.01424354 -0.006187617 0.08799999 -0.01424354 -0.005812287 0.08799999 -0.01419246 -0.005440473 0.08799999 -0.01409119 -0.00507903 0.08799999 -0.01394164 -0.004734814 0.08799999 -0.01374661 -0.004414081 0.08799999 -0.01350975 -0.004122972 0.08799999 -0.01323544 -0.003866791 0.08799999 -0.01292884 -0.003650307 0.08799999 -0.01259559 -0.003477632 0.08799999 -0.01224189 -0.003351926 0.08799999 -0.01187443 -0.003275573 0.078 -0.01228386 -0.006934165 0.078 -0.01243418 -0.006783843 0.078 -0.01044386 -0.006609737 0.078 -0.01056575 -0.005216062 0.078 -0.01044386 -0.005390226 0.078 -0.01191705 -0.007145941 0.078 -0.01210969 -0.007056117 0.078 -0.01071608 -0.006934165 0.078 -0.01255607 -0.006609737 0.078 -0.01264595 -0.006417036 0.078 -0.01270097 -0.006211757 0.078 -0.01271945 -0.005999982 0.078 -0.01270097 -0.005788207 0.078 -0.01264595 -0.005582869 0.078 -0.01035404 -0.005582869 0.078 -0.01029902 -0.005788207 0.078 -0.01028048 -0.005999982 0.078 -0.01255607 -0.005390226 0.078 -0.01243418 -0.005216062 0.078 -0.01228386 -0.005065798 0.078 -0.01029902 -0.006211757 0.078 -0.01035404 -0.006417036 0.078 -0.01056575 -0.006783843 0.078 -0.01210969 -0.004943847 0.078 -0.01191705 -0.004854023 0.078 -0.01071608 -0.005065798 0.078 -0.0115 -0.004780471 0.078 -0.01128822 -0.004799008 0.078 -0.01171171 -0.004799008 0.078 -0.01108288 -0.004854023 0.078 -0.01089024 -0.004943847 0.078 -0.01128822 -0.007200956 0.078 -0.0115 -0.007219493 0.078 -0.01108288 -0.007145941 0.078 -0.01089024 -0.007056117 0.078 -0.01171171 -0.007200956 0.08799999 -0.01008254 -0.005260467 0.08799999 -0.01010566 -0.005214571 0.08799999 -0.01245659 -0.00728178 0.08799999 -0.0124371 -0.007297217 0.08799999 -0.0106948 -0.007382988 0.08799999 -0.01071506 -0.007393598 0.08799999 -0.01082104 -0.007448911 0.08799999 -0.01090013 -0.007481575 0.08799999 -0.01230514 -0.004616975 0.08799999 -0.01219391 -0.004558861 0.08799999 -0.01217895 -0.004551053 0.08799999 -0.01129555 -0.007585465 0.08799999 -0.01122307 -0.007575988 0.08799999 -0.01109415 -0.007547557 0.08799999 -0.01108884 -0.007546365 0.08799999 -0.010957 -0.007504999 0.08799999 -0.01268339 -0.004925251 0.08799999 -0.01272624 -0.004971921 0.08799999 -0.01305866 -0.005644202 0.08799999 -0.01307255 -0.005703628 0.08799999 -0.01289427 -0.006785392 0.08799999 -0.01286727 -0.006828844 0.08799999 -0.0117045 -0.007586181 0.08799999 -0.01168286 -0.007589638 0.08799999 -0.01237225 -0.00465995 0.08799999 -0.01242065 -0.004691004 0.08799999 -0.01027369 -0.007028043 0.08799999 -0.01024985 -0.006996929 0.08799999 -0.009940981 -0.005644142 0.08799999 -0.009947776 -0.005610883 0.08799999 -0.01305216 -0.006389081 0.08799999 -0.01303255 -0.006454825 0.08799999 -0.0130127 -0.006521284 0.08799999 -0.01296269 -0.006647527 0.08799999 -0.01295924 -0.006656289 0.08799999 -0.01154476 -0.007599353 0.08799999 -0.0115 -0.007599949 0.08799999 -0.01136028 -0.007593929 0.08799999 -0.01057928 -0.007308959 0.08799999 -0.01054364 -0.007281422 0.08799999 -0.009987235 -0.00547862 0.08799999 -0.009999454 -0.005447804 0.08799999 -0.0100407 -0.005343616 0.08799999 -0.0128104 -0.005081295 0.08799999 -0.01281243 -0.005084455 0.08799999 -0.01288414 -0.005196869 0.08799999 -0.01273953 -0.00701189 0.08799999 -0.0127505 -0.006997287 0.08799999 -0.01282185 -0.006902039 0.08799999 -0.0122016 -0.007438063 0.08799999 -0.01228463 -0.007393181 0.08799999 -0.0123226 -0.007372677 0.08799999 -0.0104705 -0.007224977 0.08799999 -0.01038748 -0.007148683 0.08799999 -0.0103681 -0.007130801 0.08799999 -0.0101158 -0.006803095 0.08799999 -0.01013237 -0.006829023 0.08799999 -0.01018959 -0.006918609 0.08799999 -0.009908378 -0.00584644 0.08799999 -0.00992012 -0.005745351 0.08799999 -0.0102604 -0.004988014 0.08799999 -0.01018792 -0.005084753 0.08799999 -0.01017808 -0.005097866 0.08799999 -0.01031655 -0.004925191 0.08799999 -0.01035284 -0.004884541 0.08799999 -0.01045441 -0.004788637 0.08799999 -0.01046299 -0.004781901 0.08799999 -0.01177686 -0.004423916 0.08799999 -0.01180565 -0.004430294 0.08799999 -0.01252943 -0.004774928 0.08799999 -0.01253694 -0.004781842 0.08799999 -0.01263189 -0.004869103 0.08799999 -0.01309204 -0.005839645 0.08799999 -0.01309245 -0.005846321 0.08799999 -0.01309984 -0.005978047 0.08799999 -0.0130977 -0.006051182 0.08799999 -0.01309579 -0.006117343 0.08799999 -0.01307982 -0.006254613 0.08799999 -0.01264709 -0.007115364 0.08799999 -0.01261216 -0.007148385 0.08799999 -0.01254552 -0.007211327 0.08799999 -0.01210004 -0.007482171 0.08799999 -0.012075 -0.007493078 0.08799999 -0.01195228 -0.007534861 0.08799999 -0.01190555 -0.007546484 0.08799999 -0.01181858 -0.00756818 0.08799999 -0.009907901 -0.006160318 0.08799999 -0.009921491 -0.006255209 0.08799999 -0.009927392 -0.006296277 0.08799999 -0.009901762 -0.006051182 0.08799999 -0.009900152 -0.006021916 0.08799999 -0.009904146 -0.005882561 0.08799999 -0.01191115 -0.004453539 0.08799999 -0.01200377 -0.004482626 0.08799999 -0.01204293 -0.004494905 0.08799999 -0.01291739 -0.005260527 0.08799999 -0.01294785 -0.005318939 0.08799999 -0.0130006 -0.005444824 0.08799999 -0.01304119 -0.005569636 0.08799999 -0.01005208 -0.006681025 0.08799999 -0.01003789 -0.006647229 0.08799999 -0.01056283 -0.004702746 0.08799999 -0.01062774 -0.00465995 0.08799999 -0.01067733 -0.004627287 0.08799999 -0.01079833 -0.004561901 0.08799999 -0.01080584 -0.004558622 0.08799999 -0.01092493 -0.004506886 0.08799999 -0.01099616 -0.004482626 0.08799999 -0.01104766 -0.004465103 0.08799999 -0.01118135 -0.004431784 0.08799999 -0.01119416 -0.004429757 0.08799999 -0.009999334 -0.00655508 0.08799999 -0.00996679 -0.006455004 0.08799999 -0.009958744 -0.006430327 0.08799999 -0.01145517 -0.00440061 0.08799999 -0.01139754 -0.004404664 0.08799999 -0.01131707 -0.004410326 0.08799999 -0.0115 -0.004399955 0.08799999 -0.01160246 -0.004404425 0.08799999 -0.01163965 -0.004406034 0.0782805 -0.01002275 -0.00573951 0.0782805 -0.01009041 -0.005486965 0.0782805 -0.01020091 -0.005249977 0.0782805 -0.01035088 -0.005035817 0.0782805 -0.01053577 -0.004850924 0.0782805 -0.01074999 -0.004700958 0.0782805 -0.01098692 -0.004590451 0.0782805 -0.01123952 -0.00452274 0.0782805 -0.0115 -0.004499971 0.0782805 -0.01176047 -0.00452274 0.0782805 -0.01201301 -0.004590451 0.0782805 -0.01224994 -0.004700958 0.0782805 -0.01246416 -0.004850924 0.0782805 -0.01264905 -0.005035817 0.0782805 -0.01279902 -0.005249977 0.0782805 -0.01290953 -0.005486965 0.0782805 -0.01297718 -0.00573951 0.0782805 -0.01299995 -0.005999982 0.0782805 -0.01297718 -0.006260454 0.0782805 -0.01290953 -0.006512999 0.0782805 -0.01279902 -0.006749987 0.0782805 -0.01264905 -0.006964147 0.0782805 -0.01246416 -0.00714904 0.0782805 -0.01224994 -0.007299005 0.0782805 -0.01201301 -0.007409512 0.0782805 -0.01176047 -0.007477164 0.0782805 -0.0115 -0.007499992 0.0782805 -0.01123952 -0.007477164 0.0782805 -0.01098692 -0.007409512 0.0782805 -0.01074999 -0.007299005 0.0782805 -0.01053577 -0.00714904 0.0782805 -0.01035088 -0.006964147 0.0782805 -0.01020091 -0.006749987 0.0782805 -0.01009041 -0.006512999 0.0782805 -0.01002275 -0.006260454 0.0782805 -0.00999999 -0.005999982 0.08799952 -0.01139807 -0.004412651 0.08799952 -0.01160186 -0.004412651 0.08799952 -0.01180404 -0.004438698 0.08799952 -0.01200115 -0.004490435 0.08799952 -0.0121901 -0.004566907 0.08799952 -0.01236772 -0.004666924 0.08799952 -0.01253104 -0.004788815 0.08799952 -0.01267743 -0.004930615 0.08799952 -0.0128045 -0.005089938 0.08799952 -0.01291018 -0.005264282 0.08799952 -0.01299268 -0.005450665 0.08799952 -0.01305067 -0.005646049 0.08799952 -0.01308321 -0.005847215 0.08799952 -0.01308977 -0.006050944 0.08799952 -0.01307016 -0.006253838 0.08799952 -0.0130248 -0.00645256 0.08799952 -0.01295441 -0.006643831 0.08799952 -0.01286017 -0.006824493 0.08799952 -0.01274353 -0.006991684 0.08799952 -0.0126065 -0.007142543 0.08799952 -0.01245135 -0.007274687 0.08799952 -0.01228052 -0.007385909 0.08799952 -0.01209688 -0.007474303 0.08799952 -0.01190346 -0.007538557 0.08799952 -0.01170337 -0.007577478 0.08799952 -0.0115 -0.007590532 0.08799952 -0.01129657 -0.007577478 0.08799952 -0.01109653 -0.007538557 0.08799952 -0.01090306 -0.007474303 0.08799952 -0.01071941 -0.007385909 0.08799952 -0.01054865 -0.007274687 0.08799952 -0.01039344 -0.007142543 0.08799952 -0.0102564 -0.006991684 0.08799952 -0.01013982 -0.006824493 0.08799952 -0.01004552 -0.006643831 0.08799952 -0.009975135 -0.00645256 0.08799952 -0.009929776 -0.006253838 0.08799952 -0.009910225 -0.006050944 0.08799952 -0.009916722 -0.005847215 0.08799952 -0.009949266 -0.005646049 0.08799952 -0.01000726 -0.005450665 0.08799952 -0.01008975 -0.005264282 0.08799952 -0.01019543 -0.005089938 0.08799952 -0.01032251 -0.004930615 0.08799952 -0.0104689 -0.004788815 0.08799952 -0.01063227 -0.004666924 0.08799952 -0.01080983 -0.004566907 0.08799952 -0.01099878 -0.004490435 0.08799952 -0.01119589 -0.004438698 0.0879094 -0.01102715 -0.004575967 0.08789998 -0.01121324 -0.004527628 0.0879094 -0.01121312 -0.004527211 0.08789998 -0.0112397 -0.00452423 0.0879094 -0.01140385 -0.004502594 0.0879094 -0.01084893 -0.004648089 0.08789998 -0.01098775 -0.004592418 0.08789998 -0.01102733 -0.004576385 0.0879094 -0.01068145 -0.004742443 0.08789998 -0.01075142 -0.004703521 0.08789998 -0.01084917 -0.004648506 0.0879094 -0.0103892 -0.004991233 0.08789998 -0.01052761 -0.004857778 0.0879094 -0.01052737 -0.00485748 0.08789998 -0.01053619 -0.0048514 0.08789998 -0.01068168 -0.00474286 0.0879094 -0.01026934 -0.005141556 0.08789998 -0.01035296 -0.005037426 0.08789998 -0.01038956 -0.004991531 0.0879094 -0.01009184 -0.005481779 0.08789998 -0.0101701 -0.005306184 0.0879094 -0.01016968 -0.005305945 0.08789998 -0.0102033 -0.005251407 0.08789998 -0.0102697 -0.005141794 0.0879094 -0.01003712 -0.005666077 0.08789998 -0.01009076 -0.005487024 0.08789998 -0.01009225 -0.005481898 0.0879094 -0.01000648 -0.005855917 0.08789998 -0.01002568 -0.005739986 0.08789998 -0.0100376 -0.005666196 0.08789998 -0.01002395 -0.006260156 0.08789998 -0.01001918 -0.006239354 0.0879094 -0.01001876 -0.006239414 0.08789998 -0.01000076 -0.006048023 0.0879094 -0.01000028 -0.006048083 0.08789998 -0.01000231 -0.006000041 0.08789998 -0.0100069 -0.005855917 0.08789998 -0.01006197 -0.006426751 0.0879094 -0.01006156 -0.00642687 0.08789998 -0.01009333 -0.006511926 0.0879094 -0.01012796 -0.006607353 0.08789998 -0.01012837 -0.006607174 0.08789998 -0.01020246 -0.006749153 0.0879094 -0.01021689 -0.006777763 0.08789998 -0.01021724 -0.006777584 0.0879094 -0.01032686 -0.006935477 0.08789998 -0.01032721 -0.006935179 0.08789998 -0.01035231 -0.006962835 0.0879094 -0.01045614 -0.007077813 0.08789998 -0.01045644 -0.007077515 0.08789998 -0.01053774 -0.007146716 0.0879094 -0.01060253 -0.007202446 0.08789998 -0.01060283 -0.007202088 0.08789998 -0.01075047 -0.007298231 0.0879094 -0.0107637 -0.00730735 0.08789998 -0.01076388 -0.007306933 0.0879094 -0.01093691 -0.007390737 0.08789998 -0.01093709 -0.00739032 0.08789998 -0.01098769 -0.007407188 0.0879094 -0.01111936 -0.007451355 0.08789998 -0.01111948 -0.007450938 0.08789998 -0.01124006 -0.007474362 0.0879094 -0.01130807 -0.007488071 0.08789998 -0.01130813 -0.007487654 0.0879094 -0.0115 -0.00750041 0.08789998 -0.0115 -0.007499992 0.0879094 -0.01169186 -0.007488071 0.08789998 -0.0116918 -0.007487654 0.08789998 -0.01175987 -0.007474362 0.0879094 -0.01188057 -0.007451355 0.08789998 -0.01188045 -0.007450938 0.08789998 -0.01201224 -0.007407188 0.0879094 -0.01206302 -0.007390737 0.08789998 -0.01206284 -0.00739032 0.0879094 -0.01223629 -0.00730735 0.08789998 -0.01223605 -0.007306933 0.0879094 -0.01254379 -0.007077813 0.08789998 -0.01246219 -0.007146716 0.0879094 -0.0123974 -0.007202446 0.08789998 -0.01239717 -0.007202088 0.08789998 -0.01224946 -0.007298231 0.0879094 -0.01278305 -0.006777763 0.08789998 -0.01267272 -0.006935179 0.0879094 -0.01267307 -0.006935477 0.08789998 -0.01264762 -0.006962835 0.08789998 -0.01254349 -0.007077515 0.0879094 -0.01287198 -0.006607353 0.08789998 -0.01279747 -0.006749153 0.08789998 -0.01278269 -0.006777584 0.0879094 -0.01293838 -0.00642687 0.08789998 -0.01290661 -0.006511926 0.08789998 -0.01287162 -0.006607174 0.0879094 -0.01299965 -0.006048083 0.08789998 -0.01298075 -0.006239354 0.0879094 -0.01298117 -0.006239414 0.08789998 -0.01297599 -0.006260156 0.08789998 -0.01293796 -0.006426751 0.0879094 -0.01299351 -0.005855917 0.08789998 -0.01299768 -0.006000041 0.08789998 -0.01299917 -0.006048023 0.0879094 -0.01296281 -0.005666077 0.08789998 -0.01297432 -0.005739986 0.08789998 -0.01299303 -0.005855917 0.0879094 -0.01283025 -0.005305945 0.08789998 -0.01290768 -0.005481898 0.0879094 -0.0129081 -0.005481779 0.08789998 -0.01290917 -0.005487024 0.08789998 -0.01296234 -0.005666196 0.0879094 -0.01273059 -0.005141556 0.08789998 -0.0127967 -0.005251407 0.08789998 -0.01282989 -0.005306184 0.08789998 -0.01246374 -0.0048514 0.08789998 -0.01247233 -0.004857778 0.0879094 -0.01247262 -0.00485748 0.08789998 -0.01261037 -0.004991531 0.0879094 -0.01261073 -0.004991233 0.08789998 -0.01264697 -0.005037426 0.08789998 -0.01273024 -0.005141794 0.08789998 -0.01231825 -0.00474286 0.0879094 -0.01231849 -0.004742443 0.08789998 -0.01224851 -0.004703521 0.0879094 -0.012151 -0.004648089 0.08789998 -0.01215082 -0.004648506 0.08789998 -0.01201218 -0.004592418 0.0879094 -0.01197278 -0.004575967 0.08789998 -0.01197266 -0.004576385 0.0879094 -0.01178681 -0.004527211 0.08789998 -0.01178669 -0.004527628 0.08789998 -0.01140385 -0.004503071 0.08789998 -0.0115 -0.004499971 0.0879094 -0.01159608 -0.004502594 0.08789998 -0.01159608 -0.004503071 0.08789998 -0.01176023 -0.00452423 0.08799642 -0.01170122 -0.00756067 0.08799642 -0.01189911 -0.007522106 0.08799642 -0.0120905 -0.007458567 0.08799642 -0.01227217 -0.007371068 0.08799642 -0.01244115 -0.007261097 0.08799642 -0.01259469 -0.007130384 0.08799642 -0.0127303 -0.006981074 0.08799642 -0.01284563 -0.006815731 0.08799642 -0.01293891 -0.006636917 0.08799642 -0.01300853 -0.006447732 0.08799642 -0.01305341 -0.006251096 0.08799642 -0.01307278 -0.006050407 0.08799642 -0.01306629 -0.005848884 0.08799642 -0.0130341 -0.005649805 0.08799642 -0.01297676 -0.005456507 0.08799642 -0.01289516 -0.00527209 0.08799642 -0.01279062 -0.005099654 0.08799642 -0.01266491 -0.004941999 0.08799642 -0.01252001 -0.00480175 0.08799642 -0.01235842 -0.004681169 0.08799642 -0.01218271 -0.004582166 0.08799642 -0.01199585 -0.004506528 0.08799642 -0.01180076 -0.004455387 0.08799642 -0.01160079 -0.004429578 0.08799642 -0.01139914 -0.004429578 0.08799642 -0.01119917 -0.004455387 0.08799642 -0.01100409 -0.004506528 0.08799642 -0.01081722 -0.004582166 0.08799642 -0.01064151 -0.004681169 0.08799642 -0.01047992 -0.00480175 0.08799642 -0.01033508 -0.004941999 0.08799642 -0.01020932 -0.005099654 0.08799642 -0.01010483 -0.00527209 0.08799642 -0.01002317 -0.005456507 0.08799642 -0.009965837 -0.005649805 0.08799642 -0.00993365 -0.005848884 0.08799642 -0.009927153 -0.006050407 0.08799642 -0.009946525 -0.006251096 0.08799642 -0.009991407 -0.006447732 0.08799642 -0.01006102 -0.006636917 0.08799642 -0.0101543 -0.006815731 0.08799642 -0.0102697 -0.006981074 0.08799642 -0.01040524 -0.007130384 0.08799642 -0.01055878 -0.007261097 0.08799642 -0.01072776 -0.007371068 0.08799642 -0.01090943 -0.007458567 0.08799642 -0.01110082 -0.007522106 0.08799642 -0.01129877 -0.00756067 0.08799642 -0.0115 -0.007573604 0.08799046 -0.01169914 -0.007544577 0.08799046 -0.011895 -0.00750643 0.08799046 -0.01208442 -0.007443547 0.08799046 -0.01226425 -0.007357001 0.08799046 -0.0124315 -0.007248103 0.08799046 -0.01258343 -0.007118761 0.08799046 -0.0127176 -0.006971001 0.08799046 -0.0128318 -0.006807327 0.08799046 -0.01292407 -0.006630361 0.08799046 -0.01299303 -0.006443083 0.08799046 -0.01303744 -0.006248533 0.08799046 -0.01305657 -0.006049871 0.08799046 -0.01305019 -0.005850434 0.08799046 -0.01301836 -0.00565344 0.08799046 -0.01296156 -0.00546211 0.08799046 -0.0128808 -0.0052796 0.08799046 -0.01277732 -0.005108952 0.08799046 -0.01265287 -0.004952907 0.08799046 -0.01250952 -0.004814088 0.08799046 -0.0123496 -0.0046947 0.08799046 -0.01217573 -0.004596769 0.08799046 -0.01199072 -0.004521906 0.08799046 -0.01179766 -0.004471242 0.08799046 -0.01159977 -0.004445731 0.08799046 -0.01140016 -0.004445731 0.08799046 -0.01120227 -0.004471242 0.08799046 -0.01100921 -0.004521906 0.08799046 -0.01082426 -0.004596769 0.08799046 -0.01065033 -0.0046947 0.08799046 -0.01049041 -0.004814088 0.08799046 -0.01034706 -0.004952907 0.08799046 -0.01022261 -0.005108952 0.08799046 -0.01011914 -0.0052796 0.08799046 -0.01003837 -0.00546211 0.08799046 -0.009981572 -0.00565344 0.08799046 -0.009949743 -0.005850434 0.08799046 -0.009943366 -0.006049871 0.08799046 -0.009962499 -0.006248533 0.08799046 -0.0100069 -0.006443083 0.08799046 -0.01007586 -0.006630361 0.08799046 -0.01016813 -0.006807327 0.08799046 -0.01028233 -0.006971001 0.08799046 -0.0104165 -0.007118761 0.08799046 -0.01056843 -0.007248103 0.08799046 -0.01073575 -0.007357001 0.08799046 -0.01091551 -0.007443547 0.08799046 -0.01110494 -0.00750643 0.08799046 -0.0113008 -0.007544577 0.08799046 -0.0115 -0.007557392 0.08798182 -0.01169723 -0.007529795 0.08798182 -0.01189124 -0.007492005 0.08798182 -0.01207882 -0.007429718 0.08798182 -0.01225692 -0.007344007 0.08798182 -0.01242256 -0.007236123 0.08798182 -0.01257306 -0.007108032 0.08798182 -0.01270592 -0.006961703 0.08798182 -0.01281905 -0.006799578 0.08798182 -0.01291048 -0.006624341 0.08798182 -0.01297873 -0.006438851 0.08798182 -0.01302272 -0.006246149 0.08798182 -0.01304167 -0.006049394 0.08798182 -0.01303535 -0.005851864 0.08798182 -0.01300382 -0.005656719 0.08798182 -0.01294755 -0.005467236 0.08798182 -0.01286756 -0.005286514 0.08798182 -0.0127651 -0.005117475 0.08798182 -0.01264184 -0.004962921 0.08798182 -0.01249986 -0.004825413 0.08798182 -0.01234143 -0.004707217 0.08798182 -0.01216924 -0.00461024 0.08798182 -0.01198601 -0.004536032 0.08798182 -0.01179486 -0.004485905 0.08798182 -0.01159882 -0.004460632 0.08798182 -0.01140117 -0.004460632 0.08798182 -0.01120513 -0.004485905 0.08798182 -0.01101392 -0.004536032 0.08798182 -0.0108307 -0.00461024 0.08798182 -0.0106585 -0.004707217 0.08798182 -0.01050007 -0.004825413 0.08798182 -0.01035809 -0.004962921 0.08798182 -0.01023483 -0.005117475 0.08798182 -0.01013237 -0.005286514 0.08798182 -0.01005238 -0.005467236 0.08798182 -0.009996116 -0.005656719 0.08798182 -0.009964585 -0.005851864 0.08798182 -0.009958267 -0.006049394 0.08798182 -0.009977221 -0.006246149 0.08798182 -0.0100212 -0.006438851 0.08798182 -0.01008951 -0.006624341 0.08798182 -0.01018089 -0.006799578 0.08798182 -0.01029402 -0.006961703 0.08798182 -0.01042687 -0.007108032 0.08798182 -0.01057738 -0.007236123 0.08798182 -0.01074302 -0.007344007 0.08798182 -0.01092112 -0.007429718 0.08798182 -0.01110869 -0.007492005 0.08798182 -0.0113027 -0.007529795 0.08798182 -0.0115 -0.00754249 0.08797067 -0.01169556 -0.007516682 0.08797067 -0.0118879 -0.00747925 0.08797067 -0.01207387 -0.0074175 0.08797067 -0.01225042 -0.007332444 0.08797067 -0.01241463 -0.007225573 0.08797067 -0.01256388 -0.007098555 0.08797067 -0.01269561 -0.006953477 0.08797067 -0.01280772 -0.006792724 0.08797067 -0.01289838 -0.006618976 0.08797067 -0.01296603 -0.006435096 0.08797067 -0.01300966 -0.006244063 0.08797067 -0.0130285 -0.006048977 0.08797067 -0.01302218 -0.005853116 0.08797067 -0.01299095 -0.005659699 0.08797067 -0.01293516 -0.005471825 0.08797067 -0.01285582 -0.005292594 0.08797067 -0.01275426 -0.005125045 0.08797067 -0.01263207 -0.004971802 0.08797067 -0.01249128 -0.004835486 0.08797067 -0.01233422 -0.004718303 0.08797067 -0.01216351 -0.004622101 0.08797067 -0.01198184 -0.004548609 0.08797067 -0.0117923 -0.004498898 0.08797067 -0.01159793 -0.004473805 0.08797067 -0.01140201 -0.004473805 0.08797067 -0.01120764 -0.004498898 0.08797067 -0.01101809 -0.004548609 0.08797067 -0.01083642 -0.004622101 0.08797067 -0.01066571 -0.004718303 0.08797067 -0.01050865 -0.004835486 0.08797067 -0.01036787 -0.004971802 0.08797067 -0.01024568 -0.005125045 0.08797067 -0.01014411 -0.005292594 0.08797067 -0.01006478 -0.005471825 0.08797067 -0.01000905 -0.005659699 0.08797067 -0.009977757 -0.005853116 0.08797067 -0.009971439 -0.006048977 0.08797067 -0.009990274 -0.006244063 0.08797067 -0.0100339 -0.006435096 0.08797067 -0.01010155 -0.006618976 0.08797067 -0.01019221 -0.006792724 0.08797067 -0.01030433 -0.006953477 0.08797067 -0.01043605 -0.007098555 0.08797067 -0.0105853 -0.007225573 0.08797067 -0.01074951 -0.007332444 0.08797067 -0.01092606 -0.0074175 0.08797067 -0.01111203 -0.00747925 0.08797067 -0.01130443 -0.007516682 0.08797067 -0.0115 -0.007529258 0.0879575 -0.01169413 -0.007505714 0.0879575 -0.01188504 -0.007468521 0.0879575 -0.0120697 -0.007407188 0.0879575 -0.01224499 -0.007322788 0.0879575 -0.01240801 -0.007216691 0.0879575 -0.01255613 -0.007090568 0.0879575 -0.01268696 -0.006946563 0.0879575 -0.01279824 -0.006787002 0.0879575 -0.01288819 -0.006614506 0.0879575 -0.01295542 -0.006431937 0.0879575 -0.0129987 -0.006242275 0.0879575 -0.01301735 -0.006048619 0.0879575 -0.01301115 -0.005854189 0.0879575 -0.0129801 -0.005662143 0.0879575 -0.01292473 -0.00547564 0.0879575 -0.01284599 -0.00529778 0.0879575 -0.01274514 -0.005131363 0.0879575 -0.01262384 -0.004979312 0.0879575 -0.01248413 -0.00484395 0.0879575 -0.0123282 -0.004727602 0.0879575 -0.01215869 -0.004632115 0.0879575 -0.01197838 -0.004559099 0.0879575 -0.01179021 -0.004509806 0.0879575 -0.01159721 -0.004484891 0.0879575 -0.01140272 -0.004484891 0.0879575 -0.01120978 -0.004509806 0.0879575 -0.01102155 -0.004559099 0.0879575 -0.01084125 -0.004632115 0.0879575 -0.01067173 -0.004727602 0.0879575 -0.01051586 -0.00484395 0.0879575 -0.01037609 -0.004979312 0.0879575 -0.0102548 -0.005131363 0.0879575 -0.01015394 -0.00529778 0.0879575 -0.01007521 -0.00547564 0.0879575 -0.01001983 -0.005662143 0.0879575 -0.009988784 -0.005854189 0.0879575 -0.009982585 -0.006048619 0.0879575 -0.01000124 -0.006242275 0.0879575 -0.01004451 -0.006431937 0.0879575 -0.01011174 -0.006614506 0.0879575 -0.01020169 -0.006787002 0.0879575 -0.01031303 -0.006946563 0.0879575 -0.0104438 -0.007090568 0.0879575 -0.01059192 -0.007216691 0.0879575 -0.010755 -0.007322788 0.0879575 -0.01093024 -0.007407188 0.0879575 -0.01111489 -0.007468521 0.0879575 -0.0113058 -0.007505714 0.0879575 -0.0115 -0.007518172 0.08794254 -0.011693 -0.007497072 0.08794254 -0.01188284 -0.007460117 0.08794254 -0.01206642 -0.007399141 0.08794254 -0.0122407 -0.007315218 0.08794254 -0.01240283 -0.007209718 0.08794254 -0.01255011 -0.00708431 0.08794254 -0.01268017 -0.006941139 0.08794254 -0.01279079 -0.006782472 0.08794254 -0.01288032 -0.006610989 0.08794254 -0.01294708 -0.006429493 0.08794254 -0.01299011 -0.006240904 0.08794254 -0.01300871 -0.006048381 0.08794254 -0.01300251 -0.005855023 0.08794254 -0.01297163 -0.00566405 0.08794254 -0.01291662 -0.00547862 0.08794254 -0.0128383 -0.005301773 0.08794254 -0.01273804 -0.00513637 0.08794254 -0.0126174 -0.004985094 0.08794254 -0.01247847 -0.004850566 0.08794254 -0.01232349 -0.004734873 0.08794254 -0.01215493 -0.004639923 0.08794254 -0.01197564 -0.004567325 0.08794254 -0.01178854 -0.00451827 0.08794254 -0.01159667 -0.004493534 0.08794254 -0.01140326 -0.004493534 0.08794254 -0.01121139 -0.00451827 0.08794254 -0.01102429 -0.004567325 0.08794254 -0.010845 -0.004639923 0.08794254 -0.0106765 -0.004734873 0.08794254 -0.01052147 -0.004850566 0.08794254 -0.01038253 -0.004985094 0.08794254 -0.01026189 -0.00513637 0.08794254 -0.01016163 -0.005301773 0.08794254 -0.01008331 -0.00547862 0.08794254 -0.0100283 -0.00566405 0.08794254 -0.009997427 -0.005855023 0.08794254 -0.009991228 -0.006048381 0.08794254 -0.01000982 -0.006240904 0.08794254 -0.01005285 -0.006429493 0.08794254 -0.01011967 -0.006610989 0.08794254 -0.01020914 -0.006782472 0.08794254 -0.01031976 -0.006941139 0.08794254 -0.01044982 -0.00708431 0.08794254 -0.0105971 -0.007209718 0.08794254 -0.01075923 -0.007315218 0.08794254 -0.01093351 -0.007399141 0.08794254 -0.0111171 -0.007460117 0.08794254 -0.01130694 -0.007497072 0.08794254 -0.0115 -0.007509469 0.08792638 -0.01169222 -0.007491171 0.08792638 -0.01188135 -0.007454335 0.08792638 -0.01206421 -0.007393658 0.08792638 -0.01223778 -0.007310032 0.08792638 -0.01239925 -0.007204949 0.08792638 -0.01254594 -0.007080018 0.08792638 -0.01267546 -0.006937444 0.08792638 -0.01278573 -0.006779372 0.08792638 -0.01287484 -0.006608605 0.08792638 -0.01294136 -0.006427764 0.08792638 -0.01298427 -0.00623995 0.08792638 -0.01300275 -0.006048142 0.08792638 -0.01299655 -0.005855619 0.08792638 -0.01296579 -0.005665421 0.08792638 -0.01291102 -0.005480706 0.08792638 -0.01283299 -0.005304515 0.08792638 -0.01273316 -0.005139768 0.08792638 -0.01261299 -0.004989147 0.08792638 -0.01247459 -0.004855096 0.08792638 -0.01232022 -0.00473988 0.08792638 -0.01215231 -0.004645347 0.08792638 -0.01197373 -0.004573047 0.08792638 -0.01178741 -0.004524171 0.08792638 -0.01159632 -0.004499495 0.08792638 -0.01140362 -0.004499495 0.08792638 -0.01121258 -0.004524171 0.08792638 -0.0110262 -0.004573047 0.08792638 -0.01084762 -0.004645347 0.08792638 -0.01067972 -0.00473988 0.08792638 -0.01052534 -0.004855096 0.08792638 -0.01038694 -0.004989147 0.08792638 -0.01026678 -0.005139768 0.08792638 -0.01016694 -0.005304515 0.08792638 -0.01008892 -0.005480706 0.08792638 -0.01003414 -0.005665421 0.08792638 -0.01000338 -0.005855619 0.08792638 -0.009997189 -0.006048142 0.08792638 -0.01001572 -0.00623995 0.08792638 -0.01005858 -0.006427764 0.08792638 -0.0101251 -0.006608605 0.08792638 -0.0102142 -0.006779372 0.08792638 -0.01032447 -0.006937444 0.08792638 -0.01045399 -0.007080018 0.08792638 -0.01060068 -0.007204949 0.08792638 -0.01076215 -0.007310032 0.08792638 -0.01093572 -0.007393658 0.08792638 -0.01111859 -0.007454335 0.08792638 -0.01130771 -0.007491171 0.08792638 -0.0115 -0.007503509 0.08792263 0.0115 -0.005999982 0.08849996 0.01132631 -0.005015134 0.08849996 0.01115792 -0.005060255 0.08849996 0.0115 -0.004999995 0.08849996 0.01085716 -0.005233943 0.08849996 0.0107339 -0.005357205 0.08849996 0.01099997 -0.005133926 0.08849996 0.01056027 -0.00565797 0.08849996 0.01051515 -0.005826294 0.08849996 0.01063394 -0.005499958 0.08849996 0.01070719 -0.005390465 0.08849996 0.01051515 -0.00617361 0.08849996 0.01056027 -0.006341993 0.08849996 0.01049995 -0.005999982 0.08849996 0.0107339 -0.006642758 0.08849996 0.01085716 -0.006766021 0.08849996 0.01063394 -0.006499946 0.08849996 0.01057577 -0.006381809 0.08849996 0.01115792 -0.006939649 0.08849996 0.01132631 -0.00698477 0.08849996 0.01099997 -0.006865978 0.08849996 0.01167362 -0.00698477 0.08849996 0.01184201 -0.006939649 0.08849996 0.0115 -0.006999969 0.08849996 0.01136857 -0.006991326 0.08849996 0.01214277 -0.006766021 0.08849996 0.01226603 -0.006642758 0.08849996 0.01199996 -0.006865978 0.08849996 0.01243966 -0.006341993 0.08849996 0.01248478 -0.00617361 0.08849996 0.01236599 -0.006499946 0.08849996 0.0122928 -0.006609439 0.08849996 0.01248478 -0.005826294 0.08849996 0.01243966 -0.00565797 0.08849996 0.01249998 -0.005999982 0.08849996 0.01226603 -0.005357205 0.08849996 0.01214277 -0.005233943 0.08849996 0.01236599 -0.005499958 0.08849996 0.01242417 -0.005618095 0.08849996 0.01184201 -0.005060255 0.08849996 0.01167362 -0.005015134 0.08849996 0.01199996 -0.005133926 0.08849996 0.01163136 -0.005008637 0.08849996 0.01220375 -0.005084514 0.08849996 0.01264464 -0.006151735 0.08849996 0.01194089 -0.007067143 0.08849996 0.01079618 -0.00691545 0.08849996 0.01105904 -0.004932761 0.08849996 0.01035529 -0.005848228 0.08999997 0.01220375 -0.005084514 0.08999997 0.01105904 -0.004932761 0.08999997 0.01264464 -0.006151735 0.08999997 0.01194089 -0.007067143 0.08999997 0.01079618 -0.00691545 0.08999997 0.01035529 -0.005848228 0.08999997 0.01107507 -0.003587067 0.08999997 0.01084423 -0.00363934 0.08999997 0.01042544 -0.008201777 0.08999997 0.010643 -0.008295178 0.08999997 0.009053468 -0.006130933 0.08999997 0.009077548 -0.006366431 0.08999997 0.01354241 -0.004646837 0.08999997 0.01340228 -0.004456043 0.08999997 0.01367515 -0.007127404 0.08999997 0.01377379 -0.006912171 0.08999997 0.01021796 -0.008087754 0.08999997 0.009052276 -0.005894184 0.08999997 0.009124219 -0.006598532 0.08999997 0.009193062 -0.006825029 0.08999997 0.00923562 -0.006935477 0.08999997 0.009283483 -0.007043778 0.08999997 0.0096578 -0.004384756 0.08999997 0.009510517 -0.004570126 0.08999997 0.009381771 -0.004768788 0.08999997 0.009272873 -0.004978954 0.08999997 0.009184718 -0.005198657 0.08999997 0.01130998 -0.003557324 0.08999997 0.01393973 -0.006223917 0.08999997 0.01394993 -0.005987405 0.08999997 0.01393729 -0.005750954 0.08999997 0.01390188 -0.005516886 0.08999997 0.01324439 -0.004279613 0.08999997 0.01307016 -0.004119277 0.08999997 0.01288133 -0.003976523 0.08999997 0.009394586 -0.007252871 0.08999997 0.009525299 -0.007450222 0.08999997 0.009674489 -0.007634043 0.08999997 0.009840726 -0.007802605 0.08999997 0.01002246 -0.007954299 0.08999997 0.01061946 -0.003713667 0.08999997 0.01040285 -0.003809332 0.08999997 0.01019656 -0.003925442 0.08999997 0.009118199 -0.00542587 0.08999997 0.009073913 -0.005658447 0.08999997 0.01267963 -0.003852665 0.08999997 0.01246684 -0.003748834 0.08999997 0.01224505 -0.003666043 0.08999997 0.01201635 -0.003605008 0.08999997 0.01178276 -0.003566324 0.08999997 0.01154661 -0.00355041 0.08999997 0.01384407 -0.005287349 0.08999997 0.01376432 -0.005064427 0.08999997 0.01366347 -0.004850268 0.08999997 0.01308941 -0.007864415 0.08999997 0.01290208 -0.008009076 0.08999997 0.01270163 -0.00813502 0.08999997 0.01385122 -0.006688475 0.08999997 0.01390671 -0.006458342 0.08999997 0.01133507 -0.008444428 0.08999997 0.01109993 -0.008417069 0.08999997 0.01086848 -0.00836718 0.08999997 0.01157176 -0.008448898 0.08999997 0.01180779 -0.00843054 0.08999997 0.01204091 -0.008389532 0.08999997 0.01000243 -0.004060924 0.08999997 0.009822309 -0.004214525 0.08999997 0.01326197 -0.007702291 0.08999997 0.01341801 -0.007524311 0.08999997 0.01355618 -0.007332026 0.08999997 0.01226902 -0.008326113 0.08999997 0.01248997 -0.008241057 0.08999866 0.009166479 -0.006834506 0.08999866 0.00909686 -0.006605386 0.08999866 0.009049594 -0.006370663 0.08999866 0.009025275 -0.006132423 0.08999866 0.009024024 -0.005892932 0.08999866 0.009045958 -0.005654513 0.08999866 0.009090721 -0.005419254 0.08999866 0.009158015 -0.005189478 0.08999866 0.009247183 -0.004967212 0.08999866 0.009357392 -0.004754602 0.08999866 0.009487569 -0.004553616 0.08999866 0.00963658 -0.004366159 0.08999866 0.009802937 -0.004193961 0.08999866 0.009985208 -0.004038572 0.08999866 0.01018154 -0.003901541 0.08999866 0.01039022 -0.00378406 0.08999866 0.01060926 -0.003687322 0.08999866 0.01083666 -0.00361216 0.08999866 0.01107019 -0.003559291 0.08999866 0.01130777 -0.003529191 0.08999866 0.01154714 -0.003522157 0.08999866 0.01178604 -0.00353831 0.08999866 0.01202231 -0.003577411 0.08999866 0.01225364 -0.003639101 0.08999866 0.01247799 -0.003722906 0.08999866 0.01269322 -0.003827929 0.08999866 0.01289725 -0.003953218 0.08999866 0.01308828 -0.00409764 0.08999866 0.01326447 -0.004259824 0.08999866 0.01342421 -0.004438221 0.08999866 0.01356595 -0.004631221 0.08999866 0.01368838 -0.004837036 0.08999866 0.01379042 -0.005053639 0.08999866 0.01387107 -0.005279123 0.08999866 0.01392954 -0.005511343 0.08999866 0.01396536 -0.005748093 0.08999866 0.01397818 -0.005987226 0.08999866 0.01396781 -0.00622648 0.08999866 0.01393443 -0.006463587 0.08999866 0.01387834 -0.006696403 0.08999866 0.01380002 -0.006922721 0.08999866 0.01370024 -0.007140398 0.08999866 0.0135799 -0.007347404 0.08999866 0.01344013 -0.007541835 0.08999866 0.01328223 -0.0077219 0.08999866 0.01310777 -0.007885873 0.08999866 0.01291823 -0.008032262 0.08999866 0.01271545 -0.008159637 0.08999866 0.01250135 -0.008266866 0.08999866 0.0122779 -0.008352935 0.08999866 0.01204717 -0.00841701 0.08999866 0.01181131 -0.008458554 0.08999866 0.01157259 -0.008477151 0.08999866 0.01133316 -0.008472561 0.08999866 0.01109528 -0.008444964 0.08999866 0.01086121 -0.008394479 0.08999866 0.01063311 -0.008321642 0.08999866 0.01041305 -0.008227169 0.08999866 0.01020318 -0.008111834 0.08999866 0.01000541 -0.00797683 0.08999866 0.009821593 -0.007823348 0.08999866 0.009653449 -0.007652878 0.08999866 0.00950253 -0.007466912 0.08999866 0.009370267 -0.007267296 0.08999866 0.009257912 -0.007055819 0.08969998 0.01187407 -0.003277719 0.08972823 0.01181727 -0.003269672 0.08969998 0.01207959 -0.003311753 0.08972823 0.01207929 -0.003313064 0.08969998 0.01224112 -0.003354847 0.08972823 0.01233589 -0.00338149 0.08969998 0.01233631 -0.003380239 0.08972823 0.01258474 -0.003474414 0.08972823 0.0128234 -0.003590881 0.08969998 0.01259535 -0.003478109 0.08969998 0.01258528 -0.003473162 0.08972823 0.01304978 -0.003729879 0.08969998 0.01292717 -0.003653049 0.08969998 0.01282405 -0.003589749 0.08969998 0.01350784 -0.004124701 0.08969998 0.01345795 -0.00406897 0.08972823 0.013457 -0.004069924 0.08969998 0.01326245 -0.003889024 0.08972823 0.01326161 -0.003890037 0.08969998 0.01323455 -0.003867924 0.08969998 0.01305049 -0.003728747 0.08969998 0.01363521 -0.004266977 0.08972823 0.01363414 -0.004267811 0.08969998 0.01374447 -0.00441569 0.08972823 0.01379138 -0.004481852 0.08969998 0.01379251 -0.004481136 0.08972823 0.01392722 -0.004710137 0.08969998 0.01392835 -0.004709482 0.08972823 0.01412981 -0.005200505 0.08969998 0.01408815 -0.005080103 0.08972823 0.01404035 -0.004950404 0.08969998 0.0140416 -0.004949867 0.08969998 0.01394057 -0.004735291 0.08972823 0.01423442 -0.005720615 0.08969998 0.01419597 -0.005457758 0.08972823 0.01419466 -0.005457997 0.08969998 0.01419168 -0.005440652 0.08969998 0.01413106 -0.005200088 0.08972823 0.0142486 -0.005985856 0.08969998 0.01424068 -0.005812466 0.08969998 0.01423573 -0.005720496 0.08969998 0.01419067 -0.006559073 0.08969998 0.0142014 -0.00651443 0.08972823 0.01420009 -0.006514191 0.08969998 0.01423847 -0.006251335 0.08972823 0.01423716 -0.006251215 0.08969998 0.01424121 -0.006187558 0.08969998 0.01424992 -0.005985856 0.08969998 0.01413917 -0.006772756 0.08972823 0.01413786 -0.006772398 0.08969998 0.01408827 -0.00691986 0.08972823 0.01405102 -0.007023394 0.08969998 0.01405227 -0.00702387 0.08969998 0.01394164 -0.00726515 0.08972823 0.01394033 -0.007264792 0.08969998 0.01394152 -0.007265448 0.08972823 0.01380687 -0.007494449 0.08969998 0.01380801 -0.007495164 0.08969998 0.01374411 -0.007584035 0.08972823 0.01365184 -0.007710099 0.08969998 0.01365292 -0.007710933 0.08969998 0.01350837 -0.00787574 0.08972823 0.01347678 -0.007909834 0.08969998 0.01347774 -0.007910728 0.08972823 0.01328319 -0.008091688 0.08969998 0.01328408 -0.008092701 0.08969998 0.01259529 -0.008521556 0.08969998 0.01261115 -0.008515477 0.08972823 0.01261061 -0.008514225 0.08969998 0.01284873 -0.008396506 0.08972823 0.01284813 -0.008395314 0.08969998 0.01292729 -0.008347153 0.08972823 0.01307302 -0.008254051 0.08969998 0.01307374 -0.008255124 0.08969998 0.01323401 -0.008131325 0.08969998 0.01236319 -0.008610963 0.08972823 0.01236277 -0.008609712 0.08969998 0.01224106 -0.008644878 0.08972823 0.01210689 -0.00868082 0.08969998 0.01210719 -0.008682072 0.08969998 0.01187419 -0.008723139 0.08972823 0.01184529 -0.008726835 0.08969998 0.01184546 -0.008728206 0.08972823 0.01158052 -0.008747458 0.08969998 0.01158052 -0.008748769 0.08969998 0.01075845 -0.008646607 0.08969998 0.01079118 -0.008657038 0.08972823 0.01079154 -0.008655786 0.08969998 0.01105093 -0.008713066 0.08972823 0.01105111 -0.008711755 0.08969998 0.0111258 -0.008721768 0.08972823 0.01131498 -0.008742392 0.08969998 0.01131486 -0.008743762 0.08969998 0.0115 -0.008747279 0.08969998 0.01053804 -0.008576214 0.08972823 0.01053851 -0.008575022 0.08969998 0.01040565 -0.008519351 0.08972823 0.01029443 -0.008470177 0.08969998 0.0102939 -0.008471369 0.08969998 0.01007139 -0.00834912 0.08972823 0.01006168 -0.008342325 0.08969998 0.01006096 -0.008343458 0.08972823 0.009842336 -0.008192539 0.08969998 0.009841501 -0.008193612 0.08969998 0.009766399 -0.008130908 0.08972823 0.009638428 -0.008022308 0.08969998 0.009637534 -0.008023321 0.08969998 0.009491741 -0.007875442 0.08972823 0.009451985 -0.007833242 0.08969998 0.009450972 -0.007834136 0.08972823 0.009284555 -0.00762701 0.08969998 0.009283483 -0.007627785 0.08972823 0.008911848 -0.006925582 0.08969998 0.009012043 -0.00717163 0.08972823 0.009013235 -0.007171034 0.08969998 0.009060978 -0.00726372 0.08972823 0.009137868 -0.007405579 0.08969998 0.009136736 -0.007406294 0.08969998 0.009254992 -0.00758475 0.08972823 0.0088346 -0.006671488 0.08969998 0.008908987 -0.006920814 0.08969998 0.008910596 -0.006926059 0.08972823 0.008782207 -0.006411075 0.08969998 0.008810579 -0.006558835 0.08969998 0.008833289 -0.006671786 0.08969998 0.008758842 -0.005812525 0.08969998 0.008752524 -0.005881249 0.08972823 0.008753895 -0.005881309 0.08969998 0.008753895 -0.006146967 0.08972823 0.008755207 -0.006146848 0.08969998 0.008758068 -0.006187438 0.08969998 0.008780896 -0.006411314 0.08969998 0.008776843 -0.005616605 0.08972823 0.008778154 -0.005616784 0.08969998 0.008810281 -0.005441009 0.08972823 0.008827805 -0.005355894 0.08969998 0.008826553 -0.005355596 0.08972823 0.00890249 -0.005101025 0.08969998 0.008901178 -0.005100548 0.08972823 0.009123563 -0.004618704 0.08969998 0.009061157 -0.004736244 0.08972823 0.009001374 -0.0048545 0.08969998 0.009000122 -0.004853963 0.08969998 0.008909702 -0.005079448 0.08969998 0.009492218 -0.004124879 0.08969998 0.009432196 -0.004186987 0.08972823 0.009433209 -0.004187881 0.08969998 0.009266912 -0.004395008 0.08972823 0.009267985 -0.004395782 0.08969998 0.009254157 -0.004414677 0.08969998 0.009122431 -0.004618048 0.08969998 0.009616851 -0.003995895 0.08972823 0.009617745 -0.003996849 0.08969998 0.009766101 -0.003868639 0.08972823 0.009819865 -0.003824532 0.08969998 0.00981909 -0.003823518 0.08972823 0.01003766 -0.00367254 0.08969998 0.010037 -0.003671407 0.08972823 0.01051211 -0.003434956 0.08969998 0.01040565 -0.003480553 0.08972823 0.01026916 -0.003542304 0.08969998 0.01026856 -0.003541111 0.08969998 0.01007193 -0.003651738 0.08972823 0.01102328 -0.003292977 0.08969998 0.01076388 -0.003350317 0.08972823 0.01076424 -0.003351569 0.08969998 0.0107581 -0.003352224 0.08969998 0.01051163 -0.003433704 0.08972823 0.01128679 -0.003259599 0.08969998 0.01112592 -0.003278613 0.08969998 0.01102304 -0.003291666 0.08969998 0.01181739 -0.003268361 0.08969998 0.01155227 -0.003250479 0.08972823 0.01155227 -0.003251791 0.08969998 0.0115 -0.003249943 0.08969998 0.01128667 -0.003258228 0.08977913 0.01391899 -0.004714488 0.08977913 0.01378363 -0.004487037 0.08977913 0.01362693 -0.004273653 0.08977913 0.01345038 -0.004076421 0.08977913 0.01325565 -0.00389719 0.08977913 0.01304453 -0.003737568 0.08977913 0.01281893 -0.003599047 0.08977913 0.01258105 -0.003482937 0.08977913 0.01233309 -0.003390371 0.08977913 0.01207733 -0.003322124 0.08977913 0.0118162 -0.003278911 0.08977913 0.01155209 -0.003261089 0.08977913 0.01128751 -0.003268837 0.08977913 0.01102489 -0.003302097 0.08977913 0.01076674 -0.003360569 0.08977913 0.01051545 -0.003443658 0.08977913 0.01027333 -0.003550589 0.08977913 0.0100426 -0.003680408 0.08977913 0.009825587 -0.003831923 0.08977913 0.009624123 -0.004003643 0.08977913 0.009440243 -0.004194021 0.08977913 0.009275555 -0.004401206 0.08977913 0.00913161 -0.004623353 0.08977913 0.009009838 -0.004858374 0.08977913 0.008911252 -0.005104064 0.08977913 0.008836865 -0.005358099 0.08977913 0.008787333 -0.005618095 0.08977913 0.008763134 -0.005881667 0.08977913 0.008764505 -0.006146371 0.08977913 0.008791446 -0.006409704 0.08977913 0.0088436 -0.006669223 0.08977913 0.008920609 -0.006922483 0.08977913 0.009021699 -0.0071671 0.08977913 0.009145915 -0.00740081 0.08977913 0.009292066 -0.007621526 0.08977913 0.009458899 -0.007827043 0.08977913 0.009644746 -0.008015513 0.08977913 0.009847939 -0.008185148 0.08977913 0.01006656 -0.008334398 0.08977913 0.01029855 -0.008461833 0.08977913 0.01054173 -0.00856626 0.08977913 0.01079392 -0.008646786 0.08977913 0.01105266 -0.008702576 0.08977913 0.01131558 -0.008733153 0.08977913 0.01158022 -0.00873816 0.08977913 0.01184415 -0.008717656 0.08977913 0.0121048 -0.0086717 0.08977913 0.01235985 -0.00860089 0.08977913 0.01260685 -0.008505761 0.08977913 0.01284354 -0.008387207 0.08977913 0.01306766 -0.008246421 0.08977913 0.01327717 -0.008084595 0.08977913 0.01347005 -0.007903337 0.08977913 0.01364457 -0.007704317 0.08977913 0.01379907 -0.007489383 0.08977913 0.01393204 -0.00726056 0.08977913 0.01404237 -0.007019937 0.08977913 0.01412892 -0.006769776 0.08977913 0.01419097 -0.006512463 0.08977913 0.01422786 -0.006250321 0.08977913 0.01423931 -0.005985915 0.08977913 0.01422518 -0.005721569 0.08977913 0.01418554 -0.005459845 0.08977913 0.01412087 -0.005203187 0.08977913 0.01403176 -0.00495392 0.08982771 0.01390314 -0.004722893 0.08982771 0.01376867 -0.004496932 0.08982771 0.01361304 -0.004284977 0.08982771 0.01343762 -0.004088997 0.08982771 0.01324415 -0.003910958 0.08982771 0.0130344 -0.00375235 0.08982771 0.01281028 -0.003614723 0.08982771 0.01257401 -0.003499388 0.08982771 0.01232761 -0.003407418 0.08982771 0.01207357 -0.003339648 0.08982771 0.01181411 -0.003296732 0.08982771 0.01155173 -0.00327903 0.08982771 0.01128888 -0.003286719 0.08982771 0.01102799 -0.00331974 0.08982771 0.01077157 -0.003377795 0.08982771 0.01052188 -0.003460347 0.08982771 0.01028132 -0.003566622 0.08982771 0.01005214 -0.003695607 0.08982771 0.009836494 -0.003846108 0.08982771 0.009636402 -0.004016697 0.08982771 0.009453713 -0.004205822 0.08982771 0.009290099 -0.004411697 0.08982771 0.009147107 -0.004632353 0.08982771 0.00902611 -0.004865825 0.08982771 0.008928179 -0.005109906 0.08982771 0.008854269 -0.005362272 0.08982771 0.008805096 -0.005620598 0.08982771 0.008781075 -0.005882441 0.08982771 0.008782386 -0.006145417 0.08982771 0.008809149 -0.006407022 0.08982771 0.008861005 -0.006664812 0.08982771 0.008937478 -0.006916403 0.08982771 0.009037911 -0.007159471 0.08982771 0.009161293 -0.007391691 0.08982771 0.00930655 -0.007610917 0.08982771 0.00947225 -0.007815062 0.08982771 0.009656906 -0.008002281 0.08982771 0.009858727 -0.008170843 0.08982771 0.01007592 -0.008319079 0.08982771 0.01030641 -0.008445739 0.08982771 0.01054805 -0.008549511 0.08982771 0.01079851 -0.008629441 0.08982771 0.01105558 -0.008684873 0.08982771 0.01131677 -0.008715271 0.08982771 0.01157969 -0.008720278 0.08982771 0.01184189 -0.008699834 0.08982771 0.01210087 -0.008654236 0.08982771 0.01235425 -0.008583843 0.08982771 0.01259964 -0.00848937 0.08982771 0.01283478 -0.008371591 0.08982771 0.01305741 -0.008231699 0.08982771 0.01326555 -0.008070945 0.08982771 0.01345717 -0.00789088 0.08982771 0.01363056 -0.007693171 0.08982771 0.01378399 -0.007479667 0.08982771 0.01391619 -0.007252275 0.08982771 0.01402574 -0.007013261 0.08982771 0.01411175 -0.006764769 0.08982771 0.01417338 -0.006509125 0.08982771 0.01421004 -0.006248712 0.08982771 0.01422137 -0.005985975 0.08982771 0.0142073 -0.005723416 0.08982771 0.01416802 -0.005463361 0.08982771 0.01410377 -0.005208373 0.08982771 0.01401519 -0.004960775 0.08987247 0.01388019 -0.004735112 0.08987247 0.01374703 -0.004511237 0.08987247 0.01359283 -0.004301369 0.08987247 0.01341915 -0.004107296 0.08987247 0.01322752 -0.003930866 0.08987247 0.01301974 -0.003773808 0.08987247 0.01279777 -0.003637552 0.08987247 0.0125637 -0.00352329 0.08987247 0.01231974 -0.003432214 0.08987247 0.01206809 -0.003365099 0.08987247 0.01181113 -0.003322541 0.08987247 0.01155126 -0.003305017 0.08987247 0.0112909 -0.003312647 0.08987247 0.01103252 -0.00334537 0.08987247 0.01077848 -0.003402888 0.08987247 0.01053124 -0.003484606 0.08987247 0.01029294 -0.003589868 0.08987247 0.01006597 -0.003717601 0.08987247 0.009852409 -0.003866672 0.08987247 0.009654223 -0.004035651 0.08987247 0.009473264 -0.004222929 0.08987247 0.009311199 -0.004426836 0.08987247 0.009169578 -0.004645466 0.08987247 0.009049713 -0.004876673 0.08987247 0.008952736 -0.005118429 0.08987247 0.008879542 -0.005368351 0.08987247 0.008830845 -0.005624234 0.08987247 0.008807063 -0.005883574 0.08987247 0.008808374 -0.006144046 0.08987247 0.008834838 -0.006403148 0.08987247 0.008886218 -0.006658494 0.08987247 0.008961975 -0.006907641 0.08987247 0.009061396 -0.007148385 0.08987247 0.009183645 -0.007378399 0.08987247 0.009327471 -0.007595479 0.08987247 0.009491622 -0.007797718 0.08987247 0.009674489 -0.007983148 0.08987247 0.009874403 -0.0081501 0.08987247 0.01008951 -0.008296966 0.08987247 0.0103178 -0.008422374 0.08987247 0.01055711 -0.008525133 0.08987247 0.01080524 -0.008604347 0.08987247 0.01105982 -0.008659243 0.08987247 0.01131856 -0.008689284 0.08987247 0.01157897 -0.008694231 0.08987247 0.01183861 -0.008674085 0.08987247 0.01209515 -0.008628904 0.08987247 0.01234608 -0.008559167 0.08987247 0.01258909 -0.008465588 0.08987247 0.01282203 -0.008348941 0.08987247 0.01304256 -0.008210361 0.08987247 0.01324868 -0.008051156 0.08987247 0.01343846 -0.007872819 0.08987247 0.01361018 -0.007677018 0.08987247 0.01376217 -0.007465481 0.08987247 0.01389306 -0.007240355 0.08987247 0.0140016 -0.007003545 0.08987247 0.01408678 -0.006757438 0.08987247 0.01414781 -0.006504237 0.08987247 0.01418411 -0.006246328 0.08987247 0.01419538 -0.005986094 0.08987247 0.01418143 -0.005726039 0.08987247 0.01414251 -0.005468487 0.08987247 0.01407885 -0.005215942 0.08987247 0.01399117 -0.004970729 0.08991211 0.0138508 -0.004750728 0.08991211 0.01371926 -0.004529654 0.08991211 0.01356697 -0.00432235 0.08991211 0.01339542 -0.004130661 0.08991211 0.01320612 -0.003956437 0.08991211 0.01300096 -0.003801345 0.08991211 0.01278173 -0.003666758 0.08991211 0.01255059 -0.003553926 0.08991211 0.01230961 -0.003463923 0.08991211 0.01206105 -0.003397643 0.08991211 0.01180726 -0.003355622 0.08991211 0.0115506 -0.003338336 0.08991211 0.01129353 -0.003345847 0.08991211 0.0110383 -0.003378152 0.08991211 0.01078742 -0.003434956 0.08991211 0.01054316 -0.00351572 0.08991211 0.0103079 -0.00361967 0.08991211 0.01008373 -0.003745794 0.08991211 0.009872794 -0.003893017 0.08991211 0.009677052 -0.00405991 0.08991211 0.009498298 -0.004244923 0.08991211 0.009338259 -0.004446268 0.08991211 0.009198367 -0.004662215 0.08991211 0.009079992 -0.004890561 0.08991211 0.008984267 -0.005129277 0.08991211 0.008911967 -0.00537616 0.08991211 0.008863806 -0.005628883 0.08991211 0.008840322 -0.005885004 0.08991211 0.008841633 -0.006142258 0.08991211 0.0088678 -0.006398141 0.08991211 0.008918523 -0.006650328 0.08991211 0.008993327 -0.006896436 0.08991211 0.009091556 -0.007134199 0.08991211 0.009212255 -0.007361352 0.08991211 0.009354352 -0.00757575 0.08991211 0.009516417 -0.007775485 0.08991211 0.009697079 -0.00795865 0.08991211 0.00989449 -0.008123517 0.08991211 0.01010698 -0.008268535 0.08991211 0.0103324 -0.008392393 0.08991211 0.01056879 -0.0084939 0.08991211 0.01081383 -0.008572161 0.08991211 0.0110653 -0.008626401 0.08991211 0.01132076 -0.008656084 0.08991211 0.01157796 -0.008660972 0.08991211 0.01183444 -0.008641004 0.08991211 0.01208776 -0.00859642 0.08991211 0.01233559 -0.008527576 0.08991211 0.01257568 -0.00843507 0.08991211 0.01280564 -0.008319914 0.08991211 0.01302349 -0.008183062 0.08991211 0.01322704 -0.008025825 0.08991211 0.0134145 -0.007849693 0.08991211 0.01358413 -0.007656276 0.08991211 0.01373422 -0.007447361 0.08991211 0.0138635 -0.007224977 0.08991211 0.01397067 -0.006991147 0.08991211 0.01405483 -0.00674808 0.08991211 0.01411509 -0.006497979 0.08991211 0.01415097 -0.006243288 0.08991211 0.01416206 -0.005986273 0.08991211 0.01414829 -0.005729436 0.08991211 0.01410984 -0.005475103 0.08991211 0.01404702 -0.005225658 0.08991211 0.01396036 -0.004983425 0.08994543 0.01381582 -0.004769325 0.08994543 0.01368618 -0.004551529 0.08994543 0.01353621 -0.004347324 0.08994543 0.01336717 -0.004158496 0.08994543 0.01318073 -0.003986895 0.08994543 0.01297861 -0.003834068 0.08994543 0.01276266 -0.003701448 0.08994543 0.01253491 -0.003590345 0.08994543 0.01229757 -0.003501713 0.08994543 0.01205271 -0.003436386 0.08994543 0.01180267 -0.00339502 0.08994543 0.01154989 -0.003377914 0.08994543 0.01129657 -0.003385365 0.08994543 0.01104515 -0.003417193 0.08994543 0.01079803 -0.003473162 0.08994543 0.01055741 -0.003552675 0.08994543 0.01032561 -0.003655076 0.08994543 0.01010483 -0.003779351 0.08994543 0.009896993 -0.003924429 0.08994543 0.009704172 -0.004088819 0.08994543 0.0095281 -0.00427103 0.08994543 0.009370446 -0.004469454 0.08994543 0.00923264 -0.004682123 0.08994543 0.009116053 -0.004907071 0.08994543 0.009021699 -0.005142271 0.08994543 0.008950471 -0.005385458 0.08994543 0.008903086 -0.005634367 0.08994543 0.008879899 -0.005886733 0.08994543 0.008881211 -0.006140112 0.08994543 0.00890696 -0.00639224 0.08994543 0.008956909 -0.006640672 0.08994543 0.00903064 -0.006883084 0.08994543 0.009127378 -0.007117331 0.08994543 0.009246289 -0.007341086 0.08994543 0.009386301 -0.007552325 0.08994543 0.009545981 -0.00774908 0.08994543 0.009723901 -0.007929503 0.08994543 0.009918391 -0.008091926 0.08994543 0.01012772 -0.008234798 0.08994543 0.01034981 -0.008356809 0.08994543 0.01058262 -0.008456826 0.08994543 0.01082402 -0.008533895 0.08994543 0.01107174 -0.0085873 0.08994543 0.01132345 -0.008616507 0.08994543 0.01157683 -0.008621335 0.08994543 0.01182943 -0.008601665 0.08994543 0.012079 -0.008557736 0.08994543 0.0123232 -0.008489906 0.08994543 0.01255965 -0.00839883 0.08994543 0.0127862 -0.008285403 0.08994543 0.01300078 -0.008150577 0.08994543 0.01320135 -0.007995665 0.08994543 0.01338601 -0.007822155 0.08994543 0.01355308 -0.007631599 0.08994543 0.01370096 -0.007425844 0.08994543 0.01382833 -0.007206737 0.08994543 0.01393389 -0.006976425 0.08994543 0.0140168 -0.006736934 0.08994543 0.01407617 -0.006490588 0.08994543 0.01411151 -0.006239652 0.08994543 0.01412242 -0.005986511 0.08994543 0.01410889 -0.00573343 0.08994543 0.01407098 -0.005482912 0.08994543 0.01400911 -0.005237162 0.08994543 0.01392376 -0.004998564 0.08997142 0.01377624 -0.004790306 0.08997142 0.01364886 -0.004576265 0.08997142 0.01350146 -0.004375517 0.08997142 0.01333534 -0.004189968 0.08997142 0.01315206 -0.004021227 0.08997142 0.0129534 -0.003871023 0.08997142 0.01274108 -0.003740727 0.08997142 0.01251727 -0.003631472 0.08997142 0.01228392 -0.00354433 0.08997142 0.01204329 -0.003480136 0.08997142 0.01179754 -0.003439486 0.08997142 0.01154899 -0.003422677 0.08997142 0.01130002 -0.003430008 0.08997142 0.01105296 -0.003461301 0.08997142 0.01081001 -0.003516316 0.08997142 0.0105735 -0.003594458 0.08997142 0.01034569 -0.00369513 0.08997142 0.01012861 -0.00381726 0.08997142 0.009924352 -0.003959834 0.08997142 0.009734809 -0.004121422 0.08997142 0.009561777 -0.004300534 0.08997142 0.009406805 -0.004495561 0.08997142 0.009271383 -0.004704594 0.08997142 0.009156763 -0.004925727 0.08997142 0.009064018 -0.005156934 0.08997142 0.008993983 -0.005395948 0.08997142 0.008947432 -0.005640625 0.08997142 0.008924663 -0.00588864 0.08997142 0.008925914 -0.006137728 0.08997142 0.008951246 -0.006385505 0.08997142 0.00900036 -0.006629705 0.08997142 0.00907278 -0.006868004 0.08997142 0.009167909 -0.007098257 0.08997142 0.009284794 -0.007318198 0.08997142 0.009422361 -0.007525801 0.08997142 0.0095793 -0.007719218 0.08997142 0.00975424 -0.007896542 0.08997142 0.009945392 -0.008056223 0.08997142 0.01015114 -0.008196651 0.08997142 0.01036942 -0.008316576 0.08997142 0.0105983 -0.008414864 0.08997142 0.01083558 -0.008490622 0.08997142 0.01107907 -0.008543133 0.08997142 0.01132649 -0.008571863 0.08997142 0.01157552 -0.008576571 0.08997142 0.01182383 -0.00855726 0.08997142 0.01206916 -0.008514106 0.08997142 0.01230913 -0.008447408 0.08997142 0.01254153 -0.008357882 0.08997142 0.01276427 -0.008246362 0.08997142 0.01297515 -0.008113861 0.08997142 0.01317232 -0.00796163 0.08997142 0.01335382 -0.007791042 0.08997142 0.01351803 -0.007603764 0.08997142 0.01366341 -0.007401525 0.08997142 0.01378858 -0.007186174 0.08997142 0.01389235 -0.006959736 0.08997142 0.01397383 -0.006724357 0.08997142 0.01403218 -0.006482243 0.08997142 0.01406693 -0.006235599 0.08997142 0.01407766 -0.00598675 0.08997142 0.01406437 -0.005738019 0.08997142 0.01402711 -0.005491733 0.08997142 0.01396626 -0.005250215 0.08997142 0.01388239 -0.005015671 0.08998936 0.01373338 -0.004813134 0.08998936 0.01360839 -0.004603087 0.08998936 0.01346373 -0.004406154 0.08998936 0.01330071 -0.004224061 0.08998936 0.01312094 -0.004058539 0.08998936 0.01292598 -0.003911137 0.08998936 0.01271772 -0.003783285 0.08998936 0.01249808 -0.003676116 0.08998936 0.01226913 -0.003590583 0.08998936 0.01203304 -0.003527641 0.08998936 0.01179194 -0.003487706 0.08998936 0.0115481 -0.003471255 0.08998936 0.01130384 -0.003478407 0.08998936 0.01106137 -0.003509104 0.08998936 0.01082301 -0.003563106 0.08998936 0.01059097 -0.003639817 0.08998936 0.01036745 -0.003738522 0.08998936 0.01015448 -0.003858387 0.08998936 0.009954035 -0.003998279 0.08998936 0.009768068 -0.004156827 0.08998936 0.009598255 -0.004332602 0.08998936 0.009446203 -0.004523873 0.08998936 0.009313344 -0.004729032 0.08998936 0.00920087 -0.004945993 0.08998936 0.009109914 -0.005172789 0.08998936 0.009041249 -0.005407333 0.08998936 0.008995532 -0.00564742 0.08998936 0.008973181 -0.005890786 0.08998936 0.008974432 -0.006135165 0.08998936 0.008999288 -0.006378233 0.08998936 0.009047448 -0.006617844 0.08998936 0.009118556 -0.006851673 0.08998936 0.009211838 -0.007077515 0.08998936 0.009326517 -0.007293343 0.08998936 0.009461522 -0.007497072 0.08998936 0.00961548 -0.007686793 0.08998936 0.009787082 -0.007860839 0.08998936 0.009974718 -0.00801748 0.08998936 0.01017653 -0.008155226 0.08998936 0.01039075 -0.008272886 0.08998936 0.01061528 -0.008369386 0.08998936 0.0108481 -0.008443653 0.08998936 0.011087 -0.008495211 0.08998936 0.01132977 -0.008523404 0.08998936 0.01157408 -0.008528053 0.08998936 0.01181775 -0.008509099 0.08998936 0.01205843 -0.00846672 0.08998936 0.01229387 -0.008401274 0.08998936 0.01252192 -0.008313477 0.08998936 0.01274043 -0.008204042 0.08998936 0.01294738 -0.008074045 0.08998936 0.01314079 -0.007924616 0.08998936 0.01331889 -0.007757306 0.08998936 0.01348 -0.007573544 0.08998936 0.01362264 -0.007375121 0.08998936 0.01374542 -0.007163822 0.08998936 0.01384729 -0.006941676 0.08998936 0.01392722 -0.006710708 0.08998936 0.0139845 -0.006473124 0.08998936 0.01401853 -0.006231129 0.08998936 0.01402908 -0.005986988 0.08998936 0.01401603 -0.005742967 0.08998936 0.01397949 -0.005501329 0.08998936 0.01391977 -0.005264341 0.08998936 0.01383751 -0.005034208 0.08799999 0.0115 -0.003249943 0.08799999 0.01187443 -0.003275573 0.08799999 0.01224189 -0.003351926 0.08799999 0.01259559 -0.003477632 0.08799999 0.01292884 -0.003650307 0.08799999 0.01323544 -0.003866791 0.08799999 0.01350975 -0.004122972 0.08799999 0.01374661 -0.004414081 0.08799999 0.01394164 -0.004734814 0.08799999 0.01409119 -0.00507903 0.08799999 0.01419246 -0.005440473 0.08799999 0.01424354 -0.005812287 0.08799999 0.01424354 -0.006187617 0.08799999 0.01419246 -0.006559491 0.08799999 0.01409119 -0.006920874 0.08799999 0.01394164 -0.00726515 0.08799999 0.01374661 -0.007585823 0.08799999 0.01350975 -0.007876992 0.08799999 0.01323544 -0.008133172 0.08799999 0.01292884 -0.008349597 0.08799999 0.01259559 -0.008522331 0.08799999 0.01224189 -0.008647978 0.08799999 0.01187443 -0.008724331 0.08799999 0.0115 -0.008749961 0.08799999 0.0111255 -0.008724331 0.08799999 0.01075804 -0.008647978 0.08799999 0.01040434 -0.008522331 0.08799999 0.01007109 -0.008349597 0.08799999 0.009764492 -0.008133172 0.08799999 0.009490191 -0.007876992 0.08799999 0.009253323 -0.007585823 0.08799999 0.009058296 -0.00726515 0.08799999 0.008908748 -0.006920874 0.08799999 0.00880748 -0.006559491 0.08799999 0.008756399 -0.006187617 0.08799999 0.008756399 -0.005812287 0.08799999 0.00880748 -0.005440473 0.08799999 0.008908748 -0.00507903 0.08799999 0.009058296 -0.004734814 0.08799999 0.009253323 -0.004414081 0.08799999 0.009490191 -0.004122972 0.08799999 0.009764492 -0.003866791 0.08799999 0.01007109 -0.003650307 0.08799999 0.01040434 -0.003477632 0.08799999 0.01075804 -0.003351926 0.08799999 0.0111255 -0.003275573 0.078 0.01252907 -0.005345642 0.078 0.01037287 -0.006465613 0.078 0.01030915 -0.006262838 0.078 0.01262706 -0.005534291 0.078 0.01268833 -0.005726158 0.078 0.01271718 -0.005925476 0.078 0.01271283 -0.00612688 0.078 0.0126754 -0.006324768 0.078 0.01205712 -0.007084786 0.078 0.01222807 -0.006978273 0.078 0.01237916 -0.006845057 0.078 0.01147365 -0.007219195 0.078 0.01127332 -0.007198214 0.078 0.01107919 -0.00714457 0.078 0.01089656 -0.007059693 0.078 0.01073038 -0.006945967 0.078 0.01058512 -0.006806373 0.078 0.0104649 -0.006644785 0.078 0.0114479 -0.004781603 0.078 0.01166021 -0.004791021 0.078 0.01053315 -0.005256712 0.078 0.0126059 -0.006513833 0.078 0.01250624 -0.006688833 0.078 0.01187098 -0.007161676 0.078 0.0116747 -0.007206916 0.078 0.01067692 -0.005100131 0.078 0.01084566 -0.004970848 0.078 0.01186776 -0.004837214 0.078 0.01206403 -0.004918754 0.078 0.01224321 -0.005033135 0.078 0.01028156 -0.006052076 0.078 0.01029103 -0.005839705 0.078 0.01033723 -0.005632221 0.078 0.0110343 -0.004872858 0.078 0.01123708 -0.004809141 0.078 0.01041877 -0.005435883 0.078 0.01239985 -0.005176901 0.08799999 0.01255941 -0.007198989 0.08799999 0.01258325 -0.007175922 0.08799999 0.01275831 -0.006988704 0.08799999 0.01272463 -0.007027626 0.08799999 0.01266378 -0.007098019 0.08799999 0.01105588 -0.007536113 0.08799999 0.01115131 -0.007561862 0.08799999 0.01125597 -0.007580518 0.08799999 0.01128625 -0.007585942 0.08799999 0.0114234 -0.007598221 0.08799999 0.01146006 -0.0075984 0.08799999 0.01221781 -0.007430016 0.08799999 0.01224958 -0.007412374 0.08799999 0.01235818 -0.004649221 0.08799999 0.01240539 -0.004682123 0.08799999 0.01247072 -0.004727721 0.08799999 0.01256686 -0.004808306 0.08799999 0.01042008 -0.00718075 0.08799999 0.01051169 -0.007257521 0.08799999 0.01052922 -0.007272243 0.08799999 0.01064175 -0.007350683 0.08799999 0.01068079 -0.007373154 0.08799999 0.0115599 -0.007598876 0.08799999 0.01166486 -0.00759077 0.08799999 0.01169073 -0.007588744 0.08799999 0.01182657 -0.007566511 0.08799999 0.01186686 -0.007556319 0.08799999 0.01233857 -0.007362902 0.08799999 0.01242417 -0.007304966 0.08799999 0.0124523 -0.007285952 0.08799999 0.0108425 -0.004542887 0.08799999 0.01078212 -0.004569888 0.08799999 0.01049441 -0.004757225 0.08799999 0.01044052 -0.004800975 0.08799999 0.01034295 -0.004895329 0.08799999 0.01033616 -0.004901885 0.08799999 0.01024168 -0.00501126 0.08799999 0.01021182 -0.005052745 0.08799999 0.009943187 -0.005629181 0.08799999 0.009950041 -0.00560528 0.08799999 0.009981215 -0.005496203 0.08799999 0.01001393 -0.005410552 0.08799999 0.0103597 -0.007120072 0.08799999 0.01031631 -0.007076501 0.08799999 0.01076084 -0.007419168 0.08799999 0.01086312 -0.007466793 0.08799999 0.01088702 -0.007477879 0.08799999 0.01101803 -0.007525861 0.08799999 0.01195973 -0.007532656 0.08799999 0.0120629 -0.007496654 0.08799999 0.01209056 -0.007486999 0.08799999 0.01305675 -0.006370723 0.08799999 0.01302176 -0.00649327 0.08799999 0.01301872 -0.00650376 0.08799999 0.01307147 -0.006294429 0.08799999 0.0130828 -0.006236076 0.08799999 0.01184862 -0.004438042 0.08799999 0.01184493 -0.004437386 0.08799999 0.01066136 -0.004637062 0.08799999 0.01054763 -0.004714012 0.08799999 0.01283848 -0.006877183 0.08799999 0.01284682 -0.006863117 0.08799999 0.01309472 -0.005886197 0.08799999 0.01309126 -0.005831956 0.08799999 0.01283401 -0.005118072 0.08799999 0.0127722 -0.005029499 0.08799999 0.01270997 -0.004954934 0.08799999 0.01268362 -0.004923403 0.08799999 0.01257985 -0.004819214 0.08799999 0.01223909 -0.004580736 0.08799999 0.0122298 -0.004576444 0.08799999 0.01016145 -0.005122721 0.08799999 0.01010072 -0.005225002 0.08799999 0.01009136 -0.005240738 0.08799999 0.01003104 -0.005365669 0.08799999 0.009917199 -0.005763828 0.08799999 0.009912729 -0.005806744 0.08799999 0.01022773 -0.006970465 0.08799999 0.01022464 -0.006965994 0.08799999 0.01290857 -0.006759226 0.08799999 0.01294517 -0.006683349 0.08799999 0.01296889 -0.006634235 0.08799999 0.01211291 -0.004522025 0.08799999 0.01204138 -0.004495859 0.08799999 0.0119819 -0.004474103 0.08799999 0.01117336 -0.004433393 0.08799999 0.01123356 -0.004423558 0.08799999 0.009908676 -0.006168007 0.08799999 0.009915769 -0.006215691 0.08799999 0.0101127 -0.006794333 0.08799999 0.01014912 -0.006857693 0.08799999 0.01301348 -0.005485475 0.08799999 0.01299524 -0.005430638 0.08799999 0.01297873 -0.005389034 0.08799999 0.01293551 -0.005295991 0.08799999 0.01291978 -0.005262196 0.08799999 0.01285088 -0.005142271 0.08799999 0.01171368 -0.004414021 0.08799999 0.01164215 -0.004407584 0.08799999 0.01157653 -0.004401743 0.08799999 0.01144003 -0.004401087 0.08799999 0.0113092 -0.00441122 0.08799999 0.01104027 -0.004467308 0.08799999 0.01103389 -0.004469513 0.08799999 0.01090937 -0.004512965 0.08799999 0.009960949 -0.006437897 0.08799999 0.009955823 -0.006416678 0.08799999 0.009928941 -0.006304323 0.08799999 0.01000469 -0.006569266 0.08799999 0.0100212 -0.006610929 0.08799999 0.01008015 -0.006737709 0.08799999 0.01309698 -0.006099343 0.08799999 0.01309716 -0.006091117 0.08799999 0.01309949 -0.005961298 0.08799999 0.013071 -0.005695641 0.08799999 0.01306796 -0.005683004 0.08799999 0.01303899 -0.005562007 0.08799999 0.009902954 -0.005900621 0.08799999 0.009900927 -0.006011366 0.08799999 0.00990045 -0.006038665 0.0782805 0.01288628 -0.005427181 0.0782805 0.01290577 -0.005488157 0.0782805 0.01296168 -0.005663216 0.0782805 0.01297283 -0.005740106 0.0782805 0.01299715 -0.00590837 0.0782805 0.01299518 -0.005999863 0.0782805 0.01299184 -0.006156027 0.0782805 0.01297229 -0.0062595 0.0782805 0.01294577 -0.006399452 0.0782805 0.0129047 -0.006511211 0.0782805 0.01286029 -0.00663203 0.0782805 0.01279461 -0.006747424 0.0782805 0.01273775 -0.006847262 0.0782805 0.01264518 -0.006961047 0.0782805 0.0125814 -0.007039487 0.0782805 0.01246106 -0.007145524 0.0782805 0.01239556 -0.00720328 0.0782805 0.01224774 -0.00729537 0.0782805 0.01218527 -0.007334291 0.0782805 0.01201158 -0.007406055 0.0782805 0.01195633 -0.007428884 0.0782805 0.01175975 -0.007474184 0.0782805 0.01171487 -0.007484495 0.0782805 0.01149982 -0.007497668 0.0782805 0.01146763 -0.007499635 0.0782805 0.01123964 -0.007475793 0.0782805 0.01122123 -0.007473826 0.0782805 0.01098704 -0.007409155 0.0782805 0.01098245 -0.007407844 0.0782805 0.01075774 -0.007303476 0.0782805 0.01075035 -0.007298409 0.0782805 0.01055335 -0.007163524 0.0782805 0.01053696 -0.007147789 0.0782805 0.01037472 -0.006991863 0.0782805 0.01035296 -0.006962597 0.0782805 0.01011365 -0.006572723 0.0782805 0.01020389 -0.006748437 0.0782805 0.01022684 -0.006793141 0.0782805 0.01009446 -0.006511747 0.0782805 0.01003521 -0.006323337 0.0782805 0.01002693 -0.006259918 0.0782805 0.01000136 -0.006064057 0.0782805 0.01000416 -0.006000161 0.0782805 0.01001298 -0.00580281 0.0782805 0.01002687 -0.005740404 0.0782805 0.01006978 -0.005547642 0.0782805 0.01009434 -0.005488574 0.0782805 0.0101701 -0.005306124 0.0782805 0.01020449 -0.005252242 0.0782805 0.01031076 -0.005085766 0.0782805 0.01035404 -0.005038619 0.0782805 0.01048761 -0.004893124 0.0782805 0.01053833 -0.004854261 0.0782805 0.01069515 -0.004734158 0.0782805 0.0107519 -0.004704654 0.0782805 0.0109272 -0.004613637 0.0782805 0.01098823 -0.004594445 0.0782805 0.01117664 -0.004535257 0.0782805 0.01124006 -0.004526972 0.0782805 0.01143592 -0.004501342 0.0782805 0.01149976 -0.004504203 0.0782805 0.01169711 -0.004512965 0.0782805 0.01175951 -0.004526853 0.0782805 0.01195234 -0.004569828 0.0782805 0.0120114 -0.004594326 0.0782805 0.01219379 -0.004670083 0.0782805 0.01224768 -0.004704475 0.0782805 0.01241421 -0.00481075 0.0782805 0.0124613 -0.004854023 0.0782805 0.01260679 -0.004987597 0.0782805 0.01264566 -0.00503838 0.0782805 0.01279526 -0.005251944 0.0782805 0.01276576 -0.00519514 0.08799952 0.01300591 -0.005488038 0.08799952 0.01292812 -0.005299687 0.08799952 0.0128268 -0.00512278 0.08799952 0.01270377 -0.004960298 0.08799952 0.0125609 -0.004814922 0.08799952 0.01240068 -0.004688978 0.08799952 0.01222562 -0.00458455 0.08799952 0.0120387 -0.004503369 0.08799952 0.0118429 -0.004446804 0.08799952 0.01164144 -0.00441569 0.08799952 0.01143771 -0.004410624 0.08799952 0.01123493 -0.004431605 0.08799952 0.01103657 -0.004478394 0.08799952 0.01084578 -0.004550158 0.08799952 0.01066577 -0.004645705 0.08799952 0.01049941 -0.004763484 0.08799952 0.01034951 -0.004901587 0.08799952 0.0102185 -0.005057692 0.08799952 0.01010853 -0.005229294 0.08799952 0.01002144 -0.005413591 0.08799952 0.009958565 -0.005607485 0.08799952 0.009921014 -0.005807816 0.08799952 0.009909451 -0.006011307 0.08799952 0.009923934 -0.006214559 0.08799952 0.009964287 -0.006414353 0.08799952 0.01002991 -0.006607353 0.08799952 0.01011967 -0.006790339 0.08799952 0.01023203 -0.006960332 0.08799952 0.01036524 -0.007114589 0.08799952 0.01051712 -0.007250547 0.08799952 0.01068514 -0.007366001 0.08799952 0.01086646 -0.007458984 0.08799952 0.01105827 -0.007528007 0.08799952 0.01125729 -0.007571935 0.08799952 0.0114603 -0.007590055 0.08799952 0.01166397 -0.007582068 0.08799952 0.01186496 -0.007548153 0.08799952 0.01205992 -0.007488727 0.08799952 0.01224571 -0.007404923 0.08799952 0.01241922 -0.007298052 0.08799952 0.01257765 -0.007169842 0.08799952 0.01271843 -0.00702238 0.08799952 0.01283913 -0.00685817 0.08799952 0.0129379 -0.006679892 0.08799952 0.01301306 -0.006490409 0.08799952 0.01306337 -0.006292939 0.08799952 0.01308798 -0.006090581 0.08799952 0.01308655 -0.005886793 0.08799952 0.01305902 -0.005684792 0.08789998 0.0115 -0.004499971 0.0879094 0.01144123 -0.004500687 0.0879094 0.01163345 -0.004505455 0.0879094 0.01200813 -0.004588186 0.08789998 0.01182335 -0.004535257 0.0879094 0.01182341 -0.00453478 0.08789998 0.01176005 -0.004525482 0.08789998 0.01163339 -0.004505932 0.0879094 0.0121845 -0.004664778 0.08789998 0.01201289 -0.004590749 0.08789998 0.01200801 -0.004588603 0.0879094 0.0123496 -0.004763245 0.08789998 0.01224845 -0.004703462 0.08789998 0.01218432 -0.004665195 0.08789998 0.01264804 -0.005036532 0.08789998 0.01263517 -0.005019545 0.0879094 0.01263552 -0.005019247 0.08789998 0.01250052 -0.004882395 0.0879094 0.01250082 -0.004882097 0.08789998 0.01246273 -0.004852712 0.08789998 0.01234936 -0.004763662 0.08789998 0.01275128 -0.005172729 0.0879094 0.01275163 -0.005172491 0.08789998 0.01279634 -0.005251526 0.0879094 0.01284718 -0.005339384 0.08789998 0.01284676 -0.005339562 0.08789998 0.01290792 -0.00548762 0.0879094 0.01292055 -0.005517065 0.08789998 0.01292014 -0.005517184 0.0879094 0.01297068 -0.005702674 0.08789998 0.0129702 -0.005702793 0.08789998 0.01297527 -0.005739748 0.0879094 0.01299661 -0.00589317 0.08789998 0.01299619 -0.00589323 0.08789998 0.01299691 -0.005999982 0.0879094 0.01299798 -0.006085455 0.08789998 0.01299756 -0.006085455 0.08789998 0.01297622 -0.006260335 0.0879094 0.01297473 -0.006276309 0.08789998 0.01297432 -0.006276249 0.0879094 0.01292729 -0.006462633 0.08789998 0.01292687 -0.006462514 0.08789998 0.0129072 -0.006512105 0.0879094 0.01285642 -0.006641387 0.08789998 0.012856 -0.006641149 0.08789998 0.01279652 -0.006748616 0.0879094 0.01276326 -0.006809532 0.08789998 0.0127629 -0.006809294 0.08789998 0.01264905 -0.006964147 0.0879094 0.01264935 -0.006964445 0.08789998 0.01264905 -0.006964147 0.0879094 0.01251661 -0.007103502 0.08789998 0.01251631 -0.007103204 0.08789998 0.01246237 -0.007146835 0.0879094 0.01236712 -0.00722444 0.08789998 0.01236689 -0.007224082 0.08789998 0.01224869 -0.007296919 0.0879094 0.01220345 -0.007325291 0.08789998 0.01220321 -0.007324874 0.0879094 0.01202815 -0.007404386 0.08789998 0.01202803 -0.007403969 0.0879094 0.01165467 -0.007492423 0.08789998 0.01175993 -0.007474184 0.0879094 0.01184427 -0.007460355 0.08789998 0.01184415 -0.007459938 0.08789998 0.01201272 -0.007408618 0.0879094 0.01127105 -0.007482826 0.08789998 0.01146256 -0.007499516 0.0879094 0.01146256 -0.007499933 0.08789998 0.01149988 -0.007498025 0.08789998 0.01165461 -0.007492005 0.0879094 0.0110833 -0.007441401 0.08789998 0.01123988 -0.007475495 0.08789998 0.01127111 -0.007482409 0.0879094 0.0109024 -0.007376253 0.08789998 0.01098799 -0.007406592 0.08789998 0.01108342 -0.007440984 0.0879094 0.01057285 -0.007179677 0.08789998 0.01073151 -0.007288157 0.0879094 0.01073127 -0.007288575 0.08789998 0.01075053 -0.007297933 0.08789998 0.01090258 -0.007375895 0.0879094 0.01042956 -0.007051467 0.08789998 0.01053732 -0.007147312 0.08789998 0.01057308 -0.007179319 0.0879094 0.01030391 -0.006905913 0.08789998 0.01035314 -0.006962239 0.08789998 0.01042991 -0.00705111 0.0879094 0.01011323 -0.006572902 0.08789998 0.01019823 -0.006745338 0.0879094 0.01019787 -0.006745517 0.08789998 0.01020121 -0.006749808 0.08789998 0.01030427 -0.006905674 0.0879094 0.01005136 -0.006390869 0.08789998 0.01009303 -0.006512105 0.08789998 0.01011365 -0.006572723 0.08789998 0.01000064 -0.005999982 0.08789998 0.00999999 -0.006010651 0.0879094 0.009999573 -0.006010651 0.08789998 0.01001369 -0.00620234 0.0879094 0.01001322 -0.006202399 0.08789998 0.01002532 -0.006259918 0.08789998 0.01005178 -0.00639075 0.08789998 0.01001095 -0.005818724 0.0879094 0.01001054 -0.005818665 0.08789998 0.01002568 -0.005740046 0.0879094 0.01004594 -0.005629718 0.08789998 0.01004636 -0.005629837 0.08789998 0.01009243 -0.00548762 0.0879094 0.01010519 -0.005446791 0.08789998 0.0101056 -0.00544697 0.0879094 0.01018738 -0.005272984 0.08789998 0.0101878 -0.005273222 0.0879094 0.01041471 -0.004963815 0.08789998 0.01035326 -0.005037784 0.0879094 0.01029115 -0.005111098 0.08789998 0.01029151 -0.005111396 0.08789998 0.01020216 -0.005250751 0.0879094 0.01071304 -0.004722416 0.08789998 0.01055639 -0.004833877 0.0879094 0.01055616 -0.004833579 0.08789998 0.01053678 -0.004851996 0.08789998 0.01041507 -0.004964113 0.0879094 0.01088285 -0.004632294 0.08789998 0.01075094 -0.004702806 0.08789998 0.01071327 -0.004722833 0.0879094 0.01106286 -0.004564642 0.08789998 0.01098799 -0.004593253 0.08789998 0.01088303 -0.004632711 0.08789998 0.01144123 -0.004501104 0.08789998 0.01125007 -0.004520952 0.0879094 0.01124995 -0.004520475 0.08789998 0.01123964 -0.004523396 0.08789998 0.01106297 -0.00456506 0.08799642 0.009980678 -0.006409943 0.08799642 0.009940743 -0.006212294 0.08799642 0.009926378 -0.006011188 0.08799642 0.009937882 -0.005809843 0.08799642 0.009975016 -0.005611658 0.08799642 0.01003718 -0.00541985 0.08799642 0.01012337 -0.005237519 0.08799642 0.01023221 -0.005067765 0.08799642 0.01036179 -0.00491333 0.08799642 0.01051014 -0.004776656 0.08799642 0.01067465 -0.004660129 0.08799642 0.01085281 -0.004565596 0.08799642 0.01104152 -0.004494607 0.08799642 0.0112378 -0.004448354 0.08799642 0.01143836 -0.004427552 0.08799642 0.01163995 -0.004432618 0.08799642 0.01183921 -0.004463374 0.08799642 0.01203292 -0.004519343 0.08799642 0.01221787 -0.00459969 0.08799642 0.01239109 -0.004702985 0.08799642 0.01254957 -0.004827558 0.08799642 0.0126909 -0.004971444 0.08799642 0.01281267 -0.005132138 0.08799642 0.01291286 -0.005307137 0.08799642 0.01298987 -0.005493521 0.08799642 0.01304239 -0.00568819 0.08799642 0.01306957 -0.005887985 0.08799642 0.01307106 -0.006089627 0.08799642 0.01304668 -0.00628978 0.08799642 0.01299691 -0.006485223 0.08799642 0.01292258 -0.00667262 0.08799642 0.01282489 -0.00684905 0.08799642 0.01270544 -0.007011473 0.08799642 0.01256614 -0.007157325 0.08799642 0.01240944 -0.007284164 0.08799642 0.01223772 -0.007389903 0.08799642 0.0120539 -0.007472872 0.08799642 0.01186102 -0.007531583 0.08799642 0.01166218 -0.0075652 0.08799642 0.01146072 -0.007573068 0.08799642 0.01125985 -0.007555186 0.08799642 0.01106297 -0.007511675 0.08799642 0.01087325 -0.007443368 0.08799642 0.01069378 -0.007351398 0.08799642 0.01052761 -0.007237195 0.08799642 0.0103774 -0.007102727 0.08799642 0.01024556 -0.00695008 0.08799642 0.01013439 -0.006781876 0.08799642 0.01004558 -0.006600856 0.08799046 0.009996354 -0.006405711 0.08799046 0.009956777 -0.006210088 0.08799046 0.009942591 -0.006011068 0.08799046 0.009953975 -0.00581181 0.08799046 0.009990692 -0.005615651 0.08799046 0.01005226 -0.00542581 0.08799046 0.01013755 -0.005245387 0.08799046 0.01024526 -0.005077362 0.08799046 0.01037353 -0.004924476 0.08799046 0.01052027 -0.004789292 0.08799046 0.01068317 -0.004673898 0.08799046 0.01085942 -0.004580378 0.08799046 0.01104623 -0.004510104 0.08799046 0.01124048 -0.004464328 0.08799046 0.01143896 -0.004443764 0.08799046 0.01163852 -0.004448711 0.08799046 0.01183575 -0.004479169 0.08799046 0.01202744 -0.004534602 0.08799046 0.01221048 -0.004614055 0.08799046 0.01238191 -0.004716336 0.08799046 0.01253879 -0.004839599 0.08799046 0.01267868 -0.004981994 0.08799046 0.01279914 -0.005141079 0.08799046 0.01289832 -0.00531429 0.08799046 0.0129745 -0.005498707 0.08799046 0.01302653 -0.005691409 0.08799046 0.01305347 -0.005889117 0.08799046 0.01305484 -0.006088674 0.08799046 0.01303076 -0.006286799 0.08799046 0.01298153 -0.006480216 0.08799046 0.01290792 -0.006665706 0.08799046 0.01281124 -0.006840288 0.08799046 0.01269298 -0.007001101 0.08799046 0.01255518 -0.007145404 0.08799046 0.01240009 -0.007270932 0.08799046 0.01223015 -0.007375597 0.08799046 0.01204824 -0.007457673 0.08799046 0.01185733 -0.007515847 0.08799046 0.01166051 -0.007549107 0.08799046 0.01146113 -0.007556915 0.08799046 0.01126235 -0.007539153 0.08799046 0.01106745 -0.007496118 0.08799046 0.01087969 -0.007428526 0.08799046 0.01070213 -0.00733751 0.08799046 0.01053762 -0.0072245 0.08799046 0.01038891 -0.007091343 0.08799046 0.01025849 -0.006940305 0.08799046 0.0101484 -0.006773829 0.08799046 0.01006054 -0.006594657 0.08798182 0.01001071 -0.006401836 0.08798182 0.009971559 -0.006208121 0.08798182 0.009957492 -0.006010949 0.08798182 0.009968757 -0.005813598 0.08798182 0.01000517 -0.005619347 0.08798182 0.01006615 -0.005431294 0.08798182 0.01015061 -0.005252599 0.08798182 0.01025724 -0.005086183 0.08798182 0.01038432 -0.004934787 0.08798182 0.01052969 -0.004800856 0.08798182 0.01069098 -0.004686653 0.08798182 0.01086556 -0.004593968 0.08798182 0.01105058 -0.004524409 0.08798182 0.01124298 -0.00447905 0.08798182 0.01143956 -0.004458665 0.08798182 0.01163715 -0.004463613 0.08798182 0.01183253 -0.004493713 0.08798182 0.01202237 -0.004548609 0.08798182 0.01220369 -0.004627346 0.08798182 0.01237344 -0.004728615 0.08798182 0.01252883 -0.004850745 0.08798182 0.01266735 -0.004991769 0.08798182 0.01278668 -0.005149304 0.08798182 0.01288491 -0.005320847 0.08798182 0.01296037 -0.005503535 0.08798182 0.01301187 -0.005694329 0.08798182 0.01303857 -0.00589019 0.08798182 0.01303994 -0.006087839 0.08798182 0.0130161 -0.006284058 0.08798182 0.01296728 -0.006475627 0.08798182 0.01289445 -0.006659328 0.08798182 0.01279866 -0.006832242 0.08798182 0.0126816 -0.006991505 0.08798182 0.0125451 -0.007134437 0.08798182 0.01239144 -0.007258772 0.08798182 0.01222312 -0.007362425 0.08798182 0.01204299 -0.007443726 0.08798182 0.01185387 -0.007501304 0.08798182 0.01165902 -0.007534265 0.08798182 0.01146149 -0.007542014 0.08798182 0.01126462 -0.00752443 0.08798182 0.01107162 -0.007481813 0.08798182 0.01088565 -0.007414877 0.08798182 0.01070976 -0.007324695 0.08798182 0.01054686 -0.007212758 0.08798182 0.01039958 -0.007080912 0.08798182 0.01027041 -0.006931304 0.08798182 0.01016139 -0.006766438 0.08798182 0.01007437 -0.006588995 0.08797067 0.01002347 -0.006398379 0.08797067 0.009984672 -0.006206333 0.08797067 0.009970724 -0.00601083 0.08797067 0.00998187 -0.005815207 0.08797067 0.01001799 -0.005622565 0.08797067 0.01007843 -0.005436182 0.08797067 0.01016217 -0.005259037 0.08797067 0.01026791 -0.005094051 0.08797067 0.01039385 -0.004943907 0.08797067 0.01053798 -0.004811108 0.08797067 0.0106979 -0.004697859 0.08797067 0.01087099 -0.004606008 0.08797067 0.01105445 -0.004537045 0.08797067 0.01124519 -0.004492044 0.08797067 0.01144009 -0.004471838 0.08797067 0.01163601 -0.004476726 0.08797067 0.01182967 -0.004506647 0.08797067 0.0120179 -0.004561066 0.08797067 0.01219767 -0.004639089 0.08797067 0.01236593 -0.004739522 0.08797067 0.01252001 -0.004860579 0.08797067 0.01265734 -0.005000412 0.08797067 0.01277565 -0.005156576 0.08797067 0.01287305 -0.005326628 0.08797067 0.01294791 -0.005507767 0.08797067 0.01299893 -0.005696952 0.08797067 0.0130254 -0.005891144 0.08797067 0.01302677 -0.006087124 0.08797067 0.01300311 -0.006281614 0.08797067 0.01295477 -0.006471514 0.08797067 0.01288253 -0.006653666 0.08797067 0.01278758 -0.006825089 0.08797067 0.01267147 -0.006982982 0.08797067 0.01253616 -0.007124722 0.08797067 0.01238381 -0.007247984 0.08797067 0.01221692 -0.007350802 0.08797067 0.01203835 -0.007431387 0.08797067 0.01185089 -0.007488489 0.08797067 0.01165765 -0.007521092 0.08797067 0.01146185 -0.007528781 0.08797067 0.01126664 -0.007511377 0.08797067 0.01107525 -0.007469117 0.08797067 0.0108909 -0.007402718 0.08797067 0.01071649 -0.007313311 0.08797067 0.01055502 -0.007202386 0.08797067 0.01040899 -0.007071673 0.08797067 0.0102809 -0.006923317 0.08797067 0.01017284 -0.006759881 0.08797067 0.01008659 -0.006583929 0.0879575 0.0100342 -0.006395518 0.0879575 0.009995698 -0.006204843 0.0879575 0.009981811 -0.00601077 0.0879575 0.009992897 -0.005816519 0.0879575 0.01002871 -0.005625307 0.0879575 0.01008874 -0.005440294 0.0879575 0.01017189 -0.005264401 0.0879575 0.01027685 -0.005100607 0.0879575 0.0104019 -0.004951596 0.0879575 0.01054495 -0.00481975 0.0879575 0.01070374 -0.004707336 0.0879575 0.01087558 -0.004616141 0.0879575 0.01105767 -0.004547655 0.0879575 0.01124703 -0.004503011 0.0879575 0.01144051 -0.004482924 0.0879575 0.011635 -0.004487812 0.0879575 0.01182729 -0.004517495 0.0879575 0.01201415 -0.004571497 0.0879575 0.0121926 -0.004648983 0.0879575 0.01235967 -0.004748642 0.0879575 0.01251262 -0.004868865 0.0879575 0.01264894 -0.005007624 0.0879575 0.01276642 -0.005162715 0.0879575 0.01286309 -0.005331516 0.0879575 0.01293736 -0.005511343 0.0879575 0.01298809 -0.005699157 0.0879575 0.01301431 -0.005891919 0.0879575 0.01301568 -0.006086468 0.0879575 0.0129922 -0.006279587 0.0879575 0.01294416 -0.006468117 0.0879575 0.01287245 -0.006648957 0.0879575 0.01277822 -0.006819128 0.0879575 0.01266294 -0.006975829 0.0879575 0.01252859 -0.007116556 0.0879575 0.01237738 -0.007238924 0.0879575 0.01221174 -0.007340967 0.0879575 0.01203441 -0.007420957 0.0879575 0.01184833 -0.007477641 0.0879575 0.01165652 -0.007510066 0.0879575 0.01146209 -0.007517695 0.0879575 0.01126831 -0.00750041 0.0879575 0.01107835 -0.007458448 0.0879575 0.01089531 -0.007392525 0.0879575 0.01072221 -0.007303774 0.0879575 0.01056188 -0.007193624 0.0879575 0.01041692 -0.007063865 0.0879575 0.01028978 -0.006916642 0.0879575 0.01018249 -0.006754338 0.0879575 0.01009684 -0.006579697 0.08794254 0.0100426 -0.006393253 0.08794254 0.01000428 -0.006203651 0.08794254 0.009990513 -0.006010711 0.08794254 0.01000154 -0.005817592 0.08794254 0.01003712 -0.005627453 0.08794254 0.01009678 -0.005443453 0.08794254 0.01017946 -0.005268573 0.08794254 0.01028382 -0.005105733 0.08794254 0.01040816 -0.004957556 0.08794254 0.01055043 -0.004826486 0.08794254 0.01070827 -0.004714727 0.08794254 0.01087915 -0.004624009 0.08794254 0.01106017 -0.00455594 0.08794254 0.01124846 -0.004511535 0.08794254 0.01144087 -0.004491627 0.08794254 0.01163423 -0.004496455 0.08794254 0.01182538 -0.004525959 0.08794254 0.01201122 -0.004579663 0.08794254 0.01218867 -0.004656732 0.08794254 0.01235479 -0.004755795 0.08794254 0.01250684 -0.004875302 0.08794254 0.01264238 -0.005013287 0.08794254 0.0127592 -0.005167484 0.08794254 0.01285529 -0.00533533 0.08794254 0.0129292 -0.005514144 0.08794254 0.01297956 -0.005700886 0.08794254 0.01300567 -0.005892574 0.08794254 0.01300704 -0.006085991 0.08794254 0.01298367 -0.006277978 0.08794254 0.01293593 -0.006465435 0.08794254 0.01286464 -0.006645262 0.08794254 0.01277089 -0.00681442 0.08794254 0.01265633 -0.006970286 0.08794254 0.01252275 -0.007110178 0.08794254 0.01237237 -0.007231891 0.08794254 0.01220768 -0.007333338 0.08794254 0.01203137 -0.00741285 0.08794254 0.0118463 -0.007469236 0.08794254 0.01165562 -0.007501423 0.08794254 0.01146233 -0.007508993 0.08794254 0.01126968 -0.007491827 0.08794254 0.0110808 -0.007450103 0.08794254 0.01089876 -0.007384598 0.08794254 0.01072663 -0.007296383 0.08794254 0.01056724 -0.00718683 0.08794254 0.01042312 -0.007057785 0.08794254 0.0102967 -0.006911396 0.08794254 0.01019001 -0.006750047 0.08794254 0.01010483 -0.006576359 0.08792638 0.01004832 -0.006391704 0.08792638 0.01001018 -0.006202816 0.08792638 0.009996473 -0.006010651 0.08792638 0.01000744 -0.005818307 0.08792638 0.0100429 -0.005628943 0.08792638 0.01010233 -0.005445659 0.08792638 0.0101847 -0.005271494 0.08792638 0.01028865 -0.00510925 0.08792638 0.01041251 -0.004961669 0.08792638 0.01055419 -0.004831135 0.08792638 0.01071143 -0.004719793 0.08792638 0.0108816 -0.004629492 0.08792638 0.0110619 -0.004561662 0.08792638 0.01124948 -0.004517436 0.08792638 0.01144111 -0.004497587 0.08792638 0.01163369 -0.004502356 0.08792638 0.01182413 -0.0045318 0.08792638 0.0120092 -0.004585266 0.08792638 0.01218593 -0.004662036 0.08792638 0.01235139 -0.004760742 0.08792638 0.01250284 -0.004879772 0.08792638 0.01263785 -0.00501722 0.08792638 0.0127542 -0.005170822 0.08792638 0.01284992 -0.005338013 0.08792638 0.01292353 -0.005516052 0.08792638 0.01297372 -0.005702078 0.08792638 0.01299971 -0.005892992 0.08792638 0.01300108 -0.006085634 0.08792638 0.01297777 -0.006276905 0.08792638 0.01293027 -0.006463587 0.08792638 0.01285922 -0.006642699 0.08792638 0.01276588 -0.006811201 0.08792638 0.01265174 -0.006966471 0.08792638 0.0125187 -0.007105767 0.08792638 0.01236891 -0.007227003 0.08792638 0.01220488 -0.007328033 0.08792638 0.01202929 -0.007407248 0.08792638 0.01184493 -0.007463395 0.08792638 0.01165497 -0.007495522 0.08792638 0.01146245 -0.007503032 0.08792638 0.01127058 -0.007485926 0.08792638 0.01108241 -0.007444381 0.08792638 0.01090115 -0.007379114 0.08792638 0.01072973 -0.007291197 0.08792638 0.01057094 -0.007182121 0.08792638 0.01042735 -0.007053613 0.08792638 0.01030141 -0.00690782 0.08792638 0.01019519 -0.006747066 0.08792638 0.01011037 -0.006574094 0.08792263 -0.0115 0.005999982 0.08849996 -0.01051515 0.00617361 0.08849996 -0.01056027 0.006341993 0.08849996 -0.01049995 0.005999982 0.08849996 -0.0107339 0.006642758 0.08849996 -0.01085716 0.006766021 0.08849996 -0.01063394 0.006499946 0.08849996 -0.01115792 0.006939649 0.08849996 -0.01132631 0.00698477 0.08849996 -0.01099997 0.006865978 0.08849996 -0.01167362 0.00698477 0.08849996 -0.01184201 0.006939649 0.08849996 -0.0115 0.006999969 0.08849996 -0.01214277 0.006766021 0.08849996 -0.01226603 0.006642758 0.08849996 -0.01199996 0.006865978 0.08849996 -0.01243966 0.006341993 0.08849996 -0.01248478 0.00617361 0.08849996 -0.01236599 0.006499946 0.08849996 -0.01248478 0.005826294 0.08849996 -0.01243966 0.00565797 0.08849996 -0.01249998 0.005999982 0.08849996 -0.01226603 0.005357205 0.08849996 -0.01214277 0.005233943 0.08849996 -0.01236599 0.005499958 0.08849996 -0.01184201 0.005060255 0.08849996 -0.01167362 0.005015134 0.08849996 -0.01199996 0.005133926 0.08849996 -0.01132631 0.005015134 0.08849996 -0.01115792 0.005060255 0.08849996 -0.0115 0.004999995 0.08849996 -0.01085716 0.005233943 0.08849996 -0.0107339 0.005357205 0.08849996 -0.01099997 0.005133926 0.08849996 -0.01056027 0.00565797 0.08849996 -0.01051515 0.005826294 0.08849996 -0.01063394 0.005499958 0.08849996 -0.01207733 0.006999969 0.08849996 -0.01092261 0.006999969 0.08849996 -0.01034528 0.005999982 0.08849996 -0.01092261 0.004999995 0.08849996 -0.01265466 0.005999982 0.08849996 -0.01207733 0.004999995 0.08999997 -0.01207733 0.006999969 0.08999997 -0.01265466 0.005999982 0.08999997 -0.01092261 0.006999969 0.08999997 -0.01034528 0.005999982 0.08999997 -0.01092261 0.004999995 0.08999997 -0.01207733 0.004999995 0.08999997 -0.01046752 0.0037781 0.08999997 -0.01025789 0.00388813 0.08999997 -0.01005989 0.004017889 0.08999997 -0.01294004 0.004017889 0.08999997 -0.01274204 0.00388813 0.08999997 -0.01197069 0.008404314 0.08999997 -0.01220053 0.00834769 0.08999997 -0.01242387 0.008269071 0.08999997 -0.01263856 0.008169353 0.08999997 -0.009627401 0.007579863 0.08999997 -0.009788632 0.007753193 0.08999997 -0.009965837 0.007910192 0.08999997 -0.01015734 0.008049309 0.08999997 -0.01036143 0.008169353 0.08999997 -0.009875297 0.004166126 0.08999997 -0.009705901 0.004331469 0.08999997 -0.009553253 0.004512429 0.08999997 -0.009136021 0.005356311 0.08999997 -0.009084939 0.005587518 0.08999997 -0.01374614 0.006978392 0.08999997 -0.01383006 0.00675708 0.08999997 -0.01057606 0.008269071 0.08999997 -0.0107994 0.00834769 0.08999997 -0.01102924 0.008404314 0.08999997 -0.009169876 0.00675708 0.08999997 -0.009107708 0.006528615 0.08999997 -0.009067833 0.006295263 0.08999997 -0.009418785 0.004707276 0.08999997 -0.009303748 0.004914164 0.08999997 -0.009209156 0.005131185 0.08999997 -0.009056389 0.005822479 0.08999997 -0.009050667 0.006059169 0.08999997 -0.01208627 0.00362116 0.08999997 -0.01185399 0.003575682 0.08999997 -0.01161831 0.003552854 0.08999997 -0.0115 0.003549993 0.08999997 -0.01138162 0.003552854 0.08999997 -0.01114594 0.003575682 0.08999997 -0.01126348 0.008438527 0.08999997 -0.0115 0.008449971 0.08999997 -0.01173645 0.008438527 0.08999997 -0.01253241 0.0037781 0.08999997 -0.01231312 0.003688871 0.08999997 -0.01091367 0.00362116 0.08999997 -0.01068681 0.003688871 0.08999997 -0.01394927 0.006059169 0.08999997 -0.01394355 0.005822479 0.08999997 -0.013915 0.005587518 0.08999997 -0.01386392 0.005356311 0.08999997 -0.01344668 0.004512429 0.08999997 -0.01329404 0.004331469 0.08999997 -0.01312464 0.004166126 0.08999997 -0.01284259 0.008049309 0.08999997 -0.0130341 0.007910192 0.08999997 -0.0132113 0.007753193 0.08999997 -0.01389223 0.006528615 0.08999997 -0.0139321 0.006295263 0.08999997 -0.009253859 0.006978392 0.08999997 -0.009358763 0.007190644 0.08999997 -0.009483635 0.00739175 0.08999997 -0.01379078 0.005131185 0.08999997 -0.01369619 0.004914164 0.08999997 -0.01358115 0.004707276 0.08999997 -0.01337254 0.007579863 0.08999997 -0.0135163 0.00739175 0.08999997 -0.01364117 0.007190644 0.08999866 -0.01161968 0.003524661 0.08999866 -0.01185804 0.003547728 0.08999866 -0.01209306 0.003593742 0.08999866 -0.01232254 0.003662228 0.08999866 -0.01254433 0.003752529 0.08999866 -0.01275634 0.003863811 0.08999866 -0.01295661 0.00399506 0.08999866 -0.01314336 0.004144966 0.08999866 -0.01331472 0.004312276 0.08999866 -0.01346909 0.004495263 0.08999866 -0.01360517 0.004692375 0.08999866 -0.01372152 0.004901647 0.08999866 -0.01381719 0.005121171 0.08999866 -0.01389116 0.00534892 0.08999866 -0.01394283 0.005582749 0.08999866 -0.01397168 0.005820453 0.08999866 -0.01397746 0.006059825 0.08999866 -0.01396012 0.006298661 0.08999866 -0.01391983 0.006534755 0.08999866 -0.01385688 0.006765782 0.08999866 -0.01377201 0.006989717 0.08999866 -0.01366585 0.007204353 0.08999866 -0.01353949 0.007407784 0.08999866 -0.01339411 0.007598042 0.08999866 -0.01323103 0.007773399 0.08999866 -0.0130518 0.007932186 0.08999866 -0.01285809 0.008072912 0.08999866 -0.01265168 0.008194327 0.08999866 -0.01243448 0.008295238 0.08999866 -0.01220864 0.00837475 0.08999866 -0.01197612 0.00843203 0.08999866 -0.01173913 0.00846666 0.08999866 -0.0115 0.008478224 0.08999866 -0.0112608 0.00846666 0.08999866 -0.01102381 0.00843203 0.08999866 -0.01079136 0.00837475 0.08999866 -0.01056545 0.008295238 0.08999866 -0.01034826 0.008194327 0.08999866 -0.01014184 0.008072912 0.08999866 -0.009948134 0.007932186 0.08999866 -0.009768903 0.007773399 0.08999866 -0.009605824 0.007598042 0.08999866 -0.009460449 0.007407784 0.08999866 -0.009334087 0.007204353 0.08999866 -0.009227931 0.006989717 0.08999866 -0.009143054 0.006765782 0.08999866 -0.009080111 0.006534755 0.08999866 -0.009039819 0.006298661 0.08999866 -0.009022474 0.006059825 0.08999866 -0.009028255 0.005820453 0.08999866 -0.009057104 0.005582749 0.08999866 -0.009108781 0.00534892 0.08999866 -0.00918281 0.005121171 0.08999866 -0.009278416 0.004901647 0.08999866 -0.009394764 0.004692375 0.08999866 -0.009530842 0.004495263 0.08999866 -0.009685218 0.004312276 0.08999866 -0.009856581 0.004144966 0.08999866 -0.01004332 0.00399506 0.08999866 -0.01024359 0.003863811 0.08999866 -0.01045566 0.003752529 0.08999866 -0.01067745 0.003662228 0.08999866 -0.01090687 0.003593742 0.08999866 -0.01114189 0.003547728 0.08999866 -0.01138025 0.003524661 0.08969998 -0.008749961 0.005999982 0.08972823 -0.008752107 0.006066381 0.08969998 -0.008757174 0.005800783 0.08972823 -0.008758544 0.005800843 0.08969998 -0.008778452 0.005625844 0.08972823 -0.008790552 0.005537211 0.08969998 -0.008789241 0.005536973 0.08972823 -0.008847832 0.005277872 0.08969998 -0.00884658 0.005277514 0.08972823 -0.009036004 0.004781782 0.08969998 -0.008980572 0.004905641 0.08972823 -0.008929908 0.005025267 0.08969998 -0.008928656 0.00502479 0.08969998 -0.008852779 0.005258321 0.08969998 -0.009368896 0.004266262 0.08969998 -0.009314894 0.004330277 0.08972823 -0.009315967 0.004331111 0.08969998 -0.009163916 0.004548966 0.08972823 -0.009165048 0.004549682 0.08969998 -0.009151279 0.004571676 0.08969998 -0.009034812 0.004781186 0.08969998 -0.009486258 0.004127204 0.08972823 -0.009487211 0.004128098 0.08969998 -0.009624719 0.003991961 0.08972823 -0.00967729 0.003942549 0.08969998 -0.009676396 0.003941595 0.08972823 -0.009884357 0.003776252 0.08969998 -0.009883582 0.003775179 0.08972823 -0.0103417 0.003507256 0.08969998 -0.01023626 0.003561079 0.08972823 -0.0101065 0.003630697 0.08969998 -0.01010584 0.003629565 0.08969998 -0.009914934 0.003754615 0.08972823 -0.0108422 0.003331184 0.08969998 -0.01058721 0.003405869 0.08972823 -0.01058769 0.00340712 0.08969998 -0.01057922 0.003409147 0.08969998 -0.0103411 0.003506064 0.08972823 -0.01110279 0.003280162 0.08969998 -0.01094102 0.003310441 0.08969998 -0.01084184 0.003329873 0.08969998 -0.01168745 0.003258466 0.08969998 -0.01163285 0.003253161 0.08972823 -0.0116328 0.003254532 0.08969998 -0.01136714 0.003253161 0.08972823 -0.0113672 0.003254532 0.08969998 -0.01131248 0.003258466 0.08969998 -0.01110261 0.003278851 0.08969998 -0.01189732 0.003278851 0.08972823 -0.01189714 0.003280162 0.08969998 -0.01205891 0.003310441 0.08972823 -0.01215779 0.003331184 0.08969998 -0.01215809 0.003329873 0.08972823 -0.0124123 0.00340712 0.08969998 -0.01241272 0.003405869 0.08969998 -0.01242071 0.003409147 0.08972823 -0.01265823 0.003507256 0.08969998 -0.01265883 0.003506064 0.08969998 -0.01276367 0.003561079 0.08972823 -0.01289343 0.003630697 0.08969998 -0.01289409 0.003629565 0.08969998 -0.013085 0.003754615 0.08972823 -0.01311558 0.003776252 0.08969998 -0.01311635 0.003775179 0.08972823 -0.01332265 0.003942549 0.08969998 -0.01332354 0.003941595 0.08969998 -0.01384866 0.004571676 0.08969998 -0.01383602 0.004548966 0.08972823 -0.01383489 0.004549682 0.08969998 -0.01368504 0.004330277 0.08972823 -0.01368403 0.004331111 0.08969998 -0.01363104 0.004266262 0.08972823 -0.01351273 0.004128098 0.08969998 -0.01351374 0.004127204 0.08969998 -0.01337522 0.003991961 0.08969998 -0.01396512 0.004781186 0.08972823 -0.01396393 0.004781782 0.08969998 -0.01401937 0.004905641 0.08972823 -0.01407003 0.005025267 0.08969998 -0.01407128 0.00502479 0.08969998 -0.01414716 0.005258321 0.08972823 -0.0141521 0.005277872 0.08969998 -0.01415336 0.005277514 0.08972823 -0.01420938 0.005537211 0.08969998 -0.0142107 0.005536973 0.08969998 -0.01422148 0.005625844 0.08972823 -0.01424139 0.005800843 0.08969998 -0.01424276 0.005800783 0.08969998 -0.01424759 0.006000041 0.08972823 -0.01424783 0.006066381 0.08969998 -0.01424914 0.006066441 0.08972823 -0.01422858 0.006331264 0.08969998 -0.01422995 0.006331443 0.08972823 -0.01411414 0.006849348 0.08969998 -0.01414495 0.006741106 0.08972823 -0.01418387 0.006593108 0.08969998 -0.01418519 0.006593406 0.08969998 -0.01422262 0.00637412 0.08972823 -0.01390224 0.007335782 0.08969998 -0.01402115 0.007098197 0.08972823 -0.0140199 0.007097721 0.08969998 -0.01402217 0.007095515 0.08969998 -0.01411539 0.006849765 0.08972823 -0.01376205 0.007561385 0.08969998 -0.01384699 0.007427215 0.08969998 -0.01390337 0.007336437 0.08969998 -0.01337552 0.008008062 0.08969998 -0.01342087 0.007967889 0.08972823 -0.01341992 0.007966935 0.08969998 -0.01360183 0.00777328 0.08972823 -0.01360082 0.007772445 0.08969998 -0.01363164 0.007734298 0.08969998 -0.01376318 0.00756216 0.08969998 -0.01322197 0.00814408 0.08972823 -0.01322114 0.008143067 0.08969998 -0.01308411 0.008244276 0.08972823 -0.01300626 0.008299171 0.08969998 -0.01300698 0.008300244 0.08972823 -0.01277732 0.008433818 0.08969998 -0.01277798 0.008434951 0.08969998 -0.01276487 0.00844103 0.08972823 -0.01253646 0.008545696 0.08969998 -0.012537 0.008546948 0.08969998 -0.01241981 0.008588194 0.08972823 -0.01228594 0.008633852 0.08969998 -0.0122863 0.008635163 0.08969998 -0.01205915 0.008691132 0.08972823 -0.01202803 0.00869745 0.08969998 -0.01202833 0.008698761 0.08972823 -0.01176524 0.008735835 0.08969998 -0.01176536 0.008737146 0.08969998 -0.01094079 0.008691132 0.08969998 -0.0109716 0.008698761 0.08972823 -0.0109719 0.00869745 0.08969998 -0.01123458 0.008737146 0.08972823 -0.0112347 0.008735835 0.08969998 -0.01131242 0.008740901 0.08972823 -0.0115 0.00874865 0.08969998 -0.0115 0.008749961 0.08969998 -0.01168751 0.008740901 0.08969998 -0.01071363 0.008635163 0.08972823 -0.01071399 0.008633852 0.08969998 -0.01058012 0.008588194 0.08972823 -0.01046347 0.008545696 0.08969998 -0.01046293 0.008546948 0.08969998 -0.01023507 0.00844103 0.08972823 -0.01022261 0.008433818 0.08969998 -0.01022195 0.008434951 0.08972823 -0.009993672 0.008299171 0.08969998 -0.009992957 0.008300244 0.08969998 -0.009915828 0.008244276 0.08972823 -0.009778797 0.008143067 0.08969998 -0.009777963 0.00814408 0.08969998 -0.009624421 0.008008062 0.08972823 -0.009580016 0.007966935 0.08969998 -0.009579062 0.007967889 0.08972823 -0.009399116 0.007772445 0.08969998 -0.009398102 0.00777328 0.08972823 -0.008980035 0.007097721 0.08969998 -0.009096562 0.007336437 0.08972823 -0.009097695 0.007335782 0.08969998 -0.009152948 0.007427215 0.08972823 -0.009237885 0.007561385 0.08969998 -0.009236752 0.00756216 0.08969998 -0.0093683 0.007734298 0.08972823 -0.00888586 0.006849348 0.08969998 -0.00897777 0.007095515 0.08969998 -0.008978784 0.007098197 0.08972823 -0.008816063 0.006593108 0.08969998 -0.008854985 0.006741106 0.08969998 -0.008884549 0.006849765 0.08969998 -0.008750796 0.006066441 0.08969998 -0.008770048 0.006331443 0.08972823 -0.008771359 0.006331264 0.08969998 -0.00877732 0.00637412 0.08969998 -0.008814752 0.006593406 0.08977913 -0.01176434 0.008726537 0.08977913 -0.0120263 0.00868833 0.08977913 -0.01228326 0.00862497 0.08977913 -0.01253294 0.008537113 0.08977913 -0.01277303 0.008425533 0.08977913 -0.0130012 0.008291363 0.08977913 -0.0132153 0.008135795 0.08977913 -0.01341342 0.007960259 0.08977913 -0.01359373 0.007766425 0.08977913 -0.01375442 0.00755608 0.08977913 -0.01389408 0.007331252 0.08977913 -0.01401138 0.007093966 0.08977913 -0.01410526 0.006846487 0.08977913 -0.01417481 0.006591081 0.08977913 -0.01421934 0.006330192 0.08977913 -0.01423853 0.006066143 0.08977913 -0.01423215 0.005801558 0.08977913 -0.01420027 0.005538761 0.08977913 -0.0141431 0.005280315 0.08977913 -0.01406133 0.005028605 0.08977913 -0.01395559 0.004785895 0.08977913 -0.01382696 0.004554569 0.08977913 -0.01367664 0.004336714 0.08977913 -0.01350593 0.004134416 0.08977913 -0.01331651 0.003949522 0.08977913 -0.01311016 0.003783762 0.08977913 -0.01288872 0.003638744 0.08977913 -0.01265436 0.00351572 0.08977913 -0.01240921 0.003415882 0.08977913 -0.01215553 0.003340184 0.08977913 -0.01189577 0.003289341 0.08977913 -0.01163232 0.003263831 0.08977913 -0.01136761 0.003263831 0.08977913 -0.01110416 0.003289341 0.08977913 -0.0108444 0.003340184 0.08977913 -0.01059073 0.003415882 0.08977913 -0.01034557 0.00351572 0.08977913 -0.01011121 0.003638744 0.08977913 -0.009889841 0.003783762 0.08977913 -0.00968343 0.003949522 0.08977913 -0.009494006 0.004134416 0.08977913 -0.009323358 0.004336714 0.08977913 -0.009172976 0.004554569 0.08977913 -0.009044349 0.004785895 0.08977913 -0.00893861 0.005028605 0.08977913 -0.008856832 0.005280315 0.08977913 -0.008799731 0.005538761 0.08977913 -0.008767783 0.005801558 0.08977913 -0.008761405 0.006066143 0.08977913 -0.008780598 0.006330192 0.08977913 -0.008825123 0.006591081 0.08977913 -0.008894681 0.006846487 0.08977913 -0.008988559 0.007093966 0.08977913 -0.009105861 0.007331252 0.08977913 -0.009245514 0.00755608 0.08977913 -0.009406208 0.007766425 0.08977913 -0.009586513 0.007960259 0.08977913 -0.009784638 0.008135795 0.08977913 -0.009998738 0.008291363 0.08977913 -0.0102269 0.008425533 0.08977913 -0.01046699 0.008537113 0.08977913 -0.01071667 0.00862497 0.08977913 -0.01097369 0.00868833 0.08977913 -0.01123559 0.008726537 0.08977913 -0.0115 0.008739352 0.08982771 -0.01176261 0.008708715 0.08982771 -0.01202285 0.008670747 0.08982771 -0.01227813 0.008607804 0.08982771 -0.01252621 0.008520483 0.08982771 -0.01276469 0.008409678 0.08982771 -0.01299136 0.008276402 0.08982771 -0.01320409 0.008121788 0.08982771 -0.01340091 0.007947444 0.08982771 -0.01358002 0.007754862 0.08982771 -0.0137397 0.007545948 0.08982771 -0.0138784 0.007322549 0.08982771 -0.01399499 0.007086813 0.08982771 -0.01408821 0.006840944 0.08982771 -0.01415729 0.006587207 0.08982771 -0.01420158 0.006327986 0.08982771 -0.01422065 0.006065726 0.08982771 -0.01421427 0.005802869 0.08982771 -0.01418256 0.005541801 0.08982771 -0.01412582 0.005285024 0.08982771 -0.01404458 0.005034923 0.08982771 -0.01393955 0.004793822 0.08982771 -0.01381176 0.004564046 0.08982771 -0.01366239 0.004347622 0.08982771 -0.01349282 0.004146635 0.08982771 -0.01330465 0.003962934 0.08982771 -0.01309961 0.003798246 0.08982771 -0.01287966 0.003654181 0.08982771 -0.01264679 0.003531932 0.08982771 -0.01240324 0.00343281 0.08982771 -0.01215124 0.003357589 0.08982771 -0.01189321 0.003307104 0.08982771 -0.01163142 0.003281712 0.08982771 -0.01136851 0.003281712 0.08982771 -0.01110672 0.003307104 0.08982771 -0.0108487 0.003357589 0.08982771 -0.01059669 0.00343281 0.08982771 -0.01035314 0.003531932 0.08982771 -0.01012033 0.003654181 0.08982771 -0.009900331 0.003798246 0.08982771 -0.009695291 0.003962934 0.08982771 -0.009507119 0.004146635 0.08982771 -0.009337544 0.004347622 0.08982771 -0.009188175 0.004564046 0.08982771 -0.009060382 0.004793822 0.08982771 -0.008955359 0.005034923 0.08982771 -0.008874118 0.005285024 0.08982771 -0.008817374 0.005541801 0.08982771 -0.008785665 0.005802869 0.08982771 -0.008779346 0.006065726 0.08982771 -0.00879836 0.006327986 0.08982771 -0.008842647 0.006587207 0.08982771 -0.008911728 0.006840944 0.08982771 -0.00900495 0.007086813 0.08982771 -0.009121537 0.007322549 0.08982771 -0.009260237 0.007545948 0.08982771 -0.009419918 0.007754862 0.08982771 -0.00959903 0.007947444 0.08982771 -0.009795844 0.008121788 0.08982771 -0.01000857 0.008276402 0.08982771 -0.01023524 0.008409678 0.08982771 -0.01047372 0.008520483 0.08982771 -0.0107218 0.008607804 0.08982771 -0.01097708 0.008670747 0.08982771 -0.01123732 0.008708715 0.08982771 -0.0115 0.008721411 0.08987247 -0.01176011 0.008682847 0.08987247 -0.01201784 0.008645176 0.08987247 -0.01227074 0.00858289 0.08987247 -0.01251643 0.008496403 0.08987247 -0.01275259 0.008386671 0.08987247 -0.01297712 0.008254647 0.08987247 -0.01318782 0.008101522 0.08987247 -0.01338279 0.007928848 0.08987247 -0.01356017 0.007738113 0.08987247 -0.0137183 0.007531166 0.08987247 -0.01385569 0.007309913 0.08987247 -0.01397114 0.007076442 0.08987247 -0.01406347 0.006832897 0.08987247 -0.0141319 0.006581604 0.08987247 -0.01417577 0.006324887 0.08987247 -0.0141946 0.00606513 0.08987247 -0.01418834 0.005804717 0.08987247 -0.01415693 0.005546152 0.08987247 -0.01410073 0.005291879 0.08987247 -0.01402026 0.005044162 0.08987247 -0.01391625 0.004805386 0.08987247 -0.01378965 0.004577755 0.08987247 -0.01364171 0.004363417 0.08987247 -0.01347374 0.004164338 0.08987247 -0.01328736 0.003982424 0.08987247 -0.01308429 0.003819286 0.08987247 -0.01286643 0.003676593 0.08987247 -0.01263582 0.003555536 0.08987247 -0.0123946 0.003457307 0.08987247 -0.01214504 0.003382861 0.08987247 -0.01188945 0.003332793 0.08987247 -0.01163017 0.0033077 0.08987247 -0.01136976 0.0033077 0.08987247 -0.01111048 0.003332793 0.08987247 -0.01085489 0.003382861 0.08987247 -0.01060533 0.003457307 0.08987247 -0.01036411 0.003555536 0.08987247 -0.0101335 0.003676593 0.08987247 -0.009915649 0.003819286 0.08987247 -0.009712576 0.003982424 0.08987247 -0.009526193 0.004164338 0.08987247 -0.009358227 0.004363417 0.08987247 -0.009210288 0.004577755 0.08987247 -0.009083688 0.004805386 0.08987247 -0.008979678 0.005044162 0.08987247 -0.008899211 0.005291879 0.08987247 -0.008843004 0.005546152 0.08987247 -0.008811593 0.005804717 0.08987247 -0.008805334 0.00606513 0.08987247 -0.008824169 0.006324887 0.08987247 -0.008868038 0.006581604 0.08987247 -0.008936464 0.006832897 0.08987247 -0.009028792 0.007076442 0.08987247 -0.009144246 0.007309913 0.08987247 -0.009281635 0.007531166 0.08987247 -0.009439826 0.007738113 0.08987247 -0.009617149 0.007928848 0.08987247 -0.009812116 0.008101522 0.08987247 -0.01002281 0.008254647 0.08987247 -0.01024734 0.008386671 0.08987247 -0.01048356 0.008496403 0.08987247 -0.01072925 0.00858289 0.08987247 -0.01098209 0.008645176 0.08987247 -0.01123982 0.008682847 0.08987247 -0.0115 0.008695423 0.08991211 -0.01175689 0.008649647 0.08991211 -0.01201146 0.008612513 0.08991211 -0.01226121 0.008550941 0.08991211 -0.01250386 0.008465588 0.08991211 -0.01273715 0.008357167 0.08991211 -0.01295888 0.008226752 0.08991211 -0.01316696 0.008075594 0.08991211 -0.01335948 0.007905006 0.08991211 -0.01353466 0.007716655 0.08991211 -0.01369088 0.007512211 0.08991211 -0.0138266 0.007293701 0.08991211 -0.01394057 0.00706315 0.08991211 -0.01403182 0.006822586 0.08991211 -0.01409941 0.006574392 0.08991211 -0.01414269 0.006320834 0.08991211 -0.01416134 0.006064295 0.08991211 -0.01415508 0.005807161 0.08991211 -0.01412409 0.005551755 0.08991211 -0.0140686 0.005300581 0.08991211 -0.01398909 0.005055963 0.08991211 -0.01388639 0.004820108 0.08991211 -0.01376134 0.004595339 0.08991211 -0.01361525 0.004383623 0.08991211 -0.01344937 0.004186987 0.08991211 -0.01326531 0.004007339 0.08991211 -0.01306474 0.003846287 0.08991211 -0.01284956 0.003705322 0.08991211 -0.01262181 0.003585755 0.08991211 -0.01238358 0.003488779 0.08991211 -0.01213705 0.003415167 0.08991211 -0.01188462 0.003365755 0.08991211 -0.01162856 0.003340959 0.08991211 -0.01137137 0.003340959 0.08991211 -0.01111531 0.003365755 0.08991211 -0.01086288 0.003415167 0.08991211 -0.01061642 0.003488779 0.08991211 -0.01037812 0.003585755 0.08991211 -0.01015037 0.003705322 0.08991211 -0.0099352 0.003846287 0.08991211 -0.00973463 0.004007339 0.08991211 -0.009550571 0.004186987 0.08991211 -0.009384691 0.004383623 0.08991211 -0.0092386 0.004595339 0.08991211 -0.00911355 0.004820108 0.08991211 -0.009010851 0.005055963 0.08991211 -0.008931338 0.005300581 0.08991211 -0.008875846 0.005551755 0.08991211 -0.008844852 0.005807161 0.08991211 -0.008838593 0.006064295 0.08991211 -0.00885725 0.006320834 0.08991211 -0.008900582 0.006574392 0.08991211 -0.008968114 0.006822586 0.08991211 -0.009059369 0.00706315 0.08991211 -0.009173333 0.007293701 0.08991211 -0.009309053 0.007512211 0.08991211 -0.009465277 0.007716655 0.08991211 -0.009640455 0.007905006 0.08991211 -0.009832978 0.008075594 0.08991211 -0.01004111 0.008226752 0.08991211 -0.01026284 0.008357167 0.08991211 -0.01049607 0.008465588 0.08991211 -0.01073873 0.008550941 0.08991211 -0.01098853 0.008612513 0.08991211 -0.01124304 0.008649647 0.08991211 -0.0115 0.008662104 0.08994543 -0.01175308 0.008610248 0.08994543 -0.01200383 0.008573591 0.08994543 -0.01224988 0.008512973 0.08994543 -0.0124889 0.008428871 0.08994543 -0.01271873 0.00832206 0.08994543 -0.01293712 0.008193612 0.08994543 -0.01314216 0.00804466 0.08994543 -0.01333183 0.007876634 0.08994543 -0.01350438 0.007691085 0.08994543 -0.01365822 0.00748974 0.08994543 -0.01379197 0.007274448 0.08994543 -0.01390427 0.007047295 0.08994543 -0.01399409 0.006810367 0.08994543 -0.01406067 0.006565868 0.08994543 -0.01410335 0.006316065 0.08994543 -0.01412171 0.006063342 0.08994543 -0.01411557 0.005810022 0.08994543 -0.01408505 0.005558431 0.08994543 -0.01403033 0.005311012 0.08994543 -0.01395207 0.00507003 0.08994543 -0.01385086 0.004837691 0.08994543 -0.01372772 0.00461626 0.08994543 -0.01358377 0.004407703 0.08994543 -0.01342034 0.004213988 0.08994543 -0.01323902 0.004037022 0.08994543 -0.01304143 0.003878295 0.08994543 -0.01282948 0.003739476 0.08994543 -0.01260507 0.003621697 0.08994543 -0.0123704 0.003526151 0.08994543 -0.01212757 0.003453671 0.08994543 -0.0118789 0.003404974 0.08994543 -0.01162666 0.003380537 0.08994543 -0.01137328 0.003380537 0.08994543 -0.01112103 0.003404974 0.08994543 -0.01087236 0.003453671 0.08994543 -0.01062953 0.003526151 0.08994543 -0.01039487 0.003621697 0.08994543 -0.01017045 0.003739476 0.08994543 -0.009958505 0.003878295 0.08994543 -0.009760916 0.004037022 0.08994543 -0.009579598 0.004213988 0.08994543 -0.009416162 0.004407703 0.08994543 -0.009272217 0.00461626 0.08994543 -0.009149074 0.004837691 0.08994543 -0.009047865 0.00507003 0.08994543 -0.008969604 0.005311012 0.08994543 -0.008914887 0.005558431 0.08994543 -0.00888437 0.005810022 0.08994543 -0.008878231 0.006063342 0.08994543 -0.008896589 0.006316065 0.08994543 -0.008939266 0.006565868 0.08994543 -0.009005844 0.006810367 0.08994543 -0.009095668 0.007047295 0.08994543 -0.009207963 0.007274448 0.08994543 -0.009341716 0.00748974 0.08994543 -0.009495556 0.007691085 0.08994543 -0.009668111 0.007876634 0.08994543 -0.009857773 0.00804466 0.08994543 -0.01006281 0.008193612 0.08994543 -0.01028126 0.00832206 0.08994543 -0.01051104 0.008428871 0.08994543 -0.01075005 0.008512973 0.08994543 -0.0109961 0.008573591 0.08994543 -0.01124686 0.008610248 0.08994543 -0.0115 0.008622467 0.08997142 -0.01174879 0.008565664 0.08997142 -0.01199525 0.008529663 0.08997142 -0.01223707 0.008470058 0.08997142 -0.01247203 0.008387386 0.08997142 -0.01269793 0.008282423 0.08997142 -0.01291263 0.00815618 0.08997142 -0.01311409 0.008009791 0.08997142 -0.01330053 0.007844567 0.08997142 -0.01347017 0.007662177 0.08997142 -0.01362138 0.007464289 0.08997142 -0.01375281 0.007252693 0.08997142 -0.0138632 0.007029414 0.08997142 -0.01395153 0.006796538 0.08997142 -0.01401698 0.006556212 0.08997142 -0.01405888 0.006310701 0.08997142 -0.01407694 0.006062269 0.08997142 -0.01407092 0.005813241 0.08997142 -0.01404088 0.005566 0.08997142 -0.01398718 0.005322754 0.08997142 -0.01391017 0.005085885 0.08997142 -0.01381075 0.00485754 0.08997142 -0.01368969 0.004639863 0.08997142 -0.01354819 0.004434883 0.08997142 -0.01338756 0.004244506 0.08997142 -0.01320934 0.00407052 0.08997142 -0.01301515 0.003914535 0.08997142 -0.01280677 0.00377804 0.08997142 -0.01258623 0.003662288 0.08997142 -0.01235556 0.003568351 0.08997142 -0.01211684 0.003497123 0.08997142 -0.01187241 0.003449261 0.08997142 -0.01162451 0.00342524 0.08997142 -0.01137542 0.00342524 0.08997142 -0.01112753 0.003449261 0.08997142 -0.01088309 0.003497123 0.08997142 -0.01064437 0.003568351 0.08997142 -0.0104137 0.003662288 0.08997142 -0.01019316 0.00377804 0.08997142 -0.009984791 0.003914535 0.08997142 -0.009790599 0.00407052 0.08997142 -0.009612381 0.004244506 0.08997142 -0.009451746 0.004434883 0.08997142 -0.009310245 0.004639863 0.08997142 -0.009189248 0.00485754 0.08997142 -0.009089767 0.005085885 0.08997142 -0.009012758 0.005322754 0.08997142 -0.008959054 0.005566 0.08997142 -0.008929014 0.005813241 0.08997142 -0.008922994 0.006062269 0.08997142 -0.008941054 0.006310701 0.08997142 -0.008982956 0.006556212 0.08997142 -0.009048402 0.006796538 0.08997142 -0.009136736 0.007029414 0.08997142 -0.009247124 0.007252693 0.08997142 -0.009378552 0.007464289 0.08997142 -0.009529769 0.007662177 0.08997142 -0.009699404 0.007844567 0.08997142 -0.009885847 0.008009791 0.08997142 -0.01008737 0.00815618 0.08997142 -0.01030206 0.008282423 0.08997142 -0.0105279 0.008387386 0.08997142 -0.01076287 0.008470058 0.08997142 -0.01100474 0.008529663 0.08997142 -0.01125121 0.008565664 0.08997142 -0.0115 0.008577704 0.08998936 -0.01174408 0.008517324 0.08998936 -0.01198589 0.008482038 0.08998936 -0.01222318 0.008423507 0.08998936 -0.01245373 0.008342444 0.08998936 -0.01267534 0.008239448 0.08998936 -0.01288598 0.00811553 0.08998936 -0.01308369 0.007971882 0.08998936 -0.01326662 0.007809817 0.08998936 -0.01343303 0.007630884 0.08998936 -0.01358145 0.007436692 0.08998936 -0.01371037 0.007229089 0.08998936 -0.01381868 0.007010042 0.08998936 -0.01390534 0.006781518 0.08998936 -0.01396954 0.006545722 0.08998936 -0.01401066 0.0063048 0.08998936 -0.01402837 0.006061077 0.08998936 -0.01402246 0.005816757 0.08998936 -0.01399302 0.005574166 0.08998936 -0.01394027 0.005335569 0.08998936 -0.01386475 0.005103111 0.08998936 -0.01376718 0.004879057 0.08998936 -0.01364839 0.004665493 0.08998936 -0.01350957 0.004464387 0.08998936 -0.01335197 0.004277586 0.08998936 -0.01317709 0.004106879 0.08998936 -0.0129866 0.003953814 0.08998936 -0.01278215 0.003819882 0.08998936 -0.01256579 0.003706336 0.08998936 -0.01233941 0.003614187 0.08998936 -0.01210522 0.00354433 0.08998936 -0.01186543 0.003497362 0.08998936 -0.01162219 0.003473758 0.08998936 -0.01137781 0.003473758 0.08998936 -0.01113456 0.003497362 0.08998936 -0.01089471 0.00354433 0.08998936 -0.01066052 0.003614187 0.08998936 -0.01043421 0.003706336 0.08998936 -0.01021778 0.003819882 0.08998936 -0.01001334 0.003953814 0.08998936 -0.009822845 0.004106879 0.08998936 -0.009647965 0.004277586 0.08998936 -0.00949037 0.004464387 0.08998936 -0.009351551 0.004665493 0.08998936 -0.009232759 0.004879057 0.08998936 -0.009135186 0.005103111 0.08998936 -0.009059667 0.005335569 0.08998936 -0.009006917 0.005574166 0.08998936 -0.008977472 0.005816757 0.08998936 -0.008971571 0.006061077 0.08998936 -0.008989274 0.0063048 0.08998936 -0.009030401 0.006545722 0.08998936 -0.009094595 0.006781518 0.08998936 -0.009181261 0.007010042 0.08998936 -0.009289562 0.007229089 0.08998936 -0.009418487 0.007436692 0.08998936 -0.009566903 0.007630884 0.08998936 -0.009733319 0.007809817 0.08998936 -0.009916245 0.007971882 0.08998936 -0.01011395 0.00811553 0.08998936 -0.01032459 0.008239448 0.08998936 -0.01054626 0.008342444 0.08998936 -0.01077675 0.008423507 0.08998936 -0.01101404 0.008482038 0.08998936 -0.01125586 0.008517324 0.08998936 -0.0115 0.008529126 0.08799999 -0.008775591 0.005625486 0.08799999 -0.008749961 0.005999982 0.08799999 -0.008851945 0.005258023 0.08799999 -0.008977651 0.004904389 0.08799999 -0.009150326 0.004571139 0.08799999 -0.00936675 0.004264473 0.08799999 -0.009622931 0.003990173 0.08799999 -0.0099141 0.003753304 0.08799999 -0.01023477 0.003558278 0.08799999 -0.01057904 0.00340873 0.08799999 -0.01094049 0.003307461 0.08799999 -0.0113123 0.00325638 0.08799999 -0.01168763 0.00325638 0.08799999 -0.01205945 0.003307461 0.08799999 -0.01242089 0.00340873 0.08799999 -0.01276516 0.003558278 0.08799999 -0.01308584 0.003753304 0.08799999 -0.01337701 0.003990173 0.08799999 -0.01363319 0.004264473 0.08799999 -0.01384961 0.004571139 0.08799999 -0.01402229 0.004904389 0.08799999 -0.01414799 0.005258023 0.08799999 -0.01422435 0.005625486 0.08799999 -0.01424998 0.005999982 0.08799999 -0.01422435 0.006374418 0.08799999 -0.01414799 0.00674194 0.08799999 -0.01402229 0.007095575 0.08799999 -0.01384961 0.007428824 0.08799999 -0.01363319 0.00773549 0.08799999 -0.01337701 0.008009791 0.08799999 -0.01308584 0.00824666 0.08799999 -0.01276516 0.008441627 0.08799999 -0.01242089 0.008591175 0.08799999 -0.01205945 0.008692443 0.08799999 -0.01168763 0.008743584 0.08799999 -0.0113123 0.008743584 0.08799999 -0.01094049 0.008692443 0.08799999 -0.01057904 0.008591175 0.08799999 -0.01023477 0.008441627 0.08799999 -0.0099141 0.00824666 0.08799999 -0.009622931 0.008009791 0.08799999 -0.00936675 0.00773549 0.08799999 -0.009150326 0.007428824 0.08799999 -0.008977651 0.007095575 0.08799999 -0.008851945 0.00674194 0.08799999 -0.008775591 0.006374418 0.078 -0.0115 0.004780471 0.078 -0.01171171 0.004799008 0.078 -0.01028048 0.005999982 0.078 -0.01089024 0.004943847 0.078 -0.01108288 0.004854023 0.078 -0.01029902 0.005788207 0.078 -0.01044386 0.005390226 0.078 -0.01056575 0.005216062 0.078 -0.01071608 0.005065798 0.078 -0.01128822 0.004799008 0.078 -0.01191705 0.004854023 0.078 -0.01210969 0.004943847 0.078 -0.01228386 0.005065798 0.078 -0.01243418 0.005216062 0.078 -0.01255607 0.005390226 0.078 -0.01264595 0.005582869 0.078 -0.01270097 0.005788207 0.078 -0.01271945 0.005999982 0.078 -0.01029902 0.006211757 0.078 -0.01264595 0.006417036 0.078 -0.01255607 0.006609737 0.078 -0.01035404 0.006417036 0.078 -0.01243418 0.006783843 0.078 -0.01228386 0.006934165 0.078 -0.01071608 0.006934165 0.078 -0.01056575 0.006783843 0.078 -0.01191705 0.007145941 0.078 -0.01270097 0.006211757 0.078 -0.01089024 0.007056117 0.078 -0.01210969 0.007056117 0.078 -0.01044386 0.006609737 0.078 -0.01035404 0.005582869 0.078 -0.0115 0.007219493 0.078 -0.01128822 0.007200956 0.078 -0.01108288 0.007145941 0.078 -0.01171171 0.007200956 0.08799999 -0.01071506 0.004606366 0.08799999 -0.0106948 0.004616975 0.08799999 -0.01309984 0.006021916 0.08799999 -0.0130977 0.005948722 0.08799999 -0.01010566 0.006785392 0.08799999 -0.01008254 0.006739437 0.08799999 -0.0100407 0.006656289 0.08799999 -0.01309579 0.005882561 0.08799999 -0.01307982 0.005745351 0.08799999 -0.01305216 0.005610883 0.08799999 -0.01303255 0.005545139 0.08799999 -0.0130127 0.00547862 0.08799999 -0.01296269 0.005352437 0.08799999 -0.01295924 0.005343616 0.08799999 -0.01289427 0.005214571 0.08799999 -0.01286727 0.00517112 0.08799999 -0.01309245 0.006153583 0.08799999 -0.01309204 0.006160318 0.08799999 -0.01090013 0.004518389 0.08799999 -0.01082104 0.004551053 0.08799999 -0.009999454 0.006552159 0.08799999 -0.009987235 0.006521284 0.08799999 -0.01045441 0.007211327 0.08799999 -0.01046299 0.007218062 0.08799999 -0.01219391 0.007441043 0.08799999 -0.01230514 0.007382988 0.08799999 -0.01237225 0.007339954 0.08799999 -0.01242065 0.007308959 0.08799999 -0.01252943 0.007224977 0.08799999 -0.01253694 0.007218062 0.08799999 -0.01263189 0.007130801 0.08799999 -0.01268339 0.007074713 0.08799999 -0.01272624 0.007028043 0.08799999 -0.0128104 0.006918609 0.08799999 -0.01281243 0.00691545 0.08799999 -0.01305866 0.006355702 0.08799999 -0.01307255 0.006296277 0.08799999 -0.01018959 0.005081295 0.08799999 -0.01024985 0.005002975 0.08799999 -0.009908378 0.006153464 0.08799999 -0.00992012 0.006254613 0.08799999 -0.009940981 0.006355822 0.08799999 -0.009947776 0.006389081 0.08799999 -0.01017808 0.006902039 0.08799999 -0.01018792 0.006915152 0.08799999 -0.01160246 0.007595539 0.08799999 -0.01163965 0.007593929 0.08799999 -0.01288414 0.006803095 0.08799999 -0.01291739 0.006739437 0.08799999 -0.01294785 0.006681025 0.08799999 -0.0130006 0.00655508 0.08799999 -0.01304119 0.006430327 0.08799999 -0.01282185 0.005097866 0.08799999 -0.0127505 0.005002677 0.08799999 -0.01273953 0.004988014 0.08799999 -0.01264709 0.004884541 0.08799999 -0.01261216 0.004851579 0.08799999 -0.01254552 0.004788637 0.08799999 -0.01245659 0.004718184 0.08799999 -0.0124371 0.004702746 0.08799999 -0.0123226 0.004627287 0.08799999 -0.01228463 0.004606783 0.08799999 -0.01122307 0.004423916 0.08799999 -0.01109415 0.004452407 0.08799999 -0.01108884 0.004453539 0.08799999 -0.010957 0.004494905 0.08799999 -0.0104705 0.004774928 0.08799999 -0.01054364 0.004718542 0.08799999 -0.01057928 0.004691004 0.08799999 -0.01038748 0.004851281 0.08799999 -0.0103681 0.004869103 0.08799999 -0.01027369 0.004971921 0.08799999 -0.01067733 0.007372677 0.08799999 -0.01062774 0.007339954 0.08799999 -0.01056283 0.007297217 0.08799999 -0.01099616 0.007517337 0.08799999 -0.01104766 0.007534861 0.08799999 -0.01177686 0.007575988 0.08799999 -0.01180565 0.00756967 0.08799999 -0.01191115 0.007546365 0.08799999 -0.01200377 0.007517337 0.08799999 -0.01204293 0.007504999 0.08799999 -0.01217895 0.007448911 0.08799999 -0.01195228 0.004465103 0.08799999 -0.01190555 0.00445342 0.08799999 -0.01129555 0.004414498 0.08799999 -0.01136028 0.004406034 0.08799999 -0.009921491 0.005744755 0.08799999 -0.009907901 0.005839645 0.08799999 -0.009901762 0.005948722 0.08799999 -0.009900152 0.005978047 0.08799999 -0.009904146 0.006117343 0.08799999 -0.0102604 0.00701189 0.08799999 -0.01031655 0.007074713 0.08799999 -0.01035284 0.007115364 0.08799999 -0.0122016 0.004561901 0.08799999 -0.01210004 0.004517734 0.08799999 -0.012075 0.004506886 0.08799999 -0.01181858 0.004431784 0.08799999 -0.0117045 0.004413723 0.08799999 -0.01013237 0.005170941 0.08799999 -0.0101158 0.005196869 0.08799999 -0.01005208 0.005318939 0.08799999 -0.01003789 0.005352735 0.08799999 -0.009999334 0.005444824 0.08799999 -0.00996679 0.00554496 0.08799999 -0.009958744 0.005569636 0.08799999 -0.009927392 0.005703628 0.08799999 -0.01131707 0.007589638 0.08799999 -0.01119416 0.007570207 0.08799999 -0.01118135 0.00756818 0.08799999 -0.01168286 0.004410326 0.08799999 -0.01154476 0.00440061 0.08799999 -0.0115 0.004399955 0.08799999 -0.01079833 0.007438063 0.08799999 -0.01080584 0.007441282 0.08799999 -0.01092493 0.007493078 0.08799999 -0.01139754 0.0075953 0.08799999 -0.01145517 0.007599353 0.08799999 -0.0115 0.007599949 0.0782805 -0.01176047 0.007477164 0.0782805 -0.01201301 0.007409512 0.0782805 -0.01224994 0.007299005 0.0782805 -0.01246416 0.00714904 0.0782805 -0.01264905 0.006964147 0.0782805 -0.01279902 0.006749987 0.0782805 -0.01290953 0.006512999 0.0782805 -0.01297718 0.006260454 0.0782805 -0.01299995 0.005999982 0.0782805 -0.01297718 0.00573951 0.0782805 -0.01290953 0.005486965 0.0782805 -0.01279902 0.005249977 0.0782805 -0.01264905 0.005035817 0.0782805 -0.01246416 0.004850924 0.0782805 -0.01224994 0.004700958 0.0782805 -0.01201301 0.004590451 0.0782805 -0.01176047 0.00452274 0.0782805 -0.0115 0.004499971 0.0782805 -0.01123952 0.00452274 0.0782805 -0.01098692 0.004590451 0.0782805 -0.01074999 0.004700958 0.0782805 -0.01053577 0.004850924 0.0782805 -0.01035088 0.005035817 0.0782805 -0.01020091 0.005249977 0.0782805 -0.01009041 0.005486965 0.0782805 -0.01002275 0.00573951 0.0782805 -0.00999999 0.005999982 0.0782805 -0.01002275 0.006260454 0.0782805 -0.01009041 0.006512999 0.0782805 -0.01020091 0.006749987 0.0782805 -0.01035088 0.006964147 0.0782805 -0.01053577 0.00714904 0.0782805 -0.01074999 0.007299005 0.0782805 -0.01098692 0.007409512 0.0782805 -0.01123952 0.007477164 0.0782805 -0.0115 0.007499992 0.08799952 -0.01139807 0.007587313 0.08799952 -0.01160186 0.007587313 0.08799952 -0.01180404 0.007561206 0.08799952 -0.01200115 0.007509529 0.08799952 -0.0121901 0.007433056 0.08799952 -0.01236772 0.00733304 0.08799952 -0.01253104 0.007211089 0.08799952 -0.01267743 0.007069349 0.08799952 -0.0128045 0.006909966 0.08799952 -0.01291018 0.006735682 0.08799952 -0.01299268 0.006549298 0.08799952 -0.01305067 0.006353914 0.08799952 -0.01308321 0.006152689 0.08799952 -0.01308977 0.00594896 0.08799952 -0.01307016 0.005746126 0.08799952 -0.0130248 0.005547404 0.08799952 -0.01295441 0.005356132 0.08799952 -0.01286017 0.005175411 0.08799952 -0.01274353 0.00500828 0.08799952 -0.0126065 0.004857361 0.08799952 -0.01245135 0.004725277 0.08799952 -0.01228052 0.004614055 0.08799952 -0.01209688 0.004525601 0.08799952 -0.01190346 0.004461407 0.08799952 -0.01170337 0.004422426 0.08799952 -0.0115 0.004409372 0.08799952 -0.01129657 0.004422426 0.08799952 -0.01109653 0.004461407 0.08799952 -0.01090306 0.004525601 0.08799952 -0.01071941 0.004614055 0.08799952 -0.01054865 0.004725277 0.08799952 -0.01039344 0.004857361 0.08799952 -0.0102564 0.00500828 0.08799952 -0.01013982 0.005175411 0.08799952 -0.01004552 0.005356132 0.08799952 -0.009975135 0.005547404 0.08799952 -0.009929776 0.005746126 0.08799952 -0.009910225 0.00594896 0.08799952 -0.009916722 0.006152689 0.08799952 -0.009949266 0.006353914 0.08799952 -0.01000726 0.006549298 0.08799952 -0.01008975 0.006735682 0.08799952 -0.01019543 0.006909966 0.08799952 -0.01032251 0.007069349 0.08799952 -0.0104689 0.007211089 0.08799952 -0.01063227 0.00733304 0.08799952 -0.01080983 0.007433056 0.08799952 -0.01099878 0.007509529 0.08799952 -0.01119589 0.007561206 0.08789998 -0.01002395 0.005739748 0.0879094 -0.01001876 0.00576049 0.08789998 -0.01006197 0.005573153 0.0879094 -0.01006156 0.005573034 0.08789998 -0.01009333 0.005487978 0.0879094 -0.01012796 0.005392611 0.08789998 -0.01012837 0.005392789 0.08789998 -0.01020246 0.005250751 0.0879094 -0.01021689 0.005222141 0.08789998 -0.01021724 0.00522238 0.0879094 -0.01032686 0.005064487 0.08789998 -0.01032721 0.005064725 0.08789998 -0.01035231 0.005037069 0.0879094 -0.01045614 0.004922151 0.08789998 -0.01045644 0.004922449 0.08789998 -0.01053774 0.004853248 0.0879094 -0.01060253 0.004797518 0.08789998 -0.01060283 0.004797875 0.08789998 -0.01075047 0.004701733 0.0879094 -0.0107637 0.004692614 0.08789998 -0.01076388 0.004692971 0.0879094 -0.01093691 0.004609167 0.08789998 -0.01093709 0.004609584 0.08789998 -0.01098769 0.004592776 0.0879094 -0.01111936 0.004548609 0.08789998 -0.01111948 0.004549026 0.08789998 -0.01124006 0.004525542 0.0879094 -0.01130807 0.004511833 0.08789998 -0.01130813 0.00451231 0.0879094 -0.0115 0.004499554 0.08789998 -0.0115 0.004499971 0.0879094 -0.01169186 0.004511833 0.08789998 -0.0116918 0.00451231 0.08789998 -0.01175987 0.004525542 0.0879094 -0.01188057 0.004548609 0.08789998 -0.01188045 0.004549026 0.08789998 -0.01201224 0.004592776 0.0879094 -0.01206302 0.004609167 0.08789998 -0.01206284 0.004609584 0.0879094 -0.01223629 0.004692614 0.08789998 -0.01223605 0.004692971 0.0879094 -0.01254379 0.004922151 0.08789998 -0.01246219 0.004853248 0.0879094 -0.0123974 0.004797518 0.08789998 -0.01239717 0.004797875 0.08789998 -0.01224946 0.004701733 0.0879094 -0.01278305 0.005222141 0.08789998 -0.01267272 0.005064725 0.0879094 -0.01267307 0.005064487 0.08789998 -0.01264762 0.005037069 0.08789998 -0.01254349 0.004922449 0.0879094 -0.01287198 0.005392611 0.08789998 -0.01279747 0.005250751 0.08789998 -0.01278269 0.00522238 0.0879094 -0.01293838 0.005573034 0.08789998 -0.01290661 0.005487978 0.08789998 -0.01287162 0.005392789 0.0879094 -0.01299965 0.005951881 0.08789998 -0.01298075 0.00576055 0.0879094 -0.01298117 0.00576049 0.08789998 -0.01297599 0.005739748 0.08789998 -0.01293796 0.005573153 0.0879094 -0.01299351 0.006144046 0.08789998 -0.01299768 0.005999922 0.08789998 -0.01299917 0.005951881 0.0879094 -0.01296281 0.006333827 0.08789998 -0.01297432 0.006259977 0.08789998 -0.01299303 0.006143987 0.0879094 -0.01283025 0.006693959 0.08789998 -0.01290768 0.006518006 0.0879094 -0.0129081 0.006518185 0.08789998 -0.01290917 0.00651288 0.08789998 -0.01296234 0.006333768 0.0879094 -0.01273059 0.006858408 0.08789998 -0.0127967 0.006748557 0.08789998 -0.01282989 0.00669378 0.08789998 -0.01246374 0.007148504 0.08789998 -0.01247233 0.007142126 0.0879094 -0.01247262 0.007142484 0.08789998 -0.01261037 0.007008433 0.0879094 -0.01261073 0.007008731 0.08789998 -0.01264697 0.006962537 0.08789998 -0.01273024 0.00685817 0.08789998 -0.01231825 0.007257103 0.0879094 -0.01231849 0.007257461 0.08789998 -0.01224851 0.007296383 0.0879094 -0.012151 0.007351815 0.08789998 -0.01215082 0.007351398 0.08789998 -0.01201218 0.007407546 0.0879094 -0.01197278 0.007423996 0.08789998 -0.01197266 0.007423579 0.0879094 -0.01178681 0.007472753 0.08789998 -0.01178669 0.007472336 0.0879094 -0.01140385 0.00749731 0.08789998 -0.0115 0.007496893 0.0879094 -0.01159608 0.00749731 0.08789998 -0.01159608 0.007496893 0.08789998 -0.01176023 0.007475733 0.0879094 -0.01102715 0.007423996 0.08789998 -0.01121324 0.007472336 0.0879094 -0.01121312 0.007472753 0.08789998 -0.0112397 0.007475733 0.08789998 -0.01140385 0.007496893 0.0879094 -0.01084893 0.007351815 0.08789998 -0.01098775 0.007407546 0.08789998 -0.01102733 0.007423579 0.0879094 -0.01068145 0.007257461 0.08789998 -0.01075142 0.007296383 0.08789998 -0.01084917 0.007351398 0.0879094 -0.0103892 0.007008731 0.08789998 -0.01052761 0.007142126 0.0879094 -0.01052737 0.007142484 0.08789998 -0.01053619 0.007148504 0.08789998 -0.01068168 0.007257103 0.0879094 -0.01026934 0.006858408 0.08789998 -0.01035296 0.006962537 0.08789998 -0.01038956 0.007008433 0.0879094 -0.01009184 0.006518185 0.08789998 -0.0101701 0.00669378 0.0879094 -0.01016968 0.006693959 0.08789998 -0.0102033 0.006748557 0.08789998 -0.0102697 0.00685817 0.0879094 -0.01003712 0.006333827 0.08789998 -0.01009076 0.00651288 0.08789998 -0.01009225 0.006518006 0.0879094 -0.01000648 0.006144046 0.08789998 -0.01002568 0.006259977 0.08789998 -0.0100376 0.006333768 0.08789998 -0.01001918 0.00576055 0.08789998 -0.01000076 0.005951881 0.0879094 -0.01000028 0.005951881 0.08789998 -0.00999999 0.005999982 0.08789998 -0.0100069 0.006143987 0.08799642 -0.01170122 0.004439294 0.08799642 -0.01189911 0.004477798 0.08799642 -0.0120905 0.004541337 0.08799642 -0.01227217 0.004628837 0.08799642 -0.01244115 0.004738867 0.08799642 -0.01259469 0.00486958 0.08799642 -0.0127303 0.00501883 0.08799642 -0.01284563 0.005184233 0.08799642 -0.01293891 0.005362987 0.08799642 -0.01300853 0.005552232 0.08799642 -0.01305341 0.005748808 0.08799642 -0.01307278 0.005949556 0.08799642 -0.01306629 0.00615108 0.08799642 -0.0130341 0.006350159 0.08799642 -0.01297676 0.006543457 0.08799642 -0.01289516 0.006727814 0.08799642 -0.01279062 0.00690025 0.08799642 -0.01266491 0.007057905 0.08799642 -0.01252001 0.007198214 0.08799642 -0.01235842 0.007318794 0.08799642 -0.01218271 0.007417738 0.08799642 -0.01199585 0.007493436 0.08799642 -0.01180076 0.007544577 0.08799642 -0.01160079 0.007570326 0.08799642 -0.01139914 0.007570326 0.08799642 -0.01119917 0.007544577 0.08799642 -0.01100409 0.007493436 0.08799642 -0.01081722 0.007417738 0.08799642 -0.01064151 0.007318794 0.08799642 -0.01047992 0.007198214 0.08799642 -0.01033508 0.007057905 0.08799642 -0.01020932 0.00690025 0.08799642 -0.01010483 0.006727814 0.08799642 -0.01002317 0.006543457 0.08799642 -0.009965837 0.006350159 0.08799642 -0.00993365 0.00615108 0.08799642 -0.009927153 0.005949556 0.08799642 -0.009946525 0.005748808 0.08799642 -0.009991407 0.005552232 0.08799642 -0.01006102 0.005362987 0.08799642 -0.0101543 0.005184233 0.08799642 -0.0102697 0.00501883 0.08799642 -0.01040524 0.00486958 0.08799642 -0.01055878 0.004738867 0.08799642 -0.01072776 0.004628837 0.08799642 -0.01090943 0.004541337 0.08799642 -0.01110082 0.004477798 0.08799642 -0.01129877 0.004439294 0.08799642 -0.0115 0.00442636 0.08799046 -0.01169914 0.004455327 0.08799046 -0.011895 0.004493474 0.08799046 -0.01208442 0.004556357 0.08799046 -0.01226425 0.004642963 0.08799046 -0.0124315 0.004751861 0.08799046 -0.01258343 0.004881203 0.08799046 -0.0127176 0.005028963 0.08799046 -0.0128318 0.005192637 0.08799046 -0.01292407 0.005369544 0.08799046 -0.01299303 0.005556821 0.08799046 -0.01303744 0.00575143 0.08799046 -0.01305657 0.005950033 0.08799046 -0.01305019 0.00614953 0.08799046 -0.01301836 0.006346523 0.08799046 -0.01296156 0.006537854 0.08799046 -0.0128808 0.006720364 0.08799046 -0.01277732 0.006891012 0.08799046 -0.01265287 0.007046997 0.08799046 -0.01250952 0.007185876 0.08799046 -0.0123496 0.007305204 0.08799046 -0.01217573 0.007403135 0.08799046 -0.01199072 0.007478058 0.08799046 -0.01179766 0.007528662 0.08799046 -0.01159977 0.007554173 0.08799046 -0.01140016 0.007554173 0.08799046 -0.01120227 0.007528662 0.08799046 -0.01100921 0.007478058 0.08799046 -0.01082426 0.007403135 0.08799046 -0.01065033 0.007305204 0.08799046 -0.01049041 0.007185876 0.08799046 -0.01034706 0.007046997 0.08799046 -0.01022261 0.006891012 0.08799046 -0.01011914 0.006720364 0.08799046 -0.01003837 0.006537854 0.08799046 -0.009981572 0.006346523 0.08799046 -0.009949743 0.00614953 0.08799046 -0.009943366 0.005950033 0.08799046 -0.009962499 0.00575143 0.08799046 -0.0100069 0.005556821 0.08799046 -0.01007586 0.005369544 0.08799046 -0.01016813 0.005192637 0.08799046 -0.01028233 0.005028963 0.08799046 -0.0104165 0.004881203 0.08799046 -0.01056843 0.004751861 0.08799046 -0.01073575 0.004642963 0.08799046 -0.01091551 0.004556357 0.08799046 -0.01110494 0.004493474 0.08799046 -0.0113008 0.004455327 0.08799046 -0.0115 0.004442572 0.08798182 -0.01169723 0.004470109 0.08798182 -0.01189124 0.004507899 0.08798182 -0.01207882 0.004570186 0.08798182 -0.01225692 0.004655957 0.08798182 -0.01242256 0.004763782 0.08798182 -0.01257306 0.004891932 0.08798182 -0.01270592 0.005038261 0.08798182 -0.01281905 0.005200326 0.08798182 -0.01291048 0.005375564 0.08798182 -0.01297873 0.005561113 0.08798182 -0.01302272 0.005753815 0.08798182 -0.01304167 0.00595051 0.08798182 -0.01303535 0.006148099 0.08798182 -0.01300382 0.006343185 0.08798182 -0.01294755 0.006532669 0.08798182 -0.01286756 0.006713449 0.08798182 -0.0127651 0.006882488 0.08798182 -0.01264184 0.007036983 0.08798182 -0.01249986 0.007174491 0.08798182 -0.01234143 0.007292747 0.08798182 -0.01216924 0.007389724 0.08798182 -0.01198601 0.007463872 0.08798182 -0.01179486 0.007513999 0.08798182 -0.01159882 0.007539272 0.08798182 -0.01140117 0.007539272 0.08798182 -0.01120513 0.007513999 0.08798182 -0.01101392 0.007463872 0.08798182 -0.0108307 0.007389724 0.08798182 -0.0106585 0.007292747 0.08798182 -0.01050007 0.007174491 0.08798182 -0.01035809 0.007036983 0.08798182 -0.01023483 0.006882488 0.08798182 -0.01013237 0.006713449 0.08798182 -0.01005238 0.006532669 0.08798182 -0.009996116 0.006343185 0.08798182 -0.009964585 0.006148099 0.08798182 -0.009958267 0.00595051 0.08798182 -0.009977221 0.005753815 0.08798182 -0.0100212 0.005561113 0.08798182 -0.01008951 0.005375564 0.08798182 -0.01018089 0.005200326 0.08798182 -0.01029402 0.005038261 0.08798182 -0.01042687 0.004891932 0.08798182 -0.01057738 0.004763782 0.08798182 -0.01074302 0.004655957 0.08798182 -0.01092112 0.004570186 0.08798182 -0.01110869 0.004507899 0.08798182 -0.0113027 0.004470109 0.08798182 -0.0115 0.004457473 0.08797067 -0.01169556 0.004483222 0.08797067 -0.0118879 0.004520714 0.08797067 -0.01207387 0.004582464 0.08797067 -0.01225042 0.00466746 0.08797067 -0.01241463 0.004774391 0.08797067 -0.01256388 0.004901409 0.08797067 -0.01269561 0.005046486 0.08797067 -0.01280772 0.00520718 0.08797067 -0.01289838 0.005380928 0.08797067 -0.01296603 0.005564868 0.08797067 -0.01300966 0.005755901 0.08797067 -0.0130285 0.005950927 0.08797067 -0.01302218 0.006146788 0.08797067 -0.01299095 0.006340265 0.08797067 -0.01293516 0.006528139 0.08797067 -0.01285582 0.00670731 0.08797067 -0.01275426 0.006874918 0.08797067 -0.01263207 0.007028102 0.08797067 -0.01249128 0.007164418 0.08797067 -0.01233422 0.007281661 0.08797067 -0.01216351 0.007377803 0.08797067 -0.01198184 0.007451355 0.08797067 -0.0117923 0.007501065 0.08797067 -0.01159793 0.007526099 0.08797067 -0.01140201 0.007526099 0.08797067 -0.01120764 0.007501065 0.08797067 -0.01101809 0.007451355 0.08797067 -0.01083642 0.007377803 0.08797067 -0.01066571 0.007281661 0.08797067 -0.01050865 0.007164418 0.08797067 -0.01036787 0.007028102 0.08797067 -0.01024568 0.006874918 0.08797067 -0.01014411 0.00670731 0.08797067 -0.01006478 0.006528139 0.08797067 -0.01000905 0.006340265 0.08797067 -0.009977757 0.006146788 0.08797067 -0.009971439 0.005950927 0.08797067 -0.009990274 0.005755901 0.08797067 -0.0100339 0.005564868 0.08797067 -0.01010155 0.005380928 0.08797067 -0.01019221 0.00520718 0.08797067 -0.01030433 0.005046486 0.08797067 -0.01043605 0.004901409 0.08797067 -0.0105853 0.004774391 0.08797067 -0.01074951 0.00466746 0.08797067 -0.01092606 0.004582464 0.08797067 -0.01111203 0.004520714 0.08797067 -0.01130443 0.004483222 0.08797067 -0.0115 0.004470705 0.0879575 -0.01169413 0.004494249 0.0879575 -0.01188504 0.004531443 0.0879575 -0.0120697 0.004592716 0.0879575 -0.01224499 0.004677176 0.0879575 -0.01240801 0.004783272 0.0879575 -0.01255613 0.004909396 0.0879575 -0.01268696 0.0050534 0.0879575 -0.01279824 0.005212962 0.0879575 -0.01288819 0.005385458 0.0879575 -0.01295542 0.005568027 0.0879575 -0.0129987 0.005757689 0.0879575 -0.01301735 0.005951285 0.0879575 -0.01301115 0.006145775 0.0879575 -0.0129801 0.006337821 0.0879575 -0.01292473 0.006524324 0.0879575 -0.01284599 0.006702184 0.0879575 -0.01274514 0.006868541 0.0879575 -0.01262384 0.007020652 0.0879575 -0.01248413 0.007156014 0.0879575 -0.0123282 0.007272362 0.0879575 -0.01215869 0.007367789 0.0879575 -0.01197838 0.007440805 0.0879575 -0.01179021 0.007490158 0.0879575 -0.01159721 0.007515013 0.0879575 -0.01140272 0.007515013 0.0879575 -0.01120978 0.007490158 0.0879575 -0.01102155 0.007440805 0.0879575 -0.01084125 0.007367789 0.0879575 -0.01067173 0.007272362 0.0879575 -0.01051586 0.007156014 0.0879575 -0.01037609 0.007020652 0.0879575 -0.0102548 0.006868541 0.0879575 -0.01015394 0.006702184 0.0879575 -0.01007521 0.006524324 0.0879575 -0.01001983 0.006337821 0.0879575 -0.009988784 0.006145775 0.0879575 -0.009982585 0.005951285 0.0879575 -0.01000124 0.005757689 0.0879575 -0.01004451 0.005568027 0.0879575 -0.01011174 0.005385458 0.0879575 -0.01020169 0.005212962 0.0879575 -0.01031303 0.0050534 0.0879575 -0.0104438 0.004909396 0.0879575 -0.01059192 0.004783272 0.0879575 -0.010755 0.004677176 0.0879575 -0.01093024 0.004592716 0.0879575 -0.01111489 0.004531443 0.0879575 -0.0113058 0.004494249 0.0879575 -0.0115 0.004481792 0.08794254 -0.011693 0.004502832 0.08794254 -0.01188284 0.004539847 0.08794254 -0.01206642 0.004600763 0.08794254 -0.0122407 0.004684686 0.08794254 -0.01240283 0.004790246 0.08794254 -0.01255011 0.004915595 0.08794254 -0.01268017 0.005058825 0.08794254 -0.01279079 0.005217432 0.08794254 -0.01288032 0.005388915 0.08794254 -0.01294708 0.005570471 0.08794254 -0.01299011 0.00575906 0.08794254 -0.01300871 0.005951583 0.08794254 -0.01300251 0.00614494 0.08794254 -0.01297163 0.006335854 0.08794254 -0.01291662 0.006521284 0.08794254 -0.0128383 0.006698191 0.08794254 -0.01273804 0.006863594 0.08794254 -0.0126174 0.007014811 0.08794254 -0.01247847 0.007149398 0.08794254 -0.01232349 0.00726509 0.08794254 -0.01215493 0.007359981 0.08794254 -0.01197564 0.007432579 0.08794254 -0.01178854 0.007481634 0.08794254 -0.01159667 0.00750637 0.08794254 -0.01140326 0.00750637 0.08794254 -0.01121139 0.007481634 0.08794254 -0.01102429 0.007432579 0.08794254 -0.010845 0.007359981 0.08794254 -0.0106765 0.00726509 0.08794254 -0.01052147 0.007149398 0.08794254 -0.01038253 0.007014811 0.08794254 -0.01026189 0.006863594 0.08794254 -0.01016163 0.006698191 0.08794254 -0.01008331 0.006521284 0.08794254 -0.0100283 0.006335854 0.08794254 -0.009997427 0.00614494 0.08794254 -0.009991228 0.005951583 0.08794254 -0.01000982 0.00575906 0.08794254 -0.01005285 0.005570471 0.08794254 -0.01011967 0.005388915 0.08794254 -0.01020914 0.005217432 0.08794254 -0.01031976 0.005058825 0.08794254 -0.01044982 0.004915595 0.08794254 -0.0105971 0.004790246 0.08794254 -0.01075923 0.004684686 0.08794254 -0.01093351 0.004600763 0.08794254 -0.0111171 0.004539847 0.08794254 -0.01130694 0.004502832 0.08794254 -0.0115 0.004490435 0.08792638 -0.01169222 0.004508793 0.08792638 -0.01188135 0.004545629 0.08792638 -0.01206421 0.004606306 0.08792638 -0.01223778 0.004689931 0.08792638 -0.01239925 0.004795014 0.08792638 -0.01254594 0.004919886 0.08792638 -0.01267546 0.00506252 0.08792638 -0.01278573 0.005220532 0.08792638 -0.01287484 0.005391359 0.08792638 -0.01294136 0.005572199 0.08792638 -0.01298427 0.005760014 0.08792638 -0.01300275 0.005951762 0.08792638 -0.01299655 0.006144344 0.08792638 -0.01296579 0.006334543 0.08792638 -0.01291102 0.006519258 0.08792638 -0.01283299 0.006695389 0.08792638 -0.01273316 0.006860196 0.08792638 -0.01261299 0.007010817 0.08792638 -0.01247459 0.007144868 0.08792638 -0.01232022 0.007260084 0.08792638 -0.01215231 0.007354617 0.08792638 -0.01197373 0.007426917 0.08792638 -0.01178741 0.007475793 0.08792638 -0.01159632 0.00750041 0.08792638 -0.01140362 0.00750041 0.08792638 -0.01121258 0.007475793 0.08792638 -0.0110262 0.007426917 0.08792638 -0.01084762 0.007354617 0.08792638 -0.01067972 0.007260084 0.08792638 -0.01052534 0.007144868 0.08792638 -0.01038694 0.007010817 0.08792638 -0.01026678 0.006860196 0.08792638 -0.01016694 0.006695389 0.08792638 -0.01008892 0.006519258 0.08792638 -0.01003414 0.006334543 0.08792638 -0.01000338 0.006144344 0.08792638 -0.009997189 0.005951762 0.08792638 -0.01001572 0.005760014 0.08792638 -0.01005858 0.005572199 0.08792638 -0.0101251 0.005391359 0.08792638 -0.0102142 0.005220532 0.08792638 -0.01032447 0.00506252 0.08792638 -0.01045399 0.004919886 0.08792638 -0.01060068 0.004795014 0.08792638 -0.01076215 0.004689931 0.08792638 -0.01093572 0.004606306 0.08792638 -0.01111859 0.004545629 0.08792638 -0.01130771 0.004508793 0.08792638 -0.0115 0.004496455 0.08792263 0.0115 0.005999982 0.08849996 0.01248478 0.00617361 0.08849996 0.01243966 0.006341993 0.08849996 0.01249998 0.005999982 0.08849996 0.01226603 0.006642758 0.08849996 0.01214277 0.006766021 0.08849996 0.01236599 0.006499946 0.08849996 0.01184201 0.006939649 0.08849996 0.01167362 0.00698477 0.08849996 0.01199996 0.006865978 0.08849996 0.01132631 0.00698477 0.08849996 0.01115792 0.006939649 0.08849996 0.0115 0.006999969 0.08849996 0.01085716 0.006766021 0.08849996 0.0107339 0.006642758 0.08849996 0.01099997 0.006865978 0.08849996 0.01056027 0.006341993 0.08849996 0.01051515 0.00617361 0.08849996 0.01063394 0.006499946 0.08849996 0.01051515 0.005826294 0.08849996 0.01056027 0.00565797 0.08849996 0.01049995 0.005999982 0.08849996 0.0107339 0.005357205 0.08849996 0.01085716 0.005233943 0.08849996 0.01063394 0.005499958 0.08849996 0.01115792 0.005060255 0.08849996 0.01132631 0.005015134 0.08849996 0.01099997 0.005133926 0.08849996 0.01167362 0.005015134 0.08849996 0.01184201 0.005060255 0.08849996 0.0115 0.004999995 0.08849996 0.01214277 0.005233943 0.08849996 0.01226603 0.005357205 0.08849996 0.01199996 0.005133926 0.08849996 0.01243966 0.00565797 0.08849996 0.01248478 0.005826294 0.08849996 0.01236599 0.005499958 0.08849996 0.01092261 0.006999969 0.08849996 0.01207733 0.006999969 0.08849996 0.01265466 0.005999982 0.08849996 0.01207733 0.004999995 0.08849996 0.01034528 0.005999982 0.08849996 0.01092261 0.004999995 0.08999997 0.01092261 0.006999969 0.08999997 0.01034528 0.005999982 0.08999997 0.01207733 0.006999969 0.08999997 0.01265466 0.005999982 0.08999997 0.01207733 0.004999995 0.08999997 0.01092261 0.004999995 0.08999997 0.01253241 0.0037781 0.08999997 0.01274204 0.00388813 0.08999997 0.01102924 0.008404314 0.08999997 0.0107994 0.00834769 0.08999997 0.01057606 0.008269071 0.08999997 0.01036143 0.008169353 0.08999997 0.0132113 0.007753193 0.08999997 0.0130341 0.007910192 0.08999997 0.01294004 0.004017889 0.08999997 0.01312464 0.004166126 0.08999997 0.01329404 0.004331469 0.08999997 0.013915 0.005587518 0.08999997 0.01386392 0.005356311 0.08999997 0.01379078 0.005131185 0.08999997 0.01394355 0.005822479 0.08999997 0.01394927 0.006059169 0.08999997 0.0139321 0.006295263 0.08999997 0.009553253 0.004512429 0.08999997 0.009705901 0.004331469 0.08999997 0.009253859 0.006978392 0.08999997 0.009169876 0.00675708 0.08999997 0.01242387 0.008269071 0.08999997 0.01220053 0.00834769 0.08999997 0.01197069 0.008404314 0.08999997 0.01389223 0.006528615 0.08999997 0.01383006 0.00675708 0.08999997 0.01374614 0.006978392 0.08999997 0.01284259 0.008049309 0.08999997 0.01263856 0.008169353 0.08999997 0.01344668 0.004512429 0.08999997 0.01358115 0.004707276 0.08999997 0.01369619 0.004914164 0.08999997 0.01091367 0.00362116 0.08999997 0.01114594 0.003575682 0.08999997 0.01138162 0.003552854 0.08999997 0.0115 0.003549993 0.08999997 0.01161831 0.003552854 0.08999997 0.01185399 0.003575682 0.08999997 0.01173645 0.008438527 0.08999997 0.0115 0.008449971 0.08999997 0.01126348 0.008438527 0.08999997 0.01364117 0.007190644 0.08999997 0.0135163 0.00739175 0.08999997 0.01337254 0.007579863 0.08999997 0.01025789 0.00388813 0.08999997 0.01046752 0.0037781 0.08999997 0.01068681 0.003688871 0.08999997 0.01208627 0.00362116 0.08999997 0.01231312 0.003688871 0.08999997 0.009875297 0.004166126 0.08999997 0.01005989 0.004017889 0.08999997 0.01015734 0.008049309 0.08999997 0.009965837 0.007910192 0.08999997 0.009788632 0.007753193 0.08999997 0.009107708 0.006528615 0.08999997 0.009067833 0.006295263 0.08999997 0.009050667 0.006059169 0.08999997 0.009056389 0.005822479 0.08999997 0.009084939 0.005587518 0.08999997 0.009136021 0.005356311 0.08999997 0.009209156 0.005131185 0.08999997 0.009303748 0.004914164 0.08999997 0.009418785 0.004707276 0.08999997 0.009627401 0.007579863 0.08999997 0.009483635 0.00739175 0.08999997 0.009358763 0.007190644 0.08999866 0.01138025 0.003524661 0.08999866 0.01114189 0.003547728 0.08999866 0.01090687 0.003593742 0.08999866 0.01067745 0.003662228 0.08999866 0.01045566 0.003752529 0.08999866 0.01024359 0.003863811 0.08999866 0.01004332 0.00399506 0.08999866 0.009856581 0.004144966 0.08999866 0.009685218 0.004312276 0.08999866 0.009530842 0.004495263 0.08999866 0.009394764 0.004692375 0.08999866 0.009278416 0.004901647 0.08999866 0.00918281 0.005121171 0.08999866 0.009108781 0.00534892 0.08999866 0.009057104 0.005582749 0.08999866 0.009028255 0.005820453 0.08999866 0.009022474 0.006059825 0.08999866 0.009039819 0.006298661 0.08999866 0.009080111 0.006534755 0.08999866 0.009143054 0.006765782 0.08999866 0.009227931 0.006989717 0.08999866 0.009334087 0.007204353 0.08999866 0.009460449 0.007407784 0.08999866 0.009605824 0.007598042 0.08999866 0.009768903 0.007773399 0.08999866 0.009948134 0.007932186 0.08999866 0.01014184 0.008072912 0.08999866 0.01034826 0.008194327 0.08999866 0.01056545 0.008295238 0.08999866 0.01079136 0.00837475 0.08999866 0.01102381 0.00843203 0.08999866 0.0112608 0.00846666 0.08999866 0.0115 0.008478224 0.08999866 0.01173913 0.00846666 0.08999866 0.01197612 0.00843203 0.08999866 0.01220864 0.00837475 0.08999866 0.01243448 0.008295238 0.08999866 0.01265168 0.008194327 0.08999866 0.01285809 0.008072912 0.08999866 0.0130518 0.007932186 0.08999866 0.01323103 0.007773399 0.08999866 0.01339411 0.007598042 0.08999866 0.01353949 0.007407784 0.08999866 0.01366585 0.007204353 0.08999866 0.01377201 0.006989717 0.08999866 0.01385688 0.006765782 0.08999866 0.01391983 0.006534755 0.08999866 0.01396012 0.006298661 0.08999866 0.01397746 0.006059825 0.08999866 0.01397168 0.005820453 0.08999866 0.01394283 0.005582749 0.08999866 0.01389116 0.00534892 0.08999866 0.01381719 0.005121171 0.08999866 0.01372152 0.004901647 0.08999866 0.01360517 0.004692375 0.08999866 0.01346909 0.004495263 0.08999866 0.01331472 0.004312276 0.08999866 0.01314336 0.004144966 0.08999866 0.01295661 0.00399506 0.08999866 0.01275634 0.003863811 0.08999866 0.01254433 0.003752529 0.08999866 0.01232254 0.003662228 0.08999866 0.01209306 0.003593742 0.08999866 0.01185804 0.003547728 0.08999866 0.01161968 0.003524661 0.08969998 0.01424998 0.005999982 0.08972823 0.01424783 0.006066381 0.08969998 0.01424276 0.005800783 0.08972823 0.01424139 0.005800843 0.08969998 0.01422148 0.005625844 0.08972823 0.01420938 0.005537211 0.08969998 0.0142107 0.005536973 0.08972823 0.0141521 0.005277872 0.08969998 0.01415336 0.005277514 0.08972823 0.01396393 0.004781782 0.08969998 0.01401937 0.004905641 0.08972823 0.01407003 0.005025267 0.08969998 0.01407128 0.00502479 0.08969998 0.01414716 0.005258321 0.08969998 0.01363104 0.004266262 0.08969998 0.01368504 0.004330277 0.08972823 0.01368403 0.004331111 0.08969998 0.01383602 0.004548966 0.08972823 0.01383489 0.004549682 0.08969998 0.01384866 0.004571676 0.08969998 0.01396512 0.004781186 0.08969998 0.01351374 0.004127204 0.08972823 0.01351273 0.004128098 0.08969998 0.01337522 0.003991961 0.08972823 0.01332265 0.003942549 0.08969998 0.01332354 0.003941595 0.08972823 0.01311558 0.003776252 0.08969998 0.01311635 0.003775179 0.08972823 0.01265823 0.003507256 0.08969998 0.01276367 0.003561079 0.08972823 0.01289343 0.003630697 0.08969998 0.01289409 0.003629565 0.08969998 0.013085 0.003754615 0.08972823 0.01215779 0.003331184 0.08969998 0.01241272 0.003405869 0.08972823 0.0124123 0.00340712 0.08969998 0.01242071 0.003409147 0.08969998 0.01265883 0.003506064 0.08972823 0.01189714 0.003280162 0.08969998 0.01205891 0.003310441 0.08969998 0.01215809 0.003329873 0.08969998 0.01131248 0.003258466 0.08969998 0.01136714 0.003253161 0.08972823 0.0113672 0.003254532 0.08969998 0.01163285 0.003253161 0.08972823 0.0116328 0.003254532 0.08969998 0.01168745 0.003258466 0.08969998 0.01189732 0.003278851 0.08969998 0.01110261 0.003278851 0.08972823 0.01110279 0.003280162 0.08969998 0.01094102 0.003310441 0.08972823 0.0108422 0.003331184 0.08969998 0.01084184 0.003329873 0.08972823 0.01058769 0.00340712 0.08969998 0.01058721 0.003405869 0.08969998 0.01057922 0.003409147 0.08972823 0.0103417 0.003507256 0.08969998 0.0103411 0.003506064 0.08969998 0.01023626 0.003561079 0.08972823 0.0101065 0.003630697 0.08969998 0.01010584 0.003629565 0.08969998 0.009914934 0.003754615 0.08972823 0.009884357 0.003776252 0.08969998 0.009883582 0.003775179 0.08972823 0.00967729 0.003942549 0.08969998 0.009676396 0.003941595 0.08969998 0.009151279 0.004571676 0.08969998 0.009163916 0.004548966 0.08972823 0.009165048 0.004549682 0.08969998 0.009314894 0.004330277 0.08972823 0.009315967 0.004331111 0.08969998 0.009368896 0.004266262 0.08972823 0.009487211 0.004128098 0.08969998 0.009486258 0.004127204 0.08969998 0.009624719 0.003991961 0.08969998 0.009034812 0.004781186 0.08972823 0.009036004 0.004781782 0.08969998 0.008980572 0.004905641 0.08972823 0.008929908 0.005025267 0.08969998 0.008928656 0.00502479 0.08969998 0.008852779 0.005258321 0.08972823 0.008847832 0.005277872 0.08969998 0.00884658 0.005277514 0.08972823 0.008790552 0.005537211 0.08969998 0.008789241 0.005536973 0.08969998 0.008778452 0.005625844 0.08972823 0.008758544 0.005800843 0.08969998 0.008757174 0.005800783 0.08969998 0.008752405 0.006000041 0.08972823 0.008752107 0.006066381 0.08969998 0.008750796 0.006066441 0.08972823 0.008771359 0.006331264 0.08969998 0.008770048 0.006331443 0.08972823 0.00888586 0.006849348 0.08969998 0.008854985 0.006741106 0.08972823 0.008816063 0.006593108 0.08969998 0.008814752 0.006593406 0.08969998 0.00877732 0.00637412 0.08972823 0.009097695 0.007335782 0.08969998 0.008978784 0.007098197 0.08972823 0.008980035 0.007097721 0.08969998 0.00897777 0.007095515 0.08969998 0.008884549 0.006849765 0.08972823 0.009237885 0.007561385 0.08969998 0.009152948 0.007427215 0.08969998 0.009096562 0.007336437 0.08969998 0.009624421 0.008008062 0.08969998 0.009579062 0.007967889 0.08972823 0.009580016 0.007966935 0.08969998 0.009398102 0.00777328 0.08972823 0.009399116 0.007772445 0.08969998 0.0093683 0.007734298 0.08969998 0.009236752 0.00756216 0.08969998 0.009777963 0.00814408 0.08972823 0.009778797 0.008143067 0.08969998 0.009915828 0.008244276 0.08972823 0.009993672 0.008299171 0.08969998 0.009992957 0.008300244 0.08972823 0.01022261 0.008433818 0.08969998 0.01022195 0.008434951 0.08969998 0.01023507 0.00844103 0.08972823 0.01046347 0.008545696 0.08969998 0.01046293 0.008546948 0.08969998 0.01058012 0.008588194 0.08972823 0.01071399 0.008633852 0.08969998 0.01071363 0.008635163 0.08969998 0.01094079 0.008691132 0.08972823 0.0109719 0.00869745 0.08969998 0.0109716 0.008698761 0.08972823 0.0112347 0.008735835 0.08969998 0.01123458 0.008737146 0.08969998 0.01205915 0.008691132 0.08969998 0.01202833 0.008698761 0.08972823 0.01202803 0.00869745 0.08969998 0.01176536 0.008737146 0.08972823 0.01176524 0.008735835 0.08969998 0.01168751 0.008740901 0.08972823 0.0115 0.00874865 0.08969998 0.0115 0.008749961 0.08969998 0.01131242 0.008740901 0.08969998 0.0122863 0.008635163 0.08972823 0.01228594 0.008633852 0.08969998 0.01241981 0.008588194 0.08972823 0.01253646 0.008545696 0.08969998 0.012537 0.008546948 0.08969998 0.01276487 0.00844103 0.08972823 0.01277732 0.008433818 0.08969998 0.01277798 0.008434951 0.08972823 0.01300626 0.008299171 0.08969998 0.01300698 0.008300244 0.08969998 0.01308411 0.008244276 0.08972823 0.01322114 0.008143067 0.08969998 0.01322197 0.00814408 0.08969998 0.01337552 0.008008062 0.08972823 0.01341992 0.007966935 0.08969998 0.01342087 0.007967889 0.08972823 0.01360082 0.007772445 0.08969998 0.01360183 0.00777328 0.08972823 0.0140199 0.007097721 0.08969998 0.01390337 0.007336437 0.08972823 0.01390224 0.007335782 0.08969998 0.01384699 0.007427215 0.08972823 0.01376205 0.007561385 0.08969998 0.01376318 0.00756216 0.08969998 0.01363164 0.007734298 0.08972823 0.01411414 0.006849348 0.08969998 0.01402217 0.007095515 0.08969998 0.01402115 0.007098197 0.08972823 0.01418387 0.006593108 0.08969998 0.01414495 0.006741106 0.08969998 0.01411539 0.006849765 0.08969998 0.01424914 0.006066441 0.08969998 0.01422995 0.006331443 0.08972823 0.01422858 0.006331264 0.08969998 0.01422262 0.00637412 0.08969998 0.01418519 0.006593406 0.08977913 0.01123559 0.008726537 0.08977913 0.01097369 0.00868833 0.08977913 0.01071667 0.00862497 0.08977913 0.01046699 0.008537113 0.08977913 0.0102269 0.008425533 0.08977913 0.009998738 0.008291363 0.08977913 0.009784638 0.008135795 0.08977913 0.009586513 0.007960259 0.08977913 0.009406208 0.007766425 0.08977913 0.009245514 0.00755608 0.08977913 0.009105861 0.007331252 0.08977913 0.008988559 0.007093966 0.08977913 0.008894681 0.006846487 0.08977913 0.008825123 0.006591081 0.08977913 0.008780598 0.006330192 0.08977913 0.008761405 0.006066143 0.08977913 0.008767783 0.005801558 0.08977913 0.008799731 0.005538761 0.08977913 0.008856832 0.005280315 0.08977913 0.00893861 0.005028605 0.08977913 0.009044349 0.004785895 0.08977913 0.009172976 0.004554569 0.08977913 0.009323358 0.004336714 0.08977913 0.009494006 0.004134416 0.08977913 0.00968343 0.003949522 0.08977913 0.009889841 0.003783762 0.08977913 0.01011121 0.003638744 0.08977913 0.01034557 0.00351572 0.08977913 0.01059073 0.003415882 0.08977913 0.0108444 0.003340184 0.08977913 0.01110416 0.003289341 0.08977913 0.01136761 0.003263831 0.08977913 0.01163232 0.003263831 0.08977913 0.01189577 0.003289341 0.08977913 0.01215553 0.003340184 0.08977913 0.01240921 0.003415882 0.08977913 0.01265436 0.00351572 0.08977913 0.01288872 0.003638744 0.08977913 0.01311016 0.003783762 0.08977913 0.01331651 0.003949522 0.08977913 0.01350593 0.004134416 0.08977913 0.01367664 0.004336714 0.08977913 0.01382696 0.004554569 0.08977913 0.01395559 0.004785895 0.08977913 0.01406133 0.005028605 0.08977913 0.0141431 0.005280315 0.08977913 0.01420027 0.005538761 0.08977913 0.01423215 0.005801558 0.08977913 0.01423853 0.006066143 0.08977913 0.01421934 0.006330192 0.08977913 0.01417481 0.006591081 0.08977913 0.01410526 0.006846487 0.08977913 0.01401138 0.007093966 0.08977913 0.01389408 0.007331252 0.08977913 0.01375442 0.00755608 0.08977913 0.01359373 0.007766425 0.08977913 0.01341342 0.007960259 0.08977913 0.0132153 0.008135795 0.08977913 0.0130012 0.008291363 0.08977913 0.01277303 0.008425533 0.08977913 0.01253294 0.008537113 0.08977913 0.01228326 0.00862497 0.08977913 0.0120263 0.00868833 0.08977913 0.01176434 0.008726537 0.08977913 0.0115 0.008739352 0.08982771 0.01123732 0.008708715 0.08982771 0.01097708 0.008670747 0.08982771 0.0107218 0.008607804 0.08982771 0.01047372 0.008520483 0.08982771 0.01023524 0.008409678 0.08982771 0.01000857 0.008276402 0.08982771 0.009795844 0.008121788 0.08982771 0.00959903 0.007947444 0.08982771 0.009419918 0.007754862 0.08982771 0.009260237 0.007545948 0.08982771 0.009121537 0.007322549 0.08982771 0.00900495 0.007086813 0.08982771 0.008911728 0.006840944 0.08982771 0.008842647 0.006587207 0.08982771 0.00879836 0.006327986 0.08982771 0.008779346 0.006065726 0.08982771 0.008785665 0.005802869 0.08982771 0.008817374 0.005541801 0.08982771 0.008874118 0.005285024 0.08982771 0.008955359 0.005034923 0.08982771 0.009060382 0.004793822 0.08982771 0.009188175 0.004564046 0.08982771 0.009337544 0.004347622 0.08982771 0.009507119 0.004146635 0.08982771 0.009695291 0.003962934 0.08982771 0.009900331 0.003798246 0.08982771 0.01012033 0.003654181 0.08982771 0.01035314 0.003531932 0.08982771 0.01059669 0.00343281 0.08982771 0.0108487 0.003357589 0.08982771 0.01110672 0.003307104 0.08982771 0.01136851 0.003281712 0.08982771 0.01163142 0.003281712 0.08982771 0.01189321 0.003307104 0.08982771 0.01215124 0.003357589 0.08982771 0.01240324 0.00343281 0.08982771 0.01264679 0.003531932 0.08982771 0.01287966 0.003654181 0.08982771 0.01309961 0.003798246 0.08982771 0.01330465 0.003962934 0.08982771 0.01349282 0.004146635 0.08982771 0.01366239 0.004347622 0.08982771 0.01381176 0.004564046 0.08982771 0.01393955 0.004793822 0.08982771 0.01404458 0.005034923 0.08982771 0.01412582 0.005285024 0.08982771 0.01418256 0.005541801 0.08982771 0.01421427 0.005802869 0.08982771 0.01422065 0.006065726 0.08982771 0.01420158 0.006327986 0.08982771 0.01415729 0.006587207 0.08982771 0.01408821 0.006840944 0.08982771 0.01399499 0.007086813 0.08982771 0.0138784 0.007322549 0.08982771 0.0137397 0.007545948 0.08982771 0.01358002 0.007754862 0.08982771 0.01340091 0.007947444 0.08982771 0.01320409 0.008121788 0.08982771 0.01299136 0.008276402 0.08982771 0.01276469 0.008409678 0.08982771 0.01252621 0.008520483 0.08982771 0.01227813 0.008607804 0.08982771 0.01202285 0.008670747 0.08982771 0.01176261 0.008708715 0.08982771 0.0115 0.008721411 0.08987247 0.01123982 0.008682847 0.08987247 0.01098209 0.008645176 0.08987247 0.01072925 0.00858289 0.08987247 0.01048356 0.008496403 0.08987247 0.01024734 0.008386671 0.08987247 0.01002281 0.008254647 0.08987247 0.009812116 0.008101522 0.08987247 0.009617149 0.007928848 0.08987247 0.009439826 0.007738113 0.08987247 0.009281635 0.007531166 0.08987247 0.009144246 0.007309913 0.08987247 0.009028792 0.007076442 0.08987247 0.008936464 0.006832897 0.08987247 0.008868038 0.006581604 0.08987247 0.008824169 0.006324887 0.08987247 0.008805334 0.00606513 0.08987247 0.008811593 0.005804717 0.08987247 0.008843004 0.005546152 0.08987247 0.008899211 0.005291879 0.08987247 0.008979678 0.005044162 0.08987247 0.009083688 0.004805386 0.08987247 0.009210288 0.004577755 0.08987247 0.009358227 0.004363417 0.08987247 0.009526193 0.004164338 0.08987247 0.009712576 0.003982424 0.08987247 0.009915649 0.003819286 0.08987247 0.0101335 0.003676593 0.08987247 0.01036411 0.003555536 0.08987247 0.01060533 0.003457307 0.08987247 0.01085489 0.003382861 0.08987247 0.01111048 0.003332793 0.08987247 0.01136976 0.0033077 0.08987247 0.01163017 0.0033077 0.08987247 0.01188945 0.003332793 0.08987247 0.01214504 0.003382861 0.08987247 0.0123946 0.003457307 0.08987247 0.01263582 0.003555536 0.08987247 0.01286643 0.003676593 0.08987247 0.01308429 0.003819286 0.08987247 0.01328736 0.003982424 0.08987247 0.01347374 0.004164338 0.08987247 0.01364171 0.004363417 0.08987247 0.01378965 0.004577755 0.08987247 0.01391625 0.004805386 0.08987247 0.01402026 0.005044162 0.08987247 0.01410073 0.005291879 0.08987247 0.01415693 0.005546152 0.08987247 0.01418834 0.005804717 0.08987247 0.0141946 0.00606513 0.08987247 0.01417577 0.006324887 0.08987247 0.0141319 0.006581604 0.08987247 0.01406347 0.006832897 0.08987247 0.01397114 0.007076442 0.08987247 0.01385569 0.007309913 0.08987247 0.0137183 0.007531166 0.08987247 0.01356017 0.007738113 0.08987247 0.01338279 0.007928848 0.08987247 0.01318782 0.008101522 0.08987247 0.01297712 0.008254647 0.08987247 0.01275259 0.008386671 0.08987247 0.01251643 0.008496403 0.08987247 0.01227074 0.00858289 0.08987247 0.01201784 0.008645176 0.08987247 0.01176011 0.008682847 0.08987247 0.0115 0.008695423 0.08991211 0.01124304 0.008649647 0.08991211 0.01098853 0.008612513 0.08991211 0.01073873 0.008550941 0.08991211 0.01049607 0.008465588 0.08991211 0.01026284 0.008357167 0.08991211 0.01004111 0.008226752 0.08991211 0.009832978 0.008075594 0.08991211 0.009640455 0.007905006 0.08991211 0.009465277 0.007716655 0.08991211 0.009309053 0.007512211 0.08991211 0.009173333 0.007293701 0.08991211 0.009059369 0.00706315 0.08991211 0.008968114 0.006822586 0.08991211 0.008900582 0.006574392 0.08991211 0.00885725 0.006320834 0.08991211 0.008838593 0.006064295 0.08991211 0.008844852 0.005807161 0.08991211 0.008875846 0.005551755 0.08991211 0.008931338 0.005300581 0.08991211 0.009010851 0.005055963 0.08991211 0.00911355 0.004820108 0.08991211 0.0092386 0.004595339 0.08991211 0.009384691 0.004383623 0.08991211 0.009550571 0.004186987 0.08991211 0.00973463 0.004007339 0.08991211 0.0099352 0.003846287 0.08991211 0.01015037 0.003705322 0.08991211 0.01037812 0.003585755 0.08991211 0.01061642 0.003488779 0.08991211 0.01086288 0.003415167 0.08991211 0.01111531 0.003365755 0.08991211 0.01137137 0.003340959 0.08991211 0.01162856 0.003340959 0.08991211 0.01188462 0.003365755 0.08991211 0.01213705 0.003415167 0.08991211 0.01238358 0.003488779 0.08991211 0.01262181 0.003585755 0.08991211 0.01284956 0.003705322 0.08991211 0.01306474 0.003846287 0.08991211 0.01326531 0.004007339 0.08991211 0.01344937 0.004186987 0.08991211 0.01361525 0.004383623 0.08991211 0.01376134 0.004595339 0.08991211 0.01388639 0.004820108 0.08991211 0.01398909 0.005055963 0.08991211 0.0140686 0.005300581 0.08991211 0.01412409 0.005551755 0.08991211 0.01415508 0.005807161 0.08991211 0.01416134 0.006064295 0.08991211 0.01414269 0.006320834 0.08991211 0.01409941 0.006574392 0.08991211 0.01403182 0.006822586 0.08991211 0.01394057 0.00706315 0.08991211 0.0138266 0.007293701 0.08991211 0.01369088 0.007512211 0.08991211 0.01353466 0.007716655 0.08991211 0.01335948 0.007905006 0.08991211 0.01316696 0.008075594 0.08991211 0.01295888 0.008226752 0.08991211 0.01273715 0.008357167 0.08991211 0.01250386 0.008465588 0.08991211 0.01226121 0.008550941 0.08991211 0.01201146 0.008612513 0.08991211 0.01175689 0.008649647 0.08991211 0.0115 0.008662104 0.08994543 0.01124686 0.008610248 0.08994543 0.0109961 0.008573591 0.08994543 0.01075005 0.008512973 0.08994543 0.01051104 0.008428871 0.08994543 0.01028126 0.00832206 0.08994543 0.01006281 0.008193612 0.08994543 0.009857773 0.00804466 0.08994543 0.009668111 0.007876634 0.08994543 0.009495556 0.007691085 0.08994543 0.009341716 0.00748974 0.08994543 0.009207963 0.007274448 0.08994543 0.009095668 0.007047295 0.08994543 0.009005844 0.006810367 0.08994543 0.008939266 0.006565868 0.08994543 0.008896589 0.006316065 0.08994543 0.008878231 0.006063342 0.08994543 0.00888437 0.005810022 0.08994543 0.008914887 0.005558431 0.08994543 0.008969604 0.005311012 0.08994543 0.009047865 0.00507003 0.08994543 0.009149074 0.004837691 0.08994543 0.009272217 0.00461626 0.08994543 0.009416162 0.004407703 0.08994543 0.009579598 0.004213988 0.08994543 0.009760916 0.004037022 0.08994543 0.009958505 0.003878295 0.08994543 0.01017045 0.003739476 0.08994543 0.01039487 0.003621697 0.08994543 0.01062953 0.003526151 0.08994543 0.01087236 0.003453671 0.08994543 0.01112103 0.003404974 0.08994543 0.01137328 0.003380537 0.08994543 0.01162666 0.003380537 0.08994543 0.0118789 0.003404974 0.08994543 0.01212757 0.003453671 0.08994543 0.0123704 0.003526151 0.08994543 0.01260507 0.003621697 0.08994543 0.01282948 0.003739476 0.08994543 0.01304143 0.003878295 0.08994543 0.01323902 0.004037022 0.08994543 0.01342034 0.004213988 0.08994543 0.01358377 0.004407703 0.08994543 0.01372772 0.00461626 0.08994543 0.01385086 0.004837691 0.08994543 0.01395207 0.00507003 0.08994543 0.01403033 0.005311012 0.08994543 0.01408505 0.005558431 0.08994543 0.01411557 0.005810022 0.08994543 0.01412171 0.006063342 0.08994543 0.01410335 0.006316065 0.08994543 0.01406067 0.006565868 0.08994543 0.01399409 0.006810367 0.08994543 0.01390427 0.007047295 0.08994543 0.01379197 0.007274448 0.08994543 0.01365822 0.00748974 0.08994543 0.01350438 0.007691085 0.08994543 0.01333183 0.007876634 0.08994543 0.01314216 0.00804466 0.08994543 0.01293712 0.008193612 0.08994543 0.01271873 0.00832206 0.08994543 0.0124889 0.008428871 0.08994543 0.01224988 0.008512973 0.08994543 0.01200383 0.008573591 0.08994543 0.01175308 0.008610248 0.08994543 0.0115 0.008622467 0.08997142 0.01125121 0.008565664 0.08997142 0.01100474 0.008529663 0.08997142 0.01076287 0.008470058 0.08997142 0.0105279 0.008387386 0.08997142 0.01030206 0.008282423 0.08997142 0.01008737 0.00815618 0.08997142 0.009885847 0.008009791 0.08997142 0.009699404 0.007844567 0.08997142 0.009529769 0.007662177 0.08997142 0.009378552 0.007464289 0.08997142 0.009247124 0.007252693 0.08997142 0.009136736 0.007029414 0.08997142 0.009048402 0.006796538 0.08997142 0.008982956 0.006556212 0.08997142 0.008941054 0.006310701 0.08997142 0.008922994 0.006062269 0.08997142 0.008929014 0.005813241 0.08997142 0.008959054 0.005566 0.08997142 0.009012758 0.005322754 0.08997142 0.009089767 0.005085885 0.08997142 0.009189248 0.00485754 0.08997142 0.009310245 0.004639863 0.08997142 0.009451746 0.004434883 0.08997142 0.009612381 0.004244506 0.08997142 0.009790599 0.00407052 0.08997142 0.009984791 0.003914535 0.08997142 0.01019316 0.00377804 0.08997142 0.0104137 0.003662288 0.08997142 0.01064437 0.003568351 0.08997142 0.01088309 0.003497123 0.08997142 0.01112753 0.003449261 0.08997142 0.01137542 0.00342524 0.08997142 0.01162451 0.00342524 0.08997142 0.01187241 0.003449261 0.08997142 0.01211684 0.003497123 0.08997142 0.01235556 0.003568351 0.08997142 0.01258623 0.003662288 0.08997142 0.01280677 0.00377804 0.08997142 0.01301515 0.003914535 0.08997142 0.01320934 0.00407052 0.08997142 0.01338756 0.004244506 0.08997142 0.01354819 0.004434883 0.08997142 0.01368969 0.004639863 0.08997142 0.01381075 0.00485754 0.08997142 0.01391017 0.005085885 0.08997142 0.01398718 0.005322754 0.08997142 0.01404088 0.005566 0.08997142 0.01407092 0.005813241 0.08997142 0.01407694 0.006062269 0.08997142 0.01405888 0.006310701 0.08997142 0.01401698 0.006556212 0.08997142 0.01395153 0.006796538 0.08997142 0.0138632 0.007029414 0.08997142 0.01375281 0.007252693 0.08997142 0.01362138 0.007464289 0.08997142 0.01347017 0.007662177 0.08997142 0.01330053 0.007844567 0.08997142 0.01311409 0.008009791 0.08997142 0.01291263 0.00815618 0.08997142 0.01269793 0.008282423 0.08997142 0.01247203 0.008387386 0.08997142 0.01223707 0.008470058 0.08997142 0.01199525 0.008529663 0.08997142 0.01174879 0.008565664 0.08997142 0.0115 0.008577704 0.08998936 0.01125586 0.008517324 0.08998936 0.01101404 0.008482038 0.08998936 0.01077675 0.008423507 0.08998936 0.01054626 0.008342444 0.08998936 0.01032459 0.008239448 0.08998936 0.01011395 0.00811553 0.08998936 0.009916245 0.007971882 0.08998936 0.009733319 0.007809817 0.08998936 0.009566903 0.007630884 0.08998936 0.009418487 0.007436692 0.08998936 0.009289562 0.007229089 0.08998936 0.009181261 0.007010042 0.08998936 0.009094595 0.006781518 0.08998936 0.009030401 0.006545722 0.08998936 0.008989274 0.0063048 0.08998936 0.008971571 0.006061077 0.08998936 0.008977472 0.005816757 0.08998936 0.009006917 0.005574166 0.08998936 0.009059667 0.005335569 0.08998936 0.009135186 0.005103111 0.08998936 0.009232759 0.004879057 0.08998936 0.009351551 0.004665493 0.08998936 0.00949037 0.004464387 0.08998936 0.009647965 0.004277586 0.08998936 0.009822845 0.004106879 0.08998936 0.01001334 0.003953814 0.08998936 0.01021778 0.003819882 0.08998936 0.01043421 0.003706336 0.08998936 0.01066052 0.003614187 0.08998936 0.01089471 0.00354433 0.08998936 0.01113456 0.003497362 0.08998936 0.01137781 0.003473758 0.08998936 0.01162219 0.003473758 0.08998936 0.01186543 0.003497362 0.08998936 0.01210522 0.00354433 0.08998936 0.01233941 0.003614187 0.08998936 0.01256579 0.003706336 0.08998936 0.01278215 0.003819882 0.08998936 0.0129866 0.003953814 0.08998936 0.01317709 0.004106879 0.08998936 0.01335197 0.004277586 0.08998936 0.01350957 0.004464387 0.08998936 0.01364839 0.004665493 0.08998936 0.01376718 0.004879057 0.08998936 0.01386475 0.005103111 0.08998936 0.01394027 0.005335569 0.08998936 0.01399302 0.005574166 0.08998936 0.01402246 0.005816757 0.08998936 0.01402837 0.006061077 0.08998936 0.01401066 0.0063048 0.08998936 0.01396954 0.006545722 0.08998936 0.01390534 0.006781518 0.08998936 0.01381868 0.007010042 0.08998936 0.01371037 0.007229089 0.08998936 0.01358145 0.007436692 0.08998936 0.01343303 0.007630884 0.08998936 0.01326662 0.007809817 0.08998936 0.01308369 0.007971882 0.08998936 0.01288598 0.00811553 0.08998936 0.01267534 0.008239448 0.08998936 0.01245373 0.008342444 0.08998936 0.01222318 0.008423507 0.08998936 0.01198589 0.008482038 0.08998936 0.01174408 0.008517324 0.08998936 0.0115 0.008529126 0.08799999 0.01422435 0.005625486 0.08799999 0.01424998 0.005999982 0.08799999 0.01414799 0.005258023 0.08799999 0.01402229 0.004904389 0.08799999 0.01384961 0.004571139 0.08799999 0.01363319 0.004264473 0.08799999 0.01337701 0.003990173 0.08799999 0.01308584 0.003753304 0.08799999 0.01276516 0.003558278 0.08799999 0.01242089 0.00340873 0.08799999 0.01205945 0.003307461 0.08799999 0.01168763 0.00325638 0.08799999 0.0113123 0.00325638 0.08799999 0.01094049 0.003307461 0.08799999 0.01057904 0.00340873 0.08799999 0.01023477 0.003558278 0.08799999 0.0099141 0.003753304 0.08799999 0.009622931 0.003990173 0.08799999 0.00936675 0.004264473 0.08799999 0.009150326 0.004571139 0.08799999 0.008977651 0.004904389 0.08799999 0.008851945 0.005258023 0.08799999 0.008775591 0.005625486 0.08799999 0.008749961 0.005999982 0.08799999 0.008775591 0.006374418 0.08799999 0.008851945 0.00674194 0.08799999 0.008977651 0.007095575 0.08799999 0.009150326 0.007428824 0.08799999 0.00936675 0.00773549 0.08799999 0.009622931 0.008009791 0.08799999 0.0099141 0.00824666 0.08799999 0.01023477 0.008441627 0.08799999 0.01057904 0.008591175 0.08799999 0.01094049 0.008692443 0.08799999 0.0113123 0.008743584 0.08799999 0.01168763 0.008743584 0.08799999 0.01205945 0.008692443 0.08799999 0.01242089 0.008591175 0.08799999 0.01276516 0.008441627 0.08799999 0.01308584 0.00824666 0.08799999 0.01337701 0.008009791 0.08799999 0.01363319 0.00773549 0.08799999 0.01384961 0.007428824 0.08799999 0.01402229 0.007095575 0.08799999 0.01414799 0.00674194 0.08799999 0.01422435 0.006374418 0.078 0.01028048 0.005999982 0.078 0.01029902 0.006211757 0.078 0.01270097 0.005788207 0.078 0.01264595 0.006417036 0.078 0.01270097 0.006211757 0.078 0.01271945 0.005999982 0.078 0.01255607 0.005390226 0.078 0.01243418 0.005216062 0.078 0.01029902 0.005788207 0.078 0.01035404 0.006417036 0.078 0.01044386 0.006609737 0.078 0.01056575 0.006783843 0.078 0.01108288 0.007145941 0.078 0.01128822 0.007200956 0.078 0.01210969 0.007056117 0.078 0.01228386 0.005065798 0.078 0.01210969 0.004943847 0.078 0.01191705 0.004854023 0.078 0.01171171 0.004799008 0.078 0.0115 0.004780471 0.078 0.01128822 0.004799008 0.078 0.01243418 0.006783843 0.078 0.01255607 0.006609737 0.078 0.01089024 0.007056117 0.078 0.01071608 0.006934165 0.078 0.01264595 0.005582869 0.078 0.01108288 0.004854023 0.078 0.01089024 0.004943847 0.078 0.01071608 0.005065798 0.078 0.01191705 0.007145941 0.078 0.0115 0.007219493 0.078 0.01171171 0.007200956 0.078 0.01228386 0.006934165 0.078 0.01056575 0.005216062 0.078 0.01044386 0.005390226 0.078 0.01035404 0.005582869 0.08799999 0.01228487 0.004606366 0.08799999 0.01230514 0.004616975 0.08799999 0.009900152 0.006021916 0.08799999 0.009902238 0.005948722 0.08799999 0.01289427 0.006785392 0.08799999 0.01291739 0.006739437 0.08799999 0.01295924 0.006656289 0.08799999 0.009904146 0.005882561 0.08799999 0.00992012 0.005745351 0.08799999 0.009947776 0.005610883 0.08799999 0.009967446 0.005545139 0.08799999 0.009987235 0.00547862 0.08799999 0.01003724 0.005352437 0.08799999 0.0100407 0.005343616 0.08799999 0.01010566 0.005214571 0.08799999 0.01013267 0.00517112 0.08799999 0.009907484 0.006153583 0.08799999 0.009907901 0.006160318 0.08799999 0.0120998 0.004518389 0.08799999 0.01217895 0.004551053 0.08799999 0.01300048 0.006552159 0.08799999 0.0130127 0.006521284 0.08799999 0.01254552 0.007211327 0.08799999 0.01253694 0.007218062 0.08799999 0.01080602 0.007441043 0.08799999 0.0106948 0.007382988 0.08799999 0.01062774 0.007339954 0.08799999 0.01057928 0.007308959 0.08799999 0.0104705 0.007224977 0.08799999 0.01046299 0.007218062 0.08799999 0.0103681 0.007130801 0.08799999 0.01031655 0.007074713 0.08799999 0.01027369 0.007028043 0.08799999 0.01018959 0.006918609 0.08799999 0.01018756 0.00691545 0.08799999 0.009941279 0.006355702 0.08799999 0.009927392 0.006296277 0.08799999 0.0128104 0.005081295 0.08799999 0.01275014 0.005002975 0.08799999 0.01309156 0.006153464 0.08799999 0.01307982 0.006254613 0.08799999 0.01305902 0.006355822 0.08799999 0.01305216 0.006389081 0.08799999 0.01282185 0.006902039 0.08799999 0.01281201 0.006915152 0.08799999 0.01139754 0.007595539 0.08799999 0.01136028 0.007593929 0.08799999 0.0101158 0.006803095 0.08799999 0.01008254 0.006739437 0.08799999 0.01005208 0.006681025 0.08799999 0.009999334 0.00655508 0.08799999 0.009958744 0.006430327 0.08799999 0.01017808 0.005097866 0.08799999 0.01024943 0.005002677 0.08799999 0.0102604 0.004988014 0.08799999 0.01035284 0.004884541 0.08799999 0.01038777 0.004851579 0.08799999 0.01045441 0.004788637 0.08799999 0.01054334 0.004718184 0.08799999 0.01056283 0.004702746 0.08799999 0.01067733 0.004627287 0.08799999 0.0107153 0.004606783 0.08799999 0.01177686 0.004423916 0.08799999 0.01190578 0.004452407 0.08799999 0.01191115 0.004453539 0.08799999 0.01204293 0.004494905 0.08799999 0.01252943 0.004774928 0.08799999 0.01245629 0.004718542 0.08799999 0.01242065 0.004691004 0.08799999 0.01261246 0.004851281 0.08799999 0.01263189 0.004869103 0.08799999 0.01272624 0.004971921 0.08799999 0.0123226 0.007372677 0.08799999 0.01237219 0.007339954 0.08799999 0.0124371 0.007297217 0.08799999 0.01200377 0.007517337 0.08799999 0.01195228 0.007534861 0.08799999 0.01122307 0.007575988 0.08799999 0.01119428 0.00756967 0.08799999 0.01108884 0.007546365 0.08799999 0.01099616 0.007517337 0.08799999 0.010957 0.007504999 0.08799999 0.01082104 0.007448911 0.08799999 0.01104766 0.004465103 0.08799999 0.01109439 0.00445342 0.08799999 0.01170438 0.004414498 0.08799999 0.01163965 0.004406034 0.08799999 0.01307845 0.005744755 0.08799999 0.01309204 0.005839645 0.08799999 0.01309818 0.005948722 0.08799999 0.01309984 0.005978047 0.08799999 0.01309579 0.006117343 0.08799999 0.01273953 0.00701189 0.08799999 0.01268339 0.007074713 0.08799999 0.01264709 0.007115364 0.08799999 0.01079833 0.004561901 0.08799999 0.0108999 0.004517734 0.08799999 0.01092493 0.004506886 0.08799999 0.01118135 0.004431784 0.08799999 0.01129549 0.004413723 0.08799999 0.01286756 0.005170941 0.08799999 0.01288414 0.005196869 0.08799999 0.01294785 0.005318939 0.08799999 0.01296204 0.005352735 0.08799999 0.0130006 0.005444824 0.08799999 0.01303315 0.00554496 0.08799999 0.01304119 0.005569636 0.08799999 0.01307255 0.005703628 0.08799999 0.01168286 0.007589638 0.08799999 0.01180577 0.007570207 0.08799999 0.01181858 0.00756818 0.08799999 0.01131707 0.004410326 0.08799999 0.01145517 0.00440061 0.08799999 0.0115 0.004399955 0.08799999 0.0122016 0.007438063 0.08799999 0.01219409 0.007441282 0.08799999 0.012075 0.007493078 0.08799999 0.0116024 0.0075953 0.08799999 0.01154476 0.007599353 0.08799999 0.0115 0.007599949 0.0782805 0.01123952 0.007477164 0.0782805 0.01098692 0.007409512 0.0782805 0.01074999 0.007299005 0.0782805 0.01053577 0.00714904 0.0782805 0.01035088 0.006964147 0.0782805 0.01020091 0.006749987 0.0782805 0.01009041 0.006512999 0.0782805 0.01002275 0.006260454 0.0782805 0.00999999 0.005999982 0.0782805 0.01002275 0.00573951 0.0782805 0.01009041 0.005486965 0.0782805 0.01020091 0.005249977 0.0782805 0.01035088 0.005035817 0.0782805 0.01053577 0.004850924 0.0782805 0.01074999 0.004700958 0.0782805 0.01098692 0.004590451 0.0782805 0.01123952 0.00452274 0.0782805 0.0115 0.004499971 0.0782805 0.01176047 0.00452274 0.0782805 0.01201301 0.004590451 0.0782805 0.01224994 0.004700958 0.0782805 0.01246416 0.004850924 0.0782805 0.01264905 0.005035817 0.0782805 0.01279902 0.005249977 0.0782805 0.01290953 0.005486965 0.0782805 0.01297718 0.00573951 0.0782805 0.01299995 0.005999982 0.0782805 0.01297718 0.006260454 0.0782805 0.01290953 0.006512999 0.0782805 0.01279902 0.006749987 0.0782805 0.01264905 0.006964147 0.0782805 0.01246416 0.00714904 0.0782805 0.01224994 0.007299005 0.0782805 0.01201301 0.007409512 0.0782805 0.01176047 0.007477164 0.0782805 0.0115 0.007499992 0.08799952 0.01160186 0.007587313 0.08799952 0.01139807 0.007587313 0.08799952 0.01119589 0.007561206 0.08799952 0.01099878 0.007509529 0.08799952 0.01080983 0.007433056 0.08799952 0.01063227 0.00733304 0.08799952 0.0104689 0.007211089 0.08799952 0.01032251 0.007069349 0.08799952 0.01019543 0.006909966 0.08799952 0.01008975 0.006735682 0.08799952 0.01000726 0.006549298 0.08799952 0.009949266 0.006353914 0.08799952 0.009916722 0.006152689 0.08799952 0.009910225 0.00594896 0.08799952 0.009929776 0.005746126 0.08799952 0.009975135 0.005547404 0.08799952 0.01004552 0.005356132 0.08799952 0.01013982 0.005175411 0.08799952 0.0102564 0.00500828 0.08799952 0.01039344 0.004857361 0.08799952 0.01054865 0.004725277 0.08799952 0.01071941 0.004614055 0.08799952 0.01090306 0.004525601 0.08799952 0.01109653 0.004461407 0.08799952 0.01129657 0.004422426 0.08799952 0.0115 0.004409372 0.08799952 0.01170337 0.004422426 0.08799952 0.01190346 0.004461407 0.08799952 0.01209688 0.004525601 0.08799952 0.01228052 0.004614055 0.08799952 0.01245135 0.004725277 0.08799952 0.0126065 0.004857361 0.08799952 0.01274353 0.00500828 0.08799952 0.01286017 0.005175411 0.08799952 0.01295441 0.005356132 0.08799952 0.0130248 0.005547404 0.08799952 0.01307016 0.005746126 0.08799952 0.01308977 0.00594896 0.08799952 0.01308321 0.006152689 0.08799952 0.01305067 0.006353914 0.08799952 0.01299268 0.006549298 0.08799952 0.01291018 0.006735682 0.08799952 0.0128045 0.006909966 0.08799952 0.01267743 0.007069349 0.08799952 0.01253104 0.007211089 0.08799952 0.01236772 0.00733304 0.08799952 0.0121901 0.007433056 0.08799952 0.01200115 0.007509529 0.08799952 0.01180404 0.007561206 0.08789998 0.01297599 0.005739748 0.0879094 0.01298117 0.00576049 0.08789998 0.01293796 0.005573153 0.0879094 0.01293838 0.005573034 0.08789998 0.01290661 0.005487978 0.0879094 0.01287198 0.005392611 0.08789998 0.01287162 0.005392789 0.08789998 0.01279747 0.005250751 0.0879094 0.01278305 0.005222141 0.08789998 0.01278269 0.00522238 0.0879094 0.01267307 0.005064487 0.08789998 0.01267272 0.005064725 0.08789998 0.01264762 0.005037069 0.0879094 0.01254379 0.004922151 0.08789998 0.01254349 0.004922449 0.08789998 0.01246219 0.004853248 0.0879094 0.0123974 0.004797518 0.08789998 0.01239717 0.004797875 0.08789998 0.01224946 0.004701733 0.0879094 0.01223629 0.004692614 0.08789998 0.01223605 0.004692971 0.0879094 0.01206302 0.004609167 0.08789998 0.01206284 0.004609584 0.08789998 0.01201224 0.004592776 0.0879094 0.01188057 0.004548609 0.08789998 0.01188045 0.004549026 0.08789998 0.01175987 0.004525542 0.0879094 0.01169186 0.004511833 0.08789998 0.0116918 0.00451231 0.0879094 0.0115 0.004499554 0.08789998 0.0115 0.004499971 0.0879094 0.01130807 0.004511833 0.08789998 0.01130813 0.00451231 0.08789998 0.01124006 0.004525542 0.0879094 0.01111936 0.004548609 0.08789998 0.01111948 0.004549026 0.08789998 0.01098769 0.004592776 0.0879094 0.01093691 0.004609167 0.08789998 0.01093709 0.004609584 0.0879094 0.0107637 0.004692614 0.08789998 0.01076388 0.004692971 0.0879094 0.01045614 0.004922151 0.08789998 0.01053774 0.004853248 0.0879094 0.01060253 0.004797518 0.08789998 0.01060283 0.004797875 0.08789998 0.01075047 0.004701733 0.0879094 0.01021689 0.005222141 0.08789998 0.01032721 0.005064725 0.0879094 0.01032686 0.005064487 0.08789998 0.01035231 0.005037069 0.08789998 0.01045644 0.004922449 0.0879094 0.01012796 0.005392611 0.08789998 0.01020246 0.005250751 0.08789998 0.01021724 0.00522238 0.0879094 0.01006156 0.005573034 0.08789998 0.01009333 0.005487978 0.08789998 0.01012837 0.005392789 0.0879094 0.01000028 0.005951881 0.08789998 0.01001918 0.00576055 0.0879094 0.01001876 0.00576049 0.08789998 0.01002395 0.005739748 0.08789998 0.01006197 0.005573153 0.0879094 0.01000648 0.006144046 0.08789998 0.01000231 0.005999922 0.08789998 0.01000076 0.005951881 0.0879094 0.01003712 0.006333827 0.08789998 0.01002568 0.006259977 0.08789998 0.0100069 0.006143987 0.0879094 0.01016968 0.006693959 0.08789998 0.01009225 0.006518006 0.0879094 0.01009184 0.006518185 0.08789998 0.01009076 0.00651288 0.08789998 0.0100376 0.006333768 0.0879094 0.01026934 0.006858408 0.08789998 0.0102033 0.006748557 0.08789998 0.0101701 0.00669378 0.08789998 0.01053619 0.007148504 0.08789998 0.01052761 0.007142126 0.0879094 0.01052737 0.007142484 0.08789998 0.01038956 0.007008433 0.0879094 0.0103892 0.007008731 0.08789998 0.01035296 0.006962537 0.08789998 0.0102697 0.00685817 0.08789998 0.01068168 0.007257103 0.0879094 0.01068145 0.007257461 0.08789998 0.01075142 0.007296383 0.0879094 0.01084893 0.007351815 0.08789998 0.01084917 0.007351398 0.08789998 0.01098775 0.007407546 0.0879094 0.01102715 0.007423996 0.08789998 0.01102733 0.007423579 0.0879094 0.01121312 0.007472753 0.08789998 0.01121324 0.007472336 0.0879094 0.01159608 0.00749731 0.08789998 0.0115 0.007496893 0.0879094 0.01140385 0.00749731 0.08789998 0.01140385 0.007496893 0.08789998 0.0112397 0.007475733 0.0879094 0.01197278 0.007423996 0.08789998 0.01178669 0.007472336 0.0879094 0.01178681 0.007472753 0.08789998 0.01176023 0.007475733 0.08789998 0.01159608 0.007496893 0.0879094 0.012151 0.007351815 0.08789998 0.01201218 0.007407546 0.08789998 0.01197266 0.007423579 0.0879094 0.01231849 0.007257461 0.08789998 0.01224851 0.007296383 0.08789998 0.01215082 0.007351398 0.0879094 0.01261073 0.007008731 0.08789998 0.01247233 0.007142126 0.0879094 0.01247262 0.007142484 0.08789998 0.01246374 0.007148504 0.08789998 0.01231825 0.007257103 0.0879094 0.01273059 0.006858408 0.08789998 0.01264697 0.006962537 0.08789998 0.01261037 0.007008433 0.0879094 0.0129081 0.006518185 0.08789998 0.01282989 0.00669378 0.0879094 0.01283025 0.006693959 0.08789998 0.0127967 0.006748557 0.08789998 0.01273024 0.00685817 0.0879094 0.01296281 0.006333827 0.08789998 0.01290917 0.00651288 0.08789998 0.01290768 0.006518006 0.0879094 0.01299351 0.006144046 0.08789998 0.01297432 0.006259977 0.08789998 0.01296234 0.006333768 0.08789998 0.01298075 0.00576055 0.08789998 0.01299917 0.005951881 0.0879094 0.01299965 0.005951881 0.08789998 0.01299995 0.005999982 0.08789998 0.01299303 0.006143987 0.08799642 0.01129877 0.004439294 0.08799642 0.01110082 0.004477798 0.08799642 0.01090943 0.004541337 0.08799642 0.01072776 0.004628837 0.08799642 0.01055878 0.004738867 0.08799642 0.01040524 0.00486958 0.08799642 0.0102697 0.00501883 0.08799642 0.0101543 0.005184233 0.08799642 0.01006102 0.005362987 0.08799642 0.009991407 0.005552232 0.08799642 0.009946525 0.005748808 0.08799642 0.009927153 0.005949556 0.08799642 0.00993365 0.00615108 0.08799642 0.009965837 0.006350159 0.08799642 0.01002317 0.006543457 0.08799642 0.01010483 0.006727814 0.08799642 0.01020932 0.00690025 0.08799642 0.01033508 0.007057905 0.08799642 0.01047992 0.007198214 0.08799642 0.01064151 0.007318794 0.08799642 0.01081722 0.007417738 0.08799642 0.01100409 0.007493436 0.08799642 0.01119917 0.007544577 0.08799642 0.01139914 0.007570326 0.08799642 0.01160079 0.007570326 0.08799642 0.01180076 0.007544577 0.08799642 0.01199585 0.007493436 0.08799642 0.01218271 0.007417738 0.08799642 0.01235842 0.007318794 0.08799642 0.01252001 0.007198214 0.08799642 0.01266491 0.007057905 0.08799642 0.01279062 0.00690025 0.08799642 0.01289516 0.006727814 0.08799642 0.01297676 0.006543457 0.08799642 0.0130341 0.006350159 0.08799642 0.01306629 0.00615108 0.08799642 0.01307278 0.005949556 0.08799642 0.01305341 0.005748808 0.08799642 0.01300853 0.005552232 0.08799642 0.01293891 0.005362987 0.08799642 0.01284563 0.005184233 0.08799642 0.0127303 0.00501883 0.08799642 0.01259469 0.00486958 0.08799642 0.01244115 0.004738867 0.08799642 0.01227217 0.004628837 0.08799642 0.0120905 0.004541337 0.08799642 0.01189911 0.004477798 0.08799642 0.01170122 0.004439294 0.08799642 0.0115 0.00442636 0.08799046 0.0113008 0.004455327 0.08799046 0.01110494 0.004493474 0.08799046 0.01091551 0.004556357 0.08799046 0.01073575 0.004642963 0.08799046 0.01056843 0.004751861 0.08799046 0.0104165 0.004881203 0.08799046 0.01028233 0.005028963 0.08799046 0.01016813 0.005192637 0.08799046 0.01007586 0.005369544 0.08799046 0.0100069 0.005556821 0.08799046 0.009962499 0.00575143 0.08799046 0.009943366 0.005950033 0.08799046 0.009949743 0.00614953 0.08799046 0.009981572 0.006346523 0.08799046 0.01003837 0.006537854 0.08799046 0.01011914 0.006720364 0.08799046 0.01022261 0.006891012 0.08799046 0.01034706 0.007046997 0.08799046 0.01049041 0.007185876 0.08799046 0.01065033 0.007305204 0.08799046 0.01082426 0.007403135 0.08799046 0.01100921 0.007478058 0.08799046 0.01120227 0.007528662 0.08799046 0.01140016 0.007554173 0.08799046 0.01159977 0.007554173 0.08799046 0.01179766 0.007528662 0.08799046 0.01199072 0.007478058 0.08799046 0.01217573 0.007403135 0.08799046 0.0123496 0.007305204 0.08799046 0.01250952 0.007185876 0.08799046 0.01265287 0.007046997 0.08799046 0.01277732 0.006891012 0.08799046 0.0128808 0.006720364 0.08799046 0.01296156 0.006537854 0.08799046 0.01301836 0.006346523 0.08799046 0.01305019 0.00614953 0.08799046 0.01305657 0.005950033 0.08799046 0.01303744 0.00575143 0.08799046 0.01299303 0.005556821 0.08799046 0.01292407 0.005369544 0.08799046 0.0128318 0.005192637 0.08799046 0.0127176 0.005028963 0.08799046 0.01258343 0.004881203 0.08799046 0.0124315 0.004751861 0.08799046 0.01226425 0.004642963 0.08799046 0.01208442 0.004556357 0.08799046 0.011895 0.004493474 0.08799046 0.01169914 0.004455327 0.08799046 0.0115 0.004442572 0.08798182 0.0113027 0.004470109 0.08798182 0.01110869 0.004507899 0.08798182 0.01092112 0.004570186 0.08798182 0.01074302 0.004655957 0.08798182 0.01057738 0.004763782 0.08798182 0.01042687 0.004891932 0.08798182 0.01029402 0.005038261 0.08798182 0.01018089 0.005200326 0.08798182 0.01008951 0.005375564 0.08798182 0.0100212 0.005561113 0.08798182 0.009977221 0.005753815 0.08798182 0.009958267 0.00595051 0.08798182 0.009964585 0.006148099 0.08798182 0.009996116 0.006343185 0.08798182 0.01005238 0.006532669 0.08798182 0.01013237 0.006713449 0.08798182 0.01023483 0.006882488 0.08798182 0.01035809 0.007036983 0.08798182 0.01050007 0.007174491 0.08798182 0.0106585 0.007292747 0.08798182 0.0108307 0.007389724 0.08798182 0.01101392 0.007463872 0.08798182 0.01120513 0.007513999 0.08798182 0.01140117 0.007539272 0.08798182 0.01159882 0.007539272 0.08798182 0.01179486 0.007513999 0.08798182 0.01198601 0.007463872 0.08798182 0.01216924 0.007389724 0.08798182 0.01234143 0.007292747 0.08798182 0.01249986 0.007174491 0.08798182 0.01264184 0.007036983 0.08798182 0.0127651 0.006882488 0.08798182 0.01286756 0.006713449 0.08798182 0.01294755 0.006532669 0.08798182 0.01300382 0.006343185 0.08798182 0.01303535 0.006148099 0.08798182 0.01304167 0.00595051 0.08798182 0.01302272 0.005753815 0.08798182 0.01297873 0.005561113 0.08798182 0.01291048 0.005375564 0.08798182 0.01281905 0.005200326 0.08798182 0.01270592 0.005038261 0.08798182 0.01257306 0.004891932 0.08798182 0.01242256 0.004763782 0.08798182 0.01225692 0.004655957 0.08798182 0.01207882 0.004570186 0.08798182 0.01189124 0.004507899 0.08798182 0.01169723 0.004470109 0.08798182 0.0115 0.004457473 0.08797067 0.01130443 0.004483222 0.08797067 0.01111203 0.004520714 0.08797067 0.01092606 0.004582464 0.08797067 0.01074951 0.00466746 0.08797067 0.0105853 0.004774391 0.08797067 0.01043605 0.004901409 0.08797067 0.01030433 0.005046486 0.08797067 0.01019221 0.00520718 0.08797067 0.01010155 0.005380928 0.08797067 0.0100339 0.005564868 0.08797067 0.009990274 0.005755901 0.08797067 0.009971439 0.005950927 0.08797067 0.009977757 0.006146788 0.08797067 0.01000905 0.006340265 0.08797067 0.01006478 0.006528139 0.08797067 0.01014411 0.00670731 0.08797067 0.01024568 0.006874918 0.08797067 0.01036787 0.007028102 0.08797067 0.01050865 0.007164418 0.08797067 0.01066571 0.007281661 0.08797067 0.01083642 0.007377803 0.08797067 0.01101809 0.007451355 0.08797067 0.01120764 0.007501065 0.08797067 0.01140201 0.007526099 0.08797067 0.01159793 0.007526099 0.08797067 0.0117923 0.007501065 0.08797067 0.01198184 0.007451355 0.08797067 0.01216351 0.007377803 0.08797067 0.01233422 0.007281661 0.08797067 0.01249128 0.007164418 0.08797067 0.01263207 0.007028102 0.08797067 0.01275426 0.006874918 0.08797067 0.01285582 0.00670731 0.08797067 0.01293516 0.006528139 0.08797067 0.01299095 0.006340265 0.08797067 0.01302218 0.006146788 0.08797067 0.0130285 0.005950927 0.08797067 0.01300966 0.005755901 0.08797067 0.01296603 0.005564868 0.08797067 0.01289838 0.005380928 0.08797067 0.01280772 0.00520718 0.08797067 0.01269561 0.005046486 0.08797067 0.01256388 0.004901409 0.08797067 0.01241463 0.004774391 0.08797067 0.01225042 0.00466746 0.08797067 0.01207387 0.004582464 0.08797067 0.0118879 0.004520714 0.08797067 0.01169556 0.004483222 0.08797067 0.0115 0.004470705 0.0879575 0.0113058 0.004494249 0.0879575 0.01111489 0.004531443 0.0879575 0.01093024 0.004592716 0.0879575 0.010755 0.004677176 0.0879575 0.01059192 0.004783272 0.0879575 0.0104438 0.004909396 0.0879575 0.01031303 0.0050534 0.0879575 0.01020169 0.005212962 0.0879575 0.01011174 0.005385458 0.0879575 0.01004451 0.005568027 0.0879575 0.01000124 0.005757689 0.0879575 0.009982585 0.005951285 0.0879575 0.009988784 0.006145775 0.0879575 0.01001983 0.006337821 0.0879575 0.01007521 0.006524324 0.0879575 0.01015394 0.006702184 0.0879575 0.0102548 0.006868541 0.0879575 0.01037609 0.007020652 0.0879575 0.01051586 0.007156014 0.0879575 0.01067173 0.007272362 0.0879575 0.01084125 0.007367789 0.0879575 0.01102155 0.007440805 0.0879575 0.01120978 0.007490158 0.0879575 0.01140272 0.007515013 0.0879575 0.01159721 0.007515013 0.0879575 0.01179021 0.007490158 0.0879575 0.01197838 0.007440805 0.0879575 0.01215869 0.007367789 0.0879575 0.0123282 0.007272362 0.0879575 0.01248413 0.007156014 0.0879575 0.01262384 0.007020652 0.0879575 0.01274514 0.006868541 0.0879575 0.01284599 0.006702184 0.0879575 0.01292473 0.006524324 0.0879575 0.0129801 0.006337821 0.0879575 0.01301115 0.006145775 0.0879575 0.01301735 0.005951285 0.0879575 0.0129987 0.005757689 0.0879575 0.01295542 0.005568027 0.0879575 0.01288819 0.005385458 0.0879575 0.01279824 0.005212962 0.0879575 0.01268696 0.0050534 0.0879575 0.01255613 0.004909396 0.0879575 0.01240801 0.004783272 0.0879575 0.01224499 0.004677176 0.0879575 0.0120697 0.004592716 0.0879575 0.01188504 0.004531443 0.0879575 0.01169413 0.004494249 0.0879575 0.0115 0.004481792 0.08794254 0.01130694 0.004502832 0.08794254 0.0111171 0.004539847 0.08794254 0.01093351 0.004600763 0.08794254 0.01075923 0.004684686 0.08794254 0.0105971 0.004790246 0.08794254 0.01044982 0.004915595 0.08794254 0.01031976 0.005058825 0.08794254 0.01020914 0.005217432 0.08794254 0.01011967 0.005388915 0.08794254 0.01005285 0.005570471 0.08794254 0.01000982 0.00575906 0.08794254 0.009991228 0.005951583 0.08794254 0.009997427 0.00614494 0.08794254 0.0100283 0.006335854 0.08794254 0.01008331 0.006521284 0.08794254 0.01016163 0.006698191 0.08794254 0.01026189 0.006863594 0.08794254 0.01038253 0.007014811 0.08794254 0.01052147 0.007149398 0.08794254 0.0106765 0.00726509 0.08794254 0.010845 0.007359981 0.08794254 0.01102429 0.007432579 0.08794254 0.01121139 0.007481634 0.08794254 0.01140326 0.00750637 0.08794254 0.01159667 0.00750637 0.08794254 0.01178854 0.007481634 0.08794254 0.01197564 0.007432579 0.08794254 0.01215493 0.007359981 0.08794254 0.01232349 0.00726509 0.08794254 0.01247847 0.007149398 0.08794254 0.0126174 0.007014811 0.08794254 0.01273804 0.006863594 0.08794254 0.0128383 0.006698191 0.08794254 0.01291662 0.006521284 0.08794254 0.01297163 0.006335854 0.08794254 0.01300251 0.00614494 0.08794254 0.01300871 0.005951583 0.08794254 0.01299011 0.00575906 0.08794254 0.01294708 0.005570471 0.08794254 0.01288032 0.005388915 0.08794254 0.01279079 0.005217432 0.08794254 0.01268017 0.005058825 0.08794254 0.01255011 0.004915595 0.08794254 0.01240283 0.004790246 0.08794254 0.0122407 0.004684686 0.08794254 0.01206642 0.004600763 0.08794254 0.01188284 0.004539847 0.08794254 0.011693 0.004502832 0.08794254 0.0115 0.004490435 0.08792638 0.01130771 0.004508793 0.08792638 0.01111859 0.004545629 0.08792638 0.01093572 0.004606306 0.08792638 0.01076215 0.004689931 0.08792638 0.01060068 0.004795014 0.08792638 0.01045399 0.004919886 0.08792638 0.01032447 0.00506252 0.08792638 0.0102142 0.005220532 0.08792638 0.0101251 0.005391359 0.08792638 0.01005858 0.005572199 0.08792638 0.01001572 0.005760014 0.08792638 0.009997189 0.005951762 0.08792638 0.01000338 0.006144344 0.08792638 0.01003414 0.006334543 0.08792638 0.01008892 0.006519258 0.08792638 0.01016694 0.006695389 0.08792638 0.01026678 0.006860196 0.08792638 0.01038694 0.007010817 0.08792638 0.01052534 0.007144868 0.08792638 0.01067972 0.007260084 0.08792638 0.01084762 0.007354617 0.08792638 0.0110262 0.007426917 0.08792638 0.01121258 0.007475793 0.08792638 0.01140362 0.00750041 0.08792638 0.01159632 0.00750041 0.08792638 0.01178741 0.007475793 0.08792638 0.01197373 0.007426917 0.08792638 0.01215231 0.007354617 0.08792638 0.01232022 0.007260084 0.08792638 0.01247459 0.007144868 0.08792638 0.01261299 0.007010817 0.08792638 0.01273316 0.006860196 0.08792638 0.01283299 0.006695389 0.08792638 0.01291102 0.006519258 0.08792638 0.01296579 0.006334543 0.08792638 0.01299655 0.006144344 0.08792638 0.01300275 0.005951762 0.08792638 0.01298427 0.005760014 0.08792638 0.01294136 0.005572199 0.08792638 0.01287484 0.005391359 0.08792638 0.01278573 0.005220532 0.08792638 0.01267546 0.00506252 0.08792638 0.01254594 0.004919886 0.08792638 0.01239925 0.004795014 0.08792638 0.01223778 0.004689931 0.08792638 0.01206421 0.004606306 0.08792638 0.01188135 0.004545629 0.08792638 0.01169222 0.004508793 0.08792638 0.0115 0.004496455 0.08799999 0.00829935 -0.005435585 0.08999997 0.008249998 -0.005999982 0.08799999 0.008249998 -0.005999982 0.08999997 0.00829935 -0.006564319 0.08799999 0.00829935 -0.006564319 0.08999997 0.008445978 -0.007111549 0.08799999 0.008445978 -0.007111549 0.08999997 0.00868541 -0.007624983 0.08799999 0.00868541 -0.007624983 0.08999997 0.009010314 -0.008089005 0.08799999 0.009010314 -0.008089005 0.08999997 0.009410917 -0.008489608 0.08799999 0.009410917 -0.008489608 0.08999997 0.009874999 -0.008814573 0.08799999 0.009874999 -0.008814573 0.08999997 0.01038843 -0.009053945 0.08799999 0.01038843 -0.009053945 0.08999997 0.0109356 -0.009200572 0.08799999 0.0109356 -0.009200572 0.08999997 0.0115 -0.009249985 0.08799999 0.0115 -0.009249985 0.08999997 0.01206433 -0.009200572 0.08799999 0.01206433 -0.009200572 0.08999997 0.01261156 -0.009053945 0.08799999 0.01261156 -0.009053945 0.08999997 0.013125 -0.008814573 0.08799999 0.013125 -0.008814573 0.08999997 0.01358902 -0.008489608 0.08799999 0.01358902 -0.008489608 0.08999997 0.01398962 -0.008089005 0.08799999 0.01398962 -0.008089005 0.08999997 0.01431453 -0.007624983 0.08799999 0.01431453 -0.007624983 0.08999997 0.01455396 -0.007111549 0.08799999 0.01455396 -0.007111549 0.08999997 0.01470059 -0.006564319 0.08799999 0.01470059 -0.006564319 0.08999997 0.01475 -0.005999982 0.08799999 0.01475 -0.005999982 0.08999997 0.01470059 -0.005435585 0.08799999 0.01470059 -0.005435585 0.08999997 0.01455396 -0.004888415 0.08799999 0.01455396 -0.004888415 0.08999997 0.01431453 -0.00437498 0.08799999 0.01431453 -0.00437498 0.08999997 0.01398962 -0.003910899 0.08799999 0.01398962 -0.003910899 0.08999997 0.01358902 -0.003510355 0.08799999 0.01358902 -0.003510355 0.08999997 0.013125 -0.003185391 0.08799999 0.013125 -0.003185391 0.08999997 0.01261156 -0.002945959 0.08799999 0.01261156 -0.002945959 0.08999997 0.01206433 -0.002799332 0.08799999 0.01206433 -0.002799332 0.08999997 0.0115 -0.002749979 0.08799999 0.0115 -0.002749979 0.08999997 0.0109356 -0.002799332 0.08799999 0.0109356 -0.002799332 0.08999997 0.01038843 -0.002945959 0.08799999 0.01038843 -0.002945959 0.08999997 0.009874999 -0.003185391 0.08799999 0.009874999 -0.003185391 0.08999997 0.009410917 -0.003510355 0.08799999 0.009410917 -0.003510355 0.08999997 0.009010314 -0.003910899 0.08799999 0.009010314 -0.003910899 0.08999997 0.00868541 -0.00437498 0.08799999 0.00868541 -0.00437498 0.08999997 0.008445978 -0.004888415 0.08799999 0.008445978 -0.004888415 0.08999997 0.00829935 -0.005435585 0.08799999 0.00829935 0.006564319 0.08999997 0.008249998 0.005999982 0.08799999 0.008249998 0.005999982 0.08999997 0.00829935 0.005435585 0.08799999 0.00829935 0.005435585 0.08999997 0.008445978 0.004888415 0.08799999 0.008445978 0.004888415 0.08999997 0.00868541 0.00437498 0.08799999 0.00868541 0.00437498 0.08999997 0.009010314 0.003910899 0.08799999 0.009010314 0.003910899 0.08999997 0.009410917 0.003510355 0.08799999 0.009410917 0.003510355 0.08999997 0.009874999 0.003185391 0.08799999 0.009874999 0.003185391 0.08999997 0.01038843 0.002945959 0.08799999 0.01038843 0.002945959 0.08999997 0.0109356 0.002799332 0.08799999 0.0109356 0.002799332 0.08999997 0.0115 0.002749979 0.08799999 0.0115 0.002749979 0.08999997 0.01206433 0.002799332 0.08799999 0.01206433 0.002799332 0.08999997 0.01261156 0.002945959 0.08799999 0.01261156 0.002945959 0.08999997 0.013125 0.003185391 0.08799999 0.013125 0.003185391 0.08999997 0.01358902 0.003510355 0.08799999 0.01358902 0.003510355 0.08999997 0.01398962 0.003910899 0.08799999 0.01398962 0.003910899 0.08999997 0.01431453 0.00437498 0.08799999 0.01431453 0.00437498 0.08999997 0.01455396 0.004888415 0.08799999 0.01455396 0.004888415 0.08999997 0.01470059 0.005435585 0.08799999 0.01470059 0.005435585 0.08999997 0.01475 0.005999982 0.08799999 0.01475 0.005999982 0.08999997 0.01470059 0.006564319 0.08799999 0.01470059 0.006564319 0.08999997 0.01455396 0.007111549 0.08799999 0.01455396 0.007111549 0.08999997 0.01431453 0.007624983 0.08799999 0.01431453 0.007624983 0.08999997 0.01398962 0.008089005 0.08799999 0.01398962 0.008089005 0.08999997 0.01358902 0.008489608 0.08799999 0.01358902 0.008489608 0.08999997 0.013125 0.008814573 0.08799999 0.013125 0.008814573 0.08999997 0.01261156 0.009053945 0.08799999 0.01261156 0.009053945 0.08999997 0.01206433 0.009200572 0.08799999 0.01206433 0.009200572 0.08999997 0.0115 0.009249985 0.08799999 0.0115 0.009249985 0.08999997 0.0109356 0.009200572 0.08799999 0.0109356 0.009200572 0.08999997 0.01038843 0.009053945 0.08799999 0.01038843 0.009053945 0.08999997 0.009874999 0.008814573 0.08799999 0.009874999 0.008814573 0.08999997 0.009410917 0.008489608 0.08799999 0.009410917 0.008489608 0.08999997 0.009010314 0.008089005 0.08799999 0.009010314 0.008089005 0.08999997 0.00868541 0.007624983 0.08799999 0.00868541 0.007624983 0.08999997 0.008445978 0.007111549 0.08799999 0.008445978 0.007111549 0.08999997 0.00829935 0.006564319 0.08810901 8.28221e-4 -0.00999999 0.08810901 8.28221e-4 0.00999999 0.08801215 2.78898e-4 0.00999999 0.08801215 2.78898e-4 -0.00999999 0.08801215 -2.78898e-4 0.00999999 0.08801215 -2.78898e-4 -0.00999999 0.08810901 -8.28221e-4 0.00999999 0.08810901 -8.28221e-4 -0.00999999 0.08799999 -0.01470059 -0.005435585 0.08999997 -0.01475 -0.005999982 0.08799999 -0.01475 -0.005999982 0.08999997 -0.01470059 -0.006564319 0.08799999 -0.01470059 -0.006564319 0.08999997 -0.01455396 -0.007111549 0.08799999 -0.01455396 -0.007111549 0.08999997 -0.01431453 -0.007624983 0.08799999 -0.01431453 -0.007624983 0.08999997 -0.01398962 -0.008089005 0.08799999 -0.01398962 -0.008089005 0.08999997 -0.01358902 -0.008489608 0.08799999 -0.01358902 -0.008489608 0.08999997 -0.013125 -0.008814573 0.08799999 -0.013125 -0.008814573 0.08999997 -0.01261156 -0.009053945 0.08799999 -0.01261156 -0.009053945 0.08999997 -0.01206433 -0.009200572 0.08799999 -0.01206433 -0.009200572 0.08999997 -0.0115 -0.009249985 0.08799999 -0.0115 -0.009249985 0.08999997 -0.0109356 -0.009200572 0.08799999 -0.0109356 -0.009200572 0.08999997 -0.01038843 -0.009053945 0.08799999 -0.01038843 -0.009053945 0.08999997 -0.009874999 -0.008814573 0.08799999 -0.009874999 -0.008814573 0.08999997 -0.009410917 -0.008489608 0.08799999 -0.009410917 -0.008489608 0.08999997 -0.009010314 -0.008089005 0.08799999 -0.009010314 -0.008089005 0.08999997 -0.00868541 -0.007624983 0.08799999 -0.00868541 -0.007624983 0.08999997 -0.008445978 -0.007111549 0.08799999 -0.008445978 -0.007111549 0.08999997 -0.00829935 -0.006564319 0.08799999 -0.00829935 -0.006564319 0.08999997 -0.008249998 -0.005999982 0.08799999 -0.008249998 -0.005999982 0.08999997 -0.00829935 -0.005435585 0.08799999 -0.00829935 -0.005435585 0.08999997 -0.008445978 -0.004888415 0.08799999 -0.008445978 -0.004888415 0.08999997 -0.00868541 -0.00437498 0.08799999 -0.00868541 -0.00437498 0.08999997 -0.009010314 -0.003910899 0.08799999 -0.009010314 -0.003910899 0.08999997 -0.009410917 -0.003510355 0.08799999 -0.009410917 -0.003510355 0.08999997 -0.009874999 -0.003185391 0.08799999 -0.009874999 -0.003185391 0.08999997 -0.01038843 -0.002945959 0.08799999 -0.01038843 -0.002945959 0.08999997 -0.0109356 -0.002799332 0.08799999 -0.0109356 -0.002799332 0.08999997 -0.0115 -0.002749979 0.08799999 -0.0115 -0.002749979 0.08999997 -0.01206433 -0.002799332 0.08799999 -0.01206433 -0.002799332 0.08999997 -0.01261156 -0.002945959 0.08799999 -0.01261156 -0.002945959 0.08999997 -0.013125 -0.003185391 0.08799999 -0.013125 -0.003185391 0.08999997 -0.01358902 -0.003510355 0.08799999 -0.01358902 -0.003510355 0.08999997 -0.01398962 -0.003910899 0.08799999 -0.01398962 -0.003910899 0.08999997 -0.01431453 -0.00437498 0.08799999 -0.01431453 -0.00437498 0.08999997 -0.01455396 -0.004888415 0.08799999 -0.01455396 -0.004888415 0.08999997 -0.01470059 -0.005435585 0.08799999 -0.01470059 0.006564319 0.08999997 -0.01475 0.005999982 0.08799999 -0.01475 0.005999982 0.08999997 -0.01470059 0.005435585 0.08799999 -0.01470059 0.005435585 0.08999997 -0.01455396 0.004888415 0.08799999 -0.01455396 0.004888415 0.08999997 -0.01431453 0.00437498 0.08799999 -0.01431453 0.00437498 0.08999997 -0.01398962 0.003910899 0.08799999 -0.01398962 0.003910899 0.08999997 -0.01358902 0.003510355 0.08799999 -0.01358902 0.003510355 0.08999997 -0.013125 0.003185391 0.08799999 -0.013125 0.003185391 0.08999997 -0.01261156 0.002945959 0.08799999 -0.01261156 0.002945959 0.08999997 -0.01206433 0.002799332 0.08799999 -0.01206433 0.002799332 0.08999997 -0.0115 0.002749979 0.08799999 -0.0115 0.002749979 0.08999997 -0.0109356 0.002799332 0.08799999 -0.0109356 0.002799332 0.08999997 -0.01038843 0.002945959 0.08799999 -0.01038843 0.002945959 0.08999997 -0.009874999 0.003185391 0.08799999 -0.009874999 0.003185391 0.08999997 -0.009410917 0.003510355 0.08799999 -0.009410917 0.003510355 0.08999997 -0.009010314 0.003910899 0.08799999 -0.009010314 0.003910899 0.08999997 -0.00868541 0.00437498 0.08799999 -0.00868541 0.00437498 0.08999997 -0.008445978 0.004888415 0.08799999 -0.008445978 0.004888415 0.08999997 -0.00829935 0.005435585 0.08799999 -0.00829935 0.005435585 0.08999997 -0.008249998 0.005999982 0.08799999 -0.008249998 0.005999982 0.08999997 -0.00829935 0.006564319 0.08799999 -0.00829935 0.006564319 0.08999997 -0.008445978 0.007111549 0.08799999 -0.008445978 0.007111549 0.08999997 -0.00868541 0.007624983 0.08799999 -0.00868541 0.007624983 0.08999997 -0.009010314 0.008089005 0.08799999 -0.009010314 0.008089005 0.08999997 -0.009410917 0.008489608 0.08799999 -0.009410917 0.008489608 0.08999997 -0.009874999 0.008814573 0.08799999 -0.009874999 0.008814573 0.08999997 -0.01038843 0.009053945 0.08799999 -0.01038843 0.009053945 0.08999997 -0.0109356 0.009200572 0.08799999 -0.0109356 0.009200572 0.08999997 -0.0115 0.009249985 0.08799999 -0.0115 0.009249985 0.08999997 -0.01206433 0.009200572 0.08799999 -0.01206433 0.009200572 0.08999997 -0.01261156 0.009053945 0.08799999 -0.01261156 0.009053945 0.08999997 -0.013125 0.008814573 0.08799999 -0.013125 0.008814573 0.08999997 -0.01358902 0.008489608 0.08799999 -0.01358902 0.008489608 0.08999997 -0.01398962 0.008089005 0.08799999 -0.01398962 0.008089005 0.08999997 -0.01431453 0.007624983 0.08799999 -0.01431453 0.007624983 0.08999997 -0.01455396 0.007111549 0.08799999 -0.01455396 0.007111549 0.08999997 -0.01470059 0.006564319 0.08799999 0.01297223 -0.00514996 0.08799999 0.01280224 -0.00490725 0.08799999 0.01259273 -0.00469768 0.08799999 0.01234996 -0.004527747 0.08799999 0.01208138 -0.004402518 0.08799999 0.01179516 -0.004325807 0.08799999 0.0115 -0.004299998 0.08799999 0.01120477 -0.004325807 0.08799999 0.01091855 -0.004402518 0.08799999 0.01064997 -0.004527747 0.08799999 0.0104072 -0.00469768 0.08799999 0.01019769 -0.00490725 0.08799999 0.0100277 -0.00514996 0.08799999 0.009902477 -0.005418539 0.08799999 0.009825825 -0.00570476 0.08799999 0.009799957 -0.005999982 0.08799999 0.009825825 -0.006295144 0.08799999 0.009902477 -0.006581425 0.08799999 0.0100277 -0.006849944 0.08799999 0.01019769 -0.007092714 0.08799999 0.0104072 -0.007302224 0.08799999 0.01064997 -0.007472217 0.08799999 0.01091855 -0.007597446 0.08799999 0.01120477 -0.007674157 0.08799999 0.0115 -0.007699966 0.08799999 0.01179516 -0.007674157 0.08799999 0.01208138 -0.007597446 0.08799999 0.01234996 -0.007472217 0.08799999 0.01259273 -0.007302224 0.08799999 0.01280224 -0.007092714 0.08799999 0.01297223 -0.006849944 0.08799999 0.01309746 -0.006581425 0.08799999 0.01317417 -0.006295144 0.08799999 0.01319998 -0.005999982 0.08799999 0.01317417 -0.00570476 0.08799999 0.01309746 -0.005418539 0.08799999 -0.0100277 -0.00514996 0.08799999 -0.01019769 -0.00490725 0.08799999 -0.0104072 -0.00469768 0.08799999 -0.01064997 -0.004527747 0.08799999 -0.01091855 -0.004402518 0.08799999 -0.01120477 -0.004325807 0.08799999 -0.0115 -0.004299998 0.08799999 -0.01179516 -0.004325807 0.08799999 -0.01208138 -0.004402518 0.08799999 -0.01234996 -0.004527747 0.08799999 -0.01259273 -0.00469768 0.08799999 -0.01280224 -0.00490725 0.08799999 -0.01297223 -0.00514996 0.08799999 -0.01309746 -0.005418539 0.08799999 -0.01317417 -0.00570476 0.08799999 -0.01319998 -0.005999982 0.08799999 -0.01317417 -0.006295144 0.08799999 -0.01309746 -0.006581425 0.08799999 -0.01297223 -0.006849944 0.08799999 -0.01280224 -0.007092714 0.08799999 -0.01259273 -0.007302224 0.08799999 -0.01234996 -0.007472217 0.08799999 -0.01208138 -0.007597446 0.08799999 -0.01179516 -0.007674157 0.08799999 -0.0115 -0.007699966 0.08799999 -0.01120477 -0.007674157 0.08799999 -0.01091855 -0.007597446 0.08799999 -0.01064997 -0.007472217 0.08799999 -0.0104072 -0.007302224 0.08799999 -0.01019769 -0.007092714 0.08799999 -0.0100277 -0.006849944 0.08799999 -0.009902477 -0.006581425 0.08799999 -0.009825825 -0.006295144 0.08799999 -0.009799957 -0.005999982 0.08799999 -0.009825825 -0.00570476 0.08799999 -0.009902477 -0.005418539 0.08799999 0.01297223 0.006849944 0.08799999 0.01280224 0.007092714 0.08799999 0.01259273 0.007302224 0.08799999 0.01234996 0.007472217 0.08799999 0.01208138 0.007597446 0.08799999 0.01179516 0.007674157 0.08799999 0.0115 0.007699966 0.08799999 0.01120477 0.007674157 0.08799999 0.01091855 0.007597446 0.08799999 0.01064997 0.007472217 0.08799999 0.0104072 0.007302224 0.08799999 0.01019769 0.007092714 0.08799999 0.0100277 0.006849944 0.08799999 0.009902477 0.006581425 0.08799999 0.009825825 0.006295144 0.08799999 0.009799957 0.005999982 0.08799999 0.009825825 0.00570476 0.08799999 0.009902477 0.005418539 0.08799999 0.0100277 0.00514996 0.08799999 0.01019769 0.00490725 0.08799999 0.0104072 0.00469768 0.08799999 0.01064997 0.004527747 0.08799999 0.01091855 0.004402518 0.08799999 0.01120477 0.004325807 0.08799999 0.0115 0.004299998 0.08799999 0.01179516 0.004325807 0.08799999 0.01208138 0.004402518 0.08799999 0.01234996 0.004527747 0.08799999 0.01259273 0.00469768 0.08799999 0.01280224 0.00490725 0.08799999 0.01297223 0.00514996 0.08799999 0.01309746 0.005418539 0.08799999 0.01317417 0.00570476 0.08799999 0.01319998 0.005999982 0.08799999 0.01317417 0.006295144 0.08799999 0.01309746 0.006581425 0.08799999 -0.0100277 0.006849944 0.08799999 -0.01019769 0.007092714 0.08799999 -0.0104072 0.007302224 0.08799999 -0.01064997 0.007472217 0.08799999 -0.01091855 0.007597446 0.08799999 -0.01120477 0.007674157 0.08799999 -0.0115 0.007699966 0.08799999 -0.01179516 0.007674157 0.08799999 -0.01208138 0.007597446 0.08799999 -0.01234996 0.007472217 0.08799999 -0.01259273 0.007302224 0.08799999 -0.01280224 0.007092714 0.08799999 -0.01297223 0.006849944 0.08799999 -0.01309746 0.006581425 0.08799999 -0.01317417 0.006295144 0.08799999 -0.01319998 0.005999982 0.08799999 -0.01317417 0.00570476 0.08799999 -0.01309746 0.005418539 0.08799999 -0.01297223 0.00514996 0.08799999 -0.01280224 0.00490725 0.08799999 -0.01259273 0.00469768 0.08799999 -0.01234996 0.004527747 0.08799999 -0.01208138 0.004402518 0.08799999 -0.01179516 0.004325807 0.08799999 -0.0115 0.004299998 0.08799999 -0.01120477 0.004325807 0.08799999 -0.01091855 0.004402518 0.08799999 -0.01064997 0.004527747 0.08799999 -0.0104072 0.00469768 0.08799999 -0.01019769 0.00490725 0.08799999 -0.0100277 0.00514996 0.08799999 -0.009902477 0.005418539 0.08799999 -0.009825825 0.00570476 0.08799999 -0.009799957 0.005999982 0.08799999 -0.009825825 0.006295144 0.08799999 -0.009902477 0.006581425 0.08999997 0.007885336 0.00999999 0.08999997 0.01549994 0.00999999 0.08999997 0.007885336 -0.00999999 0.08999997 0.01549994 -0.00999999 0.08999997 -0.007885336 -0.00999999 0.08999997 -0.007885336 0.00999999 0.08999997 -0.01549994 0.00999999 0.08999997 -0.01549994 -0.00999999 0.08599996 0.009825825 -0.00570476 0.08599996 0.009799957 -0.005999982 0.08599996 0.009825825 -0.006295144 0.08599996 0.009902477 -0.006581425 0.08599996 0.0100277 -0.006849944 0.08599996 0.01019769 -0.007092714 0.08599996 0.0104072 -0.007302224 0.08599996 0.01064997 -0.007472217 0.08599996 0.01091855 -0.007597446 0.08599996 0.01120477 -0.007674157 0.08599996 0.0115 -0.007699966 0.08599996 0.01179516 -0.007674157 0.08599996 0.01208138 -0.007597446 0.08599996 0.01234996 -0.007472217 0.08599996 0.01259273 -0.007302224 0.08599996 0.01280224 -0.007092714 0.08599996 0.01297223 -0.006849944 0.08599996 0.01309746 -0.006581425 0.08599996 0.01317417 -0.006295144 0.08599996 0.01319998 -0.005999982 0.08599996 0.01317417 -0.00570476 0.08599996 0.01309746 -0.005418539 0.08599996 0.01297223 -0.00514996 0.08599996 0.01280224 -0.00490725 0.08599996 0.01259273 -0.00469768 0.08599996 0.01234996 -0.004527747 0.08599996 0.01208138 -0.004402518 0.08599996 0.01179516 -0.004325807 0.08599996 0.0115 -0.004299998 0.08599996 0.01120477 -0.004325807 0.08599996 0.01091855 -0.004402518 0.08599996 0.01064997 -0.004527747 0.08599996 0.0104072 -0.00469768 0.08599996 0.01019769 -0.00490725 0.08599996 0.0100277 -0.00514996 0.08599996 0.009902477 -0.005418539 0.08599996 -0.01317417 -0.00570476 0.08599996 -0.01319998 -0.005999982 0.08599996 -0.01317417 -0.006295144 0.08599996 -0.01309746 -0.006581425 0.08599996 -0.01297223 -0.006849944 0.08599996 -0.01280224 -0.007092714 0.08599996 -0.01259273 -0.007302224 0.08599996 -0.01234996 -0.007472217 0.08599996 -0.01208138 -0.007597446 0.08599996 -0.01179516 -0.007674157 0.08599996 -0.0115 -0.007699966 0.08599996 -0.01120477 -0.007674157 0.08599996 -0.01091855 -0.007597446 0.08599996 -0.01064997 -0.007472217 0.08599996 -0.0104072 -0.007302224 0.08599996 -0.01019769 -0.007092714 0.08599996 -0.0100277 -0.006849944 0.08599996 -0.009902477 -0.006581425 0.08599996 -0.009825825 -0.006295144 0.08599996 -0.009799957 -0.005999982 0.08599996 -0.009825825 -0.00570476 0.08599996 -0.009902477 -0.005418539 0.08599996 -0.0100277 -0.00514996 0.08599996 -0.01019769 -0.00490725 0.08599996 -0.0104072 -0.00469768 0.08599996 -0.01064997 -0.004527747 0.08599996 -0.01091855 -0.004402518 0.08599996 -0.01120477 -0.004325807 0.08599996 -0.0115 -0.004299998 0.08599996 -0.01179516 -0.004325807 0.08599996 -0.01208138 -0.004402518 0.08599996 -0.01234996 -0.004527747 0.08599996 -0.01259273 -0.00469768 0.08599996 -0.01280224 -0.00490725 0.08599996 -0.01297223 -0.00514996 0.08599996 -0.01309746 -0.005418539 0.08599996 0.009825825 0.006295144 0.08599996 0.009799957 0.005999982 0.08599996 0.009825825 0.00570476 0.08599996 0.009902477 0.005418539 0.08599996 0.0100277 0.00514996 0.08599996 0.01019769 0.00490725 0.08599996 0.0104072 0.00469768 0.08599996 0.01064997 0.004527747 0.08599996 0.01091855 0.004402518 0.08599996 0.01120477 0.004325807 0.08599996 0.0115 0.004299998 0.08599996 0.01179516 0.004325807 0.08599996 0.01208138 0.004402518 0.08599996 0.01234996 0.004527747 0.08599996 0.01259273 0.00469768 0.08599996 0.01280224 0.00490725 0.08599996 0.01297223 0.00514996 0.08599996 0.01309746 0.005418539 0.08599996 0.01317417 0.00570476 0.08599996 0.01319998 0.005999982 0.08599996 0.01317417 0.006295144 0.08599996 0.01309746 0.006581425 0.08599996 0.01297223 0.006849944 0.08599996 0.01280224 0.007092714 0.08599996 0.01259273 0.007302224 0.08599996 0.01234996 0.007472217 0.08599996 0.01208138 0.007597446 0.08599996 0.01179516 0.007674157 0.08599996 0.0115 0.007699966 0.08599996 0.01120477 0.007674157 0.08599996 0.01091855 0.007597446 0.08599996 0.01064997 0.007472217 0.08599996 0.0104072 0.007302224 0.08599996 0.01019769 0.007092714 0.08599996 0.0100277 0.006849944 0.08599996 0.009902477 0.006581425 0.08599996 -0.01317417 0.006295144 0.08599996 -0.01319998 0.005999982 0.08599996 -0.01317417 0.00570476 0.08599996 -0.01309746 0.005418539 0.08599996 -0.01297223 0.00514996 0.08599996 -0.01280224 0.00490725 0.08599996 -0.01259273 0.00469768 0.08599996 -0.01234996 0.004527747 0.08599996 -0.01208138 0.004402518 0.08599996 -0.01179516 0.004325807 0.08599996 -0.0115 0.004299998 0.08599996 -0.01120477 0.004325807 0.08599996 -0.01091855 0.004402518 0.08599996 -0.01064997 0.004527747 0.08599996 -0.0104072 0.00469768 0.08599996 -0.01019769 0.00490725 0.08599996 -0.0100277 0.00514996 0.08599996 -0.009902477 0.005418539 0.08599996 -0.009825825 0.00570476 0.08599996 -0.009799957 0.005999982 0.08599996 -0.009825825 0.006295144 0.08599996 -0.009902477 0.006581425 0.08599996 -0.0100277 0.006849944 0.08599996 -0.01019769 0.007092714 0.08599996 -0.0104072 0.007302224 0.08599996 -0.01064997 0.007472217 0.08599996 -0.01091855 0.007597446 0.08599996 -0.01120477 0.007674157 0.08599996 -0.0115 0.007699966 0.08599996 -0.01179516 0.007674157 0.08599996 -0.01208138 0.007597446 0.08599996 -0.01234996 0.007472217 0.08599996 -0.01259273 0.007302224 0.08599996 -0.01280224 0.007092714 0.08599996 -0.01297223 0.006849944 0.08599996 -0.01309746 0.006581425 0.08599996 -0.01549994 -0.00999999 0.08599996 -0.01549994 0.00999999 0.08599996 0.01549994 -0.00999999 0.08599996 0.01549994 0.00999999 + + + + + + + + + + -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.2578995 0.9332503 0.2500636 -0.2578987 0.9332509 0.2500621 -0.2578989 0.8756503 0.4083194 -0.2578996 0.8756495 0.4083206 -0.2578997 0.7914409 0.5541743 -0.2578999 0.7914406 0.5541747 -0.2578999 0.6831865 0.6831865 -0.2578989 0.6831881 0.6831853 -0.2578992 0.5541735 0.7914416 -0.2579001 0.5541717 0.7914425 -0.2579002 0.4083228 0.8756483 -0.2579006 0.408322 0.8756486 -0.2579004 0.2500623 0.9332503 -0.2578999 0.2500634 0.9332503 -0.2579001 0.08420789 0.9624949 -0.2579002 0.08420759 0.962495 -0.2579002 -0.08420789 0.9624949 -0.2579001 -0.08420759 0.962495 -0.2578999 -0.2500636 0.9332502 -0.2578997 -0.2500634 0.9332503 -0.2578995 -0.408321 0.8756493 -0.2579001 -0.408322 0.8756486 -0.2579001 -0.5541758 0.7914397 -0.2578992 -0.5541745 0.7914409 -0.2578989 -0.6831867 0.6831867 -0.257898 -0.6831855 0.6831883 -0.2578977 -0.7914413 0.5541746 -0.2578998 -0.7914432 0.5541709 -0.2578997 -0.8756481 0.4083236 -0.2578988 -0.8756476 0.4083253 -0.2578988 -0.9332505 0.2500636 -0.2579023 -0.9332514 0.2500566 -0.2579021 -0.9624947 0.08420449 -0.2578998 -0.9624949 0.08420902 -0.2578999 -0.9624953 -0.08420455 -0.2579022 -0.9624943 -0.08420896 -0.2579021 -0.9332495 -0.2500634 -0.2578986 -0.9332523 -0.2500569 -0.2578988 -0.8756484 -0.4083237 -0.2578997 -0.8756473 -0.4083252 -0.2578997 -0.7914409 -0.5541743 -0.2578976 -0.7914437 -0.5541712 -0.257898 -0.6831868 -0.6831868 -0.257899 -0.6831852 -0.6831881 -0.2578992 -0.5541759 -0.7914398 -0.2579001 -0.5541744 -0.7914407 -0.2579001 -0.4083209 -0.8756493 -0.2578995 -0.4083222 -0.8756488 -0.2578998 -0.2500636 -0.9332502 -0.2578999 -0.2500634 -0.9332503 -0.2579001 -0.08420789 -0.9624949 -0.2579002 -0.08420759 -0.962495 -0.2579002 0.08420789 -0.9624949 -0.2579001 0.08420759 -0.962495 -0.2578999 0.2500623 -0.9332505 -0.2579004 0.2500633 -0.93325 -0.2579005 0.4083228 -0.8756482 -0.2579001 0.408322 -0.8756486 -0.2579001 0.5541734 -0.7914414 -0.2578991 0.5541719 -0.7914427 -0.2578989 0.6831867 -0.6831867 -0.2578999 0.6831879 -0.6831851 -0.2578999 0.7914409 -0.5541743 -0.2578996 0.7914406 -0.5541747 -0.2578995 0.8756501 -0.4083194 -0.2578989 0.8756497 -0.4083207 -0.2578988 0.9332505 -0.2500636 -0.2578996 0.9332507 -0.2500621 -0.2578995 0.962495 -0.08420968 -0.2578998 0.9624949 -0.08420902 -0.2578999 0.962495 0.08420968 -0.2578995 0.962495 0.08420902 0 0.9961945 0.08715808 0 0.9961945 -0.08715808 0 0.9961945 -0.08715808 0 0.9659259 -0.258819 0 0.9659259 -0.258819 0 0.906309 -0.4226157 0 0.906309 -0.4226157 0 0.8191514 -0.5735774 0 0.8191514 -0.5735774 0 0.7071068 -0.7071068 0 0.7071068 -0.7071068 0 0.5735765 -0.819152 0 0.5735765 -0.819152 0 0.4226194 -0.9063072 0 0.4226194 -0.9063072 0 0.2588177 -0.9659262 0 0.2588177 -0.9659262 0 0.08715623 -0.9961946 0 0.08715623 -0.9961946 0 -0.08715623 -0.9961946 0 -0.08715623 -0.9961946 0 -0.2588191 -0.9659259 0 -0.2588191 -0.9659259 0 -0.4226173 -0.9063082 0 -0.4226173 -0.9063082 0 -0.5735791 -0.8191503 0 -0.5735791 -0.8191503 0 -0.7071068 -0.7071068 0 -0.7071068 -0.7071068 0 -0.8191514 -0.5735774 0 -0.8191514 -0.5735774 0 -0.906307 -0.4226201 0 -0.906307 -0.4226201 0 -0.9659259 -0.258819 0 -0.9659259 -0.258819 0 -0.996195 -0.08715283 0 -0.996195 -0.08715283 0 -0.996195 0.08715283 0 -0.996195 0.08715283 0 -0.9659259 0.258819 0 -0.9659259 0.258819 0 -0.906307 0.4226201 0 -0.906307 0.4226201 0 -0.8191514 0.5735774 0 -0.8191514 0.5735774 0 -0.7071068 0.7071068 0 -0.7071068 0.7071068 0 -0.5735791 0.8191503 0 -0.5735791 0.8191503 0 -0.4226173 0.9063082 0 -0.4226173 0.9063082 0 -0.2588191 0.9659259 0 -0.2588191 0.9659259 0 -0.08715623 0.9961946 0 -0.08715623 0.9961946 0 0.08715623 0.9961946 0 0.08715623 0.9961946 0 0.2588177 0.9659262 0 0.2588177 0.9659262 0 0.4226194 0.9063072 0 0.4226194 0.9063072 0 0.5735765 0.819152 0 0.5735765 0.819152 0 0.7071068 0.7071068 0 0.7071068 0.7071068 0 0.8191514 0.5735774 0 0.8191514 0.5735774 0 0.906309 0.4226157 0 0.906309 0.4226157 0 0.9659259 0.258819 0 0.9659259 0.258819 0 0.9961945 0.08715808 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.7722777 -0.6352851 0 -0.7722777 -0.6352851 0 -0.6306509 -0.7760667 0 -0.6306509 -0.7760667 0 -0.5429039 -0.8397948 0 -0.5429039 -0.8397948 0 -0.3460603 -0.9382122 0 -0.3460603 -0.9382122 0 -0.2546181 -0.9670417 0 -0.2546181 -0.9670417 0 -0.09490621 -0.9954863 0 -0.09490621 -0.9954863 0 3.45295e-5 -1 0 3.45295e-5 -1 0 -0.05887776 -0.9982652 0 -0.05887776 -0.9982652 0 -0.2981731 -0.9545118 0 -0.2981731 -0.9545118 0 -0.4958173 -0.8684269 0 -0.4958173 -0.8684269 0 -0.6094341 -0.7928367 0 -0.6094341 -0.7928367 0 -0.7635667 -0.645729 0 -0.7635667 -0.645729 0 -0.8820481 -0.4711594 0 -0.8820481 -0.4711594 0 -0.9287409 -0.3707293 0 -0.9287409 -0.3707293 0 -0.9838172 -0.1791751 0 -0.9838172 -0.1791751 0 -0.9899735 -0.1412531 0 -0.9899735 -0.1412531 0 -0.9960477 -0.08881896 0 -0.9960477 -0.08881896 0 -0.9998367 -0.0180692 0 -0.9998367 -0.0180692 0 -0.999838 0.01799684 0 -0.999838 0.01799684 0 -0.9960539 0.08874928 0 -0.9960539 0.08874928 0 -0.9960409 0.0888971 0 -0.9960409 0.0888971 0 -0.9899904 0.1411346 0 -0.9899904 0.1411346 0 -0.9838247 0.179134 0 -0.9838247 0.179134 0 -0.9289273 0.3702623 0 -0.9289273 0.3702623 0 -0.9286651 0.3709194 0 -0.9286651 0.3709194 0 -0.8819281 0.4713839 0 -0.8819281 0.4713839 0 -0.7641311 0.6450609 0 -0.7641311 0.6450609 0 -0.608718 0.7933866 0 -0.608718 0.7933866 0 -0.4977206 0.8673374 0 -0.4977206 0.8673374 0 -0.4974566 0.8674889 0 -0.4974566 0.8674889 0 -0.2976646 0.9546705 0 -0.2976646 0.9546705 0 -0.2971867 0.9548194 0 -0.2971867 0.9548194 0 -0.05893182 0.9982621 0 -0.05893182 0.9982621 0 -0.05820262 0.9983047 0 -0.05820262 0.9983047 0 -3.45295e-5 1 0 -3.45295e-5 1 0 -0.09507429 0.9954702 0 -0.09507429 0.9954702 0 -0.2541832 0.9671562 0 -0.2541832 0.9671562 0 -0.3459872 0.9382393 0 -0.3459872 0.9382393 0 -0.5430359 0.8397094 0 -0.5430359 0.8397094 0 -0.6288342 0.7775394 0 -0.6288342 0.7775394 0 -0.7746717 0.6323635 0 -0.7746717 0.6323635 0 -0.8637206 0.503971 0 -0.8637206 0.503971 0 -0.8635583 0.5042492 0 -0.8635583 0.5042492 0 -0.8753085 0.4835649 0 -0.8753085 0.4835649 0 -0.8751557 0.4838415 0 -0.8751557 0.4838415 0 -0.9022796 0.4311513 0 -0.9022796 0.4311513 0 -0.9018772 0.4319925 0 -0.9018772 0.4319925 0 -0.9581071 0.2864102 0 -0.9581071 0.2864102 0 -0.9579 0.287102 0 -0.9579 0.287102 0 -0.9954845 0.09492355 0 -0.9954845 0.09492355 0 -0.9954473 0.09531319 0 -0.9954473 0.09531319 0 -0.9993872 0.03500366 0 -0.9993872 0.03500366 0 -0.9806272 0.1958834 0 -0.9806272 0.1958834 0 -0.8926705 0.4507098 0 -0.8926705 0.4507098 0 -0.750687 0.6606581 0 -0.750687 0.6606581 0 -0.6204246 0.7842662 0 -0.6204246 0.7842662 0 -0.5737308 0.8190439 0 -0.5737308 0.8190439 0 -0.5291237 0.8485448 0 -0.5291237 0.8485448 0 -0.459806 0.8880193 0 -0.459806 0.8880193 0 -0.4216651 0.9067516 0 -0.4216651 0.9067516 0 -0.3544655 0.9350692 0 -0.3544655 0.9350692 0 -0.3542239 0.9351607 0 -0.3542239 0.9351607 0 -0.3110716 0.9503865 0 -0.3110716 0.9503865 0 -0.2275794 0.9737595 0 -0.2275794 0.9737595 0 -0.1935768 0.9810851 0 -0.1935768 0.9810851 0 -0.1134494 0.9935438 0 -0.1134494 0.9935438 0 -0.06564998 0.9978427 0 -0.06564998 0.9978427 0 -3.41216e-5 1 0 -3.41216e-5 1 0 0.06558185 0.9978472 0 0.06558185 0.9978472 0 0.1133747 0.9935522 0 0.1133747 0.9935522 0 0.1935086 0.9810986 0 0.1935086 0.9810986 0 0.227524 0.9737725 0 0.227524 0.9737725 0 0.3114679 0.9502567 0 0.3114679 0.9502567 0 0.3536491 0.9353782 0 0.3536491 0.9353782 0 0.353825 0.9353117 0 0.353825 0.9353117 0 0.4216157 0.9067747 0 0.4216157 0.9067747 0 0.4604467 0.8876873 0 0.4604467 0.8876873 0 0.5283269 0.849041 0 0.5283269 0.849041 0 0.5745253 0.8184869 0 0.5745253 0.8184869 0 0.6201611 0.7844745 0 0.6201611 0.7844745 0 0.620369 0.7843101 0 0.620369 0.7843101 0 0.7457418 0.6662352 0 0.7457418 0.6662352 0 0.7467554 0.6650987 0 0.7467554 0.6650987 0 0.8966674 0.4427047 0 0.8966674 0.4427047 0 0.9805744 0.1961475 0 0.9805744 0.1961475 0 0.9993707 0.03547102 0 0.9993707 0.03547102 0 0.9955159 0.09459364 0 0.9955159 0.09459364 0 0.9577272 0.2876781 0 0.9577272 0.2876781 0 0.9039322 0.4276759 0 0.9039322 0.4276759 0 0.9042331 0.4270393 0 0.9042331 0.4270393 0 0.8751025 0.4839377 0 0.8751025 0.4839377 0 0.8614215 0.507891 0 0.8614215 0.507891 0 0.8617237 0.5073779 0 0.8617237 0.5073779 0 0.7770788 0.6294034 0 0.7770788 0.6294034 0 0.6301779 0.7764507 0 0.6301779 0.7764507 0 0.6304259 0.7762494 0 0.6304259 0.7762494 0 0.5427597 0.839888 0 0.5427597 0.839888 0 0.3460612 0.938212 0 0.3460612 0.938212 0 0.2541646 0.9671609 0 0.2541646 0.9671609 0 0.2546365 0.9670369 0 0.2546365 0.9670369 0 0.09427136 0.9955465 0 0.09427136 0.9955465 0 0.09481525 0.9954949 0 0.09481525 0.9954949 0 -3.453e-5 1 0 -3.453e-5 1 0 0.0583387 0.9982969 0 0.0583387 0.9982969 0 0.2978119 0.9546245 0 0.2978119 0.9546245 0 0.49705 0.8677219 0 0.49705 0.8677219 0 0.6085685 0.7935014 0 0.6085685 0.7935014 0 0.6090392 0.7931401 0 0.6090392 0.7931401 0 0.7637163 0.6455519 0 0.7637163 0.6455519 0 0.8819 0.4714366 0 0.8819 0.4714366 0 0.882203 0.4708691 0 0.882203 0.4708691 0 0.9284034 0.371574 0 0.9284034 0.371574 0 0.9288854 0.3703674 0 0.9288854 0.3703674 0 0.9838243 0.179136 0 0.9838243 0.179136 0 0.9838902 0.1787742 0 0.9838902 0.1787742 0 0.9899265 0.1415826 0 0.9899265 0.1415826 0 0.9899773 0.141226 0 0.9899773 0.141226 0 0.9960321 0.08899462 0 0.9960321 0.08899462 0 0.9960503 0.08879095 0 0.9960503 0.08879095 0 0.9998391 0.01793527 0 0.9998391 0.01793527 0 0.9998404 -0.01786625 0 0.9998404 -0.01786625 0 0.9960382 -0.08892655 0 0.9960382 -0.08892655 0 0.989984 -0.1411791 0 0.989984 -0.1411791 0 0.9899283 -0.14157 0 0.9899283 -0.14157 0 0.9839036 -0.1786999 0 0.9839036 -0.1786999 0 0.9838368 -0.1790677 0 0.9838368 -0.1790677 0 0.928986 -0.370115 0 0.928986 -0.370115 0 0.9285318 -0.3712531 0 0.9285318 -0.3712531 0 0.8823359 -0.4706202 0 0.8823359 -0.4706202 0 0.7632431 -0.6461114 0 0.7632431 -0.6461114 0 0.609861 -0.7925084 0 0.609861 -0.7925084 0 0.4955353 -0.8685878 0 0.4955353 -0.8685878 0 0.2984521 -0.9544246 0 0.2984521 -0.9544246 0 0.05890297 -0.9982637 0 0.05890297 -0.9982637 0 3.453e-5 -1 0 3.453e-5 -1 0 0.0949831 -0.9954789 0 0.0949831 -0.9954789 0 0.2546865 -0.9670237 0 0.2546865 -0.9670237 0 0.3461241 -0.9381887 0 0.3461241 -0.9381887 0 0.542893 -0.8398019 0 0.542893 -0.8398019 0 0.6307526 -0.7759839 0 0.6307526 -0.7759839 0 0.7755544 -0.6312807 0 0.7755544 -0.6312807 0 0.8615944 -0.5075972 0 0.8615944 -0.5075972 0 0.8611253 -0.508393 0 0.8611253 -0.508393 0 0.875771 -0.4827268 0 0.875771 -0.4827268 0 0.904264 -0.4269737 0 0.904264 -0.4269737 0 0.957319 -0.2890338 0 0.957319 -0.2890338 0 0.9955189 -0.09456264 0 0.9955189 -0.09456264 0 0.9993733 -0.0354005 0 0.9993733 -0.0354005 0 0.9805884 -0.1960773 0 0.9805884 -0.1960773 0 0.896695 -0.4426488 0 0.896695 -0.4426488 0 0.7501488 -0.6612691 0 0.7501488 -0.6612691 0 0.6204034 -0.784283 0 0.6204034 -0.784283 0 0.5746518 -0.818398 0 0.5746518 -0.818398 0 0.5745347 -0.8184803 0 0.5745347 -0.8184803 0 0.5272161 -0.8497313 0 0.5272161 -0.8497313 0 0.4617656 -0.8870021 0 0.4617656 -0.8870021 0 0.4203891 -0.9073439 0 0.4203891 -0.9073439 0 0.3552508 -0.9347711 0 0.3552508 -0.9347711 0 0.3114265 -0.9502703 0 0.3114265 -0.9502703 0 0.2261816 -0.9740851 0 0.2261816 -0.9740851 0 0.1933732 -0.9811253 0 0.1933732 -0.9811253 0 0.113654 -0.9935204 0 0.113654 -0.9935204 0 0.1134932 -0.9935388 0 0.1134932 -0.9935388 0 0.06563186 -0.9978439 0 0.06563186 -0.9978439 0 0.06546515 -0.9978548 0 0.06546515 -0.9978548 0 3.41216e-5 -1 0 3.41216e-5 -1 0 -0.06539374 -0.9978595 0 -0.06539374 -0.9978595 0 -0.1135919 -0.9935275 0 -0.1135919 -0.9935275 0 -0.1933068 -0.9811384 4.10264e-7 -0.1933068 -0.9811383 5.26425e-7 -0.2261016 -0.9741037 0 -0.2261016 -0.9741038 0 -0.3108493 -0.9504592 0 -0.3108493 -0.9504592 0 -0.3557628 -0.9345763 0 -0.3557628 -0.9345763 0 -0.4203138 -0.9073789 0 -0.4203138 -0.9073789 0 -0.4610014 -0.8873994 0 -0.4610014 -0.8873994 0 -0.5278465 -0.8493398 0 -0.5278465 -0.8493398 0 -0.5737901 -0.8190024 0 -0.5737901 -0.8190024 0 -0.6203489 -0.7843259 0 -0.6203489 -0.7843259 0 -0.7549605 -0.6557702 0 -0.7549605 -0.6557702 0 -0.8924872 -0.4510725 0 -0.8924872 -0.4510725 0 -0.9806538 -0.1957507 0 -0.9806538 -0.1957507 0 -0.9993848 -0.03507256 0 -0.9993848 -0.03507256 0 -0.9954745 -0.09502941 0 -0.9954745 -0.09502941 0 -0.9574528 -0.2885898 0 -0.9574528 -0.2885898 0 -0.9576641 -0.2878879 0 -0.9576641 -0.2878879 0 -0.9019563 -0.4318271 0 -0.9019563 -0.4318271 0 -0.9022498 -0.4312137 0 -0.9022498 -0.4312137 0 -0.8757585 -0.4827495 0 -0.8757585 -0.4827495 0 -0.8633606 -0.5045874 0 -0.8633606 -0.5045874 -0.9827014 -0.1851973 0 -0.9827014 -0.1851973 0 -0.939862 -0.3415541 0 -0.939862 -0.3415541 0 -0.8723053 -0.4889616 0 -0.8723053 -0.4889616 0 -0.7818216 -0.6235024 0 -0.7818216 -0.6235024 0 -0.6707862 -0.7416508 0 -0.6707862 -0.7416508 0 -0.5421063 -0.84031 0 -0.5421063 -0.84031 0 -0.3991739 -0.9168752 0 -0.3991739 -0.9168752 0 -0.2457782 -0.9693261 0 -0.2457782 -0.9693261 0 -0.08588624 -0.996305 0 -0.08588624 -0.996305 0 0.07626277 -0.9970878 0 0.07626277 -0.9970878 0 0.9006251 -0.4345968 0 0.9006251 -0.4345968 0 0.8159519 -0.5781198 0 0.8159519 -0.5781198 0 0.7085311 -0.7056795 0 0.7085311 -0.7056795 0 0.5814895 -0.8135539 0 0.5814895 -0.8135539 0 0.4382219 -0.8988669 0 0.4382219 -0.8988669 0 0.2828679 -0.9591589 0 0.2828679 -0.9591589 0 0.1195669 -0.9928262 0 0.1195669 -0.9928262 0 -0.04704785 -0.9988927 0 -0.04704785 -0.9988927 0 -0.212365 -0.9771904 0 -0.212365 -0.9771904 0 -0.37167 -0.928365 0 -0.37167 -0.928365 0 -0.5207814 -0.8536901 0 -0.5207814 -0.8536901 0 -0.6553425 -0.7553319 0 -0.6553425 -0.7553319 0 -0.7717263 -0.6359548 0 -0.7717263 -0.6359548 0 -0.8666394 -0.4989349 0 -0.8666394 -0.4989349 0 -0.9374983 -0.3479896 0 -0.9374983 -0.3479896 0 -0.9822795 -0.1874218 0 -0.9822795 -0.1874218 0 -0.3309685 -0.9436419 0 -0.3309685 -0.9436419 0 -0.174126 -0.9847234 0 -0.174126 -0.9847234 0 -0.01270073 -0.9999192 0 -0.01270073 -0.9999192 0 0.1490573 -0.9888285 0 0.1490573 -0.9888285 0 0.3068908 -0.9517447 0 0.3068908 -0.9517447 0 0.4566853 -0.8896284 0 0.4566853 -0.8896284 0 0.5944445 -0.8041366 0 0.5944445 -0.8041366 0 0.7165755 -0.6975094 0 0.7165755 -0.6975094 0 0.8198918 -0.5725184 0 0.8198918 -0.5725184 0 0.9016318 -0.4325045 0 0.9016318 -0.4325045 0 0.8266576 0.5627052 0 0.8266576 0.5627052 0 0.9086656 0.4175248 0 0.9086656 0.4175248 0 0.9653996 0.2607752 0 0.9653996 0.2607752 0 0.9953018 0.09682124 0 0.9953018 0.09682124 0 0.9975522 -0.06992518 0 0.9975522 -0.06992518 0 0.9720925 -0.2345983 0 0.9720925 -0.2345983 0 0.919577 -0.3929101 0 0.919577 -0.3929101 0 0.8415657 -0.5401548 0 0.8415657 -0.5401548 0 0.7401248 -0.6724696 0 0.7401248 -0.6724696 0 0.6181135 -0.786089 0 0.6181135 -0.786089 0 0.4789156 -0.8778609 0 0.4789156 -0.8778609 0 0.326474 -0.9452062 0 0.326474 -0.9452062 0 0.1648719 -0.9863151 0 0.1648719 -0.9863151 0 -0.001231253 -0.9999992 0 -0.001231253 -0.9999992 0 -0.1673933 -0.9858902 0 -0.1673933 -0.9858902 0 -0.3288172 -0.9443935 0 -0.3288172 -0.9443935 0 0.6517163 -0.7584629 0 0.6517163 -0.7584629 0 0.7657305 -0.6431617 0 0.7657305 -0.6431617 0 0.8596072 -0.5109555 0 0.8596072 -0.5109555 0 0.9308786 -0.3653285 0 0.9308786 -0.3653285 0 0.9776821 -0.2100894 0 0.9776821 -0.2100894 0 0.9987828 -0.04932367 0 0.9987828 -0.04932367 0 0.993625 0.1127357 0 0.993625 0.1127357 0 0.9623428 0.2718392 0 0.9623428 0.2718392 0 0.9057742 0.4237605 0 0.9057742 0.4237605 0 0.8253679 0.5645952 0 0.8253679 0.5645952 0 -0.6517226 0.7584574 0 -0.6517226 0.7584574 0 -0.7657305 0.6431617 0 -0.7657305 0.6431617 0 -0.8596072 0.5109555 0 -0.8596072 0.5109555 0 -0.9308786 0.3653285 0 -0.9308786 0.3653285 0 -0.9776836 0.2100833 0 -0.9776836 0.2100833 0 -0.9987828 0.04932445 0 -0.9987828 0.04932445 0 -0.993625 -0.1127357 0 -0.993625 -0.1127357 0 -0.9623428 -0.2718392 0 -0.9623428 -0.2718392 0 -0.9057716 -0.4237663 0 -0.9057716 -0.4237663 0 -0.8253728 -0.5645883 0 -0.8253728 -0.5645883 0 0.07401013 -0.9972575 0 0.07401013 -0.9972575 0 -0.09273242 -0.9956911 0 -0.09273242 -0.9956911 0 -0.2568881 -0.9664412 0 -0.2568881 -0.9664412 0 -0.4138029 -0.9103665 0 -0.4138029 -0.9103665 0 -0.5593126 -0.8289569 0 -0.5593126 -0.8289569 0 -0.6892602 -0.7245139 0 -0.6892602 -0.7245139 0 -0.8000233 -0.5999689 0 -0.8000233 -0.5999689 0 -0.8885849 -0.4587122 0 -0.8885849 -0.4587122 0 -0.9524437 -0.3047146 0 -0.9524437 -0.3047146 0 -0.9898312 -0.1422469 0 -0.9898312 -0.1422469 0 -0.9997094 0.02410656 0 -0.9997094 0.02410656 0 -0.9818072 0.1898809 0 -0.9818072 0.1898809 0 -0.9366033 0.3503919 0 -0.9366033 0.3503919 0 -0.8653893 0.5011002 0 -0.8653893 0.5011002 0 -0.7701407 0.637874 0 -0.7701407 0.637874 0 -0.6534664 0.7569556 0 -0.6534664 0.7569556 0 -0.07397788 0.9972599 0 -0.07397788 0.9972599 0 0.09273242 0.9956911 0 0.09273242 0.9956911 0 0.2568276 0.9664573 0 0.2568276 0.9664573 0 0.4138323 0.9103532 0 0.4138323 0.9103532 0 0.5593204 0.8289516 0 0.5593204 0.8289516 0 0.6892602 0.7245139 0 0.6892602 0.7245139 0 0.8000233 0.5999689 0 0.8000233 0.5999689 0 0.8885917 0.458699 0 0.8885917 0.458699 0 0.9524437 0.3047146 0 0.9524437 0.3047146 0 0.9898312 0.1422469 0 0.9898312 0.1422469 0 0.9997094 -0.02410733 0 0.9997094 -0.02410733 0 0.9818072 -0.1898809 0 0.9818072 -0.1898809 0 0.9366033 -0.3503919 0 0.9366033 -0.3503919 0 0.8653975 -0.5010861 0 0.8653975 -0.5010861 0 0.7701407 -0.637874 0 0.7701407 -0.637874 0 0.6534798 -0.7569439 0 0.6534798 -0.7569439 0 0.9827014 0.1851973 0 0.9827014 0.1851973 0 0.9398604 0.3415589 0 0.9398604 0.3415589 0 0.8723089 0.4889551 0 0.8723089 0.4889551 0 0.7818216 0.6235024 0 0.7818216 0.6235024 0 0.6707862 0.7416508 0 0.6707862 0.7416508 0 0.5421063 0.84031 0 0.5421063 0.84031 0 0.3991739 0.9168752 0 0.3991739 0.9168752 0 0.245764 0.9693297 0 0.245764 0.9693297 0 0.08588624 0.996305 0 0.08588624 0.996305 0 -0.07626277 0.9970878 0 -0.07626277 0.9970878 0 0.3309685 0.9436419 0 0.3309685 0.9436419 0 0.174126 0.9847234 0 0.174126 0.9847234 0 0.01271581 0.9999192 0 0.01271581 0.9999192 0 -0.1490721 0.9888263 0 -0.1490721 0.9888263 0 -0.3068908 0.9517447 0 -0.3068908 0.9517447 0 -0.4566731 0.8896347 0 -0.4566731 0.8896347 0 -0.5944492 0.8041332 0 -0.5944492 0.8041332 0 -0.7165828 0.6975019 0 -0.7165828 0.6975019 0 -0.8198918 0.5725184 0 -0.8198918 0.5725184 0 -0.9016289 0.4325104 0 -0.9016289 0.4325104 0 -0.8266576 -0.5627052 0 -0.8266576 -0.5627052 0 -0.9086599 -0.417537 0 -0.9086599 -0.417537 0 -0.9653996 -0.2607752 0 -0.9653996 -0.2607752 0 -0.9953022 -0.09681814 0 -0.9953022 -0.09681814 0 -0.9975522 0.06992518 0 -0.9975522 0.06992518 0 -0.9720925 0.2345983 0 -0.9720925 0.2345983 0 -0.919577 0.3929101 0 -0.919577 0.3929101 0 -0.8415657 0.5401548 0 -0.8415657 0.5401548 0 -0.7401102 0.6724857 0 -0.7401102 0.6724857 0 -0.6181135 0.786089 0 -0.6181135 0.786089 0 -0.4789406 0.8778473 0 -0.4789406 0.8778473 0 -0.326445 0.9452162 0 -0.326445 0.9452162 0 -0.1649034 0.9863097 0 -0.1649034 0.9863097 0 0.001263678 0.9999992 0 0.001263678 0.9999992 0 0.1673618 0.9858955 0 0.1673618 0.9858955 0 0.3288172 0.9443935 0 0.3288172 0.9443935 0 -0.9006312 0.4345841 0 -0.9006312 0.4345841 0 -0.815941 0.5781351 0 -0.815941 0.5781351 0 -0.7085473 0.7056635 0 -0.7085473 0.7056635 0 -0.5814895 0.8135539 0 -0.5814895 0.8135539 0 -0.4382219 0.8988669 0 -0.4382219 0.8988669 0 -0.2828381 0.9591677 0 -0.2828381 0.9591677 0 -0.1195669 0.9928262 0 -0.1195669 0.9928262 0 0.04704785 0.9988927 0 0.04704785 0.9988927 0 0.2123341 0.9771971 0 0.2123341 0.9771971 0 0.3716979 0.9283538 0 0.3716979 0.9283538 0 0.5207814 0.8536901 0 0.5207814 0.8536901 0 0.655324 0.755348 0 0.655324 0.755348 0 0.7717394 0.635939 0 0.7717394 0.635939 0 0.8666394 0.4989349 0 0.8666394 0.4989349 0 0.9374945 0.3480002 0 0.9374945 0.3480002 0 0.9822807 0.1874158 0 0.9822807 0.1874158 0 -0.9827014 -0.1851973 0 -0.9827014 -0.1851973 0 -0.9398604 -0.3415589 0 -0.9398604 -0.3415589 0 -0.8723089 -0.4889551 0 -0.8723089 -0.4889551 0 -0.7818216 -0.6235024 0 -0.7818216 -0.6235024 0 -0.6707862 -0.7416508 0 -0.6707862 -0.7416508 0 -0.5421063 -0.84031 0 -0.5421063 -0.84031 0 -0.3991739 -0.9168752 0 -0.3991739 -0.9168752 0 -0.245764 -0.9693297 0 -0.245764 -0.9693297 0 -0.08588624 -0.996305 0 -0.08588624 -0.996305 0 0.07626277 -0.9970878 0 0.07626277 -0.9970878 0 0.9006312 -0.4345841 0 0.9006312 -0.4345841 0 0.815941 -0.5781351 0 0.815941 -0.5781351 0 0.7085473 -0.7056635 0 0.7085473 -0.7056635 0 0.5814895 -0.8135539 0 0.5814895 -0.8135539 0 0.4382219 -0.8988669 0 0.4382219 -0.8988669 0 0.2828381 -0.9591677 0 0.2828381 -0.9591677 0 0.1195669 -0.9928262 0 0.1195669 -0.9928262 0 -0.04704785 -0.9988927 0 -0.04704785 -0.9988927 0 -0.2123341 -0.9771971 0 -0.2123341 -0.9771971 0 -0.3716979 -0.9283538 0 -0.3716979 -0.9283538 0 -0.5207814 -0.8536901 0 -0.5207814 -0.8536901 0 -0.655324 -0.755348 0 -0.655324 -0.755348 0 -0.7717394 -0.635939 0 -0.7717394 -0.635939 0 -0.8666394 -0.4989349 0 -0.8666394 -0.4989349 0 -0.9374945 -0.3480002 0 -0.9374945 -0.3480002 0 -0.9822807 -0.1874158 0 -0.9822807 -0.1874158 0 -0.3309685 -0.9436419 0 -0.3309685 -0.9436419 0 -0.174126 -0.9847234 0 -0.174126 -0.9847234 0 -0.01271581 -0.9999192 0 -0.01271581 -0.9999192 0 0.1490721 -0.9888263 0 0.1490721 -0.9888263 0 0.3068908 -0.9517447 0 0.3068908 -0.9517447 0 0.4566853 -0.8896284 0 0.4566853 -0.8896284 0 0.5944347 -0.8041439 0 0.5944347 -0.8041439 0 0.7165828 -0.6975019 0 0.7165828 -0.6975019 0 0.8198918 -0.5725184 0 0.8198918 -0.5725184 0 0.9016289 -0.4325104 0 0.9016289 -0.4325104 0 0.8266576 0.5627052 0 0.8266576 0.5627052 0 0.9086599 0.417537 0 0.9086599 0.417537 0 0.9653996 0.2607752 0 0.9653996 0.2607752 0 0.9953022 0.09681814 0 0.9953022 0.09681814 0 0.9975522 -0.06992518 0 0.9975522 -0.06992518 0 0.9720925 -0.2345983 0 0.9720925 -0.2345983 0 0.919577 -0.3929101 0 0.919577 -0.3929101 0 0.8415657 -0.5401548 0 0.8415657 -0.5401548 0 0.7401102 -0.6724857 0 0.7401102 -0.6724857 0 0.6181135 -0.786089 0 0.6181135 -0.786089 0 0.4789406 -0.8778473 0 0.4789406 -0.8778473 0 0.326445 -0.9452162 0 0.326445 -0.9452162 0 0.1649034 -0.9863097 0 0.1649034 -0.9863097 0 -0.001263678 -0.9999992 0 -0.001263678 -0.9999992 0 -0.1673618 -0.9858955 0 -0.1673618 -0.9858955 0 -0.3288172 -0.9443935 0 -0.3288172 -0.9443935 0 0.6517077 -0.7584702 0 0.6517077 -0.7584702 0 0.7657305 -0.6431617 0 0.7657305 -0.6431617 0 0.8596072 -0.5109555 0 0.8596072 -0.5109555 0 0.9308786 -0.3653285 0 0.9308786 -0.3653285 0 0.9776836 -0.2100833 0 0.9776836 -0.2100833 0 0.9987828 -0.04932445 0 0.9987828 -0.04932445 0 0.993625 0.1127357 0 0.993625 0.1127357 0 0.9623428 0.2718392 0 0.9623428 0.2718392 0 0.9057716 0.4237663 0 0.9057716 0.4237663 0 0.8253728 0.5645883 0 0.8253728 0.5645883 0 -0.6517313 0.75845 0 -0.6517313 0.75845 0 -0.7657305 0.6431617 0 -0.7657305 0.6431617 0 -0.8596072 0.5109555 0 -0.8596072 0.5109555 0 -0.9308786 0.3653285 0 -0.9308786 0.3653285 0 -0.9776821 0.2100894 0 -0.9776821 0.2100894 0 -0.9987828 0.04932367 0 -0.9987828 0.04932367 0 -0.993625 -0.1127357 0 -0.993625 -0.1127357 0 -0.9623428 -0.2718392 0 -0.9623428 -0.2718392 0 -0.9057742 -0.4237605 0 -0.9057742 -0.4237605 0 -0.8253679 -0.5645952 0 -0.8253679 -0.5645952 0 0.07397788 -0.9972599 0 0.07397788 -0.9972599 0 -0.09273242 -0.9956911 0 -0.09273242 -0.9956911 0 -0.2568276 -0.9664573 0 -0.2568276 -0.9664573 0 -0.4138566 -0.910342 0 -0.4138566 -0.910342 0 -0.5592903 -0.8289718 0 -0.5592903 -0.8289718 0 -0.6892602 -0.7245139 0 -0.6892602 -0.7245139 0 -0.8000233 -0.5999689 0 -0.8000233 -0.5999689 0 -0.8885917 -0.458699 0 -0.8885917 -0.458699 0 -0.9524437 -0.3047146 0 -0.9524437 -0.3047146 0 -0.9898312 -0.1422469 0 -0.9898312 -0.1422469 0 -0.9997094 0.02410733 0 -0.9997094 0.02410733 0 -0.9818072 0.1898809 0 -0.9818072 0.1898809 0 -0.9366033 0.3503919 0 -0.9366033 0.3503919 0 -0.8653975 0.5010861 0 -0.8653975 0.5010861 0 -0.7701407 0.637874 0 -0.7701407 0.637874 0 -0.6534478 0.7569716 0 -0.6534478 0.7569716 0 -0.07401013 0.9972575 0 -0.07401013 0.9972575 0 0.09273242 0.9956911 0 0.09273242 0.9956911 0 0.2568881 0.9664412 0 0.2568881 0.9664412 0 0.4137785 0.9103776 0 0.4137785 0.9103776 0 0.5593426 0.8289366 0 0.5593426 0.8289366 0 0.6892602 0.7245139 0 0.6892602 0.7245139 0 0.8000233 0.5999689 0 0.8000233 0.5999689 0 0.8885849 0.4587122 0 0.8885849 0.4587122 0 0.9524437 0.3047146 0 0.9524437 0.3047146 0 0.9898312 0.1422469 0 0.9898312 0.1422469 0 0.9997094 -0.02410656 0 0.9997094 -0.02410656 0 0.9818072 -0.1898809 0 0.9818072 -0.1898809 0 0.9366033 -0.3503919 0 0.9366033 -0.3503919 0 0.8653893 -0.5011002 0 0.8653893 -0.5011002 0 0.7701407 -0.637874 0 0.7701407 -0.637874 0 0.6534984 -0.7569279 0 0.6534984 -0.7569279 0 0.9827014 0.1851973 0 0.9827014 0.1851973 0 0.939862 0.3415541 0 0.939862 0.3415541 0 0.8723053 0.4889616 0 0.8723053 0.4889616 0 0.7818216 0.6235024 0 0.7818216 0.6235024 0 0.6707862 0.7416508 0 0.6707862 0.7416508 0 0.5421063 0.84031 0 0.5421063 0.84031 0 0.3991739 0.9168752 0 0.3991739 0.9168752 0 0.2457782 0.9693261 0 0.2457782 0.9693261 0 0.08588624 0.996305 0 0.08588624 0.996305 0 -0.07626277 0.9970878 0 -0.07626277 0.9970878 0 0.3309685 0.9436419 0 0.3309685 0.9436419 0 0.174126 0.9847234 0 0.174126 0.9847234 0 0.01270073 0.9999192 0 0.01270073 0.9999192 0 -0.1490573 0.9888285 0 -0.1490573 0.9888285 0 -0.3068908 0.9517447 0 -0.3068908 0.9517447 0 -0.4566731 0.8896347 0 -0.4566731 0.8896347 0 -0.5944589 0.804126 0 -0.5944589 0.804126 0 -0.7165755 0.6975094 0 -0.7165755 0.6975094 0 -0.8198918 0.5725184 0 -0.8198918 0.5725184 0 -0.9016318 0.4325045 0 -0.9016318 0.4325045 0 -0.8266576 -0.5627052 0 -0.8266576 -0.5627052 0 -0.9086656 -0.4175248 0 -0.9086656 -0.4175248 0 -0.9653996 -0.2607752 0 -0.9653996 -0.2607752 0 -0.9953018 -0.09682124 0 -0.9953018 -0.09682124 0 -0.9975522 0.06992518 0 -0.9975522 0.06992518 0 -0.9720925 0.2345983 0 -0.9720925 0.2345983 0 -0.919577 0.3929101 0 -0.919577 0.3929101 0 -0.8415657 0.5401548 0 -0.8415657 0.5401548 0 -0.7401248 0.6724696 0 -0.7401248 0.6724696 0 -0.6181135 0.786089 0 -0.6181135 0.786089 0 -0.4789156 0.8778609 0 -0.4789156 0.8778609 0 -0.326474 0.9452062 0 -0.326474 0.9452062 0 -0.1648719 0.9863151 0 -0.1648719 0.9863151 0 0.001231253 0.9999992 0 0.001231253 0.9999992 0 0.1673933 0.9858902 0 0.1673933 0.9858902 0 0.3288172 0.9443935 0 0.3288172 0.9443935 0 -0.9006251 0.4345968 0 -0.9006251 0.4345968 0 -0.8159519 0.5781198 0 -0.8159519 0.5781198 0 -0.7085311 0.7056795 0 -0.7085311 0.7056795 0 -0.5814895 0.8135539 0 -0.5814895 0.8135539 0 -0.4382219 0.8988669 0 -0.4382219 0.8988669 0 -0.2828679 0.9591589 0 -0.2828679 0.9591589 0 -0.1195669 0.9928262 0 -0.1195669 0.9928262 0 0.04704785 0.9988927 0 0.04704785 0.9988927 0 0.212365 0.9771904 0 0.212365 0.9771904 0 0.37167 0.928365 0 0.37167 0.928365 0 0.5207814 0.8536901 0 0.5207814 0.8536901 0 0.6553425 0.7553319 0 0.6553425 0.7553319 0 0.7717263 0.6359548 0 0.7717263 0.6359548 0 0.8666394 0.4989349 0 0.8666394 0.4989349 0 0.9374983 0.3479896 0 0.9374983 0.3479896 0 0.9822795 0.1874218 0 0.9822795 0.1874218 0 0 1 0 0 1 0 -0.04585337 0.9989482 0 -0.04585337 0.9989482 0 -0.1703538 0.985383 0 -0.1703538 0.985383 0 -0.3246104 0.9458479 0 -0.3246104 0.9458479 0 -0.4705771 0.8823589 0 -0.4705771 0.8823589 0 -0.6057053 0.7956891 0 -0.6057053 0.7956891 0 -0.6714749 0.7410272 0 -0.6714749 0.7410272 0 -0.7314742 0.6818691 0 -0.7314742 0.6818691 0 -0.8325819 0.553902 0 -0.8325819 0.553902 0 -0.9127509 0.4085164 0 -0.9127509 0.4085164 0 -0.9686967 0.2482471 0 -0.9686967 0.2482471 0 -0.9966714 0.08152329 0 -0.9966714 0.08152329 0 -0.9993753 -0.0353437 0 -0.9993753 -0.0353437 0 -0.9883318 -0.1523166 0 -0.9883318 -0.1523166 0 -0.9492704 -0.3144609 0 -0.9492704 -0.3144609 0 -0.8827293 -0.4698819 0 -0.8827293 -0.4698819 0 -0.790291 -0.6127317 0 -0.790291 -0.6127317 0 -0.6803026 -0.7329314 0 -0.6803026 -0.7329314 0 -0.5525475 -0.8334815 0 -0.5525475 -0.8334815 0 -0.4046183 -0.9144857 0 -0.4046183 -0.9144857 0 -0.2461814 -0.9692238 0 -0.2461814 -0.9692238 0 -0.08209788 -0.9966242 0 -0.08209788 -0.9966242 0 0.05285 -0.9986025 0 0.05285 -0.9986025 0 0.1856238 -0.982621 0 0.1856238 -0.982621 0 0.3417336 -0.9397968 0 0.3417336 -0.9397968 0 0.4888954 -0.8723425 0 0.4888954 -0.8723425 0 0.6233401 -0.781951 0 0.6233401 -0.781951 0 0.7378637 -0.6749498 0 0.7378637 -0.6749498 0 0.8347806 -0.5505828 0 0.8347806 -0.5505828 0 0.9140498 -0.405602 0 0.9140498 -0.405602 0 0.9689875 -0.24711 0 0.9689875 -0.24711 0 0.9966509 -0.08177423 0 0.9966509 -0.08177423 0 0.9993937 0.03481698 0 0.9993937 0.03481698 0 0.9884996 0.151224 0 0.9884996 0.151224 0 0.9497068 0.3131406 0 0.9497068 0.3131406 0 0.8836073 0.4682288 0 0.8836073 0.4682288 0 0.7917688 0.610821 0 0.7917688 0.610821 0 0.6818757 0.7314682 0 0.6818757 0.7314682 0 0.5538986 0.8325842 0 0.5538986 0.8325842 0 0.4058293 0.9139488 0 0.4058293 0.9139488 0 0.2466679 0.9691001 0 0.2466679 0.9691001 0 0.08198302 0.9966337 0 0.08198302 0.9966337 0 0 1 0 0 1 0 -0.05033028 0.9987327 0 -0.05033028 0.9987327 0 -0.1792637 0.9838011 0 -0.1792637 0.9838011 0 -0.3331462 0.9428752 0 -0.3331462 0.9428752 0 -0.4787281 0.8779632 0 -0.4787281 0.8779632 0 -0.6126578 0.7903482 0 -0.6126578 0.7903482 0 -0.731504 0.6818372 0 -0.731504 0.6818372 0 -0.832524 0.5539891 0 -0.832524 0.5539891 0 -0.9127689 0.4084764 0 -0.9127689 0.4084764 0 -0.9687083 0.2482018 0 -0.9687083 0.2482018 0 -0.9966696 0.08154523 0 -0.9966696 0.08154523 0 -0.999441 -0.03343546 0 -0.999441 -0.03343546 0 -0.9890488 -0.1475892 0 -0.9890488 -0.1475892 0 -0.9513471 -0.3081213 0 -0.9513471 -0.3081213 0 -0.886748 -0.4622531 0 -0.886748 -0.4622531 0 -0.7965066 -0.6046299 0 -0.7965066 -0.6046299 0 -0.6858513 -0.7277417 0 -0.6858513 -0.7277417 0 -0.5560684 -0.8311365 0 -0.5560684 -0.8311365 0 -0.4075593 -0.9131787 0 -0.4075593 -0.9131787 0 -0.2473363 -0.9689297 0 -0.2473363 -0.9689297 0 -0.08190542 -0.9966401 0 -0.08190542 -0.9966401 0 0.05507516 -0.9984822 0 0.05507516 -0.9984822 0 0.1894597 -0.9818885 0 0.1894597 -0.9818885 0 0.3444015 -0.9388224 0 0.3444015 -0.9388224 0 0.4909158 -0.871207 0 0.4909158 -0.871207 0 0.6251984 -0.7804659 0 0.6251984 -0.7804659 0 0.7372796 -0.6755877 0 0.7372796 -0.6755877 0 0.8327271 -0.5536836 0 0.8327271 -0.5536836 0 0.9130957 -0.4077453 0 0.9130957 -0.4077453 0 0.9687964 -0.2478576 0 0.9687964 -0.2478576 0 0.9966599 -0.08166372 0 0.9966599 -0.08166372 0 0.9994077 0.03441143 0 0.9994077 0.03441143 0 0.988582 0.1506839 0 0.988582 0.1506839 0 0.9497706 0.3129469 0 0.9497706 0.3129469 0 0.8836162 0.4682118 0 0.8836162 0.4682118 0 0.791758 0.610835 0 0.791758 0.610835 0 0.6817586 0.7315773 0 0.6817586 0.7315773 0 0.5537186 0.832704 0 0.5537186 0.832704 0 0.4057673 0.9139764 0 0.4057673 0.9139764 0 0.24666 0.9691022 0 0.24666 0.9691022 0 0.08196085 0.9966356 0 0.08196085 0.9966356 0 0 1 0 0 1 0 -0.04617601 0.9989334 0 -0.04617601 0.9989334 0 -0.173903 0.9847629 0 -0.173903 0.9847629 0 -0.3368589 0.9415552 0 -0.3368589 0.9415552 0 -0.4865927 0.8736289 0 -0.4865927 0.8736289 0 -0.6212701 0.7835965 0 -0.6212701 0.7835965 0 -0.7391828 0.6735048 0 -0.7391828 0.6735048 0 -0.834818 0.550526 0 -0.834818 0.550526 0 -0.9135836 0.4066509 0 -0.9135836 0.4066509 0 -0.97338 0.2291973 0 -0.97338 0.2291973 0 -0.9973134 0.0732516 0 -0.9973134 0.0732516 0 -0.9999544 -0.009556949 0 -0.9999544 -0.009556949 0 -0.9979861 -0.06343358 0 -0.9979861 -0.06343358 0 0 -1 0 0 -1 0 0.9980429 -0.06253278 0 0.9998472 -0.01747792 0 0.9998472 -0.01747792 0 0.9980403 -0.06257343 0 0.9980403 -0.06257343 0 0.9980429 -0.06253278 0 0.9974247 0.07172083 0 0.9974247 0.07172083 0 0.9757906 0.218707 0 0.9757906 0.218707 0 0.9322052 0.3619302 0 0.9322052 0.3619302 0 0.8659603 0.5001127 0 0.8659603 0.5001127 0 0.7754939 0.6313552 0 0.7754939 0.6313552 0 0.6611974 0.7502121 0 0.6611974 0.7502121 0 0.5254471 0.8508263 0 0.5254471 0.8508263 0 0.3789243 0.9254277 0 0.3789243 0.9254277 0 0.2294706 0.9733156 0 0.2294706 0.9733156 0 0.07493346 0.9971886 0 0.07493346 0.9971886 0 0 1 0 0 1 0 -0.008977532 0.9999598 0 -0.008977532 0.9999598 0 -0.09497433 0.9954797 0 -0.09497433 0.9954797 0 -0.257332 0.9663231 0 -0.257332 0.9663231 0 -0.4124575 0.9109768 0 -0.4124575 0.9109768 0 -0.5497021 0.8353608 0 -0.5497021 0.8353608 0 -0.6756613 0.7372123 0 -0.6756613 0.7372123 0 -0.783807 0.6210045 0 -0.783807 0.6210045 0 -0.8741722 0.4856161 0 -0.8741722 0.4856161 0 -0.927037 0.37497 0 -0.927037 0.37497 0 -0.9725207 0.2328164 0 -0.9725207 0.2328164 0 -0.9965671 0.0827884 0 -0.9965671 0.0827884 0 -0.9999123 -0.01324492 0 -0.9999123 -0.01324492 0 -0.9953975 -0.09583222 0 -0.9953975 -0.09583222 0 -0.926977 -0.3751182 0 -0.926977 -0.3751182 0 -0.8570438 -0.5152437 0 -0.8570438 -0.5152437 0 -0.7648015 -0.644266 0 -0.7648015 -0.644266 0 -0.6516235 -0.7585427 0 -0.6516235 -0.7585427 0 -0.5177163 -0.8555524 0 -0.5177163 -0.8555524 0 -0.3683965 -0.9296688 0 -0.3683965 -0.9296688 0 -0.2141071 -0.9768102 0 -0.2141071 -0.9768102 0 -0.08747547 -0.9961667 0 -0.08747547 -0.9961667 0 -0.01198559 -0.9999282 0 -0.01198559 -0.9999282 0 0 -1 0 0 -1 0 0.9970881 -0.076258 0 0.9970881 -0.076258 0 0.9994066 -0.03444564 0 0.9994066 -0.03444564 0 0.9965257 0.08328485 0 0.9965257 0.08328485 0 0.9789251 0.2042198 0 0.9789251 0.2042198 0 0.9233752 0.3838989 0 0.9233752 0.3838989 0 0.8605911 0.5092966 0 0.8605911 0.5092966 0 0.7740177 0.6331641 0 0.7740177 0.6331641 0 0.6656597 0.7462553 0 0.6656597 0.7462553 0 0.537879 0.8430221 0 0.537879 0.8430221 0 0.3960797 0.9182161 0 0.3960797 0.9182161 0 0.2381927 0.9712179 0 0.2381927 0.9712179 0 0.07685172 0.9970425 0 0.07685172 0.9970425 0 0 1 0 0 1 0 -0.05033129 0.9987325 0 -0.05033129 0.9987325 0 -0.1792623 0.9838013 0 -0.1792623 0.9838013 0 -0.3331476 0.9428747 0 -0.3331476 0.9428747 0 -0.4787275 0.8779636 0 -0.4787275 0.8779636 0 -0.6126578 0.7903482 0 -0.6126578 0.7903482 0 -0.731504 0.6818372 0 -0.731504 0.6818372 0 -0.832524 0.5539891 0 -0.832524 0.5539891 0 -0.9127689 0.4084764 0 -0.9127689 0.4084764 0 -0.9687083 0.2482018 0 -0.9687083 0.2482018 0 -0.9966696 0.08154523 0 -0.9966696 0.08154523 0 -0.9994395 -0.03347373 0 -0.9994395 -0.03347373 0 -0.989044 -0.1476215 0 -0.989044 -0.1476215 0 -0.9513339 -0.3081619 0 -0.9513339 -0.3081619 0 -0.8867307 -0.4622865 0 -0.8867307 -0.4622865 0 -0.79648 -0.6046649 0 -0.79648 -0.6046649 0 -0.6858325 -0.7277594 0 -0.6858325 -0.7277594 0 -0.5560786 -0.8311297 0 -0.5560786 -0.8311297 0 -0.4075624 -0.9131774 0 -0.4075624 -0.9131774 0 -0.2473395 -0.9689288 0 -0.2473395 -0.9689288 0 -0.08190506 -0.9966402 0 -0.08190506 -0.9966402 0 0.05507123 -0.9984824 0 0.05507123 -0.9984824 0 0.1894518 -0.98189 0 0.1894518 -0.98189 0 0.344392 -0.938826 0 0.344392 -0.938826 0 0.4909052 -0.871213 0 0.4909052 -0.871213 0 0.6251854 -0.7804763 0 0.6251854 -0.7804763 0 0.7372701 -0.6755981 0 0.7372701 -0.6755981 0 0.8327283 -0.5536819 0 0.8327283 -0.5536819 0 0.9130901 -0.4077578 0 0.9130901 -0.4077578 0 0.9687985 -0.2478498 0 0.9687985 -0.2478498 0 0.9966599 -0.08166462 0 0.9966599 -0.08166462 0 0.9994059 0.03446608 0 0.9994059 0.03446608 0 0.9885647 0.1507977 0 0.9885647 0.1507977 0 0.9497353 0.313054 0 0.9497353 0.313054 0 0.8835715 0.4682962 0 0.8835715 0.4682962 0 0.7917013 0.6109083 0 0.7917013 0.6109083 0 0.6817409 0.7315936 0 0.6817409 0.7315936 0 0.5537435 0.8326873 0 0.5537435 0.8326873 0 0.4057834 0.9139693 0 0.4057834 0.9139693 0 0.2466655 0.9691006 0 0.2466655 0.9691006 0 0.08196055 0.9966356 0 0.08196055 0.9966356 0 0.9996452 -0.02663451 0 0.9831709 -0.0491597 0.1759496 0.982164 -0.07899838 0.1706253 0.9840934 -0.04919362 0.1707051 0.9968236 -0.0796402 0 0 -1 0 0 -1 0 -0.9999661 -0.008230745 0 -0.9999661 -0.008230745 0 -0.9979515 -0.06397479 0 -0.9979515 -0.06397479 0 -0.8745831 0.4848756 0 -0.8745831 0.4848756 0 -0.9233713 0.3839083 0 -0.9233713 0.3839083 0 -0.9710142 0.2390222 0 -0.9710142 0.2390222 0 -0.9965586 0.08289223 0 -0.9965586 0.08289223 0 -0.02425831 0.9997057 0 -0.02425831 0.9997057 0 -0.1271204 0.9918872 0 -0.1271204 0.9918872 0 -0.2882758 0.9575474 0 -0.2882758 0.9575474 0 -0.4470441 0.8945119 0 -0.4470441 0.8945119 0 -0.5938333 0.8045881 0 -0.5938333 0.8045881 0 -0.7229768 0.6908722 0 -0.7229768 0.6908722 0 -0.8265339 0.5628869 0 -0.8265339 0.5628869 0 0 1 0 0 1 0 0.9990981 0.04246193 0 0.9990981 0.04246193 0 0.9875787 0.1571251 0 0.9875787 0.1571251 0 0.9533425 0.3018909 0 0.9533425 0.3018909 0 0.8961653 0.4437205 0 0.8961653 0.4437205 0 0.8151528 0.579246 0 0.8151528 0.579246 0 0.7452383 0.6667982 0 0.7452383 0.6667982 0 0.6637205 0.7479808 0 0.6637205 0.7479808 0 0.5258231 0.850594 0 0.5258231 0.850594 0 0.3781236 0.9257551 0 0.3781236 0.9257551 0 0.2289234 0.9734445 0 0.2289234 0.9734445 0 0.07469516 0.9972065 0 0.07469516 0.9972065 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.08416098 0.9964522 0 0.08416098 0.9964522 0 0.250101 0.9682198 0 0.250101 0.9682198 0 0.4089538 0.9125552 0 0.4089538 0.9125552 0 0.5562203 0.8310349 0 0.5562203 0.8310349 0 0.6877276 0.7259688 0 0.6877276 0.7259688 0 0.7997472 0.6003369 0 0.7997472 0.6003369 0 0.8891113 0.4576911 0 0.8891113 0.4576911 0 0.9532814 0.3020839 0 0.9532814 0.3020839 0 -0.9532814 0.3020839 0 -0.9532814 0.3020839 0 -0.8891113 0.4576911 0 -0.8891113 0.4576911 0 -0.7997472 0.6003369 0 -0.7997472 0.6003369 0 -0.6877276 0.7259688 0 -0.6877276 0.7259688 0 -0.5562203 0.8310349 0 -0.5562203 0.8310349 0 -0.4089538 0.9125552 0 -0.4089538 0.9125552 0 -0.250101 0.9682198 0 -0.250101 0.9682198 0 -0.08416098 0.9964522 0 -0.08416098 0.9964522 0 0 1 0 0 1 0 -0.07864964 0.9969024 0 -0.07864964 0.9969024 0 -0.2340003 0.9722365 0 -0.2340003 0.9722365 0 -0.3835635 0.9235145 0 -0.3835635 0.9235145 0 -0.5236357 0.8519423 0 -0.5236357 0.8519423 0 -0.6507499 0.7592921 0 -0.6507499 0.7592921 0 -0.7617647 0.6478539 0 -0.7617647 0.6478539 0 -0.853932 0.5203845 0 -0.853932 0.5203845 0 -0.8818147 0.4715961 0 -0.8818147 0.4715961 0 -0.9097872 0.4150749 0 -0.9097872 0.4150749 0 -0.9672042 0.2540001 0 -0.9672042 0.2540001 0 -0.9963382 0.0854991 0 -0.9963382 0.0854991 0 -1 0 0 -1 0 0 -0.9961954 0.08714765 0 -0.9961954 0.08714765 0 -0.9659332 0.2587918 0 -0.9659332 0.2587918 0 -0.9063268 0.4225774 0 -0.9063268 0.4225774 0 -0.8191886 0.5735242 0 -0.8191886 0.5735242 0 -0.7071636 0.70705 0 -0.7071636 0.70705 0 -0.5929746 0.8052211 0 -0.5929746 0.8052211 0 -0.4862543 0.8738173 0 -0.4862543 0.8738173 0 -0.3717085 0.9283496 0 -0.3717085 0.9283496 0 -0.2511794 0.9679406 0 -0.2511794 0.9679406 0 -0.1266096 0.9919526 0 -0.1266096 0.9919526 0 0 1 0 0 1 0 0 1 0 0.1266096 0.9919526 0 0.1266096 0.9919526 0 0.2511794 0.9679406 0 0.2511794 0.9679406 0 0.3717085 0.9283496 0 0.3717085 0.9283496 0 0.4862543 0.8738173 0 0.4862543 0.8738173 0 0.5929746 0.8052211 0 0.5929746 0.8052211 0 0.7071636 0.70705 0 0.7071636 0.70705 0 0.8191886 0.5735242 0 0.8191886 0.5735242 0 0.9063268 0.4225774 0 0.9063268 0.4225774 0 0.9659332 0.2587918 0 0.9659332 0.2587918 0 0.9961954 0.08714765 0 0.9961954 0.08714765 0 1 0 0 1 0 0 0.9963382 0.0854991 0 0.9963382 0.0854991 0 0.9672042 0.2540001 0 0.9672042 0.2540001 0 0.9097872 0.4150749 0 0.9097872 0.4150749 0 0.8818147 0.4715961 0 0.8818147 0.4715961 0 0.853932 0.5203845 0 0.853932 0.5203845 0 0.7617647 0.6478539 0 0.7617647 0.6478539 0 0.6507499 0.7592921 0 0.6507499 0.7592921 0 0.5236357 0.8519423 0 0.5236357 0.8519423 0 0.3835635 0.9235145 0 0.3835635 0.9235145 0 0.2340003 0.9722365 0 0.2340003 0.9722365 0 0.07864964 0.9969024 0 0.07864964 0.9969024 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.9786821 0.205381 0 0.9786821 0.205381 0 0.9990095 0.04449695 0 0.9990095 0.04449695 0 0.9930691 -0.1175326 0 0.9930691 -0.1175326 0 0.961026 -0.2764579 0 0.961026 -0.2764579 0 0.903702 -0.4281622 0 0.903702 -0.4281622 0 0.8226372 -0.5685666 0 0.8226372 -0.5685666 0 0.719945 -0.6940312 0 0.719945 -0.6940312 0 0.5983189 -0.801258 0 0.5983189 -0.801258 0 0.4609651 -0.8874182 0 0.4609651 -0.8874182 0 0.3114951 -0.9502478 0 0.3114951 -0.9502478 0 -0.6654773 -0.7464181 0 -0.6654773 -0.7464181 0 -0.5322632 -0.8465791 0 -0.5322632 -0.8465791 0 -0.3841874 -0.9232552 0 -0.3841874 -0.9232552 0 -0.225496 -0.974244 0 -0.225496 -0.974244 0 -0.06052637 -0.9981666 0 -0.06052637 -0.9981666 0 0.1061487 -0.9943503 0 0.1061487 -0.9943503 0 0.2698859 -0.9628923 0 0.2698859 -0.9628923 0 0.426067 -0.9046916 0 0.426067 -0.9046916 0 0.5704444 -0.8213362 0 0.5704444 -0.8213362 0 0.6989759 -0.7151452 0 0.6989759 -0.7151452 0 0.8080377 -0.5891307 0 0.8080377 -0.5891307 0 0.8946863 -0.4466951 0 0.8946863 -0.4466951 0 0.9564727 -0.2918217 0 0.9564727 -0.2918217 0 0.9916583 -0.1288945 0 0.9916583 -0.1288945 0 0.999291 0.03765159 0 0.999291 0.03765159 0 0.9791575 0.2031027 0 0.9791575 0.2031027 0 0.6671912 -0.7448866 0 0.6671912 -0.7448866 0 0.5380423 -0.8429179 0 0.5380423 -0.8429179 0 0.3947584 -0.918785 0 0.3947584 -0.918785 0 0.2410731 -0.970507 0 0.2410731 -0.970507 0 0.08107304 -0.9967082 0 0.08107304 -0.9967082 0 -0.08107542 -0.996708 0 -0.08107542 -0.996708 0 -0.2410731 -0.970507 0 -0.2410731 -0.970507 0 -0.3947584 -0.918785 0 -0.3947584 -0.918785 0 -0.5380423 -0.8429179 0 -0.5380423 -0.8429179 0 -0.6671912 -0.7448866 0 -0.6671912 -0.7448866 0 -0.9791575 0.2031027 0 -0.9791575 0.2031027 0 -0.999291 0.03765159 0 -0.999291 0.03765159 0 -0.9916583 -0.1288945 0 -0.9916583 -0.1288945 0 -0.9564547 -0.291881 0 -0.9564547 -0.291881 0 -0.8947122 -0.4466432 0 -0.8947122 -0.4466432 0 -0.8080377 -0.5891307 0 -0.8080377 -0.5891307 0 -0.6989759 -0.7151452 0 -0.6989759 -0.7151452 0 -0.5704444 -0.8213362 0 -0.5704444 -0.8213362 0 -0.426067 -0.9046916 0 -0.426067 -0.9046916 0 -0.2698859 -0.9628923 0 -0.2698859 -0.9628923 0 -0.1061487 -0.9943503 0 -0.1061487 -0.9943503 0 0.06052637 -0.9981666 0 0.06052637 -0.9981666 0 0.225496 -0.974244 0 0.225496 -0.974244 0 0.3841874 -0.9232552 0 0.3841874 -0.9232552 0 0.5322632 -0.8465791 0 0.5322632 -0.8465791 0 0.6654773 -0.7464181 0 0.6654773 -0.7464181 0 -0.3114951 -0.9502478 0 -0.3114951 -0.9502478 0 -0.4609651 -0.8874182 0 -0.4609651 -0.8874182 0 -0.5983045 -0.8012689 0 -0.5983045 -0.8012689 0 -0.719945 -0.6940312 0 -0.719945 -0.6940312 0 -0.8226513 -0.5685462 0 -0.8226513 -0.5685462 0 -0.903702 -0.4281622 0 -0.903702 -0.4281622 0 -0.961026 -0.2764579 0 -0.961026 -0.2764579 0 -0.9930691 -0.1175326 0 -0.9930691 -0.1175326 0 -0.9990095 0.04449695 0 -0.9990095 0.04449695 0 -0.9786821 0.205381 0 -0.9786821 0.205381 0 0.3115087 0.9502434 0 0.3115087 0.9502434 0 0.4609651 0.8874182 0 0.4609651 0.8874182 0 0.5983189 0.801258 0 0.5983189 0.801258 0 0.719945 0.6940312 0 0.719945 0.6940312 0 0.8226372 0.5685666 0 0.8226372 0.5685666 0 0.9036992 0.4281681 0 0.9036992 0.4281681 0 0.961026 0.2764579 0 0.961026 0.2764579 0 0.9930692 0.1175308 0 0.9930692 0.1175308 0 0.9990095 -0.0444976 0 0.9990095 -0.0444976 0 0.9786828 -0.2053779 0 0.9786828 -0.2053779 0 0.3136603 -0.9495353 0 0.3136603 -0.9495353 0 0.467036 -0.8842384 0 0.467036 -0.8842384 0 0.6074706 -0.7943422 0 0.6074706 -0.7943422 0 0.7309907 -0.6823876 0 0.7309907 -0.6823876 0 0.8341778 -0.5514957 0 0.8341778 -0.5514957 0 0.9141906 -0.4052845 0 0.9141906 -0.4052845 0 0.9688404 -0.2476861 0 0.9688404 -0.2476861 0 0.9965158 -0.08340477 0 0.9965158 -0.08340477 0 0.9965158 0.08340477 0 0.9965158 0.08340477 0 0.9688404 0.2476861 0 0.9688404 0.2476861 0 0.9141906 0.4052845 0 0.9141906 0.4052845 0 0.8341778 0.5514957 0 0.8341778 0.5514957 0 0.7309907 0.6823876 0 0.7309907 0.6823876 0 0.6074501 0.7943578 0 0.6074501 0.7943578 0 0.467036 0.8842384 0 0.467036 0.8842384 0 0.3136603 0.9495353 0 0.3136603 0.9495353 0 -0.3136603 0.9495353 0 -0.3136603 0.9495353 0 -0.467036 0.8842384 0 -0.467036 0.8842384 0 -0.6074501 0.7943578 0 -0.6074501 0.7943578 0 -0.7309907 0.6823876 0 -0.7309907 0.6823876 0 -0.8341778 0.5514957 0 -0.8341778 0.5514957 0 -0.9141906 0.4052845 0 -0.9141906 0.4052845 0 -0.9688404 0.2476861 0 -0.9688404 0.2476861 0 -0.9965158 0.08340477 0 -0.9965158 0.08340477 0 -0.9965158 -0.08340477 0 -0.9965158 -0.08340477 0 -0.9688404 -0.2476861 0 -0.9688404 -0.2476861 0 -0.9141906 -0.4052845 0 -0.9141906 -0.4052845 0 -0.8341778 -0.5514957 0 -0.8341778 -0.5514957 0 -0.7309907 -0.6823876 0 -0.7309907 -0.6823876 0 -0.6074706 -0.7943422 0 -0.6074706 -0.7943422 0 -0.467036 -0.8842384 0 -0.467036 -0.8842384 0 -0.3136603 -0.9495353 0 -0.3136603 -0.9495353 0 -0.9786828 -0.2053779 0 -0.9786828 -0.2053779 0 -0.9990095 -0.0444976 0 -0.9990095 -0.0444976 0 -0.9930692 0.1175308 0 -0.9930692 0.1175308 0 -0.961026 0.2764579 0 -0.961026 0.2764579 0 -0.9036992 0.4281681 0 -0.9036992 0.4281681 0 -0.8226513 0.5685462 0 -0.8226513 0.5685462 0 -0.719945 0.6940312 0 -0.719945 0.6940312 0 -0.5983045 0.8012689 0 -0.5983045 0.8012689 0 -0.4609651 0.8874182 0 -0.4609651 0.8874182 0 -0.3115087 0.9502434 0 -0.3115087 0.9502434 0 -0.6671828 0.744894 0 -0.6671828 0.744894 0 -0.5380423 0.8429179 0 -0.5380423 0.8429179 0 -0.394771 0.9187794 0 -0.394771 0.9187794 0 -0.2410731 0.970507 0 -0.2410731 0.970507 0 -0.08106046 0.9967092 0 -0.08106046 0.9967092 0 0.08105802 0.9967094 0 0.08105802 0.9967094 0 0.2410731 0.970507 0 0.2410731 0.970507 0 0.394771 0.9187794 0 0.394771 0.9187794 0 0.5380423 0.8429179 0 0.5380423 0.8429179 0 0.6671828 0.744894 0 0.6671828 0.744894 0 0.9791575 -0.2031027 0 0.9791575 -0.2031027 0 0.999291 -0.03765159 0 0.999291 -0.03765159 0 0.9916578 0.1288986 0 0.9916578 0.1288986 0 0.9564727 0.2918217 0 0.9564727 0.2918217 0 0.8946863 0.4466951 0 0.8946863 0.4466951 0 0.8080377 0.5891307 0 0.8080377 0.5891307 0 0.6989925 0.7151291 0 0.6989925 0.7151291 0 0.5704225 0.8213514 0 0.5704225 0.8213514 0 0.4260935 0.9046791 0 0.4260935 0.9046791 0 0.2698559 0.9629007 0 0.2698559 0.9629007 0 0.1061487 0.9943503 0 0.1061487 0.9943503 0 -0.06052637 0.9981666 0 -0.06052637 0.9981666 0 -0.2254652 0.9742512 0 -0.2254652 0.9742512 0 -0.3842151 0.9232436 0 -0.3842151 0.9232436 0 -0.5322632 0.8465791 0 -0.5322632 0.8465791 0 -0.6654773 0.7464181 0 -0.6654773 0.7464181 0 0.6654773 0.7464181 0 0.6654773 0.7464181 0 0.5322632 0.8465791 0 0.5322632 0.8465791 0 0.3842151 0.9232436 0 0.3842151 0.9232436 0 0.2254652 0.9742512 0 0.2254652 0.9742512 0 0.06052637 0.9981666 0 0.06052637 0.9981666 0 -0.1061487 0.9943503 0 -0.1061487 0.9943503 0 -0.2698559 0.9629007 0 -0.2698559 0.9629007 0 -0.4260935 0.9046791 0 -0.4260935 0.9046791 0 -0.5704225 0.8213514 0 -0.5704225 0.8213514 0 -0.6989925 0.7151291 0 -0.6989925 0.7151291 0 -0.8080377 0.5891307 0 -0.8080377 0.5891307 0 -0.8947122 0.4466432 0 -0.8947122 0.4466432 0 -0.9564547 0.291881 0 -0.9564547 0.291881 0 -0.9916578 0.1288986 0 -0.9916578 0.1288986 0 -0.999291 -0.03765159 0 -0.999291 -0.03765159 0 -0.9791575 -0.2031027 0 -0.9791575 -0.2031027 0 0.9786828 0.2053779 0 0.9786828 0.2053779 0 0.9990095 0.0444976 0 0.9990095 0.0444976 0 0.9930692 -0.1175308 0 0.9930692 -0.1175308 0 0.961026 -0.2764579 0 0.961026 -0.2764579 0 0.9036992 -0.4281681 0 0.9036992 -0.4281681 0 0.8226372 -0.5685666 0 0.8226372 -0.5685666 0 0.719945 -0.6940312 0 0.719945 -0.6940312 0 0.5983189 -0.801258 0 0.5983189 -0.801258 0 0.4609651 -0.8874182 0 0.4609651 -0.8874182 0 0.3115087 -0.9502434 0 0.3115087 -0.9502434 0 -0.6654773 -0.7464181 0 -0.6654773 -0.7464181 0 -0.5322632 -0.8465791 0 -0.5322632 -0.8465791 0 -0.3842151 -0.9232436 0 -0.3842151 -0.9232436 0 -0.2254652 -0.9742512 0 -0.2254652 -0.9742512 0 -0.06052637 -0.9981666 0 -0.06052637 -0.9981666 0 0.1061487 -0.9943503 0 0.1061487 -0.9943503 0 0.2698559 -0.9629007 0 0.2698559 -0.9629007 0 0.4260935 -0.9046791 0 0.4260935 -0.9046791 0 0.5704225 -0.8213514 0 0.5704225 -0.8213514 0 0.6989925 -0.7151291 0 0.6989925 -0.7151291 0 0.8080377 -0.5891307 0 0.8080377 -0.5891307 0 0.8946863 -0.4466951 0 0.8946863 -0.4466951 0 0.9564727 -0.2918217 0 0.9564727 -0.2918217 0 0.9916578 -0.1288986 0 0.9916578 -0.1288986 0 0.999291 0.03765159 0 0.999291 0.03765159 0 0.9791575 0.2031027 0 0.9791575 0.2031027 0 0.6671828 -0.744894 0 0.6671828 -0.744894 0 0.5380423 -0.8429179 0 0.5380423 -0.8429179 0 0.394771 -0.9187794 0 0.394771 -0.9187794 0 0.2410731 -0.970507 0 0.2410731 -0.970507 0 0.08105802 -0.9967094 0 0.08105802 -0.9967094 0 -0.08106046 -0.9967092 0 -0.08106046 -0.9967092 0 -0.2410731 -0.970507 0 -0.2410731 -0.970507 0 -0.394771 -0.9187794 0 -0.394771 -0.9187794 0 -0.5380423 -0.8429179 0 -0.5380423 -0.8429179 0 -0.6671828 -0.744894 0 -0.6671828 -0.744894 0 -0.9791575 0.2031027 0 -0.9791575 0.2031027 0 -0.999291 0.03765159 0 -0.999291 0.03765159 0 -0.9916578 -0.1288986 0 -0.9916578 -0.1288986 0 -0.9564547 -0.291881 0 -0.9564547 -0.291881 0 -0.8947122 -0.4466432 0 -0.8947122 -0.4466432 0 -0.8080377 -0.5891307 0 -0.8080377 -0.5891307 0 -0.6989925 -0.7151291 0 -0.6989925 -0.7151291 0 -0.5704225 -0.8213514 0 -0.5704225 -0.8213514 0 -0.4260935 -0.9046791 0 -0.4260935 -0.9046791 0 -0.2698559 -0.9629007 0 -0.2698559 -0.9629007 0 -0.1061487 -0.9943503 0 -0.1061487 -0.9943503 0 0.06052637 -0.9981666 0 0.06052637 -0.9981666 0 0.2254652 -0.9742512 0 0.2254652 -0.9742512 0 0.3842151 -0.9232436 0 0.3842151 -0.9232436 0 0.5322632 -0.8465791 0 0.5322632 -0.8465791 0 0.6654773 -0.7464181 0 0.6654773 -0.7464181 0 -0.3115087 -0.9502434 0 -0.3115087 -0.9502434 0 -0.4609651 -0.8874182 0 -0.4609651 -0.8874182 0 -0.5983045 -0.8012689 0 -0.5983045 -0.8012689 0 -0.719945 -0.6940312 0 -0.719945 -0.6940312 0 -0.8226513 -0.5685462 0 -0.8226513 -0.5685462 0 -0.9036992 -0.4281681 0 -0.9036992 -0.4281681 0 -0.961026 -0.2764579 0 -0.961026 -0.2764579 0 -0.9930692 -0.1175308 0 -0.9930692 -0.1175308 0 -0.9990095 0.0444976 0 -0.9990095 0.0444976 0 -0.9786828 0.2053779 0 -0.9786828 0.2053779 0 0.3114951 0.9502478 0 0.3114951 0.9502478 0 0.4609651 0.8874182 0 0.4609651 0.8874182 0 0.5983189 0.801258 0 0.5983189 0.801258 0 0.719945 0.6940312 0 0.719945 0.6940312 0 0.8226372 0.5685666 0 0.8226372 0.5685666 0 0.903702 0.4281622 0 0.903702 0.4281622 0 0.961026 0.2764579 0 0.961026 0.2764579 0 0.9930691 0.1175326 0 0.9930691 0.1175326 0 0.9990095 -0.04449695 0 0.9990095 -0.04449695 0 0.9786821 -0.205381 0 0.9786821 -0.205381 0 0.3136603 -0.9495353 0 0.3136603 -0.9495353 0 0.467036 -0.8842384 0 0.467036 -0.8842384 0 0.6074501 -0.7943578 0 0.6074501 -0.7943578 0 0.7309907 -0.6823876 0 0.7309907 -0.6823876 0 0.8341778 -0.5514957 0 0.8341778 -0.5514957 0 0.9141906 -0.4052845 0 0.9141906 -0.4052845 0 0.9688404 -0.2476861 0 0.9688404 -0.2476861 0 0.9965158 -0.08340477 0 0.9965158 -0.08340477 0 0.9965158 0.08340477 0 0.9965158 0.08340477 0 0.9688404 0.2476861 0 0.9688404 0.2476861 0 0.9141906 0.4052845 0 0.9141906 0.4052845 0 0.8341778 0.5514957 0 0.8341778 0.5514957 0 0.7309907 0.6823876 0 0.7309907 0.6823876 0 0.6074706 0.7943422 0 0.6074706 0.7943422 0 0.467036 0.8842384 0 0.467036 0.8842384 0 0.3136603 0.9495353 0 0.3136603 0.9495353 0 -0.3136603 0.9495353 0 -0.3136603 0.9495353 0 -0.467036 0.8842384 0 -0.467036 0.8842384 0 -0.6074706 0.7943422 0 -0.6074706 0.7943422 0 -0.7309907 0.6823876 0 -0.7309907 0.6823876 0 -0.8341778 0.5514957 0 -0.8341778 0.5514957 0 -0.9141906 0.4052845 0 -0.9141906 0.4052845 0 -0.9688404 0.2476861 0 -0.9688404 0.2476861 0 -0.9965158 0.08340477 0 -0.9965158 0.08340477 0 -0.9965158 -0.08340477 0 -0.9965158 -0.08340477 0 -0.9688404 -0.2476861 0 -0.9688404 -0.2476861 0 -0.9141906 -0.4052845 0 -0.9141906 -0.4052845 0 -0.8341778 -0.5514957 0 -0.8341778 -0.5514957 0 -0.7309907 -0.6823876 0 -0.7309907 -0.6823876 0 -0.6074501 -0.7943578 0 -0.6074501 -0.7943578 0 -0.467036 -0.8842384 0 -0.467036 -0.8842384 0 -0.3136603 -0.9495353 0 -0.3136603 -0.9495353 0 -0.9786821 -0.205381 0 -0.9786821 -0.205381 0 -0.9990095 -0.04449695 0 -0.9990095 -0.04449695 0 -0.9930691 0.1175326 0 -0.9930691 0.1175326 0 -0.961026 0.2764579 0 -0.961026 0.2764579 0 -0.903702 0.4281622 0 -0.903702 0.4281622 0 -0.8226513 0.5685462 0 -0.8226513 0.5685462 0 -0.719945 0.6940312 0 -0.719945 0.6940312 0 -0.5983045 0.8012689 0 -0.5983045 0.8012689 0 -0.4609651 0.8874182 0 -0.4609651 0.8874182 0 -0.3114951 0.9502478 0 -0.3114951 0.9502478 0 -0.6671912 0.7448866 0 -0.6671912 0.7448866 0 -0.5380423 0.8429179 0 -0.5380423 0.8429179 0 -0.3947584 0.918785 0 -0.3947584 0.918785 0 -0.2410731 0.970507 0 -0.2410731 0.970507 0 -0.08107542 0.996708 0 -0.08107542 0.996708 0 0.08107304 0.9967082 0 0.08107304 0.9967082 0 0.2410731 0.970507 0 0.2410731 0.970507 0 0.3947584 0.918785 0 0.3947584 0.918785 0 0.5380423 0.8429179 0 0.5380423 0.8429179 0 0.6671912 0.7448866 0 0.6671912 0.7448866 0 0.9791575 -0.2031027 0 0.9791575 -0.2031027 0 0.999291 -0.03765159 0 0.999291 -0.03765159 0 0.9916583 0.1288945 0 0.9916583 0.1288945 0 0.9564727 0.2918217 0 0.9564727 0.2918217 0 0.8946863 0.4466951 0 0.8946863 0.4466951 0 0.8080377 0.5891307 0 0.8080377 0.5891307 0 0.6989759 0.7151452 0 0.6989759 0.7151452 0 0.5704444 0.8213362 0 0.5704444 0.8213362 0 0.426067 0.9046916 0 0.426067 0.9046916 0 0.2698859 0.9628923 0 0.2698859 0.9628923 0 0.1061487 0.9943503 0 0.1061487 0.9943503 0 -0.06052637 0.9981666 0 -0.06052637 0.9981666 0 -0.225496 0.974244 0 -0.225496 0.974244 0 -0.3841874 0.9232552 0 -0.3841874 0.9232552 0 -0.5322632 0.8465791 0 -0.5322632 0.8465791 0 -0.6654773 0.7464181 0 -0.6654773 0.7464181 0 0.6654773 0.7464181 0 0.6654773 0.7464181 0 0.5322632 0.8465791 0 0.5322632 0.8465791 0 0.3841874 0.9232552 0 0.3841874 0.9232552 0 0.225496 0.974244 0 0.225496 0.974244 0 0.06052637 0.9981666 0 0.06052637 0.9981666 0 -0.1061487 0.9943503 0 -0.1061487 0.9943503 0 -0.2698859 0.9628923 0 -0.2698859 0.9628923 0 -0.426067 0.9046916 0 -0.426067 0.9046916 0 -0.5704444 0.8213362 0 -0.5704444 0.8213362 0 -0.6989759 0.7151452 0 -0.6989759 0.7151452 0 -0.8080377 0.5891307 0 -0.8080377 0.5891307 0 -0.8947122 0.4466432 0 -0.8947122 0.4466432 0 -0.9564547 0.291881 0 -0.9564547 0.291881 0 -0.9916583 0.1288945 0 -0.9916583 0.1288945 0 -0.999291 -0.03765159 0 -0.999291 -0.03765159 0 -0.9791575 -0.2031027 0 -0.9791575 -0.2031027 0 0 -1 0 0 -1 0 -0.04585337 -0.9989482 0 -0.04585337 -0.9989482 0 -0.1703538 -0.985383 0 -0.1703538 -0.985383 0 -0.3246104 -0.9458479 0 -0.3246104 -0.9458479 0 -0.4705771 -0.8823589 0 -0.4705771 -0.8823589 0 -0.6057053 -0.7956891 0 -0.6057053 -0.7956891 0 -0.6714749 -0.7410272 0 -0.6714749 -0.7410272 0 -0.7314742 -0.6818691 0 -0.7314742 -0.6818691 0 -0.8325819 -0.553902 0 -0.8325819 -0.553902 0 -0.9127509 -0.4085164 0 -0.9127509 -0.4085164 0 -0.9686967 -0.2482471 0 -0.9686967 -0.2482471 0 -0.9966714 -0.08152329 0 -0.9966714 -0.08152329 0 -0.9993753 0.0353437 0 -0.9993753 0.0353437 0 -0.9883318 0.1523166 0 -0.9883318 0.1523166 0 -0.9492704 0.3144609 0 -0.9492704 0.3144609 0 -0.8827293 0.4698819 0 -0.8827293 0.4698819 0 -0.790291 0.6127317 0 -0.790291 0.6127317 0 -0.6803026 0.7329314 0 -0.6803026 0.7329314 0 -0.5525475 0.8334815 0 -0.5525475 0.8334815 0 -0.4046183 0.9144857 0 -0.4046183 0.9144857 0 -0.2461814 0.9692238 0 -0.2461814 0.9692238 0 -0.08209788 0.9966242 0 -0.08209788 0.9966242 0 0.05285 0.9986025 0 0.05285 0.9986025 0 0.1856238 0.982621 0 0.1856238 0.982621 0 0.3417336 0.9397968 0 0.3417336 0.9397968 0 0.4888954 0.8723425 0 0.4888954 0.8723425 0 0.6233401 0.781951 0 0.6233401 0.781951 0 0.7378637 0.6749498 0 0.7378637 0.6749498 0 0.8347806 0.5505828 0 0.8347806 0.5505828 0 0.9140498 0.405602 0 0.9140498 0.405602 0 0.9689875 0.24711 0 0.9689875 0.24711 0 0.9966509 0.08177423 0 0.9966509 0.08177423 0 0.9993937 -0.03481698 0 0.9993937 -0.03481698 0 0.9884996 -0.151224 0 0.9884996 -0.151224 0 0.9497068 -0.3131406 0 0.9497068 -0.3131406 0 0.8836073 -0.4682288 0 0.8836073 -0.4682288 0 0.7917688 -0.610821 0 0.7917688 -0.610821 0 0.6818757 -0.7314682 0 0.6818757 -0.7314682 0 0.5538986 -0.8325842 0 0.5538986 -0.8325842 0 0.4058293 -0.9139488 0 0.4058293 -0.9139488 0 0.2466679 -0.9691001 0 0.2466679 -0.9691001 0 0.08198302 -0.9966337 0 0.08198302 -0.9966337 0 0 -1 0 0 -1 0 -0.05033028 -0.9987327 0 -0.05033028 -0.9987327 0 -0.1792637 -0.9838011 0 -0.1792637 -0.9838011 0 -0.3331462 -0.9428752 0 -0.3331462 -0.9428752 0 -0.4787281 -0.8779632 0 -0.4787281 -0.8779632 0 -0.6126578 -0.7903482 0 -0.6126578 -0.7903482 0 -0.731504 -0.6818372 0 -0.731504 -0.6818372 0 -0.832524 -0.5539891 0 -0.832524 -0.5539891 0 -0.9127689 -0.4084764 0 -0.9127689 -0.4084764 0 -0.9687083 -0.2482018 0 -0.9687083 -0.2482018 0 -0.9966696 -0.08154523 0 -0.9966696 -0.08154523 0 -0.999441 0.03343546 0 -0.999441 0.03343546 0 -0.9890488 0.1475892 0 -0.9890488 0.1475892 0 -0.9513471 0.3081213 0 -0.9513471 0.3081213 0 -0.886748 0.4622531 0 -0.886748 0.4622531 0 -0.7965066 0.6046299 0 -0.7965066 0.6046299 0 -0.6858513 0.7277417 0 -0.6858513 0.7277417 0 -0.5560684 0.8311365 0 -0.5560684 0.8311365 0 -0.4075593 0.9131787 0 -0.4075593 0.9131787 0 -0.2473363 0.9689297 0 -0.2473363 0.9689297 0 -0.08190542 0.9966401 0 -0.08190542 0.9966401 0 0.05507516 0.9984822 0 0.05507516 0.9984822 0 0.1894597 0.9818885 0 0.1894597 0.9818885 0 0.3444015 0.9388224 0 0.3444015 0.9388224 0 0.4909158 0.871207 0 0.4909158 0.871207 0 0.6251984 0.7804659 0 0.6251984 0.7804659 0 0.7372796 0.6755877 0 0.7372796 0.6755877 0 0.8327271 0.5536836 0 0.8327271 0.5536836 0 0.9130957 0.4077453 0 0.9130957 0.4077453 0 0.9687964 0.2478576 0 0.9687964 0.2478576 0 0.9966599 0.08166372 0 0.9966599 0.08166372 0 0.9994077 -0.03441143 0 0.9994077 -0.03441143 0 0.988582 -0.1506839 0 0.988582 -0.1506839 0 0.9497706 -0.3129469 0 0.9497706 -0.3129469 0 0.8836162 -0.4682118 0 0.8836162 -0.4682118 0 0.791758 -0.610835 0 0.791758 -0.610835 0 0.6817586 -0.7315773 0 0.6817586 -0.7315773 0 0.5537186 -0.832704 0 0.5537186 -0.832704 0 0.4057673 -0.9139764 0 0.4057673 -0.9139764 0 0.24666 -0.9691022 0 0.24666 -0.9691022 0 0.08196085 -0.9966356 0 0.08196085 -0.9966356 0 0 -1 0 0 -1 0 -0.04617601 -0.9989334 0 -0.04617601 -0.9989334 0 -0.173903 -0.9847629 0 -0.173903 -0.9847629 0 -0.3368589 -0.9415552 0 -0.3368589 -0.9415552 0 -0.4865927 -0.8736289 0 -0.4865927 -0.8736289 0 -0.6212701 -0.7835965 0 -0.6212701 -0.7835965 0 -0.7391828 -0.6735048 0 -0.7391828 -0.6735048 0 -0.834818 -0.550526 0 -0.834818 -0.550526 0 -0.9135836 -0.4066509 0 -0.9135836 -0.4066509 0 -0.97338 -0.2291973 0 -0.97338 -0.2291973 0 -0.9973134 -0.0732516 0 -0.9973134 -0.0732516 0 -0.9999544 0.009556949 0 -0.9999544 0.009556949 0 -0.9979861 0.06343358 0 -0.9979861 0.06343358 0 0 1 0 0 1 0 0.9980429 0.06253278 0 0.9998472 0.01747792 0 0.9998472 0.01747792 0 0.9980403 0.06257343 0 0.9980403 0.06257343 0 0.9980429 0.06253278 0 0.9974247 -0.07172083 0 0.9974247 -0.07172083 0 0.9757906 -0.218707 0 0.9757906 -0.218707 0 0.9322052 -0.3619302 0 0.9322052 -0.3619302 0 0.8659603 -0.5001127 0 0.8659603 -0.5001127 0 0.7754939 -0.6313552 0 0.7754939 -0.6313552 0 0.6611974 -0.7502121 0 0.6611974 -0.7502121 0 0.5254471 -0.8508263 0 0.5254471 -0.8508263 0 0.3789243 -0.9254277 0 0.3789243 -0.9254277 0 0.2294706 -0.9733156 0 0.2294706 -0.9733156 0 0.07493346 -0.9971886 0 0.07493346 -0.9971886 0 0 -1 0 0 -1 0 -0.008977532 -0.9999598 0 -0.008977532 -0.9999598 0 -0.09497433 -0.9954797 0 -0.09497433 -0.9954797 0 -0.257332 -0.9663231 0 -0.257332 -0.9663231 0 -0.4124575 -0.9109768 0 -0.4124575 -0.9109768 0 -0.5497021 -0.8353608 0 -0.5497021 -0.8353608 0 -0.6756613 -0.7372123 0 -0.6756613 -0.7372123 0 -0.783807 -0.6210045 0 -0.783807 -0.6210045 0 -0.8741722 -0.4856161 0 -0.8741722 -0.4856161 0 -0.927037 -0.37497 0 -0.927037 -0.37497 0 -0.9725207 -0.2328164 0 -0.9725207 -0.2328164 0 -0.9965671 -0.0827884 0 -0.9965671 -0.0827884 0 -0.9999123 0.01324492 0 -0.9999123 0.01324492 0 -0.9953975 0.09583222 0 -0.9953975 0.09583222 0 -0.926977 0.3751182 0 -0.926977 0.3751182 0 -0.8570438 0.5152437 0 -0.8570438 0.5152437 0 -0.7648015 0.644266 0 -0.7648015 0.644266 0 -0.6516235 0.7585427 0 -0.6516235 0.7585427 0 -0.5177163 0.8555524 0 -0.5177163 0.8555524 0 -0.3683965 0.9296688 0 -0.3683965 0.9296688 0 -0.2141071 0.9768102 0 -0.2141071 0.9768102 0 -0.08747547 0.9961667 0 -0.08747547 0.9961667 0 -0.01198559 0.9999282 0 -0.01198559 0.9999282 0 0 1 0 0 1 0 0.9970881 0.076258 0 0.9970881 0.076258 0 0.9994066 0.03444564 0 0.9994066 0.03444564 0 0.9965257 -0.08328485 0 0.9965257 -0.08328485 0 0.9789251 -0.2042198 0 0.9789251 -0.2042198 0 0.9233752 -0.3838989 0 0.9233752 -0.3838989 0 0.8605911 -0.5092966 0 0.8605911 -0.5092966 0 0.7740177 -0.6331641 0 0.7740177 -0.6331641 0 0.6656597 -0.7462553 0 0.6656597 -0.7462553 0 0.537879 -0.8430221 0 0.537879 -0.8430221 0 0.3960797 -0.9182161 0 0.3960797 -0.9182161 0 0.2381927 -0.9712179 0 0.2381927 -0.9712179 0 0.07685172 -0.9970425 0 0.07685172 -0.9970425 0 0 -1 0 0 -1 0 -0.05033129 -0.9987325 0 -0.05033129 -0.9987325 0 -0.1792623 -0.9838013 0 -0.1792623 -0.9838013 0 -0.3331476 -0.9428747 0 -0.3331476 -0.9428747 0 -0.4787275 -0.8779636 0 -0.4787275 -0.8779636 0 -0.6126578 -0.7903482 0 -0.6126578 -0.7903482 0 -0.731504 -0.6818372 0 -0.731504 -0.6818372 0 -0.832524 -0.5539891 0 -0.832524 -0.5539891 0 -0.9127689 -0.4084764 0 -0.9127689 -0.4084764 0 -0.9687083 -0.2482018 0 -0.9687083 -0.2482018 0 -0.9966696 -0.08154523 0 -0.9966696 -0.08154523 0 -0.9994395 0.03347373 0 -0.9994395 0.03347373 0 -0.989044 0.1476215 0 -0.989044 0.1476215 0 -0.9513339 0.3081619 0 -0.9513339 0.3081619 0 -0.8867307 0.4622865 0 -0.8867307 0.4622865 0 -0.79648 0.6046649 0 -0.79648 0.6046649 0 -0.6858325 0.7277594 0 -0.6858325 0.7277594 0 -0.5560786 0.8311297 0 -0.5560786 0.8311297 0 -0.4075624 0.9131774 0 -0.4075624 0.9131774 0 -0.2473395 0.9689288 0 -0.2473395 0.9689288 0 -0.08190506 0.9966402 0 -0.08190506 0.9966402 0 0.05507123 0.9984824 0 0.05507123 0.9984824 0 0.1894518 0.98189 0 0.1894518 0.98189 0 0.344392 0.938826 0 0.344392 0.938826 0 0.4909052 0.871213 0 0.4909052 0.871213 0 0.6251854 0.7804763 0 0.6251854 0.7804763 0 0.7372701 0.6755981 0 0.7372701 0.6755981 0 0.8327283 0.5536819 0 0.8327283 0.5536819 0 0.9130901 0.4077578 0 0.9130901 0.4077578 0 0.9687985 0.2478498 0 0.9687985 0.2478498 0 0.9966599 0.08166462 0 0.9966599 0.08166462 0 0.9994059 -0.03446608 0 0.9994059 -0.03446608 0 0.9885647 -0.1507977 0 0.9885647 -0.1507977 0 0.9497353 -0.313054 0 0.9497353 -0.313054 0 0.8835715 -0.4682962 0 0.8835715 -0.4682962 0 0.7917013 -0.6109083 0 0.7917013 -0.6109083 0 0.6817409 -0.7315936 0 0.6817409 -0.7315936 0 0.5537435 -0.8326873 0 0.5537435 -0.8326873 0 0.4057834 -0.9139693 0 0.4057834 -0.9139693 0 0.2466655 -0.9691006 0 0.2466655 -0.9691006 0 0.08196055 -0.9966356 0 0.08196055 -0.9966356 0 0.9996452 0.02663451 0 0.9831709 0.0491597 -0.1759496 0.982164 0.07899838 -0.1706253 0.9840934 0.04919362 -0.1707051 0.9968236 0.0796402 0 0 1 0 0 1 0 -0.9999661 0.008230745 0 -0.9999661 0.008230745 0 -0.9979515 0.06397479 0 -0.9979515 0.06397479 0 -0.8745831 -0.4848756 0 -0.8745831 -0.4848756 0 -0.9233713 -0.3839083 0 -0.9233713 -0.3839083 0 -0.9710142 -0.2390222 0 -0.9710142 -0.2390222 0 -0.9965586 -0.08289223 0 -0.9965586 -0.08289223 0 -0.02425831 -0.9997057 0 -0.02425831 -0.9997057 0 -0.1271204 -0.9918872 0 -0.1271204 -0.9918872 0 -0.2882758 -0.9575474 0 -0.2882758 -0.9575474 0 -0.4470441 -0.8945119 0 -0.4470441 -0.8945119 0 -0.5938333 -0.8045881 0 -0.5938333 -0.8045881 0 -0.7229768 -0.6908722 0 -0.7229768 -0.6908722 0 -0.8265339 -0.5628869 0 -0.8265339 -0.5628869 0 0 -1 0 0 -1 0 0.9990981 -0.04246193 0 0.9990981 -0.04246193 0 0.9875787 -0.1571251 0 0.9875787 -0.1571251 0 0.9533425 -0.3018909 0 0.9533425 -0.3018909 0 0.8961653 -0.4437205 0 0.8961653 -0.4437205 0 0.8151528 -0.579246 0 0.8151528 -0.579246 0 0.7452383 -0.6667982 0 0.7452383 -0.6667982 0 0.6637205 -0.7479808 0 0.6637205 -0.7479808 0 0.5258231 -0.850594 0 0.5258231 -0.850594 0 0.3781236 -0.9257551 0 0.3781236 -0.9257551 0 0.2289234 -0.9734445 0 0.2289234 -0.9734445 0 0.07469516 -0.9972065 0 0.07469516 -0.9972065 0 0 -0.08416098 -0.9964522 0 -0.08416098 -0.9964522 0 -0.250101 -0.9682198 0 -0.250101 -0.9682198 0 -0.4089538 -0.9125552 0 -0.4089538 -0.9125552 0 -0.5562203 -0.8310349 0 -0.5562203 -0.8310349 0 -0.6877276 -0.7259688 0 -0.6877276 -0.7259688 0 -0.7997472 -0.6003369 0 -0.7997472 -0.6003369 0 -0.8891113 -0.4576911 0 -0.8891113 -0.4576911 0 -0.9532814 -0.3020839 0 -0.9532814 -0.3020839 0 -0.9860946 -0.166185 0 -0.9860946 -0.166185 0 -0.9984517 -0.05562514 0 -0.9984517 -0.05562514 0 -0.9984517 0.05562514 0 -0.9984517 0.05562514 0 -0.9860946 0.166185 0 -0.9860946 0.166185 0 0.9860946 0.166185 0 0.9860946 0.166185 0 0.9984517 0.05562514 0 0.9984517 0.05562514 0 0.9984517 -0.05562514 0 0.9984517 -0.05562514 0 0.9860946 -0.166185 0 0.9860946 -0.166185 0 0.9532814 -0.3020839 0 0.9532814 -0.3020839 0 0.8891113 -0.4576911 0 0.8891113 -0.4576911 0 0.7997472 -0.6003369 0 0.7997472 -0.6003369 0 0.6877276 -0.7259688 0 0.6877276 -0.7259688 0 0.5562203 -0.8310349 0 0.5562203 -0.8310349 0 0.4089538 -0.9125552 0 0.4089538 -0.9125552 0 0.250101 -0.9682198 0 0.250101 -0.9682198 0 0.08416098 -0.9964522 0 0.08416098 -0.9964522 0 0 -1 0 0 -1 0 0.07864964 -0.9969024 0 0.07864964 -0.9969024 0 0.2340003 -0.9722365 0 0.2340003 -0.9722365 0 0.3835635 -0.9235145 0 0.3835635 -0.9235145 0 0.5236357 -0.8519423 0 0.5236357 -0.8519423 0 0.6507499 -0.7592921 0 0.6507499 -0.7592921 0 0.7617647 -0.6478539 0 0.7617647 -0.6478539 0 0.853932 -0.5203845 0 0.853932 -0.5203845 0 0.8818147 -0.4715961 0 0.8818147 -0.4715961 0 0.9097872 -0.4150749 0 0.9097872 -0.4150749 0 0.9672042 -0.2540001 0 0.9672042 -0.2540001 0 0.9963382 -0.0854991 0 0.9963382 -0.0854991 0 1 0 0 1 0 0 0.9961954 -0.08714765 0 0.9961954 -0.08714765 0 0.9659332 -0.2587918 0 0.9659332 -0.2587918 0 0.9063268 -0.4225774 0 0.9063268 -0.4225774 0 0.8191886 -0.5735242 0 0.8191886 -0.5735242 0 0.7071636 -0.70705 0 0.7071636 -0.70705 0 0.5929746 -0.8052211 0 0.5929746 -0.8052211 0 0.4862543 -0.8738173 0 0.4862543 -0.8738173 0 0.3717085 -0.9283496 0 0.3717085 -0.9283496 0 0.2511794 -0.9679406 0 0.2511794 -0.9679406 0 0.1266096 -0.9919526 0 0.1266096 -0.9919526 0 0 -1 0 0 -1 0 0 -1 0 -0.1266096 -0.9919526 0 -0.1266096 -0.9919526 0 -0.2511794 -0.9679406 0 -0.2511794 -0.9679406 0 -0.3717085 -0.9283496 0 -0.3717085 -0.9283496 0 -0.4862543 -0.8738173 0 -0.4862543 -0.8738173 0 -0.5929746 -0.8052211 0 -0.5929746 -0.8052211 0 -0.7071636 -0.70705 0 -0.7071636 -0.70705 0 -0.8191886 -0.5735242 0 -0.8191886 -0.5735242 0 -0.9063268 -0.4225774 0 -0.9063268 -0.4225774 0 -0.9659332 -0.2587918 0 -0.9659332 -0.2587918 0 -0.9961954 -0.08714765 0 -0.9961954 -0.08714765 0 -1 0 0 -1 0 0 -0.9963382 -0.0854991 0 -0.9963382 -0.0854991 0 -0.9672042 -0.2540001 0 -0.9672042 -0.2540001 0 -0.9097872 -0.4150749 0 -0.9097872 -0.4150749 0 -0.8818147 -0.4715961 0 -0.8818147 -0.4715961 0 -0.853932 -0.5203845 0 -0.853932 -0.5203845 0 -0.7617647 -0.6478539 0 -0.7617647 -0.6478539 0 -0.6507499 -0.7592921 0 -0.6507499 -0.7592921 0 -0.5236357 -0.8519423 0 -0.5236357 -0.8519423 0 -0.3835635 -0.9235145 0 -0.3835635 -0.9235145 0 -0.2340003 -0.9722365 0 -0.2340003 -0.9722365 0 -0.07864964 -0.9969024 0 -0.07864964 -0.9969024 0 0 -1 0 0 -1 -0.6039555 0.2064965 -0.7698032 0.9376154 0.06219106 -0.3420665 0.9291142 -0.3511083 -0.116059 -0.2768654 -0.9010105 -0.3339546 -0.9396095 0.1729976 -0.2953064 0.4464161 0.8630446 -0.2363612 0.5685797 0.770891 -0.2871311 -0.3695226 -0.3882623 -0.8442189 -0.3146646 -0.4574579 -0.8316962 0.3054874 -0.4240497 -0.8525605 0.1459946 0.539368 -0.8293176 -0.3054874 0.4240497 -0.8525605 -0.5197342 -0.1988708 -0.8308591 -0.4996103 -0.2071781 -0.8411105 -0.4959052 -0.1315202 -0.8583592 -0.4958997 -0.1315334 -0.8583604 -0.5526722 -0.05583584 -0.8315262 -0.5330663 -0.06696414 -0.8434193 -0.538494 -0.005462467 -0.8426116 -0.5638674 0.07547575 -0.8224092 -0.5447077 0.04308515 -0.8375185 -0.544707 0.04308336 -0.8375191 -0.5033459 0.3257598 -0.8003271 -0.4721543 0.2087637 -0.8564392 -0.4905926 0.166534 -0.8553277 -0.5138095 0.1241425 -0.8488748 -0.4207041 0.3414255 -0.8404978 -0.3468549 0.4031761 -0.8468416 -0.3383139 0.4696268 -0.8154719 -0.3772965 0.3792182 -0.844891 -0.1458036 0.4949184 -0.8566195 -0.1458221 0.4949114 -0.8566204 -0.2126474 0.5127977 -0.8317569 -0.2270074 0.4764056 -0.8494147 -0.2651492 0.4487286 -0.8534274 0.02707898 0.5321596 -0.8462108 -0.04872483 0.5511512 -0.8329815 -0.05792444 0.5377573 -0.8411074 -0.1022765 0.5141842 -0.8515598 0.1223622 0.5587024 -0.8202922 0.08705919 0.5458768 -0.8333302 0.08711361 0.5458904 -0.8333156 0.3146633 0.4574558 -0.8316978 0.258942 0.4591161 -0.8498008 0.2088391 0.4640179 -0.8608563 0.3146631 0.4574559 -0.8316978 0.3270573 0.4624681 -0.8241097 0.3991091 0.4193622 -0.8153816 0.3418459 0.45169 -0.8240858 0.3695226 0.3882623 -0.8442189 0.4592204 0.2348554 -0.8567144 0.4228298 0.3295556 -0.8441612 0.4429473 0.3235696 -0.8361222 0.4052751 0.3553845 -0.8422908 0.4958983 0.1315352 -0.8583609 0.4959046 0.13152 -0.8583596 0.4996094 0.2071785 -0.8411109 0.5197387 0.1988689 -0.8308567 0.4592155 0.2348676 -0.8567137 0.5526722 0.05583584 -0.8315262 0.5330668 0.06696391 -0.843419 0.538494 0.005462467 -0.8426116 0.5585222 -0.09568375 -0.8239524 0.5540506 -0.1338766 -0.8216478 0.5638673 -0.07547634 -0.8224093 0.5447082 -0.0430864 -0.8375181 0.5447066 -0.04308235 -0.8375193 0.4721553 -0.2087641 -0.8564386 0.4905964 -0.1665273 -0.8553268 0.5138095 -0.1241425 -0.8488748 0.4802671 -0.3046439 -0.8225178 0.4206989 -0.3414289 -0.8404991 0.4739594 -0.3067058 -0.8254054 0.4739026 -0.3067413 -0.8254248 0.3468549 -0.4031761 -0.8468416 0.3383145 -0.4696221 -0.8154743 0.3772957 -0.3792174 -0.8448918 0.1458036 -0.4949184 -0.8566195 0.1458191 -0.4949125 -0.8566203 0.2126467 -0.5127996 -0.8317559 0.2270074 -0.4764056 -0.8494147 0.2651492 -0.4487286 -0.8534274 -0.08707135 -0.5458815 -0.8333259 -0.02707934 -0.5321598 -0.8462108 0.04872471 -0.5511509 -0.8329818 0.05792379 -0.5377576 -0.8411073 0.1022765 -0.5141842 -0.8515598 -0.08705931 -0.5458784 -0.8333291 -0.1223603 -0.5587033 -0.8202919 -0.147796 -0.5460419 -0.8246179 -0.1420694 -0.5481581 -0.8242202 -0.1459946 -0.539368 -0.8293176 -0.3146566 -0.4574561 -0.8317001 -0.2589657 -0.4591156 -0.8497938 -0.2088371 -0.4640204 -0.8608555 -0.3418459 -0.45169 -0.8240858 -0.4592161 -0.2348663 -0.8567137 -0.4592204 -0.2348554 -0.8567144 -0.4228298 -0.3295556 -0.8441612 -0.4429473 -0.3235696 -0.8361222 -0.4052751 -0.3553845 -0.8422908 0.8036985 0.4484288 -0.3911269 0.7892108 0.4740883 -0.3903673 0.7729076 0.5264292 -0.3542403 0.6795499 0.6408101 -0.3571755 0.7716835 0.525604 -0.3581129 0.7716857 0.5255986 -0.3581163 0.5495812 0.7451633 -0.3777461 0.610762 0.6900355 -0.3883564 0.6391854 0.6574079 -0.39907 0.7205564 0.6794885 -0.1381797 0.7205641 0.6794816 -0.1381745 0.5685847 0.7708884 -0.2871283 0.4793704 0.7785071 -0.4051306 0.4276409 0.826741 -0.3655444 0.317898 0.8454556 -0.4291221 0.3519346 0.8632643 -0.3618242 0.4464178 0.863044 -0.2363606 0.04611337 0.9245201 -0.3783333 0.1296279 0.9199212 -0.3700563 0.1414597 0.9117847 -0.385536 0.2767988 0.9010207 -0.3339823 0.276871 0.9010058 -0.3339627 -0.02826058 0.9220355 -0.3860724 -0.03598994 0.9166889 -0.3979775 0.04604059 0.9245187 -0.3783454 -0.1913194 0.8943095 -0.4044842 -0.1804209 0.9021713 -0.3918358 -0.1804854 0.9021564 -0.3918406 -0.3495955 0.843052 -0.408713 -0.3377881 0.8541016 -0.3954866 -0.2603409 0.8802025 -0.3968203 -0.6067948 0.700291 -0.3760219 -0.5370717 0.7444515 -0.3966686 -0.4963502 0.7638064 -0.412597 -0.4702671 0.7939481 -0.3853509 -0.470256 0.7939543 -0.3853515 -0.6067863 0.7002978 -0.3760232 -0.6290468 0.6620957 -0.4073442 -0.7163597 0.6017455 -0.3531731 -0.7421681 0.5364739 -0.4017241 -0.7461786 0.5198103 -0.4159505 -0.7163477 0.6017579 -0.3531762 -0.9291222 0.3511047 -0.116006 -0.9291145 0.3511232 -0.1160119 -0.8228293 0.3722303 -0.429414 -0.8224682 0.4703074 -0.3199331 -0.8224676 0.4703081 -0.3199333 -0.905704 0.2567303 -0.3373275 -0.8937305 0.1645482 -0.4173361 -0.8868018 0.2464787 -0.390936 -0.9253184 0.02215635 -0.3785434 -0.9404303 0.07776296 -0.3309739 -0.9559034 0.02288722 -0.292788 -0.9375629 -0.06231284 -0.3421884 -0.8765091 -0.2938006 -0.3813307 -0.8802369 -0.2853004 -0.3791922 -0.8927826 -0.2229959 -0.3914232 -0.9229609 -0.1444884 -0.3567438 -0.9203646 -0.1736887 -0.350373 -0.9316778 -0.1458545 -0.3327205 -0.8271953 -0.395206 -0.39945 -0.8271842 -0.3952366 -0.3994424 -0.8237521 -0.4126207 -0.3888145 -0.8306984 -0.3969056 -0.3903923 -0.8456432 -0.350674 -0.4023869 -0.8784423 -0.284692 -0.3837832 -0.8784326 -0.2847183 -0.3837859 -0.803703 -0.4484193 -0.3911286 -0.7892114 -0.4740859 -0.3903688 -0.7729076 -0.5264292 -0.3542403 -0.7715519 -0.5293659 -0.3528164 -0.7716845 -0.5256017 -0.3581144 -0.7205592 -0.6794859 -0.1381778 -0.7205641 -0.6794816 -0.1381745 -0.8070355 -0.5396823 -0.2396598 -0.6795499 -0.6408101 -0.3571755 -0.7716835 -0.525604 -0.3581129 -0.5685766 -0.7708899 -0.2871401 -0.5685818 -0.7708872 -0.2871371 -0.5977699 -0.7050083 -0.3816209 -0.5495812 -0.7451633 -0.3777461 -0.4780714 -0.8028618 -0.356175 -0.3519797 -0.8632786 -0.3617462 -0.4463943 -0.8630537 -0.2363692 -0.4464272 -0.86304 -0.2363572 -0.04606831 -0.9245194 -0.3783408 0.02825856 -0.9220369 -0.3860693 0.03598994 -0.9166889 -0.3979775 -0.04604059 -0.9245187 -0.3783454 0.1913214 -0.894308 -0.4044865 0.1804209 -0.9021713 -0.3918358 0.1804423 -0.9021663 -0.3918374 0.3495932 -0.8430528 -0.4087134 0.3377878 -0.8541006 -0.3954891 0.2603406 -0.8802013 -0.3968228 0.6067825 -0.7002996 -0.3760259 0.5370717 -0.7444515 -0.3966686 0.4963521 -0.7638055 -0.4125962 0.4702675 -0.793949 -0.3853486 0.4702693 -0.7939479 -0.3853484 0.6067878 -0.7002956 -0.3760251 0.6290468 -0.6620957 -0.4073442 0.7163489 -0.6017538 -0.3531805 0.7421696 -0.5364681 -0.4017292 0.7461814 -0.5197976 -0.4159613 0.716348 -0.6017548 -0.3531807 0.9291144 -0.3511069 -0.1160621 0.9291104 -0.3511165 -0.1160652 0.8228221 -0.3722183 -0.4294382 0.8224627 -0.4703066 -0.3199481 0.8224604 -0.47031 -0.3199492 0.8982792 -0.02153486 -0.4388974 0.9396095 -0.1729976 -0.2953064 0.9057021 -0.2567346 -0.3373296 0.893728 -0.1645478 -0.4173421 0.8867992 -0.246478 -0.390942 0.9253184 -0.02215653 -0.3785433 0.9404296 -0.07775998 -0.3309769 0.9559032 -0.02288609 -0.2927887 0.9375629 0.06231284 -0.3421884 0.9316775 0.1458554 -0.3327211 0.8765043 0.2938115 -0.3813334 0.880242 0.2852886 -0.3791892 0.8927847 0.2229975 -0.3914174 0.9229602 0.1444991 -0.3567416 0.8271953 0.395206 -0.39945 0.8271842 0.3952366 -0.3994424 0.8237525 0.4126185 -0.3888159 0.8306979 0.3969054 -0.3903934 0.8456457 0.3506641 -0.4023903 0.87844 0.2846912 -0.383789 0.8784303 0.2847176 -0.3837918 0.7093157 0.4861168 -0.5104524 0.7093135 0.4861198 -0.5104528 0.7428006 0.4053656 -0.5328471 0.7428023 0.4053634 -0.5328463 0.7772423 0.3223109 -0.5403797 0.7772493 0.3223021 -0.5403748 0.8116927 0.2392408 -0.5328404 0.8116842 0.2392508 -0.5328489 0.8451732 0.158492 -0.5104534 0.845176 0.1584889 -0.5104497 0.5988466 0.4873399 -0.6355175 0.5988443 0.4873424 -0.635518 0.6405315 0.3868127 -0.663397 0.6405351 0.3868091 -0.6633955 0.683417 0.2833989 -0.672775 0.683414 0.2834017 -0.672777 0.7263 0.1799812 -0.6633966 0.7263013 0.1799801 -0.6633954 0.7679865 0.07945597 -0.6355183 0.7679908 0.07945263 -0.6355136 0.4718508 0.4750198 -0.7427738 0.4718536 0.4750176 -0.7427735 0.5205778 0.3575192 -0.7753572 0.5205733 0.3575226 -0.7753587 0.570694 0.236656 -0.7863219 0.570695 0.2366554 -0.7863215 0.620817 0.1157855 -0.775358 0.6208167 0.1157858 -0.7753582 0.6695383 -0.001706838 -0.7427756 0.6695388 -0.001707136 -0.7427752 0.9203646 0.1736888 -0.350373 0.8767594 0.08232301 -0.4738313 0.8767608 0.08232164 -0.4738289 0.8073151 -0.01538693 -0.58992 0.8073194 -0.01538956 -0.5899141 0.7155081 -0.1125599 -0.689477 0.7155069 -0.1125593 -0.6894783 0.6039555 -0.2064965 -0.7698032 0.6039543 -0.2064961 -0.7698042 0.4888159 -0.2864266 -0.8240259 0.5033497 -0.3257704 -0.8003203 0.7715532 0.5293633 -0.3528177 0.6777298 0.5622879 -0.4738299 0.6777275 0.5622908 -0.4738296 0.559518 0.5821813 -0.5899191 0.5595121 0.5821873 -0.5899188 0.4258835 0.5858703 -0.6894776 0.425887 0.5858675 -0.6894778 0.2805933 0.5732977 -0.7698034 0.2805891 0.5733003 -0.769803 0.1420688 0.5481594 -0.8242195 0.1477879 0.5460459 -0.8246166 0.8786787 -0.2853536 -0.3827494 0.8246485 -0.3757535 -0.422805 0.8246484 -0.3757536 -0.4228053 0.7258104 -0.5003553 -0.4720634 0.725812 -0.500355 -0.4720613 0.6069799 -0.6109858 -0.5082046 0.6069772 -0.610986 -0.5082075 0.4714527 -0.7046531 -0.5302796 0.4714558 -0.7046531 -0.5302768 0.3229615 -0.7788296 -0.5376991 0.3229615 -0.7788296 -0.5376991 0.1655576 -0.8315026 -0.5302773 0.1655548 -0.831502 -0.5302791 0.003515183 -0.8612282 -0.5082064 0.003516793 -0.8612288 -0.5082054 0.9233956 -0.06932139 -0.3775383 0.8746082 -0.1776713 -0.4511023 0.8746103 -0.1776717 -0.4510983 0.7941586 -0.302227 -0.5272295 0.7941581 -0.302227 -0.5272303 0.6917695 -0.418261 -0.5886533 0.6917688 -0.418261 -0.5886541 0.5703285 -0.522607 -0.633725 0.5703288 -0.522607 -0.6337247 0.4332146 -0.6124346 -0.661248 0.4332118 -0.6124342 -0.6612502 0.2841849 -0.6853188 -0.6705052 0.2841868 -0.6853192 -0.670504 0.1273142 -0.7392839 -0.6612491 0.1273159 -0.7392844 -0.6612482 -0.03313225 -0.7728493 -0.6337242 -0.03313547 -0.7728479 -0.6337257 0.9284272 0.0734685 -0.3641777 0.905577 0.01282984 -0.4239879 0.9055766 0.01283013 -0.4239888 0.8431902 -0.1019017 -0.5278695 0.8431912 -0.1019021 -0.5278679 0.7574362 -0.2136713 -0.6169562 0.7574368 -0.2136715 -0.6169555 0.6507691 -0.3193892 -0.6888324 0.6507696 -0.3193893 -0.6888319 0.5261901 -0.4161657 -0.7415727 0.5261871 -0.4161651 -0.7415751 0.3871556 -0.5013689 -0.7737827 0.3871572 -0.5013694 -0.7737816 0.2374857 -0.5726993 -0.7846121 0.2374857 -0.5726993 -0.7846121 0.08125925 -0.6282183 -0.7737821 0.08125686 -0.6282175 -0.773783 -0.07727479 -0.6664049 -0.7415748 -0.07727235 -0.666406 -0.741574 -0.3991093 -0.4193621 -0.8153816 -0.3270557 -0.462469 -0.8241098 -0.2805919 -0.5732975 -0.7698041 -0.2805896 -0.5732988 -0.7698039 -0.2337765 -0.6861892 -0.6888344 -0.2337762 -0.6861894 -0.6888344 -0.1927757 -0.7850626 -0.5886546 -0.1927788 -0.7850609 -0.588656 -0.1587363 -0.8671557 -0.4720635 -0.1587342 -0.8671566 -0.4720622 -0.1414566 -0.9117847 -0.3855371 -0.1296269 -0.9199198 -0.3700601 -0.4739397 0.3067193 -0.8254118 -0.4739034 0.3067418 -0.8254241 -0.4802668 0.3046449 -0.8225178 -0.4888159 0.2864266 -0.8240259 -0.6039543 0.2064961 -0.7698042 -0.5585222 0.09568375 -0.8239524 -0.5540506 0.1338766 -0.8216478 -0.7155084 0.11256 -0.6894766 -0.7155069 0.1125593 -0.6894783 -0.6695387 0.001707077 -0.7427752 -0.6695383 0.001706838 -0.7427756 -0.6208167 -0.1157863 -0.7753581 -0.6208167 -0.1157863 -0.775358 -0.5706954 -0.2366545 -0.7863215 -0.5706943 -0.2366552 -0.786322 -0.5205727 -0.3575238 -0.7753585 -0.5205785 -0.3575194 -0.7753567 -0.4718554 -0.4750162 -0.7427732 -0.4718508 -0.4750198 -0.7427738 -0.4258843 -0.5858684 -0.6894786 -0.4258856 -0.5858674 -0.6894786 -0.3839556 -0.6869816 -0.6169555 -0.3839586 -0.6869793 -0.6169564 -0.3472375 -0.7755331 -0.5272329 -0.3472334 -0.7755362 -0.5272312 -0.3167423 -0.8490651 -0.4228034 -0.3167459 -0.8490627 -0.4228056 -0.317901 -0.8454507 -0.4291294 -0.2768672 -0.9010101 -0.3339541 0.4780608 0.8028671 -0.356177 0.3167415 0.8490669 -0.4228007 0.3167435 0.8490654 -0.422802 0.158733 0.8671576 -0.4720609 0.1587378 0.8671553 -0.4720636 -0.003513872 0.8612277 -0.5082072 -0.003517925 0.8612291 -0.5082047 -0.1655576 0.8315027 -0.5302773 -0.1655549 0.8315021 -0.530279 -0.3229591 0.7788294 -0.537701 -0.322964 0.7788299 -0.5376973 -0.4714578 0.704653 -0.5302749 -0.4714505 0.7046531 -0.5302816 -0.6069769 0.6109851 -0.508209 -0.6069794 0.6109849 -0.5082061 -0.7258117 0.5003542 -0.4720625 -0.7258063 0.5003551 -0.4720699 -0.8246448 0.3757535 -0.4228124 -0.824649 0.3757527 -0.4228047 -0.8786832 0.285345 -0.3827455 -0.9291216 0.3511111 -0.1159914 -0.8073178 0.0153926 -0.5899162 -0.8073172 0.01539224 -0.589917 -0.7679855 -0.07945668 -0.6355194 -0.7679867 -0.07945579 -0.6355181 -0.726302 -0.1799796 -0.6633949 -0.7262995 -0.1799817 -0.663397 -0.6834135 -0.2834016 -0.6727775 -0.6834174 -0.2833978 -0.6727751 -0.6405351 -0.3868091 -0.6633955 -0.6405302 -0.3868139 -0.6633974 -0.5988424 -0.4873443 -0.6355183 -0.5988482 -0.4873384 -0.6355172 -0.5595192 -0.5821813 -0.589918 -0.5595152 -0.5821853 -0.5899178 -0.5236415 -0.6686955 -0.5278692 -0.5236395 -0.6686975 -0.5278686 -0.4922205 -0.7444648 -0.4511 -0.4922239 -0.7444614 -0.4511017 -0.4793704 -0.7785071 -0.4051306 -0.4276409 -0.826741 -0.3655444 0.5977699 0.7050083 -0.3816209 0.4922188 0.7444654 -0.451101 0.4922245 0.7444597 -0.4511039 0.3472384 0.7755313 -0.527235 0.347234 0.7755346 -0.5272331 0.1927785 0.7850611 -0.5886558 0.1927762 0.7850623 -0.5886548 0.03313064 0.7728487 -0.6337249 0.03313535 0.7728468 -0.633727 -0.1273109 0.739283 -0.661251 -0.1273166 0.7392846 -0.6612479 -0.2841889 0.6853196 -0.6705026 -0.2841826 0.6853184 -0.6705065 -0.4332113 0.6124331 -0.6612516 -0.433216 0.6124337 -0.661248 -0.5703277 0.5226079 -0.633725 -0.570329 0.5226079 -0.6337238 -0.6917691 0.4182618 -0.5886532 -0.69177 0.4182618 -0.5886523 -0.7941588 0.302227 -0.5272291 -0.7941545 0.3022267 -0.527236 -0.8746087 0.1776673 -0.451103 -0.8746102 0.1776676 -0.4510999 -0.9233955 0.06932169 -0.3775386 -0.8982794 0.02153539 -0.4388968 -0.8767592 -0.08232289 -0.4738315 -0.876765 -0.08231735 -0.4738216 -0.8451775 -0.1584919 -0.5104462 -0.8451703 -0.1584996 -0.5104556 -0.8116887 -0.239241 -0.5328464 -0.811691 -0.2392383 -0.5328441 -0.7772433 -0.3223096 -0.5403789 -0.7772423 -0.3223109 -0.5403797 -0.7428014 -0.4053655 -0.532846 -0.7428013 -0.4053657 -0.5328461 -0.7093154 -0.4861172 -0.5104524 -0.7093142 -0.4861187 -0.5104526 -0.6777275 -0.5622908 -0.4738296 -0.6777275 -0.5622908 -0.4738296 -0.6489095 -0.6317856 -0.4239853 -0.6489141 -0.6317796 -0.423987 -0.6391866 -0.657405 -0.399073 -0.6107506 -0.6900467 -0.3883547 0.8070354 0.5396824 -0.2396598 0.6489095 0.6317856 -0.4239853 0.6489141 0.6317796 -0.423987 0.5236386 0.6686962 -0.5278714 0.5236387 0.6686961 -0.5278714 0.3839582 0.6869797 -0.6169563 0.3839586 0.6869793 -0.6169564 0.2337765 0.6861892 -0.6888344 0.2337785 0.6861879 -0.688835 0.07727473 0.6664049 -0.7415748 0.0772702 0.666407 -0.7415734 -0.08125799 0.62822 -0.7737808 -0.08125591 0.6282194 -0.7737816 -0.2374872 0.5726987 -0.7846121 -0.2374872 0.5726987 -0.7846121 -0.3871572 0.5013694 -0.7737817 -0.3871556 0.501369 -0.7737827 -0.5261862 0.4161658 -0.7415754 -0.5261892 0.4161663 -0.741573 -0.6507696 0.3193893 -0.6888319 -0.6507691 0.3193892 -0.6888324 -0.7574371 0.213671 -0.6169552 -0.7574366 0.2136709 -0.6169559 -0.8431911 0.1019024 -0.527868 -0.8431904 0.101902 -0.5278692 -0.9055765 -0.01283013 -0.4239888 -0.905577 -0.01282978 -0.4239879 -0.9284273 -0.07346826 -0.3641774 -0.9376154 -0.06219106 -0.3420665 0 -0.9961947 0.08715677 0 -0.9961946 -0.08715659 0 -0.9961946 -0.08715659 0 -0.9659255 -0.2588199 0 -0.9659255 -0.2588199 0 -0.9063079 -0.422618 0 -0.9063079 -0.422618 0 -0.8191529 -0.5735753 0 -0.8191529 -0.5735753 0 -0.7071058 -0.7071078 0 -0.7071058 -0.7071078 0 -0.5735766 -0.8191519 0 -0.5735766 -0.8191519 0 -0.422618 -0.9063079 0 -0.422618 -0.9063079 0 -0.2588186 -0.9659259 0 -0.2588186 -0.9659259 0 -0.08715677 -0.9961947 0 -0.08715677 -0.9961947 0 0.08715641 -0.9961946 0 0.08715641 -0.9961946 0 0.2588186 -0.9659259 0 0.2588186 -0.9659259 0 0.422618 -0.9063079 0 0.422618 -0.9063079 0 0.5735766 -0.8191519 0 0.5735766 -0.8191519 0 0.7071058 -0.7071078 0 0.7071058 -0.7071078 0 0.8191529 -0.5735753 0 0.8191529 -0.5735753 0 0.9063079 -0.422618 0 0.9063079 -0.422618 0 0.9659255 -0.2588199 0 0.9659255 -0.2588199 0 0.9961949 -0.08715271 0 0.9961949 -0.08715271 0 0.996195 0.08715289 0 0.996195 0.08715289 0 0.9659255 0.2588204 0 0.9659255 0.2588204 0 0.9063079 0.422618 0 0.9063079 0.422618 0 0.8191529 0.5735753 0 0.8191529 0.5735753 0 0.7071068 0.7071068 0 0.7071068 0.7071068 0 0.5735753 0.8191529 0 0.5735753 0.8191529 0 0.422618 0.9063079 0 0.422618 0.9063079 0 0.2588204 0.9659255 0 0.2588204 0.9659255 0 0.08715641 0.9961946 0 0.08715641 0.9961946 0 -0.08715677 0.9961947 0 -0.08715677 0.9961947 0 -0.2588204 0.9659255 0 -0.2588204 0.9659255 0 -0.422618 0.9063079 0 -0.422618 0.9063079 0 -0.5735753 0.8191529 0 -0.5735753 0.8191529 0 -0.7071068 0.7071068 0 -0.7071068 0.7071068 0 -0.8191529 0.5735753 0 -0.8191529 0.5735753 0 -0.9063079 0.422618 0 -0.9063079 0.422618 0 -0.9659255 0.2588204 0 -0.9659255 0.2588204 0 -0.9961947 0.08715677 0 -0.996195 0.08715289 0 -0.9961949 -0.08715271 0 -0.9961949 -0.08715271 0 -0.9659255 -0.2588199 0 -0.9659255 -0.2588199 0 -0.9063079 -0.422618 0 -0.9063079 -0.422618 0 -0.8191529 -0.5735753 0 -0.8191529 -0.5735753 0 -0.7071058 -0.7071078 0 -0.7071058 -0.7071078 0 -0.5735766 -0.8191519 0 -0.5735766 -0.8191519 0 -0.422618 -0.9063079 0 -0.422618 -0.9063079 0 -0.2588186 -0.9659259 0 -0.2588186 -0.9659259 0 -0.08715641 -0.9961946 0 -0.08715641 -0.9961946 0 0.08715677 -0.9961947 0 0.08715677 -0.9961947 0 0.2588186 -0.9659259 0 0.2588186 -0.9659259 0 0.422618 -0.9063079 0 0.422618 -0.9063079 0 0.5735766 -0.8191519 0 0.5735766 -0.8191519 0 0.7071058 -0.7071078 0 0.7071058 -0.7071078 0 0.8191529 -0.5735753 0 0.8191529 -0.5735753 0 0.9063079 -0.422618 0 0.9063079 -0.422618 0 0.9659255 -0.2588199 0 0.9659255 -0.2588199 0 0.9961946 -0.08715659 0 0.9961946 -0.08715659 0 0.9961947 0.08715677 0 0.9961947 0.08715677 0 0.9659255 0.2588204 0 0.9659255 0.2588204 0 0.9063079 0.422618 0 0.9063079 0.422618 0 0.8191529 0.5735753 0 0.8191529 0.5735753 0 0.7071068 0.7071068 0 0.7071068 0.7071068 0 0.5735753 0.8191529 0 0.5735753 0.8191529 0 0.422618 0.9063079 0 0.422618 0.9063079 0 0.2588204 0.9659255 0 0.2588204 0.9659255 0 0.08715677 0.9961947 0 0.08715677 0.9961947 0 -0.08715641 0.9961946 0 -0.08715641 0.9961946 0 -0.2588204 0.9659255 0 -0.2588204 0.9659255 0 -0.422618 0.9063079 0 -0.422618 0.9063079 0 -0.5735753 0.8191529 0 -0.5735753 0.8191529 0 -0.7071068 0.7071068 0 -0.7071068 0.7071068 0 -0.8191529 0.5735753 0 -0.8191529 0.5735753 0 -0.9063079 0.422618 0 -0.9063079 0.422618 0 -0.9659255 0.2588204 0 -0.9659255 0.2588204 0 -0.996195 0.08715289 -0.6039555 0.2064965 -0.7698032 0.9376154 0.06219106 -0.3420665 0.9291142 -0.3511083 -0.116059 -0.2768241 -0.9010168 -0.3339717 -0.9396095 0.1729976 -0.2953064 0.4464271 0.86304 -0.2363572 0.5685818 0.7708872 -0.2871372 -0.3695226 -0.3882623 -0.8442189 -0.3146632 -0.4574558 -0.8316978 0.3054874 -0.4240497 -0.8525605 0.1459946 0.539368 -0.8293176 -0.3054874 0.4240497 -0.8525605 -0.5197389 -0.1988689 -0.8308566 -0.4996094 -0.2071785 -0.8411109 -0.4959046 -0.13152 -0.8583596 -0.4958983 -0.1315352 -0.858361 -0.5526722 -0.05583584 -0.8315262 -0.5330668 -0.06696391 -0.843419 -0.538494 -0.005462467 -0.8426116 -0.5638673 0.07547634 -0.8224093 -0.5447082 0.0430864 -0.8375181 -0.5447066 0.04308235 -0.8375193 -0.5033497 0.3257704 -0.8003203 -0.4721553 0.2087641 -0.8564386 -0.4905964 0.1665273 -0.8553268 -0.5138095 0.1241425 -0.8488748 -0.4206989 0.3414289 -0.8404991 -0.3468549 0.4031761 -0.8468416 -0.3383145 0.4696221 -0.8154743 -0.3772957 0.3792174 -0.8448918 -0.1458036 0.4949184 -0.8566195 -0.1458191 0.4949125 -0.8566203 -0.2126467 0.5127996 -0.8317559 -0.2270074 0.4764056 -0.8494147 -0.2651492 0.4487286 -0.8534274 0.02707898 0.5321596 -0.8462108 -0.04872483 0.5511512 -0.8329815 -0.05792444 0.5377573 -0.8411074 -0.1022765 0.5141842 -0.8515598 0.1223603 0.5587033 -0.8202919 0.08705949 0.5458785 -0.8333291 0.08707135 0.5458815 -0.8333259 0.3146566 0.4574561 -0.8317001 0.2589657 0.4591156 -0.8497938 0.2088371 0.4640204 -0.8608555 0.3146646 0.4574579 -0.8316962 0.3270557 0.462469 -0.8241098 0.3991091 0.4193622 -0.8153816 0.3418459 0.45169 -0.8240858 0.3695226 0.3882623 -0.8442189 0.4592204 0.2348554 -0.8567144 0.4228298 0.3295556 -0.8441612 0.4429473 0.3235696 -0.8361222 0.4052751 0.3553845 -0.8422908 0.4958997 0.1315334 -0.8583604 0.4959052 0.1315202 -0.8583592 0.4996103 0.2071781 -0.8411105 0.5197342 0.1988708 -0.8308591 0.4592161 0.2348663 -0.8567137 0.5526722 0.05583584 -0.8315262 0.5330663 0.06696414 -0.8434193 0.538494 0.005462467 -0.8426116 0.5585222 -0.09568375 -0.8239524 0.5540506 -0.1338766 -0.8216478 0.5638674 -0.07547575 -0.8224092 0.5447077 -0.04308515 -0.8375185 0.544707 -0.04308336 -0.8375191 0.4721543 -0.2087637 -0.8564392 0.4905926 -0.166534 -0.8553277 0.5138095 -0.1241425 -0.8488748 0.4802666 -0.3046449 -0.8225177 0.4207041 -0.3414255 -0.8404978 0.4739397 -0.3067193 -0.8254118 0.4739034 -0.3067418 -0.8254241 0.3468549 -0.4031761 -0.8468416 0.3383139 -0.4696268 -0.8154719 0.3772965 -0.3792182 -0.844891 0.1458036 -0.4949184 -0.8566195 0.1458221 -0.4949114 -0.8566204 0.2126474 -0.5127977 -0.8317569 0.2270074 -0.4764056 -0.8494147 0.2651492 -0.4487286 -0.8534274 -0.08711361 -0.5458904 -0.8333156 -0.02707934 -0.5321598 -0.8462108 0.04872471 -0.5511509 -0.8329818 0.05792379 -0.5377576 -0.8411073 0.1022765 -0.5141842 -0.8515598 -0.08705937 -0.5458767 -0.8333303 -0.1223623 -0.5587024 -0.8202922 -0.1477878 -0.546046 -0.8246166 -0.1420688 -0.5481594 -0.8242195 -0.1459946 -0.539368 -0.8293176 -0.3146633 -0.4574558 -0.8316978 -0.258942 -0.4591161 -0.8498008 -0.2088391 -0.4640179 -0.8608563 -0.3418459 -0.45169 -0.8240858 -0.4592155 -0.2348677 -0.8567137 -0.4592204 -0.2348554 -0.8567144 -0.4228298 -0.3295556 -0.8441612 -0.4429473 -0.3235696 -0.8361222 -0.4052751 -0.3553845 -0.8422908 0.803703 0.4484193 -0.3911286 0.7892114 0.4740859 -0.3903688 0.7729076 0.5264292 -0.3542403 0.6795499 0.6408101 -0.3571755 0.7716835 0.525604 -0.3581129 0.7716845 0.5256017 -0.3581144 0.5495812 0.7451633 -0.3777461 0.6107505 0.6900468 -0.3883547 0.6391866 0.657405 -0.399073 0.7205594 0.679486 -0.1381777 0.7205641 0.6794816 -0.1381745 0.5685765 0.7708899 -0.2871401 0.4793704 0.7785071 -0.4051306 0.4276409 0.826741 -0.3655444 0.317898 0.8454556 -0.4291221 0.3519613 0.8632767 -0.3617689 0.4463943 0.8630537 -0.2363692 0.04606831 0.9245194 -0.3783408 0.1296277 0.9199197 -0.37006 0.1414573 0.9117847 -0.3855368 0.27684 0.9010144 -0.3339651 0.2768687 0.9010084 -0.3339573 -0.02825856 0.9220369 -0.3860693 -0.03598994 0.9166889 -0.3979775 0.04604059 0.9245187 -0.3783454 -0.1913214 0.894308 -0.4044865 -0.1804209 0.9021713 -0.3918358 -0.1804423 0.9021663 -0.3918374 -0.3495932 0.8430528 -0.4087134 -0.3377878 0.8541006 -0.3954891 -0.2603406 0.8802013 -0.3968228 -0.6067825 0.7002996 -0.3760259 -0.5370717 0.7444515 -0.3966686 -0.4963521 0.7638055 -0.4125962 -0.4702675 0.793949 -0.3853486 -0.4702693 0.7939479 -0.3853484 -0.6067878 0.7002956 -0.3760251 -0.6290468 0.6620957 -0.4073442 -0.7163489 0.6017538 -0.3531805 -0.7421681 0.5364739 -0.4017241 -0.7461814 0.5197976 -0.4159613 -0.716348 0.6017548 -0.3531807 -0.9291217 0.3511097 -0.1159946 -0.9291177 0.3511193 -0.1159977 -0.8228272 0.3722281 -0.42942 -0.8224661 0.4703085 -0.3199369 -0.8224636 0.4703118 -0.3199378 -0.905704 0.2567303 -0.3373275 -0.8937305 0.1645482 -0.4173361 -0.8868018 0.2464787 -0.390936 -0.9253184 0.02215653 -0.3785433 -0.9404296 0.07775998 -0.3309769 -0.9559032 0.02288609 -0.2927887 -0.9375629 -0.06231284 -0.3421884 -0.8765083 -0.2938022 -0.3813311 -0.8802369 -0.2853004 -0.3791922 -0.8927828 -0.2229944 -0.3914235 -0.922961 -0.1444875 -0.3567441 -0.9203646 -0.1736887 -0.350373 -0.9316775 -0.1458554 -0.3327211 -0.8271953 -0.395206 -0.39945 -0.8271842 -0.3952366 -0.3994424 -0.8237525 -0.4126185 -0.3888159 -0.8306979 -0.3969054 -0.3903934 -0.8456428 -0.3506738 -0.4023879 -0.878442 -0.2846919 -0.383784 -0.8784323 -0.2847182 -0.3837867 -0.8036985 -0.4484288 -0.3911269 -0.7892108 -0.4740883 -0.3903673 -0.7729076 -0.5264292 -0.3542403 -0.7715532 -0.5293633 -0.3528177 -0.7716857 -0.5255987 -0.3581164 -0.7205564 -0.6794885 -0.1381798 -0.7205641 -0.6794816 -0.1381745 -0.8070355 -0.5396823 -0.2396598 -0.6795499 -0.6408101 -0.3571755 -0.7716835 -0.525604 -0.3581129 -0.5685847 -0.7708884 -0.2871283 -0.5685797 -0.770891 -0.2871311 -0.5977699 -0.7050083 -0.3816209 -0.5495812 -0.7451633 -0.3777461 -0.4780608 -0.8028671 -0.356177 -0.351953 -0.8632663 -0.3618016 -0.4464178 -0.863044 -0.2363606 -0.4464161 -0.8630446 -0.2363612 -0.04611337 -0.9245201 -0.3783333 0.02826058 -0.9220355 -0.3860724 0.03598994 -0.9166889 -0.3979775 -0.04604059 -0.9245187 -0.3783454 0.1913194 -0.8943095 -0.4044842 0.1804209 -0.9021713 -0.3918358 0.1804854 -0.9021564 -0.3918406 0.3495955 -0.843052 -0.408713 0.3377881 -0.8541016 -0.3954866 0.2603409 -0.8802025 -0.3968203 0.6067948 -0.700291 -0.3760219 0.5370717 -0.7444515 -0.3966686 0.4963502 -0.7638064 -0.412597 0.4702671 -0.7939481 -0.3853509 0.470256 -0.7939543 -0.3853515 0.6067863 -0.7002978 -0.3760232 0.6290468 -0.6620957 -0.4073442 0.7163597 -0.6017455 -0.3531731 0.7421696 -0.5364681 -0.4017292 0.7461786 -0.5198103 -0.4159505 0.7163477 -0.6017579 -0.3531762 0.9291148 -0.3511019 -0.1160734 0.9291071 -0.3511204 -0.1160794 0.8228242 -0.3722205 -0.4294322 0.8224648 -0.4703055 -0.3199444 0.8224643 -0.4703062 -0.3199446 0.8982794 -0.02153539 -0.4388968 0.9396095 -0.1729976 -0.2953064 0.9057021 -0.2567346 -0.3373296 0.893728 -0.1645478 -0.4173421 0.8867992 -0.246478 -0.390942 0.9253184 -0.02215635 -0.3785434 0.9404303 -0.07776296 -0.3309739 0.9559034 -0.02288722 -0.292788 0.9375629 0.06231284 -0.3421884 0.9316778 0.1458545 -0.3327205 0.8765049 0.29381 -0.381333 0.880242 0.2852886 -0.3791892 0.8927844 0.222999 -0.3914172 0.9229602 0.1445 -0.3567414 0.8271953 0.395206 -0.39945 0.8271842 0.3952366 -0.3994424 0.8237521 0.4126207 -0.3888145 0.8306984 0.3969056 -0.3903923 0.8456462 0.3506643 -0.4023893 0.8784403 0.2846913 -0.3837882 0.8784306 0.2847177 -0.3837909 0.7093142 0.4861188 -0.5104526 0.7093154 0.4861173 -0.5104525 0.7428013 0.4053657 -0.5328461 0.7428014 0.4053655 -0.532846 0.7772423 0.3223109 -0.5403797 0.7772493 0.3223021 -0.5403748 0.811693 0.2392398 -0.5328403 0.8116847 0.2392496 -0.5328485 0.845173 0.1584926 -0.5104536 0.8451756 0.1584897 -0.51045 0.5988482 0.4873384 -0.6355173 0.5988423 0.4873442 -0.6355183 0.6405302 0.3868139 -0.6633974 0.6405351 0.3868091 -0.6633955 0.6834173 0.2833979 -0.6727751 0.6834135 0.2834015 -0.6727775 0.7262995 0.1799817 -0.6633971 0.726302 0.1799795 -0.6633949 0.7679867 0.07945579 -0.6355181 0.7679906 0.07945287 -0.6355139 0.4718508 0.4750198 -0.7427738 0.4718554 0.4750162 -0.7427732 0.5205785 0.3575194 -0.7753567 0.5205727 0.3575238 -0.7753585 0.5706943 0.2366552 -0.786322 0.5706953 0.2366545 -0.7863215 0.6208167 0.1157863 -0.775358 0.6208167 0.1157863 -0.7753581 0.6695383 -0.001706838 -0.7427756 0.6695388 -0.001707077 -0.7427752 0.9203646 0.1736888 -0.350373 0.8767592 0.08232289 -0.4738315 0.8767609 0.08232128 -0.4738287 0.8073151 -0.01538687 -0.5899201 0.8073194 -0.01538962 -0.5899142 0.7155084 -0.11256 -0.6894766 0.7155069 -0.1125593 -0.6894783 0.6039555 -0.2064965 -0.7698032 0.6039543 -0.2064961 -0.7698042 0.4888159 -0.2864266 -0.8240259 0.5033459 -0.3257598 -0.8003271 0.7715519 0.5293659 -0.3528164 0.6777274 0.5622908 -0.4738296 0.6777275 0.5622908 -0.4738296 0.5595192 0.5821812 -0.589918 0.5595152 0.5821853 -0.5899178 0.4258843 0.5858685 -0.6894786 0.4258856 0.5858674 -0.6894786 0.2805919 0.5732974 -0.7698041 0.2805896 0.5732988 -0.7698039 0.1420694 0.5481581 -0.8242203 0.1477961 0.5460418 -0.8246179 0.8786787 -0.2853536 -0.3827494 0.824649 -0.3757527 -0.4228047 0.8246482 -0.3757529 -0.4228063 0.7258101 -0.5003545 -0.4720647 0.7258118 -0.5003542 -0.4720625 0.6069795 -0.6109849 -0.5082062 0.6069769 -0.6109851 -0.508209 0.4714505 -0.7046531 -0.5302816 0.4714578 -0.7046531 -0.5302749 0.322964 -0.7788299 -0.5376973 0.322959 -0.7788294 -0.537701 0.1655549 -0.8315021 -0.530279 0.1655576 -0.8315027 -0.5302773 0.003517925 -0.8612291 -0.5082047 0.003513872 -0.8612277 -0.5082072 0.9233955 -0.06932169 -0.3775386 0.8746082 -0.1776713 -0.4511023 0.8746103 -0.1776717 -0.4510983 0.7941586 -0.302227 -0.5272295 0.7941588 -0.302227 -0.5272291 0.6917699 -0.4182618 -0.5886523 0.6917691 -0.4182618 -0.5886532 0.570329 -0.5226079 -0.6337238 0.5703277 -0.5226079 -0.633725 0.433216 -0.6124337 -0.6612479 0.4332114 -0.6124331 -0.6612515 0.2841826 -0.6853184 -0.6705066 0.284189 -0.6853196 -0.6705026 0.1273166 -0.7392847 -0.6612479 0.1273109 -0.739283 -0.661251 -0.03313535 -0.7728468 -0.633727 -0.03313064 -0.7728487 -0.6337249 0.9284273 0.07346826 -0.3641774 0.905577 0.01282978 -0.4239879 0.9055765 0.01283013 -0.4239888 0.8431904 -0.101902 -0.5278692 0.8431911 -0.1019024 -0.527868 0.7574366 -0.2136709 -0.6169559 0.7574371 -0.213671 -0.6169552 0.6507691 -0.3193892 -0.6888324 0.6507696 -0.3193893 -0.6888319 0.5261892 -0.4161664 -0.741573 0.5261862 -0.4161658 -0.7415754 0.3871556 -0.5013689 -0.7737827 0.3871572 -0.5013694 -0.7737816 0.2374872 -0.5726987 -0.7846121 0.2374872 -0.5726987 -0.7846121 0.08125591 -0.6282193 -0.7737817 0.08125805 -0.6282201 -0.7737807 -0.0772702 -0.666407 -0.7415733 -0.07727479 -0.6664049 -0.7415748 -0.3991093 -0.4193621 -0.8153816 -0.3270573 -0.4624682 -0.8241097 -0.2805933 -0.5732977 -0.7698034 -0.2805891 -0.5733003 -0.769803 -0.2337765 -0.6861892 -0.6888344 -0.2337785 -0.6861879 -0.688835 -0.1927785 -0.785061 -0.5886558 -0.1927762 -0.7850623 -0.5886548 -0.1587333 -0.8671572 -0.4720617 -0.1587369 -0.8671553 -0.4720638 -0.1414589 -0.9117847 -0.3855363 -0.1296271 -0.9199212 -0.3700563 -0.4739594 0.3067058 -0.8254054 -0.4739026 0.3067413 -0.8254248 -0.4802671 0.3046439 -0.8225179 -0.4888159 0.2864266 -0.8240259 -0.6039543 0.2064961 -0.7698042 -0.5585222 0.09568375 -0.8239524 -0.5540506 0.1338766 -0.8216478 -0.715508 0.1125599 -0.689477 -0.7155069 0.1125593 -0.6894783 -0.6695389 0.001707077 -0.7427752 -0.6695383 0.001706838 -0.7427756 -0.6208167 -0.1157858 -0.7753582 -0.620817 -0.1157856 -0.775358 -0.570695 -0.2366553 -0.7863216 -0.570694 -0.236656 -0.7863219 -0.5205733 -0.3575226 -0.7753587 -0.5205778 -0.3575192 -0.7753573 -0.4718536 -0.4750176 -0.7427735 -0.4718508 -0.4750198 -0.7427738 -0.4258835 -0.5858703 -0.6894776 -0.425887 -0.5858675 -0.6894778 -0.3839582 -0.6869797 -0.6169562 -0.3839586 -0.6869793 -0.6169564 -0.3472384 -0.7755313 -0.527235 -0.347234 -0.7755346 -0.5272331 -0.3167415 -0.8490669 -0.4228007 -0.3167455 -0.8490641 -0.4228032 -0.317901 -0.8454507 -0.4291294 -0.2768695 -0.9010074 -0.3339594 0.4780714 0.8028618 -0.356175 0.3167423 0.8490651 -0.4228034 0.316744 0.8490641 -0.4228044 0.1587361 0.8671562 -0.4720627 0.158735 0.8671566 -0.472062 -0.003516793 0.8612288 -0.5082054 -0.003515183 0.8612281 -0.5082064 -0.1655548 0.831502 -0.5302791 -0.1655575 0.8315026 -0.5302773 -0.3229615 0.7788296 -0.5376991 -0.3229615 0.7788296 -0.5376991 -0.4714558 0.7046531 -0.5302768 -0.4714526 0.7046531 -0.5302796 -0.6069772 0.610986 -0.5082075 -0.6069799 0.6109858 -0.5082046 -0.725812 0.500355 -0.4720613 -0.7258067 0.5003558 -0.4720686 -0.8246451 0.3757542 -0.4228113 -0.8246485 0.3757536 -0.4228051 -0.8786832 0.285345 -0.3827455 -0.9291216 0.3511111 -0.1159914 -0.8073179 0.01539266 -0.5899161 -0.8073172 0.01539218 -0.589917 -0.7679858 -0.0794565 -0.6355192 -0.7679865 -0.07945597 -0.6355184 -0.7263013 -0.1799801 -0.6633954 -0.7263001 -0.1799812 -0.6633966 -0.683414 -0.2834017 -0.6727769 -0.683417 -0.2833988 -0.6727751 -0.6405351 -0.3868091 -0.6633955 -0.6405314 -0.3868128 -0.663397 -0.5988442 -0.4873424 -0.6355179 -0.5988466 -0.48734 -0.6355175 -0.559518 -0.5821814 -0.5899191 -0.5595121 -0.5821873 -0.5899188 -0.5236386 -0.6686962 -0.5278714 -0.5236387 -0.6686961 -0.5278714 -0.4922187 -0.7444653 -0.451101 -0.4922245 -0.7444597 -0.4511039 -0.4793704 -0.7785071 -0.4051306 -0.4276409 -0.826741 -0.3655444 0.5977699 0.7050083 -0.3816209 0.4922205 0.7444648 -0.4511 0.4922239 0.7444614 -0.4511017 0.3472375 0.7755331 -0.5272329 0.3472334 0.7755362 -0.5272312 0.1927757 0.7850626 -0.5886545 0.1927788 0.7850609 -0.588656 0.03313547 0.772848 -0.6337257 0.03313225 0.7728493 -0.6337242 -0.1273159 0.7392844 -0.6612482 -0.1273142 0.7392839 -0.6612492 -0.2841867 0.6853191 -0.6705039 -0.2841849 0.6853188 -0.6705052 -0.4332118 0.6124342 -0.6612502 -0.4332146 0.6124345 -0.661248 -0.5703288 0.522607 -0.6337247 -0.5703285 0.522607 -0.633725 -0.6917688 0.418261 -0.5886541 -0.6917695 0.4182609 -0.5886533 -0.7941581 0.302227 -0.5272303 -0.7941545 0.3022267 -0.527236 -0.8746087 0.1776673 -0.451103 -0.8746102 0.1776676 -0.4510999 -0.9233955 0.06932139 -0.3775383 -0.8982792 0.02153486 -0.4388974 -0.8767593 -0.08232301 -0.4738312 -0.8767649 -0.08231765 -0.4738218 -0.8451778 -0.1584911 -0.510446 -0.8451706 -0.158499 -0.5104554 -0.811688 -0.2392423 -0.5328467 -0.8116906 -0.2392393 -0.5328442 -0.7772433 -0.3223096 -0.5403789 -0.7772423 -0.3223109 -0.5403797 -0.7428025 -0.4053634 -0.5328463 -0.7428006 -0.4053656 -0.5328471 -0.7093135 -0.4861199 -0.5104528 -0.7093157 -0.4861168 -0.5104524 -0.6777299 -0.5622878 -0.4738299 -0.6777275 -0.5622908 -0.4738296 -0.6489095 -0.6317856 -0.4239853 -0.6489141 -0.6317796 -0.423987 -0.6391854 -0.6574079 -0.39907 -0.6107621 -0.6900355 -0.3883565 0.8070354 0.5396824 -0.2396598 0.6489095 0.6317856 -0.4239853 0.6489141 0.6317796 -0.423987 0.5236415 0.6686955 -0.5278692 0.5236395 0.6686975 -0.5278686 0.3839556 0.6869816 -0.6169556 0.3839586 0.6869793 -0.6169564 0.2337765 0.6861892 -0.6888344 0.2337762 0.6861894 -0.6888344 0.07727235 0.666406 -0.741574 0.07727479 0.6664049 -0.7415748 -0.08125692 0.6282175 -0.773783 -0.08125925 0.6282184 -0.773782 -0.2374857 0.5726993 -0.7846121 -0.2374857 0.5726993 -0.7846121 -0.3871572 0.5013694 -0.7737817 -0.3871556 0.501369 -0.7737827 -0.5261871 0.4161651 -0.7415751 -0.5261901 0.4161657 -0.7415727 -0.6507696 0.3193893 -0.6888319 -0.6507691 0.3193892 -0.6888324 -0.7574368 0.2136714 -0.6169555 -0.7574362 0.2136713 -0.6169562 -0.8431912 0.1019021 -0.5278679 -0.8431902 0.1019017 -0.5278695 -0.9055766 -0.01283013 -0.4239887 -0.905577 -0.01282984 -0.4239879 -0.9284271 -0.0734685 -0.3641777 -0.9376154 -0.06219106 -0.3420665 -0.9961948 0.08715564 0 -0.9659247 0.2588232 0 -0.9659257 0.2588197 7.20143e-7 -0.9659258 0.2588191 0 -0.9063088 0.4226163 0 -0.9063088 0.4226163 0 -0.819152 0.5735765 0 -0.819152 0.5735765 0 -0.7071068 0.7071068 0 -0.7071068 0.7071068 0 -0.5735752 0.819153 0 -0.5735752 0.819153 0 -0.4226195 0.9063073 0 -0.4226195 0.9063073 0 -0.258818 0.9659261 0 -0.258818 0.9659261 0 -0.08715564 0.9961948 0 -0.08715564 0.9961948 0 0.08715564 0.9961948 0 0.08715564 0.9961948 0 0.258818 0.9659261 0 0.258818 0.9659261 0 0.4226205 0.9063067 0 0.4226205 0.9063067 0 0.5735752 0.819153 0 0.5735752 0.819153 0 0.7071053 0.7071081 0 0.7071053 0.7071081 0 0.819152 0.5735765 0 0.819152 0.5735765 0 0.9063076 0.4226186 0 0.9063076 0.4226186 0 0.9659258 0.2588191 0 0.9659264 0.2588171 -2.33163e-6 0.9659295 0.2588058 0 0.9961948 0.08715564 0 0.9961948 0.08715564 0 0.9961943 -0.08715999 0 0.9961947 -0.08715564 1.58296e-6 0.9961948 -0.08715397 0 0.9659264 -0.258817 0 0.9659264 -0.258817 0 0.9063075 -0.4226189 0 0.9063075 -0.4226189 0 0.819152 -0.5735765 0 0.8191522 -0.5735762 4.55185e-7 0.8191576 -0.5735685 0 0.7071052 -0.7071084 0 0.7071052 -0.7071084 0 0.5735756 -0.8191526 0 0.5735756 -0.8191526 0 0.4226199 -0.906307 0 0.4226199 -0.906307 0 0.2588187 -0.9659259 0 0.2588187 -0.9659259 0 0.08715564 -0.9961948 0 0.08715564 -0.9961948 0 -0.08715564 -0.9961948 0 -0.08715564 -0.9961948 0 -0.2588187 -0.9659259 0 -0.2588187 -0.9659259 0 -0.4226189 -0.9063075 0 -0.4226189 -0.9063075 0 -0.5735756 -0.8191526 0 -0.5735756 -0.8191526 0 -0.7071066 -0.707107 0 -0.7071066 -0.707107 0 -0.8191576 -0.5735685 0 -0.8191522 -0.5735762 4.55185e-7 -0.819152 -0.5735765 0 -0.9063086 -0.4226166 0 -0.9063086 -0.4226166 0 -0.9659257 -0.2588197 0 -0.9659257 -0.2588197 0 -0.9961945 -0.08715784 0 -0.9961947 -0.08715564 -2.12782e-6 -0.9961953 -0.08714973 0 -0.9961948 0.08715564 0 -0.9954566 -0.09521561 0 -0.9954566 -0.09521561 0 -0.998273 0.05874735 0 -0.998273 0.05874735 0 -0.9771103 0.2127332 0 -0.9771103 0.2127332 0 -0.9318066 0.3629553 0 -0.9318066 0.3629553 0 -0.8607569 0.5090163 0 -0.8607488 0.5090299 -4.30184e-5 -0.8606817 0.5091437 0 -0.7650485 0.6439728 0 -0.7650485 0.6439728 0 -0.6534405 0.7569778 0 -0.6534405 0.7569778 0 -0.532077 0.846696 0 -0.4050244 0.9143061 -3.18554e-5 -0.4050179 0.9143088 0 -0.532077 0.846696 0 -0.4050112 0.9143118 0 -0.2834771 0.958979 0 -0.2834771 0.958979 0 -0.9875348 -0.1574012 0 -0.9875348 -0.1574012 0 -0.9885168 -0.1511113 0 -0.9885167 -0.1511115 4.68901e-6 -0.9885169 -0.1511102 -8.84545e-5 -0.9885174 -0.1511074 0 -0.5874556 -0.8092564 0 -0.4457773 -0.8951438 0 -0.4457773 -0.8951438 0 -0.2934388 -0.9559778 0 -0.2934388 -0.9559778 0 -0.7060059 -0.708206 -1.54776e-5 -0.7060085 -0.7082034 0 -0.5874556 -0.8092564 0 -0.7060241 -0.7081879 0 -0.8018727 -0.5974948 0 -0.8018727 -0.5974948 0 -0.8825735 -0.4701744 0 -0.8825735 -0.4701744 0 -0.9451334 -0.3266847 0 -0.9451334 -0.3266847 0 -0.9748538 -0.2228454 0 -0.9748538 -0.2228454 0 -0.2271642 -0.9738565 0 -0.2246806 -0.9744182 0.005273818 -0.2245592 -0.9744603 5.86566e-4 -0.2246835 -0.9744316 5.86352e-4 -0.2245578 -0.9744564 -0.002901971 -0.2196053 -0.9755889 0 0.9681351 -0.2504283 0 0.9681351 -0.2504283 0 0.9183129 -0.3958554 0 0.9183129 -0.3958554 0 0.8459551 -0.5332541 0 0.8459551 -0.5332541 0 0.752176 -0.6589623 0 0.752176 -0.6589623 0 0.6336641 -0.7736083 0 0.6336641 -0.7736083 0 0.4945004 -0.8691774 0 0.4945004 -0.8691774 0 0.3497709 -0.9368352 0 0.3497709 -0.9368352 0 0.2044878 -0.9788691 0 0.2044878 -0.9788691 0 0.06163972 -0.9980985 0 0.06163972 -0.9980985 0 -0.09140473 -0.9958137 0 -0.09140473 -0.9958137 0 -0.1989246 -0.9800148 0 -0.1989246 -0.9800148 0 0.9849044 -0.1730992 0 0.9856365 -0.1688801 0 0.9856365 -0.1688801 0 0.9855918 -0.1691411 0 0.9855906 -0.1691485 -1.26794e-4 0.9855903 -0.1691496 0 0.9849044 -0.1730992 0 0.9926199 0.1212673 0 0.9615152 0.2747519 0 0.9615152 0.2747519 0 0.904935 0.4255498 0 0.904935 0.4255498 0 0.8288683 0.5594437 0 0.8288683 0.5594437 0 0.7376758 0.6751551 0 0.7376758 0.6751551 0 0.62467 0.7808888 0 0.62467 0.7808888 0 0.4903418 0.8715302 0 0.4903418 0.8715302 0 0.3436366 0.9391028 0 0.3436366 0.9391028 0 0.1920534 0.9813845 0 0.1920534 0.9813845 0 0.03668868 0.9993268 0 0.03668868 0.9993268 0 -0.118409 0.9929649 0 -0.118409 0.9929649 0 0.9998877 -0.01499247 -1.00248e-4 0.9998873 -0.01500862 0 0.9926199 0.1212673 0 0.9998866 -0.01505386 0 0.9917809 -0.1279481 0 0.9917809 -0.1279481 0 -0.1874505 0.9822741 0 -0.1882148 0.9821112 0.005719184 -0.1880823 0.9821465 0.003647267 -0.1882183 0.9821162 -0.004657089 -0.1880843 0.9821418 -0.004657089 -0.188209 0.9820728 -0.01050573 -0.1896287 0.9818558 0 -0.3046896 -0.9524517 0 -0.3046896 -0.9524517 0 -0.4363045 -0.8997991 0 -0.4363045 -0.8997991 0 -0.5659277 -0.8244548 0 -0.5659277 -0.8244548 0 -0.6862885 -0.7273294 0 -0.6862885 -0.7273294 0 -0.7947743 -0.6069051 0 -0.7947743 -0.6069051 0 -0.8860326 -0.4636229 0 -0.8860326 -0.4636229 0 -0.9507127 -0.3100733 0 -0.9507127 -0.3100733 0 -0.9875885 -0.1570637 0 -0.9875885 -0.1570637 0 -0.999969 -0.007871747 0 -0.999969 -0.007871747 0 -0.993377 0.1149007 0 -0.993377 0.1149007 0 -0.2360761 -0.9717343 5.87644e-4 -0.2360837 -0.9717327 0 -0.2360771 -0.9717342 5.86967e-4 -0.2360834 -0.9717324 9.05671e-4 -0.2397758 -0.9708282 0 0.9964448 -0.08424681 0 0.9964448 -0.08424681 0 0.975009 -0.2221651 0 0.9750105 -0.2221589 2.50466e-5 0.9750118 -0.2221528 0 0.932442 -0.3613198 0 0.932442 -0.3613198 0 0.8670589 -0.4982057 0 0.8670589 -0.4982057 0 0.7795474 -0.6263434 0 0.7795474 -0.6263434 0 0.6736059 -0.7390908 0 0.6736059 -0.7390908 0 0.5500882 -0.8351066 0 0.5500882 -0.8351066 0 0.4189143 -0.9080258 0 0.4189143 -0.9080258 0 0.273899 -0.9617584 0 0.273899 -0.9617584 0 0.1152057 -0.9933417 0 0.1152057 -0.9933417 0 -0.03862327 -0.9992538 0 -0.03862327 -0.9992538 0 -0.1742721 -0.9846976 0 -0.1742721 -0.9846976 0 0.9862385 0.1653286 0 0.9957318 0.09229391 0 0.9878197 0.1517666 -0.03433716 0.9647612 0.1458021 0.2190381 0.9644014 0.1481677 0.2190344 0.9074146 0.1371355 0.3972314 0.9074198 0.1371444 0.3972163 -0.1875265 0.9822596 0 -0.1875265 0.9822596 0 -0.03666013 0.9993278 0 -0.03666013 0.9993278 0 0.1169986 0.9931321 0 0.1169986 0.9931321 0 0.2699615 0.9628711 0 0.2699615 0.9628711 0 0.417544 0.9086567 0 0.417544 0.9086567 0 0.5529317 0.8332267 0 0.5529317 0.8332267 0 0.6763907 0.7365432 0 0.6763907 0.7365432 0 0.7833806 0.6215422 0 0.7833806 0.6215422 0 0.8672758 0.4978278 0 0.8672758 0.4978278 0 0.9341001 0.3570113 0 0.9341001 0.3570113 0 0.9749595 0.2223826 0 0.9749595 0.2223826 0 -0.2156957 0.9764606 0 -0.1820878 0.9825828 -0.03708475 -0.1813471 0.9833169 -0.01418542 -0.1821951 0.9831601 -0.01418584 -0.1813326 0.983248 0.01849389 -0.1645936 0.9863615 0 -0.9734038 0.2290961 0 -0.9734038 0.2290961 0 -0.9440369 0.3298401 0 -0.9440369 0.3298401 0 -0.8857602 0.4641433 0 -0.8857602 0.4641433 0 -0.801622 0.5978312 0 -0.801622 0.5978312 0 -0.6981133 0.7159873 0 -0.6981133 0.7159873 0 -0.5726075 0.8198297 0 -0.5726075 0.8198297 0 -0.4331772 0.9013088 0 -0.4331772 0.9013088 0 -0.2880484 0.9576159 0 -0.2880484 0.9576159 0 -0.9849471 0.1728565 0 -0.9845413 0.1746566 -0.01317375 -0.9846027 0.1748045 9.33577e-4 -0.9846263 0.1746721 9.33265e-4 -0.9845828 0.1747986 0.006480932 -0.9783184 0.2071065 0 -0.9957784 -0.09178906 0 -0.9957784 -0.09178906 0 -0.998063 0.0622124 0 -0.998063 0.0622124 0 -0.9763762 0.2160773 0 -0.9763762 0.2160773 0 -0.9305624 0.3661331 0 -0.9305624 0.3661331 0 -0.8590248 0.5119339 0 -0.8590248 0.5119339 0 -0.7629907 0.6464096 0 -0.7629907 0.6464096 0 -0.6510511 0.7590339 0 -0.6510511 0.7590339 0 -0.529354 0.848401 0 -0.529354 0.848401 0 -0.4021186 0.9155876 0 -0.4021186 0.9155876 0 -0.2805877 0.9598284 0 -0.2805877 0.9598284 0 -0.9826521 -0.1854588 0 -0.9826521 -0.1854588 0 -0.9840159 -0.1780804 0 -0.9840159 -0.1780804 0 -0.324262 -0.9459674 0 -0.324262 -0.9459674 0 -0.4714419 -0.8818971 0 -0.4714419 -0.8818971 0 -0.6051381 -0.7961205 0 -0.6051381 -0.7961205 0 -0.7176655 -0.6963881 0 -0.7176655 -0.6963881 0 -0.8168345 -0.5768721 0 -0.8168345 -0.5768721 0 -0.8987097 -0.4385442 0 -0.8987097 -0.4385442 0 -0.957426 -0.288679 0 -0.957426 -0.288679 0 -0.9721412 -0.2343958 0 -0.9721412 -0.2343958 0 -0.2351618 -0.9719563 0 -0.2399641 -0.9707293 -0.01008397 -0.240211 -0.97072 -0.001174747 -0.2402117 -0.9707198 -0.001174747 -0.2399791 -0.9707778 6.97469e-4 -0.2402071 -0.9707072 0.005301773 -0.2498227 -0.9682916 0 0.9670024 -0.254767 0 0.9670024 -0.254767 0 0.9170262 -0.3988268 0 0.9170262 -0.3988268 0 0.8447387 -0.535179 0 0.8447387 -0.535179 0 0.7510344 -0.6602631 0 0.7510344 -0.6602631 0 0.6381654 -0.7698994 0 0.6381654 -0.7698994 0 0.505692 -0.8627141 0 0.505692 -0.8627141 0 0.359377 -0.9331924 0 0.359377 -0.9331924 0 0.2108255 -0.9775237 0 0.2108255 -0.9775237 0 0.06465798 -0.9979075 0 0.06465798 -0.9979075 0 -0.09018808 -0.9959248 0 -0.09018808 -0.9959248 0 -0.2325776 -0.9725779 0 -0.2325776 -0.9725779 0 0.9853488 -0.1705517 0 0.9853488 -0.1705517 0 0.9847168 -0.1741626 0 0.9847168 -0.1741626 0 0.9840386 -0.1779551 0 0.9840386 -0.1779551 0 -0.115673 0.9932873 0 -0.115673 0.9932873 0 0.03947907 0.9992204 0 0.03947907 0.9992204 0 0.1948105 0.9808409 0 0.1948105 0.9808409 0 0.3462457 0.9381439 0 0.3462457 0.9381439 0 0.4928176 0.8701325 0 0.4928176 0.8701325 0 0.6268842 0.7791124 0 0.6268842 0.7791124 0 0.7394539 0.6732072 0 0.7394539 0.6732072 0 0.8302199 0.557436 0 0.8302199 0.557436 0 0.9059056 0.4234797 0 0.9059056 0.4234797 0 0.9620884 0.2727376 0 0.9620913 0.2727276 -6.68847e-5 0.9623652 0.2717596 0 0.9928132 0.1196747 0 0.9928132 0.1196747 0 0.9999065 -0.01367968 0 0.9999065 -0.01367968 0 0.9939061 -0.1102299 0 0.9939061 -0.1102299 0 -0.1847114 0.9827928 0 -0.1854844 0.9826303 0.00577414 -0.1854929 0.9826281 0.005881845 -0.1853561 0.9826708 -0.001062333 -0.1854933 0.9826341 -0.004748463 -0.1853557 0.9826599 -0.004748404 -0.1854825 0.9825894 -0.0106939 -0.1869301 0.9823732 0 0.5623098 -0.8269267 0 0.5623098 -0.8269267 0 0.4302065 -0.9027306 0 0.4302065 -0.9027306 0 0.2788234 -0.9603425 0 0.2788234 -0.9603425 0 0.1229931 -0.9924076 0 0.1229931 -0.9924076 0 0.02271473 -0.999742 0 0.02271473 -0.999742 0 0.8350709 -0.5501424 0 0.8350709 -0.5501424 0 0.7359471 -0.6770391 0 0.7359471 -0.6770391 0 0.6221262 -0.7829171 0 0.6221262 -0.7829171 0 0.5438691 -0.83917 0 0.5438691 -0.83917 0 0 -1 0 0 -1 0 -0.9244094 -0.3814017 0 -0.9132737 -0.3870003 0.1271296 -0.9055001 -0.4191967 -0.06590718 -0.9187551 -0.3893084 -0.06578809 -0.8900476 -0.4120227 -0.1950708 -0.9011911 -0.4334219 0 -0.9428285 -0.3163786 0.1047803 -0.9506196 -0.3103585 0 -0.9328701 -0.3602131 0 -0.9425675 -0.3075717 0.1302542 -0.9327452 -0.3601474 -0.01674389 -0.9479337 -0.3180338 -0.01661431 -0.9229859 -0.364993 -0.1219713 -0.9875839 -0.1570925 0 -0.9875839 -0.1570925 0 -0.9619753 -0.2731364 0 -0.9619753 -0.2731364 0 -0.7814828 -0.6239268 0 -0.7814828 -0.6239268 0 0.6649454 -0.7468921 0 0.6841579 -0.7292638 0.01010376 0.6843431 -0.7291358 0.00594449 0.6841903 -0.729286 0.005070209 0.6843476 -0.7291384 0.005070209 0.68419 -0.7293039 0 0.9480103 0.3182395 0 0.9480103 0.3182395 0 0.9870301 0.1605351 0 0.9870301 0.1605351 0 1 0 0 1 0 0 0.986833 -0.1617423 0 0.986833 -0.1617423 0 0.9467476 -0.3219766 0 0.9467476 -0.3219766 0 0.9073591 -0.4203565 0 0.9073591 -0.4203565 0 0.8908984 0.4542028 0 0.890863 0.4542721 1.61882e-4 0.9044887 0.4143924 -0.1008921 0.9096732 0.4136766 -0.03696411 0.9085034 0.416239 -0.03696846 0.9099667 0.4138064 0.02692246 0.9348436 0.3550598 0 0.8613809 0.5079596 0 0.8613795 0.5079619 6.21091e-6 0.8624253 0.4885547 -0.1324265 0.8755571 0.4805851 0.04937368 0.8690294 0.4922955 0.04932606 0.8471392 0.4649899 0.257176 0.89175 0.4525285 0 0.9790065 -0.2038289 0 0.9637877 -0.2265579 0.1406585 0.9713109 -0.2021803 0.1252129 0.9860112 -0.1611467 0.04258787 0.9781056 -0.2036731 0.04274022 0.982639 -0.1605378 -0.09299647 0.989794 -0.1425058 0 0.9994283 -0.0338121 0 0.996554 -0.08294486 0 0.9968895 -0.02512818 -0.07469838 0.9965637 -0.08280754 -0.001902997 0.9994294 -0.03372216 -0.001991152 0.9931291 -0.09109598 0.07345885 0.9991346 0.04159492 0 0.08208185 0.9966256 0 0.08208185 0.9966256 0 0.2452144 0.9694688 0 0.2452144 0.9694688 0 0.4010174 0.9160705 0 0.4010174 0.9160705 0 0.5453509 0.8382079 0 0.5453509 0.8382079 0 0.6754316 0.7374227 0 0.6754316 0.7374227 0 0.7876293 0.6161494 0 0.7876293 0.6161494 0 0.878512 0.4777202 0 0.878512 0.4777202 0 0.9454609 0.3257354 0 0.9454609 0.3257354 0 0.9862934 0.1650008 0 0.9862936 0.1649999 -1.03625e-5 0.9862937 0.1649991 0 0.9991346 0.04159492 0 -0.9966397 0.08191138 -7.39636e-5 -0.9966401 0.08190631 0 -0.9966391 0.0819174 0 -0.9688456 0.2476658 0 -0.9688456 0.2476658 0 -0.9131124 0.4077079 0 -0.9131124 0.4077079 0 -0.8316178 0.5553484 0 -0.8316178 0.5553484 0 -0.7276065 0.6859949 0 -0.7276065 0.6859949 0 -0.6036069 0.797282 0 -0.6036069 0.797282 0 -0.4622438 0.886753 0 -0.4622438 0.886753 0 -0.3088077 0.9511246 0 -0.3088077 0.9511246 0 -0.148278 0.9889457 0 -0.148278 0.9889457 0 -0.03364646 0.9994337 0 -0.03364646 0.9994337 0 -0.9992476 -0.03878372 0 -0.08187818 -0.9966424 0 -0.08187818 -0.9966424 0 -0.2478656 -0.9687944 0 -0.2478656 -0.9687944 0 -0.4078155 -0.9130644 0 -0.4078155 -0.9130644 0 -0.5547042 -0.8320477 0 -0.5547042 -0.8320477 0 -0.6848382 -0.7286952 0 -0.6848382 -0.7286952 0 -0.7955353 -0.6059073 0 -0.7955353 -0.6059073 0 -0.884307 -0.4669058 0 -0.884307 -0.4669058 0 -0.948761 -0.3159946 0 -0.948761 -0.3159946 0 -0.9874922 -0.1576684 0 -0.987492 -0.1576687 5.21647e-6 -0.9874919 -0.1576698 0 -0.9992476 -0.03878372 0 0 -1 0 0 -1 0 -0.7069073 -0.7073063 0 -0.7069073 -0.7073063 0 -0.5796677 -0.814853 0 -0.5796677 -0.814853 0 -0.4439929 -0.8960303 0 -0.4439929 -0.8960303 0 -0.3001552 -0.9538904 0 -0.3001552 -0.9538904 0 -0.1712823 -0.9852219 0 -0.1712823 -0.9852219 0 -0.03024864 -0.9995424 0 -0.03024864 -0.9995424 0 -0.001266479 -0.9999993 0 -0.001266479 -0.9999993 0 0 -1 0 0 -1 0 1 0 0 1 0 0 0 1 0 0 1 0 -0.009101867 0.9999586 0 -0.009101867 0.9999586 0 -0.1124537 0.9936569 0 -0.1124537 0.9936569 0 -0.2602046 0.9655535 0 -0.2602046 0.9655535 0 -0.3935374 0.9193086 0 -0.3935374 0.9193086 0 -0.5280309 0.8492251 0 -0.5280309 0.8492251 0 -0.6554062 0.7552766 0 -0.6554062 0.7552766 0 -0.7516092 0.6596087 0 -0.7516092 0.6596087 0 0 1 0 0 1 0 0.7424618 0.6698884 0 0.7424618 0.6698884 0 0.6231303 0.782118 0 0.6231303 0.782118 0 0.493509 0.8697408 0 0.493509 0.8697408 0 0.352406 0.9358472 0 0.352406 0.9358472 0 0.2033898 0.9790979 0 0.2033898 0.9790979 0 0.04840546 0.9988278 0 0.04840546 0.9988278 0 0.003142952 0.9999951 0 0.003142952 0.9999951 0 0 1 0 0 1 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0.00965166 -0.9999535 0 0.00965166 -0.9999535 0 0.1164032 -0.9932021 0 0.1164032 -0.9932021 0 0.2559334 -0.9666944 0 0.2559334 -0.9666944 0 0.3885141 -0.9214428 0 0.3885141 -0.9214428 0 0.5221073 -0.8528799 0 0.5221073 -0.8528799 0 0.6496214 -0.7602578 0 0.6496214 -0.7602578 0 0.752009 -0.6591528 0 0.752009 -0.6591528 0 0 -1 0 0 -1 0 0.7344681 -0.6786432 0 0.7344681 -0.6786432 0 0.8294424 -0.5585924 0 0.8294424 -0.5585924 0 0.9054547 -0.4244428 0 0.9054547 -0.4244428 0 0.9619086 -0.2733712 0 0.9619086 -0.2733712 0 0.9927825 -0.119928 0 0.9927825 -0.119928 0 0.9996721 -0.02560722 0 0.9996721 -0.02560722 0 1 0 0 1 0 0 0 1 0 0 1 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 1 0 0 1 0 0 0.9981873 0.06018376 0 0.9981873 0.06018376 0 0.9778714 0.2092071 0 0.9778714 0.2092071 0 0.9360952 0.3517467 0 0.9360952 0.3517467 0 0.8726347 0.4883736 0 0.8726347 0.4883736 0 0.786796 0.6172131 0 0.786796 0.6172131 0 1 0 0 1 0 0 0 -1 0 0 -1 0 -0.9901291 -0.1401582 0 -0.9901291 -0.1401582 0 -0.955867 -0.2937996 0 -0.955867 -0.2937996 0 -0.8947771 -0.4465133 0 -0.8947771 -0.4465133 0 -0.8084403 -0.5885782 0 -0.8084403 -0.5885782 0 -0.7082083 -0.7060035 0 -0.7082083 -0.7060035 0 -0.5985203 -0.8011078 0 -0.5985203 -0.8011078 0 -0.4689928 -0.883202 0 -0.4689928 -0.883202 0 -0.3224734 -0.9465786 0 -0.3224734 -0.9465786 0 -0.2009416 -0.9796032 0 -0.2009416 -0.9796032 0 -0.05808001 -0.9983119 0 -0.05808001 -0.9983119 0 -0.004249513 -0.9999909 0 -0.004249513 -0.9999909 0 0 -1 0 0 -1 0 1 0 0 1 0 0 0 1 0 0 1 0 -0.008955597 0.9999598 0 -0.008955597 0.9999598 0 -0.110737 0.9938498 0 -0.110737 0.9938498 0 -0.2574545 0.9662905 0 -0.2574545 0.9662905 0 -0.3843165 0.9232014 0 -0.3843165 0.9232014 0 -0.5149111 0.8572436 0 -0.5149111 0.8572436 0 -0.6412128 0.7673633 0 -0.6412128 0.7673633 0 -0.754296 0.6565346 0 -0.754296 0.6565346 0 -0.8378935 0.5458339 0 -0.8378935 0.5458339 0 0 1 0 0 1 0 1 0 0 1 0 0 0.9966441 -0.0818572 0 0.9966441 -0.0818572 0 0.9688643 -0.2475922 0 0.9688934 -0.2474786 9.91426e-5 0.9688944 -0.2474745 0 0.9135701 -0.4066814 0 0.9135701 -0.4066814 0 0.8332726 -0.5528623 0 0.8332726 -0.5528623 0 0.7305757 -0.6828317 0 0.7305757 -0.6828317 0 0.6082585 -0.793739 0 0.6082585 -0.793739 0 0.4695602 -0.8829005 0 0.4695602 -0.8829005 0 0.3183051 -0.9479884 0 0.3183051 -0.9479884 0 0.1588846 -0.9872972 0 0.1588846 -0.9872972 0 0.03895717 -0.9992409 0 0.03895717 -0.9992409 0 0.9991566 0.04106235 0 0.08204537 0.9966287 0 0.08204537 0.9966287 0 0.2453333 0.9694388 0 0.2453333 0.9694388 0 0.4012873 0.9159523 0 0.4012873 0.9159523 0 0.545637 0.8380217 0 0.545637 0.8380217 0 0.6756634 0.7372103 0 0.6756634 0.7372103 0 0.7878047 0.6159251 0 0.7878047 0.6159251 0 0.8786558 0.4774556 0 0.8786558 0.4774556 0 0.9456093 0.3253047 0 0.9456093 0.3253047 0 0.9864278 0.1641955 0 0.9864272 0.1641992 4.81587e-5 0.9864265 0.1642036 0 0.9991566 0.04106235 0 -0.9966402 0.08190447 -4.39421e-5 -0.9966404 0.08190149 0 -0.9966399 0.08190816 0 -0.9688273 0.2477371 0 -0.9688273 0.2477371 0 -0.9130623 0.4078201 0 -0.9130623 0.4078201 0 -0.8315746 0.555413 0 -0.8315746 0.555413 0 -0.7276125 0.6859884 0 -0.7276125 0.6859884 0 -0.6037461 0.7971767 0 -0.6037461 0.7971767 0 -0.4626762 0.8865273 0 -0.4626762 0.8865273 0 -0.3095764 0.9508746 0 -0.3095764 0.9508746 0 -0.1493598 0.9887829 0 -0.1493598 0.9887829 0 -0.03425472 0.9994131 0 -0.03425472 0.9994131 0 -0.999228 -0.0392884 0 -0.08189004 -0.9966413 0 -0.08189004 -0.9966413 0 -0.2480395 -0.9687499 0 -0.2480395 -0.9687499 0 -0.4082574 -0.9128668 0 -0.4082574 -0.9128668 0 -0.5553233 -0.8316346 0 -0.5553233 -0.8316346 0 -0.6854673 -0.7281034 0 -0.6854673 -0.7281034 0 -0.7960214 -0.6052685 0 -0.7960214 -0.6052685 0 -0.8845683 -0.4664108 0 -0.8845683 -0.4664108 0 -0.9487859 -0.3159197 0 -0.9487859 -0.3159197 0 -0.9873998 -0.1582454 0 -0.9874002 -0.1582424 -5.88088e-5 -0.9874024 -0.1582293 0 -0.999228 -0.0392884 0 0 -1 0 0 -1 0 0.8209201 -0.5710431 0 0.8209201 -0.5710431 0 0.7191516 -0.6948532 0 0.7191516 -0.6948532 0 0.5922546 -0.8057509 0 0.5922546 -0.8057509 0 0.5152273 -0.8570536 0 0.5152273 -0.8570536 0 0.4352003 -0.9003338 0 0.4352003 -0.9003338 0 0.2762573 -0.9610837 0 0.2762573 -0.9610837 0 0.1148571 -0.993382 0 0.1148571 -0.993382 0 0.01844191 -0.99983 0 0.01844191 -0.99983 0 0.9981133 -0.06139922 0 0.9981133 -0.06139922 0 0.9771094 -0.2127374 0 0.9771094 -0.2127374 0 0.932609 -0.3608883 0 0.932609 -0.3608883 0 0.8797842 -0.4753732 0 0.8797842 -0.4753732 0 0.9994669 0.03265035 0 0.9993 0.03062915 -0.02148079 0.9994722 0.01833939 0.02681267 0.9991707 0.03064763 0.0268079 0.9974797 0.01833087 0.06854188 0.9999288 0.0119313 0 0.9989012 0.0468676 0 0.9988449 0.0480501 0 0.9988567 0.04685366 -0.009487211 0.9989108 0.04620343 -0.006527423 0.9989122 0.04617261 -0.006527423 0 1 0 0 1 0 -0.009200692 0.9999577 0 -0.009200692 0.9999577 0 -0.1116591 0.9937466 0 -0.1116591 0.9937466 0 -0.2008441 0.9796233 0 -0.2008441 0.9796233 0 -0.2611652 0.9652942 0 -0.2611652 0.9652942 0 -0.3911765 0.9203157 0 -0.3911765 0.9203157 0 -0.5280231 0.84923 0 -0.5280231 0.84923 0 -0.6535891 0.7568495 0 -0.6535891 0.7568495 0 -0.7636701 0.6456066 0 -0.7636701 0.6456066 0 -0.8596706 0.5108489 0 -0.8596706 0.5108489 0 -0.9315292 0.3636667 0 -0.9315292 0.3636667 0 0 1 0 0 1 0 0.7856048 0.6187287 0 0.7856048 0.6187287 0 0.6745647 0.7382159 0 0.6745647 0.7382159 0 0.5503658 0.8349237 0 0.5503658 0.8349237 0 0.4128733 0.9107885 0 0.4128733 0.9107885 0 0.2621327 0.9650318 0 0.2621327 0.9650318 0 0.1765173 0.9842975 0 0.1765173 0.9842975 0 0.05474913 0.9985001 0 0.05474913 0.9985001 0 0.003708541 0.9999932 0 0.003708541 0.9999932 0 0 1 0 0 1 0 -0.9990016 0.04467302 0 -0.9996662 0.02584052 0 -0.9852954 0.04404968 -0.1650838 -0.9901683 0.05614525 -0.1281188 -0.9901683 0.05614471 -0.1281188 -0.9998226 0.01883715 0 -0.9999975 0.00226283 0 -0.9770639 0.01842045 -0.2121484 -0.986585 0.02787595 -0.1608514 -0.986585 0.02787435 -0.1608514 -0.9742913 -0.2252919 0 -0.9742913 -0.2252919 0 -0.9959472 -0.08993995 0 -0.9959472 -0.08993995 0 -0.9999132 -0.01317596 0 -0.9999132 -0.01317596 0 -0.06881737 -0.9976293 0 -0.06881737 -0.9976293 0 -0.217177 -0.9761323 0 -0.217177 -0.9761323 0 -0.3732474 -0.9277318 0 -0.3732474 -0.9277318 0 -0.5211144 -0.8534869 0 -0.5211144 -0.8534869 0 -0.652461 -0.7578224 0 -0.652461 -0.7578224 0 -0.7614094 -0.6482715 0 -0.7614094 -0.6482715 0 -0.8458762 -0.5333793 0 -0.8458762 -0.5333793 0 -0.916243 -0.4006229 0 -0.916243 -0.4006229 0 -0.949133 -0.3148756 0 -0.949133 -0.3148756 0 0.9424196 -0.3344326 0 0.9424196 -0.3344326 0 0.8731753 -0.4874063 0 0.8731753 -0.4874063 0 0.7828052 -0.6222669 0 0.7828052 -0.6222669 0 0.6723182 -0.7402622 0 0.6723182 -0.7402622 0 0.5782044 -0.8158919 0 0.5782044 -0.8158919 0 0.4744808 -0.8802659 0 0.4744808 -0.8802659 0 0.3245409 -0.9458716 0 0.3245409 -0.9458716 0 0.1648606 -0.9863169 0 0.1648606 -0.9863169 0 0.04152691 -0.9991374 0 0.04152691 -0.9991374 0 0 -1 0 0 -1 0 -0.07630658 -0.9970844 0 -0.07630658 -0.9970844 0 -0.2365451 -0.9716205 0 -0.2365451 -0.9716205 0 -0.3951353 -0.9186229 0 -0.3951353 -0.9186229 0 -0.5395256 -0.8419692 0 -0.5395256 -0.8419692 0 -0.6662101 -0.7457641 0 -0.6662101 -0.7457641 0 -0.7753591 -0.6315208 0 -0.7753591 -0.6315208 0 -0.8662391 -0.4996299 0 -0.8662391 -0.4996299 0 -0.9356036 -0.3530521 0 -0.9356036 -0.3530521 0 -0.9736813 -0.2279138 0 -0.9736813 -0.2279138 0 0 -1 0 0 -1 0 0.996644 -0.08185738 0 0.996644 -0.08185738 0 0.9688675 -0.2475795 0 0.9688907 -0.247489 7.87258e-5 0.9688915 -0.2474858 0 0.9135578 -0.4067087 0 0.9135578 -0.4067087 0 0.8332517 -0.5528938 0 0.8332517 -0.5528938 0 0.7305443 -0.6828652 0 0.7305443 -0.6828652 0 0.6082291 -0.7937616 0 0.6082291 -0.7937616 0 0.4695332 -0.8829148 0 0.4695332 -0.8829148 0 0.3182843 -0.9479953 0 0.3182843 -0.9479953 0 0.1588807 -0.9872978 0 0.1588807 -0.9872978 0 0.03895956 -0.9992407 0 0.03895956 -0.9992407 0 0.9991565 0.04106664 0 0.08204478 0.9966287 0 0.08204478 0.9966287 0 0.245331 0.9694393 0 0.245331 0.9694393 0 0.401282 0.9159546 0 0.401282 0.9159546 0 0.5456265 0.8380285 0 0.5456265 0.8380285 0 0.6756495 0.737223 0 0.6756495 0.737223 0 0.787796 0.6159362 0 0.787796 0.6159362 0 0.8786424 0.4774805 0 0.8786424 0.4774805 0 0.9456051 0.3253166 0 0.9456051 0.3253166 0 0.9864266 0.1642029 0 0.9864261 0.1642064 4.60099e-5 0.9864253 0.1642106 0 0.9991565 0.04106664 0 -0.9966404 0.08190155 4.44513e-6 -0.9966405 0.08190184 0 -0.9966405 0.08190119 0 -0.968829 0.2477305 0 -0.968829 0.2477305 0 -0.9130636 0.4078172 0 -0.9130636 0.4078172 0 -0.8315877 0.5553935 0 -0.8315877 0.5553935 0 -0.727625 0.6859753 0 -0.727625 0.6859753 0 -0.6037654 0.7971621 0 -0.6037654 0.7971621 0 -0.4626864 0.8865221 0 -0.4626864 0.8865221 0 -0.3095875 0.9508709 0 -0.3095875 0.9508709 0 -0.1493629 0.9887825 0 -0.1493629 0.9887825 0 -0.03425717 0.9994131 0 -0.03425717 0.9994131 0 -0.9992279 -0.03928726 0 -0.08189052 -0.9966414 0 -0.08189052 -0.9966414 0 -0.2480427 -0.9687491 0 -0.2480427 -0.9687491 0 -0.4082663 -0.9128628 0 -0.4082663 -0.9128628 0 -0.5553385 -0.8316245 0 -0.5553385 -0.8316245 0 -0.6854848 -0.728087 0 -0.6854848 -0.728087 0 -0.796041 -0.6052427 0 -0.796041 -0.6052427 0 -0.8845772 -0.4663939 0 -0.8845772 -0.4663939 0 -0.9487941 -0.3158954 0 -0.9487941 -0.3158954 0 -0.9874015 -0.158235 0 -0.9874024 -0.158229 -1.16489e-4 -0.9874066 -0.1582032 0 -0.9992279 -0.03928726 0 0 -1 0 0 -1 0 0.9208807 0.3898445 0 0.9208807 0.3898445 0 0.8446857 0.5352626 0 0.8446857 0.5352626 0 0.7461512 0.6657766 0 0.7461512 0.6657766 0 0.6368672 0.7709735 0 0.6368672 0.7709735 0 0.51059 0.8598244 0 0.51059 0.8598244 0 0.3668413 0.9302834 0 0.3668413 0.9302834 0 0.218025 0.9759432 0 0.218025 0.9759432 0 0.06230491 0.9980571 0 0.06230491 0.9980571 0 0.004607737 0.9999894 0 0.004607737 0.9999894 0 0 1 0 0 1 0 -0.999154 0.04112523 0 -0.9970766 0.03618466 -0.06729674 -0.9981129 0.04488527 -0.04190534 -0.9981141 0.04485774 -0.04190534 -0.9991548 0.04110705 0 -0.9997707 0.02141988 0 -0.9997707 0.02141988 0 -0.9997709 0.02140337 0 -0.9997709 0.02140337 0 -0.975019 -0.2221217 0 -0.975019 -0.2221217 0 -0.9971285 -0.0757277 0 -0.9971285 -0.0757277 0 -0.9999665 -0.008188068 0 -0.9999665 -0.008188068 0 -0.0802161 -0.9967775 0 -0.0802161 -0.9967775 0 -0.2411602 -0.9704853 0 -0.2411602 -0.9704853 0 -0.3960413 -0.9182327 0 -0.3960413 -0.9182327 0 -0.5424479 -0.8400894 0 -0.5424479 -0.8400894 0 -0.6714126 -0.7410838 0 -0.6714126 -0.7410838 0 -0.7783992 -0.6277695 0 -0.7783992 -0.6277695 0 -0.8619412 -0.5070082 0 -0.8619412 -0.5070082 0 -0.9263649 -0.3766273 0 -0.9263649 -0.3766273 0 0.7574484 -0.652895 0 0.7574484 -0.652895 0 0.6424177 -0.7663547 0 0.6424177 -0.7663547 0 0.5126895 -0.8585741 0 0.5126895 -0.8585741 0 0.3726168 -0.9279854 0 0.3726168 -0.9279854 0 0.2146539 -0.9766902 0 0.2146539 -0.9766902 0 0.06434494 -0.9979277 0 0.06434494 -0.9979277 0 0.9094341 -0.4158481 0 0.9094341 -0.4158481 0 0.8418388 -0.5397292 0 0.8418388 -0.5397292 0 0.7963034 -0.6048976 0 0.7963034 -0.6048976 0 0 -1 0 0 -1 0 -0.5849518 -0.8110679 0 -0.5833787 -0.8121585 0.00824058 -0.5833091 -0.8122502 -3.73797e-4 -0.5833998 -0.8121851 -3.73406e-4 -0.5833042 -0.8122482 -0.003006935 -0.5732313 -0.8193937 0 -0.8069635 -0.5906015 0 -0.8069635 -0.5906015 0 -0.7046107 -0.7095941 0 -0.7046107 -0.7095941 0 -0.6260992 -0.7797433 0 -0.6260992 -0.7797433 0 -0.5950344 -0.8037002 0 -0.5950344 -0.8037002 0 0 -1 0 0 -1 0 1 0 0 1 0 0 0.9791814 0.2029874 0 0.9791814 0.2029874 0 0.99707 0.07649493 0 0.99707 0.07649493 0 0.999947 0.01030761 0 0.999947 0.01030761 0 0.5623812 0.8268782 0 0.5570726 0.8283407 0.05934673 0.5573371 0.8301401 0.015585 0.5579887 0.8297023 0.01558691 0.5572459 0.8300024 -0.02393859 0.554819 0.8319712 0 1 0 0 1 0 0 0 -1 0 0 -1 0 -0.8331043 -0.553116 0 -0.8331043 -0.553116 0 -0.7308431 -0.6825454 0 -0.7308431 -0.6825454 0 -0.6206638 -0.7840769 0 -0.6206638 -0.7840769 0 -0.491798 -0.8707093 0 -0.491798 -0.8707093 0 -0.3455971 -0.9383831 0 -0.3455971 -0.9383831 0 -0.1999195 -0.9798124 0 -0.1999195 -0.9798124 0 -0.04850125 -0.9988232 0 -0.04850125 -0.9988232 0 -0.004244923 -0.999991 0 -0.004244923 -0.999991 0 0 -1 0 0 -1 0 1 0 0 1 0 0 0 1 0 0 1 0 -0.01098388 0.9999397 0 -0.01098388 0.9999397 0 -0.1381026 0.990418 0 -0.1381026 0.990418 0 -0.2695094 0.9629977 0 -0.2695094 0.9629977 0 -0.4097403 0.9122022 0 -0.4097403 0.9122022 0 -0.537123 0.843504 0 -0.537123 0.843504 0 -0.6601682 0.7511178 0 -0.6601682 0.7511178 0 -0.7698749 0.6381949 0 -0.7698749 0.6381949 0 -0.8589754 0.5120167 0 -0.8589754 0.5120167 0 0 1 0 0 1 0 0.173151 0.04928368 -0.9836614 0.04636305 0.007458567 -0.9988968 0.04053789 0.02313542 -0.9989101 0.03717905 0.02774155 -0.9989234 0.03342843 0.03195703 -0.9989301 0.6984502 0.7141135 -0.04700344 0.7850062 0.6177019 -0.0470072 0.858352 0.5109032 -0.04700857 0.3400027 0.08927816 -0.9361771 0.3328507 0.02743738 -0.9425802 0.04658222 0.0023368 -0.9989117 0.04710674 0.001946747 -0.998888 0.1796543 0.007425785 -0.9837018 0.1796714 0.007424652 -0.9836986 0.3339862 0.01380151 -0.9424768 0.3173508 0.02759188 -0.9479067 0.4752058 0.162729 -0.8646957 0.7210783 0.2149243 -0.6586757 0.6303234 0.1921249 -0.7521838 0.6106878 0.2029824 -0.765414 0.5561125 0.169228 -0.8136957 0.5560931 0.1692219 -0.8137103 0.721108 0.2149333 -0.6586402 0.7305829 0.2292799 -0.6431791 0.7809876 0.2279549 -0.5814594 0.8289942 0.2470166 -0.5017484 0.8304119 0.2500086 -0.4979074 0.7809622 0.2279474 -0.5814964 0.8984847 0.2705385 -0.3457372 0.8890603 0.2524538 -0.3818886 0.8890522 0.2524514 -0.381909 0.9613146 0.267624 -0.06520479 0.9613142 0.2676239 -0.0652095 0.9437919 0.277626 -0.1793897 0.9429822 0.2706409 -0.1937469 0.9205291 0.2631232 -0.2887772 0.9172606 0.3955034 -0.04701226 0.9172671 0.3954889 -0.04700589 0.9616796 0.2701182 -0.04699486 0.9596998 0.2731588 -0.06603384 0.9753869 0.2103379 -0.06617045 0.858354 0.5108999 -0.04700547 0.7850034 0.617705 -0.04701226 0.698452 0.7141114 -0.04700726 0.6188202 0.7841213 -0.04706734 0.6188197 0.7841219 -0.04706585 0.6094429 0.7722402 -0.1795117 0.6094426 0.7722406 -0.1795107 0.6094399 0.7722415 -0.1795162 0.5812732 0.7365505 -0.3458535 0.5812741 0.7365471 -0.3458597 0.5812754 0.736547 -0.3458575 0.535811 0.6789379 -0.5019462 0.5358107 0.6789402 -0.5019433 0.5358107 0.6789402 -0.5019434 0.47439 0.6011124 -0.6431315 0.4743899 0.60111 -0.6431338 0.4743851 0.6011088 -0.6431383 0.398823 0.5053615 -0.7652125 0.3988228 0.5053596 -0.7652138 0.3988241 0.50536 -0.7652128 0.3113561 0.394527 -0.8645264 0.311356 0.3945259 -0.8645269 0.3113552 0.3945256 -0.8645272 0.2145825 0.2719026 -0.9380955 0.2145825 0.2719032 -0.9380955 0.2145843 0.2719038 -0.9380949 0.1113925 0.1411485 -0.9837017 0.1113932 0.1411458 -0.9837019 0.1113933 0.1411486 -0.9837015 0.02992832 0.03648853 -0.9988858 0.02856606 0.03619682 -0.9989364 0.02922546 0.03563135 -0.9989376 0.04636281 0.00745958 -0.9988968 0.04636216 0.007463634 -0.9988968 0.04563599 0.01298928 -0.9988737 0.04557478 0.01300257 -0.9988764 0.04335123 0.01825416 -0.9988931 0.3400033 0.08927518 -0.9361771 0.3151951 0.04682928 -0.9478708 0.178073 0.02645671 -0.9836615 0.179656 0.007424116 -0.9837016 0.1796576 0.007424592 -0.9837012 0.04658216 0.002337574 -0.9989117 0.04739832 0.00704205 -0.9988512 0.1780731 0.02645671 -0.9836616 0.1731504 0.04928392 -0.9836615 0.3364136 0.09575372 -0.9368335 0.3345262 0.09200179 -0.9378848 0.3264004 0.08973145 -0.9409628 0.4760851 0.164713 -0.8638359 0.9172612 0.3955024 -0.04700863 0.9033956 0.3895239 -0.179297 0.9033954 0.3895243 -0.1792979 0.8617368 0.371562 -0.3454725 0.8617358 0.3715628 -0.3454744 0.7944656 0.3425574 -0.5014766 0.7944663 0.342557 -0.5014758 0.7035399 0.3033515 -0.6426582 0.7035384 0.3033521 -0.6426595 0.5915963 0.2550848 -0.7648172 0.5915998 0.2550837 -0.764815 0.4619476 0.1991808 -0.8642519 0.4619457 0.1991814 -0.8642528 0.3184196 0.1372959 -0.9379546 0.3184205 0.1372956 -0.9379543 0.1653156 0.0712803 -0.9836615 0.1653147 0.07128059 -0.9836615 0.04321587 0.01863384 -0.998892 0.04410624 0.01857173 -0.9988542 0.8583537 0.5109004 -0.04700732 0.8453785 0.5031775 -0.1792976 0.8453784 0.5031775 -0.1792978 0.8063947 0.479974 -0.3454745 0.8063939 0.4799744 -0.3454756 0.7434448 0.4425064 -0.5014756 0.7434455 0.4425062 -0.5014747 0.6583569 0.3918606 -0.6426597 0.6583552 0.391861 -0.6426612 0.5536057 0.3295128 -0.764815 0.553609 0.3295122 -0.7648128 0.4322796 0.2572961 -0.8642529 0.4322789 0.2572962 -0.8642532 0.2979713 0.1773551 -0.9379543 0.2979704 0.1773552 -0.9379546 0.1546981 0.09207803 -0.9836615 0.1546987 0.09207797 -0.9836615 0.04014867 0.02389681 -0.998908 0.04206395 0.02400636 -0.9988266 0.7850057 0.617703 -0.04700267 0.7731389 0.6083654 -0.1792976 0.7731405 0.6083644 -0.1792948 0.7374871 0.5803097 -0.3454756 0.7374868 0.5803099 -0.3454761 0.6799174 0.5350099 -0.5014747 0.6799161 0.5350102 -0.5014762 0.602098 0.4737769 -0.6426612 0.6020987 0.4737768 -0.6426606 0.5063015 0.3983963 -0.7648131 0.5062994 0.3983964 -0.7648144 0.3953393 0.3110842 -0.8642532 0.3953384 0.3110842 -0.8642536 0.272508 0.2144313 -0.9379544 0.2725102 0.2144313 -0.937954 0.1414793 0.1113265 -0.9836615 0.1414793 0.1113265 -0.9836615 0.03650349 0.02872365 -0.9989207 0.03915756 0.02921891 -0.9988057 0.6984503 0.7141134 -0.04700309 0.6878925 0.7033188 -0.1792948 0.6878937 0.7033181 -0.1792924 0.6561712 0.6708843 -0.345476 0.6561696 0.6708847 -0.3454782 0.6049479 0.6185143 -0.5014759 0.6049513 0.6185141 -0.5014722 0.535712 0.5477225 -0.6426606 0.5357121 0.5477225 -0.6426604 0.4504762 0.4605755 -0.7648146 0.450474 0.4605754 -0.764816 0.3517491 0.3596367 -0.8642535 0.3517507 0.3596369 -0.8642528 0.2424633 0.2478992 -0.937954 0.2424626 0.2478991 -0.937954 0.1258798 0.1287022 -0.9836617 0.1258789 0.1287022 -0.9836617 0.03238797 0.03311437 -0.9989266 0.03578972 0.03421556 -0.9987735 0.08087921 0 -0.9967239 0.1796342 0.01777327 -0.983573 0.04710686 0 -0.9988898 0.08087921 0 -0.9967239 0.08087921 0 -0.996724 0.08087921 0 -0.996724 0.04710686 0 -0.9988898 0.04710972 -0.001096963 -0.9988891 0.1796625 0 -0.9837283 0.1796593 0 -0.9837289 0.3174716 0 -0.9482677 0.3174716 0 -0.9482677 0.1796764 0 -0.9837258 0.1796764 0 -0.9837258 0.1796593 0 -0.9837289 -0.9659257 0.2588197 0 -0.9063086 0.4226166 0 -0.9063086 0.4226166 0 -0.8191522 0.5735762 0 -0.8191522 0.5735762 0 -0.7070868 0.7071268 0 -0.7071066 0.707107 6.52205e-7 -0.707107 0.7071067 0 -0.5735756 0.8191526 0 -0.5735756 0.8191526 0 -0.4226189 0.9063075 0 -0.4226189 0.9063075 0 -0.2588187 0.9659259 0 -0.2588187 0.9659259 0 -0.08715564 0.9961948 0 -0.08715564 0.9961948 0 0.08715564 0.9961948 0 0.08715564 0.9961948 0 0.2588187 0.9659259 0 0.2588187 0.9659259 0 0.4226199 0.906307 0 0.4226199 0.906307 0 0.5735756 0.8191526 0 0.5735756 0.8191526 0 0.707107 0.7071067 0 0.7071052 0.7071084 3.23928e-6 0.7070066 0.707207 0 0.8191522 0.5735762 0 0.8191522 0.5735762 0 0.9063075 0.4226189 0 0.9063075 0.4226189 0 0.9659264 0.258817 0 0.9659264 0.258817 0 0.9961948 0.08715492 0 0.9961948 0.08715564 7.21502e-7 0.9961944 0.08715862 0 0.9961948 -0.08715564 0 0.9961948 -0.08715564 0 0.9659264 -0.258817 0 0.9659264 -0.258817 0 0.9063076 -0.4226186 0 0.9063076 -0.4226186 0 0.819152 -0.5735765 0 0.819152 -0.5735765 0 0.7071053 -0.7071081 0 0.7071053 -0.7071081 0 0.5735784 -0.8191507 0 0.5735752 -0.819153 -1.52181e-6 0.5735738 -0.8191539 0 0.422619 -0.9063075 0 0.4226205 -0.9063067 1.8751e-6 0.4226279 -0.9063032 0 0.258818 -0.9659261 0 0.258818 -0.9659261 0 0.08715564 -0.9961948 0 0.08715564 -0.9961948 0 -0.08715564 -0.9961948 0 -0.08715564 -0.9961948 0 -0.258818 -0.9659261 0 -0.258818 -0.9659261 0 -0.4226218 -0.9063063 0 -0.4226195 -0.9063073 5.76115e-7 -0.422619 -0.9063075 0 -0.5735757 -0.8191526 0 -0.5735752 -0.819153 6.08724e-7 -0.5735739 -0.8191539 0 -0.7071068 -0.7071068 0 -0.7071068 -0.7071068 0 -0.819152 -0.5735765 0 -0.819152 -0.5735765 0 -0.9063088 -0.4226163 0 -0.9063088 -0.4226163 0 -0.9659257 -0.2588197 0 -0.9659257 -0.2588197 0 -0.9961948 -0.08715564 0 -0.9961948 -0.08715564 0 -0.9961944 0.08715862 0 -0.9961948 0.08715564 7.21502e-7 -0.9961948 0.08715492 0 -0.9659257 0.2588197 0 0.9761283 -0.210498 -0.0535174 0.7850038 -0.6177053 -0.04700273 0.1113914 -0.1411471 -0.9837019 0.029208 -0.03701031 -0.998888 0.02921622 -0.03635567 -0.9989117 0.2145843 -0.2719038 -0.9380949 0.2145826 -0.2719032 -0.9380954 0.2145825 -0.2719026 -0.9380955 0.3113552 -0.3945256 -0.8645272 0.311356 -0.3945259 -0.8645269 0.3113561 -0.394527 -0.8645264 0.3988241 -0.50536 -0.7652128 0.3988229 -0.5053596 -0.7652137 0.398823 -0.5053615 -0.7652125 0.4743851 -0.6011088 -0.6431383 0.4743899 -0.60111 -0.6431338 0.47439 -0.6011124 -0.6431315 0.5358107 -0.6789402 -0.5019434 0.5358108 -0.6789402 -0.5019433 0.535811 -0.6789379 -0.5019462 0.5812754 -0.736547 -0.3458575 0.5812741 -0.7365471 -0.3458597 0.5812732 -0.7365505 -0.3458535 0.6094399 -0.7722415 -0.1795162 0.6094426 -0.7722406 -0.1795107 0.6094429 -0.7722402 -0.1795117 0.6188202 -0.7841213 -0.04706728 0.6188197 -0.7841219 -0.04706579 0.698452 -0.7141114 -0.04700726 0.6984502 -0.7141135 -0.04700279 0.858354 -0.5108999 -0.04700732 0.7850062 -0.6177019 -0.0470072 0.9172608 -0.3955035 -0.04700863 0.858352 -0.5109032 -0.04700857 0.9172671 -0.3954889 -0.04700589 0.9604265 -0.2733657 -0.05340558 0.9611303 -0.2720651 -0.04700124 0.9609867 -0.2715384 -0.05264586 0.9609817 -0.271537 -0.05274301 0.9518443 -0.2727608 -0.1399789 0.9425801 -0.281687 -0.1794301 0.9353746 -0.2611259 -0.2385112 0.9353708 -0.2611248 -0.238527 0.8992959 -0.2678889 -0.3456912 0.8955616 -0.2586068 -0.3620663 0.8546512 -0.2475995 -0.4563616 0.8263319 -0.2554242 -0.5019303 0.8054797 -0.2295935 -0.5463417 0.8054713 -0.229591 -0.5463551 0.73131 -0.2270784 -0.6431339 0.7272863 -0.2204412 -0.6499693 0.6598796 -0.1979019 -0.7248405 0.609879 -0.2053122 -0.7654375 0.5853404 -0.1726585 -0.7921904 0.5853305 -0.1726554 -0.7921984 0.475676 -0.1613944 -0.8646873 0.4774065 -0.1653867 -0.8629776 0.3395959 -0.08969867 -0.9362846 0.3271855 -0.0901184 -0.9406532 0.3344722 -0.09215772 -0.9378888 0.3362537 -0.09570825 -0.9368956 0.3313097 -0.04922348 -0.9422372 0.3045668 -0.02807295 -0.9520772 0.339596 -0.08969795 -0.9362846 0.3173476 -0.02794831 -0.9478973 0.3343912 -0.01381826 -0.9423331 0.1796714 -0.007424652 -0.9836986 0.1796543 -0.007425785 -0.9837018 0.04710668 -0.002836227 -0.9988859 0.04693245 -0.001939535 -0.9988961 0.04600054 -0.002769231 -0.9989375 0.04467457 -0.01271563 -0.9989207 0.04663276 -0.014575 -0.9988058 0.04548984 -0.008329033 -0.9989301 0.04581695 -0.006807088 -0.9989267 0.04870474 -0.008916676 -0.9987735 0.04600054 -0.002768874 -0.9989376 0.04044079 -0.02407068 -0.998892 0.04091286 -0.02482843 -0.9988541 0.04251635 -0.01925998 -0.9989101 0.04290401 -0.01849937 -0.9989079 0.04411619 -0.01998633 -0.9988266 0.04427599 -0.01383721 -0.9989235 0.03728902 -0.02934175 -0.9988737 0.03726369 -0.029284 -0.9988763 0.04021096 -0.02440553 -0.9988931 0.02921575 -0.03635609 -0.9989118 0.03405189 -0.03398972 -0.9988419 0.0333752 -0.03412371 -0.9988602 0.03323578 -0.03317433 -0.9988968 0.03323286 -0.03317755 -0.9988968 0.6984503 -0.7141134 -0.04700344 0.6878928 -0.7033191 -0.1792925 0.6878934 -0.7033178 -0.1792948 0.6561707 -0.6708838 -0.3454782 0.6561702 -0.6708853 -0.345476 0.6049494 -0.6185159 -0.5014722 0.6049497 -0.6185125 -0.5014759 0.5357121 -0.5477226 -0.6426605 0.5357121 -0.5477224 -0.6426606 0.4504751 -0.4605745 -0.7648159 0.4504752 -0.4605766 -0.7648145 0.35175 -0.3596376 -0.8642528 0.3517498 -0.3596359 -0.8642535 0.2424629 -0.2478988 -0.9379541 0.242463 -0.2478995 -0.9379539 0.7850054 -0.6177027 -0.04700875 0.7731394 -0.6083657 -0.1792948 0.7731401 -0.6083641 -0.1792976 0.737487 -0.5803096 -0.345476 0.7374869 -0.5803099 -0.3454757 0.6799167 -0.5350093 -0.5014761 0.6799167 -0.5350106 -0.5014747 0.6020984 -0.4737772 -0.6426606 0.6020983 -0.4737765 -0.6426612 0.5063003 -0.3983954 -0.7648144 0.5063008 -0.3983975 -0.7648131 0.3953387 -0.3110837 -0.8642535 0.3953389 -0.3110846 -0.8642531 0.2725092 -0.2144323 -0.9379539 0.2725088 -0.2144302 -0.9379546 0.8583537 -0.5109004 -0.04700589 0.8453785 -0.5031775 -0.1792979 0.8453784 -0.5031775 -0.1792976 0.8063943 -0.4799737 -0.3454756 0.8063942 -0.4799746 -0.3454745 0.7434452 -0.4425067 -0.5014749 0.7434451 -0.442506 -0.5014756 0.6583558 -0.39186 -0.6426611 0.6583563 -0.3918616 -0.6426597 0.5536078 -0.3295141 -0.7648129 0.5536068 -0.329511 -0.764815 0.4322792 -0.2572959 -0.8642532 0.4322794 -0.2572966 -0.8642529 0.2979708 -0.1773548 -0.9379546 0.297971 -0.1773556 -0.9379544 0.917261 -0.3955023 -0.04701185 0.9033955 -0.3895239 -0.1792978 0.9033955 -0.3895244 -0.179297 0.8617362 -0.3715618 -0.3454743 0.8617364 -0.3715631 -0.3454725 0.794466 -0.3425576 -0.5014759 0.7944658 -0.3425568 -0.5014766 0.7035389 -0.3033511 -0.6426595 0.7035396 -0.3033525 -0.6426582 0.5915988 -0.2550859 -0.764815 0.5915973 -0.2550826 -0.7648174 0.4619463 -0.1991802 -0.8642527 0.4619473 -0.199182 -0.8642519 0.3184202 -0.1372961 -0.9379544 0.3184198 -0.1372953 -0.9379547 0.1796576 -0.007424592 -0.9837012 0.179656 -0.007424116 -0.9837016 0.178073 -0.02645671 -0.9836615 0.1780731 -0.02645671 -0.9836615 0.1731505 -0.0492835 -0.9836615 0.1731508 -0.0492841 -0.9836614 0.1653154 -0.07128083 -0.9836614 0.165315 -0.07128006 -0.9836616 0.1546983 -0.09207773 -0.9836615 0.1546984 -0.0920782 -0.9836615 0.1414793 -0.1113265 -0.9836615 0.1414793 -0.1113265 -0.9836616 0.1258794 -0.1287027 -0.9836615 0.1258793 -0.1287018 -0.9836617 0.1113933 -0.1411477 -0.9837017 0.1113934 -0.1411486 -0.9837015 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0.6195068 -0.7849913 0 0.6195068 -0.7849913 0 0.699225 -0.7149018 0 0.699225 -0.7149018 0 0.699223 -0.7149037 0 0.699223 -0.7149037 0 0.7858723 -0.6183887 0 0.7858723 -0.6183887 0 0.785875 -0.6183855 0 0.785875 -0.6183855 0 0.8593039 -0.5114653 0 0.8593039 -0.5114653 0 0.8593019 -0.5114685 0 0.8593019 -0.5114685 0 0.9182758 -0.3959411 0 0.9182758 -0.3959411 0 0.9182822 -0.3959266 0 0.9182822 -0.3959266 0 0.9617991 -0.2737563 0 0.9617991 -0.2737563 0 0.9775293 -0.2107999 0 0.9775293 -0.2107999 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.6195068 0.7849913 0 0.6195068 0.7849913 0 0.699225 0.7149018 0 0.699225 0.7149018 0 0.699223 0.7149037 0 0.699223 0.7149037 0 0.7858723 0.6183887 0 0.7858723 0.6183887 0 0.785875 0.6183855 0 0.785875 0.6183855 0 0.8593039 0.5114653 0 0.8593039 0.5114653 0 0.8593019 0.5114685 0 0.8593019 0.5114685 0 0.9182758 0.3959411 0 0.9182758 0.3959411 0 0.9182822 0.3959266 0 0.9182822 0.3959266 0 0.9617991 0.2737563 0 0.9617991 0.2737563 0 0.9775293 0.2107999 0 0.9775293 0.2107999 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.002644121 0.04297721 -0.9990726 0.02230441 0.03831094 -0.9990169 -0.3025621 0.9286788 -0.2145038 0.125207 0.8866367 -0.4451948 0.01014423 0.04237461 -0.9990503 0.0163781 0.04073137 -0.999036 0.003718912 0.04311794 -0.9990631 0.05017203 0.4856019 -0.8727392 0.06672197 0.6461043 -0.7603272 0.5602941 0.8232751 -0.09104222 0.49663 0.8672805 -0.03439754 0.4877944 0.8722813 -0.03437954 0.4973136 0.8659919 -0.05231708 0.4213463 0.9049881 -0.05885577 0.4124512 0.9083852 -0.06870532 0.4973043 0.8659973 -0.05231708 0.3525505 0.9317855 -0.08651018 0.4118231 0.9098521 -0.05070263 0.4118068 0.9098595 -0.05070269 0.3280192 0.9430256 -0.05573421 0.3279573 0.9430437 -0.05579066 0.3279651 0.943041 -0.05579066 0.2416644 0.9608717 -0.1353659 0.2804992 0.9579703 -0.06010973 0.239122 0.9691259 -0.0601297 0.2092871 0.972241 -0.1046251 0.1429115 0.9866775 -0.07774192 0.1346906 0.9864282 -0.09390324 0.142905 0.9866782 -0.07774513 0.1429089 0.9866778 -0.07774192 0.04457741 0.9953326 -0.08559036 0.04457777 0.9953327 -0.08559042 -0.08872324 0.9868499 -0.1351128 -0.05240577 0.9947445 -0.08795928 -0.01601409 0.9959997 -0.08791035 -0.04899442 0.9870002 -0.1530692 -0.04894697 0.9870078 -0.1530349 -0.1504542 0.9836211 -0.09926158 -0.1504586 0.9836202 -0.09926468 -0.1504662 0.9836192 -0.09926468 -0.2489721 0.962289 -0.1096028 -0.2489596 0.962293 -0.1095957 -0.340158 0.9246346 -0.1712989 -0.3138177 0.9474601 -0.06195032 -0.4256969 0.8763878 -0.2252259 -0.4364956 0.8920813 -0.1168873 -0.533868 0.8334565 -0.1426017 -0.5071716 0.8406862 -0.189799 -0.3364769 0.5767807 -0.7443839 -0.3086507 0.5579146 -0.7703674 -0.2740416 0.463563 -0.8426213 -0.2280051 0.4205929 -0.8781317 -0.274056 0.463587 -0.8426033 -0.2740424 0.4635632 -0.8426209 -0.2754706 0.4883762 -0.8280125 -0.2642489 0.4698097 -0.8422894 -0.2642362 0.4697878 -0.8423055 -0.2015771 0.3398547 -0.9186215 -0.2015746 0.3398504 -0.9186236 -0.2015308 0.3389189 -0.9189772 -0.2019277 0.3395915 -0.9186418 -0.2019383 0.33961 -0.9186326 -0.2015758 0.3398526 -0.9186226 -0.1439976 0.2696256 -0.952138 -0.1322415 0.2015662 -0.9705067 -0.1322405 0.2015643 -0.9705072 -0.1214617 0.182895 -0.9756006 -0.1219201 0.2083611 -0.9704232 -0.03962624 0.07098019 -0.9966903 -0.008978724 0.04192548 -0.9990804 -0.008501529 0.04219019 -0.9990735 -0.009169101 0.042813 -0.999041 -0.002643406 0.04297733 -0.9990726 0.6757484 0.5811812 -0.4534232 0.6756296 0.5811175 -0.4536817 -0.04445052 0.07962036 -0.9958338 -0.0464943 0.07423102 -0.9961566 -0.03049725 0.08126753 -0.9962257 -0.05334258 0.07075577 -0.9960663 -0.01522606 0.04056453 -0.9990609 -0.008977591 0.04192584 -0.9990803 0.05870264 0.5683478 -0.8206917 0.04126602 0.3991789 -0.915944 0.3840919 0.5942866 -0.7066094 0.06406551 0.6517569 -0.7557172 0.1644833 0.6339008 -0.7557216 0.162418 0.6405307 -0.7505603 0.2599905 0.6075388 -0.7505342 0.2587848 0.6150655 -0.7447985 0.3465139 0.5699993 -0.7450026 0.3067829 0.4855551 -0.8186089 0.3131879 0.4810941 -0.8188173 0.04821014 0.4900959 -0.8703343 0.1237093 0.4766681 -0.8703354 0.1222446 0.4819305 -0.86764 0.1956411 0.4571198 -0.867621 0.1948907 0.4630697 -0.8646295 0.2579292 0.4306887 -0.8648582 0.2342819 0.3520645 -0.9061802 0.05639106 0.5735009 -0.8172618 0.1447426 0.5577889 -0.8172645 0.1429913 0.5638172 -0.8134271 0.2288651 0.534785 -0.8134038 0.2279152 0.5416247 -0.8091337 0.3133472 0.497394 -0.8089578 0.313187 0.4810924 -0.8188187 0.01014375 0.04237467 -0.9990503 0.004668951 0.0442695 -0.9990088 0.01311749 0.1325677 -0.9910871 0.0136609 0.1313905 -0.9912366 0.02197289 0.2227955 -0.9746176 0.02287566 0.2207681 -0.9750581 0.03086078 0.3133472 -0.949137 0.03212028 0.3104554 -0.9500451 0.2302241 0.3549533 -0.9060932 0.02230376 0.03831124 -0.9990169 0.0179857 0.04173851 -0.9989667 0.05278378 0.1251575 -0.9907318 0.05300462 0.1235979 -0.9909158 0.08866167 0.210465 -0.9735726 0.08900701 0.2077835 -0.9741169 0.1246753 0.2960966 -0.9469862 0.1251405 0.2922742 -0.9481117 0.1639477 0.2758768 -0.9471077 0.1529103 0.2088244 -0.9659249 0.1385717 0.1845592 -0.9730035 0.0163787 0.04073113 -0.9990359 0.01138669 0.04345679 -0.9989904 0.03314656 0.1303081 -0.9909193 0.03355664 0.1289321 -0.9910855 0.05563575 0.2190606 -0.9741237 0.05630898 0.2166882 -0.9746156 0.07820945 0.3081349 -0.9481225 0.07913947 0.30476 -0.9491356 0.03965216 0.4029107 -0.91438 0.1017222 0.3918707 -0.9143796 0.1005303 0.3962271 -0.9126323 0.1608746 0.375831 -0.9126173 0.16028 0.3807579 -0.9106776 0.2299628 0.3445399 -0.91017 0.2302237 0.3549526 -0.9060936 0.08656764 0.8383268 -0.5382511 0.08747619 0.8863996 -0.4545807 0.05872666 0.8498761 -0.5237002 0.2205837 0.868207 -0.4444766 0.213065 0.8210882 -0.5295447 0.08290946 0.8442253 -0.5295373 0.08074861 0.7820144 -0.6180074 0.0592662 0.9807953 -0.1858173 0.137708 0.9728869 -0.1858159 0.1329646 0.9748817 -0.1786785 0.2110841 0.9609978 -0.1786805 0.2061915 0.9634214 -0.1711853 0.2830523 0.9437043 -0.1711835 0.2780457 0.9465871 -0.1632896 0.3535128 0.921068 -0.1632862 0.3484458 0.9244285 -0.1549757 0.4224931 0.893019 -0.1549728 0.4174192 0.8968666 -0.1462576 0.4892121 0.8598142 -0.1462572 0.1878504 0.8382449 -0.5119157 0.2584902 0.8630948 -0.4338783 0.3181686 0.8429241 -0.4338753 0.3235061 0.8440266 -0.4277418 0.1961 0.7736137 -0.60255 0.3140085 0.7337349 -0.6025212 0.3120718 0.7419126 -0.5934451 0.07410621 0.7176703 -0.692429 0.07741838 0.7880585 -0.6107128 0.1988806 0.7664646 -0.6107196 0.2098805 0.8281081 -0.5197952 0.3316847 0.7871845 -0.5199288 0.2956175 0.7608409 -0.577695 0.3675365 0.7777919 -0.5098594 0.3818255 0.8192977 -0.4277388 0.3874471 0.8199956 -0.421298 0.5234243 0.7446285 -0.4141924 0.5216816 0.741127 -0.4225863 0.548452 0.8312166 -0.09099143 0.5414588 0.7999363 -0.2586973 0.5607706 0.7955378 -0.229469 0.5581788 0.7883264 -0.2588008 0.5200389 0.7908316 -0.3227149 0.5161929 0.7449802 -0.4225511 0.5161944 0.7449834 -0.4225435 -0.4664003 0.8143076 -0.3455053 -0.4664002 0.814308 -0.3455044 -0.4716932 0.780027 -0.4111734 -0.4867284 0.8021793 -0.345838 -0.5058076 0.8325888 -0.2257316 -0.5289278 0.8271391 -0.1899375 -0.5289311 0.8271416 -0.1899172 -0.3738893 0.9003836 -0.2225224 -0.3465415 0.8474209 -0.4022274 -0.4450586 0.8047376 -0.3928362 -0.4663993 0.8143084 -0.3455047 -0.4664096 0.8143224 -0.3454577 0.4148811 0.8781757 -0.2380777 0.4094398 0.8785116 -0.2461231 0.3468461 0.9050527 -0.2461249 0.3415933 0.9049313 -0.2537983 0.2774657 0.9266059 -0.2537999 0.272459 0.9260678 -0.261083 0.2067131 0.942924 -0.2610823 0.2020015 0.9420061 -0.2679926 0.134666 0.9539642 -0.2679879 0.1302892 0.9527053 -0.2745496 0.06220716 0.9595588 -0.2745489 0.05819404 0.9580272 -0.2807086 -0.01073199 0.9597319 -0.2807125 -0.01435476 0.9580019 -0.2864024 -0.08313202 0.9544961 -0.286402 -0.4364992 0.8920793 -0.1168886 -0.3814017 0.9169899 -0.1168855 -0.3721029 0.9020402 -0.218776 -0.3047177 0.9269775 -0.2187691 -0.2954078 0.906755 -0.3008816 -0.2284439 0.9258981 -0.3008754 -0.2060845 0.8590167 -0.4686356 -0.08836883 0.9748791 -0.2044546 -0.08504813 0.9763553 -0.1987389 -0.01467978 0.9799425 -0.1987391 -0.01098531 0.9812273 -0.1925418 0.06379896 0.9792193 -0.1925081 0.06048929 0.9921217 -0.1097066 0.1436036 0.9851737 -0.09386658 -0.4324918 0.7553364 -0.4923593 -0.4324707 0.7553015 -0.4924312 -0.4319106 0.7659659 -0.4761822 -0.42691 0.758602 -0.49221 -0.4268987 0.7585835 -0.4922485 -0.4324691 0.7553026 -0.4924312 -0.3998792 0.72771 -0.5572564 -0.3874995 0.6762478 -0.6265246 -0.3875131 0.6762708 -0.6264914 -0.38449 0.6715427 -0.6334019 -0.3845772 0.6780188 -0.6264113 -0.3365048 0.576826 -0.7443361 -0.3364785 0.5767809 -0.7443829 -0.3415386 0.6211459 -0.7053574 -0.3845775 0.6780161 -0.626414 -0.3845527 0.6779772 -0.6264711 -0.04461598 0.215683 -0.9754436 -0.04355019 0.2144511 -0.9757634 -0.06276142 0.3032677 -0.9508364 -0.06127041 0.3015105 -0.9514921 -0.08071875 0.3899341 -0.9172982 -0.07880502 0.3876597 -0.9184279 -0.09821444 0.4743876 -0.8748202 -0.09590142 0.4716473 -0.8765567 -0.1149812 0.5553171 -0.8236518 -0.1122961 0.5521855 -0.826124 -0.1307598 0.6314695 -0.7642959 -0.1277374 0.6280484 -0.7676187 -0.1453079 0.7016804 -0.6975172 -0.1419943 0.6980995 -0.7017796 -0.1584221 0.7649599 -0.6242908 -0.1548726 0.7613701 -0.6295475 -0.1699468 0.820536 -0.5457461 -0.1662082 0.8170858 -0.5520378 -0.1797598 0.8678522 -0.4631619 -0.1758933 0.8647045 -0.4704759 -0.1868305 0.9032979 -0.3861962 -0.5122285 0.8468971 -0.1427836 -0.4481835 0.8820878 -0.145095 -0.4395402 0.8693957 -0.2257336 -0.4417765 0.8690946 -0.2225041 -0.4292783 0.8489451 -0.3082407 -0.3311491 0.8920178 -0.3076435 -0.3178058 0.8629885 -0.3927469 -0.3212123 0.8647065 -0.3861414 -0.3038544 0.8251002 -0.4763213 -0.307259 0.8271728 -0.4705072 -0.2869843 0.7792988 -0.5570757 -0.2903311 0.7816174 -0.5520709 -0.2673079 0.7258754 -0.6337596 -0.2705247 0.7283166 -0.6295801 -0.2450049 0.6653342 -0.7051972 -0.2480357 0.6677869 -0.7018113 -0.2203543 0.5984184 -0.7702853 -0.2231385 0.6007724 -0.7676469 -0.1936885 0.5260357 -0.828113 -0.1961772 0.5281984 -0.8261483 -0.1654043 0.4492582 -0.877957 -0.167556 0.4511534 -0.8765761 -0.1359272 0.3692392 -0.9193401 -0.1377082 0.3708099 -0.9184424 -0.1057014 0.2871858 -0.9520251 -0.1070929 0.2884008 -0.951502 -0.0751627 0.2042763 -0.9760234 -0.07615232 0.2051228 -0.9757692 -0.04494702 0.122224 -0.9914843 -0.02589339 0.1276756 -0.991478 -0.02652639 0.1283859 -0.9913695 0.4032229 0.8534463 -0.3302133 0.3976431 0.8532168 -0.3374924 0.3368756 0.8789834 -0.3374952 0.3315417 0.8783223 -0.3444274 0.2693241 0.8993512 -0.3444299 0.26428 0.8983029 -0.35101 0.2005355 0.9146463 -0.3510095 0.1958237 0.9132482 -0.3572545 0.1305756 0.9248371 -0.3572481 0.1262398 0.9231319 -0.3631679 0.06029409 0.9297712 -0.3631666 0.05634957 0.9278287 -0.3687259 -0.010374 0.9294785 -0.3687305 -0.073511 0.8857756 -0.458255 -0.08636051 0.9526164 -0.2916575 -0.154861 0.9439046 -0.2916544 -0.1618047 0.9654164 -0.204427 -0.1581059 0.9649021 -0.2096817 -0.1636347 0.9783245 -0.1269053 0.05006963 0.07135081 -0.9961938 0.06322425 0.05414682 -0.9965294 0.06645202 0.05946576 -0.9960161 0.06940591 0.1165831 -0.9907528 0.1391562 0.2187476 -0.965808 0.1391554 0.2187463 -0.9658083 0.5731872 0.8164933 -0.06924653 0.5730206 0.8079959 -0.137076 0.4841908 0.8641304 -0.1372509 0.4808048 0.8461894 -0.229761 0.4752418 0.8470323 -0.2380788 0.4676188 0.8229316 -0.3226706 0.4618533 0.8231948 -0.3302146 0.4495944 0.7911701 -0.4146258 0.443749 0.7909448 -0.4212993 0.398993 0.688922 -0.6051372 0.4471901 0.7353712 -0.5091661 0.4408415 0.6909628 -0.5729129 0.4343267 0.6780663 -0.5929472 0.4324954 0.6964743 -0.5726005 0.4324932 0.69647 -0.5726073 0.07110965 0.7236288 -0.6865165 0.1826164 0.7038024 -0.6865229 0.1802108 0.7108103 -0.6799064 0.2885155 0.6741845 -0.6798779 0.2869815 0.6821793 -0.6725125 0.3861691 0.6311842 -0.6726662 0.3840923 0.5942873 -0.7066085 0.003719866 0.04311788 -0.9990631 -0.002054154 0.043985 -0.9990302 -0.006910145 0.1318958 -0.9912395 -0.006290912 0.1309562 -0.9913682 -0.01167261 0.2216174 -0.9750638 -0.01063871 0.2199991 -0.9754421 -0.01645177 0.3116506 -0.9500544 -0.01500105 0.3093348 -0.9508349 -0.02117621 0.4007173 -0.915957 -0.01932108 0.3977332 -0.9172976 -0.02578073 0.4874755 -0.872756 -0.02353048 0.4838756 -0.8748204 -0.03018975 0.5705443 -0.8207119 -0.02756249 0.5664232 -0.8236535 -0.03433394 0.6486048 -0.7603506 -0.031358 0.6440997 -0.7642986 -0.0381543 0.7204518 -0.6924547 -0.03485423 0.7157158 -0.6975214 -0.04159253 0.7850509 -0.6180331 -0.03799927 0.7802639 -0.624295 -0.04460299 0.8415868 -0.538277 -0.04076123 0.8369552 -0.5457515 -0.04716396 0.8895072 -0.4544804 -0.04310703 0.885222 -0.4631671 -0.0486508 0.9245595 -0.3779193 -0.1498331 0.9133564 -0.3785896 -0.1576766 0.941934 -0.2964767 -0.2260351 0.9279074 -0.2964726 -0.2343723 0.9492647 -0.2096812 -0.231011 0.9490175 -0.214475 -0.2375459 0.9628069 -0.1287433 -0.2489831 0.9622861 -0.1096029 0.5865629 0.8098942 -0.003930628 0.5862988 0.8087241 -0.04710716 0.5643983 0.8057199 -0.1796387 0.02763158 0.03815215 -0.9988898 0.05039393 0.07111603 -0.9961943 0.1045891 0.1460798 -0.9837285 0.05183511 0.07007128 -0.9961943 0.1060989 0.1449891 -0.9837282 0.1510841 0.210148 -0.9659252 0.2008312 0.2819067 -0.9381873 0.1525287 0.2090995 -0.9659256 0.1525294 0.2091004 -0.9659254 0.2486092 0.341761 -0.9063073 0.2032557 0.2801493 -0.9381916 0.2471612 0.342809 -0.9063075 0.294582 0.4068066 -0.8647137 0.24861 0.3417606 -0.9063072 0.2953323 0.406266 -0.864712 0.3357083 0.4650718 -0.8191508 0.3761916 0.5220311 -0.7654824 0.3371573 0.4640203 -0.8191521 0.3371598 0.4640237 -0.8191492 0.3781495 0.5206143 -0.7654827 0.4140316 0.573217 -0.7071068 0.4483571 0.6204317 -0.6434597 0.4154824 0.5721673 -0.7071061 0.4812026 0.6629104 -0.5735799 0.4493596 0.619713 -0.6434531 0.479755 0.6639636 -0.5735743 0.5071303 0.7003931 -0.5022633 0.481202 0.6629099 -0.573581 0.5079307 0.6998102 -0.5022672 0.530878 0.7345495 -0.4226176 0.5490914 0.7607242 -0.3461176 0.5323253 0.7335005 -0.4226189 0.5323232 0.7334976 -0.4226267 0.5510303 0.7593222 -0.3461145 0.56585 0.7828338 -0.2588145 0.5762287 0.7972959 -0.1796651 0.5672938 0.7817867 -0.2588192 0.5837598 0.8045209 -0.1094104 0.5841297 0.8065342 -0.09107702 0.5841296 0.8065339 -0.09108084 -0.5295149 0.8423609 -0.1002101 -0.5151078 0.8504124 -0.1070648 -0.5151093 0.8504097 -0.1070783 -0.5151783 0.8503293 -0.1073843 -0.5177162 0.8472805 -0.1186829 -0.4403318 0.8962361 -0.05356317 -0.3487244 0.936272 -0.04226148 -0.3807549 0.9110645 -0.1580733 -0.3158265 0.9446306 -0.08903294 -0.4695641 0.8742954 -0.1229513 -0.3828474 0.9161154 -0.1189975 -0.4363219 0.8918546 -0.119242 -0.4363158 0.8918578 -0.1192402 0.01663154 0.9975975 -0.06724959 -0.05293685 0.9955745 -0.07764637 -0.0559948 0.9956649 -0.07426911 -0.05330288 0.9961164 -0.07007741 -0.1512328 0.9848093 -0.08531779 -0.1519483 0.9847285 -0.08497929 -0.1512704 0.984876 -0.08447831 -0.15195 0.9847689 -0.08450645 -0.1513075 0.9849367 -0.08370035 -0.2462018 0.9654292 -0.08562213 -0.249894 0.9636375 -0.09463447 -0.3146134 0.9407079 -0.1268351 -0.2499846 0.9637824 -0.09290492 -0.2499716 0.9637857 -0.09290456 0.183431 0.9789866 -0.08909767 0.1439301 0.9842634 -0.1025169 0.1439528 0.9842572 -0.102544 0.08883857 0.9957861 -0.02275502 0.04534852 0.993723 -0.1022652 0.01655685 0.9957631 -0.0904535 0.04358792 0.996963 -0.06453585 -0.05320066 0.9960265 -0.07142162 0.2779986 0.9603672 0.02028906 0.2405983 0.9655889 -0.0987448 0.2405955 0.9655892 -0.09874737 0.1841789 0.9828776 -0.005461394 0.1435291 0.9853222 -0.0924111 0.1435267 0.9853222 -0.09241431 0.3455652 0.9376382 -0.03767275 0.3293828 0.9390959 -0.09801012 0.2769487 0.9567519 -0.0890243 0.3238744 0.9458647 0.02110099 0.3239387 0.9458426 0.02110755 0.4966949 0.8671808 -0.03593933 0.4966961 0.8671818 -0.03589844 0.4966871 0.8671867 -0.03590685 0.411465 0.9114067 -0.005861878 0.4100875 0.9119461 -0.0135104 0.4114331 0.9113423 -0.01334112 0.4104349 0.9116638 -0.02030718 0.4104493 0.9116581 -0.02027076 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0.9988024 0 -0.04892486 0.9988027 0 -0.04892003 0.9892286 -6.37497e-5 -0.1463788 0.991006 7.63605e-5 -0.1338174 0.9978458 -4.66953e-5 -0.06560319 0.9978433 -4.65763e-5 -0.06564092 0.9997375 -3.65517e-4 -0.02290934 0.9573115 -6.7672e-4 -0.2890576 0.9728369 8.2303e-5 -0.2314918 0.9892346 3.1367e-4 -0.1463376 0.9728358 -1.84757e-4 -0.2314964 0.9910101 -6.37356e-5 -0.1337873 0.9373839 -0.001630723 -0.3482942 0.9788143 0.001659929 -0.2047432 0.9788156 0.001660048 -0.204737 0.963646 4.36395e-4 -0.2671818 0.929184 5.30904e-5 -0.3696177 0.9374916 5.31836e-5 -0.348008 0.9291834 2.64009e-5 -0.3696191 0.9374786 2.66319e-5 -0.3480428 0.9291909 -1.45173e-4 -0.3696001 0.8948687 1.43639e-4 -0.4463297 0.8948709 1.43693e-4 -0.446325 0.8576731 -7.8014e-4 -0.5141949 0.8821 -1.39094e-4 -0.4710623 0.8820957 -1.3912e-4 -0.4710701 0.8816582 0.002897262 -0.4718798 0.7426114 -0.00301975 -0.6697158 0.8139429 -5.84892e-4 -0.5809446 0.813939 -5.85014e-4 -0.5809502 0.8577902 -1.38911e-4 -0.5139999 0.8218147 4.94316e-4 -0.5697548 0.8218067 4.94227e-4 -0.5697662 0.7780058 1.45085e-4 -0.6282571 0.727007 1.08358e-4 -0.6866301 0.7269949 1.08358e-4 -0.686643 0.7435958 -2.42818e-4 -0.6686294 0.7271113 -1.96794e-4 -0.6865195 0.6709988 1.33178e-4 -0.7414585 0.4872925 2.85213e-5 -0.8732388 0.5874733 -6.71874e-4 -0.8092432 0.5874742 -6.71888e-4 -0.8092426 0.4647569 0.002486228 -0.8854348 0.555783 5.57533e-4 -0.8313272 0.6709784 1.33242e-4 -0.7414769 0.6366294 -1.98894e-4 -0.77117 0.6708261 -1.98593e-4 -0.7416147 0.6366617 -2.58794e-4 -0.7711431 0.5557817 5.57548e-4 -0.8313282 0.4665755 -1.98876e-4 -0.8844814 0.4059665 6.35328e-5 -0.913888 0.466579 -1.98869e-4 -0.8844795 0.4872874 2.84471e-5 -0.8732417 0.4872956 2.85215e-5 -0.8732371 0.2147951 1.91396e-5 -0.9766591 0.19299 -2.92756e-4 -0.9812006 0.3169799 1.83149e-4 -0.9484322 0.3165715 -3.37854e-4 -0.9485686 0.346367 -5.57911e-5 -0.9380992 0.3167936 -5.55833e-5 -0.9484946 0.3462423 1.00337e-4 -0.9381452 0.3462478 1.00337e-4 -0.938143 0.06611812 -1.05888e-4 -0.9978118 9.375e-4 0 -0.9999996 0.2060948 0.01032853 -0.9784776 0.09668982 0 -0.9953145 0.09668982 0 -0.9953146 0.09668982 0 -0.9953146 0.09668982 0 -0.9953147 0.09718114 1.95217e-5 -0.9952667 0.09760451 0 -0.9952253 0.09760445 0 -0.9952253 0.09760445 0 -0.9952253 0.09760451 0 -0.9952253 0.1808144 -0.0145663 -0.9834094 0.1808112 -0.01456582 -0.98341 0.2060943 0.01032853 -0.9784776 0.07327711 6.73998e-5 -0.9973116 9.375e-4 0 -0.9999996 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.006347477 -0.04216367 -0.9990906 0.06166189 -0.9275615 -0.368548 0.55864 -0.7879974 -0.2588077 0.5488775 -0.8309354 -0.09099304 -0.007620155 -0.04179835 -0.9990971 -6.6075e-4 -0.04249083 -0.9990967 -0.02317607 -0.4875552 -0.8727845 -0.0309171 -0.6487413 -0.7603808 0.01999306 -0.03838819 -0.9990628 0.01326543 -0.04078036 -0.9990801 0.04888242 -0.07221037 -0.9961908 0.5251185 -0.8497497 -0.04664808 0.4687601 -0.8826953 -0.03336137 0.3774319 -0.925257 -0.03800809 0.2849273 -0.9558606 -0.07174235 -0.5032693 -0.8557003 -0.120404 -0.4121016 -0.9047003 -0.1081175 -0.4491446 -0.8849607 -0.1229375 -0.4054052 -0.8950716 -0.1857247 -0.5032611 -0.8557052 -0.120404 -0.4121095 -0.9046969 -0.1081175 -0.37774 -0.9132118 -0.15283 -0.3142753 -0.9422633 -0.1156325 -0.3136387 -0.941306 -0.1247944 -0.3136636 -0.9412978 -0.1247943 -0.2357072 -0.9619902 -0.1379013 -0.2151161 -0.9715976 -0.09860622 -0.162795 -0.9785057 -0.1265871 -0.1079765 -0.9768436 -0.1847093 -0.215111 -0.9715988 -0.09860622 -0.01222783 -0.994651 -0.1025676 -0.0122143 -0.9946511 -0.1025676 -0.08786702 -0.9879619 -0.1273213 -0.1134567 -0.989315 -0.0915606 -0.1134594 -0.9893147 -0.0915606 -0.01237207 -0.994969 -0.09941595 -0.01239728 -0.9949687 -0.09941583 0.06206834 -0.9913501 -0.115639 0.08578628 -0.9934612 -0.07533633 0.1363209 -0.9850861 -0.1049854 0.1911097 -0.9687634 -0.1580331 0.08578526 -0.9934613 -0.07533633 0.2851082 -0.9554045 -0.0769124 0.28512 -0.955401 -0.0769124 0.2098275 -0.9730755 -0.09537589 0.1877754 -0.9802234 -0.06246984 0.1877806 -0.9802225 -0.06246978 0.3774107 -0.9252663 -0.03799122 0.3469647 -0.5697413 -0.7449903 0.2346126 -0.3518285 -0.9061863 0.2582463 -0.430501 -0.8648571 0.3136266 -0.480787 -0.8188298 0.3206581 -0.4932898 -0.8086059 0.3071756 -0.4852774 -0.8186263 0.3071834 -0.4852914 -0.818615 0.2346122 -0.3518279 -0.9061866 0.2258796 -0.3467129 -0.9103673 0.230545 -0.3547253 -0.906101 0.164142 -0.2757591 -0.9471085 0.1531592 -0.2086439 -0.9659244 0.1531586 -0.2086429 -0.9659247 0.1236212 -0.1923845 -0.973502 0.1393429 -0.2186136 -0.9658114 0.06948661 -0.1165328 -0.9907532 0.0666092 -0.0593515 -0.9960124 0.0457378 -0.02505445 -0.9986392 0.04396259 -0.08441293 -0.9954606 -0.0271635 -0.5706536 -0.8207414 -0.01901692 -0.4007774 -0.915978 -0.03310805 -0.6439312 -0.7643667 -0.127847 -0.6319717 -0.7643736 -0.1290659 -0.6277037 -0.7676784 -0.2209916 -0.6015527 -0.7676569 -0.2214331 -0.5979818 -0.7703152 -0.02488154 -0.4837239 -0.8748669 -0.09599 -0.4747467 -0.8748723 -0.09692573 -0.471357 -0.8766003 -0.1659137 -0.4517376 -0.8765876 -0.166237 -0.4489096 -0.877978 -0.335938 -0.5771636 -0.7443306 -0.3359175 -0.5771303 -0.7443655 -0.3081969 -0.5582145 -0.7703319 -0.2638207 -0.47005 -0.8422896 -0.2638332 -0.4700719 -0.8422734 -0.02912348 -0.5662635 -0.8237096 -0.1124007 -0.5557502 -0.8237159 -0.113478 -0.5518664 -0.8261758 -0.1942741 -0.5288857 -0.8261582 -0.1946498 -0.5256409 -0.8281384 -0.2750458 -0.4886634 -0.8279843 -0.273581 -0.4638583 -0.8426085 -0.007621049 -0.04179823 -0.999097 -0.002007126 -0.0441696 -0.9990221 -0.00668621 -0.1309056 -0.9913723 -0.006177544 -0.131908 -0.9912427 -0.0112887 -0.2199115 -0.9754546 -0.01045417 -0.2216434 -0.9750717 -0.01589679 -0.309226 -0.9508557 -0.01475501 -0.3116915 -0.9500688 -0.2012673 -0.3401227 -0.9185902 -0.2012379 -0.3400721 -0.9186155 -0.1438036 -0.2697637 -0.9521281 -0.04204815 -0.07599395 -0.9962213 -0.04205584 -0.07599037 -0.9962213 -0.02944737 -0.08198249 -0.9961987 -0.1319829 -0.2017368 -0.9705064 -0.1319816 -0.2017347 -0.9705072 -0.1212223 -0.1830599 -0.9755994 -0.1060189 -0.2887755 -0.9515087 -0.1062532 -0.2869483 -0.9520352 -0.07537811 -0.2053895 -0.9757732 -0.07556259 -0.2041008 -0.9760293 -0.04484492 -0.1222806 -0.9914819 -0.06010347 -0.02700328 -0.9978268 -0.01439982 -0.04008895 -0.9990924 -0.007847666 -0.04305398 -0.9990419 -0.008547484 -0.04267746 -0.9990524 -0.02619332 -0.1275828 -0.991482 -0.02589714 -0.1284796 -0.991374 -0.04404383 -0.2142977 -0.9757748 -0.04357022 -0.2158352 -0.9754573 -0.06194847 -0.3013054 -0.9515132 -0.061311 -0.3034914 -0.9508596 -0.2735946 -0.4638821 -0.8425909 -0.2735803 -0.4638581 -0.8426088 -0.2276858 -0.4208127 -0.8781091 -0.2015926 -0.3398346 -0.9186255 -0.2015821 -0.3398161 -0.9186347 -0.02045029 -0.3975979 -0.9173319 -0.07887142 -0.3902218 -0.9173366 -0.07966119 -0.3874105 -0.9184591 -0.1363446 -0.371293 -0.9184507 -0.1366233 -0.3689432 -0.9193558 -0.2011923 -0.3391541 -0.9189648 -0.2012366 -0.3400684 -0.9186171 -0.01334434 -0.9799845 -0.1986258 -0.08378684 -0.9764875 -0.198625 -0.08711153 -0.9750041 -0.204398 -0.1576442 -0.96611 -0.2044011 -0.1605818 -0.9645007 -0.2096471 -0.2302103 -0.9502903 -0.2096466 -0.04022657 -0.8418098 -0.5382733 -0.03437793 -0.7206181 -0.6924793 -0.0128864 -0.9295207 -0.3685445 -0.008852243 -0.9274989 -0.373721 -0.08273708 -0.9238425 -0.3737239 -0.07890671 -0.9222334 -0.3784959 -0.1490328 -0.9135047 -0.378548 -0.3618561 -0.8798309 -0.3081519 -0.4284498 -0.8493863 -0.3081782 -0.5284194 -0.8274657 -0.1899306 -0.528422 -0.827469 -0.1899085 -0.5284175 -0.8274656 -0.1899358 -0.3035497 -0.9273835 -0.2186724 -0.3712626 -0.9024122 -0.2186691 -0.3730459 -0.9007489 -0.2224594 -0.4390902 -0.8704664 -0.2224591 -0.4405195 -0.8689013 -0.225728 -0.5053548 -0.8328674 -0.2257174 -0.4862753 -0.8024376 -0.3458761 -0.3111659 -0.8439181 -0.4370103 -0.284523 -0.8771687 -0.3868099 -0.2967894 -0.9063459 -0.3007545 -0.4262135 -0.7589837 -0.4922252 -0.1776707 -0.864328 -0.4705001 -0.3043713 -0.8282585 -0.4704742 -0.305301 -0.8245578 -0.4763359 -0.4312291 -0.7663868 -0.4761224 -0.3868632 -0.6766248 -0.6265109 -0.3838719 -0.6719361 -0.6333596 -0.2685921 -0.7253727 -0.6337924 -0.267957 -0.7292659 -0.6295796 -0.1564527 -0.7609983 -0.6296063 -0.154939 -0.76561 -0.6243678 -0.04008352 -0.780107 -0.6243609 -0.03749585 -0.7852434 -0.6180509 -0.4317697 -0.7557193 -0.4924058 -0.4317775 -0.7557321 -0.4923791 -0.4317681 -0.7557181 -0.4924089 -0.0429821 -0.8367971 -0.5458235 -0.1662244 -0.8212425 -0.5458301 -0.1678926 -0.8167077 -0.5520876 -0.287589 -0.7826376 -0.5520606 -0.2883577 -0.7787771 -0.5570961 -0.3992877 -0.72808 -0.5571975 -0.386869 -0.6766346 -0.6264966 -0.4862756 -0.8024381 -0.3458744 -0.4862722 -0.8024345 -0.3458877 -0.4583967 -0.8032698 -0.3803025 -0.4656417 -0.81476 -0.3454623 -0.4656363 -0.8147526 -0.3454864 -0.2937641 -0.9060223 -0.304674 -0.3645291 -0.8799389 -0.3046734 -0.3496882 -0.850251 -0.3934354 -0.4443851 -0.8051385 -0.392777 -0.4262174 -0.7589903 -0.4922119 -0.1536103 -0.9426338 -0.2963873 -0.1572736 -0.9435316 -0.2915703 -0.0815401 -0.9530701 -0.2915625 -0.08548426 -0.9543312 -0.2862591 -0.009142518 -0.9581094 -0.2862566 -0.01331889 -0.9597551 -0.2805226 0.06367391 -0.9577322 -0.2805258 0.05930006 -0.9597836 -0.2744066 0.1359214 -0.9519597 -0.2744047 0.4687613 -0.8826947 -0.03336131 0.4226768 -0.9027388 -0.08004266 0.4232276 -0.8927019 -0.1547957 0.349558 -0.9240395 -0.1547909 0.3476689 -0.9026747 -0.2535837 0.2738189 -0.9277503 -0.2535796 0.2701374 -0.8966157 -0.3508649 0.1968153 -0.915507 -0.3508715 0.1928439 -0.8744781 -0.4450837 -0.01405173 -0.9948151 -0.1007249 -0.009647309 -0.9812724 -0.1923837 0.06511026 -0.9791627 -0.1923567 0.06057226 -0.9807372 -0.1857029 0.1389003 -0.9727393 -0.1857013 0.1341623 -0.9747278 -0.1786235 0.2119212 -0.9608247 -0.1786203 0.5604417 -0.8231745 -0.09104317 0.5736468 -0.816216 -0.06870853 0.5734856 -0.8076695 -0.1370556 0.48497 -0.8636955 -0.137238 0.4810544 -0.8437762 -0.2379674 0.4105911 -0.8802189 -0.23797 0.4032457 -0.8506602 -0.3372982 0.3331524 -0.8804802 -0.3372893 0.3238329 -0.8408712 -0.4336679 0.4456501 -0.7934382 -0.41455 0.5182802 -0.7481461 -0.4143223 0.5165964 -0.7446952 -0.4225605 0.5442538 -0.8068658 -0.2296856 0.4765469 -0.8486114 -0.2296996 0.467496 -0.8200535 -0.3300904 0.3990705 -0.8554418 -0.3300943 0.387207 -0.816868 -0.4275481 0.3199414 -0.8454874 -0.4275377 0.3068556 -0.7968069 -0.5205174 0.3846227 -0.5939241 -0.7066256 0.3846223 -0.5939233 -0.7066263 0.3866622 -0.6308928 -0.6726564 0.4330673 -0.6960892 -0.5726367 0.4262484 -0.6828333 -0.5933389 0.4414374 -0.6905706 -0.5729269 0.4599381 -0.7278269 -0.5086501 0.4172637 -0.7062711 -0.5719022 0.3998761 -0.6891326 -0.604314 0.5221118 -0.7408237 -0.4225868 0.5221111 -0.7408221 -0.4225903 0.006347596 -0.04216367 -0.9990905 0.01156324 -0.04393857 -0.9989672 0.03299081 -0.1290307 -0.9910916 0.03399914 -0.1300544 -0.9909238 0.05537366 -0.2168561 -0.9746317 0.05705749 -0.2186396 -0.9741362 0.07784861 -0.3049992 -0.9491656 0.08019012 -0.3075593 -0.9481438 0.1000868 -0.3921827 -0.9144263 0.1030592 -0.3955017 -0.9126649 0.1217467 -0.4770592 -0.8703978 0.1253009 -0.4810665 -0.8676835 0.1424753 -0.5582548 -0.8173448 0.1465467 -0.5628337 -0.8134754 0.161934 -0.634446 -0.7558145 0.1664416 -0.6394345 -0.7506138 0.1798137 -0.7044286 -0.6866202 0.184665 -0.7096271 -0.6799471 0.1958503 -0.7671656 -0.6108188 0.2009391 -0.7723428 -0.6025863 0.2098372 -0.8218598 -0.5296365 0.2150549 -0.8267717 -0.5198076 0.2187435 -0.8493823 -0.4803135 0.2596064 -0.8628335 -0.4337313 0.2658005 -0.9004821 -0.3442123 0.3374338 -0.8761577 -0.3442181 0.342989 -0.9065784 -0.2459151 0.4152097 -0.8758557 -0.2459221 0.4181535 -0.8965376 -0.1461775 0.4899883 -0.8593858 -0.1461759 0.4895431 -0.8696582 -0.06357806 0.5251263 -0.8497448 -0.04664802 0.01326519 -0.04078048 -0.9990801 0.01822215 -0.0422073 -0.9989427 0.05234491 -0.1238205 -0.9909231 0.05359607 -0.1247462 -0.99074 0.08791261 -0.2081555 -0.9741368 0.09001606 -0.2097827 -0.9735956 0.1236245 -0.2928019 -0.9481477 0.1265678 -0.2951548 -0.9470292 0.1589536 -0.3765129 -0.9126728 0.1626967 -0.3795701 -0.910745 0.1933344 -0.4579571 -0.8676965 0.1978177 -0.4616541 -0.8647218 0.2261981 -0.5357826 -0.8134933 0.2313278 -0.5399992 -0.8092517 0.2569911 -0.6086873 -0.7506366 0.2626585 -0.6132645 -0.7449276 0.2852185 -0.6754897 -0.6799735 0.2912735 -0.680212 -0.6726599 0.3104416 -0.7351745 -0.6026147 0.3167453 -0.7398187 -0.593583 0.3264033 -0.7688076 -0.5499053 0.3681781 -0.7775073 -0.5098306 0.3834706 -0.8219237 -0.4211789 0.449172 -0.7879447 -0.4211742 0.4634956 -0.8252844 -0.3226104 0.5204328 -0.7905752 -0.3227083 0.5586407 -0.7879992 -0.2588014 0.2849222 -0.9558622 -0.07174241 0.2822409 -0.9564657 -0.07425296 0.2842618 -0.9433583 -0.171086 0.2070223 -0.9632602 -0.1710894 0.2074966 -0.9408423 -0.2678825 0.1313959 -0.9544484 -0.2678871 0.1316955 -0.9224267 -0.3630227 0.05747658 -0.930005 -0.363025 0.05905747 -0.8884497 -0.4551585 -0.008704364 -0.890341 -0.4552111 -0.04293996 -0.8647952 -0.5002854 -0.07551652 -0.8826475 -0.4639294 -0.1758398 -0.8686217 -0.4632244 -0.1804506 -0.8851432 -0.4289043 -0.2169679 -0.8962868 -0.3867751 -0.227743 -0.9275159 -0.2963902 -0.2243832 -0.9269297 -0.3007547 -0.2327619 -0.9486062 -0.2144014 -0.3013865 -0.9290852 -0.2143985 -0.3090956 -0.9431781 -0.1219627 -0.3142834 -0.9422605 -0.1156325 -0.1217212 -0.2084897 -0.9704205 -0.1217624 -0.2085632 -0.9703996 -0.0466268 -0.07671236 -0.9959625 0.6762983 -0.5812671 -0.4524921 -0.03936761 -0.07115083 -0.9966884 -0.3839693 -0.6783834 -0.6263892 -0.3839569 -0.6783624 -0.6264197 -0.3839696 -0.6783823 -0.6263903 -0.0367788 -0.7155508 -0.6975918 -0.1420942 -0.7022573 -0.6975986 -0.1434578 -0.6977402 -0.7018394 -0.2456678 -0.6686579 -0.7018148 -0.2461943 -0.6648663 -0.7052242 -0.341035 -0.6214757 -0.7053107 -0.3359194 -0.5771316 -0.7443637 -6.61089e-4 -0.04249083 -0.9990966 0.004756391 -0.04457473 -0.9989947 0.01317441 -0.1313971 -0.9912423 0.01392662 -0.1324353 -0.9910938 0.02207314 -0.2207849 -0.9750728 0.02331793 -0.2225809 -0.9746353 0.03101128 -0.3104847 -0.9500724 0.03273475 -0.3130567 -0.9491701 0.03986328 -0.3992261 -0.9159855 0.04204142 -0.4025503 -0.9144319 0.04849457 -0.4856697 -0.8727962 0.05109399 -0.489679 -0.8704045 0.05676639 -0.5684491 -0.8207577 0.05974543 -0.5730326 -0.8173518 0.06454432 -0.6462383 -0.7604013 0.06785809 -0.6512513 -0.755822 0.07171046 -0.7178419 -0.6925033 0.07530403 -0.7230988 -0.6866275 0.07816046 -0.782223 -0.6180763 0.08197247 -0.7875102 -0.6108257 0.08381068 -0.8385758 -0.5382995 0.08777773 -0.8436665 -0.5296432 0.08829462 -0.8669424 -0.4905251 0.1262959 -0.8865032 -0.4451532 0.1274064 -0.9253214 -0.3571385 0.201153 -0.9121369 -0.3571324 0.2028678 -0.9437967 -0.260945 0.2784968 -0.9243105 -0.2609399 0.2792482 -0.9462667 -0.163094 0.3546259 -0.9206736 -0.1630976 0.3535634 -0.9317699 -0.0824486 0.3774225 -0.9252609 -0.03800809 0.5192801 -0.8531161 0.05040866 0.5192811 -0.8531106 0.05049288 0.4707559 -0.870621 -0.1428568 0.4599018 -0.8879493 -0.006035327 0.4647365 -0.8848025 0.03382897 0.3722732 -0.9276368 -0.03004342 0.3790261 -0.9217908 -0.08149063 0.4420193 -0.8533847 -0.2763212 0.377155 -0.9255966 -0.0320183 0.3771347 -0.9256047 -0.0320208 0.1433638 -0.9892714 -0.02808612 0.1896809 -0.9755953 -0.1106113 0.1896755 -0.9755967 -0.1106084 0.2379098 -0.9712551 0.007904052 0.2858493 -0.9531524 -0.09894853 0.3032476 -0.9438707 -0.130954 0.2857517 -0.9534707 -0.09612286 0.3044981 -0.9478452 -0.09418338 0.2837238 -0.9579384 -0.0430662 0.283729 -0.9579368 -0.04306763 0.04699903 -0.9984076 -0.03119832 0.08699983 -0.9909067 -0.1026399 0.1428889 -0.9859935 -0.08602064 0.08220428 -0.996614 -0.001696228 0.1859693 -0.9822466 -0.0246433 -0.1907856 -0.9777024 -0.08774292 -0.1129797 -0.988507 -0.1004467 -0.09554272 -0.9912588 -0.09098076 -0.1153748 -0.9918474 -0.05410647 -0.01292294 -0.9960232 -0.08815228 -0.02463912 -0.9957702 -0.08851289 -0.01221776 -0.9946298 -0.1027728 -0.02454578 -0.9943261 -0.1035038 -0.01215696 -0.9945259 -0.1037816 -0.01218104 -0.9945232 -0.1038039 -0.3158576 -0.9444487 -0.09083342 -0.2850888 -0.9556936 -0.07330924 -0.318128 -0.9468097 -0.0484367 -0.2144309 -0.9705203 -0.1100447 -0.1908218 -0.9778586 -0.08590537 -0.2173315 -0.9744014 -0.05752444 -0.1138473 -0.9898872 -0.08462876 -0.3158667 -0.9444456 -0.0908336 -0.2836055 -0.9507388 -0.1251547 -0.3141462 -0.9420719 -0.1175272 -0.353466 -0.931128 -0.08979034 -0.4121004 -0.9046853 -0.1082484 -0.4194971 -0.9020113 -0.1019691 -0.412668 -0.9053996 -0.09978383 -0.5032362 -0.8582719 -0.1006121 -0.5042784 -0.8568572 -0.1072334 -0.5042756 -0.8568637 -0.1071953 -0.5042808 -0.8568555 -0.1072368 -0.4126757 -0.9053961 -0.09978389 -0.4198064 -0.9026703 -0.09459841 -0.5048156 -0.8568572 -0.104675 0.02763146 -0.03815221 -0.9988899 0.5841297 -0.8065344 -0.09107607 0.5841296 -0.8065339 -0.09108126 0.1060976 -0.1449874 -0.9837287 0.05039346 -0.07111537 -0.9961943 0.02763152 -0.03815209 -0.9988898 0.04000133 -0.05673938 -0.9975874 0.05112308 -0.07058799 -0.9961947 0.2037392 -0.2798019 -0.9381905 0.1510838 -0.2101474 -0.9659253 0.1044439 -0.1461877 -0.9837279 0.1525276 -0.2091003 -0.9659256 0.1525287 -0.2091018 -0.9659252 0.2953308 -0.406264 -0.8647134 0.2471616 -0.3428096 -0.9063072 0.2016453 -0.2813158 -0.9381901 0.2486088 -0.3417605 -0.9063075 0.2486092 -0.3417609 -0.9063073 0.4497246 -0.6194413 -0.6434597 0.4140316 -0.5732169 -0.707107 0.3766164 -0.5217245 -0.7654827 0.4154824 -0.5721672 -0.707106 0.3781493 -0.5206139 -0.765483 0.3357163 -0.4650821 -0.8191418 0.2926821 -0.4081838 -0.8647099 0.3371561 -0.4640196 -0.819153 0.3371579 -0.464022 -0.8191509 0.5079315 -0.6998114 -0.5022645 0.4797544 -0.6639627 -0.5735759 0.4476033 -0.6209836 -0.6434522 0.4812046 -0.662913 -0.5735751 0.4811996 -0.6629061 -0.5735874 0.5859162 -0.8090013 -0.0471071 0.5904341 -0.807013 -0.01083528 0.5643984 -0.80572 -0.1796385 0.5837597 -0.8045209 -0.1094106 0.5777385 -0.7962031 -0.1796633 0.5658492 -0.7828328 -0.2588199 0.5496585 -0.7603167 -0.3461127 0.5672959 -0.781787 -0.2588136 0.5510297 -0.7593212 -0.3461179 0.5308738 -0.7345442 -0.4226321 0.50527 -0.7017345 -0.5022658 0.532326 -0.7335001 -0.4226189 0.532327 -0.7335014 -0.4226155 0.5865674 -0.8099005 0 0.5865674 -0.8099005 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0.6427862 -0.7660457 0 0.6427862 -0.7660457 0 0.4787923 0.4220905 0.7698036 -0.8899049 -0.3016409 0.3421723 -0.7237626 -0.6802276 0.1160092 0.6008684 -0.7262399 0.3339651 0.8016727 0.5197215 0.2953143 -0.7429748 0.6262122 0.2363188 -0.8205005 0.4942958 0.2871424 0.4900623 -0.2171072 0.8442177 0.4658843 -0.3020336 0.8317017 -0.119743 -0.5087254 0.8525609 -0.3414636 0.4423068 0.8293174 0.119743 0.5087254 0.8525609 0.5562852 0.01539731 0.8308488 0.5408633 0 0.8411105 0.5084655 0.06845718 0.8583568 0.5084655 0.06845402 0.8583571 0.5319136 0.1601311 0.8315202 0.5180585 0.1423321 0.8434197 0.4995117 0.2012289 0.842612 0.4919489 0.2857105 0.8224086 0.4866555 0.2484354 0.8375239 0.4866552 0.2484512 0.8375194 0.3401697 0.4937471 0.8003115 0.3561767 0.3736959 0.8564401 0.3893672 0.3417667 0.8553297 0.4270714 0.3114859 0.8488737 0.2578251 0.4765349 0.8405003 0.1659626 0.5052891 0.8468408 0.1326227 0.5633934 0.8154749 0.2032608 0.4948145 0.8448927 -0.05487668 0.5130213 0.85662 -0.05487722 0.5130213 0.85662 0 0.555141 0.8317562 0.02720397 0.5270261 0.8494136 0.07305276 0.5160668 0.8534274 -0.2288567 0.4811984 0.8462108 -0.1661086 0.527778 0.8329816 -0.1524773 0.5189276 0.8411093 -0.1025157 0.5141456 0.8515543 -0.3270376 0.4692201 0.8202921 -0.2895284 0.4708948 0.8333256 -0.289501 0.4708988 0.8333327 -0.4658901 0.3020325 0.8316988 -0.4150612 0.3249074 0.8497996 -0.3706518 0.3486307 0.8608565 -0.4658843 0.3020335 0.8317016 -0.4792606 0.301916 0.8241092 -0.52933 0.234463 0.8153753 -0.4887924 0.2862933 0.8240862 -0.4900623 0.2171072 0.8442177 -0.514157 0.04104334 0.8567134 -0.5168163 0.1424571 0.8441605 -0.5331112 0.129218 0.8361191 -0.510487 0.1730588 0.8422906 -0.5084659 -0.06845515 0.8583569 -0.5084658 -0.06845724 0.8583566 -0.5408633 0 0.8411105 -0.5562853 -0.01539736 0.8308488 -0.5141572 0.04105252 0.8567129 -0.5319135 -0.1601301 0.8315206 -0.518059 -0.1423321 0.8434195 -0.4995123 -0.2012291 0.8426116 -0.4792729 -0.302326 0.8239517 -0.4605185 -0.3358827 0.821648 -0.4919481 -0.2857106 0.822409 -0.4866561 -0.2484436 0.8375212 -0.4866559 -0.2484515 0.8375189 -0.3561767 -0.3736959 0.8564401 -0.3893561 -0.3417775 0.8553303 -0.4270728 -0.3114868 0.8488727 -0.3269454 -0.465373 0.8225173 -0.2578244 -0.4765335 0.8405013 -0.3202147 -0.4648826 0.8254373 -0.3202715 -0.4648732 0.8254206 -0.1659626 -0.5052891 0.8468408 -0.1326256 -0.5633885 0.8154777 -0.2032603 -0.494813 0.8448936 0.05491358 -0.5130203 0.8566182 0.05487722 -0.5130213 0.85662 0 -0.555141 0.8317562 -0.02720701 -0.5270228 0.8494156 -0.07302963 -0.5160701 0.8534274 0.2895454 -0.4708892 0.8333228 0.228856 -0.481197 0.8462117 0.1661086 -0.527776 0.8329829 0.1524766 -0.5189252 0.8411109 0.1025152 -0.5141433 0.8515559 0.2895267 -0.470892 0.8333278 0.3270387 -0.4692169 0.8202933 0.3456692 -0.4477958 0.8246161 0.3412064 -0.451929 0.8242198 0.3414651 -0.4423087 0.8293159 0.4658901 -0.3020325 0.8316988 0.4150766 -0.3249007 0.8497946 0.3706531 -0.3486319 0.8608555 0.4887923 -0.2862933 0.8240862 0.5141574 -0.04105252 0.8567128 0.5141572 -0.0410434 0.8567134 0.516817 -0.1424571 0.8441601 0.5331109 -0.1292187 0.8361192 0.510487 -0.1730588 0.8422906 -0.9141712 0.1063318 0.3911325 -0.9106136 0.135618 0.3903722 -0.9156044 0.1902269 0.3542349 -0.8731718 0.3316414 0.3571904 -0.9141548 0.1899088 0.3581283 -0.9141548 0.1899167 0.3581236 -0.7931196 0.47777 0.3777527 -0.8284873 0.4034727 0.3883537 -0.8422523 0.3624251 0.3990728 -0.9258735 0.3516538 0.1381946 -0.9258849 0.3516297 0.1381807 -0.8205068 0.4942881 0.2871373 -0.7410153 0.5354992 0.4051384 -0.7117002 0.5998845 0.3655426 -0.6175001 0.6592056 0.4291173 -0.6557735 0.6626189 0.3617974 -0.7429709 0.6262162 0.2363207 -0.3966969 0.8363555 0.3783398 -0.4721124 0.8001034 0.3700599 -0.4799278 0.788051 0.3855451 -0.600896 0.7262212 0.3339562 -0.6008809 0.7262315 0.333961 -0.3270817 0.8625361 0.3860685 -0.3178889 0.860557 0.3979803 -0.3966844 0.8363605 0.3783421 -0.1658368 0.8993821 0.4044872 -0.1789177 0.9024703 0.3918365 -0.1789148 0.9024707 0.3918368 0 0.9126639 0.408711 -0.01513886 0.9183477 0.3954851 -0.09664607 0.9127946 0.3968194 0.2922592 0.8793122 0.3760247 0.2109448 0.8933957 0.3966692 0.1659199 0.8956759 0.4125958 0.1302788 0.9135284 0.3853482 0.1302686 0.9135296 0.3853487 0.2922591 0.8793122 0.3760247 0.3274515 0.8525536 0.4073426 0.431202 0.8302574 0.3531818 0.4800712 0.7798366 0.4017293 0.4901534 0.7659875 0.4159481 0.4312128 0.8302527 0.3531798 0.7237595 0.6802334 0.1159945 0.7237615 0.6802315 0.1159937 0.6174831 0.6590133 0.4294371 0.5795802 0.7494778 0.3199525 0.5795735 0.7494823 0.3199546 0.7382851 0.5840741 0.3373317 0.7625341 0.4943392 0.4173374 0.7247458 0.5673747 0.3909341 0.8462548 0.3749104 0.3785431 0.8389177 0.4320427 0.3309928 0.87424 0.3872666 0.2927952 0.8899063 0.3017373 0.3420839 0.9221946 0.06435197 0.3813345 0.9223822 0.07363641 0.3791949 0.9101076 0.1359834 0.3914239 0.9079124 0.2200685 0.356742 0.9166949 0.1921148 0.3503746 0.9164833 0.2221531 0.3327258 0.9154871 -0.04824352 0.3994444 0.9154863 -0.04822593 0.3994485 0.918978 -0.06561374 0.3888115 0.9193748 -0.04844474 0.3903885 0.9154698 0 0.4023869 0.9204919 0.07349503 0.3837878 0.9204926 0.07347756 0.3837895 0.9141713 -0.1063318 0.3911322 0.9106138 -0.1356179 0.3903718 0.9156045 -0.1902239 0.3542363 0.9154772 -0.1934523 0.3528139 0.9141549 -0.1899167 0.3581236 0.925876 -0.3516526 0.1381815 0.925882 -0.3516396 0.138174 0.9522074 -0.189376 0.2396617 0.8731735 -0.3316388 0.3571883 0.9141547 -0.1899109 0.358127 0.8205112 -0.4942852 0.2871298 0.8205001 -0.4942985 0.2871384 0.822227 -0.4222626 0.381624 0.7931196 -0.47777 0.3777527 0.7491624 -0.5584821 0.3561648 0.6558239 -0.6626265 0.3616921 0.7429271 -0.6262602 0.2363417 0.7429809 -0.6262062 0.2363159 0.3967349 -0.8363406 0.378333 0.3270795 -0.8625356 0.3860715 0.317892 -0.8605576 0.3979763 0.3966497 -0.8363741 0.3783482 0.1658368 -0.899381 0.4044898 0.1789206 -0.9024697 0.3918363 0.1788711 -0.902478 0.39184 0 -0.9126639 0.408711 0.01513886 -0.9183477 0.3954851 0.09662497 -0.9127968 0.3968193 -0.2922592 -0.8793122 0.3760247 -0.2109655 -0.893393 0.3966644 -0.16592 -0.8956746 0.4125986 -0.1302755 -0.9135289 0.3853484 -0.1302686 -0.9135296 0.3853487 -0.292256 -0.8793131 0.3760251 -0.3274493 -0.8525539 0.4073436 -0.4312111 -0.8302549 0.3531768 -0.4800731 -0.7798362 0.4017279 -0.4901652 -0.765973 0.4159609 -0.4312101 -0.8302553 0.353177 -0.723755 -0.6802419 0.1159726 -0.7237636 -0.6802334 0.115969 -0.6174819 -0.659017 0.429433 -0.579582 -0.7494748 0.3199568 -0.5795654 -0.7494855 0.3199619 -0.8215125 -0.3639541 0.4389243 -0.8016727 -0.5197215 0.2953143 -0.7382851 -0.5840741 0.3373317 -0.7625341 -0.4943392 0.4173374 -0.7247458 -0.5673747 0.3909341 -0.8462548 -0.3749104 0.3785431 -0.8389177 -0.4320427 0.3309928 -0.8742143 -0.3873019 0.2928252 -0.8899043 -0.3016 0.3422101 -0.9164833 -0.2221531 0.3327258 -0.9221946 -0.06435197 0.3813345 -0.9223822 -0.07363641 0.3791949 -0.9101076 -0.1359834 0.3914239 -0.9079124 -0.2200685 0.356742 -0.9154871 0.04824352 0.3994446 -0.9154869 0.04824054 0.3994452 -0.9189757 0.06561464 0.3888166 -0.9193731 0.04841393 0.3903965 -0.9154698 0 0.4023869 -0.920491 -0.07346439 0.383796 -0.9204898 -0.07349199 0.3837934 -0.841422 0.1773347 0.5104522 -0.841422 0.1773346 0.5104522 -0.8414221 0.08992177 0.5328442 -0.8414226 0.08991986 0.5328437 -0.8414224 0 0.5403779 -0.8414224 0 0.5403779 -0.8414223 -0.08992099 0.532844 -0.841422 -0.08992004 0.5328446 -0.841422 -0.1773347 0.5104522 -0.841422 -0.1773347 0.5104523 -0.7398475 0.2207826 0.635516 -0.7398475 0.2207828 0.6355161 -0.7398473 0.111952 0.6633948 -0.7398468 0.1119534 0.6633953 -0.739847 0 0.6727752 -0.739847 0 0.6727752 -0.7398472 -0.1119524 0.6633949 -0.7398471 -0.1119523 0.663395 -0.7398472 -0.220782 0.6355168 -0.7398476 -0.2207828 0.635516 -0.6178162 0.2580455 0.7427758 -0.6178162 0.2580454 0.7427757 -0.617816 0.1308466 0.7753595 -0.617816 0.1308466 0.7753596 -0.6178157 0 0.7863229 -0.6178158 0 0.786323 -0.6178157 -0.1308466 0.7753598 -0.6178161 -0.1308472 0.7753595 -0.6178162 -0.2580455 0.7427757 -0.6178154 -0.2580447 0.7427765 -0.9166949 -0.1921148 0.3503746 -0.8414223 -0.2598044 0.4738252 -0.841422 -0.2598037 0.4738261 -0.7398476 -0.323457 0.5899162 -0.7398476 -0.323457 0.5899162 -0.6178163 -0.3780487 0.6894797 -0.6178153 -0.3780475 0.6894811 -0.4787912 -0.4220896 0.7698048 -0.4787932 -0.4220914 0.7698025 -0.3418175 -0.4518222 0.8240251 -0.3401722 -0.4937322 0.8003195 -0.9154772 0.1934523 0.3528139 -0.8414219 0.2598046 0.4738256 -0.8414222 0.2598034 0.4738258 -0.7398476 0.323457 0.5899162 -0.7398476 0.323457 0.5899161 -0.617816 0.3780488 0.6894798 -0.6178163 0.3780483 0.6894798 -0.4787933 0.4220902 0.7698031 -0.4787923 0.4220916 0.769803 -0.3412048 0.4519293 0.8242204 -0.3456824 0.4477823 0.8246179 -0.7023626 -0.6001609 0.3827449 -0.6178144 -0.6629784 0.422806 -0.617816 -0.6629787 0.4228032 -0.4787946 -0.7402138 0.4720585 -0.4787917 -0.740213 0.4720627 -0.3266432 -0.7968879 0.5082065 -0.3266457 -0.7968888 0.5082036 -0.1655778 -0.8314995 0.5302761 -0.1655741 -0.8314979 0.5302795 0 -0.8431355 0.5377013 0 -0.8431355 0.5377013 0.1655778 -0.8314974 0.5302792 0.1655741 -0.8314999 0.5302764 0.3266432 -0.7968895 0.5082041 0.3266458 -0.7968872 0.508206 -0.8264122 -0.4177416 0.3775381 -0.7398474 -0.4991353 0.4510985 -0.739846 -0.4991343 0.4511017 -0.6178159 -0.5833747 0.5272356 -0.6178173 -0.5833754 0.5272333 -0.4787918 -0.6513388 0.5886561 -0.4787932 -0.6513395 0.5886543 -0.3266456 -0.7012099 0.6337251 -0.3266447 -0.7012094 0.633726 -0.1655745 -0.7316647 0.6612502 -0.1655763 -0.7316657 0.6612487 0 -0.7419062 0.6705037 0 -0.7419062 0.6705037 0.1655746 -0.7316659 0.6612489 0.1655763 -0.7316645 0.66125 0.3266456 -0.7012092 0.6337257 0.3266447 -0.70121 0.6337252 -0.8857553 -0.2877681 0.3641803 -0.841422 -0.335027 0.4239879 -0.8414222 -0.3350272 0.4239875 -0.739846 -0.4171121 0.5278686 -0.7398474 -0.4171137 0.5278653 -0.6178173 -0.4875119 0.6169555 -0.6178163 -0.4875112 0.6169569 -0.4787933 -0.5443054 0.6888314 -0.4787908 -0.5443037 0.6888346 -0.3266447 -0.585978 0.7415747 -0.3266457 -0.5859787 0.7415737 -0.1655765 -0.6114292 0.7737821 -0.1655778 -0.6114301 0.7737811 0 -0.619988 0.7846113 0 -0.619988 0.7846113 0.1655765 -0.6114302 0.7737812 0.1655779 -0.6114291 0.773782 0.3266447 -0.5859789 0.7415739 0.3266457 -0.5859777 0.7415744 0.5293301 -0.2344631 0.8153752 0.4792606 -0.301916 0.8241093 0.4787933 -0.422089 0.7698038 0.4787912 -0.4220919 0.7698035 0.4787907 -0.5443063 0.6888325 0.4787932 -0.5443028 0.6888334 0.4787933 -0.6513383 0.5886556 0.4787919 -0.65134 0.5886548 0.4787915 -0.7402151 0.4720594 0.4787946 -0.7402117 0.4720618 0.4799296 -0.7880525 0.3855397 0.4721152 -0.8001034 0.3700564 0.320251 0.4648765 0.8254265 0.3202715 0.4648732 0.8254206 0.3269442 0.4653729 0.8225178 0.3418159 0.4518225 0.8240256 0.4787932 0.4220914 0.7698025 0.4792729 0.3023248 0.8239522 0.4605064 0.3359025 0.8216467 0.6178163 0.3780487 0.6894797 0.6178161 0.3780484 0.6894801 0.6178161 0.2580454 0.7427757 0.6178162 0.2580455 0.7427757 0.617816 0.1308467 0.7753596 0.617816 0.1308466 0.7753596 0.6178158 0 0.7863228 0.6178157 0 0.7863228 0.6178157 -0.1308472 0.7753598 0.617816 -0.1308466 0.7753595 0.6178161 -0.2580445 0.742776 0.6178155 -0.2580456 0.7427761 0.6178153 -0.3780491 0.6894804 0.6178162 -0.3780472 0.6894805 0.6178162 -0.4875123 0.6169561 0.6178172 -0.4875108 0.6169564 0.6178174 -0.583374 0.5272349 0.617816 -0.5833761 0.5272339 0.6178162 -0.6629773 0.4228053 0.6178146 -0.6629797 0.4228038 0.617499 -0.6592115 0.4291097 0.6008809 -0.7262315 0.333961 -0.749157 0.5584872 0.3561681 -0.6178161 0.6629773 0.4228053 -0.617816 0.6629776 0.4228051 -0.4787935 0.740213 0.4720609 -0.4787929 0.7402137 0.4720605 -0.3266437 0.7968891 0.5082044 -0.3266453 0.7968876 0.5082056 -0.1655764 0.8314983 0.5302782 -0.1655778 0.8314974 0.5302792 0 0.8431355 0.5377013 0 0.8431355 0.5377013 0.1655764 0.8314976 0.5302793 0.1655778 0.8314982 0.5302781 0.3266437 0.7968882 0.508206 0.3266454 0.7968886 0.5082041 0.4787935 0.7402135 0.4720603 0.4787929 0.7402133 0.4720611 0.6178161 0.6629775 0.422805 0.6178159 0.6629775 0.4228054 0.7023626 0.6001608 0.3827449 0.7237626 0.6802276 0.1160094 0.7398476 0.323457 0.5899162 0.7398476 0.323457 0.5899162 0.7398476 0.2207828 0.635516 0.7398475 0.2207826 0.6355161 0.7398474 0.1119532 0.6633946 0.7398468 0.111952 0.6633954 0.739847 0 0.6727752 0.739847 0 0.6727752 0.7398473 -0.1119523 0.663395 0.7398471 -0.1119524 0.663395 0.7398471 -0.2207829 0.6355164 0.7398475 -0.2207819 0.6355163 0.7398476 -0.3234571 0.5899162 0.7398476 -0.323457 0.5899161 0.7398477 -0.417111 0.5278673 0.7398462 -0.4171146 0.5278666 0.7398458 -0.4991365 0.4510995 0.7398473 -0.4991333 0.4511008 0.7410153 -0.5354992 0.4051383 0.7116989 -0.599887 0.365541 -0.8222271 0.4222626 0.381624 -0.7398468 0.4991358 0.4510989 -0.7398474 0.4991346 0.4510994 -0.6178172 0.5833755 0.5272333 -0.6178161 0.5833774 0.5272324 -0.4787933 0.6513398 0.5886541 -0.4787935 0.6513394 0.5886542 -0.3266429 0.7012106 0.6337257 -0.3266438 0.7012097 0.6337262 -0.1655783 0.7316642 0.6612498 -0.1655765 0.7316657 0.6612487 0 0.7419062 0.6705037 0 0.7419062 0.6705037 0.1655783 0.7316654 0.6612485 0.1655765 0.7316645 0.66125 0.3266429 0.7012099 0.6337264 0.3266438 0.7012103 0.6337255 0.4787933 0.6513395 0.5886543 0.4787935 0.6513396 0.5886539 0.6178172 0.5833767 0.5272319 0.617816 0.5833762 0.5272339 0.7398468 0.4991348 0.4510996 0.7398474 0.4991353 0.4510985 0.8264122 0.4177416 0.3775381 0.8215125 0.3639541 0.4389244 0.8414222 0.2598044 0.4738252 0.841422 0.2598037 0.4738261 0.841422 0.1773347 0.5104523 0.841422 0.1773347 0.5104522 0.841422 0.0899201 0.5328446 0.8414226 0.08992171 0.5328435 0.8414224 0 0.5403779 0.8414224 0 0.5403779 0.8414224 -0.08991992 0.5328441 0.8414221 -0.08992099 0.5328444 0.841422 -0.1773346 0.5104522 0.841422 -0.1773347 0.5104523 0.8414219 -0.2598046 0.4738256 0.8414222 -0.2598034 0.4738258 0.8414223 -0.3350269 0.4239878 0.8414221 -0.3350273 0.4239877 0.8422523 -0.3624251 0.3990728 0.8284873 -0.4034726 0.3883537 -0.9522074 0.189376 0.2396618 -0.8414222 0.3350269 0.4239878 -0.8414221 0.3350273 0.4239877 -0.7398476 0.417111 0.5278673 -0.7398469 0.4171129 0.5278669 -0.6178163 0.4875108 0.6169571 -0.6178171 0.4875095 0.6169574 -0.4787921 0.5443044 0.6888331 -0.4787932 0.5443028 0.6888334 -0.3266442 0.5859781 0.7415748 -0.3266432 0.5859792 0.7415744 -0.1655779 0.6114291 0.773782 -0.1655782 0.6114287 0.7737821 0 0.6199867 0.7846124 0 0.6199867 0.7846124 0.1655778 0.6114287 0.7737821 0.1655782 0.611429 0.7737819 0.3266442 0.585979 0.7415741 0.3266432 0.5859783 0.7415751 0.4787921 0.5443032 0.6888339 0.4787932 0.544304 0.6888325 0.6178164 0.4875099 0.6169579 0.6178172 0.4875105 0.6169567 0.7398476 0.4171124 0.5278663 0.7398468 0.4171116 0.527868 0.8414222 0.3350272 0.4239875 0.841422 0.335027 0.4239879 0.8857553 0.2877681 0.3641803 0.8899049 0.3016409 0.3421725 0 -0.08715641 -0.9961946 0 0.08715677 -0.9961947 0 0.08715677 -0.9961947 0 0.2588204 -0.9659255 0 0.2588204 -0.9659255 0 0.422618 -0.9063079 0 0.422618 -0.9063079 0 0.5735753 -0.8191529 0 0.5735753 -0.8191529 0 0.7071068 -0.7071068 0 0.7071068 -0.7071068 0 0.8191529 -0.5735753 0 0.8191529 -0.5735753 0 0.9063079 -0.422618 0 0.9063079 -0.422618 0 0.9659255 -0.2588204 0 0.9659255 -0.2588204 0 0.9961947 -0.08715677 0 0.9961947 -0.08715677 0 0.9961946 0.08715659 0 0.9961946 0.08715659 0 0.9659255 0.2588199 0 0.9659255 0.2588199 0 0.9063079 0.422618 0 0.9063079 0.422618 0 0.8191529 0.5735753 0 0.8191529 0.5735753 0 0.7071058 0.7071078 0 0.7071058 0.7071078 0 0.5735766 0.8191519 0 0.5735766 0.8191519 0 0.422618 0.9063079 0 0.422618 0.9063079 0 0.2588186 0.9659259 0 0.2588186 0.9659259 0 0.08715677 0.9961947 0 0.08715677 0.9961947 0 -0.08715641 0.9961946 0 -0.08715641 0.9961946 0 -0.2588186 0.9659259 0 -0.2588186 0.9659259 0 -0.422618 0.9063079 0 -0.422618 0.9063079 0 -0.5735766 0.8191519 0 -0.5735766 0.8191519 0 -0.7071058 0.7071078 0 -0.7071058 0.7071078 0 -0.8191529 0.5735753 0 -0.8191529 0.5735753 0 -0.9063079 0.422618 0 -0.9063079 0.422618 0 -0.9659255 0.2588199 0 -0.9659255 0.2588199 0 -0.9961949 0.08715271 0 -0.9961949 0.08715271 0 -0.996195 -0.08715289 0 -0.996195 -0.08715289 0 -0.9659255 -0.2588204 0 -0.9659255 -0.2588204 0 -0.9063079 -0.422618 0 -0.9063079 -0.422618 0 -0.8191529 -0.5735753 0 -0.8191529 -0.5735753 0 -0.7071068 -0.7071068 0 -0.7071068 -0.7071068 0 -0.5735753 -0.8191529 0 -0.5735753 -0.8191529 0 -0.422618 -0.9063079 0 -0.422618 -0.9063079 0 -0.2588204 -0.9659255 0 -0.2588204 -0.9659255 0 -0.08715641 -0.9961946 0 -0.08715677 -0.9961947 0 0.08715641 -0.9961946 0 0.08715641 -0.9961946 0 0.2588204 -0.9659255 0 0.2588204 -0.9659255 0 0.422618 -0.9063079 0 0.422618 -0.9063079 0 0.5735753 -0.8191529 0 0.5735753 -0.8191529 0 0.7071068 -0.7071068 0 0.7071068 -0.7071068 0 0.8191529 -0.5735753 0 0.8191529 -0.5735753 0 0.9063079 -0.422618 0 0.9063079 -0.422618 0 0.9659255 -0.2588204 0 0.9659255 -0.2588204 0 0.996195 -0.08715289 0 0.996195 -0.08715289 0 0.9961949 0.08715271 0 0.9961949 0.08715271 0 0.9659255 0.2588199 0 0.9659255 0.2588199 0 0.9063079 0.422618 0 0.9063079 0.422618 0 0.8191529 0.5735753 0 0.8191529 0.5735753 0 0.7071058 0.7071078 0 0.7071058 0.7071078 0 0.5735766 0.8191519 0 0.5735766 0.8191519 0 0.422618 0.9063079 0 0.422618 0.9063079 0 0.2588186 0.9659259 0 0.2588186 0.9659259 0 0.08715641 0.9961946 0 0.08715641 0.9961946 0 -0.08715677 0.9961947 0 -0.08715677 0.9961947 0 -0.2588186 0.9659259 0 -0.2588186 0.9659259 0 -0.422618 0.9063079 0 -0.422618 0.9063079 0 -0.5735766 0.8191519 0 -0.5735766 0.8191519 0 -0.7071058 0.7071078 0 -0.7071058 0.7071078 0 -0.8191529 0.5735753 0 -0.8191529 0.5735753 0 -0.9063079 0.422618 0 -0.9063079 0.422618 0 -0.9659255 0.2588199 0 -0.9659255 0.2588199 0 -0.9961946 0.08715659 0 -0.9961946 0.08715659 0 -0.9961947 -0.08715677 0 -0.9961947 -0.08715677 0 -0.9659255 -0.2588204 0 -0.9659255 -0.2588204 0 -0.9063079 -0.422618 0 -0.9063079 -0.422618 0 -0.8191529 -0.5735753 0 -0.8191529 -0.5735753 0 -0.7071068 -0.7071068 0 -0.7071068 -0.7071068 0 -0.5735753 -0.8191529 0 -0.5735753 -0.8191529 0 -0.422618 -0.9063079 0 -0.422618 -0.9063079 0 -0.2588204 -0.9659255 0 -0.2588204 -0.9659255 0 -0.08715677 -0.9961947 0.4787912 0.4220896 0.7698048 -0.8899049 -0.3016409 0.3421723 -0.7237626 -0.6802276 0.1160092 0.600896 -0.7262212 0.3339562 0.8016727 0.5197215 0.2953143 -0.7429809 0.6262062 0.2363159 -0.8205001 0.4942985 0.2871384 0.4900623 -0.2171072 0.8442177 0.4658843 -0.3020336 0.8317017 -0.119743 -0.5087254 0.8525609 -0.3414651 0.4423087 0.8293157 0.119743 0.5087254 0.8525609 0.5562855 0.01539731 0.8308488 0.5408633 0 0.8411105 0.5084658 0.06845724 0.8583566 0.5084659 0.06845521 0.8583569 0.5319135 0.1601301 0.8315206 0.518059 0.1423321 0.8434195 0.4995123 0.2012291 0.8426116 0.4919481 0.2857106 0.822409 0.4866561 0.2484436 0.8375212 0.4866559 0.2484515 0.8375189 0.3401722 0.4937322 0.8003195 0.3561767 0.3736959 0.8564401 0.3893561 0.3417775 0.8553303 0.4270728 0.3114868 0.8488727 0.2578244 0.4765335 0.8405013 0.1659626 0.5052891 0.8468408 0.1326256 0.5633885 0.8154777 0.2032603 0.494813 0.8448936 -0.05491358 0.5130203 0.8566182 -0.05487722 0.5130213 0.85662 0 0.555141 0.8317562 0.02720701 0.5270228 0.8494156 0.07302963 0.5160701 0.8534274 -0.228856 0.481197 0.8462117 -0.1661086 0.527776 0.8329829 -0.1524766 0.5189252 0.8411109 -0.1025152 0.5141433 0.8515559 -0.3270388 0.4692187 0.8202924 -0.2895277 0.4708936 0.8333265 -0.2895002 0.4708976 0.8333337 -0.4658901 0.3020325 0.8316988 -0.4150766 0.3249007 0.8497946 -0.3706531 0.3486319 0.8608555 -0.4658843 0.3020335 0.8317016 -0.4792606 0.301916 0.8241092 -0.52933 0.234463 0.8153753 -0.4887924 0.2862933 0.8240862 -0.4900623 0.2171072 0.8442177 -0.5141572 0.0410434 0.8567134 -0.516817 0.1424571 0.8441601 -0.5331109 0.1292187 0.8361192 -0.510487 0.1730588 0.8422906 -0.5084655 -0.06845402 0.8583571 -0.5084655 -0.06845718 0.8583568 -0.5408633 0 0.8411105 -0.5562853 -0.01539736 0.8308488 -0.5141574 0.04105252 0.8567129 -0.5319136 -0.1601311 0.8315202 -0.5180585 -0.1423321 0.8434197 -0.4995117 -0.2012289 0.842612 -0.4792728 -0.3023248 0.8239522 -0.4605064 -0.3359025 0.8216467 -0.4919489 -0.2857105 0.8224086 -0.4866555 -0.2484354 0.8375239 -0.4866552 -0.2484512 0.8375194 -0.3561767 -0.3736959 0.8564401 -0.3893672 -0.3417667 0.8553297 -0.4270714 -0.3114859 0.8488737 -0.3269442 -0.4653729 0.8225178 -0.2578251 -0.4765349 0.8405003 -0.320251 -0.4648765 0.8254266 -0.3202715 -0.4648732 0.8254206 -0.1659626 -0.5052891 0.8468408 -0.1326227 -0.5633934 0.8154749 -0.2032608 -0.4948145 0.8448927 0.05487668 -0.5130213 0.85662 0.05487722 -0.5130213 0.85662 0 -0.555141 0.8317562 -0.02720397 -0.5270261 0.8494136 -0.07305276 -0.5160668 0.8534274 0.2895461 -0.4708904 0.8333218 0.2288567 -0.4811983 0.8462108 0.1661086 -0.527778 0.8329816 0.1524773 -0.5189276 0.8411093 0.1025157 -0.5141456 0.8515543 0.2895274 -0.4708932 0.8333267 0.3270375 -0.4692183 0.8202931 0.345674 -0.4477901 0.8246172 0.3412049 -0.4519293 0.8242204 0.3414636 -0.4423067 0.8293174 0.4658901 -0.3020325 0.8316988 0.4150612 -0.3249074 0.8497996 0.3706518 -0.3486307 0.8608565 0.4887923 -0.2862933 0.8240862 0.5141572 -0.04105252 0.8567129 0.514157 -0.04104334 0.8567134 0.5168163 -0.1424571 0.8441605 0.5331112 -0.129218 0.8361191 0.510487 -0.1730588 0.8422906 -0.9141713 0.1063318 0.3911322 -0.9106138 0.1356179 0.3903718 -0.9156045 0.1902239 0.3542363 -0.8731735 0.3316388 0.3571883 -0.9141547 0.1899109 0.358127 -0.9141548 0.1899167 0.3581236 -0.7931196 0.47777 0.3777527 -0.8284873 0.4034727 0.3883537 -0.8422523 0.3624251 0.3990728 -0.925876 0.3516526 0.1381816 -0.925882 0.3516396 0.138174 -0.8205112 0.4942852 0.2871298 -0.7410153 0.5354992 0.4051384 -0.7116989 0.599887 0.365541 -0.617499 0.6592115 0.4291098 -0.6557793 0.6626248 0.3617762 -0.7429579 0.6262293 0.2363269 -0.3967349 0.8363406 0.378333 -0.4721152 0.8001034 0.3700564 -0.4799296 0.7880525 0.3855397 -0.6008684 0.7262399 0.3339651 -0.6008809 0.7262315 0.333961 -0.3270795 0.8625356 0.3860715 -0.317892 0.8605576 0.3979763 -0.3966497 0.8363741 0.3783482 -0.1658368 0.899381 0.4044898 -0.1789206 0.9024697 0.3918363 -0.1788711 0.902478 0.39184 0 0.9126639 0.408711 -0.01513886 0.9183477 0.3954851 -0.09662497 0.9127968 0.3968193 0.2922592 0.8793122 0.3760247 0.2109655 0.893393 0.3966644 0.16592 0.8956746 0.4125986 0.1302755 0.9135289 0.3853484 0.1302686 0.9135296 0.3853487 0.292256 0.8793131 0.3760251 0.3274493 0.8525539 0.4073436 0.4312111 0.8302549 0.3531768 0.4800731 0.7798362 0.4017279 0.4901652 0.765973 0.4159609 0.4312101 0.8302553 0.353177 0.723755 0.6802419 0.1159726 0.7237636 0.6802334 0.115969 0.6174819 0.659017 0.429433 0.579582 0.7494748 0.3199568 0.5795654 0.7494855 0.3199619 0.7382851 0.5840741 0.3373317 0.7625341 0.4943392 0.4173374 0.7247458 0.5673747 0.3909341 0.8462548 0.3749104 0.3785431 0.8389177 0.4320427 0.3309928 0.87424 0.3872666 0.2927952 0.8899063 0.3017373 0.3420839 0.9221946 0.06435197 0.3813345 0.9223822 0.07363641 0.3791949 0.9101076 0.1359834 0.3914239 0.9079124 0.2200685 0.356742 0.9166949 0.1921148 0.3503746 0.9164833 0.2221531 0.3327258 0.9154871 -0.04824352 0.3994446 0.9154862 -0.04822558 0.3994488 0.918978 -0.06561374 0.3888115 0.9193748 -0.04844474 0.3903885 0.9154698 0 0.4023869 0.9204919 0.07349503 0.3837878 0.9204926 0.07347756 0.3837895 0.9141712 -0.1063318 0.3911325 0.9106136 -0.135618 0.3903722 0.9156044 -0.1902269 0.3542349 0.9154772 -0.1934523 0.3528139 0.9141549 -0.1899167 0.3581236 0.9258735 -0.3516538 0.1381945 0.9258849 -0.3516297 0.1381807 0.9522074 -0.189376 0.2396617 0.8731718 -0.3316414 0.3571904 0.9141548 -0.1899088 0.3581283 0.8205068 -0.4942881 0.2871373 0.8205005 -0.4942958 0.2871424 0.822227 -0.4222626 0.381624 0.7931196 -0.47777 0.3777527 0.7491571 -0.5584872 0.3561681 0.6558181 -0.6626206 0.3617134 0.7429401 -0.6262472 0.2363355 0.7429748 -0.6262122 0.2363188 0.3966969 -0.8363555 0.3783398 0.3270817 -0.8625361 0.3860685 0.3178889 -0.860557 0.3979803 0.3966844 -0.8363605 0.3783421 0.1658368 -0.8993821 0.4044872 0.1789177 -0.9024703 0.3918365 0.1789148 -0.9024707 0.3918368 0 -0.9126639 0.408711 0.01513886 -0.9183477 0.3954851 0.09664607 -0.9127946 0.3968194 -0.2922592 -0.8793122 0.3760247 -0.2109448 -0.8933957 0.3966692 -0.1659199 -0.8956759 0.4125958 -0.1302788 -0.9135284 0.3853482 -0.1302686 -0.9135296 0.3853487 -0.2922591 -0.8793122 0.3760247 -0.3274515 -0.8525536 0.4073426 -0.431202 -0.8302574 0.3531818 -0.4800712 -0.7798366 0.4017293 -0.4901534 -0.7659875 0.4159481 -0.4312128 -0.8302527 0.3531798 -0.7237595 -0.6802334 0.1159945 -0.7237615 -0.6802315 0.1159937 -0.6174831 -0.6590133 0.4294371 -0.5795802 -0.7494778 0.3199525 -0.5795735 -0.7494823 0.3199546 -0.8215125 -0.3639541 0.4389243 -0.8016727 -0.5197215 0.2953143 -0.7382851 -0.5840741 0.3373317 -0.7625341 -0.4943392 0.4173374 -0.7247458 -0.5673747 0.3909341 -0.8462548 -0.3749104 0.3785431 -0.8389177 -0.4320427 0.3309928 -0.8742143 -0.3873019 0.2928252 -0.8899043 -0.3016 0.3422101 -0.9164833 -0.2221531 0.3327258 -0.9221946 -0.06435197 0.3813345 -0.9223822 -0.07363641 0.3791949 -0.9101076 -0.1359834 0.3914239 -0.9079124 -0.2200685 0.356742 -0.9154871 0.04824352 0.3994444 -0.9154869 0.04824095 0.3994451 -0.9189757 0.06561464 0.3888166 -0.9193731 0.04841393 0.3903965 -0.9154698 0 0.4023869 -0.920491 -0.07346439 0.383796 -0.9204898 -0.07349199 0.3837934 -0.841422 0.1773347 0.5104522 -0.841422 0.1773346 0.5104522 -0.8414221 0.08992099 0.5328444 -0.8414224 0.08991992 0.5328441 -0.8414224 0 0.5403779 -0.8414224 0 0.5403779 -0.8414226 -0.08992171 0.5328435 -0.841422 -0.08992004 0.5328446 -0.841422 -0.1773347 0.5104522 -0.841422 -0.1773347 0.5104523 -0.7398476 0.2207819 0.6355163 -0.7398471 0.2207829 0.6355164 -0.7398472 0.1119524 0.6633949 -0.7398473 0.1119523 0.663395 -0.739847 0 0.6727752 -0.739847 0 0.6727752 -0.7398468 -0.111952 0.6633954 -0.7398474 -0.1119533 0.6633946 -0.7398475 -0.2207826 0.6355161 -0.7398476 -0.2207828 0.635516 -0.6178155 0.2580456 0.7427761 -0.6178161 0.2580445 0.742776 -0.617816 0.1308466 0.7753595 -0.6178157 0.1308472 0.7753598 -0.6178158 0 0.7863228 -0.6178158 0 0.786323 -0.617816 -0.1308466 0.7753595 -0.617816 -0.1308466 0.7753596 -0.6178162 -0.2580455 0.7427757 -0.6178161 -0.2580454 0.7427757 -0.9166949 -0.1921148 0.3503746 -0.8414223 -0.2598044 0.4738252 -0.841422 -0.2598037 0.4738261 -0.7398476 -0.323457 0.5899162 -0.7398476 -0.323457 0.5899162 -0.6178163 -0.3780487 0.6894797 -0.6178161 -0.3780484 0.6894801 -0.4787923 -0.4220905 0.7698036 -0.4787932 -0.4220914 0.7698025 -0.341816 -0.4518225 0.8240256 -0.3401697 -0.4937471 0.8003115 -0.9154772 0.1934523 0.3528139 -0.8414219 0.2598046 0.4738256 -0.8414222 0.2598034 0.4738258 -0.7398476 0.323457 0.5899162 -0.7398476 0.323457 0.5899161 -0.6178152 0.3780491 0.6894804 -0.6178162 0.3780472 0.6894805 -0.4787933 0.422089 0.7698038 -0.4787912 0.4220919 0.7698035 -0.3412064 0.451929 0.8242198 -0.3456775 0.447788 0.8246168 -0.7023626 -0.6001609 0.3827449 -0.6178159 -0.6629775 0.4228054 -0.6178161 -0.6629775 0.422805 -0.4787928 -0.7402133 0.4720611 -0.4787935 -0.7402135 0.4720603 -0.3266453 -0.7968886 0.5082041 -0.3266437 -0.7968882 0.508206 -0.1655778 -0.8314982 0.5302781 -0.1655764 -0.8314976 0.5302793 0 -0.8431355 0.5377013 0 -0.8431355 0.5377013 0.1655778 -0.8314974 0.5302792 0.1655764 -0.8314983 0.5302782 0.3266453 -0.7968876 0.5082056 0.3266437 -0.7968891 0.5082044 -0.8264122 -0.4177416 0.3775381 -0.7398474 -0.4991353 0.4510985 -0.7398468 -0.4991349 0.4510997 -0.617816 -0.5833762 0.527234 -0.6178172 -0.5833768 0.5272319 -0.4787935 -0.6513396 0.5886539 -0.4787932 -0.6513395 0.5886543 -0.3266438 -0.7012103 0.6337255 -0.3266429 -0.7012099 0.6337264 -0.1655765 -0.7316645 0.66125 -0.1655783 -0.7316654 0.6612485 0 -0.7419062 0.6705037 0 -0.7419062 0.6705037 0.1655766 -0.7316657 0.6612487 0.1655783 -0.7316642 0.6612498 0.3266437 -0.7012097 0.6337262 0.3266429 -0.7012106 0.6337257 -0.8857553 -0.2877681 0.3641803 -0.841422 -0.335027 0.4239879 -0.8414222 -0.3350272 0.4239875 -0.7398468 -0.4171116 0.527868 -0.7398476 -0.4171124 0.5278663 -0.6178172 -0.4875105 0.6169567 -0.6178164 -0.4875099 0.6169579 -0.4787932 -0.544304 0.6888325 -0.4787921 -0.5443032 0.6888339 -0.3266431 -0.5859783 0.7415751 -0.3266442 -0.585979 0.7415741 -0.1655782 -0.611429 0.7737819 -0.1655778 -0.6114287 0.7737821 0 -0.6199867 0.7846124 0 -0.6199867 0.7846124 0.1655782 -0.6114287 0.7737821 0.1655779 -0.6114291 0.773782 0.3266432 -0.5859792 0.7415744 0.3266443 -0.5859781 0.7415748 0.5293301 -0.2344631 0.8153752 0.4792606 -0.301916 0.8241093 0.4787933 -0.4220902 0.7698031 0.4787923 -0.4220916 0.769803 0.4787921 -0.5443044 0.6888331 0.4787932 -0.5443028 0.6888334 0.4787932 -0.6513397 0.588654 0.4787935 -0.6513394 0.5886542 0.4787935 -0.740213 0.4720609 0.4787929 -0.7402137 0.4720605 0.4799277 -0.788051 0.3855451 0.4721124 -0.8001034 0.37006 0.3202147 0.4648826 0.8254373 0.3202715 0.4648732 0.8254206 0.3269454 0.465373 0.8225173 0.3418175 0.4518223 0.8240252 0.4787932 0.4220914 0.7698025 0.4792729 0.302326 0.8239519 0.4605185 0.3358827 0.821648 0.6178163 0.3780487 0.6894797 0.6178153 0.3780475 0.6894811 0.6178154 0.2580447 0.7427765 0.6178162 0.2580455 0.7427757 0.6178161 0.1308472 0.7753595 0.6178157 0.1308466 0.7753598 0.6178158 0 0.786323 0.6178157 0 0.7863228 0.617816 -0.1308467 0.7753596 0.617816 -0.1308466 0.7753595 0.6178162 -0.2580454 0.7427757 0.6178161 -0.2580455 0.7427757 0.6178161 -0.3780488 0.6894798 0.6178163 -0.3780483 0.6894798 0.6178163 -0.4875108 0.6169571 0.6178171 -0.4875095 0.6169574 0.6178173 -0.5833755 0.5272333 0.6178161 -0.5833774 0.5272324 0.6178162 -0.6629773 0.4228053 0.617816 -0.6629776 0.4228051 0.6175001 -0.6592056 0.4291173 0.6008809 -0.7262315 0.333961 -0.7491624 0.5584821 0.3561648 -0.6178161 0.6629773 0.4228053 -0.6178146 0.6629797 0.4228038 -0.4787915 0.7402152 0.4720594 -0.4787946 0.7402117 0.4720618 -0.3266458 0.7968872 0.508206 -0.3266433 0.7968895 0.5082041 -0.1655741 0.8314999 0.5302764 -0.1655778 0.8314974 0.5302792 0 0.8431355 0.5377013 0 0.8431355 0.5377013 0.1655741 0.8314979 0.5302795 0.1655778 0.8314995 0.5302761 0.3266457 0.7968888 0.5082036 0.3266432 0.7968879 0.5082064 0.4787917 0.740213 0.4720627 0.4787947 0.7402138 0.4720585 0.617816 0.6629787 0.4228032 0.6178144 0.6629784 0.422806 0.7023626 0.6001608 0.3827449 0.7237626 0.6802276 0.1160094 0.7398476 0.323457 0.5899162 0.7398476 0.323457 0.5899162 0.7398476 0.2207828 0.635516 0.7398472 0.220782 0.6355168 0.7398472 0.1119523 0.663395 0.7398472 0.1119524 0.6633949 0.739847 0 0.6727751 0.739847 0 0.6727752 0.7398468 -0.1119534 0.6633953 0.7398473 -0.1119519 0.6633948 0.7398475 -0.2207828 0.6355161 0.7398475 -0.2207826 0.6355161 0.7398476 -0.3234571 0.5899162 0.7398476 -0.323457 0.5899161 0.7398477 -0.417111 0.5278673 0.7398469 -0.4171129 0.5278669 0.7398468 -0.4991358 0.4510989 0.7398474 -0.4991346 0.4510994 0.7410153 -0.5354992 0.4051383 0.7117002 -0.5998845 0.3655426 -0.8222271 0.4222626 0.381624 -0.7398458 0.4991365 0.4510995 -0.7398473 0.4991333 0.4511008 -0.6178174 0.583374 0.5272349 -0.617816 0.5833761 0.5272339 -0.4787933 0.6513383 0.5886557 -0.4787919 0.65134 0.5886548 -0.3266447 0.70121 0.6337252 -0.3266456 0.7012092 0.6337257 -0.1655763 0.7316645 0.66125 -0.1655746 0.7316659 0.6612489 0 0.7419062 0.6705037 0 0.7419062 0.6705037 0.1655762 0.7316657 0.6612487 0.1655745 0.7316647 0.6612502 0.3266448 0.7012094 0.633726 0.3266456 0.7012099 0.6337251 0.4787933 0.6513395 0.5886543 0.4787918 0.6513388 0.5886561 0.6178173 0.5833754 0.5272333 0.6178159 0.5833747 0.5272356 0.739846 0.4991343 0.4511017 0.7398474 0.4991353 0.4510985 0.8264122 0.4177416 0.3775381 0.8215125 0.3639541 0.4389244 0.8414222 0.2598044 0.4738252 0.841422 0.2598037 0.4738261 0.841422 0.1773347 0.5104523 0.841422 0.1773347 0.5104522 0.841422 0.0899201 0.5328446 0.8414223 0.08992093 0.532844 0.8414224 0 0.5403779 0.8414224 0 0.5403779 0.8414227 -0.08991986 0.5328437 0.8414222 -0.08992183 0.5328442 0.841422 -0.1773346 0.5104522 0.841422 -0.1773347 0.5104523 0.8414219 -0.2598046 0.4738256 0.8414222 -0.2598034 0.4738258 0.8414223 -0.3350269 0.4239878 0.8414221 -0.3350273 0.4239877 0.8422523 -0.3624251 0.3990728 0.8284873 -0.4034726 0.3883537 -0.9522074 0.189376 0.2396618 -0.8414222 0.3350269 0.4239878 -0.8414221 0.3350273 0.4239877 -0.7398476 0.417111 0.5278673 -0.7398462 0.4171146 0.5278666 -0.6178163 0.4875123 0.6169561 -0.6178172 0.4875108 0.6169564 -0.4787907 0.5443063 0.6888325 -0.4787932 0.5443028 0.6888334 -0.3266457 0.5859778 0.7415744 -0.3266447 0.5859789 0.7415739 -0.1655779 0.6114291 0.773782 -0.1655765 0.6114302 0.7737812 0 0.619988 0.7846113 0 0.619988 0.7846113 0.1655778 0.6114301 0.7737811 0.1655765 0.6114292 0.7737821 0.3266457 0.5859787 0.7415737 0.3266447 0.585978 0.7415747 0.4787908 0.5443037 0.6888346 0.4787933 0.5443054 0.6888314 0.6178163 0.4875112 0.6169569 0.6178173 0.4875119 0.6169555 0.7398474 0.4171137 0.5278653 0.739846 0.4171121 0.5278686 0.8414222 0.3350272 0.4239875 0.841422 0.335027 0.4239879 0.8857553 0.2877681 0.3641803 0.8899049 0.3016409 0.3421725 -0.5735752 0.819153 -6.08724e-7 -0.5735739 0.8191539 0 -0.7071068 0.7071068 0 -0.7071068 0.7071068 0 -0.819152 0.5735765 0 -0.819152 0.5735765 0 -0.9063088 0.4226163 0 -0.9063088 0.4226163 0 -0.9659257 0.2588197 0 -0.9659257 0.2588197 0 -0.9961948 0.08715564 0 -0.9961948 0.08715564 0 -0.9961944 -0.08715862 0 -0.9961948 -0.08715564 -7.21502e-7 -0.9961948 -0.08715492 0 -0.9659257 -0.2588197 0 -0.9659257 -0.2588197 0 -0.9063086 -0.4226166 0 -0.9063086 -0.4226166 0 -0.8191522 -0.5735762 0 -0.8191522 -0.5735762 0 -0.7070868 -0.7071268 0 -0.7071066 -0.707107 -6.52205e-7 -0.707107 -0.7071067 0 -0.5735756 -0.8191526 0 -0.5735756 -0.8191526 0 -0.4226189 -0.9063075 0 -0.4226189 -0.9063075 0 -0.2588187 -0.9659259 0 -0.2588187 -0.9659259 0 -0.08715564 -0.9961948 0 -0.08715564 -0.9961948 0 0.08715564 -0.9961948 0 0.08715564 -0.9961948 0 0.2588187 -0.9659259 0 0.2588187 -0.9659259 0 0.4226199 -0.906307 0 0.4226199 -0.906307 0 0.5735756 -0.8191526 0 0.5735756 -0.8191526 0 0.707107 -0.7071067 0 0.7071052 -0.7071084 -3.23928e-6 0.7070066 -0.707207 0 0.8191522 -0.5735762 0 0.8191522 -0.5735762 0 0.9063075 -0.4226189 0 0.9063075 -0.4226189 0 0.9659264 -0.258817 0 0.9659264 -0.258817 0 0.9961948 -0.08715492 0 0.9961948 -0.08715564 -7.21502e-7 0.9961944 -0.08715862 0 0.9961948 0.08715564 0 0.9961948 0.08715564 0 0.9659264 0.258817 0 0.9659264 0.258817 0 0.9063076 0.4226186 0 0.9063076 0.4226186 0 0.819152 0.5735765 0 0.819152 0.5735765 0 0.7071053 0.7071081 0 0.7071053 0.7071081 0 0.5735784 0.8191507 0 0.5735752 0.819153 1.52181e-6 0.5735738 0.8191539 0 0.422619 0.9063075 0 0.4226205 0.9063067 -1.8751e-6 0.4226279 0.9063032 0 0.258818 0.9659261 0 0.258818 0.9659261 0 0.08715564 0.9961948 0 0.08715564 0.9961948 0 -0.08715564 0.9961948 0 -0.08715564 0.9961948 0 -0.258818 0.9659261 0 -0.258818 0.9659261 0 -0.4226218 0.9063063 0 -0.4226195 0.9063073 -5.76115e-7 -0.422619 0.9063075 0 -0.5735757 0.8191526 0 -0.9954566 0.09521561 0 -0.9954566 0.09521561 0 -0.998273 -0.05874735 0 -0.998273 -0.05874735 0 -0.9771103 -0.2127332 0 -0.9771103 -0.2127332 0 -0.9318066 -0.3629553 0 -0.9318066 -0.3629553 0 -0.8607569 -0.5090163 0 -0.8607488 -0.5090299 4.30184e-5 -0.8606817 -0.5091437 0 -0.7650485 -0.6439728 0 -0.7650485 -0.6439728 0 -0.6534405 -0.7569778 0 -0.6534405 -0.7569778 0 -0.532077 -0.846696 0 -0.4050244 -0.9143061 3.18554e-5 -0.4050179 -0.9143088 0 -0.532077 -0.846696 0 -0.4050112 -0.9143118 0 -0.2834771 -0.958979 0 -0.2834771 -0.958979 0 -0.9875348 0.1574012 0 -0.9875348 0.1574012 0 -0.9885168 0.1511113 0 -0.9885167 0.1511115 -4.68901e-6 -0.9885169 0.1511102 8.84545e-5 -0.9885174 0.1511074 0 -0.5874556 0.8092564 0 -0.4457773 0.8951438 0 -0.4457773 0.8951438 0 -0.2934388 0.9559778 0 -0.2934388 0.9559778 0 -0.7060059 0.708206 1.54776e-5 -0.7060085 0.7082034 0 -0.5874556 0.8092564 0 -0.7060241 0.7081879 0 -0.8018727 0.5974948 0 -0.8018727 0.5974948 0 -0.8825735 0.4701744 0 -0.8825735 0.4701744 0 -0.9451334 0.3266847 0 -0.9451334 0.3266847 0 -0.9748538 0.2228454 0 -0.9748538 0.2228454 0 -0.2271642 0.9738565 0 -0.2246806 0.9744182 -0.005273818 -0.2245592 0.9744603 -5.86566e-4 -0.2246835 0.9744316 -5.86352e-4 -0.2245578 0.9744564 0.002901971 -0.2196053 0.9755889 0 0.9681351 0.2504283 0 0.9681351 0.2504283 0 0.9183129 0.3958554 0 0.9183129 0.3958554 0 0.8459551 0.5332541 0 0.8459551 0.5332541 0 0.752176 0.6589623 0 0.752176 0.6589623 0 0.6336641 0.7736083 0 0.6336641 0.7736083 0 0.4945004 0.8691774 0 0.4945004 0.8691774 0 0.3497709 0.9368352 0 0.3497709 0.9368352 0 0.2044878 0.9788691 0 0.2044878 0.9788691 0 0.06163972 0.9980985 0 0.06163972 0.9980985 0 -0.09140473 0.9958137 0 -0.09140473 0.9958137 0 -0.1989246 0.9800148 0 -0.1989246 0.9800148 0 0.9849044 0.1730992 0 0.9856365 0.1688801 0 0.9856365 0.1688801 0 0.9855918 0.1691411 0 0.9855906 0.1691485 1.26794e-4 0.9855903 0.1691496 0 0.9849044 0.1730992 0 0.9926199 -0.1212673 0 0.9615152 -0.2747519 0 0.9615152 -0.2747519 0 0.904935 -0.4255498 0 0.904935 -0.4255498 0 0.8288683 -0.5594437 0 0.8288683 -0.5594437 0 0.7376758 -0.6751551 0 0.7376758 -0.6751551 0 0.62467 -0.7808888 0 0.62467 -0.7808888 0 0.4903418 -0.8715302 0 0.4903418 -0.8715302 0 0.3436366 -0.9391028 0 0.3436366 -0.9391028 0 0.1920534 -0.9813845 0 0.1920534 -0.9813845 0 0.03668868 -0.9993268 0 0.03668868 -0.9993268 0 -0.118409 -0.9929649 0 -0.118409 -0.9929649 0 0.9998877 0.01499247 1.00248e-4 0.9998873 0.01500862 0 0.9926199 -0.1212673 0 0.9998866 0.01505386 0 0.9917809 0.1279481 0 0.9917809 0.1279481 0 -0.1874505 -0.9822741 0 -0.1882148 -0.9821112 -0.005719184 -0.1880823 -0.9821465 -0.003647267 -0.1882183 -0.9821162 0.004657089 -0.1880843 -0.9821418 0.004657089 -0.188209 -0.9820728 0.01050573 -0.1896287 -0.9818558 0 -0.3046896 0.9524517 0 -0.3046896 0.9524517 0 -0.4363045 0.8997991 0 -0.4363045 0.8997991 0 -0.5659277 0.8244548 0 -0.5659277 0.8244548 0 -0.6862885 0.7273294 0 -0.6862885 0.7273294 0 -0.7947743 0.6069051 0 -0.7947743 0.6069051 0 -0.8860326 0.4636229 0 -0.8860326 0.4636229 0 -0.9507127 0.3100733 0 -0.9507127 0.3100733 0 -0.9875885 0.1570637 0 -0.9875885 0.1570637 0 -0.999969 0.007871747 0 -0.999969 0.007871747 0 -0.993377 -0.1149007 0 -0.993377 -0.1149007 0 -0.2360761 0.9717343 -5.87644e-4 -0.2360837 0.9717327 0 -0.2360771 0.9717342 -5.86967e-4 -0.2360834 0.9717324 -9.05671e-4 -0.2397758 0.9708282 0 0.9964448 0.08424681 0 0.9964448 0.08424681 0 0.975009 0.2221651 0 0.9750105 0.2221589 -2.50466e-5 0.9750118 0.2221528 0 0.932442 0.3613198 0 0.932442 0.3613198 0 0.8670589 0.4982057 0 0.8670589 0.4982057 0 0.7795474 0.6263434 0 0.7795474 0.6263434 0 0.6736059 0.7390908 0 0.6736059 0.7390908 0 0.5500882 0.8351066 0 0.5500882 0.8351066 0 0.4189143 0.9080258 0 0.4189143 0.9080258 0 0.273899 0.9617584 0 0.273899 0.9617584 0 0.1152057 0.9933417 0 0.1152057 0.9933417 0 -0.03862327 0.9992538 0 -0.03862327 0.9992538 0 -0.1742721 0.9846976 0 -0.1742721 0.9846976 0 0.9862385 -0.1653286 0 0.9957318 -0.09229391 0 0.9878197 -0.1517666 0.03433716 0.9647612 -0.1458021 -0.2190381 0.9644014 -0.1481677 -0.2190344 0.9074146 -0.1371355 -0.3972314 0.9074198 -0.1371444 -0.3972163 -0.1875265 -0.9822596 0 -0.1875265 -0.9822596 0 -0.03666013 -0.9993278 0 -0.03666013 -0.9993278 0 0.1169986 -0.9931321 0 0.1169986 -0.9931321 0 0.2699615 -0.9628711 0 0.2699615 -0.9628711 0 0.417544 -0.9086567 0 0.417544 -0.9086567 0 0.5529317 -0.8332267 0 0.5529317 -0.8332267 0 0.6763907 -0.7365432 0 0.6763907 -0.7365432 0 0.7833806 -0.6215422 0 0.7833806 -0.6215422 0 0.8672758 -0.4978278 0 0.8672758 -0.4978278 0 0.9341001 -0.3570113 0 0.9341001 -0.3570113 0 0.9749595 -0.2223826 0 0.9749595 -0.2223826 0 -0.2156957 -0.9764606 0 -0.1820878 -0.9825828 0.03708475 -0.1813471 -0.9833169 0.01418542 -0.1821951 -0.9831601 0.01418584 -0.1813326 -0.983248 -0.01849389 -0.1645936 -0.9863615 0 -0.9734038 -0.2290961 0 -0.9734038 -0.2290961 0 -0.9440369 -0.3298401 0 -0.9440369 -0.3298401 0 -0.8857602 -0.4641433 0 -0.8857602 -0.4641433 0 -0.801622 -0.5978312 0 -0.801622 -0.5978312 0 -0.6981133 -0.7159873 0 -0.6981133 -0.7159873 0 -0.5726075 -0.8198297 0 -0.5726075 -0.8198297 0 -0.4331772 -0.9013088 0 -0.4331772 -0.9013088 0 -0.2880484 -0.9576159 0 -0.2880484 -0.9576159 0 -0.9849471 -0.1728565 0 -0.9845413 -0.1746566 0.01317375 -0.9846027 -0.1748045 -9.33577e-4 -0.9846263 -0.1746721 -9.33265e-4 -0.9845828 -0.1747986 -0.006480932 -0.9783184 -0.2071065 0 -0.9957784 0.09178906 0 -0.9957784 0.09178906 0 -0.998063 -0.0622124 0 -0.998063 -0.0622124 0 -0.9763762 -0.2160773 0 -0.9763762 -0.2160773 0 -0.9305624 -0.3661331 0 -0.9305624 -0.3661331 0 -0.8590248 -0.5119339 0 -0.8590248 -0.5119339 0 -0.7629907 -0.6464096 0 -0.7629907 -0.6464096 0 -0.6510511 -0.7590339 0 -0.6510511 -0.7590339 0 -0.529354 -0.848401 0 -0.529354 -0.848401 0 -0.4021186 -0.9155876 0 -0.4021186 -0.9155876 0 -0.2805877 -0.9598284 0 -0.2805877 -0.9598284 0 -0.9826521 0.1854588 0 -0.9826521 0.1854588 0 -0.9840159 0.1780804 0 -0.9840159 0.1780804 0 -0.324262 0.9459674 0 -0.324262 0.9459674 0 -0.4714419 0.8818971 0 -0.4714419 0.8818971 0 -0.6051381 0.7961205 0 -0.6051381 0.7961205 0 -0.7176655 0.6963881 0 -0.7176655 0.6963881 0 -0.8168345 0.5768721 0 -0.8168345 0.5768721 0 -0.8987097 0.4385442 0 -0.8987097 0.4385442 0 -0.957426 0.288679 0 -0.957426 0.288679 0 -0.9721412 0.2343958 0 -0.9721412 0.2343958 0 -0.2351618 0.9719563 0 -0.2399641 0.9707293 0.01008397 -0.240211 0.97072 0.001174747 -0.2402117 0.9707198 0.001174747 -0.2399791 0.9707778 -6.97469e-4 -0.2402071 0.9707072 -0.005301773 -0.2498227 0.9682916 0 0.9670024 0.254767 0 0.9670024 0.254767 0 0.9170262 0.3988268 0 0.9170262 0.3988268 0 0.8447387 0.535179 0 0.8447387 0.535179 0 0.7510344 0.6602631 0 0.7510344 0.6602631 0 0.6381654 0.7698994 0 0.6381654 0.7698994 0 0.505692 0.8627141 0 0.505692 0.8627141 0 0.359377 0.9331924 0 0.359377 0.9331924 0 0.2108255 0.9775237 0 0.2108255 0.9775237 0 0.06465798 0.9979075 0 0.06465798 0.9979075 0 -0.09018808 0.9959248 0 -0.09018808 0.9959248 0 -0.2325776 0.9725779 0 -0.2325776 0.9725779 0 0.9853488 0.1705517 0 0.9853488 0.1705517 0 0.9847168 0.1741626 0 0.9847168 0.1741626 0 0.9840386 0.1779551 0 0.9840386 0.1779551 0 -0.115673 -0.9932873 0 -0.115673 -0.9932873 0 0.03947907 -0.9992204 0 0.03947907 -0.9992204 0 0.1948105 -0.9808409 0 0.1948105 -0.9808409 0 0.3462457 -0.9381439 0 0.3462457 -0.9381439 0 0.4928176 -0.8701325 0 0.4928176 -0.8701325 0 0.6268842 -0.7791124 0 0.6268842 -0.7791124 0 0.7394539 -0.6732072 0 0.7394539 -0.6732072 0 0.8302199 -0.557436 0 0.8302199 -0.557436 0 0.9059056 -0.4234797 0 0.9059056 -0.4234797 0 0.9620884 -0.2727376 0 0.9620913 -0.2727276 6.68847e-5 0.9623652 -0.2717596 0 0.9928132 -0.1196747 0 0.9928132 -0.1196747 0 0.9999065 0.01367968 0 0.9999065 0.01367968 0 0.9939061 0.1102299 0 0.9939061 0.1102299 0 -0.1847114 -0.9827928 0 -0.1854844 -0.9826303 -0.00577414 -0.1854929 -0.9826281 -0.005881845 -0.1853561 -0.9826708 0.001062333 -0.1854933 -0.9826341 0.004748463 -0.1853557 -0.9826599 0.004748404 -0.1854825 -0.9825894 0.0106939 -0.1869301 -0.9823732 0 0.5623098 0.8269267 0 0.5623098 0.8269267 0 0.4302065 0.9027306 0 0.4302065 0.9027306 0 0.2788234 0.9603425 0 0.2788234 0.9603425 0 0.1229931 0.9924076 0 0.1229931 0.9924076 0 0.02271473 0.999742 0 0.02271473 0.999742 0 0.8350709 0.5501424 0 0.8350709 0.5501424 0 0.7359471 0.6770391 0 0.7359471 0.6770391 0 0.6221262 0.7829171 0 0.6221262 0.7829171 0 0.5438691 0.83917 0 0.5438691 0.83917 0 0 1 0 0 1 0 -0.9244094 0.3814017 0 -0.9132737 0.3870003 -0.1271296 -0.9055001 0.4191967 0.06590718 -0.9187551 0.3893084 0.06578809 -0.8900476 0.4120227 0.1950708 -0.9011911 0.4334219 0 -0.9428285 0.3163786 -0.1047803 -0.9506196 0.3103585 0 -0.9328701 0.3602131 0 -0.9425675 0.3075717 -0.1302542 -0.9327452 0.3601474 0.01674389 -0.9479337 0.3180338 0.01661431 -0.9229859 0.364993 0.1219713 -0.9875839 0.1570925 0 -0.9875839 0.1570925 0 -0.9619753 0.2731364 0 -0.9619753 0.2731364 0 -0.7814828 0.6239268 0 -0.7814828 0.6239268 0 0.6649454 0.7468921 0 0.6841579 0.7292638 -0.01010376 0.6843431 0.7291358 -0.00594449 0.6841903 0.729286 -0.005070209 0.6843476 0.7291384 -0.005070209 0.68419 0.7293039 0 0.9480103 -0.3182395 0 0.9480103 -0.3182395 0 0.9870301 -0.1605351 0 0.9870301 -0.1605351 0 1 0 0 1 0 0 0.986833 0.1617423 0 0.986833 0.1617423 0 0.9467476 0.3219766 0 0.9467476 0.3219766 0 0.9073591 0.4203565 0 0.9073591 0.4203565 0 0.8908984 -0.4542028 0 0.890863 -0.4542721 -1.61882e-4 0.9044887 -0.4143924 0.1008921 0.9096732 -0.4136766 0.03696411 0.9085034 -0.416239 0.03696846 0.9099667 -0.4138064 -0.02692246 0.9348436 -0.3550598 0 0.8741233 -0.4857041 0 0.8699281 -0.492805 -0.01919519 0.8609328 -0.4783766 -0.1730619 0.856963 -0.4854602 -0.1730399 0.8352273 -0.4641025 -0.2949646 0.89175 -0.4525285 0 0.9628544 0.1799017 0.201362 0.989794 0.1425058 0 0.9790065 0.2038289 0 0.9766577 0.1824746 0.1133261 0.9694408 0.201791 0.139517 0.9694253 0.2018656 0.1395167 0.9994283 0.0338121 0 0.996554 0.08294486 0 0.9968895 0.02512818 0.07469838 0.9965637 0.08280754 0.001902997 0.9994294 0.03372216 0.001991152 0.9931291 0.09109598 -0.07345885 0.9991346 -0.04159492 0 0.08208185 -0.9966256 0 0.08208185 -0.9966256 0 0.2452144 -0.9694688 0 0.2452144 -0.9694688 0 0.4010174 -0.9160705 0 0.4010174 -0.9160705 0 0.5453509 -0.8382079 0 0.5453509 -0.8382079 0 0.6754316 -0.7374227 0 0.6754316 -0.7374227 0 0.7876293 -0.6161494 0 0.7876293 -0.6161494 0 0.878512 -0.4777202 0 0.878512 -0.4777202 0 0.9454609 -0.3257354 0 0.9454609 -0.3257354 0 0.9862934 -0.1650008 0 0.9862936 -0.1649999 1.03625e-5 0.9862937 -0.1649991 0 0.9991346 -0.04159492 0 -0.9966397 -0.08191138 7.39636e-5 -0.9966401 -0.08190631 0 -0.9966391 -0.0819174 0 -0.9688456 -0.2476658 0 -0.9688456 -0.2476658 0 -0.9131124 -0.4077079 0 -0.9131124 -0.4077079 0 -0.8316178 -0.5553484 0 -0.8316178 -0.5553484 0 -0.7276065 -0.6859949 0 -0.7276065 -0.6859949 0 -0.6036069 -0.797282 0 -0.6036069 -0.797282 0 -0.4622438 -0.886753 0 -0.4622438 -0.886753 0 -0.3088077 -0.9511246 0 -0.3088077 -0.9511246 0 -0.148278 -0.9889457 0 -0.148278 -0.9889457 0 -0.03364646 -0.9994337 0 -0.03364646 -0.9994337 0 -0.9992476 0.03878372 0 -0.08187818 0.9966424 0 -0.08187818 0.9966424 0 -0.2478656 0.9687944 0 -0.2478656 0.9687944 0 -0.4078155 0.9130644 0 -0.4078155 0.9130644 0 -0.5547042 0.8320477 0 -0.5547042 0.8320477 0 -0.6848382 0.7286952 0 -0.6848382 0.7286952 0 -0.7955353 0.6059073 0 -0.7955353 0.6059073 0 -0.884307 0.4669058 0 -0.884307 0.4669058 0 -0.948761 0.3159946 0 -0.948761 0.3159946 0 -0.9874922 0.1576684 0 -0.987492 0.1576687 -5.21647e-6 -0.9874919 0.1576698 0 -0.9992476 0.03878372 0 0 1 0 0 1 0 -0.7069073 0.7073063 0 -0.7069073 0.7073063 0 -0.5796677 0.814853 0 -0.5796677 0.814853 0 -0.4439929 0.8960303 0 -0.4439929 0.8960303 0 -0.3001552 0.9538904 0 -0.3001552 0.9538904 0 -0.1712823 0.9852219 0 -0.1712823 0.9852219 0 -0.03024864 0.9995424 0 -0.03024864 0.9995424 0 -0.001266479 0.9999993 0 -0.001266479 0.9999993 0 0 1 0 0 1 0 1 0 0 1 0 0 0 -1 0 0 -1 0 -0.009101867 -0.9999586 0 -0.009101867 -0.9999586 0 -0.1124537 -0.9936569 0 -0.1124537 -0.9936569 0 -0.2602046 -0.9655535 0 -0.2602046 -0.9655535 0 -0.3935374 -0.9193086 0 -0.3935374 -0.9193086 0 -0.5280309 -0.8492251 0 -0.5280309 -0.8492251 0 -0.6554062 -0.7552766 0 -0.6554062 -0.7552766 0 -0.7516092 -0.6596087 0 -0.7516092 -0.6596087 0 0 -1 0 0 -1 0 0.7424618 -0.6698884 0 0.7424618 -0.6698884 0 0.6231303 -0.782118 0 0.6231303 -0.782118 0 0.493509 -0.8697408 0 0.493509 -0.8697408 0 0.352406 -0.9358472 0 0.352406 -0.9358472 0 0.2033898 -0.9790979 0 0.2033898 -0.9790979 0 0.04840546 -0.9988278 0 0.04840546 -0.9988278 0 0.003142952 -0.9999951 0 0.003142952 -0.9999951 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0.00965166 0.9999535 0 0.00965166 0.9999535 0 0.1164032 0.9932021 0 0.1164032 0.9932021 0 0.2559334 0.9666944 0 0.2559334 0.9666944 0 0.3885141 0.9214428 0 0.3885141 0.9214428 0 0.5221073 0.8528799 0 0.5221073 0.8528799 0 0.6496214 0.7602578 0 0.6496214 0.7602578 0 0.752009 0.6591528 0 0.752009 0.6591528 0 0 1 0 0 1 0 0.7344681 0.6786432 0 0.7344681 0.6786432 0 0.8294424 0.5585924 0 0.8294424 0.5585924 0 0.9054547 0.4244428 0 0.9054547 0.4244428 0 0.9619086 0.2733712 0 0.9619086 0.2733712 0 0.9927825 0.119928 0 0.9927825 0.119928 0 0.9996721 0.02560722 0 0.9996721 0.02560722 0 1 0 0 1 0 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 0 1 0 0 1 0 1 0 0 1 0 0 0.9981873 -0.06018376 0 0.9981873 -0.06018376 0 0.9778714 -0.2092071 0 0.9778714 -0.2092071 0 0.9360952 -0.3517467 0 0.9360952 -0.3517467 0 0.8726347 -0.4883736 0 0.8726347 -0.4883736 0 0.786796 -0.6172131 0 0.786796 -0.6172131 0 1 0 0 1 0 0 0 1 0 0 1 0 -0.9901291 0.1401582 0 -0.9901291 0.1401582 0 -0.955867 0.2937996 0 -0.955867 0.2937996 0 -0.8947771 0.4465133 0 -0.8947771 0.4465133 0 -0.8084403 0.5885782 0 -0.8084403 0.5885782 0 -0.7082083 0.7060035 0 -0.7082083 0.7060035 0 -0.5985203 0.8011078 0 -0.5985203 0.8011078 0 -0.4689928 0.883202 0 -0.4689928 0.883202 0 -0.3224734 0.9465786 0 -0.3224734 0.9465786 0 -0.2009416 0.9796032 0 -0.2009416 0.9796032 0 -0.05808001 0.9983119 0 -0.05808001 0.9983119 0 -0.004249513 0.9999909 0 -0.004249513 0.9999909 0 0 1 0 0 1 0 1 0 0 1 0 0 0 -1 0 0 -1 0 -0.008955597 -0.9999598 0 -0.008955597 -0.9999598 0 -0.110737 -0.9938498 0 -0.110737 -0.9938498 0 -0.2574545 -0.9662905 0 -0.2574545 -0.9662905 0 -0.3843165 -0.9232014 0 -0.3843165 -0.9232014 0 -0.5149111 -0.8572436 0 -0.5149111 -0.8572436 0 -0.6412128 -0.7673633 0 -0.6412128 -0.7673633 0 -0.754296 -0.6565346 0 -0.754296 -0.6565346 0 -0.8378935 -0.5458339 0 -0.8378935 -0.5458339 0 0 -1 0 0 -1 0 1 0 0 1 0 0 0.9966441 0.0818572 0 0.9966441 0.0818572 0 0.9688643 0.2475922 0 0.9688934 0.2474786 -9.91426e-5 0.9688944 0.2474745 0 0.9135701 0.4066814 0 0.9135701 0.4066814 0 0.8332726 0.5528623 0 0.8332726 0.5528623 0 0.7305757 0.6828317 0 0.7305757 0.6828317 0 0.6082585 0.793739 0 0.6082585 0.793739 0 0.4695602 0.8829005 0 0.4695602 0.8829005 0 0.3183051 0.9479884 0 0.3183051 0.9479884 0 0.1588846 0.9872972 0 0.1588846 0.9872972 0 0.03895717 0.9992409 0 0.03895717 0.9992409 0 0.9991566 -0.04106235 0 0.08204537 -0.9966287 0 0.08204537 -0.9966287 0 0.2453333 -0.9694388 0 0.2453333 -0.9694388 0 0.4012873 -0.9159523 0 0.4012873 -0.9159523 0 0.545637 -0.8380217 0 0.545637 -0.8380217 0 0.6756634 -0.7372103 0 0.6756634 -0.7372103 0 0.7878047 -0.6159251 0 0.7878047 -0.6159251 0 0.8786558 -0.4774556 0 0.8786558 -0.4774556 0 0.9456093 -0.3253047 0 0.9456093 -0.3253047 0 0.9864278 -0.1641955 0 0.9864272 -0.1641992 -4.81587e-5 0.9864265 -0.1642036 0 0.9991566 -0.04106235 0 -0.9966402 -0.08190447 4.39421e-5 -0.9966404 -0.08190149 0 -0.9966399 -0.08190816 0 -0.9688273 -0.2477371 0 -0.9688273 -0.2477371 0 -0.9130623 -0.4078201 0 -0.9130623 -0.4078201 0 -0.8315746 -0.555413 0 -0.8315746 -0.555413 0 -0.7276125 -0.6859884 0 -0.7276125 -0.6859884 0 -0.6037461 -0.7971767 0 -0.6037461 -0.7971767 0 -0.4626762 -0.8865273 0 -0.4626762 -0.8865273 0 -0.3095764 -0.9508746 0 -0.3095764 -0.9508746 0 -0.1493598 -0.9887829 0 -0.1493598 -0.9887829 0 -0.03425472 -0.9994131 0 -0.03425472 -0.9994131 0 -0.999228 0.0392884 0 -0.08189004 0.9966413 0 -0.08189004 0.9966413 0 -0.2480395 0.9687499 0 -0.2480395 0.9687499 0 -0.4082574 0.9128668 0 -0.4082574 0.9128668 0 -0.5553233 0.8316346 0 -0.5553233 0.8316346 0 -0.6854673 0.7281034 0 -0.6854673 0.7281034 0 -0.7960214 0.6052685 0 -0.7960214 0.6052685 0 -0.8845683 0.4664108 0 -0.8845683 0.4664108 0 -0.9487859 0.3159197 0 -0.9487859 0.3159197 0 -0.9873998 0.1582454 0 -0.9874002 0.1582424 5.88088e-5 -0.9874024 0.1582293 0 -0.999228 0.0392884 0 0 1 0 0 1 0 0.8209201 0.5710431 0 0.8209201 0.5710431 0 0.7191516 0.6948532 0 0.7191516 0.6948532 0 0.5922546 0.8057509 0 0.5922546 0.8057509 0 0.5152273 0.8570536 0 0.5152273 0.8570536 0 0.4352003 0.9003338 0 0.4352003 0.9003338 0 0.2762573 0.9610837 0 0.2762573 0.9610837 0 0.1148571 0.993382 0 0.1148571 0.993382 0 0.01844191 0.99983 0 0.01844191 0.99983 0 0.9981133 0.06139922 0 0.9981133 0.06139922 0 0.9771094 0.2127374 0 0.9771094 0.2127374 0 0.932609 0.3608883 0 0.932609 0.3608883 0 0.8797842 0.4753732 0 0.8797842 0.4753732 0 0.9994669 -0.03265035 0 0.9993 -0.03062915 0.02148079 0.9994722 -0.01833939 -0.02681267 0.9991707 -0.03064763 -0.0268079 0.9974797 -0.01833087 -0.06854188 0.9999288 -0.0119313 0 0.9989012 -0.0468676 0 0.9988449 -0.0480501 0 0.9988567 -0.04685366 0.009487211 0.9989108 -0.04620343 0.006527423 0.9989122 -0.04617261 0.006527423 0 -1 0 0 -1 0 -0.009200692 -0.9999577 0 -0.009200692 -0.9999577 0 -0.1116591 -0.9937466 0 -0.1116591 -0.9937466 0 -0.2008441 -0.9796233 0 -0.2008441 -0.9796233 0 -0.2611652 -0.9652942 0 -0.2611652 -0.9652942 0 -0.3911765 -0.9203157 0 -0.3911765 -0.9203157 0 -0.5280231 -0.84923 0 -0.5280231 -0.84923 0 -0.6535891 -0.7568495 0 -0.6535891 -0.7568495 0 -0.7636701 -0.6456066 0 -0.7636701 -0.6456066 0 -0.8596706 -0.5108489 0 -0.8596706 -0.5108489 0 -0.9315292 -0.3636667 0 -0.9315292 -0.3636667 0 0 -1 0 0 -1 0 0.7856048 -0.6187287 0 0.7856048 -0.6187287 0 0.6745647 -0.7382159 0 0.6745647 -0.7382159 0 0.5503658 -0.8349237 0 0.5503658 -0.8349237 0 0.4128733 -0.9107885 0 0.4128733 -0.9107885 0 0.2621327 -0.9650318 0 0.2621327 -0.9650318 0 0.1765173 -0.9842975 0 0.1765173 -0.9842975 0 0.05474913 -0.9985001 0 0.05474913 -0.9985001 0 0.003708541 -0.9999932 0 0.003708541 -0.9999932 0 0 -1 0 0 -1 0 -0.9990016 -0.04467302 0 -0.9996662 -0.02584052 0 -0.9852954 -0.04404968 0.1650838 -0.9901683 -0.05614525 0.1281188 -0.9901683 -0.05614471 0.1281188 -0.9998226 -0.01883715 0 -0.9999975 -0.00226283 0 -0.9770639 -0.01842045 0.2121484 -0.986585 -0.02787595 0.1608514 -0.986585 -0.02787435 0.1608514 -0.9742913 0.2252919 0 -0.9742913 0.2252919 0 -0.9959472 0.08993995 0 -0.9959472 0.08993995 0 -0.9999132 0.01317596 0 -0.9999132 0.01317596 0 -0.06881737 0.9976293 0 -0.06881737 0.9976293 0 -0.217177 0.9761323 0 -0.217177 0.9761323 0 -0.3732474 0.9277318 0 -0.3732474 0.9277318 0 -0.5211144 0.8534869 0 -0.5211144 0.8534869 0 -0.652461 0.7578224 0 -0.652461 0.7578224 0 -0.7614094 0.6482715 0 -0.7614094 0.6482715 0 -0.8458762 0.5333793 0 -0.8458762 0.5333793 0 -0.916243 0.4006229 0 -0.916243 0.4006229 0 -0.949133 0.3148756 0 -0.949133 0.3148756 0 0.9424196 0.3344326 0 0.9424196 0.3344326 0 0.8731753 0.4874063 0 0.8731753 0.4874063 0 0.7828052 0.6222669 0 0.7828052 0.6222669 0 0.6723182 0.7402622 0 0.6723182 0.7402622 0 0.5782044 0.8158919 0 0.5782044 0.8158919 0 0.4744808 0.8802659 0 0.4744808 0.8802659 0 0.3245409 0.9458716 0 0.3245409 0.9458716 0 0.1648606 0.9863169 0 0.1648606 0.9863169 0 0.04152691 0.9991374 0 0.04152691 0.9991374 0 0 1 0 0 1 0 -0.07630658 0.9970844 0 -0.07630658 0.9970844 0 -0.2365451 0.9716205 0 -0.2365451 0.9716205 0 -0.3951353 0.9186229 0 -0.3951353 0.9186229 0 -0.5395256 0.8419692 0 -0.5395256 0.8419692 0 -0.6662101 0.7457641 0 -0.6662101 0.7457641 0 -0.7753591 0.6315208 0 -0.7753591 0.6315208 0 -0.8662391 0.4996299 0 -0.8662391 0.4996299 0 -0.9356036 0.3530521 0 -0.9356036 0.3530521 0 -0.9736813 0.2279138 0 -0.9736813 0.2279138 0 0 1 0 0 1 0 0.996644 0.08185738 0 0.996644 0.08185738 0 0.9688675 0.2475795 0 0.9688907 0.247489 -7.87258e-5 0.9688915 0.2474858 0 0.9135578 0.4067087 0 0.9135578 0.4067087 0 0.8332517 0.5528938 0 0.8332517 0.5528938 0 0.7305443 0.6828652 0 0.7305443 0.6828652 0 0.6082291 0.7937616 0 0.6082291 0.7937616 0 0.4695332 0.8829148 0 0.4695332 0.8829148 0 0.3182843 0.9479953 0 0.3182843 0.9479953 0 0.1588807 0.9872978 0 0.1588807 0.9872978 0 0.03895956 0.9992407 0 0.03895956 0.9992407 0 0.9991565 -0.04106664 0 0.08204478 -0.9966287 0 0.08204478 -0.9966287 0 0.245331 -0.9694393 0 0.245331 -0.9694393 0 0.401282 -0.9159546 0 0.401282 -0.9159546 0 0.5456265 -0.8380285 0 0.5456265 -0.8380285 0 0.6756495 -0.737223 0 0.6756495 -0.737223 0 0.787796 -0.6159362 0 0.787796 -0.6159362 0 0.8786424 -0.4774805 0 0.8786424 -0.4774805 0 0.9456051 -0.3253166 0 0.9456051 -0.3253166 0 0.9864266 -0.1642029 0 0.9864261 -0.1642064 -4.60099e-5 0.9864253 -0.1642106 0 0.9991565 -0.04106664 0 -0.9966404 -0.08190155 -4.44513e-6 -0.9966405 -0.08190184 0 -0.9966405 -0.08190119 0 -0.968829 -0.2477305 0 -0.968829 -0.2477305 0 -0.9130636 -0.4078172 0 -0.9130636 -0.4078172 0 -0.8315877 -0.5553935 0 -0.8315877 -0.5553935 0 -0.727625 -0.6859753 0 -0.727625 -0.6859753 0 -0.6037654 -0.7971621 0 -0.6037654 -0.7971621 0 -0.4626864 -0.8865221 0 -0.4626864 -0.8865221 0 -0.3095875 -0.9508709 0 -0.3095875 -0.9508709 0 -0.1493629 -0.9887825 0 -0.1493629 -0.9887825 0 -0.03425717 -0.9994131 0 -0.03425717 -0.9994131 0 -0.9992279 0.03928726 0 -0.08189052 0.9966414 0 -0.08189052 0.9966414 0 -0.2480427 0.9687491 0 -0.2480427 0.9687491 0 -0.4082663 0.9128628 0 -0.4082663 0.9128628 0 -0.5553385 0.8316245 0 -0.5553385 0.8316245 0 -0.6854848 0.728087 0 -0.6854848 0.728087 0 -0.796041 0.6052427 0 -0.796041 0.6052427 0 -0.8845772 0.4663939 0 -0.8845772 0.4663939 0 -0.9487941 0.3158954 0 -0.9487941 0.3158954 0 -0.9874015 0.158235 0 -0.9874024 0.158229 1.16489e-4 -0.9874066 0.1582032 0 -0.9992279 0.03928726 0 0 1 0 0 1 0 0.9208807 -0.3898445 0 0.9208807 -0.3898445 0 0.8446857 -0.5352626 0 0.8446857 -0.5352626 0 0.7461512 -0.6657766 0 0.7461512 -0.6657766 0 0.6368672 -0.7709735 0 0.6368672 -0.7709735 0 0.51059 -0.8598244 0 0.51059 -0.8598244 0 0.3668413 -0.9302834 0 0.3668413 -0.9302834 0 0.218025 -0.9759432 0 0.218025 -0.9759432 0 0.06230491 -0.9980571 0 0.06230491 -0.9980571 0 0.004607737 -0.9999894 0 0.004607737 -0.9999894 0 0 -1 0 0 -1 0 -0.999154 -0.04112523 0 -0.9970766 -0.03618466 0.06729674 -0.9981129 -0.04488527 0.04190534 -0.9981141 -0.04485774 0.04190534 -0.9991548 -0.04110705 0 -0.9997707 -0.02141988 0 -0.9997707 -0.02141988 0 -0.9997709 -0.02140337 0 -0.9997709 -0.02140337 0 -0.975019 0.2221217 0 -0.975019 0.2221217 0 -0.9971285 0.0757277 0 -0.9971285 0.0757277 0 -0.9999665 0.008188068 0 -0.9999665 0.008188068 0 -0.0802161 0.9967775 0 -0.0802161 0.9967775 0 -0.2411602 0.9704853 0 -0.2411602 0.9704853 0 -0.3960413 0.9182327 0 -0.3960413 0.9182327 0 -0.5424479 0.8400894 0 -0.5424479 0.8400894 0 -0.6714126 0.7410838 0 -0.6714126 0.7410838 0 -0.7783992 0.6277695 0 -0.7783992 0.6277695 0 -0.8619412 0.5070082 0 -0.8619412 0.5070082 0 -0.9263649 0.3766273 0 -0.9263649 0.3766273 0 0.7574484 0.652895 0 0.7574484 0.652895 0 0.6424177 0.7663547 0 0.6424177 0.7663547 0 0.5126895 0.8585741 0 0.5126895 0.8585741 0 0.3726168 0.9279854 0 0.3726168 0.9279854 0 0.2146539 0.9766902 0 0.2146539 0.9766902 0 0.06434494 0.9979277 0 0.06434494 0.9979277 0 0.9094341 0.4158481 0 0.9094341 0.4158481 0 0.8418388 0.5397292 0 0.8418388 0.5397292 0 0.7963034 0.6048976 0 0.7963034 0.6048976 0 0 1 0 0 1 0 -0.5849518 0.8110679 0 -0.5833787 0.8121585 -0.00824058 -0.5833091 0.8122502 3.73797e-4 -0.5833998 0.8121851 3.73406e-4 -0.5833042 0.8122482 0.003006935 -0.5732313 0.8193937 0 -0.8069635 0.5906015 0 -0.8069635 0.5906015 0 -0.7046107 0.7095941 0 -0.7046107 0.7095941 0 -0.6260992 0.7797433 0 -0.6260992 0.7797433 0 -0.5950344 0.8037002 0 -0.5950344 0.8037002 0 0 1 0 0 1 0 1 0 0 1 0 0 0.9791814 -0.2029874 0 0.9791814 -0.2029874 0 0.99707 -0.07649493 0 0.99707 -0.07649493 0 0.999947 -0.01030761 0 0.999947 -0.01030761 0 0.5623812 -0.8268782 0 0.5570726 -0.8283407 -0.05934673 0.5573371 -0.8301401 -0.015585 0.5579887 -0.8297023 -0.01558691 0.5572459 -0.8300024 0.02393859 0.554819 -0.8319712 0 1 0 0 1 0 0 0 1 0 0 1 0 -0.8331043 0.553116 0 -0.8331043 0.553116 0 -0.7308431 0.6825454 0 -0.7308431 0.6825454 0 -0.6206638 0.7840769 0 -0.6206638 0.7840769 0 -0.491798 0.8707093 0 -0.491798 0.8707093 0 -0.3455971 0.9383831 0 -0.3455971 0.9383831 0 -0.1999195 0.9798124 0 -0.1999195 0.9798124 0 -0.04850125 0.9988232 0 -0.04850125 0.9988232 0 -0.004244923 0.999991 0 -0.004244923 0.999991 0 0 1 0 0 1 0 1 0 0 1 0 0 0 -1 0 0 -1 0 -0.01098388 -0.9999397 0 -0.01098388 -0.9999397 0 -0.1381026 -0.990418 0 -0.1381026 -0.990418 0 -0.2695094 -0.9629977 0 -0.2695094 -0.9629977 0 -0.4097403 -0.9122022 0 -0.4097403 -0.9122022 0 -0.537123 -0.843504 0 -0.537123 -0.843504 0 -0.6601682 -0.7511178 0 -0.6601682 -0.7511178 0 -0.7698749 -0.6381949 0 -0.7698749 -0.6381949 0 -0.8589754 -0.5120167 0 -0.8589754 -0.5120167 0 0 -1 0 0 -1 0 0.173151 -0.04928368 0.9836614 0.04636305 -0.007458567 0.9988968 0.04053789 -0.02313542 0.9989101 0.03717905 -0.02774155 0.9989234 0.03342843 -0.03195703 0.9989301 0.6984502 -0.7141135 0.04700344 0.7850062 -0.6177019 0.0470072 0.9753869 -0.2103379 0.06617045 0.3395959 -0.08969867 0.9362846 0.3332259 -0.02778869 0.9424375 0.04658222 -0.0023368 0.9989117 0.04710674 -0.001946747 0.998888 0.1796543 -0.007425785 0.9837018 0.1796714 -0.007424652 0.9836986 0.3343912 -0.01381826 0.9423331 0.3173476 -0.02794831 0.9478973 0.4752058 -0.162729 0.8646957 0.7210783 -0.2149243 0.6586757 0.6303234 -0.1921249 0.7521838 0.6106878 -0.2029824 0.765414 0.5561125 -0.169228 0.8136957 0.5560931 -0.1692219 0.8137103 0.721108 -0.2149333 0.6586402 0.7305829 -0.2292799 0.6431791 0.7809876 -0.2279549 0.5814594 0.8289942 -0.2470166 0.5017484 0.8304119 -0.2500086 0.4979074 0.7809622 -0.2279474 0.5814964 0.8984847 -0.2705385 0.3457372 0.8890603 -0.2524538 0.3818886 0.8890522 -0.2524514 0.381909 0.9613146 -0.267624 0.06520479 0.9613142 -0.2676239 0.0652095 0.9437919 -0.277626 0.1793897 0.9429822 -0.2706409 0.1937469 0.9205291 -0.2631232 0.2887772 0.9596998 -0.2731588 0.06603372 0.9616796 -0.2701182 0.04699486 0.9172671 -0.3954889 0.04700589 0.858354 -0.5108999 0.04700541 0.858352 -0.5109032 0.04700857 0.9172608 -0.3955035 0.04700863 0.7850034 -0.617705 0.04701226 0.698452 -0.7141114 0.04700726 0.6188202 -0.7841213 0.04706734 0.6188197 -0.7841219 0.04706585 0.6094429 -0.7722402 0.1795117 0.6094426 -0.7722406 0.1795107 0.6094399 -0.7722415 0.1795162 0.5812732 -0.7365505 0.3458535 0.5812741 -0.7365471 0.3458597 0.5812754 -0.736547 0.3458575 0.535811 -0.6789379 0.5019462 0.5358107 -0.6789402 0.5019433 0.5358107 -0.6789402 0.5019434 0.47439 -0.6011124 0.6431315 0.4743899 -0.60111 0.6431338 0.4743851 -0.6011088 0.6431383 0.398823 -0.5053615 0.7652125 0.3988228 -0.5053596 0.7652138 0.3988241 -0.50536 0.7652128 0.3113561 -0.394527 0.8645264 0.311356 -0.3945259 0.8645269 0.3113552 -0.3945256 0.8645272 0.2145825 -0.2719026 0.9380955 0.2145825 -0.2719032 0.9380955 0.2145843 -0.2719038 0.9380949 0.1113925 -0.1411485 0.9837017 0.1113932 -0.1411458 0.9837019 0.1113933 -0.1411486 0.9837015 0.02992832 -0.03648853 0.9988858 0.02856606 -0.03619682 0.9989364 0.02922546 -0.03563135 0.9989376 0.04636281 -0.00745958 0.9988968 0.04636216 -0.007463634 0.9988968 0.04563599 -0.01298928 0.9988737 0.04557478 -0.01300257 0.9988764 0.04335123 -0.01825416 0.9988931 0.339596 -0.08969795 0.9362846 0.3154076 -0.04686087 0.9477986 0.178073 -0.02645671 0.9836615 0.179656 -0.007424116 0.9837016 0.1796576 -0.007424592 0.9837012 0.04658216 -0.002337574 0.9989117 0.04739832 -0.00704205 0.9988512 0.1780731 -0.02645671 0.9836616 0.1731504 -0.04928392 0.9836615 0.3362537 -0.09570825 0.9368956 0.3344722 -0.09215772 0.9378888 0.3271855 -0.0901184 0.9406532 0.4760851 -0.164713 0.8638359 0.917261 -0.3955023 0.04701179 0.9033956 -0.3895239 0.179297 0.9033954 -0.3895243 0.1792979 0.8617368 -0.371562 0.3454725 0.8617358 -0.3715628 0.3454744 0.7944656 -0.3425574 0.5014766 0.7944663 -0.342557 0.5014758 0.7035399 -0.3033515 0.6426582 0.7035384 -0.3033521 0.6426595 0.5915963 -0.2550848 0.7648172 0.5915998 -0.2550837 0.764815 0.4619476 -0.1991808 0.8642519 0.4619457 -0.1991814 0.8642528 0.3184196 -0.1372959 0.9379546 0.3184205 -0.1372956 0.9379543 0.1653156 -0.0712803 0.9836615 0.1653147 -0.07128059 0.9836615 0.04321587 -0.01863384 0.998892 0.04410624 -0.01857173 0.9988542 0.8583537 -0.5109004 0.04700732 0.8453785 -0.5031775 0.1792976 0.8453784 -0.5031775 0.1792978 0.8063947 -0.479974 0.3454745 0.8063939 -0.4799744 0.3454756 0.7434448 -0.4425064 0.5014756 0.7434455 -0.4425062 0.5014747 0.6583569 -0.3918606 0.6426597 0.6583552 -0.391861 0.6426612 0.5536057 -0.3295128 0.764815 0.553609 -0.3295122 0.7648128 0.4322796 -0.2572961 0.8642529 0.4322789 -0.2572962 0.8642532 0.2979713 -0.1773551 0.9379543 0.2979704 -0.1773552 0.9379546 0.1546981 -0.09207803 0.9836615 0.1546987 -0.09207797 0.9836615 0.04014867 -0.02389681 0.998908 0.04206395 -0.02400636 0.9988266 0.7850057 -0.617703 0.04700267 0.7731389 -0.6083654 0.1792976 0.7731405 -0.6083644 0.1792948 0.7374871 -0.5803097 0.3454756 0.7374868 -0.5803099 0.3454761 0.6799174 -0.5350099 0.5014747 0.6799161 -0.5350102 0.5014762 0.602098 -0.4737769 0.6426612 0.6020987 -0.4737768 0.6426606 0.5063015 -0.3983963 0.7648131 0.5062994 -0.3983964 0.7648144 0.3953393 -0.3110842 0.8642532 0.3953384 -0.3110842 0.8642536 0.272508 -0.2144313 0.9379544 0.2725102 -0.2144313 0.937954 0.1414793 -0.1113265 0.9836615 0.1414793 -0.1113265 0.9836615 0.03650349 -0.02872365 0.9989207 0.03915756 -0.02921891 0.9988057 0.6984503 -0.7141134 0.04700309 0.6878925 -0.7033188 0.1792948 0.6878937 -0.7033181 0.1792924 0.6561712 -0.6708843 0.345476 0.6561696 -0.6708847 0.3454782 0.6049479 -0.6185143 0.5014759 0.6049513 -0.6185141 0.5014722 0.535712 -0.5477225 0.6426606 0.5357121 -0.5477225 0.6426604 0.4504762 -0.4605755 0.7648146 0.450474 -0.4605754 0.764816 0.3517491 -0.3596367 0.8642535 0.3517507 -0.3596369 0.8642528 0.2424633 -0.2478992 0.937954 0.2424626 -0.2478991 0.937954 0.1258798 -0.1287022 0.9836617 0.1258789 -0.1287022 0.9836617 0.03238797 -0.03311437 0.9989266 0.03578972 -0.03421556 0.9987735 0.04710686 0 0.9988898 0.04710686 0 0.9988899 0.04710686 0 0.9988898 0.04710686 0 0.9988899 0.04710686 0 0.9988898 0.04710686 0 0.9988899 0.04710686 0 0.9988898 0.1796625 0 0.9837283 0.1796625 0 0.9837283 0.1796593 0 0.9837289 0.3174716 0 0.9482677 0.3174716 0 0.9482677 0.1796764 0 0.9837258 0.1796764 0 0.9837258 0.1796593 0 0.9837289 -0.9063086 0.4226166 0 -0.9659257 0.2588197 0 -0.9659257 0.2588197 0 -0.9961945 0.08715784 0 -0.9961947 0.08715564 2.12782e-6 -0.9961953 0.08714973 0 -0.9961948 -0.08715564 0 -0.9961948 -0.08715564 0 -0.9659247 -0.2588232 0 -0.9659257 -0.2588197 -7.20143e-7 -0.9659258 -0.2588191 0 -0.9063088 -0.4226163 0 -0.9063088 -0.4226163 0 -0.819152 -0.5735765 0 -0.819152 -0.5735765 0 -0.7071068 -0.7071068 0 -0.7071068 -0.7071068 0 -0.5735752 -0.819153 0 -0.5735752 -0.819153 0 -0.4226195 -0.9063073 0 -0.4226195 -0.9063073 0 -0.258818 -0.9659261 0 -0.258818 -0.9659261 0 -0.08715564 -0.9961948 0 -0.08715564 -0.9961948 0 0.08715564 -0.9961948 0 0.08715564 -0.9961948 0 0.258818 -0.9659261 0 0.258818 -0.9659261 0 0.4226205 -0.9063067 0 0.4226205 -0.9063067 0 0.5735752 -0.819153 0 0.5735752 -0.819153 0 0.7071053 -0.7071081 0 0.7071053 -0.7071081 0 0.819152 -0.5735765 0 0.819152 -0.5735765 0 0.9063076 -0.4226186 0 0.9063076 -0.4226186 0 0.9659258 -0.2588191 0 0.9659264 -0.2588171 2.33163e-6 0.9659295 -0.2588058 0 0.9961948 -0.08715564 0 0.9961948 -0.08715564 0 0.9961943 0.08715999 0 0.9961947 0.08715564 -1.58296e-6 0.9961948 0.08715397 0 0.9659264 0.258817 0 0.9659264 0.258817 0 0.9063075 0.4226189 0 0.9063075 0.4226189 0 0.819152 0.5735765 0 0.8191522 0.5735762 -4.55185e-7 0.8191576 0.5735685 0 0.7071052 0.7071084 0 0.7071052 0.7071084 0 0.5735756 0.8191526 0 0.5735756 0.8191526 0 0.4226199 0.906307 0 0.4226199 0.906307 0 0.2588187 0.9659259 0 0.2588187 0.9659259 0 0.08715564 0.9961948 0 0.08715564 0.9961948 0 -0.08715564 0.9961948 0 -0.08715564 0.9961948 0 -0.2588187 0.9659259 0 -0.2588187 0.9659259 0 -0.4226189 0.9063075 0 -0.4226189 0.9063075 0 -0.5735756 0.8191526 0 -0.5735756 0.8191526 0 -0.7071066 0.707107 0 -0.7071066 0.707107 0 -0.8191576 0.5735685 0 -0.8191522 0.5735762 -4.55185e-7 -0.819152 0.5735765 0 -0.9063086 0.4226166 0 0.6427862 0.7660457 0 0.6427862 0.7660457 0 0.04710668 0.002836227 0.9988859 0.9761283 0.210498 0.0535174 0.7850038 0.6177053 0.04700273 0.1113914 0.1411471 0.9837019 0.029208 0.03701031 0.998888 0.02921622 0.03635567 0.9989117 0.2145843 0.2719038 0.9380949 0.2145826 0.2719032 0.9380954 0.2145825 0.2719026 0.9380955 0.3113552 0.3945256 0.8645272 0.311356 0.3945259 0.8645269 0.3113561 0.394527 0.8645264 0.3988241 0.50536 0.7652128 0.3988229 0.5053596 0.7652137 0.398823 0.5053615 0.7652125 0.4743851 0.6011088 0.6431383 0.4743899 0.60111 0.6431338 0.47439 0.6011124 0.6431315 0.5358107 0.6789402 0.5019434 0.5358108 0.6789402 0.5019433 0.535811 0.6789379 0.5019462 0.5812754 0.736547 0.3458575 0.5812741 0.7365471 0.3458597 0.5812732 0.7365505 0.3458535 0.6094399 0.7722415 0.1795162 0.6094426 0.7722406 0.1795107 0.6094429 0.7722402 0.1795117 0.6188202 0.7841213 0.04706728 0.6188197 0.7841219 0.04706579 0.698452 0.7141114 0.04700726 0.6984502 0.7141135 0.04700279 0.858354 0.5108999 0.04700732 0.7850062 0.6177019 0.0470072 0.9172608 0.3955035 0.04700863 0.858352 0.5109032 0.04700857 0.9172671 0.3954889 0.04700589 0.9604265 0.2733657 0.05340558 0.9611303 0.2720651 0.04700124 0.9609867 0.2715384 0.05264586 0.9609817 0.271537 0.05274301 0.9518443 0.2727608 0.1399789 0.9425801 0.281687 0.1794301 0.9353746 0.2611259 0.2385112 0.9353708 0.2611248 0.238527 0.8992959 0.2678889 0.3456912 0.8955616 0.2586068 0.3620663 0.8546512 0.2475995 0.4563616 0.8263319 0.2554242 0.5019303 0.8054797 0.2295935 0.5463417 0.8054713 0.229591 0.5463551 0.73131 0.2270784 0.6431339 0.7272863 0.2204412 0.6499693 0.6598796 0.1979019 0.7248405 0.609879 0.2053122 0.7654375 0.5853404 0.1726585 0.7921904 0.5853305 0.1726554 0.7921984 0.475676 0.1613944 0.8646873 0.4774065 0.1653867 0.8629776 0.3400027 0.08927816 0.9361771 0.3264004 0.08973145 0.9409628 0.3345262 0.09200185 0.9378848 0.3364136 0.09575372 0.9368335 0.3309115 0.04916429 0.9423802 0.3037879 0.02772134 0.9523363 0.3400033 0.08927518 0.9361771 0.3173508 0.02759188 0.9479067 0.3339863 0.01380151 0.9424768 0.1796714 0.007424652 0.9836986 0.04600054 0.002769231 0.9989375 0.04693245 0.001939535 0.9988962 0.1796576 0.007424592 0.9837012 0.04467457 0.01271563 0.9989207 0.04663276 0.014575 0.9988058 0.04548984 0.008329033 0.9989301 0.04581695 0.006807088 0.9989267 0.04870474 0.008916676 0.9987735 0.04600054 0.002768874 0.9989376 0.04044079 0.02407068 0.998892 0.04091286 0.02482843 0.9988541 0.04251635 0.01925998 0.9989101 0.04290401 0.01849937 0.9989079 0.04411619 0.01998633 0.9988266 0.04427599 0.01383721 0.9989235 0.03728902 0.02934175 0.9988737 0.03726369 0.029284 0.9988763 0.04021096 0.02440553 0.9988931 0.02921575 0.03635609 0.9989118 0.03405189 0.03398972 0.9988419 0.0333752 0.03412371 0.9988602 0.03323578 0.03317433 0.9988968 0.03323286 0.03317755 0.9988968 0.6984503 0.7141134 0.04700344 0.6878928 0.7033191 0.1792925 0.6878934 0.7033178 0.1792948 0.6561707 0.6708838 0.3454782 0.6561702 0.6708853 0.345476 0.6049494 0.6185159 0.5014722 0.6049497 0.6185125 0.5014759 0.5357121 0.5477226 0.6426605 0.5357121 0.5477224 0.6426606 0.4504751 0.4605745 0.7648159 0.4504752 0.4605766 0.7648145 0.35175 0.3596376 0.8642528 0.3517498 0.3596359 0.8642535 0.2424629 0.2478988 0.9379541 0.242463 0.2478995 0.9379539 0.7850054 0.6177027 0.04700875 0.7731394 0.6083657 0.1792948 0.7731401 0.6083641 0.1792976 0.737487 0.5803096 0.345476 0.7374869 0.5803099 0.3454757 0.6799167 0.5350093 0.5014761 0.6799167 0.5350106 0.5014747 0.6020984 0.4737772 0.6426606 0.6020983 0.4737765 0.6426612 0.5063003 0.3983954 0.7648144 0.5063008 0.3983975 0.7648131 0.3953387 0.3110837 0.8642535 0.3953389 0.3110846 0.8642531 0.2725092 0.2144323 0.9379539 0.2725088 0.2144302 0.9379546 0.8583537 0.5109004 0.04700589 0.8453785 0.5031775 0.1792979 0.8453784 0.5031775 0.1792976 0.8063943 0.4799737 0.3454756 0.8063942 0.4799746 0.3454745 0.7434452 0.4425067 0.5014749 0.7434451 0.442506 0.5014756 0.6583558 0.39186 0.6426611 0.6583563 0.3918616 0.6426597 0.5536078 0.3295141 0.7648129 0.5536068 0.329511 0.764815 0.4322792 0.2572959 0.8642532 0.4322794 0.2572966 0.8642529 0.2979708 0.1773548 0.9379546 0.297971 0.1773556 0.9379544 0.917261 0.3955023 0.04701185 0.9033955 0.3895239 0.1792978 0.9033955 0.3895244 0.179297 0.8617362 0.3715618 0.3454743 0.8617364 0.3715631 0.3454725 0.794466 0.3425576 0.5014759 0.7944658 0.3425568 0.5014766 0.7035389 0.3033511 0.6426595 0.7035396 0.3033525 0.6426582 0.5915988 0.2550859 0.764815 0.5915973 0.2550826 0.7648174 0.4619463 0.1991802 0.8642527 0.4619473 0.199182 0.8642519 0.3184202 0.1372961 0.9379544 0.3184198 0.1372953 0.9379547 0.1796543 0.007423579 0.9837018 0.1796559 0.007425725 0.9837014 0.178073 0.02645671 0.9836615 0.1780731 0.02645671 0.9836615 0.1731505 0.0492835 0.9836615 0.1731508 0.0492841 0.9836614 0.1653154 0.07128083 0.9836614 0.165315 0.07128006 0.9836616 0.1546983 0.09207773 0.9836615 0.1546984 0.0920782 0.9836615 0.1414793 0.1113265 0.9836615 0.1414793 0.1113265 0.9836616 0.1258794 0.1287027 0.9836615 0.1258793 0.1287018 0.9836617 0.1113933 0.1411477 0.9837017 0.1113934 0.1411486 0.9837015 0.5865674 0.8099005 0 0.5865674 0.8099005 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -0.706433 0.7064375 -0.04357147 -0.7064334 0.7064371 -0.04357123 -0.7064334 0.6957283 -0.1300539 -0.7064341 0.6957277 -0.1300541 -0.7064347 0.6957271 -0.1300536 -0.7064347 0.6744716 -0.2145647 -0.7064356 0.6744707 -0.2145648 -0.7064362 0.6744701 -0.2145643 -0.7064361 0.6429902 -0.2958235 -0.7064336 0.6429931 -0.2958235 -0.7064334 0.6429932 -0.2958236 -0.7064335 0.6017662 -0.372598 -0.7064348 0.6017652 -0.372597 -0.7064355 0.6017648 -0.3725965 -0.7064354 0.5514158 -0.4437225 -0.7064346 0.5514163 -0.4437232 -0.7064345 0.5514163 -0.4437232 -0.7064346 0.4927085 -0.5081226 -0.706435 0.4927082 -0.5081225 -0.7064353 0.492708 -0.5081221 -0.7064353 0.426531 -0.5648189 -0.7064341 0.4265322 -0.5648195 -0.7064338 0.4265323 -0.5648198 -0.7064339 0.3538895 -0.6129547 -0.7064335 0.3538896 -0.6129549 -0.7064347 0.3538895 -0.6129537 -0.7064348 0.2758817 -0.6517968 -0.7064321 0.2758823 -0.6517996 -0.7064343 0.2758823 -0.6517972 -0.7064343 0.1936927 -0.6807597 -0.7064338 0.1936927 -0.6807602 -0.7064361 0.1936931 -0.6807577 -0.7064362 0.108567 -0.6994006 -0.7064352 0.1085677 -0.6994016 -0.7064341 0.1085674 -0.6994028 -0.706434 0.02179574 -0.7074432 -0.7064324 0.02179527 -0.7074448 -0.706433 0.02179592 -0.7074441 -0.7064343 0.02179646 -0.7074429 -0.7064344 -0.06530493 -0.7047594 -0.7064353 -0.06530529 -0.7047584 -0.7064337 -0.06530618 -0.7047599 -0.7064338 -0.1514173 -0.6913929 -0.7064343 -0.1514171 -0.6913924 -0.7064345 -0.151417 -0.6913923 -0.7064345 -0.2352343 -0.6675442 -0.7064335 -0.2352342 -0.6675454 -0.706435 -0.235233 -0.6675441 -0.706435 -0.3154839 -0.6335768 -0.7064344 -0.3154839 -0.6335775 -0.7064348 -0.3154835 -0.6335772 -0.7064347 -0.390952 -0.5900053 -0.706435 -0.3909518 -0.5900052 -0.7064348 -0.3909521 -0.5900054 -0.7064348 -0.4604932 -0.5374903 -0.7064351 -0.4604932 -0.53749 -0.7064346 -0.4604938 -0.5374903 -0.7064345 -0.5230547 -0.4768272 -0.706437 -0.5230525 -0.4768259 -0.706435 -0.5230544 -0.4768266 -0.706435 -0.5776861 -0.4089356 -0.7064346 -0.5776864 -0.408936 -0.706434 -0.5776869 -0.4089362 -0.706434 -0.623562 -0.3348455 -0.7064338 -0.6235621 -0.3348456 -0.7064339 -0.6235619 -0.3348456 -0.706434 -0.6599841 -0.2556794 -0.7064351 -0.6599832 -0.2556793 -0.7064328 -0.6599855 -0.2556791 -0.7064327 -0.6864031 -0.1726372 -0.7064331 -0.6864027 -0.1726369 -0.706436 -0.6863996 -0.1726375 -0.7064361 -0.7024124 -0.08697694 -0.7064351 -0.7024132 -0.08697748 -0.7064341 -0.7024142 -0.08697718 -0.7064341 -0.7077788 0 -0.7495186 -0.6616694 -0.02038663 -0.7496744 -0.661807 0 -0.7069379 -0.7069401 0.02178144 -0.7064341 -0.7024142 0.08697718 -0.7064351 -0.7024132 0.08697748 -0.7064361 -0.7024124 0.08697694 -0.706436 -0.6863999 0.1726362 -0.7064302 -0.6864053 0.172639 -0.7064327 -0.6864032 0.1726372 -0.7064328 -0.6599853 0.2556799 -0.7064362 -0.6599823 0.2556779 -0.706434 -0.6599841 0.2556797 -0.706434 -0.6235619 0.3348456 -0.7064338 -0.6235622 0.3348457 -0.706434 -0.6235619 0.3348454 -0.7064341 -0.5776869 0.4089363 -0.706435 -0.5776861 0.4089356 -0.706435 -0.5776861 0.4089356 -0.706435 -0.5230542 0.4768267 -0.7064363 -0.5230535 0.4768257 -0.7064345 -0.5230544 0.4768276 -0.7064345 -0.4604936 0.5374904 -0.7064357 -0.460493 0.5374893 -0.7064349 -0.4604932 0.5374903 -0.7064348 -0.390952 0.5900055 -0.7064352 -0.3909518 0.590005 -0.7064349 -0.3909519 0.5900054 -0.7064347 -0.3154836 0.6335771 -0.7064338 -0.3154839 0.633578 -0.706435 -0.3154839 0.6335768 -0.706435 -0.2352336 0.6675437 -0.7064318 -0.235234 0.6675471 -0.7064345 -0.2352343 0.6675442 -0.7064345 -0.1514172 0.6913923 -0.7064336 -0.1514171 0.691393 -0.7064338 -0.1514172 0.6913929 -0.7064337 -0.06530547 0.70476 -0.7064369 -0.06530588 0.7047566 -0.7064344 -0.06530493 0.7047594 -0.7064344 0.02179586 0.7074429 -0.7064338 0.02179646 0.7074435 -0.706433 0.0217958 0.7074443 -0.706434 0.02179527 0.7074432 -0.7064341 0.1085678 0.6994026 -0.7064362 0.108567 0.6994006 -0.7064362 0.108567 0.6994006 -0.7064362 0.1936922 0.6807579 -0.7064319 0.1936942 0.6807616 -0.7064343 0.1936926 0.6807597 -0.7064342 0.275882 0.6517974 -0.7064326 0.2758829 0.6517987 -0.7064348 0.2758812 0.6517971 -0.7064347 0.3538891 0.6129539 -0.7064328 0.3538905 0.6129555 -0.7064338 0.3538895 0.6129547 -0.7064338 0.4265325 0.5648198 -0.7064343 0.426532 0.5648195 -0.7064355 0.426531 0.5648189 -0.7064353 0.4927079 0.5081222 -0.7064346 0.4927085 0.5081226 -0.7064346 0.4927085 0.5081226 -0.7064345 0.5514163 0.4437232 -0.706435 0.5514162 0.4437227 -0.7064354 0.5514157 0.4437226 -0.7064355 0.6017645 0.3725969 -0.7064328 0.6017671 0.3725978 -0.7064335 0.6017663 0.3725977 -0.7064334 0.6429933 0.2958236 -0.7064338 0.6429927 0.2958234 -0.7064361 0.6429902 0.2958235 -0.7064363 0.67447 0.2145646 -0.7064349 0.6744714 0.2145647 -0.7064347 0.6744717 0.2145647 -0.7064347 0.695727 0.1300539 -0.7064334 0.6957284 0.1300539 -0.7064334 0.6957283 0.1300539 -0.7064334 0.7064371 0.04357123 -0.706433 0.7064375 0.04357147 -0.7064352 0.7064352 0.04357236 -0.7064352 0.7064352 -0.04357236 -0.3791884 0.9038923 -0.1979771 -0.5031185 0.8431295 -0.1897481 -0.0361005 0.1331567 -0.9904372 -0.1010908 0.3986161 -0.9115294 -0.1010926 0.398623 -0.9115263 -0.1107608 0.4519668 -0.8851317 -0.07740211 0.3350628 -0.9390111 -0.09121 0.3712234 -0.9240529 -0.0877791 0.3302864 -0.9397903 -0.0753135 0.2873634 -0.9548561 -0.05284124 0.2445162 -0.9682043 -0.08777922 0.3302868 -0.9397901 -0.03610289 0.1331659 -0.990436 -0.04714822 0.1859877 -0.9814202 -0.05004853 0.2054702 -0.9773828 -0.06569945 0.240296 -0.9684738 -0.06569945 0.2402961 -0.9684737 -0.01013344 0.044927 -0.9989389 -0.01013344 0.04492634 -0.9989389 -0.01167589 0.04169428 -0.9990622 -0.4061371 0.6647248 -0.6270516 -0.4123762 0.7085924 -0.5725755 -0.3958039 0.671116 -0.6268514 -0.3866167 0.6573637 -0.6468389 -0.3894245 0.6750817 -0.6265887 -0.3894367 0.6751009 -0.6265603 -0.4547322 0.7892244 -0.4127269 -0.4883985 0.8011283 -0.3459194 -0.4376679 0.7521971 -0.4925913 -0.5280507 0.8277001 -0.1899346 -0.4920831 0.7988746 -0.3459097 -0.4920684 0.7988599 -0.3459647 -0.4376807 0.7522146 -0.4925534 -0.4376699 0.7521986 -0.4925875 -0.4376019 0.7512452 -0.4941004 -0.4381247 0.7519727 -0.4925278 -0.4381022 0.7519388 -0.4925998 -0.4955899 0.8344526 -0.2409971 -0.4758449 0.8458841 -0.2409393 -0.4727125 0.846272 -0.2456962 -0.4337199 0.8669027 -0.245696 -0.4307535 0.8671038 -0.2501649 -0.387368 0.9160056 -0.1043069 -0.4348825 0.8732167 -0.2199311 -0.3767546 0.8998281 -0.2199213 -0.4900408 0.8508278 -0.1896101 -0.4982051 0.8396081 -0.2164487 -0.4864127 0.8464981 -0.2164338 -0.4783493 0.8536018 -0.2062667 -0.4890542 0.8496604 -0.1972393 -0.4890496 0.849663 -0.1972393 -0.1912712 0.7350283 -0.6504988 -0.1951049 0.8311921 -0.5206284 -0.1964139 0.788987 -0.5821694 -0.1912702 0.7350248 -0.6505032 -0.1890134 0.7315667 -0.6550451 -0.1896247 0.735417 -0.6505416 -0.3008887 0.9171081 -0.2614933 -0.3031243 0.9173344 -0.2580956 -0.3029898 0.9170199 -0.2593683 -0.2174293 0.8784742 -0.4254497 -0.2336643 0.9463544 -0.223191 -0.2226895 0.9383167 -0.2645207 -0.2108201 0.9516609 -0.2233749 -0.2345237 0.8962646 -0.3764418 -0.2345231 0.8962629 -0.376446 -0.2357267 0.9192394 -0.3153284 -0.2047675 0.9033362 -0.3769004 -0.2047676 0.9033363 -0.3769001 -0.2156582 0.8263875 -0.5201685 -0.2156572 0.8263838 -0.5201749 -0.2135392 0.8360275 -0.5054297 -0.2108648 0.8275136 -0.5203434 -0.2108724 0.8275406 -0.5202974 -0.03422868 0.0783956 -0.9963346 -0.03422844 0.07839572 -0.9963345 -0.02798563 0.07840853 -0.9965285 -0.01104062 0.1372808 -0.9904706 -0.01946353 0.08309632 -0.9963514 -0.022973 0.08203482 -0.9963647 -0.02798569 0.07840836 -0.9965285 -0.1334396 0.4966643 -0.8576238 -0.1334393 0.496663 -0.8576245 -0.1361326 0.5278182 -0.838377 -0.2557731 0.9298574 -0.264472 -0.2577062 0.9301665 -0.2614917 -0.2490997 0.90531 -0.3440392 -0.3159877 0.8842945 -0.3437659 -0.30272 0.8528168 -0.4255163 -0.3055322 0.8547273 -0.4196323 -0.2886807 0.8131828 -0.5053684 -0.291428 0.8153961 -0.5001988 -0.2720263 0.7661769 -0.5822154 -0.2746559 0.7685936 -0.5777785 -0.2528683 0.7121185 -0.6549389 -0.2553268 0.7146304 -0.6512386 -0.2313883 0.6515327 -0.7224712 -0.2336366 0.65404 -0.7194759 -0.2078332 0.5851151 -0.7838658 -0.2098348 0.5875188 -0.7815312 -0.1825098 0.5137395 -0.8383089 -0.1842376 0.5159497 -0.8365718 -0.1557623 0.4383817 -0.885189 -0.1572057 0.4403319 -0.883965 -0.1279726 0.3601154 -0.9240887 -0.1291235 0.3617462 -0.9232912 -0.09952414 0.2800259 -0.9548196 -0.1003891 0.2813036 -0.9543533 -0.07080173 0.1991943 -0.9773989 -0.07139164 0.200098 -0.9771715 -0.02787858 0.07880932 -0.9964998 -0.02816194 0.07890242 -0.9964845 -0.1160916 0.2121766 -0.9703112 -0.1073853 0.1846781 -0.9769148 -0.1216768 0.2084631 -0.9704318 -0.1216969 0.2084967 -0.970422 -0.04295623 0.0687828 -0.9967065 -0.04317891 0.07053887 -0.9965741 -0.03995645 0.07667601 -0.9962552 -0.1160869 0.2121686 -0.9703135 -0.1463578 0.2621155 -0.9538736 -0.128534 0.2040105 -0.970494 -0.1954446 0.3437912 -0.9184819 -0.1954571 0.3438118 -0.9184715 -0.1928189 0.3346464 -0.922406 -0.1975867 0.3424418 -0.9185277 -0.1975853 0.3424394 -0.9185289 -0.2713587 0.4653007 -0.8425317 -0.2713483 0.4652838 -0.8425444 -0.2744418 0.4775835 -0.8346232 -0.2680606 0.4674065 -0.8424219 -0.2322393 0.4086801 -0.8826355 -0.2853762 0.4562524 -0.8428488 -0.1954554 0.3438087 -0.9184731 -0.395828 0.6711542 -0.6267952 -0.3423094 0.5731157 -0.7445554 -0.3487761 0.6046763 -0.7160461 -0.3323596 0.5794091 -0.7441923 -0.3107819 0.5446909 -0.7789265 -0.3447597 0.5715629 -0.7446184 -0.2713451 0.4652792 -0.842548 -0.2579342 0.9547946 -0.1477743 -0.302732 0.9213267 -0.2439476 -0.2508883 0.9364308 -0.2452601 -0.2575144 0.9346212 -0.2452949 -0.2496792 0.9334771 -0.2574507 -0.2312019 0.9382254 -0.2574468 -0.2526442 0.9415197 -0.2229607 -0.373142 0.893594 -0.2495091 -0.3897132 0.8884618 -0.2424033 -0.3881584 0.8858109 -0.2543069 -0.3909162 0.8857782 -0.250163 -0.3907048 0.8854107 -0.2517889 -0.4201791 0.8454686 -0.3295944 -0.4739752 0.816579 -0.3294637 -0.470237 0.8381876 -0.2762583 -0.4920554 0.798888 -0.3459183 -0.4920678 0.7988591 -0.3459675 -0.1239147 0.4987083 -0.8578667 -0.1569857 0.6256334 -0.7641586 -0.1582117 0.6002482 -0.7840096 -0.1653743 0.6237777 -0.7639062 -0.1770225 0.6681613 -0.7226503 -0.1483861 0.6274996 -0.7643468 -0.1896229 0.7354102 -0.6505498 -0.3791906 0.9038914 -0.1979771 -0.3460775 0.9044485 -0.2494064 -0.3450381 0.9024054 -0.2580956 -0.347553 0.9025163 -0.2543057 -0.3362923 0.8792173 -0.337468 -0.4006366 0.8519307 -0.3372005 -0.3842077 0.8223668 -0.4196393 -0.3877985 0.8242552 -0.4125719 -0.366557 0.7844929 -0.5002068 -0.3701023 0.7867591 -0.4939982 -0.3455484 0.7394316 -0.5777865 -0.3489711 0.7419608 -0.5724627 -0.3213179 0.6874828 -0.6512466 -0.3245491 0.6901566 -0.6468011 -0.294106 0.6291627 -0.719483 -0.2970793 0.6318591 -0.7158896 -0.2642213 0.5651428 -0.7815375 -0.2668849 0.5677487 -0.7787387 -0.2320595 0.4962734 -0.836577 -0.2343747 0.4986881 -0.8344931 -0.1980693 0.4235178 -0.883969 -0.20001 0.4256554 -0.8825041 -0.162735 0.3479154 -0.9232942 -0.1642906 0.3497111 -0.9223399 -0.1265563 0.2705358 -0.9543552 -0.1277293 0.271946 -0.9537979 -0.09002536 0.19243 -0.9771726 -0.09083145 0.193434 -0.9768997 -0.03498184 0.07513761 -0.9965594 -0.03995633 0.07667607 -0.9962552 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 3.58337e-7 -1.73146e-7 1 0 0 1 -5.50188e-7 3.59515e-7 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -0.1250096 0.8447377 -0.5203756 0.01514858 0.6222834 -0.7826455 0.1275013 0.8466962 -0.5165745 0.1121217 0.8278552 -0.5496219 0.1120558 0.8278528 -0.5496391 0.09224873 0.8456812 -0.5256553 0.1206402 0.8475279 -0.5168583 0.1264889 0.8468232 -0.516615 0.08475095 0.7815135 -0.6181051 -0.02394908 0.7774596 -0.6284766 0.01918679 0.6945344 -0.7192036 0.01368999 0.7035928 -0.7104716 0.01372754 0.7035175 -0.7105453 0.01512253 0.6222799 -0.7826487 -0.01856744 0.6384642 -0.7694276 -0.04080623 0.6878667 -0.724689 0.04912751 0.6907095 -0.7214617 0.01918286 0.6945369 -0.7192013 -0.02251869 0.5172666 -0.8555281 -0.1976373 0.6161053 -0.7624656 -0.02264988 0.5173538 -0.8554719 -0.02265179 0.5173607 -0.8554676 -0.02265781 0.5173517 -0.8554729 -0.02265894 0.5173549 -0.8554709 -0.1250042 0.8447257 -0.5203966 -0.1024248 0.7526122 -0.650449 -0.098585 0.7652754 -0.6361088 -0.08265143 0.7556662 -0.649721 -0.08265441 0.7556736 -0.649712 -0.02135521 0.5966948 -0.8021841 -0.03285545 0.6078947 -0.7933376 -0.04724407 0.6457061 -0.7621232 -0.0673629 0.6832324 -0.7270872 -0.1068561 0.6358067 -0.7644159 -0.08265388 0.7556673 -0.6497192 -0.1157782 0.9717789 -0.2055265 -0.1219186 0.9691142 -0.2143677 -0.1219136 0.9691149 -0.2143672 -0.1479792 0.9679096 -0.2031087 -0.1706432 0.9596778 -0.2233816 -0.1706119 0.9596854 -0.2233732 -0.1706348 0.9596794 -0.2233816 -0.1225965 0.8957573 -0.4273046 -0.1730728 0.9098945 -0.3770117 -0.1077859 0.8473864 -0.5199217 -0.1077719 0.8473587 -0.5199697 -0.1451268 0.9639098 -0.2231954 -0.1725307 0.9100004 -0.3770048 -0.1596533 0.9342347 -0.31893 -0.1221063 0.9183924 -0.376358 -0.122105 0.9183898 -0.3763647 -0.07952636 0.9424367 -0.3247903 -0.09626883 0.945011 -0.3125486 -0.05565446 0.8994428 -0.4334805 -0.073848 0.9034904 -0.4221985 -0.03022986 0.8420366 -0.5385727 0.01458734 0.9691448 -0.2460601 -0.02304798 0.9738384 -0.2260696 -0.0608837 0.9747292 -0.2149324 -0.0608837 0.9747293 -0.2149325 -0.06088137 0.9747295 -0.2149319 0.03996527 0.9283688 -0.3695055 0.03996729 0.9283674 -0.3695084 0.03709381 0.9481434 -0.3156708 0.07685786 0.9321838 -0.3537322 -0.005015134 0.9670562 -0.2545135 0.1335959 0.8791975 -0.4573444 0.06824994 0.9043909 -0.4212114 0.0847783 0.874225 -0.478062 0.1068137 0.8540493 -0.5091078 0.1361843 0.8793898 -0.4562099 -0.1077833 0.8473857 -0.5199233 -0.1157024 0.8367515 -0.5352196 -0.04983854 0.8474921 -0.5284631 -0.003936052 0.7708733 -0.6369763 0.08469176 0.7815332 -0.6180884 0.07977229 0.7831887 -0.6166457 0.08157581 0.7812129 -0.6189119 0.02873677 0.849776 -0.5263601 0.0560038 0.8417203 -0.5370014 -0.004572749 0.9061679 -0.4228935 0.02239388 0.8997589 -0.4358122 -0.03699207 0.9480496 -0.3159645 -0.01066768 0.9435827 -0.3309652 -0.06284481 0.9736235 -0.219335 -0.001724064 0.9756488 -0.2193317 -0.5034353 -0.8639946 0.008137464 -0.9481831 -0.3177056 0.003474295 0.3996618 0.9166615 0.001514971 0.9981072 -0.06135141 -0.004256069 0.995007 -0.09979063 -0.001684606 0.9950056 -0.09980493 -0.001683831 0.9848968 -0.1731362 0.001432538 0.9737885 -0.227159 -0.01160919 0.9829026 -0.1841249 -7.49364e-4 0.9828989 -0.184144 -7.56623e-4 0.9858837 -0.1671308 0.01002389 0.9863488 -0.1646155 -0.004214465 0.9887487 -0.1493984 0.007489264 0.9882512 -0.1523405 -0.01232117 0.9963338 -0.0855419 0.001156806 0.9966566 -0.0814979 0.005806803 0.996349 0.0853427 -0.00230056 0.999938 0.01113933 3.6949e-4 0.9999373 0.01119053 3.67856e-4 0.9961944 -0.08715748 3.66224e-4 0.9999005 -0.009741246 -0.01021152 0.9981065 -0.06136286 -0.004254937 0.9625493 0.2710801 -0.003771603 0.9839247 0.1785812 9.37388e-4 0.9961942 0.08715748 9.33544e-4 0.986338 0.1642675 -0.01239275 0.9863405 0.1642524 -0.01239055 0.9166938 0.3995904 -4.67766e-4 0.9412192 0.3377965 6.34663e-5 0.9659262 0.258818 6.32305e-5 0.9445731 0.3279768 -0.01459133 0.9625496 0.2710794 -0.003771483 0.8184084 0.5746168 -0.004840612 0.8641327 0.5032588 0.00231266 0.9063056 0.4226167 0.002303302 0.8681062 0.4961034 -0.01653152 0.9167135 0.3995448 -4.60764e-4 0.765025 0.6437167 -0.01911664 0.8191514 0.5735767 -9.39394e-4 0.7615575 0.6480914 0.002762913 0.6065785 0.7950224 -0.001378118 0.6714918 0.7410085 0.002251565 0.7071062 0.7071038 0.002248823 0.6729385 0.7396307 -0.01001322 0.7615432 0.6481083 0.002762913 0.532356 0.8464596 -0.01015979 0.5735681 0.8191415 -0.005187928 0.5314679 0.847073 0.003043234 0.4226182 0.9063065 0.001514494 0.399838 0.916571 -0.005223572 0.5314598 0.8470781 0.003043234 0.07926046 0.9968516 -0.002142727 0.2346548 0.9720773 0.00172621 0.2588181 0.9659245 0.001725673 0.234695 0.9720562 -0.00500375 0.3193045 0.9476522 -3.72332e-4 0.08715516 0.9961948 0 -0.08715516 0.9961948 0 -0.08715516 0.9961948 0 -0.2588173 0.9659262 0 -0.2588173 0.9659262 0 -0.4226187 0.9063076 0 -0.4226187 0.9063076 0 -0.5735758 0.8191525 0 -0.5735758 0.8191524 0 -0.5735759 0.8191525 0 -0.707108 0.7071056 0 -0.707108 0.7071056 0 -0.8191517 0.5735769 0 -0.8191517 0.5735769 0 -0.906308 0.4226178 0 -0.906308 0.4226178 0 -0.9659261 0.2588179 0 -0.9659261 0.2588179 0 -0.9946149 0.1036399 0 -0.9961881 0.08715695 -0.00363034 -0.9994585 -0.03280597 0.002535223 -0.9994591 -0.03278899 0.002535223 -0.9961774 -0.08715599 -0.005861937 -0.9866982 -0.1625316 0.003183722 -0.9714663 -0.2371552 -0.003270447 -0.9867 -0.162521 0.003183484 -0.9867006 -0.162517 0.003183722 -0.9659202 -0.258817 0.003467798 -0.9494673 -0.3135807 -0.01338481 -0.9494681 -0.3135782 -0.01338416 -0.8441496 -0.5361077 -2.85044e-4 -0.8191274 -0.5735616 -0.00759083 -0.7736757 -0.6335481 0.006531417 -0.8441488 -0.5361089 -2.85181e-4 -0.8961561 -0.4437387 4.63932e-4 -0.9063084 -0.4226168 4.63746e-4 -0.8972247 -0.441528 -0.006395936 -0.8972198 -0.441538 -0.006397962 -0.7070847 -0.7070799 -0.008325695 -0.773884 -0.6332933 0.006580173 -0.7736764 -0.6335473 0.006531417 -0.5883302 -0.8085972 -0.006183505 -0.573557 -0.8191255 0.008111298 -0.5193004 -0.8539898 -0.03206914 -0.5883238 -0.8086017 -0.006184935 -0.6648638 -0.7469323 0.006951332 -0.6648663 -0.7469301 0.00695151 -0.6648673 -0.7469292 0.00695151 -0.4225881 -0.906242 -0.01203542 -0.401183 -0.9157956 -0.01925075 -0.4011039 -0.9158297 -0.01927614 -0.2198134 -0.9747238 -0.03994429 -0.2197515 -0.9747362 -0.03998363 -0.2985855 -0.9543828 -2.7521e-4 -0.3944295 -0.9189261 3.48375e-4 -0.3944941 -0.9188984 3.48374e-4 -0.01620388 -0.9998687 0 -0.0672881 -0.9976947 -0.00881356 -0.08713412 -0.9959816 -0.0206936 -0.1396805 -0.9901966 1.19051e-4 -0.2588173 -0.9659264 1.17872e-4 -0.1357524 -0.9831178 -0.1226817 -0.2198136 -0.9747239 -0.03994244 0.04088091 -0.9991641 0 0.08714085 -0.9960585 -0.01655143 0.1280482 -0.991768 9.72116e-5 0.3743088 -0.9272991 0.003068268 0.2618199 -0.9651058 -0.004600346 0.2618082 -0.9651089 -0.004602253 0.2075461 -0.9776809 -0.0326302 0.2588186 -0.965926 -1.7675e-4 0.1273669 -0.9918558 9.53483e-5 0.1280349 -0.9917697 9.535e-5 0.3743038 -0.9273011 0.003068268 0.4226129 -0.9062951 -0.00525701 0.3887612 -0.9212592 -0.01209217 0.620719 -0.7840275 0.002930521 0.5164257 -0.8562061 -0.01468652 0.5735758 -0.8191524 -2.10769e-4 0.4961839 -0.8682061 0.004454731 0.496205 -0.8681939 0.004454731 0.724199 -0.6895911 -9.13961e-5 0.7242013 -0.6895887 -9.11343e-5 0.6405711 -0.7677422 -0.01550811 0.707108 -0.7071033 -0.001749396 0.6207129 -0.7840325 0.002930045 0.6207026 -0.7840406 0.002930045 0.8138743 -0.5810397 -0.00133115 0.8138574 -0.5810632 -0.001331925 0.8191509 -0.573578 -1.80767e-4 0.8125452 -0.5828982 1.12219e-4 0.812525 -0.5829263 1.12219e-4 0.8937474 -0.4485629 -0.002661883 0.8937408 -0.4485758 -0.002662897 0.9063083 -0.4226168 -4.31682e-4 0.8911216 -0.4537636 9.76675e-4 0.8910989 -0.4538083 9.76676e-4 0.9848969 -0.1731356 0.001432538 0.9511384 -0.308738 -0.004064261 0.965925 -0.2588183 0.001356482 0.9484862 -0.3168154 0.001400887 0.9484209 -0.3170106 0.001400887 -4.35717e-5 -0.865472 0.5009574 -0.001841723 -0.6552964 -0.7553696 -2.82001e-5 -0.1399657 -0.9901564 0.004252493 0.5505855 0.8347679 0.01315748 0.4729523 0.8809898 4.83723e-4 0.573578 0.8191509 0 0.9063078 0.4226184 0 0.819151 0.573578 0 0.819151 0.573578 0 0.7071068 0.7071068 0 0.7071068 0.7071068 0 0.6287378 0.7776173 0.00107789 0.5945413 0.8040645 0.002560198 0.9659227 0.2588182 0 0.9519585 0.3062272 0 0.9063078 0.4226184 0.001119554 0.996437 0.08433276 0.001119256 0.9964379 0.08432388 0.001402735 0.9961938 0.08715486 -9.48616e-4 0.9780424 0.2084039 -9.48616e-4 0.9780411 0.2084097 -0.001164615 0.980054 -0.1987283 -0.001164495 0.9800575 -0.1987102 0.002195239 0.9975764 -0.06954395 1.61489e-4 0.9961948 -0.08715486 -2.15167e-5 0.9999504 0.009958863 -2.15167e-5 0.9999502 0.009984195 -0.001164615 0.980058 -0.1987081 0.002407729 0.9659231 -0.2588183 -0.001378536 0.9448809 -0.3274113 -0.001378536 0.9448802 -0.3274136 1.62461e-4 0.9063078 -0.4226183 0.009099483 0.943099 -0.3323879 -6.5123e-4 0.7989274 -0.6014272 0.005393266 0.8473935 -0.530938 6.66412e-4 0.8191515 -0.5735768 -5.06142e-4 0.8915486 -0.4529246 -5.06142e-4 0.8915468 -0.4529283 5.04555e-4 0.704503 -0.7097008 5.04489e-4 0.7045021 -0.7097018 8.10245e-4 0.7071067 -0.7071066 -6.53955e-4 0.7989021 -0.6014608 -6.53955e-4 0.7989033 -0.601459 -0.001158356 0.5223426 -0.8527349 -0.001158416 0.5223405 -0.8527362 0.001804292 0.5735755 -0.8191506 -2.42902e-4 0.6190559 -0.7853469 -2.42902e-4 0.6190589 -0.7853446 -0.001158356 0.5223419 -0.8527355 0.001409053 0.4226179 -0.9063069 -6.39331e-4 0.3892766 -0.9211207 7.64944e-4 0.258819 -0.9659256 -6.39345e-4 0.3892774 -0.9211204 -6.39345e-4 0.389276 -0.921121 0 0.08715587 -0.9961947 0 0.001056492 -0.9999994 4.96045e-4 0.08208978 -0.9966248 0 0.08159118 -0.9966659 0.03125661 0.2081388 -0.9775997 -3.27919e-4 0.09067851 -0.9958801 -3.31164e-4 0.2420878 -0.9702543 -3.31159e-4 0.2420884 -0.9702543 -2.81498e-5 -0.08715605 -0.9961947 0.005670368 -0.1309981 -0.9913664 0.005670964 -0.1310051 -0.9913655 0.001545608 -0.07391786 -0.9972631 0.001545965 -0.07392913 -0.9972623 6.39743e-4 -0.04525965 -0.9989751 1.4037e-4 -0.02722644 -0.9996293 1.40547e-4 -0.02724719 -0.9996288 0 -0.005649864 -0.9999841 -6.14146e-4 -0.258819 -0.9659256 0.007726788 -0.312747 -0.949805 0.007727503 -0.3127523 -0.9498032 8.15491e-4 -0.234167 -0.972196 8.15492e-4 -0.2341671 -0.9721961 8.51753e-6 -0.1845014 -0.9828323 0.004704773 -0.4470645 -0.8944894 5.72051e-4 -0.3815829 -0.9243345 -6.15475e-4 -0.3191369 -0.9477084 0.006141483 -0.5947439 -0.8038918 -2.77495e-4 -0.5415775 -0.8406509 -2.75008e-4 -0.4226183 -0.9063078 0.02049207 -0.5350503 -0.8445717 0.004704773 -0.4470642 -0.8944895 -0.001831948 -0.5735756 -0.8191506 0.01523566 -0.6524396 -0.7576875 0.00614041 -0.5947355 -0.8038979 0.007644534 -0.7409376 -0.6715303 6.21167e-4 -0.7071056 -0.7071077 -9.9149e-4 -0.7416615 -0.6707736 7.63256e-4 -0.8191525 -0.5735753 0.001724958 -0.8224117 -0.5688902 -9.9149e-4 -0.7416622 -0.6707729 -0.002663373 -0.9466371 -0.3222904 0.005082547 -0.8924336 -0.4511501 0.001914501 -0.9063069 -0.4226157 -5.54951e-4 -0.8924608 -0.4511246 -5.54952e-4 -0.8924589 -0.4511283 -0.002663373 -0.9466387 -0.3222857 0.003831863 -0.9659182 -0.2588191 -0.002844572 -0.9842057 -0.1770062 0.0038594 -0.9961872 -0.08715635 0.003254234 -0.9955868 -0.0937888 -0.002844572 -0.9842076 -0.1769953 -0.002253115 -0.9901556 0.1399521 -0.002253115 -0.9901565 0.139946 0.003622055 -0.9961881 0.08715653 -0.00282222 -0.999949 -0.00970155 -0.00282222 -0.9999491 -0.009698212 -5.13615e-4 -0.9278354 0.3729899 -5.13615e-4 -0.9278586 0.3729319 0.001050949 -0.9659247 0.2588209 0.006380021 -0.9570248 0.2899357 0.001606464 -0.9728122 0.23159 -4.33836e-5 -0.9063085 0.4226166 0.0161125 -0.8663364 0.4992012 0.006779193 -0.8913902 0.453186 5.56024e-4 -0.8368007 0.5475074 0.001954972 -0.8191505 0.5735754 0.006497502 -0.8369119 0.5472992 0.001178979 -0.698634 0.7154785 0.01082456 -0.7453528 0.6665825 0.001570641 -0.7071049 0.707107 -7.40421e-4 -0.7832344 0.621726 -7.40421e-4 -0.783237 0.6217229 0.00371921 -0.573574 0.8191454 -6.63338e-4 -0.6202836 0.7843775 -6.63339e-4 -0.6202843 0.7843767 -0.001293241 -0.3901927 0.9207323 -0.001293003 -0.3901953 0.9207311 0.002861917 -0.4226166 0.9063041 -0.002300024 -0.5223673 0.8527175 -0.002300024 -0.5223675 0.8527174 -0.001293241 -0.3901931 0.9207321 0.00153923 -0.2588188 0.9659246 0.00502628 -0.2843053 0.9587206 0 -0.05516707 0.9984772 0 -0.05516266 0.9984773 0.01077347 -0.1769343 0.9841637 -0.001117646 -0.08715492 0.9961942 -0.002136707 -0.1831687 0.9830791 -0.002136707 -0.1831768 0.9830777 0 0.06868678 0.9976382 0.001189708 0.08715474 0.9961941 0.002350926 0.06963151 0.99757 -0.001429259 0.3544914 0.9350582 0.001331031 0.282961 0.9591306 0.002644181 0.2588181 0.9659224 -0.001364052 0.2045984 0.978845 -0.001364052 0.2045941 0.978846 -0.001001477 0.4713336 0.8819544 -0.001001477 0.47134 0.881951 0.002619743 0.4226169 0.9063045 -0.001429498 0.3545027 0.9350539 -0.001429498 0.354501 0.9350545 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -6.27868e-4 -0.2182006 -0.9759037 0 -0.001056492 -0.9999995 -0.002663373 0.9466371 -0.3222904 -0.00109744 0.7675392 0.6410011 -0.00148344 0.6288023 0.7775638 -0.001479864 0.5735774 0.8191501 -0.001093089 0.7071052 0.7071074 0.01519429 0.7660538 0.6425969 0.002586066 0.7049354 0.7092669 -2.82037e-5 0.8561043 0.516803 0.002915918 0.8191486 0.5735741 0.003419399 0.8211396 0.5707173 0.003433406 0.8211956 0.5706365 -2.82036e-5 0.8562256 0.516602 1.20557e-4 0.9063085 0.4226166 0.007002592 0.8900108 0.4558855 0.001606464 0.9728122 0.23159 0.006384909 0.9570068 0.2899952 0.001045703 0.9659247 0.2588209 -5.15181e-4 0.9279715 0.3726509 -5.15181e-4 0.9279634 0.3726707 0.003622055 0.9961881 0.08715653 -0.002253115 0.9901565 0.1399461 -0.002253115 0.9901556 0.1399521 -0.002844572 0.9842076 -0.1769953 0.003254234 0.9955868 -0.0937888 0.0038594 0.9961872 -0.08715635 -0.00282222 0.9999491 -0.009698212 -0.00282222 0.999949 -0.00970155 -0.002657532 0.9659219 -0.2588201 0.009082138 0.9466626 -0.3220982 -0.002844572 0.9842057 -0.1770062 0.005082547 0.8924336 -0.4511501 0.001914501 0.9063069 -0.4226157 -5.54952e-4 0.8924608 -0.4511246 -9.9149e-4 0.7416621 -0.670773 0.001606047 0.8191516 -0.5735748 7.10232e-4 0.8224419 -0.5688487 -5.54951e-4 0.8924589 -0.4511284 -9.9149e-4 0.7416615 -0.6707736 6.21169e-4 0.7071056 -0.7071077 0.007644534 0.7409376 -0.6715303 0.006141483 0.5947439 -0.8038918 0.00614041 0.5947355 -0.803898 0.002920985 0.5735741 -0.8191485 -0.001841723 0.6552972 -0.7553688 -0.001841723 0.6552964 -0.7553696 5.72052e-4 0.3815829 -0.9243345 0.004704773 0.4470645 -0.8944894 0.004704773 0.4470643 -0.8944895 4.53365e-4 0.4226183 -0.9063076 -2.77495e-4 0.541582 -0.8406479 -2.77495e-4 0.5415775 -0.8406509 8.51753e-6 0.1845014 -0.9828323 8.15492e-4 0.234167 -0.9721961 8.15491e-4 0.234167 -0.972196 0.007727503 0.3127523 -0.9498033 4.53859e-4 0.2588191 -0.9659258 -6.15476e-4 0.3191319 -0.94771 -6.15476e-4 0.3191369 -0.9477084 0 0.005649864 -0.9999841 1.40547e-4 0.02724719 -0.9996288 1.4037e-4 0.02722644 -0.9996293 6.39743e-4 0.04525965 -0.9989751 0.001545965 0.07392913 -0.9972623 0.001545608 0.07391786 -0.9972631 0.005670964 0.1310051 -0.9913655 0.001902818 0.08715587 -0.9961929 -2.82002e-5 0.1399064 -0.9901648 -2.82001e-5 0.1399657 -0.9901564 0 -0.08715587 -0.9961947 -6.23593e-4 -0.09385389 -0.9955857 0 -0.09618717 -0.9953633 0.0619263 -0.149834 -0.98677 4.47222e-4 -0.07411456 -0.9972497 -0.001074731 -0.3568994 -0.9341422 -0.001074731 -0.3568994 -0.9341421 -0.001069426 -0.2588189 -0.9659252 0.006022155 -0.34982 -0.9367976 -6.27905e-4 -0.2181963 -0.9759047 0.007093071 -0.648176 -0.7614576 -0.001124441 -0.5735761 -0.8191515 -0.001129925 -0.6537988 -0.7566677 -4.38618e-4 -0.5445148 -0.8387511 -4.38641e-4 -0.5445142 -0.8387515 -4.34912e-4 -0.4226183 -0.9063076 0.009955883 -0.5359524 -0.8441895 0.002953231 -0.4519836 -0.8920214 -3.96733e-4 -0.7071067 -0.7071067 0.003914296 -0.7386757 -0.6740496 0.003914475 -0.7386782 -0.6740469 -8.63345e-4 -0.8191514 -0.5735767 0.01100969 -0.8807293 -0.4734919 6.25647e-4 -0.8151214 -0.57929 6.25124e-4 -0.8151169 -0.5792961 -3.97301e-4 -0.7410604 -0.6714382 -5.56403e-4 -0.9063076 -0.4226182 0.01327538 -0.9529995 -0.3026809 0.004772901 -0.9228478 -0.385135 0.004773736 -0.9228514 -0.3851265 -8.69703e-4 -0.8843075 -0.4669042 -0.001122176 -0.9961941 -0.0871548 0.006137371 -0.9996654 -0.02512806 0.001907169 -0.9952265 -0.09757453 -0.001348018 -0.9852246 -0.1712623 -0.001347959 -0.9852257 -0.1712561 -0.001342594 -0.9659249 -0.2588188 0.008377969 -0.9845764 -0.1747549 -5.613e-4 -0.9550591 -0.2964151 -1.60052e-4 -0.9961947 0.08715498 0.01170188 -0.982488 0.1859581 0.002121448 -0.9949675 0.1001762 0.002121627 -0.994967 0.1001812 -0.001124501 -0.9997256 -0.02339679 0.005898714 -0.951942 0.3062219 0.001307129 -0.9705528 0.2408851 -1.60864e-4 -0.9824165 0.1867023 0 -0.6287378 0.7776173 0 -0.7071068 0.7071068 0 -0.7071068 0.7071068 0 -0.819151 0.573578 0 -0.819151 0.573578 0 -0.9063078 0.4226184 0 -0.9063078 0.4226184 0 -0.9659258 0.2588191 -3.47847e-4 -0.4506248 0.8927135 -3.47847e-4 -0.4506347 0.8927084 4.78784e-4 -0.5735779 0.8191509 0.00206542 -0.5621381 0.8270409 0.00206691 -0.5621264 0.8270487 0.006196916 -0.3797028 0.9250878 0.001275539 -0.422618 0.9063071 -9.80684e-4 -0.2988253 0.9543073 -0.001679658 -0.1643236 0.9864051 -0.001679658 -0.164321 0.9864055 0.002459406 -0.2588183 0.965923 -9.80746e-4 -0.298821 0.9543087 -9.80684e-4 -0.2988183 0.9543095 0 0.07447266 0.997223 0 0.07447069 0.9972233 0 -0.0871548 0.9961948 0.004899263 -0.05060249 0.9987068 0.004900574 -0.05058252 0.9987079 0.002709031 0.2588181 0.9659223 -0.001286447 0.2223902 0.9749569 -0.001275062 0.08715486 0.9961939 0.01691061 0.2135152 0.9767934 0.01691281 0.2135319 0.9767897 0.001468837 0.4262282 0.9046145 -4.57736e-4 0.3278641 0.9447249 -4.57736e-4 0.3278683 0.9447233 0.010082 0.6254638 0.780188 -5.17079e-4 0.5377492 0.8431047 -5.12797e-4 0.4226183 0.9063076 0.01975274 0.5299633 0.8477904 0.001468956 0.4262292 0.904614 -0.01620388 0.9998687 0 0.4798187 0.8773633 0.002767801 0.9915797 0.129494 0.001072466 0.9826124 0.1820434 0.03651267 0.984452 0.1742078 0.0224967 0.9841824 0.1767892 0.01142287 0.9867268 0.1608674 0.02217918 0.9873089 0.1585679 0.008794248 0.9848304 0.1735184 -6.51541e-4 0.9848338 0.1734993 -6.44306e-4 0.9774799 0.2107899 -0.01002949 0.9863439 0.1646953 0.001072168 0.9950056 0.09980493 -0.001683831 0.995007 0.09979063 -0.001684606 0.9037916 0.4279721 -8.37655e-4 0.9589761 0.2834861 6.85536e-4 0.9659258 0.2588185 6.85068e-4 0.9599615 0.2801272 -0.001637637 0.959996 0.280009 -0.001624882 0.8478075 0.530304 4.11148e-5 0.8478142 0.5302934 4.14421e-5 0.9063085 0.4226169 4.11869e-5 0.8583735 0.5128643 -0.01284343 0.9037939 0.4279673 -8.37241e-4 0.6957546 0.7182734 -0.003006279 0.7848564 0.6196753 0.001726448 0.8191497 0.5735772 0.00172311 0.7917965 0.6107598 -0.005539119 0.791788 0.6107708 -0.005540847 0.5895653 0.8077206 -2.57854e-4 0.6922392 0.7216681 2.66555e-4 0.7071092 0.7071045 2.66411e-4 0.6957678 0.7182605 -0.003002941 0.6957489 0.7182788 -0.003006935 0.5735737 0.8191494 0.002753019 0.5040141 0.8634533 -0.02044707 0.5895927 0.8077006 -2.57123e-4 0.2833688 0.9590101 -0.001395285 0.3795627 0.9251654 0.00111705 0.4226185 0.9063071 0.001115441 0.3924568 0.9196863 -0.01243716 0.3924606 0.9196848 -0.01243644 0.08715277 0.996195 0 0.03732401 0.9983318 -0.0440514 0.09014862 0.9958608 -0.01159536 0.1753154 0.9844993 0.005053579 0.1752955 0.9845028 0.005050897 0.2588152 0.9659137 0.005033791 0.1995007 0.979366 -0.03227657 0.2833704 0.9590095 -0.001395046 -0.2358304 0.9717762 -0.005925834 -0.2587952 0.9658433 -0.01310575 -0.2389079 0.9706806 -0.02649962 -0.2388913 0.9706844 -0.02651011 -0.1832386 0.9830685 -4.31994e-6 -0.124035 0.9922779 1.40771e-5 -0.08715277 0.996195 1.41326e-5 -0.137067 0.9892942 -0.05009609 -0.06601309 0.9977818 -0.008593499 -0.4457928 0.8951306 0.003171622 -0.4456641 0.8951948 0.003128528 -0.422587 0.9062396 -0.01224464 -0.3269618 0.9450141 0.006662487 -0.3269606 0.9450144 0.006662487 -0.6970798 0.7169932 6.223e-4 -0.5779501 0.8160718 -6.68103e-4 -0.577953 0.8160698 -6.67926e-4 -0.5779436 0.8160763 -6.70024e-4 -0.5735719 0.8191469 -0.003701508 -0.4456745 0.8951896 0.003131568 -0.4456704 0.8951916 0.003131568 -0.6971426 0.7169321 6.22299e-4 -0.7071059 0.7071012 -0.003061115 -0.6991146 0.714994 -0.00474298 -0.8593104 0.5114355 0.004413247 -0.8593136 0.5114302 0.004413843 -0.8191273 0.5735615 -0.00759083 -0.787106 0.6168127 0.002506136 -0.7871118 0.6168053 0.002506136 -0.8593159 0.5114262 0.004413247 -0.9062917 0.422609 -0.006081759 -0.9234064 0.3838135 0.002809643 -0.9920158 0.1261056 0.001413524 -0.9676402 0.2523273 -0.001832306 -0.9676409 0.2523247 -0.001832187 -0.9659202 0.258817 -0.003465056 -0.9234032 0.3838211 0.002806723 -0.9234001 0.3838287 0.002806723 -0.9920209 0.126066 0.001413524 -0.9961798 0.08715623 -0.005440473 -0.9991461 0.04130542 -9.92647e-4 -0.8191517 -0.5735769 0 -0.906308 -0.4226178 0 -0.906308 -0.4226178 0 -0.9659261 -0.2588179 0 -0.9659261 -0.2588179 0 -0.9946149 -0.1036399 0 -0.9961881 -0.08715695 -0.00363034 -0.9999804 -0.006241142 5.29749e-4 -0.9999802 -0.006262838 5.29749e-4 -0.707108 -0.7071056 3.2173e-7 -0.7071068 -0.7071068 0 -0.8191517 -0.5735769 0 -0.08715516 -0.9961948 0 -0.2588173 -0.9659262 0 -0.2588173 -0.9659262 0 -0.4226187 -0.9063076 0 -0.4226187 -0.9063076 0 -0.5735758 -0.8191525 0 -0.5735758 -0.8191524 0 -0.5735759 -0.8191525 0 -0.7071108 -0.7071027 0 0.08715498 -0.9961929 -0.001948595 0.07925969 -0.9968541 0 -0.08715516 -0.9961948 0 0.3996618 -0.9166615 0.001514971 0.3193044 -0.9476522 -3.72331e-4 0.2588168 -0.9659193 -0.003697395 0.234655 -0.9720772 0.00172621 0.2346548 -0.9720773 0.00172621 0.3996512 -0.916666 0.001514971 0.4226156 -0.906301 -0.003840208 0.5314598 -0.847078 0.003043234 0.6065785 -0.7950224 -0.001378118 0.5735676 -0.8191407 -0.005358576 0.5315425 -0.8470263 0.003028869 0.5314679 -0.847073 0.003043234 0.7070981 -0.7070956 -0.005292773 0.6714956 -0.7410051 0.002251565 0.6714918 -0.7410085 0.002251565 0.8184084 -0.5746168 -0.004840612 0.765025 -0.6437168 -0.01911664 0.8191514 -0.5735767 -9.39403e-4 0.7615575 -0.6480914 0.002762913 0.7615432 -0.6481084 0.002762913 0.9166938 -0.3995904 -4.67764e-4 0.9167135 -0.3995448 -4.60764e-4 0.9063 -0.422614 -0.004229426 0.8641276 -0.5032675 0.0023126 0.8641327 -0.5032588 0.00231266 0.9625493 -0.2710801 -0.003771603 0.9625496 -0.2710794 -0.003771483 0.9659251 -0.2588177 -0.001462519 0.9412639 -0.3376718 6.34664e-5 0.9412192 -0.3377965 6.34664e-5 0.9999379 -0.01113933 3.6949e-4 0.9981071 0.06135141 -0.004256069 0.9981065 0.06136286 -0.004254937 0.9961938 0.08715742 -0.001267015 0.9999372 -0.01118773 3.67856e-4 0.9999372 -0.01119053 3.67856e-4 0.996349 -0.0853427 -0.00230056 0.9863405 -0.1642524 -0.01239055 0.9961939 -0.08715742 -0.001207351 0.9839271 -0.1785679 9.37387e-4 0.9839247 -0.1785813 9.37387e-4 -0.1216969 -0.2084967 -0.970422 -0.04227381 -0.07449966 -0.9963246 -0.3553407 -0.9006074 -0.2502785 -0.2927183 -0.8921562 -0.3440542 -0.2415679 -0.9402254 -0.2400439 -0.004458904 -0.01820862 -0.9998243 -0.02617067 -0.1087682 -0.9937226 -0.01784682 -0.08375322 -0.9963267 -0.0137273 -0.1103526 -0.9937977 -0.007930457 -0.02482259 -0.9996605 -0.007945179 -0.05071479 -0.9986816 -0.004459023 -0.01820933 -0.9998242 -0.05199444 -0.1960228 -0.9792199 -0.05412763 -0.2042448 -0.9774222 -0.04972833 -0.1966109 -0.9792197 -0.07484233 -0.288032 -0.9546917 -0.07474082 -0.2875346 -0.9548496 -0.07497769 -0.2879837 -0.9546956 -0.07497769 -0.2879837 -0.9546956 -0.09296911 -0.3707053 -0.9240856 -0.09748989 -0.3788957 -0.92029 -0.1107608 -0.4519668 -0.8851317 -0.09749382 -0.37891 -0.9202837 -0.0974906 -0.3788976 -0.9202892 -0.1649306 -0.6715449 -0.7223748 -0.1951048 -0.8311921 -0.5206284 -0.1964139 -0.7889871 -0.5821694 -0.1912712 -0.7350283 -0.6504988 -0.1912702 -0.7350248 -0.6505032 -0.1890134 -0.7315667 -0.6550451 -0.1896247 -0.7354169 -0.6505417 -0.1896229 -0.7354102 -0.6505498 -0.219738 -0.8998888 -0.3767166 -0.2284286 -0.875583 -0.4256464 -0.2345231 -0.8962628 -0.3764462 -0.2336638 -0.9463526 -0.2231998 -0.2336643 -0.9463543 -0.2231911 -0.2226895 -0.9383167 -0.2645207 -0.2108201 -0.9516609 -0.2233749 -0.2047676 -0.9033363 -0.3769001 -0.2108724 -0.8275406 -0.5202974 -0.2108648 -0.8275136 -0.5203434 -0.2135392 -0.8360275 -0.5054297 -0.2156572 -0.8263837 -0.5201749 -0.2156582 -0.8263875 -0.5201685 -0.3027653 -0.9164938 -0.2614812 -0.3012554 -0.9179531 -0.2580838 -0.3038545 -0.9238566 -0.232726 -0.3673237 -0.9211088 -0.1289646 -0.2439327 -0.9468054 -0.2098963 -0.243987 -0.9467916 -0.2098954 -0.2439337 -0.9468053 -0.209895 -0.2579762 -0.9358684 -0.2399971 -0.2560519 -0.9306262 -0.2614812 -0.2574332 -0.9294021 -0.2644613 -0.2490997 -0.90531 -0.3440391 -0.2145225 -0.9385857 -0.2702533 -0.2345234 -0.8962667 -0.3764371 -0.3423098 -0.5731165 -0.7445545 -0.3487763 -0.6046761 -0.7160461 -0.4061385 -0.6647285 -0.6270467 -0.4123771 -0.7085919 -0.5725753 -0.395828 -0.6711542 -0.6267953 -0.3958155 -0.6711344 -0.6268243 -0.3866161 -0.6573639 -0.6468389 -0.3894237 -0.6750807 -0.6265902 -0.3894188 -0.6750729 -0.6266018 -0.4330916 -0.8659427 -0.2501497 -0.4313945 -0.8680666 -0.2456811 -0.3623427 -0.9131628 -0.1866589 -0.3906245 -0.8899991 -0.2351896 -0.3887088 -0.8867531 -0.2501488 -0.3903769 -0.8848395 -0.2542927 -0.4920682 -0.7988597 -0.3459653 -0.4920627 -0.7988728 -0.3459429 -0.4790891 -0.8236196 -0.3035199 -0.4705886 -0.8118538 -0.3456007 -0.4673727 -0.7819327 -0.4124852 -0.4376728 -0.7522023 -0.4925792 -0.4762892 -0.84862 -0.2302013 -0.4762841 -0.8486217 -0.2302055 -0.4335452 -0.8712616 -0.2300908 -0.4871261 -0.8614934 -0.1433089 -0.3623383 -0.9131645 -0.1866589 -0.4381022 -0.7519388 -0.4925998 -0.4381116 -0.7519531 -0.4925697 -0.4376027 -0.7512448 -0.4941005 -0.4376709 -0.7522 -0.4925845 -0.4376684 -0.7521962 -0.4925923 -0.0316689 -0.07978177 -0.9963092 -0.1074542 -0.1846414 -0.976914 -0.04528206 -0.07290685 -0.9963102 -0.03844135 -0.06774556 -0.9969618 -0.04356437 -0.06838136 -0.9967076 -0.1954565 -0.3438107 -0.9184721 -0.1928185 -0.3346466 -0.922406 -0.1976158 -0.3424901 -0.9185033 -0.1975853 -0.3424394 -0.9185289 -0.2713483 -0.4652836 -0.8425445 -0.2744418 -0.4775835 -0.8346232 -0.1954446 -0.3437912 -0.9184819 -0.1954554 -0.3438087 -0.9184731 -0.2425891 -0.4030781 -0.8824276 -0.2680463 -0.467383 -0.8424395 -0.2680606 -0.4674065 -0.8424219 -0.116117 -0.2122581 -0.9702903 -0.1160908 -0.2121752 -0.9703117 -0.1461268 -0.2622383 -0.9538753 -0.128533 -0.2040071 -0.9704949 -0.128534 -0.2040106 -0.970494 -0.385773 -0.8252254 -0.4125313 -0.3862669 -0.8214228 -0.4195979 -0.3682331 -0.7876628 -0.4939551 -0.3684646 -0.7836266 -0.5001633 -0.3472779 -0.7427876 -0.57242 -0.3472833 -0.7386521 -0.5777435 -0.3230447 -0.6908996 -0.6467612 -0.322866 -0.6867953 -0.6512064 -0.2957726 -0.6325117 -0.7158544 -0.2954561 -0.6285703 -0.7194477 -0.2657772 -0.5683081 -0.7787093 -0.2653704 -0.5646446 -0.7815082 -0.2334614 -0.4991543 -0.8344703 -0.2330105 -0.4958659 -0.8365543 -0.1992821 -0.4260308 -0.8824876 -0.1988299 -0.4231955 -0.8839527 -0.1637343 -0.3500004 -0.922329 -0.1633178 -0.3476707 -0.9232835 -0.1273283 -0.272156 -0.9537917 -0.1269774 -0.2703604 -0.9543491 -0.09056729 -0.1935731 -0.9768966 -0.09030306 -0.1923149 -0.9771696 -0.03582137 -0.07691597 -0.9963939 -0.03581267 -0.07477915 -0.9965569 -0.02427828 -0.07599222 -0.9968128 -0.03166931 -0.07978177 -0.9963091 -0.03166908 -0.07978165 -0.9963092 -0.1361326 -0.5278182 -0.838377 -0.1334393 -0.4966631 -0.8576245 -0.1334396 -0.4966643 -0.8576238 -0.1653699 -0.6237608 -0.763921 -0.1653743 -0.6237777 -0.7639063 -0.1582117 -0.6002482 -0.7840096 -0.1569857 -0.6256334 -0.7641586 -0.1239147 -0.4987083 -0.8578667 -0.4920713 -0.7988637 -0.3459518 -0.4920706 -0.7988629 -0.3459542 -0.5179555 -0.8207832 -0.2409088 -0.503116 -0.8431268 -0.1897668 -0.5031195 -0.8431305 -0.189741 -0.3778263 -0.8621779 -0.3374857 -0.4075765 -0.8640356 -0.2955062 -0.4201791 -0.8454686 -0.3295944 -0.4604324 -0.8242311 -0.3296136 -0.4751319 -0.8449206 -0.2456802 -0.4734392 -0.8472373 -0.2409238 -0.4746621 -0.8488492 -0.2327036 -0.4950059 -0.8371367 -0.2327476 -0.4818611 -0.8555124 -0.1894951 -0.2713587 -0.4653006 -0.8425317 -0.2713451 -0.4652792 -0.842548 -0.3218465 -0.5386006 -0.7786682 -0.3323314 -0.5793638 -0.7442402 -0.3323522 -0.5793972 -0.7442048 -0.3553295 -0.9006118 -0.2502785 -0.3479747 -0.9081279 -0.232846 -0.3454967 -0.9033091 -0.2542927 -0.3471037 -0.9016166 -0.2580823 -0.3362922 -0.8792173 -0.337468 -0.3216066 -0.897238 -0.3025445 -0.3037802 -0.8553683 -0.4195981 -0.3044958 -0.8522019 -0.4254813 -0.2898101 -0.8159947 -0.5001628 -0.2903255 -0.8126199 -0.5053316 -0.273188 -0.7691434 -0.5777429 -0.273523 -0.7656713 -0.5821792 -0.2540232 -0.715125 -0.6512054 -0.2542018 -0.7116746 -0.6549053 -0.2325019 -0.6544764 -0.7194466 -0.2325527 -0.6511508 -0.7224416 -0.2088716 -0.5878943 -0.7815069 -0.2088246 -0.5847949 -0.7838413 -0.1834434 -0.5162633 -0.8365529 -0.1833297 -0.5134786 -0.8382899 -0.1565706 -0.4405855 -0.8839514 -0.1564193 -0.4381754 -0.8851754 -0.1286379 -0.3619421 -0.9232823 -0.1284761 -0.3599591 -0.9240797 -0.1000384 -0.2814462 -0.9543482 -0.09988832 -0.279914 -0.9548143 -0.07116127 -0.2001922 -0.9771689 -0.07104116 -0.1991212 -0.9773964 -0.02755993 -0.07792109 -0.9965785 -0.02597361 -0.08129805 -0.9963514 0.002713501 -0.5211603 -0.8534547 0.00271368 -0.5211595 -0.853455 0.002708554 -0.5211611 -0.853454 -0.03885453 -0.6224803 -0.7816704 -0.06057816 -0.6436866 -0.7628879 -0.07622689 -0.5396117 -0.8384562 -0.07994347 -0.5074869 -0.8579429 -0.05229175 -0.5571598 -0.8287573 -0.0522899 -0.5571548 -0.8287607 0.01376193 -0.7004833 -0.7135361 0.01376479 -0.7004815 -0.7135378 0.02107423 -0.6967548 -0.7169999 -0.03944307 -0.6219733 -0.7820445 -0.03944021 -0.6219671 -0.7820495 0.08620828 -0.7767804 -0.6238433 -0.04334133 -0.6381741 -0.7686711 0.0881704 -0.7817358 -0.6173451 0.07927685 -0.7828615 -0.6171248 0.07927948 -0.7828606 -0.6171256 0.08453536 -0.8741965 -0.4781571 0.144792 -0.839818 -0.5232025 0.1275764 -0.8465114 -0.5168586 0.1083627 -0.8233789 -0.55705 0.1154294 -0.8476276 -0.5178836 0.1215668 -0.8472745 -0.5170565 0.116032 -0.8479464 -0.5172268 -0.1029577 -0.7525255 -0.6504652 -0.09904074 -0.7652631 -0.6360529 -0.08296966 -0.7556195 -0.6497348 -0.08297264 -0.7556268 -0.6497258 -0.03856045 -0.6221149 -0.7819759 -0.04756969 -0.6456585 -0.7621433 -0.06773364 -0.6832423 -0.7270434 -0.1076314 -0.6356623 -0.7644272 -0.0829721 -0.7556207 -0.6497331 0.0207116 -0.9697039 -0.2434038 -0.02655047 -0.9749568 -0.2208037 -0.04010921 -0.9730901 -0.2269076 -0.0400989 -0.9730911 -0.2269045 0.08453768 -0.8741945 -0.4781605 0.06790441 -0.9044124 -0.4212212 0.1331702 -0.8791648 -0.4575313 -0.005185902 -0.9670361 -0.2545863 0.07653152 -0.9321566 -0.3538744 0.03676116 -0.9481576 -0.3156671 0.03976207 -0.9283422 -0.3695943 0.03976005 -0.9283434 -0.3695914 0.1083593 -0.8233824 -0.5570456 0.05269271 -0.8197789 -0.570251 0.03710412 -0.8392505 -0.5424774 0.04720538 -0.8516426 -0.5219929 0.004339635 -0.8974266 -0.4411424 0.01322948 -0.9079943 -0.4187734 -0.0276888 -0.9414314 -0.3360658 -0.02006846 -0.949832 -0.312116 -0.0642392 -0.9740711 -0.2169303 -0.05034011 -0.9775816 -0.2044509 -0.1070753 -0.9732248 -0.2033925 -0.1479971 -0.9676977 -0.204103 -0.1602727 -0.9614781 -0.2233216 -0.160248 -0.9614838 -0.2233149 -0.1602704 -0.9614781 -0.2233232 -0.1600524 -0.9341936 -0.3188504 -0.1731262 -0.9098864 -0.3770065 -0.1452988 -0.9638835 -0.2231971 -0.1081392 -0.8473346 -0.5199326 -0.1735218 -0.9098084 -0.3770129 -0.1229251 -0.8957452 -0.4272351 -0.1223352 -0.9183571 -0.3763698 -0.1223365 -0.9183597 -0.3763632 -0.1253663 -0.844667 -0.5204045 -0.1253717 -0.8446792 -0.5203835 -0.1160924 -0.8367417 -0.5351504 -0.1081367 -0.847334 -0.5199343 -0.1081253 -0.8473069 -0.5199807 -0.04326397 -0.6381101 -0.7687287 0.05247181 -0.6210318 -0.782027 -0.02002024 -0.7680705 -0.6400523 -0.009212911 -0.7793869 -0.626475 -0.04524219 -0.8396967 -0.5411679 -0.03545409 -0.8493728 -0.5266013 -0.06937575 -0.8973168 -0.4359009 -0.06063538 -0.9052337 -0.4205655 -0.09197258 -0.9405314 -0.3270192 -0.08423256 -0.9466315 -0.311117 -0.1127611 -0.9696657 -0.2168716 -0.1070501 -0.973228 -0.2033897 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 2.2374e-6 1.52071e-6 1 1.7757e-7 -2.53596e-7 1 -1.65056e-6 -1.07854e-6 1 0 0 1 0 0 1 0 0 1 0 0 1 -0.002644121 -0.04297721 0.9990726 0.02230441 -0.03831094 0.9990169 -0.3025621 -0.9286788 0.2145038 0.125207 -0.8866367 0.4451948 0.01014423 -0.04237461 0.9990503 0.0163781 -0.04073137 0.999036 0.003718912 -0.04311794 0.9990631 0.05017203 -0.4856019 0.8727392 0.06672197 -0.6461043 0.7603272 0.5602941 -0.8232751 0.09104222 0.49663 -0.8672805 0.03439754 0.4877944 -0.8722813 0.03437954 0.4973136 -0.8659919 0.05231708 0.4213463 -0.9049881 0.05885577 0.4124512 -0.9083852 0.06870532 0.4973043 -0.8659973 0.05231708 0.3525505 -0.9317855 0.08651018 0.4118231 -0.9098521 0.05070263 0.4118068 -0.9098595 0.05070269 0.3280192 -0.9430256 0.05573421 0.3279573 -0.9430437 0.05579066 0.3279651 -0.943041 0.05579066 0.2416644 -0.9608717 0.1353659 0.2804992 -0.9579703 0.06010973 0.239122 -0.9691259 0.0601297 0.2092871 -0.972241 0.1046251 0.1429115 -0.9866775 0.07774192 0.1346906 -0.9864282 0.09390324 0.142905 -0.9866782 0.07774513 0.1429089 -0.9866778 0.07774192 0.04457741 -0.9953326 0.08559036 0.04457777 -0.9953327 0.08559042 -0.08872324 -0.9868499 0.1351128 -0.05240577 -0.9947445 0.08795928 -0.01601409 -0.9959997 0.08791035 -0.04899442 -0.9870002 0.1530692 -0.04894697 -0.9870078 0.1530349 -0.1504542 -0.9836211 0.09926158 -0.1504586 -0.9836202 0.09926468 -0.1504662 -0.9836192 0.09926468 -0.2489721 -0.962289 0.1096028 -0.2489596 -0.962293 0.1095957 -0.340158 -0.9246346 0.1712989 -0.3138177 -0.9474601 0.06195032 -0.4256969 -0.8763878 0.2252259 -0.4364956 -0.8920813 0.1168873 -0.533868 -0.8334565 0.1426017 -0.5071716 -0.8406862 0.189799 -0.3364769 -0.5767807 0.7443839 -0.3086507 -0.5579146 0.7703674 -0.2740416 -0.463563 0.8426213 -0.2280051 -0.4205929 0.8781317 -0.2019383 -0.33961 0.9186326 -0.274056 -0.463587 0.8426033 -0.2740424 -0.4635632 0.8426209 -0.2754706 -0.4883762 0.8280125 -0.2642489 -0.4698097 0.8422894 -0.2642362 -0.4697878 0.8423055 -0.2019279 -0.3395918 0.9186417 -0.2015309 -0.338919 0.9189773 -0.2015746 -0.3398504 0.9186236 -0.1439976 -0.2696256 0.952138 -0.2015758 -0.3398526 0.9186226 -0.2015771 -0.3398547 0.9186215 -0.1218965 -0.2083191 0.9704352 -0.1219201 -0.2083612 0.9704232 -0.1214617 -0.182895 0.9756006 -0.1322403 -0.201564 0.9705073 -0.1322415 -0.2015661 0.9705067 -0.008978724 -0.04192548 0.9990804 -0.008501529 -0.04219019 0.9990735 -0.009169101 -0.042813 0.999041 -0.002643406 -0.04297733 0.9990726 -0.03962624 -0.07098013 0.9966903 0.6757484 -0.5811813 0.453423 -0.04399502 -0.07880449 0.9959188 -0.04556035 -0.07464265 0.996169 -0.03049725 -0.08126753 0.9962257 -0.05334258 -0.07075577 0.9960663 -0.01522606 -0.04056453 0.9990609 -0.008977591 -0.04192584 0.9990803 0.05870264 -0.5683478 0.8206917 0.04126602 -0.3991789 0.915944 0.3840919 -0.5942866 0.7066094 0.06406551 -0.6517569 0.7557172 0.1644833 -0.6339008 0.7557216 0.162418 -0.6405307 0.7505603 0.2599905 -0.6075388 0.7505342 0.2587848 -0.6150655 0.7447985 0.3465139 -0.5699993 0.7450026 0.3067829 -0.4855551 0.8186089 0.3131879 -0.4810941 0.8188173 0.04821014 -0.4900959 0.8703343 0.1237093 -0.4766681 0.8703354 0.1222446 -0.4819305 0.86764 0.1956411 -0.4571198 0.867621 0.1948907 -0.4630697 0.8646295 0.2579292 -0.4306887 0.8648582 0.2342819 -0.3520645 0.9061802 0.05639106 -0.5735009 0.8172618 0.1447426 -0.5577889 0.8172645 0.1429913 -0.5638172 0.8134271 0.2288651 -0.534785 0.8134038 0.2279152 -0.5416247 0.8091337 0.3133472 -0.497394 0.8089578 0.313187 -0.4810924 0.8188187 0.01014375 -0.04237467 0.9990503 0.004668951 -0.0442695 0.9990088 0.01311749 -0.1325677 0.9910871 0.0136609 -0.1313905 0.9912366 0.02197289 -0.2227955 0.9746176 0.02287566 -0.2207681 0.9750581 0.03086078 -0.3133472 0.949137 0.03212028 -0.3104554 0.9500451 0.2302241 -0.3549533 0.9060932 0.02230376 -0.03831124 0.9990169 0.0179857 -0.04173851 0.9989667 0.05278378 -0.1251575 0.9907318 0.05300462 -0.1235979 0.9909158 0.08866167 -0.210465 0.9735726 0.08900701 -0.2077835 0.9741169 0.1246753 -0.2960966 0.9469862 0.1251405 -0.2922742 0.9481117 0.1639477 -0.2758768 0.9471077 0.1529103 -0.2088244 0.9659249 0.1385717 -0.1845592 0.9730035 0.0163787 -0.04073113 0.9990359 0.01138669 -0.04345679 0.9989904 0.03314656 -0.1303081 0.9909193 0.03355664 -0.1289321 0.9910855 0.05563575 -0.2190606 0.9741237 0.05630898 -0.2166882 0.9746156 0.07820945 -0.3081349 0.9481225 0.07913947 -0.30476 0.9491356 0.03965216 -0.4029107 0.91438 0.1017222 -0.3918707 0.9143796 0.1005303 -0.3962271 0.9126323 0.1608746 -0.375831 0.9126173 0.16028 -0.3807579 0.9106776 0.2299628 -0.3445399 0.91017 0.2302237 -0.3549526 0.9060936 0.08656764 -0.8383268 0.5382511 0.08747619 -0.8863996 0.4545807 0.05872666 -0.8498761 0.5237002 0.2205837 -0.868207 0.4444766 0.213065 -0.8210882 0.5295447 0.08290946 -0.8442253 0.5295373 0.08074861 -0.7820144 0.6180074 0.0592662 -0.9807953 0.1858173 0.137708 -0.9728869 0.1858159 0.1329646 -0.9748817 0.1786785 0.2110841 -0.9609978 0.1786805 0.2061915 -0.9634214 0.1711853 0.2830523 -0.9437043 0.1711835 0.2780457 -0.9465871 0.1632896 0.3535128 -0.921068 0.1632862 0.3484458 -0.9244285 0.1549757 0.4224931 -0.893019 0.1549728 0.4174192 -0.8968666 0.1462576 0.4892121 -0.8598142 0.1462572 0.1878504 -0.8382449 0.5119157 0.2584902 -0.8630948 0.4338783 0.3181686 -0.8429241 0.4338753 0.3235061 -0.8440266 0.4277418 0.1961 -0.7736137 0.60255 0.3140085 -0.7337349 0.6025212 0.3120718 -0.7419126 0.5934451 0.07410621 -0.7176703 0.692429 0.07741838 -0.7880585 0.6107128 0.1988806 -0.7664646 0.6107196 0.2098805 -0.8281081 0.5197952 0.3316847 -0.7871845 0.5199288 0.2956175 -0.7608409 0.577695 0.3675365 -0.7777919 0.5098594 0.3818255 -0.8192977 0.4277388 0.3874471 -0.8199956 0.421298 0.5234243 -0.7446285 0.4141924 0.5216816 -0.741127 0.4225863 0.548452 -0.8312166 0.09099143 0.5414588 -0.7999363 0.2586973 0.5607706 -0.7955378 0.229469 0.5581788 -0.7883264 0.2588008 0.5200389 -0.7908316 0.3227149 0.5161929 -0.7449802 0.4225511 0.5161944 -0.7449834 0.4225435 -0.4664003 -0.8143076 0.3455053 -0.4664002 -0.814308 0.3455044 -0.4716932 -0.780027 0.4111734 -0.4867284 -0.8021793 0.345838 -0.5058076 -0.8325888 0.2257316 -0.5289278 -0.8271391 0.1899375 -0.5289311 -0.8271416 0.1899172 -0.3738893 -0.9003836 0.2225224 -0.3465415 -0.8474209 0.4022274 -0.4450586 -0.8047376 0.3928362 -0.4663993 -0.8143084 0.3455047 -0.4664096 -0.8143224 0.3454577 0.4148811 -0.8781757 0.2380777 0.4094398 -0.8785116 0.2461231 0.3468461 -0.9050527 0.2461249 0.3415933 -0.9049313 0.2537983 0.2774657 -0.9266059 0.2537999 0.272459 -0.9260678 0.261083 0.2067131 -0.942924 0.2610823 0.2020015 -0.9420061 0.2679926 0.134666 -0.9539642 0.2679879 0.1302892 -0.9527053 0.2745496 0.06220716 -0.9595588 0.2745489 0.05819404 -0.9580272 0.2807086 -0.01073199 -0.9597319 0.2807125 -0.01435476 -0.9580019 0.2864024 -0.08313202 -0.9544961 0.286402 -0.4364992 -0.8920793 0.1168886 -0.3814017 -0.9169899 0.1168855 -0.3721029 -0.9020402 0.218776 -0.3047177 -0.9269775 0.2187691 -0.2954078 -0.906755 0.3008816 -0.2284439 -0.9258981 0.3008754 -0.2060845 -0.8590167 0.4686356 -0.08836883 -0.9748791 0.2044546 -0.08504813 -0.9763553 0.1987389 -0.01467978 -0.9799425 0.1987391 -0.01098531 -0.9812273 0.1925418 0.06379896 -0.9792193 0.1925081 0.06048929 -0.9921217 0.1097066 0.1436036 -0.9851737 0.09386658 -0.4324918 -0.7553364 0.4923593 -0.4324707 -0.7553015 0.4924312 -0.4319106 -0.7659659 0.4761822 -0.42691 -0.758602 0.49221 -0.4268987 -0.7585835 0.4922485 -0.4324691 -0.7553026 0.4924312 -0.3998792 -0.72771 0.5572564 -0.3874995 -0.6762478 0.6265246 -0.3875131 -0.6762708 0.6264914 -0.38449 -0.6715427 0.6334019 -0.3845772 -0.6780188 0.6264113 -0.3365048 -0.576826 0.7443361 -0.3364785 -0.5767809 0.7443829 -0.3415386 -0.6211459 0.7053574 -0.3845775 -0.6780161 0.626414 -0.3845527 -0.6779772 0.6264711 -0.04461598 -0.215683 0.9754436 -0.04355019 -0.2144511 0.9757634 -0.06276142 -0.3032677 0.9508364 -0.06127041 -0.3015105 0.9514921 -0.08071875 -0.3899341 0.9172982 -0.07880502 -0.3876597 0.9184279 -0.09821444 -0.4743876 0.8748202 -0.09590142 -0.4716473 0.8765567 -0.1149812 -0.5553171 0.8236518 -0.1122961 -0.5521855 0.826124 -0.1307598 -0.6314695 0.7642959 -0.1277374 -0.6280484 0.7676187 -0.1453079 -0.7016804 0.6975172 -0.1419943 -0.6980995 0.7017796 -0.1584221 -0.7649599 0.6242908 -0.1548726 -0.7613701 0.6295475 -0.1699468 -0.820536 0.5457461 -0.1662082 -0.8170858 0.5520378 -0.1797598 -0.8678522 0.4631619 -0.1758933 -0.8647045 0.4704759 -0.1868305 -0.9032979 0.3861962 -0.5122285 -0.8468971 0.1427836 -0.4481835 -0.8820878 0.145095 -0.4395402 -0.8693957 0.2257336 -0.4417765 -0.8690946 0.2225041 -0.4292783 -0.8489451 0.3082407 -0.3311491 -0.8920178 0.3076435 -0.3178058 -0.8629885 0.3927469 -0.3212123 -0.8647065 0.3861414 -0.3038544 -0.8251002 0.4763213 -0.307259 -0.8271728 0.4705072 -0.2869843 -0.7792988 0.5570757 -0.2903311 -0.7816174 0.5520709 -0.2673079 -0.7258754 0.6337596 -0.2705247 -0.7283166 0.6295801 -0.2450049 -0.6653342 0.7051972 -0.2480357 -0.6677869 0.7018113 -0.2203543 -0.5984184 0.7702853 -0.2231385 -0.6007724 0.7676469 -0.1936885 -0.5260357 0.828113 -0.1961772 -0.5281984 0.8261483 -0.1654043 -0.4492582 0.877957 -0.167556 -0.4511534 0.8765761 -0.1359272 -0.3692392 0.9193401 -0.1377082 -0.3708099 0.9184424 -0.1057014 -0.2871858 0.9520251 -0.1070929 -0.2884008 0.951502 -0.0751627 -0.2042763 0.9760234 -0.07615232 -0.2051228 0.9757692 -0.04494702 -0.122224 0.9914843 -0.02589339 -0.1276756 0.991478 -0.02652639 -0.1283859 0.9913695 0.4032229 -0.8534463 0.3302133 0.3976431 -0.8532168 0.3374924 0.3368756 -0.8789834 0.3374952 0.3315417 -0.8783223 0.3444274 0.2693241 -0.8993512 0.3444299 0.26428 -0.8983029 0.35101 0.2005355 -0.9146463 0.3510095 0.1958237 -0.9132482 0.3572545 0.1305756 -0.9248371 0.3572481 0.1262398 -0.9231319 0.3631679 0.06029409 -0.9297712 0.3631666 0.05634957 -0.9278287 0.3687259 -0.010374 -0.9294785 0.3687305 -0.073511 -0.8857756 0.458255 -0.08636051 -0.9526164 0.2916575 -0.154861 -0.9439046 0.2916544 -0.1618047 -0.9654164 0.204427 -0.1581059 -0.9649021 0.2096817 -0.1636347 -0.9783245 0.1269053 0.05006963 -0.07135081 0.9961938 0.06322425 -0.05414682 0.9965294 0.06645202 -0.05946576 0.9960161 0.06940591 -0.1165831 0.9907528 0.1391562 -0.2187476 0.965808 0.1391554 -0.2187463 0.9658083 0.5731872 -0.8164933 0.06924653 0.5730206 -0.8079959 0.137076 0.4841908 -0.8641304 0.1372509 0.4808048 -0.8461894 0.229761 0.4752418 -0.8470323 0.2380788 0.4676188 -0.8229316 0.3226706 0.4618533 -0.8231948 0.3302146 0.4495944 -0.7911701 0.4146258 0.443749 -0.7909448 0.4212993 0.398993 -0.688922 0.6051372 0.4471901 -0.7353712 0.5091661 0.4408415 -0.6909628 0.5729129 0.4343267 -0.6780663 0.5929472 0.4324954 -0.6964743 0.5726005 0.4324932 -0.69647 0.5726073 0.07110965 -0.7236288 0.6865165 0.1826164 -0.7038024 0.6865229 0.1802108 -0.7108103 0.6799064 0.2885155 -0.6741845 0.6798779 0.2869815 -0.6821793 0.6725125 0.3861691 -0.6311842 0.6726662 0.3840923 -0.5942873 0.7066085 0.003719866 -0.04311788 0.9990631 -0.002054154 -0.043985 0.9990302 -0.006910145 -0.1318958 0.9912395 -0.006290912 -0.1309562 0.9913682 -0.01167261 -0.2216174 0.9750638 -0.01063871 -0.2199991 0.9754421 -0.01645177 -0.3116506 0.9500544 -0.01500105 -0.3093348 0.9508349 -0.02117621 -0.4007173 0.915957 -0.01932108 -0.3977332 0.9172976 -0.02578073 -0.4874755 0.872756 -0.02353048 -0.4838756 0.8748204 -0.03018975 -0.5705443 0.8207119 -0.02756249 -0.5664232 0.8236535 -0.03433394 -0.6486048 0.7603506 -0.031358 -0.6440997 0.7642986 -0.0381543 -0.7204518 0.6924547 -0.03485423 -0.7157158 0.6975214 -0.04159253 -0.7850509 0.6180331 -0.03799927 -0.7802639 0.624295 -0.04460299 -0.8415868 0.538277 -0.04076123 -0.8369552 0.5457515 -0.04716396 -0.8895072 0.4544804 -0.04310703 -0.885222 0.4631671 -0.0486508 -0.9245595 0.3779193 -0.1498331 -0.9133564 0.3785896 -0.1576766 -0.941934 0.2964767 -0.2260351 -0.9279074 0.2964726 -0.2343723 -0.9492647 0.2096812 -0.231011 -0.9490175 0.214475 -0.2375459 -0.9628069 0.1287433 -0.2489831 -0.9622861 0.1096029 0 -1 0 0 -1 0 0.5843397 -0.8115092 0 0.5843397 -0.8115091 0 0.5190255 -0.8547586 0 0.5190255 -0.8547586 0 0.3818141 -0.9242391 0 0.3818141 -0.9242391 0 0.2328979 -0.9725012 0 0.2328979 -0.9725012 0 0.07827091 -0.9969321 0 0.07827091 -0.9969321 0 0.5865629 -0.8098942 0.003930628 0.5862988 -0.8087241 0.04710716 0.5643983 -0.8057199 0.1796387 0.02763158 -0.03815215 0.9988898 0.05039393 -0.07111603 0.9961943 0.1045891 -0.1460798 0.9837285 0.05183511 -0.07007128 0.9961943 0.1060989 -0.1449891 0.9837282 0.1510841 -0.210148 0.9659252 0.2008312 -0.2819067 0.9381873 0.1525287 -0.2090995 0.9659256 0.1525294 -0.2091004 0.9659254 0.2486092 -0.341761 0.9063073 0.2032557 -0.2801493 0.9381916 0.2471612 -0.342809 0.9063075 0.294582 -0.4068066 0.8647137 0.24861 -0.3417606 0.9063072 0.2953323 -0.406266 0.864712 0.3357083 -0.4650718 0.8191508 0.3761916 -0.5220311 0.7654824 0.3371573 -0.4640203 0.8191521 0.3371598 -0.4640237 0.8191492 0.3781495 -0.5206143 0.7654827 0.4140316 -0.573217 0.7071068 0.4483571 -0.6204317 0.6434597 0.4154824 -0.5721673 0.7071061 0.4812026 -0.6629104 0.5735799 0.4493596 -0.619713 0.6434531 0.479755 -0.6639636 0.5735743 0.5071303 -0.7003931 0.5022633 0.481202 -0.6629099 0.573581 0.5079307 -0.6998102 0.5022672 0.530878 -0.7345495 0.4226176 0.5490914 -0.7607242 0.3461176 0.5323253 -0.7335005 0.4226189 0.5323232 -0.7334976 0.4226267 0.5510303 -0.7593222 0.3461145 0.56585 -0.7828338 0.2588145 0.5762287 -0.7972959 0.1796651 0.5672938 -0.7817867 0.2588192 0.5837598 -0.8045209 0.1094104 0.5841297 -0.8065342 0.09107702 0.5841296 -0.8065339 0.09108084 -0.5295149 -0.8423609 0.1002101 -0.5151078 -0.8504124 0.1070648 -0.5151093 -0.8504097 0.1070783 -0.5151783 -0.8503293 0.1073843 -0.5177162 -0.8472805 0.1186829 -0.4403318 -0.8962361 0.05356317 -0.3487244 -0.936272 0.04226148 -0.3807549 -0.9110645 0.1580733 -0.3158265 -0.9446306 0.08903294 -0.4695641 -0.8742954 0.1229513 -0.3828474 -0.9161154 0.1189975 -0.4363219 -0.8918546 0.119242 -0.4363158 -0.8918578 0.1192402 0.01663154 -0.9975975 0.06724959 -0.05293685 -0.9955745 0.07764637 -0.0559948 -0.9956649 0.07426911 -0.05330288 -0.9961164 0.07007741 -0.1512328 -0.9848093 0.08531779 -0.1519483 -0.9847285 0.08497929 -0.1512704 -0.984876 0.08447831 -0.15195 -0.9847689 0.08450645 -0.1513075 -0.9849367 0.08370035 -0.2462018 -0.9654292 0.08562213 -0.249894 -0.9636375 0.09463447 -0.3146134 -0.9407079 0.1268351 -0.2499846 -0.9637824 0.09290492 -0.2499716 -0.9637857 0.09290456 0.183431 -0.9789866 0.08909767 0.1439301 -0.9842634 0.1025169 0.1439528 -0.9842572 0.102544 0.08883857 -0.9957861 0.02275502 0.04534852 -0.993723 0.1022652 0.01655685 -0.9957631 0.0904535 0.04358792 -0.996963 0.06453585 -0.05320066 -0.9960265 0.07142162 0.2779986 -0.9603672 -0.02028906 0.2405983 -0.9655889 0.0987448 0.2405955 -0.9655892 0.09874737 0.1841789 -0.9828776 0.005461394 0.1435291 -0.9853222 0.0924111 0.1435267 -0.9853222 0.09241431 0.3455652 -0.9376382 0.03767275 0.3293828 -0.9390959 0.09801012 0.2769487 -0.9567519 0.0890243 0.3238744 -0.9458647 -0.02110099 0.3239387 -0.9458426 -0.02110755 0.4966949 -0.8671808 0.03593933 0.4966961 -0.8671818 0.03589844 0.4966871 -0.8671867 0.03590685 0.411465 -0.9114067 0.005861878 0.4100875 -0.9119461 0.0135104 0.4114331 -0.9113423 0.01334112 0.4104349 -0.9116638 0.02030718 0.4104493 -0.9116581 0.02027076 -0.9881453 -0.1535217 0 -0.9972114 -0.06677901 0.03331685 -0.9958696 -0.08712714 -0.02554744 0.8191516 0.5735771 0 0.7071068 0.7071068 0 0.7071068 0.7071068 0 0.5735771 0.8191516 0 0.5735771 0.8191516 0 0.4226171 0.9063084 0 0.4226171 0.9063084 0 0.2588194 0.9659257 0 0.2588194 0.9659257 0 0.08715564 0.9961947 0 0.08715564 0.9961947 0 -0.08715564 0.9961947 0 -0.08715564 0.9961947 0 -0.2588201 0.9659255 0 -0.2588201 0.9659255 0 -0.422616 0.9063088 0 -0.422616 0.9063088 0 -0.5735784 0.8191507 0 -0.5735784 0.8191507 0 -0.7071053 0.7071082 0 -0.7071053 0.7071082 0 -0.8191516 0.5735771 0 -0.8191516 0.5735771 0 -0.9063084 0.4226171 0 -0.9063084 0.4226171 0 -0.9659257 0.2588194 0 -0.9659257 0.2588194 0 -0.9961947 0.08715564 0 -0.9961947 0.08715564 0 -0.9961947 -0.08715564 0 -0.9977653 -0.06681615 0 -0.9961947 0.08715564 0 -0.9961947 0.08715564 0 -0.9659257 0.2588194 0 -0.9659257 0.2588194 0 -0.9063084 0.4226171 0 -0.9063084 0.4226171 0 -0.8191516 0.5735771 0 -0.8191516 0.5735771 0 -0.7071053 0.7071082 0 -0.7071053 0.7071082 0 -0.5735784 0.8191507 0 -0.5735784 0.8191507 0 -0.422616 0.9063088 0 -0.422616 0.9063088 0 -0.2588201 0.9659255 0 -0.2588201 0.9659255 0 -0.08715564 0.9961947 0 -0.08715564 0.9961947 0 0.08715564 0.9961947 0 0.08715564 0.9961947 0 0.2588194 0.9659257 0 0.2588194 0.9659257 0 0.4226171 0.9063084 0 0.4226171 0.9063084 0 0.5735771 0.8191516 0 0.5735771 0.8191516 0 0.7071068 0.7071068 0 0.7071068 0.7071068 0 0.8191516 0.5735771 0 -0.9881453 -0.1535217 0 -0.9659257 -0.2588197 0 -0.9659257 -0.2588197 0 -0.9063085 -0.4226166 0 -0.9063085 -0.4226166 0 -0.8191506 -0.5735784 0 -0.8191506 -0.5735784 0 -0.7071068 -0.7071068 0 -0.7071068 -0.7071068 0 -0.5735775 -0.8191513 0 -0.5735775 -0.8191513 0 -0.4226172 -0.9063083 0 -0.4226172 -0.9063083 0 -0.2588188 -0.9659259 0 -0.2588188 -0.9659259 0 -0.08715701 -0.9961946 0 -0.08715701 -0.9961946 0 0.08715701 -0.9961946 0 0.08715701 -0.9961946 0 0.258818 -0.9659261 0 0.258818 -0.9659261 0 0.4226183 -0.9063077 0 0.4226183 -0.9063077 0 0.5735761 -0.8191522 0 0.5735761 -0.8191522 0 0.7071082 -0.7071053 0 0.7071082 -0.7071053 0 0.8191506 -0.5735784 0 0.8191506 -0.5735784 0 0.9063085 -0.4226166 0 0.9063085 -0.4226166 0 0.9659257 -0.2588197 0 0.9659257 -0.2588197 0 0.9961947 -0.08715564 0 0.9961947 -0.08715564 0 0.9961947 0.08715564 0 0.9961947 0.08715564 0 0.9659258 0.2588194 0 0.9659258 0.2588194 0 0.9063083 0.4226171 0 0.9063083 0.4226171 0 0.8191515 0.5735771 0 0.8191516 0.5735771 0 0.06975924 -0.9975639 0 0.06975924 -0.9975639 0 0.2079116 -0.9781476 0 0.2079116 -0.9781476 0 0.3420175 -0.9396936 0 0.3420175 -0.9396936 0 0.4694729 -0.882947 0 0.4694729 -0.882947 0 0.5877853 -0.8090169 0 0.5877853 -0.8090169 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0.9988024 0 0.04892486 0.9988027 0 0.04892003 0.9892286 6.37497e-5 0.1463788 0.991006 -7.63605e-5 0.1338174 0.9978458 4.66953e-5 0.06560319 0.9978433 4.65763e-5 0.06564092 0.9997375 3.65517e-4 0.02290934 0.9573115 6.7672e-4 0.2890576 0.9728369 -8.2303e-5 0.2314918 0.9892346 -3.1367e-4 0.1463376 0.9728358 1.84757e-4 0.2314964 0.9910101 6.37356e-5 0.1337873 0.9373839 0.001630723 0.3482942 0.9788143 -0.001659929 0.2047432 0.9788156 -0.001660048 0.204737 0.963646 -4.36395e-4 0.2671818 0.929184 -5.30904e-5 0.3696177 0.9374916 -5.31836e-5 0.348008 0.9291834 -2.64009e-5 0.3696191 0.9374786 -2.66319e-5 0.3480428 0.9291909 1.45173e-4 0.3696001 0.8948687 -1.43639e-4 0.4463297 0.8948709 -1.43693e-4 0.446325 0.8576731 7.8014e-4 0.5141949 0.8821 1.39094e-4 0.4710623 0.8820957 1.3912e-4 0.4710701 0.8816582 -0.002897262 0.4718798 0.7426114 0.00301975 0.6697158 0.8139429 5.84892e-4 0.5809446 0.813939 5.85014e-4 0.5809502 0.8577902 1.38911e-4 0.5139999 0.8218147 -4.94316e-4 0.5697548 0.8218067 -4.94227e-4 0.5697662 0.7780058 -1.45085e-4 0.6282571 0.727007 -1.08358e-4 0.6866301 0.7269949 -1.08358e-4 0.686643 0.7435958 2.42818e-4 0.6686294 0.7271113 1.96794e-4 0.6865195 0.6709988 -1.33178e-4 0.7414585 0.4872925 -2.85213e-5 0.8732388 0.5874733 6.71874e-4 0.8092432 0.5874742 6.71888e-4 0.8092426 0.4647569 -0.002486228 0.8854348 0.555783 -5.57533e-4 0.8313272 0.6709784 -1.33242e-4 0.7414769 0.6366294 1.98894e-4 0.77117 0.6708261 1.98593e-4 0.7416147 0.6366617 2.58794e-4 0.7711431 0.5557817 -5.57548e-4 0.8313282 0.4665755 1.98876e-4 0.8844814 0.4059665 -6.35328e-5 0.913888 0.466579 1.98869e-4 0.8844795 0.4872874 -2.84471e-5 0.8732417 0.4872956 -2.85215e-5 0.8732371 0.2147951 -1.91396e-5 0.9766591 0.19299 2.92756e-4 0.9812006 0.3169799 -1.83149e-4 0.9484322 0.3165715 3.37854e-4 0.9485686 0.346367 5.57911e-5 0.9380992 0.3167936 5.55833e-5 0.9484946 0.3462423 -1.00337e-4 0.9381452 0.3462478 -1.00337e-4 0.938143 0.06611812 1.05888e-4 0.9978118 9.375e-4 0 0.9999996 0.2060948 -0.01032853 0.9784776 0.09668982 0 0.9953145 0.09668982 0 0.9953146 0.09668982 0 0.9953146 0.09668982 0 0.9953147 0.09718114 -1.95217e-5 0.9952667 0.09760451 0 0.9952253 0.09760445 0 0.9952253 0.09760445 0 0.9952253 0.09760451 0 0.9952253 0.1808144 0.0145663 0.9834094 0.1808112 0.01456582 0.98341 0.2060943 -0.01032853 0.9784776 0.07327711 -6.73998e-5 0.9973116 9.375e-4 0 0.9999996 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0.006347477 0.04216367 0.9990906 0.06166189 0.9275615 0.368548 0.55864 0.7879974 0.2588077 0.5488775 0.8309354 0.09099304 -0.007620155 0.04179835 0.9990971 -6.6075e-4 0.04249083 0.9990967 -0.02317607 0.4875552 0.8727845 -0.0309171 0.6487413 0.7603808 0.01999306 0.03838819 0.9990628 0.01326543 0.04078036 0.9990801 0.04888242 0.07221037 0.9961908 0.5251185 0.8497497 0.04664808 0.4687601 0.8826953 0.03336137 0.3774319 0.925257 0.03800809 0.2849273 0.9558606 0.07174235 -0.5032693 0.8557003 0.120404 -0.4121016 0.9047003 0.1081175 -0.4491446 0.8849607 0.1229375 -0.4054052 0.8950716 0.1857247 -0.5032611 0.8557052 0.120404 -0.4121095 0.9046969 0.1081175 -0.37774 0.9132118 0.15283 -0.3142753 0.9422633 0.1156325 -0.3136387 0.941306 0.1247944 -0.3136636 0.9412978 0.1247943 -0.2357072 0.9619902 0.1379013 -0.2151161 0.9715976 0.09860622 -0.162795 0.9785057 0.1265871 -0.1079765 0.9768436 0.1847093 -0.215111 0.9715988 0.09860622 -0.01222783 0.994651 0.1025676 -0.0122143 0.9946511 0.1025676 -0.08786702 0.9879619 0.1273213 -0.1134567 0.989315 0.0915606 -0.1134594 0.9893147 0.0915606 -0.01237207 0.994969 0.09941595 -0.01239728 0.9949687 0.09941583 0.06206834 0.9913501 0.115639 0.08578628 0.9934612 0.07533633 0.1363209 0.9850861 0.1049854 0.1911097 0.9687634 0.1580331 0.08578526 0.9934613 0.07533633 0.2851082 0.9554045 0.0769124 0.28512 0.955401 0.0769124 0.2098275 0.9730755 0.09537589 0.1877754 0.9802234 0.06246984 0.1877806 0.9802225 0.06246978 0.3774107 0.9252663 0.03799122 0.3469647 0.5697413 0.7449903 0.2346126 0.3518285 0.9061863 0.2582463 0.430501 0.8648571 0.3136266 0.480787 0.8188298 0.3206581 0.4932898 0.8086059 0.3071756 0.4852774 0.8186263 0.3071834 0.4852914 0.818615 0.2346122 0.3518279 0.9061866 0.2258796 0.3467129 0.9103673 0.230545 0.3547253 0.906101 0.164142 0.2757591 0.9471085 0.1531592 0.2086439 0.9659244 0.1531586 0.2086429 0.9659247 0.1236212 0.1923845 0.973502 0.1393429 0.2186136 0.9658114 0.06948661 0.1165328 0.9907532 0.0666092 0.0593515 0.9960124 0.0457378 0.02505445 0.9986392 0.04396259 0.08441293 0.9954606 -0.0271635 0.5706536 0.8207414 -0.01901692 0.4007774 0.915978 -0.03310805 0.6439312 0.7643667 -0.127847 0.6319717 0.7643736 -0.1290659 0.6277037 0.7676784 -0.2209916 0.6015527 0.7676569 -0.2214331 0.5979818 0.7703152 -0.02488154 0.4837239 0.8748669 -0.09599 0.4747467 0.8748723 -0.09692573 0.471357 0.8766003 -0.1659137 0.4517376 0.8765876 -0.166237 0.4489096 0.877978 -0.335938 0.5771636 0.7443306 -0.3359175 0.5771303 0.7443655 -0.3081969 0.5582145 0.7703319 -0.2638207 0.47005 0.8422896 -0.2638332 0.4700719 0.8422734 -0.02912348 0.5662635 0.8237096 -0.1124007 0.5557502 0.8237159 -0.113478 0.5518664 0.8261758 -0.1942741 0.5288857 0.8261582 -0.1946498 0.5256409 0.8281384 -0.2750458 0.4886634 0.8279843 -0.273581 0.4638583 0.8426085 -0.007621049 0.04179823 0.999097 -0.002007126 0.0441696 0.9990221 -0.00668621 0.1309056 0.9913723 -0.006177544 0.131908 0.9912427 -0.0112887 0.2199115 0.9754546 -0.01045417 0.2216434 0.9750717 -0.01589679 0.309226 0.9508557 -0.01475501 0.3116915 0.9500688 -0.2012673 0.3401227 0.9185902 -0.2012379 0.3400721 0.9186155 -0.1438036 0.2697637 0.9521281 -0.04204815 0.07599395 0.9962213 -0.04205584 0.07599037 0.9962213 -0.02944737 0.08198249 0.9961987 -0.1319829 0.2017368 0.9705064 -0.1319816 0.2017347 0.9705072 -0.1212223 0.1830599 0.9755994 -0.1060189 0.2887755 0.9515087 -0.1062532 0.2869483 0.9520352 -0.07537811 0.2053895 0.9757732 -0.07556259 0.2041008 0.9760293 -0.04484492 0.1222806 0.9914819 -0.06010347 0.02700328 0.9978268 -0.01439982 0.04008895 0.9990924 -0.007847666 0.04305398 0.9990419 -0.008547484 0.04267746 0.9990524 -0.02619332 0.1275828 0.991482 -0.02589714 0.1284796 0.991374 -0.04404383 0.2142977 0.9757748 -0.04357022 0.2158352 0.9754573 -0.06194847 0.3013054 0.9515132 -0.061311 0.3034914 0.9508596 -0.2735946 0.4638821 0.8425909 -0.2735803 0.4638581 0.8426088 -0.2276858 0.4208127 0.8781091 -0.2015926 0.3398346 0.9186255 -0.2015821 0.3398161 0.9186347 -0.02045029 0.3975979 0.9173319 -0.07887142 0.3902218 0.9173366 -0.07966119 0.3874105 0.9184591 -0.1363446 0.371293 0.9184507 -0.1366233 0.3689432 0.9193558 -0.2011923 0.3391541 0.9189648 -0.2012366 0.3400684 0.9186171 -0.01334434 0.9799845 0.1986258 -0.08378684 0.9764875 0.198625 -0.08711153 0.9750041 0.204398 -0.1576442 0.96611 0.2044011 -0.1605818 0.9645007 0.2096471 -0.2302103 0.9502903 0.2096466 -0.04022657 0.8418098 0.5382733 -0.03437793 0.7206181 0.6924793 -0.0128864 0.9295207 0.3685445 -0.008852243 0.9274989 0.373721 -0.08273708 0.9238425 0.3737239 -0.07890671 0.9222334 0.3784959 -0.1490328 0.9135047 0.378548 -0.3618561 0.8798309 0.3081519 -0.4284498 0.8493863 0.3081782 -0.5284194 0.8274657 0.1899306 -0.528422 0.827469 0.1899085 -0.5284175 0.8274656 0.1899358 -0.3035497 0.9273835 0.2186724 -0.3712626 0.9024122 0.2186691 -0.3730459 0.9007489 0.2224594 -0.4390902 0.8704664 0.2224591 -0.4405195 0.8689013 0.225728 -0.5053548 0.8328674 0.2257174 -0.4862753 0.8024376 0.3458761 -0.3111659 0.8439181 0.4370103 -0.284523 0.8771687 0.3868099 -0.2967894 0.9063459 0.3007545 -0.4262135 0.7589837 0.4922252 -0.1776707 0.864328 0.4705001 -0.3043713 0.8282585 0.4704742 -0.305301 0.8245578 0.4763359 -0.4312291 0.7663868 0.4761224 -0.3868632 0.6766248 0.6265109 -0.3838719 0.6719361 0.6333596 -0.2685921 0.7253727 0.6337924 -0.267957 0.7292659 0.6295796 -0.1564527 0.7609983 0.6296063 -0.154939 0.76561 0.6243678 -0.04008352 0.780107 0.6243609 -0.03749585 0.7852434 0.6180509 -0.4317697 0.7557193 0.4924058 -0.4317775 0.7557321 0.4923791 -0.4317681 0.7557181 0.4924089 -0.0429821 0.8367971 0.5458235 -0.1662244 0.8212425 0.5458301 -0.1678926 0.8167077 0.5520876 -0.287589 0.7826376 0.5520606 -0.2883577 0.7787771 0.5570961 -0.3992877 0.72808 0.5571975 -0.386869 0.6766346 0.6264966 -0.4862756 0.8024381 0.3458744 -0.4862722 0.8024345 0.3458877 -0.4583967 0.8032698 0.3803025 -0.4656417 0.81476 0.3454623 -0.4656363 0.8147526 0.3454864 -0.2937641 0.9060223 0.304674 -0.3645291 0.8799389 0.3046734 -0.3496882 0.850251 0.3934354 -0.4443851 0.8051385 0.392777 -0.4262174 0.7589903 0.4922119 -0.1536103 0.9426338 0.2963873 -0.1572736 0.9435316 0.2915703 -0.0815401 0.9530701 0.2915625 -0.08548426 0.9543312 0.2862591 -0.009142518 0.9581094 0.2862566 -0.01331889 0.9597551 0.2805226 0.06367391 0.9577322 0.2805258 0.05930006 0.9597836 0.2744066 0.1359214 0.9519597 0.2744047 0.4687613 0.8826947 0.03336131 0.4226768 0.9027388 0.08004266 0.4232276 0.8927019 0.1547957 0.349558 0.9240395 0.1547909 0.3476689 0.9026747 0.2535837 0.2738189 0.9277503 0.2535796 0.2701374 0.8966157 0.3508649 0.1968153 0.915507 0.3508715 0.1928439 0.8744781 0.4450837 -0.01405173 0.9948151 0.1007249 -0.009647309 0.9812724 0.1923837 0.06511026 0.9791627 0.1923567 0.06057226 0.9807372 0.1857029 0.1389003 0.9727393 0.1857013 0.1341623 0.9747278 0.1786235 0.2119212 0.9608247 0.1786203 0.5604417 0.8231745 0.09104317 0.5736468 0.816216 0.06870853 0.5734856 0.8076695 0.1370556 0.48497 0.8636955 0.137238 0.4810544 0.8437762 0.2379674 0.4105911 0.8802189 0.23797 0.4032457 0.8506602 0.3372982 0.3331524 0.8804802 0.3372893 0.3238329 0.8408712 0.4336679 0.4456501 0.7934382 0.41455 0.5182802 0.7481461 0.4143223 0.5165964 0.7446952 0.4225605 0.5442538 0.8068658 0.2296856 0.4765469 0.8486114 0.2296996 0.467496 0.8200535 0.3300904 0.3990705 0.8554418 0.3300943 0.387207 0.816868 0.4275481 0.3199414 0.8454874 0.4275377 0.3068556 0.7968069 0.5205174 0.3846227 0.5939241 0.7066256 0.3846223 0.5939233 0.7066263 0.3866622 0.6308928 0.6726564 0.4330673 0.6960892 0.5726367 0.4262484 0.6828333 0.5933389 0.4414374 0.6905706 0.5729269 0.4599381 0.7278269 0.5086501 0.4172637 0.7062711 0.5719022 0.3998761 0.6891326 0.604314 0.5221118 0.7408237 0.4225868 0.5221111 0.7408221 0.4225903 0.006347596 0.04216367 0.9990905 0.01156324 0.04393857 0.9989672 0.03299081 0.1290307 0.9910916 0.03399914 0.1300544 0.9909238 0.05537366 0.2168561 0.9746317 0.05705749 0.2186396 0.9741362 0.07784861 0.3049992 0.9491656 0.08019012 0.3075593 0.9481438 0.1000868 0.3921827 0.9144263 0.1030592 0.3955017 0.9126649 0.1217467 0.4770592 0.8703978 0.1253009 0.4810665 0.8676835 0.1424753 0.5582548 0.8173448 0.1465467 0.5628337 0.8134754 0.161934 0.634446 0.7558145 0.1664416 0.6394345 0.7506138 0.1798137 0.7044286 0.6866202 0.184665 0.7096271 0.6799471 0.1958503 0.7671656 0.6108188 0.2009391 0.7723428 0.6025863 0.2098372 0.8218598 0.5296365 0.2150549 0.8267717 0.5198076 0.2187435 0.8493823 0.4803135 0.2596064 0.8628335 0.4337313 0.2658005 0.9004821 0.3442123 0.3374338 0.8761577 0.3442181 0.342989 0.9065784 0.2459151 0.4152097 0.8758557 0.2459221 0.4181535 0.8965376 0.1461775 0.4899883 0.8593858 0.1461759 0.4895431 0.8696582 0.06357806 0.5251263 0.8497448 0.04664802 0.01326519 0.04078048 0.9990801 0.01822215 0.0422073 0.9989427 0.05234491 0.1238205 0.9909231 0.05359607 0.1247462 0.99074 0.08791261 0.2081555 0.9741368 0.09001606 0.2097827 0.9735956 0.1236245 0.2928019 0.9481477 0.1265678 0.2951548 0.9470292 0.1589536 0.3765129 0.9126728 0.1626967 0.3795701 0.910745 0.1933344 0.4579571 0.8676965 0.1978177 0.4616541 0.8647218 0.2261981 0.5357826 0.8134933 0.2313278 0.5399992 0.8092517 0.2569911 0.6086873 0.7506366 0.2626585 0.6132645 0.7449276 0.2852185 0.6754897 0.6799735 0.2912735 0.680212 0.6726599 0.3104416 0.7351745 0.6026147 0.3167453 0.7398187 0.593583 0.3264033 0.7688076 0.5499053 0.3681781 0.7775073 0.5098306 0.3834706 0.8219237 0.4211789 0.449172 0.7879447 0.4211742 0.4634956 0.8252844 0.3226104 0.5204328 0.7905752 0.3227083 0.5586407 0.7879992 0.2588014 0.2849222 0.9558622 0.07174241 0.2822409 0.9564657 0.07425296 0.2842618 0.9433583 0.171086 0.2070223 0.9632602 0.1710894 0.2074966 0.9408423 0.2678825 0.1313959 0.9544484 0.2678871 0.1316955 0.9224267 0.3630227 0.05747658 0.930005 0.363025 0.05905747 0.8884497 0.4551585 -0.008704364 0.890341 0.4552111 -0.04293996 0.8647952 0.5002854 -0.07551652 0.8826475 0.4639294 -0.1758398 0.8686217 0.4632244 -0.1804506 0.8851432 0.4289043 -0.2169679 0.8962868 0.3867751 -0.227743 0.9275159 0.2963902 -0.2243832 0.9269297 0.3007547 -0.2327619 0.9486062 0.2144014 -0.3013865 0.9290852 0.2143985 -0.3090956 0.9431781 0.1219627 -0.3142834 0.9422605 0.1156325 -0.1217212 0.2084897 0.9704205 -0.1217624 0.2085632 0.9703996 -0.0466268 0.07671236 0.9959625 0.6762983 0.5812671 0.4524921 -0.03936761 0.07115083 0.9966884 -0.3839693 0.6783834 0.6263892 -0.3839569 0.6783624 0.6264197 -0.3839696 0.6783823 0.6263903 -0.0367788 0.7155508 0.6975918 -0.1420942 0.7022573 0.6975986 -0.1434578 0.6977402 0.7018394 -0.2456678 0.6686579 0.7018148 -0.2461943 0.6648663 0.7052242 -0.341035 0.6214757 0.7053107 -0.3359194 0.5771316 0.7443637 -6.61089e-4 0.04249083 0.9990966 0.004756391 0.04457473 0.9989947 0.01317441 0.1313971 0.9912423 0.01392662 0.1324353 0.9910938 0.02207314 0.2207849 0.9750728 0.02331793 0.2225809 0.9746353 0.03101128 0.3104847 0.9500724 0.03273475 0.3130567 0.9491701 0.03986328 0.3992261 0.9159855 0.04204142 0.4025503 0.9144319 0.04849457 0.4856697 0.8727962 0.05109399 0.489679 0.8704045 0.05676639 0.5684491 0.8207577 0.05974543 0.5730326 0.8173518 0.06454432 0.6462383 0.7604013 0.06785809 0.6512513 0.755822 0.07171046 0.7178419 0.6925033 0.07530403 0.7230988 0.6866275 0.07816046 0.782223 0.6180763 0.08197247 0.7875102 0.6108257 0.08381068 0.8385758 0.5382995 0.08777773 0.8436665 0.5296432 0.08829462 0.8669424 0.4905251 0.1262959 0.8865032 0.4451532 0.1274064 0.9253214 0.3571385 0.201153 0.9121369 0.3571324 0.2028678 0.9437967 0.260945 0.2784968 0.9243105 0.2609399 0.2792482 0.9462667 0.163094 0.3546259 0.9206736 0.1630976 0.3535634 0.9317699 0.0824486 0.3774225 0.9252609 0.03800809 0.5877853 0.8090169 0 0.5877853 0.8090169 0 0.4694729 0.882947 0 0.4694729 0.882947 0 0.3420175 0.9396936 0 0.3420175 0.9396936 0 0.2079116 0.9781476 0 0.2079116 0.9781476 0 0.06975924 0.9975639 0 0.06975924 0.9975639 0 0.5192801 0.8531161 -0.05040866 0.5192811 0.8531106 -0.05049288 0.4707559 0.870621 0.1428568 0.4599018 0.8879493 0.006035327 0.4647365 0.8848025 -0.03382897 0.3722732 0.9276368 0.03004342 0.3790261 0.9217908 0.08149063 0.4420193 0.8533847 0.2763212 0.377155 0.9255966 0.0320183 0.3771347 0.9256047 0.0320208 0.1433638 0.9892714 0.02808612 0.1896809 0.9755953 0.1106113 0.1896755 0.9755967 0.1106084 0.2379098 0.9712551 -0.007904052 0.2858493 0.9531524 0.09894853 0.3032476 0.9438707 0.130954 0.2857517 0.9534707 0.09612286 0.3044981 0.9478452 0.09418338 0.2837238 0.9579384 0.0430662 0.283729 0.9579368 0.04306763 0.04699903 0.9984076 0.03119832 0.08699983 0.9909067 0.1026399 0.1428889 0.9859935 0.08602064 0.08220428 0.996614 0.001696228 0.1859693 0.9822466 0.0246433 -0.1907856 0.9777024 0.08774292 -0.1129797 0.988507 0.1004467 -0.09554272 0.9912588 0.09098076 -0.1153748 0.9918474 0.05410647 -0.01292294 0.9960232 0.08815228 -0.02463912 0.9957702 0.08851289 -0.01221776 0.9946298 0.1027728 -0.02454578 0.9943261 0.1035038 -0.01215696 0.9945259 0.1037816 -0.01218104 0.9945232 0.1038039 -0.3158576 0.9444487 0.09083342 -0.2850888 0.9556936 0.07330924 -0.318128 0.9468097 0.0484367 -0.2144309 0.9705203 0.1100447 -0.1908218 0.9778586 0.08590537 -0.2173315 0.9744014 0.05752444 -0.1138473 0.9898872 0.08462876 -0.3158667 0.9444456 0.0908336 -0.2836055 0.9507388 0.1251547 -0.3141462 0.9420719 0.1175272 -0.353466 0.931128 0.08979034 -0.4121004 0.9046853 0.1082484 -0.4194971 0.9020113 0.1019691 -0.412668 0.9053996 0.09978383 -0.5032362 0.8582719 0.1006121 -0.5042784 0.8568572 0.1072334 -0.5042756 0.8568637 0.1071953 -0.5042808 0.8568555 0.1072368 -0.4126757 0.9053961 0.09978389 -0.4198064 0.9026703 0.09459841 -0.5048156 0.8568572 0.104675 0.02763146 0.03815221 0.9988899 0.5841297 0.8065344 0.09107607 0.5841296 0.8065339 0.09108126 0.1060976 0.1449874 0.9837287 0.05039346 0.07111537 0.9961943 0.02763152 0.03815209 0.9988898 0.04000133 0.05673938 0.9975874 0.05112308 0.07058799 0.9961947 0.2037392 0.2798019 0.9381905 0.1510838 0.2101474 0.9659253 0.1044439 0.1461877 0.9837279 0.1525276 0.2091003 0.9659256 0.1525287 0.2091018 0.9659252 0.2953308 0.406264 0.8647134 0.2471616 0.3428096 0.9063072 0.2016453 0.2813158 0.9381901 0.2486088 0.3417605 0.9063075 0.2486092 0.3417609 0.9063073 0.4497246 0.6194413 0.6434597 0.4140316 0.5732169 0.707107 0.3766164 0.5217245 0.7654827 0.4154824 0.5721672 0.707106 0.3781493 0.5206139 0.765483 0.3357163 0.4650821 0.8191418 0.2926821 0.4081838 0.8647099 0.3371561 0.4640196 0.819153 0.3371579 0.464022 0.8191509 0.5079315 0.6998114 0.5022645 0.4797544 0.6639627 0.5735759 0.4476033 0.6209836 0.6434522 0.4812046 0.662913 0.5735751 0.4811996 0.6629061 0.5735874 0.5859162 0.8090013 0.0471071 0.5904341 0.807013 0.01083528 0.5643984 0.80572 0.1796385 0.5837597 0.8045209 0.1094106 0.5777385 0.7962031 0.1796633 0.5658492 0.7828328 0.2588199 0.5496585 0.7603167 0.3461127 0.5672959 0.781787 0.2588136 0.5510297 0.7593212 0.3461179 0.5308738 0.7345442 0.4226321 0.50527 0.7017345 0.5022658 0.532326 0.7335001 0.4226189 0.532327 0.7335014 0.4226155 0.5843397 0.8115092 0 0.5843397 0.8115091 0 0.5190255 0.8547586 0 0.5190255 0.8547586 0 0.3818141 0.9242391 0 0.3818141 0.9242391 0 0.2328979 0.9725012 0 0.2328979 0.9725012 0 0.07827091 0.9969321 0 0.07827091 0.9969321 0 0 1 0 0 1 0 -0.9972114 0.06677901 -0.03331685 -0.9958696 0.08712714 0.02554744 -0.9961947 0.08715564 0 -0.9961947 -0.08715564 0 -0.9961947 -0.08715564 0 -0.9659257 -0.2588194 0 -0.9659257 -0.2588194 0 -0.9063084 -0.4226171 0 -0.9063084 -0.4226171 0 -0.8191516 -0.5735771 0 -0.8191516 -0.5735771 0 -0.7071053 -0.7071082 0 -0.7071053 -0.7071082 0 -0.5735784 -0.8191507 0 -0.5735784 -0.8191507 0 -0.422616 -0.9063088 0 -0.422616 -0.9063088 0 -0.2588201 -0.9659255 0 -0.2588201 -0.9659255 0 -0.08715564 -0.9961947 0 -0.08715564 -0.9961947 0 0.08715564 -0.9961947 0 0.08715564 -0.9961947 0 0.2588194 -0.9659257 0 0.2588194 -0.9659257 0 0.4226171 -0.9063084 0 0.4226171 -0.9063084 0 0.5735771 -0.8191516 0 0.5735771 -0.8191516 0 0.7071068 -0.7071068 0 0.7071068 -0.7071068 0 0.8191516 -0.5735771 0 0.8191515 -0.5735771 0 -0.9977653 0.06681615 0 -0.9961947 -0.08715564 0 -0.9961947 -0.08715564 0 -0.9659257 -0.2588194 0 -0.9659257 -0.2588194 0 -0.9063084 -0.4226171 0 -0.9063084 -0.4226171 0 -0.8191516 -0.5735771 0 -0.8191516 -0.5735771 0 -0.7071053 -0.7071082 0 -0.7071053 -0.7071082 0 -0.5735784 -0.8191507 0 -0.5735784 -0.8191507 0 -0.422616 -0.9063088 0 -0.422616 -0.9063088 0 -0.2588201 -0.9659255 0 -0.2588201 -0.9659255 0 -0.08715564 -0.9961947 0 -0.08715564 -0.9961947 0 0.08715564 -0.9961947 0 0.08715564 -0.9961947 0 0.2588194 -0.9659257 0 0.2588194 -0.9659257 0 0.4226171 -0.9063084 0 0.4226171 -0.9063084 0 0.5735771 -0.8191516 0 0.5735771 -0.8191516 0 0.7071068 -0.7071068 0 0.7071068 -0.7071068 0 0.8191516 -0.5735771 0 0.8191515 -0.5735771 0 0.9063083 -0.4226171 0 0.9063083 -0.4226171 0 0.9659258 -0.2588194 0 0.9659258 -0.2588194 0 0.9961947 -0.08715564 0 0.9961947 -0.08715564 0 0.9961947 0.08715564 0 0.9961947 0.08715564 0 0.9659257 0.2588197 0 0.9659257 0.2588197 0 0.9063085 0.4226166 0 0.9063085 0.4226166 0 0.8191506 0.5735784 0 0.8191506 0.5735784 0 0.7071082 0.7071053 0 0.7071082 0.7071053 0 0.5735761 0.8191522 0 0.5735761 0.8191522 0 0.4226183 0.9063077 0 0.4226183 0.9063077 0 0.258818 0.9659261 0 0.258818 0.9659261 0 0.08715701 0.9961946 0 0.08715701 0.9961946 0 -0.08715701 0.9961946 0 -0.08715701 0.9961946 0 -0.2588188 0.9659259 0 -0.2588188 0.9659259 0 -0.4226172 0.9063083 0 -0.4226172 0.9063083 0 -0.5735775 0.8191513 0 -0.5735775 0.8191513 0 -0.7071068 0.7071068 0 -0.7071068 0.7071068 0 -0.8191506 0.5735784 0 -0.8191506 0.5735784 0 -0.9063085 0.4226166 0 -0.9063085 0.4226166 0 -0.9659257 0.2588197 0 -0.9659257 0.2588197 0 -0.9881453 0.1535217 0 -0.9881453 0.1535217 0 0 -0.9981033 -0.06156134 0.05169856 -0.998189 -0.0307551 -0.02588778 -0.992088 -0.1228463 -0.02583873 -0.982645 -0.1836878 0.07736086 -0.9894465 -0.1225192 -0.02588903 -0.9694715 -0.2438334 -0.02583992 -0.9526238 -0.3030512 0.07735878 -0.9668908 -0.2431827 -0.02588856 -0.93216 -0.3611199 -0.0258395 -0.9081618 -0.4178213 0.07735925 -0.9296776 -0.3601598 -0.02588808 -0.8807169 -0.4729349 -0.02583909 -0.8499335 -0.526256 0.07735949 -0.8783721 -0.4716756 -0.02588874 -0.8159233 -0.5775802 -0.02583962 -0.7788204 -0.6267146 0.07735937 -0.8137509 -0.5760424 -0.02588808 -0.7387616 -0.6734694 -0.02583903 -0.6959015 -0.7176724 0.07735913 -0.7367939 -0.6716772 -0.02588808 -0.6504005 -0.7591502 -0.02583909 -0.6024333 -0.7977509 0.07735967 -0.6486684 -0.7571293 -0.02588784 -0.5521802 -0.8333228 -0.02583873 -0.4998333 -0.8657362 0.07736003 -0.5507098 -0.8311042 -0.02588868 -0.4455884 -0.8948636 -0.02583968 -0.3896553 -0.9205982 0.07736027 -0.4444027 -0.8924807 -0.02588838 -0.3322429 -0.9428386 -0.02583932 -0.273572 -0.9615044 0.07736074 -0.3313599 -0.9403275 -0.02588844 -0.2138611 -0.976521 -0.02583938 -0.1533404 -0.9878356 0.07735919 -0.2132918 -0.9739211 -0.02588796 -0.09223824 -0.9954003 -0.02588796 -0.09223657 -0.9954005 0.0258879 -0.03078442 -0.9991908 -0.02588862 0.03078526 -0.9991908 -0.02588862 0.03078353 -0.9991908 0.02588868 0.09223741 -0.9954005 -0.02588766 0.1533402 -0.9878343 -0.02588766 0.1533402 -0.9878343 0.02588844 0.2138611 -0.976521 -0.02588915 0.2735725 -0.9615029 -0.02588915 0.273571 -0.9615034 0.02588766 0.3322437 -0.9428383 -0.02588868 0.3896555 -0.9205967 -0.02588868 0.3896542 -0.9205973 0.02588832 0.4455888 -0.8948634 -0.02588874 0.4998329 -0.8657349 -0.02588874 0.4998323 -0.8657352 0.0258879 0.5521801 -0.8333228 -0.02588838 0.6024329 -0.7977496 -0.02588838 0.6024323 -0.7977501 0.02588832 0.6504004 -0.7591504 -0.02588784 0.6959006 -0.7176714 -0.02588784 0.6959006 -0.7176714 0.02588856 0.7387613 -0.6734699 -0.02588766 0.7788195 -0.6267138 -0.02588766 0.7788195 -0.6267138 0.02588874 0.8159234 -0.5775803 -0.0258882 0.8499325 -0.5262551 -0.0258882 0.8499323 -0.5262556 0.02588802 0.880717 -0.4729349 -0.02588832 0.9081609 -0.41782 -0.02588832 0.9081602 -0.4178214 0.02588915 0.9321597 -0.3611205 -0.02588719 0.9526227 -0.3030509 -0.02588719 0.9526227 -0.3030508 0.02588832 0.9694717 -0.2438327 -0.02588891 0.9826437 -0.1836876 -0.02588891 0.9826438 -0.1836876 0.02588778 0.992088 -0.1228463 -0.0258882 0.9977688 -0.06153988 -0.02583914 0.9996661 0 0.077362 0.995112 -0.0613777 -0.0258882 0.9977687 0.06154155 -0.02583914 0.9920892 0.1228465 0.07735913 0.9951124 0.06137603 -0.02588891 0.9826438 0.1836876 -0.0258398 0.9694729 0.243833 0.07736092 0.9800274 0.1831985 -0.02588719 0.9526227 0.3030508 -0.02583813 0.9321609 0.361121 0.07736086 0.9500862 0.302244 -0.02588832 0.9081602 0.4178214 -0.02583926 0.8807181 0.4729354 0.07735973 0.9057429 0.4167076 -0.0258882 0.8499323 0.5262556 -0.02583914 0.8159244 0.5775809 0.07736092 0.8476695 0.5248539 -0.02588766 0.7788195 0.6267138 -0.02583861 0.7387621 0.6734707 0.07736015 0.7767458 0.6250451 -0.02588784 0.6959006 0.7176714 -0.02583879 0.6504012 0.7591513 0.07735979 0.6940478 0.7157606 -0.02588838 0.6024323 0.7977501 -0.02583926 0.5521808 0.8333239 0.07735943 0.6008288 0.7956256 -0.02588874 0.4998323 0.8657352 -0.02583962 0.4455893 0.8948645 0.07736068 0.4985021 0.8634298 -0.02588868 0.3896542 0.9205973 -0.02583962 0.3322441 0.9428395 0.07735931 0.3886181 0.9181457 -0.02588915 0.273571 0.9615034 -0.0258401 0.2138614 0.9765223 0.07736128 0.272844 0.9589428 -0.02588766 0.1533402 0.9878343 -0.02583861 0.09223753 0.9954017 0.07736027 0.1529319 0.9852041 -0.02588862 0.03078353 0.9991908 -0.02583956 -0.03078442 0.999192 0.07735973 0.0307033 0.9965304 -0.02588796 -0.09223657 0.9954005 -0.02583891 -0.1533404 0.9878355 0.0773586 -0.09199267 0.9927502 -0.02588844 -0.2138611 0.976521 -0.02583938 -0.273572 0.9615044 0.07736074 -0.2132916 0.9739209 -0.02588838 -0.3322445 0.9428379 -0.02583932 -0.3896553 0.9205982 0.07735985 -0.3313583 0.9403282 -0.02588868 -0.445589 0.8948631 -0.02583956 -0.4998333 0.8657361 0.0773608 -0.444402 0.892481 -0.02588784 -0.55218 0.833323 -0.02583873 -0.6024333 0.7977509 0.07735925 -0.55071 0.8311041 -0.02588814 -0.6504001 0.7591506 -0.02583897 -0.6959015 0.7176724 0.07735913 -0.6486688 0.757129 -0.02588808 -0.7387608 0.6734704 -0.02583903 -0.7788205 0.6267147 0.07735878 -0.7367948 0.6716764 -0.02588868 -0.8159233 0.5775802 -0.02583962 -0.8499335 0.526256 0.07736009 -0.8137509 0.5760424 -0.02588814 -0.880717 0.4729348 -0.02583903 -0.9081618 0.4178213 0.07735884 -0.8783722 0.4716758 -0.02588856 -0.9321594 0.3611212 -0.0258395 -0.9526238 0.3030512 0.07735842 -0.9296783 0.3601585 -0.02588903 -0.9694719 0.2438318 -0.02583998 -0.982645 0.1836878 0.07736206 -0.9668901 0.2431842 -0.02588778 -0.992088 0.1228463 -0.02583873 -0.9977701 0.06154078 0.07735812 -0.9894466 0.1225193 0 -0.9995257 0.03079628 -0.5138153 0.8508028 -0.1101288 -0.04053348 0.9871173 -0.154779 -0.0403952 0.9987531 -0.02933478 -0.03883945 0.9949528 -0.0925222 -0.03884035 0.9949527 -0.0925216 -0.03884202 0.9949517 -0.09253346 -0.1792959 0.9748542 -0.1323339 -0.130757 0.9789735 -0.1565676 -0.1336566 0.9776027 -0.1625693 -0.1336605 0.9776013 -0.1625748 -0.09129536 0.9860916 -0.1388832 -0.09129774 0.9860913 -0.1388839 -0.03886103 0.9894757 -0.1393831 -0.07466876 0.980686 -0.180775 -0.04053974 0.9871165 -0.1547825 -0.2614783 0.9620907 -0.07752829 -0.2615979 0.9620585 -0.07752394 -0.2578658 0.9546515 -0.1488146 -0.2578699 0.9546494 -0.1488211 -0.1792874 0.9748557 -0.1323341 -0.3909795 0.91957 -0.03906404 -0.3377265 0.9389038 -0.06633651 -0.3773362 0.9008129 -0.2148332 -0.3773344 0.9008145 -0.2148302 -0.504157 0.8633326 -0.02196753 -0.4691766 0.8240292 -0.3175677 -0.390983 0.9195685 -0.03906404 -0.3909829 0.9195686 -0.03906393 -0.5158983 0.8499345 -0.107052 -0.5041522 0.8633351 -0.02197831 -0.5041466 0.8633387 -0.0219683 -0.5158984 0.8499328 -0.1070654 -0.5156781 0.8496927 -0.1099925 -0.5143597 0.8516708 -0.1004545 -0.4366769 0.8918742 -0.1177871 -0.4350152 0.9000269 -0.02671164 -0.4487413 0.8876992 -0.1030604 -0.3081702 0.9357457 -0.1714967 -0.30818 0.9357426 -0.1714963 -0.33475 0.9420116 0.02359074 -0.3775718 0.9105151 -0.1685281 -0.3775687 0.9105164 -0.1685282 -0.2356286 0.9686305 -0.07895606 -0.2287893 0.9658138 0.121899 -0.2585121 0.962942 -0.07690405 -0.03886181 0.9974071 -0.06057059 -0.09068661 0.9936995 -0.06585884 -0.09366661 0.9913266 -0.09218442 -0.1255889 0.9878814 -0.09120184 -0.1291626 0.9910472 0.03380131 -0.202193 0.9563298 -0.2110717 -0.2021994 0.9563285 -0.2110716 0.5022379 0.7120417 -0.4906666 0.397035 0.7686577 -0.5015262 0.4514425 0.7315572 -0.5109049 0.09181082 0.9332991 -0.3471652 0.5877605 0.6679421 -0.4564988 0.5546894 0.6846004 -0.472908 0.5522541 0.6853135 -0.4747219 0.5857516 0.6693002 -0.4570913 0.5938149 0.6636117 -0.4549763 0.5007826 0.7581872 -0.4175747 0.6088818 0.6507188 -0.4536828 0.6088864 0.6507126 -0.4536856 0.5333915 0.6830023 -0.4990005 0.5388275 0.6829982 -0.4931313 0.5614314 0.6761695 -0.4770635 0.5613539 0.6761972 -0.4771153 0.555872 0.6831225 -0.4736561 0.5559166 0.6830741 -0.4736734 0.5546889 0.6845986 -0.4729111 0.4835259 0.7067331 -0.5164601 0.4834533 0.7066534 -0.5166372 0.5392614 0.6780482 -0.4994475 0.5333831 0.6830073 -0.4990025 0.5333895 0.6829985 -0.4990078 0.4143247 0.7409068 -0.5285756 0.4143252 0.7409064 -0.5285757 0.4143279 0.74091 -0.5285687 0.3736443 0.759793 -0.5320757 0.3736368 0.7597894 -0.5320862 0.4046632 0.7472046 -0.5271936 0.4003558 0.7445978 -0.5341248 0.4169472 0.7472512 -0.5174657 0.3651434 0.7555114 -0.543942 0.3416543 0.7749435 -0.5317282 0.3481531 0.7775814 -0.5235996 0.375685 0.7548312 -0.5376713 0.3737133 0.7596063 -0.5322938 0.2717225 0.832104 -0.4834974 0.2745992 0.8103288 -0.5176511 0.1940435 0.8523006 -0.4857269 0.2180147 0.8531576 -0.4739109 0.2198799 0.8392547 -0.4972969 0.2198849 0.8392581 -0.497289 0.2425141 0.8445016 -0.4774976 0.2468269 0.8239684 -0.5100514 0.2470335 0.8247714 -0.5086518 0.1928504 0.8615762 -0.4695691 0.1940622 0.8522977 -0.4857246 0.1940638 0.8523045 -0.4857119 0.154353 0.8693979 -0.4693853 0.1586261 0.8689159 -0.4688526 0.171385 0.8661133 -0.4695476 0.1709719 0.8631315 -0.4751551 0.1709669 0.8631308 -0.4751583 0.1500107 0.8664261 -0.476238 0.1538396 0.8694515 -0.4694544 0.1538472 0.8694524 -0.4694504 0.04787218 0.9293116 -0.3661806 0.1514843 0.8803991 -0.4493884 0.1532729 0.8787121 -0.4520757 0.1405863 0.8797028 -0.4542672 0.1405789 0.8797041 -0.4542667 0.0105378 0.9687443 -0.2478374 0.04912817 0.9583847 -0.2812209 0.03580236 0.9587159 -0.282103 0.02968442 0.9704446 -0.2394914 0.02711153 0.9640776 -0.2642335 0.04063695 0.965541 -0.2570587 0.02952325 0.9634931 -0.2661007 0.04562443 0.9623189 -0.2680689 0.0456227 0.9623186 -0.26807 0.04927116 0.9469144 -0.3176878 0.0556373 0.9400786 -0.3363879 0.05330836 0.9473968 -0.315591 0.05331653 0.947399 -0.3155827 0.05150198 0.953501 -0.2969568 0.0515049 0.9535017 -0.2969543 0.04235935 0.9532013 -0.2993541 0.049124 0.9583842 -0.2812236 0.04912376 0.958384 -0.2812241 0.0918197 0.9332931 -0.3471791 0.09303659 0.9155715 -0.3912456 0.115974 0.9180679 -0.3790797 0.1115469 0.9117167 -0.3953858 0.1295053 0.9142013 -0.3840109 0.1264804 0.9069957 -0.4016983 0.1420668 0.909756 -0.3900784 0.1407786 0.9017526 -0.4086851 0.1538217 0.9046967 -0.3973195 0.1544054 0.8960325 -0.4162748 0.1647852 0.8990119 -0.4057382 0.1670866 0.8899222 -0.4244061 0.1749101 0.8927705 -0.4151715 0.178853 0.8834158 -0.4331143 0.184316 0.8859418 -0.4255993 0.1897575 0.8764857 -0.4424533 0.1931424 0.8784849 -0.4369902 0.1998168 0.8691277 -0.4524272 0.06437802 0.9173843 -0.3927617 0.06255775 0.9190452 -0.3891559 0.06255793 0.9190415 -0.3891648 0.06619232 0.8925699 -0.446024 0.0647096 0.9068274 -0.4165054 0.07440233 0.8759669 -0.4765986 0.07440215 0.8759663 -0.4765996 0.0743997 0.8759651 -0.4766026 0.071738 0.8592393 -0.5065189 0.07814377 0.8618029 -0.5011878 0.1974572 0.8409993 -0.5037171 0.2328766 0.8405995 -0.4890407 0.2766826 0.8160064 -0.5075237 0.3382761 0.8033111 -0.4901637 0.2244828 0.844931 -0.4854887 0.2166141 0.8527557 -0.4752745 0.07537162 0.8861559 -0.4572163 0.06619238 0.89257 -0.4460239 0.4277706 0.7334699 -0.5282369 0.4281624 0.7328001 -0.5288488 0.4338082 0.7371247 -0.518129 0.4985364 0.6936331 -0.5199373 0.4834645 0.7066437 -0.5166398 0.3989548 0.7712035 -0.4960646 0.3126788 0.8128682 -0.4914033 0.316344 0.8165127 -0.4829427 0.2088893 0.8614163 -0.4629551 0.2015051 0.8704144 -0.449193 0.06830745 0.9077391 -0.4139373 0.06567853 0.9183573 -0.3902644 0.502233 0.7120441 -0.4906682 0.4342164 0.7520105 -0.4959197 0.4347387 0.7543311 -0.4919217 0.5752729 0.6761214 -0.4603486 0.5098903 0.7098667 -0.4859024 0.5102888 0.7116151 -0.4829174 0.4098659 0.7617661 -0.5017193 0.4119389 0.7655639 -0.4941846 0.3244294 0.8055077 -0.4958859 0.3278174 0.810001 -0.486245 0.21707 0.8533613 -0.4739781 0.209307 0.8618321 -0.4619913 0.07374405 0.8969953 -0.4358454 0.06471103 0.9068288 -0.416502 0.3461157 0.7795557 -0.5220122 0.3461176 0.7795552 -0.5220119 0.2748758 0.8080449 -0.5210632 0.179645 0.8250216 -0.5357862 0.193313 0.8226896 -0.5346136 0.17965 0.8232635 -0.5384821 0.06679034 0.836976 -0.5431485 0.1793537 0.8482885 -0.4982358 0.1394077 0.8496124 -0.5086497 0.04709434 0.8409443 -0.5390684 0.0660209 0.9282787 -0.3659783 0.06601995 0.9282781 -0.3659797 0.0535584 0.9278415 -0.3691092 0.06746822 0.9364433 -0.3442698 0.0599519 0.9330718 -0.3546588 0.05483156 0.9398688 -0.3371055 0.05482512 0.9398665 -0.3371132 0.3461173 0.7807565 -0.5202135 0.3540619 0.7782887 -0.5185624 0.3562928 0.7880612 -0.5020111 0.3484061 0.7923462 -0.5008001 0.3368698 0.800738 -0.4953156 0.2311922 0.8360812 -0.4975121 0.2235068 0.8431406 -0.4890383 0.07109797 0.8752223 -0.4784674 0.07783466 0.8905676 -0.4481419 0.2745991 0.8103281 -0.517652 0.2791926 0.8178486 -0.503165 0.2942879 0.8233186 -0.4853256 0.2967349 0.8112283 -0.5038422 0.3104129 0.8175494 -0.4850329 0.3146352 0.8050929 -0.5028221 0.3254293 0.8114647 -0.4854078 0.3312618 0.7988322 -0.5021282 0.3454164 0.8094924 -0.4747732 0.3816711 0.7737332 -0.5056324 0.3829542 0.7750146 -0.5026912 0.4548837 0.7349656 -0.5028979 0.4481344 0.7423176 -0.4981365 0.4805055 0.716311 -0.5059772 0.4833151 0.7214453 -0.4959064 0.5667066 0.6734175 -0.4747132 0.5596516 0.6792923 -0.4747126 0.1795635 -0.7979701 -0.5753267 0.04707741 0.8102548 -0.5841839 0.7168913 0.5625179 -0.4118743 0.8151683 0.4696182 -0.3390567 0.8956331 0.3407819 -0.2858482 0.998888 -0.03341847 -0.03325778 0.9910331 0.1018462 -0.08649086 0.991036 0.1018303 -0.08647704 0.9980589 0.04619866 -0.04176092 0.998888 -0.03341841 -0.03325772 0.9988879 -0.03054875 -0.03591156 0.998888 -0.03054881 -0.03591161 0.9988879 -0.02746921 -0.03831863 0.998888 -0.02746915 -0.03831857 0.998888 -0.02420073 -0.04046225 0.998888 -0.02420079 -0.04046231 0.998888 -0.02076607 -0.04232788 0.998888 -0.02076607 -0.04232788 0.9988881 -0.0171886 -0.04390251 0.9988879 -0.01718854 -0.04390251 0.998888 -0.013493 -0.04517537 0.998888 -0.01349288 -0.04517525 0.998888 -0.009704589 -0.04613769 0.998888 -0.009704589 -0.04613775 0.9988879 -0.00584954 -0.04678308 0.998888 -0.00584954 -0.04678308 0.998888 -0.001954257 -0.0471068 0.998888 -0.001954317 -0.04710692 0.998888 0.001954317 -0.04710692 0.998888 0.001954317 -0.0471068 0.9988879 0.00584954 -0.04678308 0.998888 0.00584954 -0.04678308 0.9988879 0.009704589 -0.04613775 0.998888 0.009704589 -0.04613769 0.998888 0.01349294 -0.04517525 0.9988879 0.01349294 -0.04517537 0.998888 0.01718854 -0.04390251 0.9988879 0.01718854 -0.04390251 0.998888 0.02076607 -0.04232788 0.9988879 0.02076607 -0.04232788 0.998888 0.02420079 -0.04046231 0.998888 0.02420079 -0.04046225 0.9988878 0.02746915 -0.03831857 0.998888 0.02746921 -0.03831863 0.998888 0.03054881 -0.03591161 0.998888 0.03054875 -0.03591156 0.998888 0.03341841 -0.03325772 0.998888 0.03341847 -0.03325778 0.9988836 0.0323556 -0.03441786 0.9998057 0.01484435 -0.01297211 0.9727376 0.1769011 -0.1499586 0.9727427 0.176885 -0.1499447 0.9727379 0.1769014 -0.1499567 0.8956292 0.3407878 -0.2858532 0.9361155 0.2632663 -0.2331923 0.9361211 0.2632529 -0.2331848 0.8151493 0.4696394 -0.3390728 0.8468619 0.4046034 -0.3451389 0.8469262 0.4066537 -0.3425621 0.7168843 0.5625238 -0.4118786 0.7168928 0.5625146 -0.4118761 0.7533721 0.5182516 -0.4047787 0.5020013 0.7015405 -0.5058019 0.6087287 0.6435525 -0.4639932 0.6379671 0.6198385 -0.4569444 0.3459435 0.76107 -0.5487217 0.5020468 0.7015193 -0.5057864 0.1795637 0.7979705 -0.575326 0.3459423 0.7610706 -0.5487216 0.1795635 0.7979701 -0.5753267 0.04707646 0.8102555 -0.584183 0.04708141 0.8102547 -0.5841838 0.04706805 0.7639549 -0.6435505 0.04706591 0.7639554 -0.6435503 0.0470677 0.7639564 -0.6435489 0.04706764 0.7080235 -0.7046186 0.04706484 0.7080233 -0.7046191 0.04706752 0.4399604 -0.8967828 0.04706734 0.5127325 -0.8572573 0.04706245 0.5127317 -0.8572581 0.04706275 0.5819766 -0.8118426 0.04706627 0.5819785 -0.811841 0.04706656 0.5819784 -0.8118411 0.04706639 0.6472251 -0.7608445 0.0470643 0.6472256 -0.7608444 0.04706454 0.6472253 -0.7608445 0.04706603 0.4399619 -0.8967822 0.04706627 0.4399619 -0.8967822 0.04706639 0.364167 -0.9301435 0.04706645 0.3641671 -0.9301435 0.04706841 0.364168 -0.930143 0.04706853 0.2858697 -0.9571118 0.04706597 0.2858693 -0.9571121 0.04706591 0.2056043 -0.9775027 0.04706424 0.205608 -0.9775021 0.04706537 0.2056083 -0.9775019 0.04706531 0.1239329 -0.9911738 0.04706561 0.1239328 -0.9911738 0.04706645 0.1239332 -0.9911738 0.04706645 0.04140597 -0.9980332 0.04706645 0.04140597 -0.9980333 0.04706645 -0.04140597 -0.9980332 0.04706645 -0.04140597 -0.9980332 0.04706841 -0.364168 -0.930143 0.04706859 -0.2858693 -0.957112 0.04706597 -0.2858698 -0.9571119 0.04706597 -0.2056043 -0.9775028 0.04706424 -0.205608 -0.9775021 0.04706531 -0.2056083 -0.9775021 0.04706531 -0.1239328 -0.9911738 0.04706591 -0.1239329 -0.9911738 0.04706645 -0.1239331 -0.9911737 0.04706639 -0.364167 -0.9301436 0.04706645 -0.3641671 -0.9301435 0.04706633 -0.4399619 -0.8967822 0.04706603 -0.4399619 -0.8967822 0.04706752 -0.4399604 -0.8967828 0.04706734 -0.5127316 -0.8572579 0.04706245 -0.5127325 -0.8572576 0.0470677 -0.7639564 -0.6435489 0.04706764 -0.7080231 -0.704619 0.04706484 -0.7080236 -0.7046187 0.0470646 -0.6472253 -0.7608445 0.04706484 -0.6472252 -0.7608446 0.04706639 -0.6472254 -0.7608443 0.04706645 -0.5819784 -0.811841 0.04706621 -0.5819784 -0.8118411 0.04706269 -0.5819766 -0.8118426 0.04706543 -0.7639552 -0.6435506 0.04706799 -0.7639553 -0.6435502 0.04708141 -0.8102554 -0.5841828 0.04707735 -0.8102549 -0.5841839 0.04707741 -0.8102548 -0.5841839 0.3459423 -0.7610706 -0.5487216 0.1795637 -0.7979705 -0.575326 0.5020468 -0.7015193 -0.5057864 0.3459435 -0.76107 -0.5487217 0.5020013 -0.7015405 -0.5058019 0.608197 -0.6302902 -0.4825254 0.6186586 -0.6372916 -0.4594792 0.6296985 -0.6267145 -0.45903 0.6728131 -0.5815051 -0.4573559 0.7737721 -0.4870722 -0.4050153 0.7737658 -0.4870924 -0.4050033 0.7395041 -0.5365421 -0.4065172 0.7395066 -0.5365394 -0.4065164 0.8485479 -0.4166741 -0.326112 0.8485481 -0.4166794 -0.3261052 0.8471374 -0.4063963 -0.3423454 0.8824534 -0.3480389 -0.3164567 0.9568434 -0.1992138 -0.2115761 0.9256157 -0.2875099 -0.2461166 0.9256144 -0.2875131 -0.2461184 0.9988893 -0.03548097 -0.03100591 0.998707 -0.03925538 -0.03230184 0.9987068 -0.03925818 -0.03230428 0.9874843 -0.1062096 -0.1165949 0.9766261 -0.1594661 -0.1441255 0.9612959 -0.2113999 -0.1766932 0.1795615 -0.7979708 -0.5753263 0.1795606 -0.7979708 -0.5753266 0.1795111 -0.7523795 -0.6337987 0.1795107 -0.7523795 -0.6337988 0.1795108 -0.6972948 -0.6939423 0.1795121 -0.697295 -0.6939417 0.1795122 -0.6374179 -0.7493155 0.1795118 -0.6374179 -0.7493157 0.1795117 -0.57316 -0.7995393 0.1795114 -0.57316 -0.7995395 0.1795115 -0.5049625 -0.8442681 0.1795112 -0.5049625 -0.8442682 0.1795111 -0.4332951 -0.8831936 0.1795114 -0.4332953 -0.8831936 0.1795114 -0.3586494 -0.9160493 0.1795103 -0.358649 -0.9160496 0.1795102 -0.281538 -0.9426093 0.1795107 -0.2815381 -0.9426092 0.1795107 -0.2024924 -0.9626904 0.1795111 -0.2024925 -0.9626902 0.1795111 -0.1220545 -0.9761549 0.1795125 -0.1220549 -0.9761547 0.1795125 -0.0407781 -0.9829102 0.1795137 -0.04077851 -0.9829099 0.1795137 0.0407781 -0.98291 0.1795125 0.04077851 -0.9829101 0.1795125 0.1220544 -0.9761547 0.1795111 0.1220549 -0.9761549 0.1795111 0.2024923 -0.9626902 0.1795107 0.2024925 -0.9626904 0.1795107 0.281538 -0.9426093 0.1795102 0.2815382 -0.9426093 0.1795102 0.3586494 -0.9160494 0.1795114 0.358649 -0.9160494 0.1795114 0.4332951 -0.8831936 0.1795112 0.4332953 -0.8831936 0.1795113 0.5049625 -0.8442681 0.1795114 0.5049624 -0.8442681 0.1795114 0.5731601 -0.7995395 0.1795116 0.5731599 -0.7995394 0.1795117 0.637418 -0.7493156 0.1795122 0.6374179 -0.7493156 0.1795121 0.6972947 -0.6939421 0.1795108 0.6972952 -0.6939419 0.1795107 0.7523796 -0.6337987 0.1795113 0.7523795 -0.6337987 0.1795606 0.7979708 -0.5753265 0.1795616 0.7979705 -0.5753266 0.3459404 -0.7610709 -0.5487224 0.3459423 -0.7610707 -0.5487216 0.3458557 -0.7176051 -0.6045055 0.3458568 -0.717605 -0.604505 0.3458568 -0.6650664 -0.6618684 0.3458563 -0.6650664 -0.6618688 0.3458562 -0.607957 -0.714683 0.3458565 -0.6079571 -0.7146828 0.3458566 -0.5466691 -0.7625852 0.3458561 -0.546669 -0.7625854 0.3458561 -0.4816237 -0.8052467 0.3458556 -0.4816236 -0.8052468 0.3458556 -0.4132685 -0.8423735 0.3458562 -0.4132686 -0.8423731 0.3458563 -0.3420731 -0.8737101 0.3458556 -0.342073 -0.8737105 0.3458556 -0.2685252 -0.8990429 0.3458567 -0.2685255 -0.8990425 0.3458566 -0.1931337 -0.9181953 0.3458555 -0.1931334 -0.9181958 0.3458555 -0.1164135 -0.9310382 0.3458548 -0.1164132 -0.9310384 0.3458547 -0.03889322 -0.9374817 0.3458551 -0.0388934 -0.9374814 0.3458551 0.03889322 -0.9374816 0.3458547 0.0388934 -0.9374817 0.3458548 0.1164135 -0.9310383 0.3458555 0.1164132 -0.9310381 0.3458555 0.1931338 -0.9181957 0.3458567 0.1931333 -0.9181954 0.3458566 0.2685251 -0.8990425 0.3458556 0.2685256 -0.8990427 0.3458556 0.3420732 -0.8737103 0.3458563 0.3420729 -0.8737102 0.3458563 0.4132684 -0.8423733 0.3458555 0.4132687 -0.8423733 0.3458556 0.4816238 -0.8052468 0.3458561 0.4816235 -0.8052468 0.3458561 0.5466692 -0.7625853 0.3458566 0.546669 -0.7625853 0.3458565 0.607957 -0.7146829 0.3458561 0.6079571 -0.7146829 0.3458563 0.6650665 -0.6618685 0.3458569 0.6650663 -0.6618686 0.3458567 0.7176047 -0.6045052 0.3458556 0.7176053 -0.6045052 0.3459423 0.7610704 -0.548722 0.3459404 0.7610714 -0.5487217 0.5020517 -0.7015174 -0.5057842 0.5020483 -0.7015182 -0.5057861 0.5019417 -0.6614791 -0.5572254 0.5019418 -0.661479 -0.5572253 0.5019418 -0.6130499 -0.6101018 0.5019413 -0.61305 -0.6101022 0.5019414 -0.5604074 -0.6587856 0.5019408 -0.5604074 -0.6587861 0.5019408 -0.5039125 -0.7029421 0.5019421 -0.5039126 -0.7029412 0.5019422 -0.4439543 -0.7422659 0.5019426 -0.4439543 -0.7422657 0.5019426 -0.380946 -0.776488 0.5019406 -0.3809459 -0.7764896 0.5019405 -0.3153175 -0.805376 0.501944 -0.3153182 -0.8053737 0.501944 -0.247524 -0.8287243 0.5019406 -0.2475233 -0.8287267 0.5019404 -0.1780276 -0.8463817 0.5019424 -0.1780281 -0.8463804 0.5019424 -0.1073081 -0.8582184 0.5019431 -0.1073083 -0.8582179 0.5019431 -0.03585201 -0.8641573 0.5019413 -0.03585129 -0.8641583 0.5019413 0.03585207 -0.8641583 0.5019431 0.03585124 -0.8641572 0.5019431 0.107308 -0.858218 0.5019424 0.1073084 -0.8582183 0.5019424 0.1780273 -0.8463805 0.5019405 0.1780284 -0.8463815 0.5019405 0.2475246 -0.8287263 0.5019441 0.2475227 -0.8287248 0.501944 0.3153169 -0.8053742 0.5019406 0.3153189 -0.8053755 0.5019406 0.3809466 -0.7764891 0.5019426 0.3809453 -0.7764885 0.5019426 0.4439541 -0.7422657 0.5019421 0.4439544 -0.7422659 0.501942 0.5039121 -0.7029415 0.5019409 0.5039129 -0.7029417 0.5019408 0.5604075 -0.6587858 0.5019413 0.5604072 -0.6587858 0.5019413 0.6130501 -0.6101021 0.5019418 0.6130498 -0.610102 0.5019417 0.6614791 -0.5572254 0.5019416 0.661479 -0.5572253 0.5020484 0.7015188 -0.5057854 0.5020516 0.7015163 -0.5057856 0.6976575 -0.5785687 -0.4225308 0.6433135 -0.61816 -0.4516925 0.6431325 -0.5856515 -0.4933487 0.6431325 -0.5856514 -0.4933487 0.6431326 -0.542774 -0.5401638 0.6431326 -0.5427739 -0.5401638 0.6431325 -0.4961656 -0.5832668 0.6431331 -0.4961655 -0.5832663 0.6431332 -0.4461471 -0.6223604 0.6431323 -0.4461472 -0.6223612 0.6431323 -0.3930626 -0.6571777 0.643132 -0.3930626 -0.657178 0.643132 -0.337277 -0.6874777 0.6431327 -0.3372771 -0.6874769 0.6431328 -0.279172 -0.713052 0.6431314 -0.2791718 -0.7130534 0.6431313 -0.2191491 -0.7337273 0.6431336 -0.2191497 -0.7337252 0.6431336 -0.1576194 -0.7493566 0.6431336 -0.1576194 -0.7493566 0.6431336 -0.09500777 -0.7598372 0.6431319 -0.09500712 -0.7598388 0.6431318 -0.03174173 -0.7650973 0.6431329 -0.03174221 -0.7650964 0.6431329 0.03174167 -0.7650964 0.6431319 0.03174221 -0.7650973 0.6431318 0.09500795 -0.7598388 0.6431336 0.09500694 -0.7598373 0.6431336 0.1576194 -0.7493566 0.6431336 0.1576194 -0.7493566 0.6431336 0.2191486 -0.7337255 0.6431313 0.2191502 -0.733727 0.6431314 0.2791724 -0.7130532 0.6431328 0.2791713 -0.7130522 0.6431327 0.3372768 -0.687477 0.643132 0.3372774 -0.6874774 0.643132 0.3930628 -0.657178 0.6431323 0.3930625 -0.6571778 0.6431323 0.4461475 -0.622361 0.6431332 0.4461468 -0.6223607 0.6431331 0.4961653 -0.5832664 0.6431325 0.4961658 -0.5832666 0.6431326 0.542774 -0.5401639 0.6431326 0.542774 -0.5401638 0.6431326 0.5856515 -0.4933488 0.6431325 0.5856515 -0.4933487 0.6433944 0.6138391 -0.4574333 0.6379631 0.6198424 -0.4569448 0.7925818 -0.4878039 -0.3658707 0.7654491 -0.5146367 -0.3863118 0.7652106 -0.4923647 -0.4147645 0.7652105 -0.4923648 -0.4147648 0.7652105 -0.4563171 -0.454123 0.7652108 -0.4563169 -0.4541226 0.7652108 -0.4171328 -0.4903598 0.7652106 -0.4171328 -0.49036 0.7652106 -0.375082 -0.5232269 0.7652105 -0.375082 -0.523227 0.7652105 -0.330453 -0.5524978 0.7652102 -0.3304531 -0.5524982 0.7652101 -0.2835531 -0.5779715 0.7652105 -0.2835531 -0.5779711 0.7652105 -0.2347034 -0.5994724 0.7652108 -0.2347034 -0.5994721 0.7652109 -0.1842415 -0.6168528 0.7652102 -0.1842414 -0.6168537 0.7652102 -0.1325133 -0.6299949 0.7652095 -0.1325131 -0.6299959 0.7652094 -0.0798738 -0.6388072 0.7652106 -0.07987433 -0.6388057 0.7652107 -0.02668547 -0.6432266 0.765211 -0.02668565 -0.6432263 0.7652109 0.02668547 -0.6432263 0.7652107 0.02668565 -0.6432266 0.7652107 0.07987362 -0.6388058 0.7652094 0.07987451 -0.6388071 0.7652094 0.1325135 -0.6299958 0.7652102 0.1325129 -0.6299951 0.7652102 0.1842417 -0.6168536 0.7652108 0.1842412 -0.6168529 0.7652109 0.2347033 -0.5994721 0.7652105 0.2347036 -0.5994724 0.7652105 0.2835528 -0.5779712 0.7652101 0.2835533 -0.5779715 0.7652101 0.3304532 -0.5524981 0.7652105 0.3304529 -0.5524978 0.7652105 0.375082 -0.5232269 0.7652106 0.3750819 -0.5232269 0.7652106 0.4171329 -0.4903599 0.7652108 0.4171327 -0.4903599 0.7652108 0.4563167 -0.4541227 0.7652105 0.4563173 -0.4541229 0.7652105 0.4923649 -0.4147647 0.7652106 0.4923647 -0.4147647 0.765433 0.5158582 -0.3847113 0.7814753 0.4667285 -0.4140783 0.8877208 -0.3510635 -0.2978361 0.8645556 -0.3831719 -0.3251506 0.8645244 -0.3562408 -0.354528 0.8645244 -0.3562408 -0.3545279 0.8645245 -0.3256502 -0.3828176 0.8645244 -0.3256502 -0.3828176 0.8645245 -0.2928215 -0.4084764 0.8645247 -0.2928214 -0.4084761 0.8645247 -0.25798 -0.4313275 0.8645249 -0.25798 -0.4313272 0.8645249 -0.2213657 -0.4512139 0.8645248 -0.2213657 -0.451214 0.8645249 -0.1832299 -0.4679996 0.8645244 -0.1832299 -0.4680004 0.8645244 -0.1438351 -0.4815693 0.8645243 -0.1438351 -0.4815695 0.8645243 -0.1034511 -0.4918289 0.8645247 -0.1034513 -0.4918282 0.8645246 -0.06235653 -0.4987071 0.8645243 -0.06235635 -0.4987077 0.8645243 -0.02083307 -0.502159 0.8645242 -0.02083301 -0.5021592 0.8645243 0.02083313 -0.5021592 0.8645243 0.02083301 -0.5021591 0.8645243 0.06235659 -0.4987076 0.8645247 0.06235629 -0.4987072 0.8645246 0.103451 -0.4918283 0.8645243 0.1034514 -0.4918288 0.8645242 0.1438352 -0.4815695 0.8645243 0.1438351 -0.4815694 0.8645244 0.1832302 -0.4680003 0.8645248 0.1832296 -0.4679997 0.8645249 0.2213658 -0.451214 0.8645249 0.2213657 -0.4512139 0.8645248 0.2579799 -0.4313272 0.8645247 0.2579802 -0.4313275 0.8645246 0.2928213 -0.4084762 0.8645245 0.2928216 -0.4084763 0.8645246 0.3256502 -0.3828176 0.8645245 0.3256503 -0.3828176 0.8645244 0.3562407 -0.3545279 0.8645244 0.3562409 -0.354528 0.8646467 0.3786643 -0.3301506 0.8480718 0.404969 -0.3417227 0.9613009 -0.2113856 -0.1766828 0.9380927 -0.2650232 -0.223035 0.9380951 -0.2455158 -0.2443351 0.9380949 -0.245516 -0.2443355 0.9380949 -0.2244334 -0.2638325 0.9380948 -0.2244334 -0.2638325 0.9380949 -0.2018083 -0.2815162 0.938095 -0.2018082 -0.2815158 0.938095 -0.1777963 -0.2972646 0.9380948 -0.1777963 -0.297265 0.9380949 -0.1525623 -0.3109707 0.9380949 -0.1525623 -0.3109705 0.938095 -0.1262795 -0.322539 0.938095 -0.1262795 -0.3225387 0.938095 -0.09912872 -0.3318904 0.9380953 -0.09912878 -0.3318896 0.9380952 -0.07129698 -0.3389601 0.938095 -0.07129687 -0.3389607 0.9380952 -0.042975 -0.3437016 0.9380953 -0.04297512 -0.3437011 0.9380952 -0.01435798 -0.3460797 0.9380951 -0.01435786 -0.3460802 0.938095 0.01435804 -0.3460802 0.9380953 0.0143578 -0.3460798 0.9380952 0.04297494 -0.3437011 0.938095 0.04297518 -0.3437015 0.9380952 0.0712971 -0.3389607 0.9380952 0.07129675 -0.3389602 0.9380953 0.09912848 -0.3318896 0.938095 0.09912902 -0.3318903 0.938095 0.1262794 -0.3225387 0.9380949 0.1262795 -0.3225389 0.9380949 0.1525622 -0.3109706 0.9380949 0.1525623 -0.3109707 0.9380948 0.1777964 -0.2972649 0.938095 0.1777961 -0.2972647 0.938095 0.2018081 -0.2815159 0.9380949 0.2018083 -0.281516 0.9380949 0.2244334 -0.2638325 0.9380948 0.2244334 -0.2638325 0.9380949 0.2455161 -0.2443354 0.938095 0.2455157 -0.2443352 0.9381746 0.2593173 -0.2293096 0.9529397 0.2102487 -0.2184064 0.9882782 -0.1139255 -0.1016218 0.9837282 -0.133234 -0.1205305 0.9837015 -0.1274506 -0.1268377 0.9837014 -0.1274505 -0.1268376 0.9837014 -0.1165062 -0.1369588 0.9837015 -0.1165062 -0.1369587 0.9837015 -0.1047613 -0.1461385 0.9837014 -0.1047613 -0.1461387 0.9837014 -0.09229636 -0.1543141 0.9837015 -0.09229636 -0.1543139 0.9837016 -0.07919698 -0.1614287 0.9837014 -0.07919692 -0.1614287 0.9837015 -0.0655533 -0.167434 0.9837015 -0.0655533 -0.1674341 0.9837015 -0.05145913 -0.1722886 0.9837014 -0.05145913 -0.172289 0.9837014 -0.03701126 -0.1759594 0.9837014 -0.03701126 -0.1759591 0.9837015 -0.022309 -0.1784201 0.9837014 -0.02230894 -0.1784204 0.9837014 -0.007453322 -0.1796553 0.9837014 -0.007453441 -0.1796548 0.9837015 0.007453262 -0.1796549 0.9837014 0.007453441 -0.1796552 0.9837015 0.02230906 -0.1784204 0.9837015 0.02230894 -0.1784202 0.9837015 0.0370112 -0.1759591 0.9837014 0.03701132 -0.1759594 0.9837014 0.05145925 -0.172289 0.9837015 0.05145901 -0.1722887 0.9837015 0.0655533 -0.1674341 0.9837015 0.06555324 -0.167434 0.9837015 0.07919692 -0.1614287 0.9837015 0.07919692 -0.1614287 0.9837015 0.09229624 -0.1543139 0.9837014 0.09229642 -0.1543141 0.9837015 0.1047614 -0.1461387 0.9837015 0.1047612 -0.1461386 0.9837015 0.1165062 -0.1369587 0.9837014 0.1165063 -0.1369588 0.9837016 0.1274505 -0.1268377 0.9837015 0.1274506 -0.1268377 0.9837228 0.1348435 -0.1187716 0.9898136 0.0880661 -0.1118634 0.483585 -0.7212766 -0.4958887 0.5022382 -0.712079 -0.4906121 0.06835776 -0.9283648 -0.3653302 0.2623062 -0.8325116 -0.4879753 0.179652 -0.8232353 -0.5385246 0.1929758 -0.8208876 -0.5374977 0.1974868 -0.8408824 -0.5039007 0.4964014 -0.6932159 -0.5225299 0.4030753 -0.7449086 -0.5316404 0.372767 -0.7593247 -0.533358 0.1616829 -0.8705818 -0.4647 0.1422936 -0.8792973 -0.4545205 0.140546 -0.8797056 -0.4542741 0.1405863 -0.8797028 -0.4542672 0.1405789 -0.8797041 -0.4542667 0.1572598 -0.8695998 -0.4680447 0.1572673 -0.8695989 -0.4680436 0.157255 -0.8695976 -0.4680502 0.1770455 -0.8625309 -0.4740205 0.172612 -0.8630698 -0.4746742 0.1726105 -0.8630695 -0.4746752 0.1961512 -0.8520495 -0.4853208 0.1949307 -0.8518969 -0.4860799 0.1949585 -0.8519023 -0.4860594 0.220373 -0.8388875 -0.4976982 0.2474117 -0.8247603 -0.508486 0.2474013 -0.824757 -0.5084964 0.2835865 -0.819271 -0.4983712 0.2797534 -0.8178392 -0.5028688 0.2752148 -0.8101184 -0.5176534 0.3727728 -0.7593275 -0.5333499 0.3727748 -0.7593227 -0.5333555 0.3696746 -0.7624639 -0.5310269 0.339749 -0.7750362 -0.5328128 0.3397479 -0.7750357 -0.5328143 0.4885607 -0.7048974 -0.5142259 0.5334202 -0.6843796 -0.4970789 0.5334119 -0.6843907 -0.4970726 0.5412532 -0.6767768 -0.4990171 0.4885497 -0.7048999 -0.5142326 0.4885795 -0.7049308 -0.514162 0.5553123 -0.6844641 -0.472374 0.555325 -0.6845204 -0.4722775 0.5552584 -0.683811 -0.4733821 0.5940184 -0.6472449 -0.4777199 0.5339432 -0.6853897 -0.4951218 0.5608932 -0.6764457 -0.4773051 0.5665909 -0.6735065 -0.4747251 0.5592221 -0.6796222 -0.4747467 0.554961 -0.684128 -0.4732728 0.6089012 -0.651741 -0.4521868 0.608899 -0.6517441 -0.4521855 0.5015803 -0.7453068 -0.4392437 0.5920047 -0.6649377 -0.455399 0.5859106 -0.6692507 -0.4569599 0.1796426 -0.825008 -0.5358082 0.179645 -0.8250077 -0.535808 0.2749423 -0.8080406 -0.5210347 0.3461176 -0.779563 -0.522 0.3461157 -0.7795637 -0.5220004 0.07415539 -0.876396 -0.4758477 0.0741567 -0.8763995 -0.4758411 0.07827538 -0.8616546 -0.5014224 0.07152295 -0.8588876 -0.5071455 0.06918805 -0.8484677 -0.5247052 0.1370469 -0.8496851 -0.5091692 0.04709476 -0.8406766 -0.5394859 0.06993019 -0.8770014 -0.4753717 0.07642191 -0.8857868 -0.4577571 0.06792843 -0.9077158 -0.4140504 0.06485956 -0.9069835 -0.4161419 0.06486135 -0.9069854 -0.4161379 0.07368987 -0.896898 -0.4360547 0.06666195 -0.8930746 -0.4449427 0.06666183 -0.8930744 -0.444943 0.1885094 -0.8608181 -0.4727118 0.2209025 -0.8581666 -0.4634134 0.2207315 -0.8579428 -0.4639092 0.2048977 -0.8572574 -0.4723629 0.2136599 -0.8659966 -0.4521056 0.1959211 -0.865901 -0.4602503 0.2058807 -0.8735139 -0.4411199 0.154188 -0.8958414 -0.4167666 0.2759356 -0.8294943 -0.4855911 0.2456929 -0.8244032 -0.5098964 0.05507934 -0.9401947 -0.3361549 0.0457223 -0.9366882 -0.3471669 0.1876661 -0.8871486 -0.4216029 0.1762268 -0.8818256 -0.4374103 0.3236007 -0.8100028 -0.4890584 0.3173591 -0.8062938 -0.4991728 0.4221496 -0.743932 -0.51803 0.2291815 -0.8453278 -0.4825937 0.1301999 -0.9074917 -0.3993832 0.1523672 -0.9042043 -0.3989975 0.1735227 -0.8644283 -0.4718619 0.1038961 -0.9168021 -0.3855899 0.123267 -0.9132822 -0.3882277 0.04669791 -0.9622489 -0.2681348 0.1960884 -0.8593129 -0.472367 0.1173384 -0.9124551 -0.3919916 0.1384118 -0.9089587 -0.393238 0.03294652 -0.9596789 -0.2791612 0.05066579 -0.9584053 -0.2808777 0.05066728 -0.9584056 -0.2808765 0.04511004 -0.95612 -0.2894817 0.04099303 -0.9535807 -0.2983345 0.05264282 -0.9537199 -0.2960524 0.05264353 -0.95372 -0.2960518 0.244181 -0.8435226 -0.4783778 0.1424799 -0.901958 -0.4076409 0.165175 -0.8990058 -0.4055932 0.04793655 -0.9472631 -0.316851 0.05381804 -0.9477064 -0.314573 0.4030744 -0.744908 -0.5316418 0.4018588 -0.7494516 -0.5261481 0.3010722 -0.812869 -0.4985975 0.3069815 -0.8156192 -0.4904362 0.1654302 -0.8891246 -0.4267202 0.1769183 -0.8933233 -0.4131265 0.05500829 -0.9401798 -0.3362082 0.05381536 -0.9477056 -0.3145757 0.4839397 -0.721931 -0.4945888 0.461654 -0.7275974 -0.5074226 0.4550319 -0.7349307 -0.502815 0.4474495 -0.7273706 -0.5203084 0.4343215 -0.7426049 -0.5098066 0.4284868 -0.7337932 -0.5272064 0.4318261 -0.7280924 -0.5323604 0.3818057 -0.7736969 -0.5055863 0.3861156 -0.777992 -0.495624 0.3967108 -0.7678908 -0.5029557 0.3995981 -0.7717354 -0.494718 0.4103791 -0.7620959 -0.5007984 0.4101087 -0.7615969 -0.5017778 0.5103463 -0.7115671 -0.4829273 0.509965 -0.7098879 -0.485793 0.5700969 -0.6790794 -0.4624291 0.5858953 -0.6692608 -0.4569646 0.06993168 -0.8770042 -0.4753665 0.07150536 -0.8749474 -0.4789092 0.1844159 -0.8532815 -0.4877515 0.207875 -0.8409151 -0.4996498 0.2592646 -0.8268817 -0.4990477 0.2773702 -0.8188003 -0.5026249 0.3569793 -0.7908358 -0.4971362 0.3541373 -0.7782893 -0.51851 0.3461173 -0.7807795 -0.5201789 0.01057845 -0.9687483 -0.2478199 0.1514664 -0.8803982 -0.4493966 0.04801398 -0.9293279 -0.3661208 0.09314101 -0.9155537 -0.3912624 0.0918129 -0.9332925 -0.347182 0.09180402 -0.9332987 -0.3471681 0.0466879 -0.9622476 -0.2681412 0.02772259 -0.9641808 -0.2637931 0.03901773 -0.9654089 -0.2578045 0.02558505 -0.964539 -0.2626972 0.03004616 -0.9704725 -0.2393332 0.06835085 -0.9283608 -0.3653416 0.06104916 -0.9199887 -0.3871612 0.06100028 -0.9179848 -0.3918964 0.06603962 -0.9188815 -0.3889672 0.06604188 -0.9188832 -0.3889629 0.06909692 -0.9363678 -0.3441526 0.05181032 -0.9280573 -0.3688163 0.1972734 -0.880553 -0.4309405 0.1863798 -0.8740804 -0.4486045 0.3386739 -0.8042591 -0.4883311 0.3396412 -0.8049886 -0.4864537 0.3268117 -0.8265073 -0.4583445 0.3154742 -0.815488 -0.4852374 0.3258242 -0.8070755 -0.4924102 0.3266325 -0.8081521 -0.4901034 0.3369219 -0.8002929 -0.495999 0.3346447 -0.7960813 -0.5042494 0.4347792 -0.7542588 -0.4919965 0.4342795 -0.7520313 -0.4958329 0.5022334 -0.7120814 -0.4906138 -0.09870815 -0.9925312 -0.07168364 -0.07961726 -0.9870711 -0.1391104 -0.2033392 -0.9503296 -0.2356415 -0.2033428 -0.9503288 -0.2356415 -0.2277445 -0.9636489 0.1396897 -0.2757853 -0.9363671 -0.2171617 -0.2757824 -0.9363679 -0.2171617 -0.3344767 -0.9419434 0.0294618 -0.3516536 -0.9298176 -0.1085303 -0.4697166 -0.8759886 -0.109591 -0.469734 -0.8759796 -0.1095899 -0.4350963 -0.899931 -0.02855193 -0.4198362 -0.899868 -0.1182171 -0.4198497 -0.8998617 -0.1182164 -0.4969431 -0.8676629 0.01444214 -0.5164344 -0.850418 -0.1004229 -0.5163541 -0.8505313 -0.09987419 -0.5158916 -0.8499383 -0.1070548 -0.5135749 -0.8579372 -0.01358139 -0.4904591 -0.8648182 -0.1074216 -0.3720746 -0.9268739 -0.04965209 -0.3720704 -0.9268759 -0.04964584 -0.4357786 -0.8825039 -0.176872 -0.4969479 -0.8676599 0.01445561 -0.4969385 -0.8676655 0.01444184 -0.2501423 -0.9621993 -0.1077103 -0.3646522 -0.9169806 -0.161788 -0.3381977 -0.9332868 -0.1208235 -0.3720732 -0.9268742 -0.04965752 -0.3720851 -0.9268696 -0.04965156 -0.1714646 -0.9765019 -0.1305528 -0.2481165 -0.9576034 -0.1464036 -0.2358552 -0.9634076 -0.1273511 -0.2501432 -0.9621988 -0.1077112 -0.2501948 -0.9621858 -0.1077084 -0.07962256 -0.9870707 -0.1391103 -0.1214182 -0.9810569 -0.1509478 -0.1214371 -0.9810503 -0.1509748 -0.09870761 -0.9925315 -0.0716809 -0.1253468 -0.9879018 -0.09131532 -0.128433 -0.9895171 0.06603652 -0.1307141 -0.9775794 -0.1650828 -0.1714667 -0.9765015 -0.1305528 -0.03531008 -0.9873402 -0.1546368 -0.06575709 -0.9832012 -0.170269 -0.03884857 -0.9871681 -0.1548866 -0.03884249 -0.9950025 -0.09198522 -0.03884065 -0.9950038 -0.09197181 -0.03884226 -0.9950039 -0.09197074 -0.03886461 -0.997327 -0.06187409 -0.03987789 -0.9987848 -0.02895909 -0.3791884 -0.9038923 0.1979771 -0.5031185 -0.8431295 0.1897481 -0.0361005 -0.1331567 0.9904372 -0.1010908 -0.3986161 0.9115294 -0.1010926 -0.398623 0.9115263 -0.1107608 -0.4519668 0.8851317 -0.07740211 -0.3350628 0.9390111 -0.09121 -0.3712234 0.9240529 -0.0877791 -0.3302864 0.9397903 -0.0753135 -0.2873634 0.9548561 -0.05284124 -0.2445162 0.9682043 -0.08777922 -0.3302868 0.9397901 -0.03610289 -0.1331659 0.990436 -0.04714822 -0.1859877 0.9814202 -0.05004853 -0.2054702 0.9773828 -0.06569945 -0.240296 0.9684738 -0.06569945 -0.2402961 0.9684737 -0.01013344 -0.044927 0.9989389 -0.01013344 -0.04492634 0.9989389 -0.01167589 -0.04169428 0.9990622 -0.4061371 -0.6647248 0.6270516 -0.4123762 -0.7085924 0.5725755 -0.3958039 -0.671116 0.6268514 -0.3866167 -0.6573637 0.6468389 -0.3894245 -0.6750817 0.6265887 -0.3894367 -0.6751009 0.6265603 -0.4547322 -0.7892244 0.4127269 -0.4883985 -0.8011283 0.3459194 -0.4376679 -0.7521971 0.4925913 -0.5280507 -0.8277001 0.1899346 -0.4920831 -0.7988746 0.3459097 -0.4920684 -0.7988599 0.3459647 -0.4376807 -0.7522146 0.4925534 -0.4376699 -0.7521986 0.4925875 -0.4376019 -0.7512452 0.4941004 -0.4381247 -0.7519727 0.4925278 -0.4381022 -0.7519388 0.4925998 -0.4955899 -0.8344526 0.2409971 -0.4758449 -0.8458841 0.2409393 -0.4727125 -0.846272 0.2456962 -0.4337199 -0.8669027 0.245696 -0.4307535 -0.8671038 0.2501649 -0.387368 -0.9160056 0.1043069 -0.4348825 -0.8732167 0.2199311 -0.3767546 -0.8998281 0.2199213 -0.4900408 -0.8508278 0.1896101 -0.4982051 -0.8396081 0.2164487 -0.4864127 -0.8464981 0.2164338 -0.4783493 -0.8536018 0.2062667 -0.4890542 -0.8496604 0.1972393 -0.4890496 -0.849663 0.1972393 -0.1912712 -0.7350283 0.6504988 -0.1951049 -0.8311921 0.5206284 -0.1964139 -0.788987 0.5821694 -0.1912702 -0.7350248 0.6505032 -0.1890134 -0.7315667 0.6550451 -0.1896247 -0.735417 0.6505416 -0.3008887 -0.9171081 0.2614933 -0.3031243 -0.9173344 0.2580956 -0.3029898 -0.9170199 0.2593683 -0.2174293 -0.8784742 0.4254497 -0.2336643 -0.9463544 0.223191 -0.2226895 -0.9383167 0.2645207 -0.2108201 -0.9516609 0.2233749 -0.2345237 -0.8962646 0.3764418 -0.2345231 -0.8962629 0.376446 -0.2357267 -0.9192394 0.3153284 -0.2047675 -0.9033362 0.3769004 -0.2047676 -0.9033363 0.3769001 -0.2156582 -0.8263875 0.5201685 -0.2156572 -0.8263838 0.5201749 -0.2135392 -0.8360275 0.5054297 -0.2108648 -0.8275136 0.5203434 -0.2108724 -0.8275406 0.5202974 -0.03422868 -0.0783956 0.9963346 -0.03422844 -0.07839572 0.9963345 -0.02798563 -0.07840853 0.9965285 -0.01104062 -0.1372808 0.9904706 -0.01946353 -0.08309632 0.9963514 -0.022973 -0.08203482 0.9963647 -0.02798569 -0.07840836 0.9965285 -0.1334396 -0.4966643 0.8576238 -0.1334393 -0.496663 0.8576245 -0.1361326 -0.5278182 0.838377 -0.2557731 -0.9298574 0.264472 -0.2577062 -0.9301665 0.2614917 -0.2490997 -0.90531 0.3440392 -0.3159877 -0.8842945 0.3437659 -0.30272 -0.8528168 0.4255163 -0.3055322 -0.8547273 0.4196323 -0.2886807 -0.8131828 0.5053684 -0.291428 -0.8153961 0.5001988 -0.2720263 -0.7661769 0.5822154 -0.2746559 -0.7685936 0.5777785 -0.2528683 -0.7121185 0.6549389 -0.2553268 -0.7146304 0.6512386 -0.2313883 -0.6515327 0.7224712 -0.2336366 -0.65404 0.7194759 -0.2078332 -0.5851151 0.7838658 -0.2098348 -0.5875188 0.7815312 -0.1825098 -0.5137395 0.8383089 -0.1842376 -0.5159497 0.8365718 -0.1557623 -0.4383817 0.885189 -0.1572057 -0.4403319 0.883965 -0.1279726 -0.3601154 0.9240887 -0.1291235 -0.3617462 0.9232912 -0.09952414 -0.2800259 0.9548196 -0.1003891 -0.2813036 0.9543533 -0.07080173 -0.1991943 0.9773989 -0.07139164 -0.200098 0.9771715 -0.02787858 -0.07880932 0.9964998 -0.02816194 -0.07890242 0.9964845 -0.1160916 -0.2121766 0.9703112 -0.1073853 -0.1846781 0.9769148 -0.1216768 -0.2084631 0.9704318 -0.1216969 -0.2084967 0.970422 -0.04295623 -0.0687828 0.9967065 -0.04317891 -0.07053887 0.9965741 -0.03995645 -0.07667601 0.9962552 -0.1160869 -0.2121686 0.9703135 -0.1463578 -0.2621155 0.9538736 -0.128534 -0.2040105 0.970494 -0.1954446 -0.3437912 0.9184819 -0.1954571 -0.3438118 0.9184715 -0.1928189 -0.3346464 0.922406 -0.1975867 -0.3424418 0.9185277 -0.1975853 -0.3424394 0.9185289 -0.2713587 -0.4653007 0.8425317 -0.2713483 -0.4652838 0.8425444 -0.2744418 -0.4775835 0.8346232 -0.2680606 -0.4674065 0.8424219 -0.2322393 -0.4086801 0.8826355 -0.2853762 -0.4562524 0.8428488 -0.1954554 -0.3438087 0.9184731 -0.395828 -0.6711542 0.6267952 -0.3423094 -0.5731157 0.7445554 -0.3487761 -0.6046763 0.7160461 -0.3323596 -0.5794091 0.7441923 -0.3107819 -0.5446909 0.7789265 -0.3447597 -0.5715629 0.7446184 -0.2713451 -0.4652792 0.842548 -0.2579342 -0.9547946 0.1477743 -0.302732 -0.9213267 0.2439476 -0.2508883 -0.9364308 0.2452601 -0.2575144 -0.9346212 0.2452949 -0.2496792 -0.9334771 0.2574507 -0.2312019 -0.9382254 0.2574468 -0.2526442 -0.9415197 0.2229607 -0.373142 -0.893594 0.2495091 -0.3897132 -0.8884618 0.2424033 -0.3881584 -0.8858109 0.2543069 -0.3909162 -0.8857782 0.250163 -0.3907048 -0.8854107 0.2517889 -0.4201791 -0.8454686 0.3295944 -0.4739752 -0.816579 0.3294637 -0.470237 -0.8381876 0.2762583 -0.4920554 -0.798888 0.3459183 -0.4920678 -0.7988591 0.3459675 -0.1239147 -0.4987083 0.8578667 -0.1569857 -0.6256334 0.7641586 -0.1582117 -0.6002482 0.7840096 -0.1653743 -0.6237777 0.7639062 -0.1770225 -0.6681613 0.7226503 -0.1483861 -0.6274996 0.7643468 -0.1896229 -0.7354102 0.6505498 -0.3791906 -0.9038914 0.1979771 -0.3460775 -0.9044485 0.2494064 -0.3450381 -0.9024054 0.2580956 -0.347553 -0.9025163 0.2543057 -0.3362923 -0.8792173 0.337468 -0.4006366 -0.8519307 0.3372005 -0.3842077 -0.8223668 0.4196393 -0.3877985 -0.8242552 0.4125719 -0.366557 -0.7844929 0.5002068 -0.3701023 -0.7867591 0.4939982 -0.3455484 -0.7394316 0.5777865 -0.3489711 -0.7419608 0.5724627 -0.3213179 -0.6874828 0.6512466 -0.3245491 -0.6901566 0.6468011 -0.294106 -0.6291627 0.719483 -0.2970793 -0.6318591 0.7158896 -0.2642213 -0.5651428 0.7815375 -0.2668849 -0.5677487 0.7787387 -0.2320595 -0.4962734 0.836577 -0.2343747 -0.4986881 0.8344931 -0.1980693 -0.4235178 0.883969 -0.20001 -0.4256554 0.8825041 -0.162735 -0.3479154 0.9232942 -0.1642906 -0.3497111 0.9223399 -0.1265563 -0.2705358 0.9543552 -0.1277293 -0.271946 0.9537979 -0.09002536 -0.19243 0.9771726 -0.09083145 -0.193434 0.9768997 -0.03498184 -0.07513761 0.9965594 -0.03995633 -0.07667607 0.9962552 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 3.58337e-7 1.73146e-7 -1 0 0 -1 -5.50188e-7 -3.59515e-7 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.1250096 -0.8447377 0.5203756 0.01514858 -0.6222834 0.7826455 0.1275013 -0.8466962 0.5165745 0.1121217 -0.8278552 0.5496219 0.1120558 -0.8278528 0.5496391 0.09224873 -0.8456812 0.5256553 0.1206402 -0.8475279 0.5168583 0.1264889 -0.8468232 0.516615 0.08475095 -0.7815135 0.6181051 -0.02394908 -0.7774596 0.6284766 0.01918679 -0.6945344 0.7192036 0.01368999 -0.7035928 0.7104716 0.01372754 -0.7035175 0.7105453 0.01512253 -0.6222799 0.7826487 -0.01856744 -0.6384642 0.7694276 -0.04080623 -0.6878667 0.724689 0.04912751 -0.6907095 0.7214617 0.01918286 -0.6945369 0.7192013 -0.1976373 -0.6161052 0.7624656 -0.02251672 -0.5172669 0.8555278 -0.02265894 -0.5173549 0.8554709 -0.02265942 -0.5173562 0.8554702 -0.0226497 -0.5173529 0.8554724 -0.02264988 -0.5173538 0.8554719 -0.1250042 -0.8447257 0.5203966 -0.1024248 -0.7526122 0.650449 -0.098585 -0.7652754 0.6361088 -0.08265143 -0.7556662 0.649721 -0.08265441 -0.7556736 0.649712 -0.02135521 -0.5966948 0.8021841 -0.03285545 -0.6078947 0.7933376 -0.04724407 -0.6457061 0.7621232 -0.0673629 -0.6832324 0.7270872 -0.1068561 -0.6358067 0.7644159 -0.08265388 -0.7556673 0.6497192 -0.1157782 -0.9717789 0.2055265 -0.1219186 -0.9691142 0.2143677 -0.1219136 -0.9691149 0.2143672 -0.1479792 -0.9679096 0.2031087 -0.1706432 -0.9596778 0.2233816 -0.1706119 -0.9596854 0.2233732 -0.1706348 -0.9596794 0.2233816 -0.1225965 -0.8957573 0.4273046 -0.1730728 -0.9098945 0.3770117 -0.1077859 -0.8473864 0.5199217 -0.1077719 -0.8473587 0.5199697 -0.1451268 -0.9639098 0.2231954 -0.1725307 -0.9100004 0.3770048 -0.1596533 -0.9342347 0.31893 -0.1221063 -0.9183924 0.376358 -0.122105 -0.9183898 0.3763647 -0.07952636 -0.9424367 0.3247903 -0.09626883 -0.945011 0.3125486 -0.05565446 -0.8994428 0.4334805 -0.073848 -0.9034904 0.4221985 -0.03022986 -0.8420366 0.5385727 0.01458734 -0.9691448 0.2460601 -0.02304798 -0.9738384 0.2260696 -0.0608837 -0.9747292 0.2149324 -0.0608837 -0.9747293 0.2149325 -0.06088137 -0.9747295 0.2149319 0.03996527 -0.9283688 0.3695055 0.03996729 -0.9283674 0.3695084 0.03709381 -0.9481434 0.3156708 0.07685786 -0.9321838 0.3537322 -0.005015134 -0.9670562 0.2545135 0.1335959 -0.8791975 0.4573444 0.06824994 -0.9043909 0.4212114 0.0847783 -0.874225 0.478062 0.1068137 -0.8540493 0.5091078 0.1361843 -0.8793898 0.4562099 -0.1077833 -0.8473857 0.5199233 -0.1157024 -0.8367515 0.5352196 -0.04983854 -0.8474921 0.5284631 -0.003936052 -0.7708733 0.6369763 0.08469176 -0.7815332 0.6180884 0.07977229 -0.7831887 0.6166457 0.08157581 -0.7812129 0.6189119 0.02873677 -0.849776 0.5263601 0.0560038 -0.8417203 0.5370014 -0.004572749 -0.9061679 0.4228935 0.02239388 -0.8997589 0.4358122 -0.03699207 -0.9480496 0.3159645 -0.01066768 -0.9435827 0.3309652 -0.06284481 -0.9736235 0.219335 -0.001724064 -0.9756488 0.2193317 -0.5034353 0.8639946 -0.008137464 -0.9481831 0.3177056 -0.003474295 0.3996618 -0.9166615 -0.001514971 0.9981072 0.06135141 0.004256069 0.995007 0.09979063 0.001684606 0.9950056 0.09980493 0.001683831 0.9848968 0.1731362 -0.001432538 0.9737885 0.227159 0.01160919 0.9829026 0.1841249 7.49364e-4 0.9828989 0.184144 7.56623e-4 0.9858837 0.1671308 -0.01002389 0.9863488 0.1646155 0.004214465 0.9887487 0.1493984 -0.007489264 0.9882512 0.1523405 0.01232117 0.9963338 0.0855419 -0.001156806 0.9966566 0.0814979 -0.005806803 0.996349 -0.0853427 0.00230056 0.999938 -0.01113933 -3.6949e-4 0.9999373 -0.01119053 -3.67856e-4 0.9961944 0.08715748 -3.66224e-4 0.9999005 0.009741246 0.01021152 0.9981065 0.06136286 0.004254937 0.9625493 -0.2710801 0.003771603 0.9839247 -0.1785812 -9.37388e-4 0.9961942 -0.08715748 -9.33544e-4 0.986338 -0.1642675 0.01239275 0.9863405 -0.1642524 0.01239055 0.9166938 -0.3995904 4.67766e-4 0.9412192 -0.3377965 -6.34663e-5 0.9659262 -0.258818 -6.32305e-5 0.9445731 -0.3279768 0.01459133 0.9625496 -0.2710794 0.003771483 0.8184084 -0.5746168 0.004840612 0.8641327 -0.5032588 -0.00231266 0.9063056 -0.4226167 -0.002303302 0.8681062 -0.4961034 0.01653152 0.9167135 -0.3995448 4.60764e-4 0.765025 -0.6437167 0.01911664 0.8191514 -0.5735767 9.39394e-4 0.7615575 -0.6480914 -0.002762913 0.6065785 -0.7950224 0.001378118 0.6714918 -0.7410085 -0.002251565 0.7071062 -0.7071038 -0.002248823 0.6729385 -0.7396307 0.01001322 0.7615432 -0.6481083 -0.002762913 0.532356 -0.8464596 0.01015979 0.5735681 -0.8191415 0.005187928 0.5314679 -0.847073 -0.003043234 0.4226182 -0.9063065 -0.001514494 0.399838 -0.916571 0.005223572 0.5314598 -0.8470781 -0.003043234 0.07926046 -0.9968516 0.002142727 0.2346548 -0.9720773 -0.00172621 0.2588181 -0.9659245 -0.001725673 0.234695 -0.9720562 0.00500375 0.3193045 -0.9476522 3.72332e-4 0.08715516 -0.9961948 0 -0.08715516 -0.9961948 0 -0.08715516 -0.9961948 0 -0.2588173 -0.9659262 0 -0.2588173 -0.9659262 0 -0.4226187 -0.9063076 0 -0.4226187 -0.9063076 0 -0.5735758 -0.8191525 0 -0.5735758 -0.8191524 0 -0.5735759 -0.8191525 0 -0.707108 -0.7071056 0 -0.707108 -0.7071056 0 -0.8191517 -0.5735769 0 -0.8191517 -0.5735769 0 -0.906308 -0.4226178 0 -0.906308 -0.4226178 0 -0.9659261 -0.2588179 0 -0.9659261 -0.2588179 0 -0.9946149 -0.1036399 0 -0.9961881 -0.08715695 0.00363034 -0.9994585 0.03280597 -0.002535223 -0.9994591 0.03278899 -0.002535223 -0.9961774 0.08715599 0.005861937 -0.9866982 0.1625316 -0.003183722 -0.9714663 0.2371552 0.003270447 -0.9867 0.162521 -0.003183484 -0.9867006 0.162517 -0.003183722 -0.9659202 0.258817 -0.003467798 -0.9494673 0.3135807 0.01338481 -0.9494681 0.3135782 0.01338416 -0.8441496 0.5361077 2.85044e-4 -0.8191274 0.5735616 0.00759083 -0.7736757 0.6335481 -0.006531417 -0.8441488 0.5361089 2.85181e-4 -0.8961561 0.4437387 -4.63932e-4 -0.9063084 0.4226168 -4.63746e-4 -0.8972247 0.441528 0.006395936 -0.8972198 0.441538 0.006397962 -0.7070847 0.7070799 0.008325695 -0.773884 0.6332933 -0.006580173 -0.7736764 0.6335473 -0.006531417 -0.5883302 0.8085972 0.006183505 -0.573557 0.8191255 -0.008111298 -0.5193004 0.8539898 0.03206914 -0.5883238 0.8086017 0.006184935 -0.6648638 0.7469323 -0.006951332 -0.6648663 0.7469301 -0.00695151 -0.6648673 0.7469292 -0.00695151 -0.4225881 0.906242 0.01203542 -0.401183 0.9157956 0.01925075 -0.4011039 0.9158297 0.01927614 -0.2198134 0.9747238 0.03994429 -0.2197515 0.9747362 0.03998363 -0.2985855 0.9543828 2.7521e-4 -0.3944295 0.9189261 -3.48375e-4 -0.3944941 0.9188984 -3.48374e-4 -0.01620388 0.9998687 0 -0.0672881 0.9976947 0.00881356 -0.08713412 0.9959816 0.0206936 -0.1396805 0.9901966 -1.19051e-4 -0.2588173 0.9659264 -1.17872e-4 -0.1357524 0.9831178 0.1226817 -0.2198136 0.9747239 0.03994244 0.04088091 0.9991641 0 0.08714085 0.9960585 0.01655143 0.1280482 0.991768 -9.72116e-5 0.3743088 0.9272991 -0.003068268 0.2618199 0.9651058 0.004600346 0.2618082 0.9651089 0.004602253 0.2075461 0.9776809 0.0326302 0.2588186 0.965926 1.7675e-4 0.1273669 0.9918558 -9.53483e-5 0.1280349 0.9917697 -9.535e-5 0.3743038 0.9273011 -0.003068268 0.4226129 0.9062951 0.00525701 0.3887612 0.9212592 0.01209217 0.620719 0.7840275 -0.002930521 0.5164257 0.8562061 0.01468652 0.5735758 0.8191524 2.10769e-4 0.4961839 0.8682061 -0.004454731 0.496205 0.8681939 -0.004454731 0.724199 0.6895911 9.13961e-5 0.7242013 0.6895887 9.11343e-5 0.6405711 0.7677422 0.01550811 0.707108 0.7071033 0.001749396 0.6207129 0.7840325 -0.002930045 0.6207026 0.7840406 -0.002930045 0.8138743 0.5810397 0.00133115 0.8138574 0.5810632 0.001331925 0.8191509 0.573578 1.80767e-4 0.8125452 0.5828982 -1.12219e-4 0.812525 0.5829263 -1.12219e-4 0.8937474 0.4485629 0.002661883 0.8937408 0.4485758 0.002662897 0.9063083 0.4226168 4.31682e-4 0.8911216 0.4537636 -9.76675e-4 0.8910989 0.4538083 -9.76676e-4 0.9848969 0.1731356 -0.001432538 0.9511384 0.308738 0.004064261 0.965925 0.2588183 -0.001356482 0.9484862 0.3168154 -0.001400887 0.9484209 0.3170106 -0.001400887 -4.35717e-5 0.865472 -0.5009574 -0.001841723 0.6552964 0.7553696 -2.82001e-5 0.1399657 0.9901564 0.004252493 -0.5505855 -0.8347679 0.01315748 -0.4729523 -0.8809898 4.83723e-4 -0.573578 -0.8191509 0 -0.9063078 -0.4226184 0 -0.819151 -0.573578 0 -0.819151 -0.573578 0 -0.7071068 -0.7071068 0 -0.7071068 -0.7071068 0 -0.6287378 -0.7776173 0.00107789 -0.5945413 -0.8040645 0.002560198 -0.9659227 -0.2588182 0 -0.9519585 -0.3062272 0 -0.9063078 -0.4226184 0.001119554 -0.996437 -0.08433276 0.001119256 -0.9964379 -0.08432388 0.001402735 -0.9961938 -0.08715486 -9.48616e-4 -0.9780424 -0.2084039 -9.48616e-4 -0.9780411 -0.2084097 -0.001164615 -0.980054 0.1987283 -0.001164495 -0.9800575 0.1987102 0.002195239 -0.9975764 0.06954395 1.61489e-4 -0.9961948 0.08715486 -2.15167e-5 -0.9999504 -0.009958863 -2.15167e-5 -0.9999502 -0.009984195 -0.001164615 -0.980058 0.1987081 0.002407729 -0.9659231 0.2588183 -0.001378536 -0.9448809 0.3274113 -0.001378536 -0.9448802 0.3274136 1.62461e-4 -0.9063078 0.4226183 0.009099483 -0.943099 0.3323879 -6.5123e-4 -0.7989274 0.6014272 0.005393266 -0.8473935 0.530938 6.66412e-4 -0.8191515 0.5735768 -5.06142e-4 -0.8915486 0.4529246 -5.06142e-4 -0.8915468 0.4529283 5.04555e-4 -0.704503 0.7097008 5.04489e-4 -0.7045021 0.7097018 8.10245e-4 -0.7071067 0.7071066 -6.53955e-4 -0.7989021 0.6014608 -6.53955e-4 -0.7989033 0.601459 -0.001158356 -0.5223426 0.8527349 -0.001158416 -0.5223405 0.8527362 0.001804292 -0.5735755 0.8191506 -2.42902e-4 -0.6190559 0.7853469 -2.42902e-4 -0.6190589 0.7853446 -0.001158356 -0.5223419 0.8527355 0.001409053 -0.4226179 0.9063069 -6.39331e-4 -0.3892766 0.9211207 7.64944e-4 -0.258819 0.9659256 -6.39345e-4 -0.3892774 0.9211204 -6.39345e-4 -0.389276 0.921121 0 -0.08715587 0.9961947 0 -0.001056492 0.9999994 4.96045e-4 -0.08208978 0.9966248 0 -0.08159118 0.9966659 0.03125661 -0.2081388 0.9775997 -3.27919e-4 -0.09067851 0.9958801 -3.31164e-4 -0.2420878 0.9702543 -3.31159e-4 -0.2420884 0.9702543 -2.81498e-5 0.08715605 0.9961947 0.005670368 0.1309981 0.9913664 0.005670964 0.1310051 0.9913655 0.001545608 0.07391786 0.9972631 0.001545965 0.07392913 0.9972623 6.39743e-4 0.04525965 0.9989751 1.4037e-4 0.02722644 0.9996293 1.40547e-4 0.02724719 0.9996288 0 0.005649864 0.9999841 -6.14146e-4 0.258819 0.9659256 0.007726788 0.312747 0.949805 0.007727503 0.3127523 0.9498032 8.15491e-4 0.234167 0.972196 8.15492e-4 0.2341671 0.9721961 8.51753e-6 0.1845014 0.9828323 0.004704773 0.4470645 0.8944894 5.72051e-4 0.3815829 0.9243345 -6.15475e-4 0.3191369 0.9477084 0.006141483 0.5947439 0.8038918 -2.77495e-4 0.5415775 0.8406509 -2.75008e-4 0.4226183 0.9063078 0.02049207 0.5350503 0.8445717 0.004704773 0.4470642 0.8944895 -0.001831948 0.5735756 0.8191506 0.01523566 0.6524396 0.7576875 0.00614041 0.5947355 0.8038979 0.007644534 0.7409376 0.6715303 6.21167e-4 0.7071056 0.7071077 -9.9149e-4 0.7416615 0.6707736 7.63256e-4 0.8191525 0.5735753 0.001724958 0.8224117 0.5688902 -9.9149e-4 0.7416622 0.6707729 -0.002663373 0.9466371 0.3222904 0.005082547 0.8924336 0.4511501 0.001914501 0.9063069 0.4226157 -5.54951e-4 0.8924608 0.4511246 -5.54952e-4 0.8924589 0.4511283 -0.002663373 0.9466387 0.3222857 0.003831863 0.9659182 0.2588191 -0.002844572 0.9842057 0.1770062 0.0038594 0.9961872 0.08715635 0.003254234 0.9955868 0.0937888 -0.002844572 0.9842076 0.1769953 -0.002253115 0.9901556 -0.1399521 -0.002253115 0.9901565 -0.139946 0.003622055 0.9961881 -0.08715653 -0.00282222 0.999949 0.00970155 -0.00282222 0.9999491 0.009698212 -5.13615e-4 0.9278354 -0.3729899 -5.13615e-4 0.9278586 -0.3729319 0.001050949 0.9659247 -0.2588209 0.006380021 0.9570248 -0.2899357 0.001606464 0.9728122 -0.23159 -4.33836e-5 0.9063085 -0.4226166 0.0161125 0.8663364 -0.4992012 0.006779193 0.8913902 -0.453186 5.56024e-4 0.8368007 -0.5475074 0.001954972 0.8191505 -0.5735754 0.006497502 0.8369119 -0.5472992 0.001178979 0.698634 -0.7154785 0.01082456 0.7453528 -0.6665825 0.001570641 0.7071049 -0.707107 -7.40421e-4 0.7832344 -0.621726 -7.40421e-4 0.783237 -0.6217229 0.00371921 0.573574 -0.8191454 -6.63338e-4 0.6202836 -0.7843775 -6.63339e-4 0.6202843 -0.7843767 -0.001293241 0.3901927 -0.9207323 -0.001293003 0.3901953 -0.9207311 0.002861917 0.4226166 -0.9063041 -0.002300024 0.5223673 -0.8527175 -0.002300024 0.5223675 -0.8527174 -0.001293241 0.3901931 -0.9207321 0.00153923 0.2588188 -0.9659246 0.00502628 0.2843053 -0.9587206 0 0.05516707 -0.9984772 0 0.05516266 -0.9984773 0.01077347 0.1769343 -0.9841637 -0.001117646 0.08715492 -0.9961942 -0.002136707 0.1831687 -0.9830791 -0.002136707 0.1831768 -0.9830777 0 -0.06868678 -0.9976382 0.001189708 -0.08715474 -0.9961941 0.002350926 -0.06963151 -0.99757 -0.001429259 -0.3544914 -0.9350582 0.001331031 -0.282961 -0.9591306 0.002644181 -0.2588181 -0.9659224 -0.001364052 -0.2045984 -0.978845 -0.001364052 -0.2045941 -0.978846 -0.001001477 -0.4713336 -0.8819544 -0.001001477 -0.47134 -0.881951 0.002619743 -0.4226169 -0.9063045 -0.001429498 -0.3545027 -0.9350539 -0.001429498 -0.354501 -0.9350545 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -6.27868e-4 0.2182006 0.9759037 0 0.001056492 0.9999995 -0.002663373 -0.9466371 0.3222904 -0.00109744 -0.7675392 -0.6410011 -0.00148344 -0.6288023 -0.7775638 -0.001479864 -0.5735774 -0.8191501 -0.001093089 -0.7071052 -0.7071074 0.01519429 -0.7660538 -0.6425969 0.002586066 -0.7049354 -0.7092669 -2.82037e-5 -0.8561043 -0.516803 0.002915918 -0.8191486 -0.5735741 0.003419399 -0.8211396 -0.5707173 0.003433406 -0.8211956 -0.5706365 -2.82036e-5 -0.8562256 -0.516602 1.20557e-4 -0.9063085 -0.4226166 0.007002592 -0.8900108 -0.4558855 0.001606464 -0.9728122 -0.23159 0.006384909 -0.9570068 -0.2899952 0.001045703 -0.9659247 -0.2588209 -5.15181e-4 -0.9279715 -0.3726509 -5.15181e-4 -0.9279634 -0.3726707 0.003622055 -0.9961881 -0.08715653 -0.002253115 -0.9901565 -0.1399461 -0.002253115 -0.9901556 -0.1399521 -0.002844572 -0.9842076 0.1769953 0.003254234 -0.9955868 0.0937888 0.0038594 -0.9961872 0.08715635 -0.00282222 -0.9999491 0.009698212 -0.00282222 -0.999949 0.00970155 -0.002657532 -0.9659219 0.2588201 0.009082138 -0.9466626 0.3220982 -0.002844572 -0.9842057 0.1770062 0.005082547 -0.8924336 0.4511501 0.001914501 -0.9063069 0.4226157 -5.54952e-4 -0.8924608 0.4511246 -9.9149e-4 -0.7416621 0.670773 0.001606047 -0.8191516 0.5735748 7.10232e-4 -0.8224419 0.5688487 -5.54951e-4 -0.8924589 0.4511284 -9.9149e-4 -0.7416615 0.6707736 6.21169e-4 -0.7071056 0.7071077 0.007644534 -0.7409376 0.6715303 0.006141483 -0.5947439 0.8038918 0.00614041 -0.5947355 0.803898 0.002920985 -0.5735741 0.8191485 -0.001841723 -0.6552972 0.7553688 -0.001841723 -0.6552964 0.7553696 5.72052e-4 -0.3815829 0.9243345 0.004704773 -0.4470645 0.8944894 0.004704773 -0.4470643 0.8944895 4.53365e-4 -0.4226183 0.9063076 -2.77495e-4 -0.541582 0.8406479 -2.77495e-4 -0.5415775 0.8406509 8.51753e-6 -0.1845014 0.9828323 8.15492e-4 -0.234167 0.9721961 8.15491e-4 -0.234167 0.972196 0.007727503 -0.3127523 0.9498033 4.53859e-4 -0.2588191 0.9659258 -6.15476e-4 -0.3191319 0.94771 -6.15476e-4 -0.3191369 0.9477084 0 -0.005649864 0.9999841 1.40547e-4 -0.02724719 0.9996288 1.4037e-4 -0.02722644 0.9996293 6.39743e-4 -0.04525965 0.9989751 0.001545965 -0.07392913 0.9972623 0.001545608 -0.07391786 0.9972631 0.005670964 -0.1310051 0.9913655 0.001902818 -0.08715587 0.9961929 -2.82002e-5 -0.1399064 0.9901648 -2.82001e-5 -0.1399657 0.9901564 0 0.08715587 0.9961947 -6.23593e-4 0.09385389 0.9955857 0 0.09618717 0.9953633 0.0619263 0.149834 0.98677 4.47222e-4 0.07411456 0.9972497 -0.001074731 0.3568994 0.9341422 -0.001074731 0.3568994 0.9341421 -0.001069426 0.2588189 0.9659252 0.006022155 0.34982 0.9367976 -6.27905e-4 0.2181963 0.9759047 0.007093071 0.648176 0.7614576 -0.001124441 0.5735761 0.8191515 -0.001129925 0.6537988 0.7566677 -4.38618e-4 0.5445148 0.8387511 -4.38641e-4 0.5445142 0.8387515 -4.34912e-4 0.4226183 0.9063076 0.009955883 0.5359524 0.8441895 0.002953231 0.4519836 0.8920214 -3.96733e-4 0.7071067 0.7071067 0.003914296 0.7386757 0.6740496 0.003914475 0.7386782 0.6740469 -8.63345e-4 0.8191514 0.5735767 0.01100969 0.8807293 0.4734919 6.25647e-4 0.8151214 0.57929 6.25124e-4 0.8151169 0.5792961 -3.97301e-4 0.7410604 0.6714382 -5.56403e-4 0.9063076 0.4226182 0.01327538 0.9529995 0.3026809 0.004772901 0.9228478 0.385135 0.004773736 0.9228514 0.3851265 -8.69703e-4 0.8843075 0.4669042 -0.001122176 0.9961941 0.0871548 0.006137371 0.9996654 0.02512806 0.001907169 0.9952265 0.09757453 -0.001348018 0.9852246 0.1712623 -0.001347959 0.9852257 0.1712561 -0.001342594 0.9659249 0.2588188 0.008377969 0.9845764 0.1747549 -5.613e-4 0.9550591 0.2964151 -1.60052e-4 0.9961947 -0.08715498 0.01170188 0.982488 -0.1859581 0.002121448 0.9949675 -0.1001762 0.002121627 0.994967 -0.1001812 -0.001124501 0.9997256 0.02339679 0.005898714 0.951942 -0.3062219 0.001307129 0.9705528 -0.2408851 -1.60864e-4 0.9824165 -0.1867023 0 0.6287378 -0.7776173 0 0.7071068 -0.7071068 0 0.7071068 -0.7071068 0 0.819151 -0.573578 0 0.819151 -0.573578 0 0.9063078 -0.4226184 0 0.9063078 -0.4226184 0 0.9659258 -0.2588191 -3.47847e-4 0.4506248 -0.8927135 -3.47847e-4 0.4506347 -0.8927084 4.78784e-4 0.5735779 -0.8191509 0.00206542 0.5621381 -0.8270409 0.00206691 0.5621264 -0.8270487 0.006196916 0.3797028 -0.9250878 0.001275539 0.422618 -0.9063071 -9.80684e-4 0.2988253 -0.9543073 -0.001679658 0.1643236 -0.9864051 -0.001679658 0.164321 -0.9864055 0.002459406 0.2588183 -0.965923 -9.80746e-4 0.298821 -0.9543087 -9.80684e-4 0.2988183 -0.9543095 0 -0.07447266 -0.997223 0 -0.07447069 -0.9972233 0 0.0871548 -0.9961948 0.004899263 0.05060249 -0.9987068 0.004900574 0.05058252 -0.9987079 0.002709031 -0.2588181 -0.9659223 -0.001286447 -0.2223902 -0.9749569 -0.001275062 -0.08715486 -0.9961939 0.01691061 -0.2135152 -0.9767934 0.01691281 -0.2135319 -0.9767897 0.001468837 -0.4262282 -0.9046145 -4.57736e-4 -0.3278641 -0.9447249 -4.57736e-4 -0.3278683 -0.9447233 0.010082 -0.6254638 -0.780188 -5.17079e-4 -0.5377492 -0.8431047 -5.12797e-4 -0.4226183 -0.9063076 0.01975274 -0.5299633 -0.8477904 0.001468956 -0.4262292 -0.904614 -0.01620388 -0.9998687 0 0.4798187 -0.8773633 -0.002767801 0.9915797 -0.129494 -0.001072466 0.9826124 -0.1820434 -0.03651267 0.984452 -0.1742078 -0.0224967 0.9841824 -0.1767892 -0.01142287 0.9867268 -0.1608674 -0.02217918 0.9873089 -0.1585679 -0.008794248 0.9848304 -0.1735184 6.51541e-4 0.9848338 -0.1734993 6.44306e-4 0.9774799 -0.2107899 0.01002949 0.9863439 -0.1646953 -0.001072168 0.9950056 -0.09980493 0.001683831 0.995007 -0.09979063 0.001684606 0.9037916 -0.4279721 8.37655e-4 0.9589761 -0.2834861 -6.85536e-4 0.9659258 -0.2588185 -6.85068e-4 0.9599615 -0.2801272 0.001637637 0.959996 -0.280009 0.001624882 0.8478075 -0.530304 -4.11148e-5 0.8478142 -0.5302934 -4.14421e-5 0.9063085 -0.4226169 -4.11869e-5 0.8583735 -0.5128643 0.01284343 0.9037939 -0.4279673 8.37241e-4 0.6957546 -0.7182734 0.003006279 0.7848564 -0.6196753 -0.001726448 0.8191497 -0.5735772 -0.00172311 0.7917965 -0.6107598 0.005539119 0.791788 -0.6107708 0.005540847 0.5895653 -0.8077206 2.57854e-4 0.6922392 -0.7216681 -2.66555e-4 0.7071092 -0.7071045 -2.66411e-4 0.6957678 -0.7182605 0.003002941 0.6957489 -0.7182788 0.003006935 0.5735737 -0.8191494 -0.002753019 0.5040141 -0.8634533 0.02044707 0.5895927 -0.8077006 2.57123e-4 0.2833688 -0.9590101 0.001395285 0.3795627 -0.9251654 -0.00111705 0.4226185 -0.9063071 -0.001115441 0.3924568 -0.9196863 0.01243716 0.3924606 -0.9196848 0.01243644 0.08715277 -0.996195 0 0.03732401 -0.9983318 0.0440514 0.09014862 -0.9958608 0.01159536 0.1753154 -0.9844993 -0.005053579 0.1752955 -0.9845028 -0.005050897 0.2588152 -0.9659137 -0.005033791 0.1995007 -0.979366 0.03227657 0.2833704 -0.9590095 0.001395046 -0.2358304 -0.9717762 0.005925834 -0.2587952 -0.9658433 0.01310575 -0.2389079 -0.9706806 0.02649962 -0.2388913 -0.9706844 0.02651011 -0.1832386 -0.9830685 4.31994e-6 -0.124035 -0.9922779 -1.40771e-5 -0.08715277 -0.996195 -1.41326e-5 -0.137067 -0.9892942 0.05009609 -0.06601309 -0.9977818 0.008593499 -0.4457928 -0.8951306 -0.003171622 -0.4456641 -0.8951948 -0.003128528 -0.422587 -0.9062396 0.01224464 -0.3269618 -0.9450141 -0.006662487 -0.3269606 -0.9450144 -0.006662487 -0.6970798 -0.7169932 -6.223e-4 -0.5779501 -0.8160718 6.68103e-4 -0.577953 -0.8160698 6.67926e-4 -0.5779436 -0.8160763 6.70024e-4 -0.5735719 -0.8191469 0.003701508 -0.4456745 -0.8951896 -0.003131568 -0.4456704 -0.8951916 -0.003131568 -0.6971426 -0.7169321 -6.22299e-4 -0.7071059 -0.7071012 0.003061115 -0.6991146 -0.714994 0.00474298 -0.8593104 -0.5114355 -0.004413247 -0.8593136 -0.5114302 -0.004413843 -0.8191273 -0.5735615 0.00759083 -0.787106 -0.6168127 -0.002506136 -0.7871118 -0.6168053 -0.002506136 -0.8593159 -0.5114262 -0.004413247 -0.9062917 -0.422609 0.006081759 -0.9234064 -0.3838135 -0.002809643 -0.9920158 -0.1261056 -0.001413524 -0.9676402 -0.2523273 0.001832306 -0.9676409 -0.2523247 0.001832187 -0.9659202 -0.258817 0.003465056 -0.9234032 -0.3838211 -0.002806723 -0.9234001 -0.3838287 -0.002806723 -0.9920209 -0.126066 -0.001413524 -0.9961798 -0.08715623 0.005440473 -0.9991461 -0.04130542 9.92647e-4 -0.8191517 0.5735769 0 -0.906308 0.4226178 0 -0.906308 0.4226178 0 -0.9659261 0.2588179 0 -0.9659261 0.2588179 0 -0.9946149 0.1036399 0 -0.9961881 0.08715695 0.00363034 -0.9999804 0.006241142 -5.29749e-4 -0.9999802 0.006262838 -5.29749e-4 -0.707108 0.7071056 -3.2173e-7 -0.7071068 0.7071068 0 -0.8191517 0.5735769 0 -0.08715516 0.9961948 0 -0.2588173 0.9659262 0 -0.2588173 0.9659262 0 -0.4226187 0.9063076 0 -0.4226187 0.9063076 0 -0.5735758 0.8191525 0 -0.5735758 0.8191524 0 -0.5735759 0.8191525 0 -0.7071108 0.7071027 0 0.08715498 0.9961929 0.001948595 0.07925969 0.9968541 0 -0.08715516 0.9961948 0 0.3996618 0.9166615 -0.001514971 0.3193044 0.9476522 3.72331e-4 0.2588168 0.9659193 0.003697395 0.234655 0.9720772 -0.00172621 0.2346548 0.9720773 -0.00172621 0.3996512 0.916666 -0.001514971 0.4226156 0.906301 0.003840208 0.5314598 0.847078 -0.003043234 0.6065785 0.7950224 0.001378118 0.5735676 0.8191407 0.005358576 0.5315425 0.8470263 -0.003028869 0.5314679 0.847073 -0.003043234 0.7070981 0.7070956 0.005292773 0.6714956 0.7410051 -0.002251565 0.6714918 0.7410085 -0.002251565 0.8184084 0.5746168 0.004840612 0.765025 0.6437168 0.01911664 0.8191514 0.5735767 9.39403e-4 0.7615575 0.6480914 -0.002762913 0.7615432 0.6481084 -0.002762913 0.9166938 0.3995904 4.67764e-4 0.9167135 0.3995448 4.60764e-4 0.9063 0.422614 0.004229426 0.8641276 0.5032675 -0.0023126 0.8641327 0.5032588 -0.00231266 0.9625493 0.2710801 0.003771603 0.9625496 0.2710794 0.003771483 0.9659251 0.2588177 0.001462519 0.9412639 0.3376718 -6.34664e-5 0.9412192 0.3377965 -6.34664e-5 0.9999379 0.01113933 -3.6949e-4 0.9981071 -0.06135141 0.004256069 0.9981065 -0.06136286 0.004254937 0.9961938 -0.08715742 0.001267015 0.9999372 0.01118773 -3.67856e-4 0.9999372 0.01119053 -3.67856e-4 0.996349 0.0853427 0.00230056 0.9863405 0.1642524 0.01239055 0.9961939 0.08715742 0.001207351 0.9839271 0.1785679 -9.37387e-4 0.9839247 0.1785813 -9.37387e-4 -0.1216969 0.2084967 0.970422 -0.04227381 0.07449966 0.9963246 -0.3553407 0.9006074 0.2502785 -0.2927183 0.8921562 0.3440542 -0.2415679 0.9402254 0.2400439 -0.004458904 0.01820862 0.9998243 -0.02617067 0.1087682 0.9937226 -0.01784682 0.08375322 0.9963267 -0.0137273 0.1103526 0.9937977 -0.007930457 0.02482259 0.9996605 -0.007945179 0.05071479 0.9986816 -0.004459023 0.01820933 0.9998242 -0.05199444 0.1960228 0.9792199 -0.05412763 0.2042448 0.9774222 -0.04972833 0.1966109 0.9792197 -0.07484233 0.288032 0.9546917 -0.07474082 0.2875346 0.9548496 -0.07497769 0.2879837 0.9546956 -0.07497769 0.2879837 0.9546956 -0.09296911 0.3707053 0.9240856 -0.09748989 0.3788957 0.92029 -0.1107608 0.4519668 0.8851317 -0.09749382 0.37891 0.9202837 -0.0974906 0.3788976 0.9202892 -0.1649306 0.6715449 0.7223748 -0.1951048 0.8311921 0.5206284 -0.1964139 0.7889871 0.5821694 -0.1912712 0.7350283 0.6504988 -0.1912702 0.7350248 0.6505032 -0.1890134 0.7315667 0.6550451 -0.1896247 0.7354169 0.6505417 -0.1896229 0.7354102 0.6505498 -0.219738 0.8998888 0.3767166 -0.2284286 0.875583 0.4256464 -0.2345231 0.8962628 0.3764462 -0.2336638 0.9463526 0.2231998 -0.2336643 0.9463543 0.2231911 -0.2226895 0.9383167 0.2645207 -0.2108201 0.9516609 0.2233749 -0.2047676 0.9033363 0.3769001 -0.2108724 0.8275406 0.5202974 -0.2108648 0.8275136 0.5203434 -0.2135392 0.8360275 0.5054297 -0.2156572 0.8263837 0.5201749 -0.2156582 0.8263875 0.5201685 -0.3027653 0.9164938 0.2614812 -0.3012554 0.9179531 0.2580838 -0.3038545 0.9238566 0.232726 -0.3673237 0.9211088 0.1289646 -0.2439327 0.9468054 0.2098963 -0.243987 0.9467916 0.2098954 -0.2439337 0.9468053 0.209895 -0.2579762 0.9358684 0.2399971 -0.2560519 0.9306262 0.2614812 -0.2574332 0.9294021 0.2644613 -0.2490997 0.90531 0.3440391 -0.2145225 0.9385857 0.2702533 -0.2345234 0.8962667 0.3764371 -0.3423098 0.5731165 0.7445545 -0.3487763 0.6046761 0.7160461 -0.4061385 0.6647285 0.6270467 -0.4123771 0.7085919 0.5725753 -0.395828 0.6711542 0.6267953 -0.3958155 0.6711344 0.6268243 -0.3866161 0.6573639 0.6468389 -0.3894237 0.6750807 0.6265902 -0.3894188 0.6750729 0.6266018 -0.4330916 0.8659427 0.2501497 -0.4313945 0.8680666 0.2456811 -0.3623427 0.9131628 0.1866589 -0.3906245 0.8899991 0.2351896 -0.3887088 0.8867531 0.2501488 -0.3903769 0.8848395 0.2542927 -0.4920682 0.7988597 0.3459653 -0.4920627 0.7988728 0.3459429 -0.4790891 0.8236196 0.3035199 -0.4705886 0.8118538 0.3456007 -0.4673727 0.7819327 0.4124852 -0.4376728 0.7522023 0.4925792 -0.4762892 0.84862 0.2302013 -0.4762841 0.8486217 0.2302055 -0.4335452 0.8712616 0.2300908 -0.4871261 0.8614934 0.1433089 -0.3623383 0.9131645 0.1866589 -0.4381022 0.7519388 0.4925998 -0.4381116 0.7519531 0.4925697 -0.4376027 0.7512448 0.4941005 -0.4376709 0.7522 0.4925845 -0.4376684 0.7521962 0.4925923 -0.0316689 0.07978177 0.9963092 -0.1074542 0.1846414 0.976914 -0.04528206 0.07290685 0.9963102 -0.03844135 0.06774556 0.9969618 -0.04356437 0.06838136 0.9967076 -0.1954565 0.3438107 0.9184721 -0.1928185 0.3346466 0.922406 -0.1976158 0.3424901 0.9185033 -0.1975853 0.3424394 0.9185289 -0.2713483 0.4652836 0.8425445 -0.2744418 0.4775835 0.8346232 -0.1954446 0.3437912 0.9184819 -0.1954554 0.3438087 0.9184731 -0.2425891 0.4030781 0.8824276 -0.2680463 0.467383 0.8424395 -0.2680606 0.4674065 0.8424219 -0.116117 0.2122581 0.9702903 -0.1160908 0.2121752 0.9703117 -0.1461268 0.2622383 0.9538753 -0.128533 0.2040071 0.9704949 -0.128534 0.2040106 0.970494 -0.385773 0.8252254 0.4125313 -0.3862669 0.8214228 0.4195979 -0.3682331 0.7876628 0.4939551 -0.3684646 0.7836266 0.5001633 -0.3472779 0.7427876 0.57242 -0.3472833 0.7386521 0.5777435 -0.3230447 0.6908996 0.6467612 -0.322866 0.6867953 0.6512064 -0.2957726 0.6325117 0.7158544 -0.2954561 0.6285703 0.7194477 -0.2657772 0.5683081 0.7787093 -0.2653704 0.5646446 0.7815082 -0.2334614 0.4991543 0.8344703 -0.2330105 0.4958659 0.8365543 -0.1992821 0.4260308 0.8824876 -0.1988299 0.4231955 0.8839527 -0.1637343 0.3500004 0.922329 -0.1633178 0.3476707 0.9232835 -0.1273283 0.272156 0.9537917 -0.1269774 0.2703604 0.9543491 -0.09056729 0.1935731 0.9768966 -0.09030306 0.1923149 0.9771696 -0.03582137 0.07691597 0.9963939 -0.03581267 0.07477915 0.9965569 -0.02427828 0.07599222 0.9968128 -0.03166931 0.07978177 0.9963091 -0.03166908 0.07978165 0.9963092 -0.1361326 0.5278182 0.838377 -0.1334393 0.4966631 0.8576245 -0.1334396 0.4966643 0.8576238 -0.1653699 0.6237608 0.763921 -0.1653743 0.6237777 0.7639063 -0.1582117 0.6002482 0.7840096 -0.1569857 0.6256334 0.7641586 -0.1239147 0.4987083 0.8578667 -0.4920713 0.7988637 0.3459518 -0.4920706 0.7988629 0.3459542 -0.5179555 0.8207832 0.2409088 -0.503116 0.8431268 0.1897668 -0.5031195 0.8431305 0.189741 -0.3778263 0.8621779 0.3374857 -0.4075765 0.8640356 0.2955062 -0.4201791 0.8454686 0.3295944 -0.4604324 0.8242311 0.3296136 -0.4751319 0.8449206 0.2456802 -0.4734392 0.8472373 0.2409238 -0.4746621 0.8488492 0.2327036 -0.4950059 0.8371367 0.2327476 -0.4818611 0.8555124 0.1894951 -0.2713587 0.4653006 0.8425317 -0.2713451 0.4652792 0.842548 -0.3218465 0.5386006 0.7786682 -0.3323314 0.5793638 0.7442402 -0.3323522 0.5793972 0.7442048 -0.3553295 0.9006118 0.2502785 -0.3479747 0.9081279 0.232846 -0.3454967 0.9033091 0.2542927 -0.3471037 0.9016166 0.2580823 -0.3362922 0.8792173 0.337468 -0.3216066 0.897238 0.3025445 -0.3037802 0.8553683 0.4195981 -0.3044958 0.8522019 0.4254813 -0.2898101 0.8159947 0.5001628 -0.2903255 0.8126199 0.5053316 -0.273188 0.7691434 0.5777429 -0.273523 0.7656713 0.5821792 -0.2540232 0.715125 0.6512054 -0.2542018 0.7116746 0.6549053 -0.2325019 0.6544764 0.7194466 -0.2325527 0.6511508 0.7224416 -0.2088716 0.5878943 0.7815069 -0.2088246 0.5847949 0.7838413 -0.1834434 0.5162633 0.8365529 -0.1833297 0.5134786 0.8382899 -0.1565706 0.4405855 0.8839514 -0.1564193 0.4381754 0.8851754 -0.1286379 0.3619421 0.9232823 -0.1284761 0.3599591 0.9240797 -0.1000384 0.2814462 0.9543482 -0.09988832 0.279914 0.9548143 -0.07116127 0.2001922 0.9771689 -0.07104116 0.1991212 0.9773964 -0.02755993 0.07792109 0.9965785 -0.02597361 0.08129805 0.9963514 0.002713501 0.5211603 0.8534547 0.00271368 0.5211595 0.853455 0.002708554 0.5211611 0.853454 -0.03885453 0.6224803 0.7816704 -0.06057816 0.6436866 0.7628879 -0.07622689 0.5396117 0.8384562 -0.07994347 0.5074869 0.8579429 -0.05229175 0.5571598 0.8287573 -0.0522899 0.5571548 0.8287607 0.01376193 0.7004833 0.7135361 0.01376479 0.7004815 0.7135378 0.02107423 0.6967548 0.7169999 -0.03944307 0.6219733 0.7820445 -0.03944021 0.6219671 0.7820495 0.08620828 0.7767804 0.6238433 -0.04334133 0.6381741 0.7686711 0.0881704 0.7817358 0.6173451 0.07927685 0.7828615 0.6171248 0.07927948 0.7828606 0.6171256 0.08453536 0.8741965 0.4781571 0.144792 0.839818 0.5232025 0.1275764 0.8465114 0.5168586 0.1083627 0.8233789 0.55705 0.1154294 0.8476276 0.5178836 0.1215668 0.8472745 0.5170565 0.116032 0.8479464 0.5172268 -0.1029577 0.7525255 0.6504652 -0.09904074 0.7652631 0.6360529 -0.08296966 0.7556195 0.6497348 -0.08297264 0.7556268 0.6497258 -0.03856045 0.6221149 0.7819759 -0.04756969 0.6456585 0.7621433 -0.06773364 0.6832423 0.7270434 -0.1076314 0.6356623 0.7644272 -0.0829721 0.7556207 0.6497331 0.0207116 0.9697039 0.2434038 -0.02655047 0.9749568 0.2208037 -0.04010921 0.9730901 0.2269076 -0.0400989 0.9730911 0.2269045 0.08453768 0.8741945 0.4781605 0.06790441 0.9044124 0.4212212 0.1331702 0.8791648 0.4575313 -0.005185902 0.9670361 0.2545863 0.07653152 0.9321566 0.3538744 0.03676116 0.9481576 0.3156671 0.03976207 0.9283422 0.3695943 0.03976005 0.9283434 0.3695914 0.1083593 0.8233824 0.5570456 0.05269271 0.8197789 0.570251 0.03710412 0.8392505 0.5424774 0.04720538 0.8516426 0.5219929 0.004339635 0.8974266 0.4411424 0.01322948 0.9079943 0.4187734 -0.0276888 0.9414314 0.3360658 -0.02006846 0.949832 0.312116 -0.0642392 0.9740711 0.2169303 -0.05034011 0.9775816 0.2044509 -0.1453002 0.9638854 0.2231875 -0.1070753 0.9732248 0.2033925 -0.1518898 0.9670838 0.2041527 -0.1602724 0.9614775 0.223324 -0.1602704 0.9614781 0.2233232 -0.1600524 0.9341936 0.3188504 -0.1731262 0.9098864 0.3770065 -0.1452988 0.9638835 0.2231971 -0.1081392 0.8473346 0.5199326 -0.1735218 0.9098084 0.3770129 -0.1229251 0.8957452 0.4272351 -0.1223352 0.9183571 0.3763698 -0.1223365 0.9183597 0.3763632 -0.1253663 0.844667 0.5204045 -0.1253717 0.8446792 0.5203835 -0.1160924 0.8367417 0.5351504 -0.1081367 0.847334 0.5199343 -0.1081253 0.8473069 0.5199807 -0.04326397 0.6381101 0.7687287 0.05247181 0.6210318 0.782027 -0.02002024 0.7680705 0.6400523 -0.009212911 0.7793869 0.626475 -0.04524219 0.8396967 0.5411679 -0.03545409 0.8493728 0.5266013 -0.06937575 0.8973168 0.4359009 -0.06063538 0.9052337 0.4205655 -0.09197258 0.9405314 0.3270192 -0.08423256 0.9466315 0.311117 -0.1127611 0.9696657 0.2168716 -0.1070501 0.973228 0.2033897 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 2.2374e-6 -1.52071e-6 -1 1.7757e-7 2.53596e-7 -1 -1.65056e-6 1.07854e-6 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.5138153 -0.8508028 0.1101288 -0.04053348 -0.9871173 0.154779 -0.0403952 -0.9987531 0.02933478 -0.03883945 -0.9949528 0.0925222 -0.03884035 -0.9949527 0.0925216 -0.03884202 -0.9949517 0.09253346 -0.1792959 -0.9748542 0.1323339 -0.130757 -0.9789735 0.1565676 -0.1336566 -0.9776027 0.1625693 -0.1336605 -0.9776013 0.1625748 -0.09129536 -0.9860916 0.1388832 -0.09129774 -0.9860913 0.1388839 -0.03886103 -0.9894757 0.1393831 -0.07466876 -0.980686 0.180775 -0.04053974 -0.9871165 0.1547825 -0.2578658 -0.9546515 0.1488146 -0.2578699 -0.9546494 0.1488211 -0.1792874 -0.9748557 0.1323341 -0.2614783 -0.9620907 0.07752829 -0.2615979 -0.9620585 0.07752394 -0.3909795 -0.91957 0.03906404 -0.3377265 -0.9389038 0.06633651 -0.3773362 -0.9008129 0.2148332 -0.3773344 -0.9008145 0.2148302 -0.504157 -0.8633326 0.02196753 -0.4691766 -0.8240292 0.3175677 -0.390983 -0.9195685 0.03906404 -0.3909829 -0.9195686 0.03906393 -0.5158983 -0.8499345 0.107052 -0.5041522 -0.8633351 0.02197831 -0.5041466 -0.8633387 0.0219683 -0.5158984 -0.8499328 0.1070654 -0.5156781 -0.8496927 0.1099925 -0.5143597 -0.8516708 0.1004545 -0.4366769 -0.8918742 0.1177871 -0.4350152 -0.9000269 0.02671164 -0.4487413 -0.8876992 0.1030604 -0.3081702 -0.9357457 0.1714967 -0.30818 -0.9357426 0.1714963 -0.33475 -0.9420116 -0.02359074 -0.3775718 -0.9105151 0.1685281 -0.3775687 -0.9105164 0.1685282 -0.2356286 -0.9686305 0.07895606 -0.2287893 -0.9658138 -0.121899 -0.2585121 -0.962942 0.07690405 -0.03886181 -0.9974071 0.06057059 -0.09068661 -0.9936995 0.06585884 -0.09366661 -0.9913266 0.09218442 -0.1255889 -0.9878814 0.09120184 -0.1291626 -0.9910472 -0.03380131 -0.202193 -0.9563298 0.2110717 -0.2021994 -0.9563285 0.2110716 0.5022379 -0.7120417 0.4906666 0.397035 -0.7686577 0.5015262 0.4514425 -0.7315572 0.5109049 0.09181082 -0.9332991 0.3471652 0.5877605 -0.6679421 0.4564988 0.5546894 -0.6846004 0.472908 0.5522541 -0.6853135 0.4747219 0.5857516 -0.6693002 0.4570913 0.5938149 -0.6636117 0.4549763 0.5007826 -0.7581872 0.4175747 0.6088818 -0.6507188 0.4536828 0.6088864 -0.6507126 0.4536856 0.5333915 -0.6830023 0.4990005 0.5388275 -0.6829982 0.4931313 0.5614314 -0.6761695 0.4770635 0.5613539 -0.6761972 0.4771153 0.555872 -0.6831225 0.4736561 0.5559166 -0.6830741 0.4736734 0.5546889 -0.6845986 0.4729111 0.4835259 -0.7067331 0.5164601 0.4834533 -0.7066534 0.5166372 0.5392614 -0.6780482 0.4994475 0.5333831 -0.6830073 0.4990025 0.5333895 -0.6829985 0.4990078 0.4143247 -0.7409068 0.5285756 0.4143252 -0.7409064 0.5285757 0.4143279 -0.74091 0.5285687 0.3736443 -0.759793 0.5320757 0.3736368 -0.7597894 0.5320862 0.4046632 -0.7472046 0.5271936 0.4003558 -0.7445978 0.5341248 0.4169472 -0.7472512 0.5174657 0.3651434 -0.7555114 0.543942 0.3416543 -0.7749435 0.5317282 0.3481531 -0.7775814 0.5235996 0.375685 -0.7548312 0.5376713 0.3737133 -0.7596063 0.5322938 0.2717225 -0.832104 0.4834974 0.2745992 -0.8103288 0.5176511 0.1940435 -0.8523006 0.4857269 0.2180147 -0.8531576 0.4739109 0.2198799 -0.8392547 0.4972969 0.2198849 -0.8392581 0.497289 0.2425141 -0.8445016 0.4774976 0.2468269 -0.8239684 0.5100514 0.2470335 -0.8247714 0.5086518 0.1928504 -0.8615762 0.4695691 0.1940622 -0.8522977 0.4857246 0.1940638 -0.8523045 0.4857119 0.154353 -0.8693979 0.4693853 0.1586261 -0.8689159 0.4688526 0.171385 -0.8661133 0.4695476 0.1709719 -0.8631315 0.4751551 0.1709669 -0.8631308 0.4751583 0.1500107 -0.8664261 0.476238 0.1538396 -0.8694515 0.4694544 0.1538472 -0.8694524 0.4694504 0.04787218 -0.9293116 0.3661806 0.1514843 -0.8803991 0.4493884 0.1532729 -0.8787121 0.4520757 0.1405863 -0.8797028 0.4542672 0.1405789 -0.8797041 0.4542667 0.0105378 -0.9687443 0.2478374 0.04912817 -0.9583847 0.2812209 0.03580236 -0.9587159 0.282103 0.02968442 -0.9704446 0.2394914 0.02711153 -0.9640776 0.2642335 0.04063695 -0.965541 0.2570587 0.02952325 -0.9634931 0.2661007 0.04562443 -0.9623189 0.2680689 0.0456227 -0.9623186 0.26807 0.04927116 -0.9469144 0.3176878 0.0556373 -0.9400786 0.3363879 0.05330836 -0.9473968 0.315591 0.05331653 -0.947399 0.3155827 0.05150198 -0.953501 0.2969568 0.0515049 -0.9535017 0.2969543 0.04235935 -0.9532013 0.2993541 0.049124 -0.9583842 0.2812236 0.04912376 -0.958384 0.2812241 0.0918197 -0.9332931 0.3471791 0.09303659 -0.9155715 0.3912456 0.115974 -0.9180679 0.3790797 0.1115469 -0.9117167 0.3953858 0.1295053 -0.9142013 0.3840109 0.1264804 -0.9069957 0.4016983 0.1420668 -0.909756 0.3900784 0.1407786 -0.9017526 0.4086851 0.1538217 -0.9046967 0.3973195 0.1544054 -0.8960325 0.4162748 0.1647852 -0.8990119 0.4057382 0.1670866 -0.8899222 0.4244061 0.1749101 -0.8927705 0.4151715 0.178853 -0.8834158 0.4331143 0.184316 -0.8859418 0.4255993 0.1897575 -0.8764857 0.4424533 0.1931424 -0.8784849 0.4369902 0.1998168 -0.8691277 0.4524272 0.06437802 -0.9173843 0.3927617 0.06255775 -0.9190452 0.3891559 0.06255793 -0.9190415 0.3891648 0.06619232 -0.8925699 0.446024 0.0647096 -0.9068274 0.4165054 0.07440233 -0.8759669 0.4765986 0.07440215 -0.8759663 0.4765996 0.0743997 -0.8759651 0.4766026 0.071738 -0.8592393 0.5065189 0.07814377 -0.8618029 0.5011878 0.1974572 -0.8409993 0.5037171 0.2328766 -0.8405995 0.4890407 0.2766826 -0.8160064 0.5075237 0.3382761 -0.8033111 0.4901637 0.2244828 -0.844931 0.4854887 0.2166141 -0.8527557 0.4752745 0.07537162 -0.8861559 0.4572163 0.06619238 -0.89257 0.4460239 0.4277706 -0.7334699 0.5282369 0.4281624 -0.7328001 0.5288488 0.4338082 -0.7371247 0.518129 0.4985364 -0.6936331 0.5199373 0.4834645 -0.7066437 0.5166398 0.3989548 -0.7712035 0.4960646 0.3126788 -0.8128682 0.4914033 0.316344 -0.8165127 0.4829427 0.2088893 -0.8614163 0.4629551 0.2015051 -0.8704144 0.449193 0.06830745 -0.9077391 0.4139373 0.06567853 -0.9183573 0.3902644 0.502233 -0.7120441 0.4906682 0.4342164 -0.7520105 0.4959197 0.4347387 -0.7543311 0.4919217 0.5752729 -0.6761214 0.4603486 0.5098903 -0.7098667 0.4859024 0.5102888 -0.7116151 0.4829174 0.4098659 -0.7617661 0.5017193 0.4119389 -0.7655639 0.4941846 0.3244294 -0.8055077 0.4958859 0.3278174 -0.810001 0.486245 0.21707 -0.8533613 0.4739781 0.209307 -0.8618321 0.4619913 0.07374405 -0.8969953 0.4358454 0.06471103 -0.9068288 0.416502 0.3461157 -0.7795557 0.5220122 0.3461176 -0.7795552 0.5220119 0.2748758 -0.8080449 0.5210632 0.179645 -0.8250216 0.5357862 0.193313 -0.8226896 0.5346136 0.17965 -0.8232635 0.5384821 0.06679034 -0.836976 0.5431485 0.1793537 -0.8482885 0.4982358 0.1394077 -0.8496124 0.5086497 0.04709434 -0.8409443 0.5390684 0.0660209 -0.9282787 0.3659783 0.06601995 -0.9282781 0.3659797 0.0535584 -0.9278415 0.3691092 0.06746822 -0.9364433 0.3442698 0.0599519 -0.9330718 0.3546588 0.05483156 -0.9398688 0.3371055 0.05482512 -0.9398665 0.3371132 0.3461173 -0.7807565 0.5202135 0.3540619 -0.7782887 0.5185624 0.3562928 -0.7880612 0.5020111 0.3484061 -0.7923462 0.5008001 0.3368698 -0.800738 0.4953156 0.2311922 -0.8360812 0.4975121 0.2235068 -0.8431406 0.4890383 0.07109797 -0.8752223 0.4784674 0.07783466 -0.8905676 0.4481419 0.2745991 -0.8103281 0.517652 0.2791926 -0.8178486 0.503165 0.2942879 -0.8233186 0.4853256 0.2967349 -0.8112283 0.5038422 0.3104129 -0.8175494 0.4850329 0.3146352 -0.8050929 0.5028221 0.3254293 -0.8114647 0.4854078 0.3312618 -0.7988322 0.5021282 0.3454164 -0.8094924 0.4747732 0.3816711 -0.7737332 0.5056324 0.3829542 -0.7750146 0.5026912 0.4548837 -0.7349656 0.5028979 0.4481344 -0.7423176 0.4981365 0.4805055 -0.716311 0.5059772 0.4833151 -0.7214453 0.4959064 0.5667066 -0.6734175 0.4747132 0.5596516 -0.6792923 0.4747126 0.1795635 0.7979701 0.5753267 0.04707741 -0.8102548 0.5841839 0.7168913 -0.5625179 0.4118743 0.8151683 -0.4696182 0.3390567 0.8956331 -0.3407819 0.2858482 0.998888 0.03341847 0.03325778 0.9910331 -0.1018462 0.08649086 0.991036 -0.1018303 0.08647704 0.9980589 -0.04619866 0.04176092 0.998888 0.03341841 0.03325772 0.9988879 0.03054875 0.03591156 0.998888 0.03054881 0.03591161 0.9988879 0.02746921 0.03831863 0.998888 0.02746915 0.03831857 0.998888 0.02420073 0.04046225 0.998888 0.02420079 0.04046231 0.998888 0.02076607 0.04232788 0.998888 0.02076607 0.04232788 0.9988881 0.0171886 0.04390251 0.9988879 0.01718854 0.04390251 0.998888 0.013493 0.04517537 0.998888 0.01349288 0.04517525 0.998888 0.009704589 0.04613769 0.998888 0.009704589 0.04613775 0.9988879 0.00584954 0.04678308 0.998888 0.00584954 0.04678308 0.998888 0.001954257 0.0471068 0.998888 0.001954317 0.04710692 0.998888 -0.001954317 0.04710692 0.998888 -0.001954317 0.0471068 0.9988879 -0.00584954 0.04678308 0.998888 -0.00584954 0.04678308 0.9988879 -0.009704589 0.04613775 0.998888 -0.009704589 0.04613769 0.998888 -0.01349294 0.04517525 0.9988879 -0.01349294 0.04517537 0.998888 -0.01718854 0.04390251 0.9988879 -0.01718854 0.04390251 0.998888 -0.02076607 0.04232788 0.9988879 -0.02076607 0.04232788 0.998888 -0.02420079 0.04046231 0.998888 -0.02420079 0.04046225 0.9988878 -0.02746915 0.03831857 0.998888 -0.02746921 0.03831863 0.998888 -0.03054881 0.03591161 0.998888 -0.03054875 0.03591156 0.998888 -0.03341841 0.03325772 0.998888 -0.03341847 0.03325778 0.9988836 -0.0323556 0.03441786 0.9998057 -0.01484435 0.01297211 0.9727376 -0.1769011 0.1499586 0.9727427 -0.176885 0.1499447 0.9727379 -0.1769014 0.1499567 0.8956292 -0.3407878 0.2858532 0.9361155 -0.2632663 0.2331923 0.9361211 -0.2632529 0.2331848 0.8151493 -0.4696394 0.3390728 0.8468619 -0.4046034 0.3451389 0.8469262 -0.4066537 0.3425621 0.7168843 -0.5625238 0.4118786 0.7168928 -0.5625146 0.4118761 0.7533721 -0.5182516 0.4047787 0.5020013 -0.7015405 0.5058019 0.6087287 -0.6435525 0.4639932 0.6379671 -0.6198385 0.4569444 0.3459435 -0.76107 0.5487217 0.5020468 -0.7015193 0.5057864 0.1795637 -0.7979705 0.575326 0.3459423 -0.7610706 0.5487216 0.1795635 -0.7979701 0.5753267 0.04707646 -0.8102555 0.584183 0.04708141 -0.8102547 0.5841838 0.04706805 -0.7639549 0.6435505 0.04706591 -0.7639554 0.6435503 0.0470677 -0.7639564 0.6435489 0.04706764 -0.7080235 0.7046186 0.04706484 -0.7080233 0.7046191 0.04706752 -0.4399604 0.8967828 0.04706734 -0.5127325 0.8572573 0.04706245 -0.5127317 0.8572581 0.04706275 -0.5819766 0.8118426 0.04706627 -0.5819785 0.811841 0.04706656 -0.5819784 0.8118411 0.04706639 -0.6472251 0.7608445 0.0470643 -0.6472256 0.7608444 0.04706454 -0.6472253 0.7608445 0.04706603 -0.4399619 0.8967822 0.04706627 -0.4399619 0.8967822 0.04706639 -0.364167 0.9301435 0.04706645 -0.3641671 0.9301435 0.04706841 -0.364168 0.930143 0.04706853 -0.2858697 0.9571118 0.04706597 -0.2858693 0.9571121 0.04706591 -0.2056043 0.9775027 0.04706424 -0.205608 0.9775021 0.04706537 -0.2056083 0.9775019 0.04706531 -0.1239329 0.9911738 0.04706561 -0.1239328 0.9911738 0.04706645 -0.1239332 0.9911738 0.04706645 -0.04140597 0.9980332 0.04706645 -0.04140597 0.9980333 0.04706645 0.04140597 0.9980332 0.04706645 0.04140597 0.9980332 0.04706841 0.364168 0.930143 0.04706859 0.2858693 0.957112 0.04706597 0.2858698 0.9571119 0.04706597 0.2056043 0.9775028 0.04706424 0.205608 0.9775021 0.04706531 0.2056083 0.9775021 0.04706531 0.1239328 0.9911738 0.04706591 0.1239329 0.9911738 0.04706645 0.1239331 0.9911737 0.04706639 0.364167 0.9301436 0.04706645 0.3641671 0.9301435 0.04706633 0.4399619 0.8967822 0.04706603 0.4399619 0.8967822 0.04706752 0.4399604 0.8967828 0.04706734 0.5127316 0.8572579 0.04706245 0.5127325 0.8572576 0.0470677 0.7639564 0.6435489 0.04706764 0.7080231 0.704619 0.04706484 0.7080236 0.7046187 0.0470646 0.6472253 0.7608445 0.04706484 0.6472252 0.7608446 0.04706639 0.6472254 0.7608443 0.04706645 0.5819784 0.811841 0.04706621 0.5819784 0.8118411 0.04706269 0.5819766 0.8118426 0.04706543 0.7639552 0.6435506 0.04706799 0.7639553 0.6435502 0.04708141 0.8102554 0.5841828 0.04707735 0.8102549 0.5841839 0.04707741 0.8102548 0.5841839 0.3459423 0.7610706 0.5487216 0.1795637 0.7979705 0.575326 0.5020468 0.7015193 0.5057864 0.3459435 0.76107 0.5487217 0.5020013 0.7015405 0.5058019 0.608197 0.6302902 0.4825254 0.6186586 0.6372916 0.4594792 0.6296985 0.6267145 0.45903 0.6728131 0.5815051 0.4573559 0.7737721 0.4870722 0.4050153 0.7737658 0.4870924 0.4050033 0.7395041 0.5365421 0.4065172 0.7395066 0.5365394 0.4065164 0.8485479 0.4166741 0.326112 0.8485481 0.4166794 0.3261052 0.8471374 0.4063963 0.3423454 0.8824534 0.3480389 0.3164567 0.9568434 0.1992138 0.2115761 0.9256157 0.2875099 0.2461166 0.9256144 0.2875131 0.2461184 0.9988893 0.03548097 0.03100591 0.998707 0.03925538 0.03230184 0.9987068 0.03925818 0.03230428 0.9874843 0.1062096 0.1165949 0.9766261 0.1594661 0.1441255 0.9612959 0.2113999 0.1766932 0.1795615 0.7979708 0.5753263 0.1795606 0.7979708 0.5753266 0.1795111 0.7523795 0.6337987 0.1795107 0.7523795 0.6337988 0.1795108 0.6972948 0.6939423 0.1795121 0.697295 0.6939417 0.1795122 0.6374179 0.7493155 0.1795118 0.6374179 0.7493157 0.1795117 0.57316 0.7995393 0.1795114 0.57316 0.7995395 0.1795115 0.5049625 0.8442681 0.1795112 0.5049625 0.8442682 0.1795111 0.4332951 0.8831936 0.1795114 0.4332953 0.8831936 0.1795114 0.3586494 0.9160493 0.1795103 0.358649 0.9160496 0.1795102 0.281538 0.9426093 0.1795107 0.2815381 0.9426092 0.1795107 0.2024924 0.9626904 0.1795111 0.2024925 0.9626902 0.1795111 0.1220545 0.9761549 0.1795125 0.1220549 0.9761547 0.1795125 0.0407781 0.9829102 0.1795137 0.04077851 0.9829099 0.1795137 -0.0407781 0.98291 0.1795125 -0.04077851 0.9829101 0.1795125 -0.1220544 0.9761547 0.1795111 -0.1220549 0.9761549 0.1795111 -0.2024923 0.9626902 0.1795107 -0.2024925 0.9626904 0.1795107 -0.281538 0.9426093 0.1795102 -0.2815382 0.9426093 0.1795102 -0.3586494 0.9160494 0.1795114 -0.358649 0.9160494 0.1795114 -0.4332951 0.8831936 0.1795112 -0.4332953 0.8831936 0.1795113 -0.5049625 0.8442681 0.1795114 -0.5049624 0.8442681 0.1795114 -0.5731601 0.7995395 0.1795116 -0.5731599 0.7995394 0.1795117 -0.637418 0.7493156 0.1795122 -0.6374179 0.7493156 0.1795121 -0.6972947 0.6939421 0.1795108 -0.6972952 0.6939419 0.1795107 -0.7523796 0.6337987 0.1795113 -0.7523795 0.6337987 0.1795606 -0.7979708 0.5753265 0.1795616 -0.7979705 0.5753266 0.3459404 0.7610709 0.5487224 0.3459423 0.7610707 0.5487216 0.3458557 0.7176051 0.6045055 0.3458568 0.717605 0.604505 0.3458568 0.6650664 0.6618684 0.3458563 0.6650664 0.6618688 0.3458562 0.607957 0.714683 0.3458565 0.6079571 0.7146828 0.3458566 0.5466691 0.7625852 0.3458561 0.546669 0.7625854 0.3458561 0.4816237 0.8052467 0.3458556 0.4816236 0.8052468 0.3458556 0.4132685 0.8423735 0.3458562 0.4132686 0.8423731 0.3458563 0.3420731 0.8737101 0.3458556 0.342073 0.8737105 0.3458556 0.2685252 0.8990429 0.3458567 0.2685255 0.8990425 0.3458566 0.1931337 0.9181953 0.3458555 0.1931334 0.9181958 0.3458555 0.1164135 0.9310382 0.3458548 0.1164132 0.9310384 0.3458547 0.03889322 0.9374817 0.3458551 0.0388934 0.9374814 0.3458551 -0.03889322 0.9374816 0.3458547 -0.0388934 0.9374817 0.3458548 -0.1164135 0.9310383 0.3458555 -0.1164132 0.9310381 0.3458555 -0.1931338 0.9181957 0.3458567 -0.1931333 0.9181954 0.3458566 -0.2685251 0.8990425 0.3458556 -0.2685256 0.8990427 0.3458556 -0.3420732 0.8737103 0.3458563 -0.3420729 0.8737102 0.3458563 -0.4132684 0.8423733 0.3458555 -0.4132687 0.8423733 0.3458556 -0.4816238 0.8052468 0.3458561 -0.4816235 0.8052468 0.3458561 -0.5466692 0.7625853 0.3458566 -0.546669 0.7625853 0.3458565 -0.607957 0.7146829 0.3458561 -0.6079571 0.7146829 0.3458563 -0.6650665 0.6618685 0.3458569 -0.6650663 0.6618686 0.3458567 -0.7176047 0.6045052 0.3458556 -0.7176053 0.6045052 0.3459423 -0.7610704 0.548722 0.3459404 -0.7610714 0.5487217 0.5020517 0.7015174 0.5057842 0.5020483 0.7015182 0.5057861 0.5019417 0.6614791 0.5572254 0.5019418 0.661479 0.5572253 0.5019418 0.6130499 0.6101018 0.5019413 0.61305 0.6101022 0.5019414 0.5604074 0.6587856 0.5019408 0.5604074 0.6587861 0.5019408 0.5039125 0.7029421 0.5019421 0.5039126 0.7029412 0.5019422 0.4439543 0.7422659 0.5019426 0.4439543 0.7422657 0.5019426 0.380946 0.776488 0.5019406 0.3809459 0.7764896 0.5019405 0.3153175 0.805376 0.501944 0.3153182 0.8053737 0.501944 0.247524 0.8287243 0.5019406 0.2475233 0.8287267 0.5019404 0.1780276 0.8463817 0.5019424 0.1780281 0.8463804 0.5019424 0.1073081 0.8582184 0.5019431 0.1073083 0.8582179 0.5019431 0.03585201 0.8641573 0.5019413 0.03585129 0.8641583 0.5019413 -0.03585207 0.8641583 0.5019431 -0.03585124 0.8641572 0.5019431 -0.107308 0.858218 0.5019424 -0.1073084 0.8582183 0.5019424 -0.1780273 0.8463805 0.5019405 -0.1780284 0.8463815 0.5019405 -0.2475246 0.8287263 0.5019441 -0.2475227 0.8287248 0.501944 -0.3153169 0.8053742 0.5019406 -0.3153189 0.8053755 0.5019406 -0.3809466 0.7764891 0.5019426 -0.3809453 0.7764885 0.5019426 -0.4439541 0.7422657 0.5019421 -0.4439544 0.7422659 0.501942 -0.5039121 0.7029415 0.5019409 -0.5039129 0.7029417 0.5019408 -0.5604075 0.6587858 0.5019413 -0.5604072 0.6587858 0.5019413 -0.6130501 0.6101021 0.5019418 -0.6130498 0.610102 0.5019417 -0.6614791 0.5572254 0.5019416 -0.661479 0.5572253 0.5020484 -0.7015188 0.5057854 0.5020516 -0.7015163 0.5057856 0.6976575 0.5785687 0.4225308 0.6433135 0.61816 0.4516925 0.6431325 0.5856515 0.4933487 0.6431325 0.5856514 0.4933487 0.6431326 0.542774 0.5401638 0.6431326 0.5427739 0.5401638 0.6431325 0.4961656 0.5832668 0.6431331 0.4961655 0.5832663 0.6431332 0.4461471 0.6223604 0.6431323 0.4461472 0.6223612 0.6431323 0.3930626 0.6571777 0.643132 0.3930626 0.657178 0.643132 0.337277 0.6874777 0.6431327 0.3372771 0.6874769 0.6431328 0.279172 0.713052 0.6431314 0.2791718 0.7130534 0.6431313 0.2191491 0.7337273 0.6431336 0.2191497 0.7337252 0.6431336 0.1576194 0.7493566 0.6431336 0.1576194 0.7493566 0.6431336 0.09500777 0.7598372 0.6431319 0.09500712 0.7598388 0.6431318 0.03174173 0.7650973 0.6431329 0.03174221 0.7650964 0.6431329 -0.03174167 0.7650964 0.6431319 -0.03174221 0.7650973 0.6431318 -0.09500795 0.7598388 0.6431336 -0.09500694 0.7598373 0.6431336 -0.1576194 0.7493566 0.6431336 -0.1576194 0.7493566 0.6431336 -0.2191486 0.7337255 0.6431313 -0.2191502 0.733727 0.6431314 -0.2791724 0.7130532 0.6431328 -0.2791713 0.7130522 0.6431327 -0.3372768 0.687477 0.643132 -0.3372774 0.6874774 0.643132 -0.3930628 0.657178 0.6431323 -0.3930625 0.6571778 0.6431323 -0.4461475 0.622361 0.6431332 -0.4461468 0.6223607 0.6431331 -0.4961653 0.5832664 0.6431325 -0.4961658 0.5832666 0.6431326 -0.542774 0.5401639 0.6431326 -0.542774 0.5401638 0.6431326 -0.5856515 0.4933488 0.6431325 -0.5856515 0.4933487 0.6433944 -0.6138391 0.4574333 0.6379631 -0.6198424 0.4569448 0.7925818 0.4878039 0.3658707 0.7654491 0.5146367 0.3863118 0.7652106 0.4923647 0.4147645 0.7652105 0.4923648 0.4147648 0.7652105 0.4563171 0.454123 0.7652108 0.4563169 0.4541226 0.7652108 0.4171328 0.4903598 0.7652106 0.4171328 0.49036 0.7652106 0.375082 0.5232269 0.7652105 0.375082 0.523227 0.7652105 0.330453 0.5524978 0.7652102 0.3304531 0.5524982 0.7652101 0.2835531 0.5779715 0.7652105 0.2835531 0.5779711 0.7652105 0.2347034 0.5994724 0.7652108 0.2347034 0.5994721 0.7652109 0.1842415 0.6168528 0.7652102 0.1842414 0.6168537 0.7652102 0.1325133 0.6299949 0.7652095 0.1325131 0.6299959 0.7652094 0.0798738 0.6388072 0.7652106 0.07987433 0.6388057 0.7652107 0.02668547 0.6432266 0.765211 0.02668565 0.6432263 0.7652109 -0.02668547 0.6432263 0.7652107 -0.02668565 0.6432266 0.7652107 -0.07987362 0.6388058 0.7652094 -0.07987451 0.6388071 0.7652094 -0.1325135 0.6299958 0.7652102 -0.1325129 0.6299951 0.7652102 -0.1842417 0.6168536 0.7652108 -0.1842412 0.6168529 0.7652109 -0.2347033 0.5994721 0.7652105 -0.2347036 0.5994724 0.7652105 -0.2835528 0.5779712 0.7652101 -0.2835533 0.5779715 0.7652101 -0.3304532 0.5524981 0.7652105 -0.3304529 0.5524978 0.7652105 -0.375082 0.5232269 0.7652106 -0.3750819 0.5232269 0.7652106 -0.4171329 0.4903599 0.7652108 -0.4171327 0.4903599 0.7652108 -0.4563167 0.4541227 0.7652105 -0.4563173 0.4541229 0.7652105 -0.4923649 0.4147647 0.7652106 -0.4923647 0.4147647 0.765433 -0.5158582 0.3847113 0.7814753 -0.4667285 0.4140783 0.8877208 0.3510635 0.2978361 0.8645556 0.3831719 0.3251506 0.8645244 0.3562408 0.354528 0.8645244 0.3562408 0.3545279 0.8645245 0.3256502 0.3828176 0.8645244 0.3256502 0.3828176 0.8645245 0.2928215 0.4084764 0.8645247 0.2928214 0.4084761 0.8645247 0.25798 0.4313275 0.8645249 0.25798 0.4313272 0.8645249 0.2213657 0.4512139 0.8645248 0.2213657 0.451214 0.8645249 0.1832299 0.4679996 0.8645244 0.1832299 0.4680004 0.8645244 0.1438351 0.4815693 0.8645243 0.1438351 0.4815695 0.8645243 0.1034511 0.4918289 0.8645247 0.1034513 0.4918282 0.8645246 0.06235653 0.4987071 0.8645243 0.06235635 0.4987077 0.8645243 0.02083307 0.502159 0.8645242 0.02083301 0.5021592 0.8645243 -0.02083313 0.5021592 0.8645243 -0.02083301 0.5021591 0.8645243 -0.06235659 0.4987076 0.8645247 -0.06235629 0.4987072 0.8645246 -0.103451 0.4918283 0.8645243 -0.1034514 0.4918288 0.8645242 -0.1438352 0.4815695 0.8645243 -0.1438351 0.4815694 0.8645244 -0.1832302 0.4680003 0.8645248 -0.1832296 0.4679997 0.8645249 -0.2213658 0.451214 0.8645249 -0.2213657 0.4512139 0.8645248 -0.2579799 0.4313272 0.8645247 -0.2579802 0.4313275 0.8645246 -0.2928213 0.4084762 0.8645245 -0.2928216 0.4084763 0.8645246 -0.3256502 0.3828176 0.8645245 -0.3256503 0.3828176 0.8645244 -0.3562407 0.3545279 0.8645244 -0.3562409 0.354528 0.8646467 -0.3786643 0.3301506 0.8480718 -0.404969 0.3417227 0.9613009 0.2113856 0.1766828 0.9380927 0.2650232 0.223035 0.9380951 0.2455158 0.2443351 0.9380949 0.245516 0.2443355 0.9380949 0.2244334 0.2638325 0.9380948 0.2244334 0.2638325 0.9380949 0.2018083 0.2815162 0.938095 0.2018082 0.2815158 0.938095 0.1777963 0.2972646 0.9380948 0.1777963 0.297265 0.9380949 0.1525623 0.3109707 0.9380949 0.1525623 0.3109705 0.938095 0.1262795 0.322539 0.938095 0.1262795 0.3225387 0.938095 0.09912872 0.3318904 0.9380953 0.09912878 0.3318896 0.9380952 0.07129698 0.3389601 0.938095 0.07129687 0.3389607 0.9380952 0.042975 0.3437016 0.9380953 0.04297512 0.3437011 0.9380952 0.01435798 0.3460797 0.9380951 0.01435786 0.3460802 0.938095 -0.01435804 0.3460802 0.9380953 -0.0143578 0.3460798 0.9380952 -0.04297494 0.3437011 0.938095 -0.04297518 0.3437015 0.9380952 -0.0712971 0.3389607 0.9380952 -0.07129675 0.3389602 0.9380953 -0.09912848 0.3318896 0.938095 -0.09912902 0.3318903 0.938095 -0.1262794 0.3225387 0.9380949 -0.1262795 0.3225389 0.9380949 -0.1525622 0.3109706 0.9380949 -0.1525623 0.3109707 0.9380948 -0.1777964 0.2972649 0.938095 -0.1777961 0.2972647 0.938095 -0.2018081 0.2815159 0.9380949 -0.2018083 0.281516 0.9380949 -0.2244334 0.2638325 0.9380948 -0.2244334 0.2638325 0.9380949 -0.2455161 0.2443354 0.938095 -0.2455157 0.2443352 0.9381746 -0.2593173 0.2293096 0.9529397 -0.2102487 0.2184064 0.9882782 0.1139255 0.1016218 0.9837282 0.133234 0.1205305 0.9837015 0.1274506 0.1268377 0.9837014 0.1274505 0.1268376 0.9837014 0.1165062 0.1369588 0.9837015 0.1165062 0.1369587 0.9837015 0.1047613 0.1461385 0.9837014 0.1047613 0.1461387 0.9837014 0.09229636 0.1543141 0.9837015 0.09229636 0.1543139 0.9837016 0.07919698 0.1614287 0.9837014 0.07919692 0.1614287 0.9837015 0.0655533 0.167434 0.9837015 0.0655533 0.1674341 0.9837015 0.05145913 0.1722886 0.9837014 0.05145913 0.172289 0.9837014 0.03701126 0.1759594 0.9837014 0.03701126 0.1759591 0.9837015 0.022309 0.1784201 0.9837014 0.02230894 0.1784204 0.9837014 0.007453322 0.1796553 0.9837014 0.007453441 0.1796548 0.9837015 -0.007453262 0.1796549 0.9837014 -0.007453441 0.1796552 0.9837015 -0.02230906 0.1784204 0.9837015 -0.02230894 0.1784202 0.9837015 -0.0370112 0.1759591 0.9837014 -0.03701132 0.1759594 0.9837014 -0.05145925 0.172289 0.9837015 -0.05145901 0.1722887 0.9837015 -0.0655533 0.1674341 0.9837015 -0.06555324 0.167434 0.9837015 -0.07919692 0.1614287 0.9837015 -0.07919692 0.1614287 0.9837015 -0.09229624 0.1543139 0.9837014 -0.09229642 0.1543141 0.9837015 -0.1047614 0.1461387 0.9837015 -0.1047612 0.1461386 0.9837015 -0.1165062 0.1369587 0.9837014 -0.1165063 0.1369588 0.9837016 -0.1274505 0.1268377 0.9837015 -0.1274506 0.1268377 0.9837228 -0.1348435 0.1187716 0.9898136 -0.0880661 0.1118634 0.483585 0.7212766 0.4958887 0.5022382 0.712079 0.4906121 0.06835776 0.9283648 0.3653302 0.2623062 0.8325116 0.4879753 0.179652 0.8232353 0.5385246 0.1929758 0.8208876 0.5374977 0.1974868 0.8408824 0.5039007 0.4964014 0.6932159 0.5225299 0.4030753 0.7449086 0.5316404 0.372767 0.7593247 0.533358 0.1616829 0.8705818 0.4647 0.1422936 0.8792973 0.4545205 0.140546 0.8797056 0.4542741 0.1405863 0.8797028 0.4542672 0.1405789 0.8797041 0.4542667 0.1572598 0.8695998 0.4680447 0.1572673 0.8695989 0.4680436 0.157255 0.8695976 0.4680502 0.1770455 0.8625309 0.4740205 0.172612 0.8630698 0.4746742 0.1726105 0.8630695 0.4746752 0.1961512 0.8520495 0.4853208 0.1949307 0.8518969 0.4860799 0.1949585 0.8519023 0.4860594 0.220373 0.8388875 0.4976982 0.2474117 0.8247603 0.508486 0.2474013 0.824757 0.5084964 0.2835865 0.819271 0.4983712 0.2797534 0.8178392 0.5028688 0.2752148 0.8101184 0.5176534 0.3727728 0.7593275 0.5333499 0.3727748 0.7593227 0.5333555 0.3696746 0.7624639 0.5310269 0.339749 0.7750362 0.5328128 0.3397479 0.7750357 0.5328143 0.4885607 0.7048974 0.5142259 0.5334202 0.6843796 0.4970789 0.5334119 0.6843907 0.4970726 0.5412532 0.6767768 0.4990171 0.4885497 0.7048999 0.5142326 0.4885795 0.7049308 0.514162 0.5553123 0.6844641 0.472374 0.555325 0.6845204 0.4722775 0.5552584 0.683811 0.4733821 0.5940184 0.6472449 0.4777199 0.5339432 0.6853897 0.4951218 0.5608932 0.6764457 0.4773051 0.5665909 0.6735065 0.4747251 0.5592221 0.6796222 0.4747467 0.554961 0.684128 0.4732728 0.6089012 0.651741 0.4521868 0.608899 0.6517441 0.4521855 0.5015803 0.7453068 0.4392437 0.5920047 0.6649377 0.455399 0.5859106 0.6692507 0.4569599 0.1796426 0.825008 0.5358082 0.179645 0.8250077 0.535808 0.2749423 0.8080406 0.5210347 0.3461176 0.779563 0.522 0.3461157 0.7795637 0.5220004 0.07415539 0.876396 0.4758477 0.0741567 0.8763995 0.4758411 0.07827538 0.8616546 0.5014224 0.07152295 0.8588876 0.5071455 0.06918805 0.8484677 0.5247052 0.1370469 0.8496851 0.5091692 0.04709476 0.8406766 0.5394859 0.06993019 0.8770014 0.4753717 0.07642191 0.8857868 0.4577571 0.06792843 0.9077158 0.4140504 0.06485956 0.9069835 0.4161419 0.06486135 0.9069854 0.4161379 0.07368987 0.896898 0.4360547 0.06666195 0.8930746 0.4449427 0.06666183 0.8930744 0.444943 0.1885094 0.8608181 0.4727118 0.2209025 0.8581666 0.4634134 0.2207315 0.8579428 0.4639092 0.2048977 0.8572574 0.4723629 0.2136599 0.8659966 0.4521056 0.1959211 0.865901 0.4602503 0.2058807 0.8735139 0.4411199 0.154188 0.8958414 0.4167666 0.2759356 0.8294943 0.4855911 0.2456929 0.8244032 0.5098964 0.05507934 0.9401947 0.3361549 0.0457223 0.9366882 0.3471669 0.1876661 0.8871486 0.4216029 0.1762268 0.8818256 0.4374103 0.3236007 0.8100028 0.4890584 0.3173591 0.8062938 0.4991728 0.4221496 0.743932 0.51803 0.2291815 0.8453278 0.4825937 0.1301999 0.9074917 0.3993832 0.1523672 0.9042043 0.3989975 0.1735227 0.8644283 0.4718619 0.1038961 0.9168021 0.3855899 0.123267 0.9132822 0.3882277 0.04669791 0.9622489 0.2681348 0.1960884 0.8593129 0.472367 0.1173384 0.9124551 0.3919916 0.1384118 0.9089587 0.393238 0.03294652 0.9596789 0.2791612 0.05066579 0.9584053 0.2808777 0.05066728 0.9584056 0.2808765 0.04511004 0.95612 0.2894817 0.04099303 0.9535807 0.2983345 0.05264282 0.9537199 0.2960524 0.05264353 0.95372 0.2960518 0.244181 0.8435226 0.4783778 0.1424799 0.901958 0.4076409 0.165175 0.8990058 0.4055932 0.04793655 0.9472631 0.316851 0.05381804 0.9477064 0.314573 0.4030744 0.744908 0.5316418 0.4018588 0.7494516 0.5261481 0.3010722 0.812869 0.4985975 0.3069815 0.8156192 0.4904362 0.1654302 0.8891246 0.4267202 0.1769183 0.8933233 0.4131265 0.05500829 0.9401798 0.3362082 0.05381536 0.9477056 0.3145757 0.4839397 0.721931 0.4945888 0.461654 0.7275974 0.5074226 0.4550319 0.7349307 0.502815 0.4474495 0.7273706 0.5203084 0.4343215 0.7426049 0.5098066 0.4284868 0.7337932 0.5272064 0.4318261 0.7280924 0.5323604 0.3818057 0.7736969 0.5055863 0.3861156 0.777992 0.495624 0.3967108 0.7678908 0.5029557 0.3995981 0.7717354 0.494718 0.4103791 0.7620959 0.5007984 0.4101087 0.7615969 0.5017778 0.5103463 0.7115671 0.4829273 0.509965 0.7098879 0.485793 0.5700969 0.6790794 0.4624291 0.5858953 0.6692608 0.4569646 0.06993168 0.8770042 0.4753665 0.07150536 0.8749474 0.4789092 0.1844159 0.8532815 0.4877515 0.207875 0.8409151 0.4996498 0.2592646 0.8268817 0.4990477 0.2773702 0.8188003 0.5026249 0.3569793 0.7908358 0.4971362 0.3541373 0.7782893 0.51851 0.3461173 0.7807795 0.5201789 0.01057845 0.9687483 0.2478199 0.1514664 0.8803982 0.4493966 0.04801398 0.9293279 0.3661208 0.09314101 0.9155537 0.3912624 0.0918129 0.9332925 0.347182 0.09180402 0.9332987 0.3471681 0.0466879 0.9622476 0.2681412 0.02772259 0.9641808 0.2637931 0.03901773 0.9654089 0.2578045 0.02558505 0.964539 0.2626972 0.03004616 0.9704725 0.2393332 0.06835085 0.9283608 0.3653416 0.06104916 0.9199887 0.3871612 0.06100028 0.9179848 0.3918964 0.06603962 0.9188815 0.3889672 0.06604188 0.9188832 0.3889629 0.06909692 0.9363678 0.3441526 0.05181032 0.9280573 0.3688163 0.1972734 0.880553 0.4309405 0.1863798 0.8740804 0.4486045 0.3386739 0.8042591 0.4883311 0.3396412 0.8049886 0.4864537 0.3268117 0.8265073 0.4583445 0.3154742 0.815488 0.4852374 0.3258242 0.8070755 0.4924102 0.3266325 0.8081521 0.4901034 0.3369219 0.8002929 0.495999 0.3346447 0.7960813 0.5042494 0.4347792 0.7542588 0.4919965 0.4342795 0.7520313 0.4958329 0.5022334 0.7120814 0.4906138 -0.09870815 0.9925312 0.07168364 -0.07961726 0.9870711 0.1391104 -0.2033392 0.9503296 0.2356415 -0.2033428 0.9503288 0.2356415 -0.2277445 0.9636489 -0.1396897 -0.2757853 0.9363671 0.2171617 -0.2757824 0.9363679 0.2171617 -0.3344767 0.9419434 -0.0294618 -0.3516536 0.9298176 0.1085303 -0.4697166 0.8759886 0.109591 -0.469734 0.8759796 0.1095899 -0.4350963 0.899931 0.02855193 -0.4198362 0.899868 0.1182171 -0.4198497 0.8998617 0.1182164 -0.4969431 0.8676629 -0.01444214 -0.5164344 0.850418 0.1004229 -0.5163541 0.8505313 0.09987419 -0.5158916 0.8499383 0.1070548 -0.5135749 0.8579372 0.01358139 -0.4904591 0.8648182 0.1074216 -0.3720746 0.9268739 0.04965209 -0.3720704 0.9268759 0.04964584 -0.4357786 0.8825039 0.176872 -0.4969479 0.8676599 -0.01445561 -0.4969385 0.8676655 -0.01444184 -0.2501423 0.9621993 0.1077103 -0.3646522 0.9169806 0.161788 -0.3381977 0.9332868 0.1208235 -0.3720732 0.9268742 0.04965752 -0.3720851 0.9268696 0.04965156 -0.1714646 0.9765019 0.1305528 -0.2481165 0.9576034 0.1464036 -0.2358552 0.9634076 0.1273511 -0.2501432 0.9621988 0.1077112 -0.2501948 0.9621858 0.1077084 -0.07962256 0.9870707 0.1391103 -0.1214182 0.9810569 0.1509478 -0.1214371 0.9810503 0.1509748 -0.09870761 0.9925315 0.0716809 -0.1253468 0.9879018 0.09131532 -0.128433 0.9895171 -0.06603652 -0.1307141 0.9775794 0.1650828 -0.1714667 0.9765015 0.1305528 -0.03531008 0.9873402 0.1546368 -0.06575709 0.9832012 0.170269 -0.03884857 0.9871681 0.1548866 -0.03884249 0.9950025 0.09198522 -0.03884065 0.9950038 0.09197181 -0.03884226 0.9950039 0.09197074 -0.03886461 0.997327 0.06187409 -0.03987789 0.9987848 0.02895909 -0.004779279 0.8424789 0.5387082 -0.001005053 0.855781 0.5173373 5.09616e-4 0.8111541 0.5848323 -9.78488e-4 0.8646671 0.5023446 -9.78567e-4 0.8646664 0.5023456 2.89212e-4 0.8847039 0.4661533 5.09616e-4 0.8111548 0.5848312 -0.002523183 0.7871809 0.6167171 7.66705e-4 0.7648025 0.6442645 7.66705e-4 0.7648038 0.6442628 -0.001204133 0.7071062 0.7071062 -0.001554965 0.7088078 0.7053999 -0.002547204 0.616717 0.7871809 9.18219e-4 0.6479432 0.7616881 9.18218e-4 0.647943 0.7616882 6.82924e-4 0.4404485 0.8977777 -9.65985e-4 0.5133011 0.8582081 -0.001604855 0.5173369 0.8557804 9.79111e-4 0.582622 0.8127427 9.79111e-4 0.5826238 0.8127414 6.82924e-4 0.44045 0.8977769 -0.002500295 0.410412 0.9118968 0.001120746 0.3645708 0.9311749 0.001120746 0.3645719 0.9311745 -0.001934945 0.2975019 0.9547192 -4.4764e-4 0.2861865 0.9581739 -0.002382636 0.180255 0.9836171 3.7685e-4 0.2058363 0.9785864 3.7685e-4 0.2058324 0.9785872 -0.002194166 0.06037843 0.9981732 0.001191556 0.1240706 0.9922727 0.001191556 0.1240704 0.9922727 -0.002194166 -0.06037843 0.9981732 0 -0.04145187 0.9991405 0 0.04145187 0.9991405 -0.002382636 -0.180255 0.9836171 0.001191556 -0.1240704 0.9922727 0.001191556 -0.1240706 0.9922727 0.001120746 -0.3645719 0.9311745 -0.002442955 -0.2861856 0.9581711 -5.65146e-4 -0.2975025 0.9547209 3.7685e-4 -0.2058324 0.9785872 3.7685e-4 -0.2058363 0.9785864 0.001120746 -0.3645708 0.9311749 -0.002500295 -0.410412 0.9118968 6.82924e-4 -0.44045 0.8977769 6.82924e-4 -0.4404485 0.8977777 -0.001059532 -0.5173372 0.8557809 -0.001760303 -0.5133005 0.8582071 -0.002547204 -0.616717 0.7871809 9.79113e-4 -0.5826238 0.8127414 9.79111e-4 -0.582622 0.8127427 7.66704e-4 -0.7648038 0.6442628 -0.001148521 -0.7088083 0.7054004 -0.001483142 -0.707106 0.707106 9.18218e-4 -0.647943 0.7616882 9.18218e-4 -0.6479432 0.7616881 7.66705e-4 -0.7648025 0.6442645 -0.002523183 -0.7871809 0.6167171 5.09616e-4 -0.8111548 0.5848312 2.43564e-4 -0.8842575 0.4669996 -9.3558e-4 -0.8650861 0.5016226 -9.35449e-4 -0.8650872 0.5016207 -0.002538323 -0.8557787 0.517336 -5.41716e-4 -0.8427047 0.5383758 5.09616e-4 -0.8111541 0.5848323 7.59686e-5 -0.9305615 0.3661358 7.60254e-5 -0.9305624 0.3661331 -0.001240849 -0.917422 0.3979138 -0.00124067 -0.9174234 0.3979107 -0.004546165 -0.9019951 0.4317224 -0.004546225 -0.9019948 0.4317229 -0.004543602 -0.9020029 0.4317063 -0.001177847 -0.911899 0.410413 2.43544e-4 -0.8842552 0.4670041 2.43544e-4 -0.884257 0.4670006 -0.007733225 -0.9693222 0.2456724 -0.004278659 -0.9615636 0.274549 -0.004276931 -0.9615592 0.2745643 -0.001650035 -0.9525697 0.3043158 -0.001651227 -0.9525743 0.3043019 -0.001650631 -0.9525705 0.3043134 -9.79807e-5 -0.9421103 0.335303 -9.80035e-5 -0.9421108 0.3353016 7.60255e-5 -0.9305589 0.3661421 -0.02237844 -0.9876818 0.1548675 -2.49715e-4 -0.9867855 0.1620315 -0.002484977 -0.9822716 0.1874471 -0.004003942 -0.9789569 0.2040277 -0.00400424 -0.9789564 0.2040305 -0.006233334 -0.9748111 0.2229447 -5.26206e-4 -0.9836197 0.1802555 1.29636e-5 -0.9732836 0.2296063 1.29314e-5 -0.954721 0.2975025 -0.01193553 -0.9761297 0.2168599 -0.007734 -0.9693235 0.2456666 -0.00575143 -0.9756459 -0.219276 -0.003583312 -0.9798088 -0.1999046 -0.003585398 -0.9798048 -0.1999236 -0.02044498 -0.9877498 -0.1547009 -0.2292655 -0.969231 -0.0896027 -0.04424434 -0.9886462 -0.1436001 -0.005682587 -0.9438341 -0.3303706 -0.002560555 -0.9532108 -0.3022955 -0.002561867 -0.953205 -0.3023136 -7.28842e-4 -0.9613888 -0.2751928 -7.28634e-4 -0.9613902 -0.2751879 3.8224e-5 -0.9683791 -0.249483 3.82091e-5 -0.9683789 -0.249484 3.81184e-5 -0.9836198 -0.1802555 -0.008928418 -0.9703753 -0.2414376 -0.005751073 -0.9756465 -0.2192732 -0.001152455 -0.911899 -0.4104129 -0.009754538 -0.8854424 -0.464647 -0.004401743 -0.9026375 -0.430379 -0.004401743 -0.9026376 -0.430379 -0.001206874 -0.9176294 -0.397435 -0.001207172 -0.9176275 -0.3974398 1.34258e-4 -0.9312487 -0.3643842 1.34136e-4 -0.9312466 -0.3643898 1.33803e-4 -0.954721 -0.2975025 -0.01041156 -0.9327886 -0.3602737 -0.005684733 -0.9438291 -0.330385 -9.78568e-4 -0.8646664 -0.5023456 5.09616e-4 -0.8111541 -0.5848323 -0.001005053 -0.855781 -0.5173373 -0.004779279 -0.8424789 -0.5387082 -9.78491e-4 -0.8646671 -0.5023446 2.89212e-4 -0.8847038 -0.4661534 2.8908e-4 -0.8847007 -0.4661596 2.89079e-4 -0.8846995 -0.4661619 5.09616e-4 -0.8111548 -0.5848312 -0.002523183 -0.7871809 -0.6167171 7.66705e-4 -0.7648025 -0.6442645 7.66705e-4 -0.7648038 -0.6442628 -0.001204133 -0.7071062 -0.7071062 -0.001554965 -0.7088078 -0.7053999 9.79111e-4 -0.582622 -0.8127427 9.79111e-4 -0.5826238 -0.8127414 -0.002547204 -0.616717 -0.7871809 9.18219e-4 -0.6479432 -0.7616881 9.18218e-4 -0.647943 -0.7616882 -0.001760303 -0.5133005 -0.8582071 -0.001059532 -0.5173372 -0.8557809 6.82924e-4 -0.4404485 -0.8977777 6.82924e-4 -0.44045 -0.8977769 -0.002500295 -0.410412 -0.9118968 0.001120746 -0.3645708 -0.9311749 0.001120746 -0.3645719 -0.9311745 -0.001934945 -0.2975019 -0.9547192 -4.4764e-4 -0.2861865 -0.9581739 -0.002382636 -0.180255 -0.9836171 3.7685e-4 -0.2058363 -0.9785864 3.7685e-4 -0.2058324 -0.9785872 -0.002194166 -0.06037843 -0.9981732 0.001191556 -0.1240706 -0.9922727 0.001191556 -0.1240704 -0.9922727 -0.002194166 0.06037843 -0.9981732 0 0.04145187 -0.9991405 0 -0.04145187 -0.9991405 -0.002382636 0.180255 -0.9836171 0.001191556 0.1240704 -0.9922727 0.001191556 0.1240706 -0.9922727 0.001120746 0.3645719 -0.9311745 -0.002442955 0.2861856 -0.9581711 -5.65146e-4 0.2975025 -0.9547209 3.7685e-4 0.2058324 -0.9785872 3.7685e-4 0.2058363 -0.9785864 0.001120746 0.3645708 -0.9311749 -0.002500295 0.410412 -0.9118968 6.82924e-4 0.44045 -0.8977769 -0.001604855 0.5173369 -0.8557804 -9.65984e-4 0.5133011 -0.8582081 6.82924e-4 0.4404485 -0.8977777 -0.002547204 0.616717 -0.7871809 9.79113e-4 0.5826238 -0.8127414 9.79111e-4 0.582622 -0.8127427 7.66704e-4 0.7648038 -0.6442628 -0.001148521 0.7088083 -0.7054004 -0.001483142 0.707106 -0.707106 9.18218e-4 0.647943 -0.7616882 9.18218e-4 0.6479432 -0.7616881 7.66705e-4 0.7648025 -0.6442645 -0.002523183 0.7871809 -0.6167171 5.09616e-4 0.8111548 -0.5848312 2.43564e-4 0.8842575 -0.4669996 -9.3558e-4 0.8650861 -0.5016226 -9.35449e-4 0.8650872 -0.5016207 -0.002538323 0.8557787 -0.517336 -5.41716e-4 0.8427047 -0.5383758 5.09616e-4 0.8111541 -0.5848323 7.59686e-5 0.9305615 -0.3661358 7.60254e-5 0.9305624 -0.3661331 -0.001240849 0.917422 -0.3979138 -0.00124067 0.9174234 -0.3979107 -0.004546165 0.9019951 -0.4317224 -0.004546225 0.9019948 -0.4317229 -0.004543602 0.9020029 -0.4317063 -0.001177847 0.911899 -0.410413 2.43544e-4 0.8842552 -0.4670041 2.43544e-4 0.884257 -0.4670006 -0.007733225 0.9693222 -0.2456724 -0.004278659 0.9615636 -0.274549 -0.004276931 0.9615592 -0.2745643 -0.001650035 0.9525697 -0.3043158 -0.001651227 0.9525743 -0.3043019 -0.001650631 0.9525705 -0.3043134 -9.79807e-5 0.9421103 -0.335303 -9.80035e-5 0.9421108 -0.3353016 7.60255e-5 0.9305589 -0.3661421 1.99057e-4 0.9957031 -0.09260332 -0.02237844 0.9876818 -0.1548675 -2.49715e-4 0.9867855 -0.1620315 -0.002484977 0.9822716 -0.1874471 -0.004003942 0.9789569 -0.2040277 -0.00400424 0.9789564 -0.2040305 -0.006233334 0.9748111 -0.2229447 -5.26206e-4 0.9836197 -0.1802555 1.29636e-5 0.9732836 -0.2296063 1.29314e-5 0.954721 -0.2975025 -0.01193553 0.9761297 -0.2168599 -0.007734 0.9693235 -0.2456666 -0.00575143 0.9756459 0.219276 -0.04427176 0.9886463 0.1435918 -0.04424452 0.9886463 0.1436001 -0.2292657 0.9692309 0.08960258 -0.02044498 0.9877498 0.1547009 -0.005682587 0.9438341 0.3303706 -0.002560555 0.9532108 0.3022955 -0.002561867 0.953205 0.3023136 -7.28842e-4 0.9613888 0.2751928 -7.28634e-4 0.9613902 0.2751879 3.8224e-5 0.9683791 0.249483 3.82091e-5 0.9683789 0.249484 3.81184e-5 0.9836198 0.1802555 -0.008928418 0.9703753 0.2414376 -0.005751073 0.9756465 0.2192732 2.89079e-4 0.8847006 0.4661595 2.89079e-4 0.8846995 0.4661619 -0.001152455 0.911899 0.4104129 -0.009754538 0.8854424 0.464647 -0.004401743 0.9026375 0.430379 -0.004401743 0.9026376 0.430379 -0.001206874 0.9176294 0.397435 -0.001207172 0.9176275 0.3974398 1.34258e-4 0.9312487 0.3643842 1.34136e-4 0.9312466 0.3643898 1.33803e-4 0.954721 0.2975025 -0.01041156 0.9327886 0.3602737 -0.005684733 0.9438291 0.330385 1.8909e-4 -0.98759 -0.1570545 1.89496e-4 -0.9957553 -0.09204018 -0.001981377 -0.9981736 -0.06037843 1.99057e-4 0.9957041 -0.09259206 -0.001983165 0.9981736 -0.06037843 0 0.9995689 -0.02935874 0 0.9995799 0.02898216 -0.001981377 0.9981736 0.06037843 1.89496e-4 0.9957553 0.09204018 1.8897e-4 0.9861188 0.1660413 -0.04424554 0.9886456 0.1436047 0 -0.9995799 -0.02898216 0 -0.9995689 0.02935874 -0.001983165 -0.9981736 0.06037843 1.99057e-4 -0.9957041 0.09259206 1.99057e-4 -0.9957031 0.09260332 0.865197 -0.4843463 -0.1297802 0.865197 -0.4995239 -0.04370379 0.865197 -0.354566 -0.354566 0.865197 -0.4107487 -0.2876101 0.865197 -0.4544523 -0.2119132 0.8651971 -0.1297801 -0.4843462 0.865197 -0.2119137 -0.454452 0.865197 -0.2876101 -0.4107487 0.865197 0.1297801 -0.4843462 0.8651971 0.0437026 -0.499524 0.865197 -0.0437026 -0.4995239 0.865197 0.354566 -0.354566 0.865197 0.2876101 -0.4107487 0.865197 0.2119137 -0.454452 0.865197 0.4843463 -0.1297802 0.8651971 0.4544523 -0.2119132 0.865197 0.4107487 -0.2876101 0.865197 0.4843463 0.1297802 0.865197 0.4995239 0.04370379 0.865197 0.4995239 -0.04370379 0.865197 0.354566 0.354566 0.865197 0.4107487 0.2876101 0.865197 0.4544523 0.2119132 0.865197 0.1297802 0.4843464 0.865197 0.2119138 0.4544522 0.865197 0.2876093 0.4107494 0.865197 -0.1297802 0.4843464 0.865197 -0.04370391 0.4995239 0.865197 0.04370391 0.4995239 0.865197 -0.354566 0.354566 0.8651971 -0.2876093 0.4107494 0.8651968 -0.2119138 0.4544522 0.865197 -0.4843463 0.1297802 0.8651971 -0.4544523 0.2119132 0.865197 -0.4107487 0.2876101 0.865197 -0.4995239 0.04370379 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.8660252 -0.5000005 -2.62548e-7 0.8660256 -0.5 0 0.8660259 -0.4999992 0 0 -1 0 0 -1 0 0 -1 0 -0.8660259 -0.4999992 -2.78957e-7 -0.8660256 -0.5 0 -0.8660252 -0.5000005 0 -0.8660252 0.5000005 -2.62548e-7 -0.8660256 0.5 0 -0.8660259 0.4999992 0 0 1 0 0 1 0 0 1 0 0.8660256 0.5 -5.25096e-7 0.8660252 0.5000005 0 0.8660259 0.4999992 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0.9988855 -0.001140475 -0.04718559 0.9988836 -0.004559338 -0.04702007 0.9988837 -0.004559099 -0.04701906 0.9988836 -0.009075939 -0.04635953 0.9988836 -0.009075999 -0.04635977 0.9988836 -0.01350796 -0.0452674 0.9988836 -0.0135082 -0.04526787 0.9988836 -0.01781409 -0.04375278 0.9988836 -0.01781439 -0.04375326 0.9988836 -0.02195382 -0.0418297 0.9988835 -0.02195388 -0.04182982 0.9988836 -0.02588862 -0.03951567 0.9988836 -0.0258885 -0.03951555 0.9988836 -0.0295816 -0.03683239 0.9988835 -0.02958214 -0.03683298 0.9988835 -0.03299885 -0.03380596 0.9988837 -0.03299713 -0.03380459 0.9988837 -0.03610575 -0.03046202 0.9988836 -0.03610676 -0.03046268 0.9988835 -0.03887826 -0.02683573 0.9988836 -0.0388785 -0.02683585 0.9988836 -0.04128706 -0.02295821 0.9988835 -0.04128646 -0.02295798 0.9988836 -0.04330945 -0.01886612 0.9988836 -0.04331058 -0.01886647 0.9988835 -0.04492926 -0.01459836 0.9988834 -0.04492932 -0.01459842 0.9988836 -0.04612857 -0.010194 0.9988835 -0.0461288 -0.01019406 0.9988835 -0.04689735 -0.00569421 0.9988836 -0.04689592 -0.00569421 0.9988836 -0.04722654 -0.001141428 0.9988836 -0.04722619 -0.001141488 0.9988836 -0.04711586 0.003421723 0.9988835 -0.04711717 0.003421962 0.9988834 -0.0465669 0.007953345 0.9988835 -0.04656666 0.007953286 0.9988836 -0.04558163 0.01241064 0.9988836 -0.04558098 0.0124104 0.9988836 -0.04417049 0.01675164 0.9988835 -0.04417079 0.01675176 0.9988836 -0.04234784 0.0209366 0.9988835 -0.04234778 0.0209366 0.9988835 -0.04012948 0.024926 0.9988836 -0.04012978 0.0249263 0.9988836 -0.03753662 0.02868306 0.9988835 -0.03753614 0.02868258 0.9988836 -0.03459268 0.03217142 0.9988836 -0.0345928 0.03217154 0.9988836 -0.03132629 0.03536009 0.9988835 -0.03132653 0.03536039 0.9988836 -0.02776753 0.03821861 0.9988835 -0.02776777 0.03821909 0.9988834 -0.02394938 0.04072064 0.9988835 -0.02394908 0.04071998 0.9988836 -0.01990723 0.04284131 0.9988836 -0.01990705 0.04284089 0.9988836 -0.01567941 0.04456228 0.9988835 -0.01567959 0.04456305 0.9988836 -0.01130545 0.04586827 0.9988836 -0.01130533 0.0458675 0.9988836 -0.006825685 0.04674464 0.9988835 -0.006825685 0.0467447 0.9988836 -0.002282321 0.0471853 0.9988836 -0.002282321 0.04718536 0.9988835 0.002282321 0.04718536 0.9988837 0.002282321 0.0471853 0.9988836 0.006825685 0.0467447 0.9988836 0.006825685 0.04674482 0.9988836 0.01130539 0.04586786 0.9988836 0.01130557 0.04586827 0.9988836 0.01567965 0.04456299 0.9988835 0.01567935 0.04456233 0.9988836 0.01990705 0.04284089 0.9988836 0.01990729 0.04284131 0.9988836 0.02394902 0.04071998 0.9988836 0.02394944 0.04072058 0.9988834 0.02776783 0.03821903 0.9988835 0.02776747 0.03821867 0.9988836 0.03132653 0.03536033 0.9988836 0.03132623 0.03536009 0.9988835 0.03459274 0.0321716 0.9988834 0.03459352 0.0321722 0.9988835 0.03753715 0.0286833 0.9988834 0.03753668 0.028683 0.9988836 0.04012978 0.02492624 0.9988836 0.04012942 0.02492606 0.9988836 0.04234778 0.0209366 0.9988836 0.04234784 0.0209366 0.9988835 0.04417079 0.01675176 0.9988836 0.04417049 0.01675164 0.9988836 0.04558098 0.01241046 0.9988835 0.04558163 0.01241058 0.9988835 0.04656666 0.007953286 0.9988836 0.04656696 0.007953286 0.9988834 0.04711717 0.003421783 0.9988837 0.04711586 0.003421843 0.9988836 0.04722619 -0.001141428 0.9988836 0.04722654 -0.001141488 0.9988836 0.04689598 -0.005694091 0.9988836 0.04689735 -0.005694389 0.9988834 0.0461288 -0.01019406 0.9988835 0.04612857 -0.010194 0.9988836 0.04492932 -0.01459842 0.9988834 0.04492926 -0.01459836 0.9988835 0.04331052 -0.01886659 0.9988835 0.0433095 -0.018866 0.9988836 0.04128652 -0.02295786 0.9988835 0.04128706 -0.02295827 0.9988836 0.0388785 -0.02683591 0.9988835 0.03887832 -0.02683573 0.9988835 0.03610664 -0.0304628 0.9988836 0.03610587 -0.03046196 0.9988836 0.03299731 -0.03380441 0.9988835 0.03299862 -0.03380614 0.9988834 0.02958208 -0.03683298 0.9988835 0.02958166 -0.03683239 0.9988836 0.02588856 -0.03951555 0.9988835 0.02588862 -0.03951567 0.9988836 0.02195388 -0.04182982 0.9988835 0.02195382 -0.0418297 0.9988835 0.01781433 -0.04375332 0.9988836 0.01781415 -0.04375278 0.9988836 0.01350814 -0.04526793 0.9988836 0.01350802 -0.04526734 0.9988836 0.009075999 -0.04635977 0.9988836 0.009075939 -0.04635953 0.9988836 0.004559218 -0.04701906 0.9988836 0.004559159 -0.04702007 0.9988855 0.001140475 -0.04718559 0.9986178 0 -0.05256074 0.04703879 0.1443292 0.9884111 0.04704582 0.1443279 0.9884109 0.04704684 0.2390511 0.9698666 0.04704374 0.2390507 0.9698668 0.04704773 0.2390482 0.9698672 0.04704833 0.33154 0.9422674 0.04704028 0.331541 0.9422675 0.04704213 0.6623721 0.7476966 0.04704278 0.5871354 0.8081207 0.0470522 0.5871343 0.808121 0.04705059 0.5063968 0.861016 0.04703968 0.5063999 0.8610147 0.04703426 0.5063993 0.8610154 0.04703515 0.4209342 0.9058709 0.04703694 0.4209343 0.9058707 0.04704004 0.4209355 0.90587 0.04705649 0.6623893 0.7476804 0.04702973 0.662388 0.7476834 0.04702848 0.7314561 0.6802648 0.0470466 0.7314582 0.6802613 0.04704302 0.7314589 0.680261 0.04704457 0.7936981 0.60649 0.04703873 0.7936978 0.6064907 0.04705309 0.7936888 0.6065015 0.04705423 0.8485265 0.5270569 0.04702675 0.8485291 0.527055 0.04701346 0.9846333 0.1681873 0.04701411 0.963809 0.2624159 0.04702514 0.963808 0.2624168 0.04702645 0.9339817 0.3542129 0.04703032 0.9339811 0.3542143 0.04705494 0.9339811 0.3542104 0.04705458 0.8954348 0.4426989 0.04703259 0.8954347 0.4427015 0.04702681 0.895434 0.4427034 0.04703408 0.9846352 0.1681706 0.04703831 0.9846351 0.1681701 0.04703783 0.9962694 0.07235193 0.04702353 0.9962698 0.07235479 0.04703706 0.9962689 0.07235789 0.04703718 0.9986014 -0.02413767 0.04703021 0.9986017 -0.0241369 0.04704815 0.998602 -0.02409279 0.04704803 0.9916095 -0.1204041 0.04703611 0.9916099 -0.1204054 0.04703563 0.9753608 -0.2155436 0.04703789 0.9753606 -0.2155442 0.04703032 0.9753606 -0.2155455 0.04703044 0.950004 -0.3086754 0.04703509 0.9500036 -0.308676 0.04704803 0.950005 -0.3086697 0.04704642 0.9157769 -0.3989227 0.04705613 0.9157769 -0.3989216 0.04704499 0.7634696 -0.6441282 0.04704511 0.8220728 -0.5674355 0.04704415 0.8220728 -0.5674358 0.04703587 0.8220739 -0.5674348 0.04703468 0.8730006 -0.4854457 0.04705232 0.8729991 -0.485447 0.04705524 0.8729981 -0.4854484 0.04703116 0.6977385 -0.714807 0.04705619 0.697649 -0.7148928 0.04705578 0.7634699 -0.644127 0.04705083 0.625492 -0.7788107 0.04704129 0.6254941 -0.7788096 0.04704147 0.697739 -0.7148059 0.04705399 0.3766683 -0.9251524 0.04705202 0.4642109 -0.8844741 0.04703909 0.4642099 -0.8844752 0.04704022 0.5473968 -0.8355501 0.04705357 0.5474044 -0.8355444 0.0470221 0.5474084 -0.8355435 0.0470224 0.6254887 -0.778815 0.04702484 0.3766798 -0.9251492 0.04705053 0.3766769 -0.9251491 0.04705238 0.2856277 -0.9571849 0.04704695 0.2856286 -0.9571849 0.04704016 0.2856266 -0.9571859 0.04704052 0.1919144 -0.9802837 0.04705888 0.1919162 -0.9802824 0.04704546 0 -0.9988927 0.04704546 0 -0.9988929 0.04704523 0.09640747 -0.9942295 0.04705369 0.09640657 -0.9942293 0.04705768 0.09640157 -0.9942295 0.04704016 -0.2856266 -0.9571859 0.04704046 -0.1919164 -0.9802832 0.04705888 -0.1919143 -0.9802828 0.04705768 -0.09640157 -0.9942295 0.04705291 -0.09640747 -0.9942291 0.04704523 -0.09640657 -0.9942296 0.04704546 0 -0.9988929 0.04704433 -0.2856279 -0.9571853 0.04705244 -0.2856286 -0.9571847 0.04705047 -0.3766794 -0.925148 0.0470314 -0.3766772 -0.9251499 0.04705393 -0.3766683 -0.9251524 0.04705202 -0.4642097 -0.8844748 0.04703909 -0.4642111 -0.8844747 0.04705083 -0.625492 -0.7788107 0.04702246 -0.6254887 -0.778815 0.0470221 -0.5474051 -0.8355457 0.04705911 -0.5474075 -0.8355421 0.04704022 -0.5473968 -0.8355501 0.04705578 -0.7634692 -0.6441278 0.04705619 -0.697649 -0.7148928 0.04703116 -0.6977385 -0.714807 0.04704135 -0.697739 -0.7148059 0.04704135 -0.6254941 -0.7788096 0.04704415 -0.8220728 -0.5674358 0.04704523 -0.8220728 -0.5674355 0.04704499 -0.7634703 -0.6441273 0.04704809 -0.950005 -0.3086697 0.04704642 -0.915776 -0.3989247 0.04702597 -0.9157777 -0.398923 0.04702651 -0.8730068 -0.4854354 0.04704868 -0.873 -0.4854454 0.04703474 -0.8729997 -0.4854474 0.04703581 -0.8220739 -0.5674348 0.04703629 -0.9500038 -0.3086754 0.04706162 -0.9500035 -0.3086724 0.04706239 -0.9753591 -0.2155451 0.04704988 -0.9753592 -0.2155474 0.04703563 -0.9753608 -0.2155436 0.04703611 -0.9916101 -0.1204041 0.04701536 -0.9916113 -0.120402 0.04701548 -0.9986017 -0.02417331 0.04703021 -0.9986017 -0.0241369 0.04703718 -0.9986014 -0.02413767 0.04703706 -0.9962689 0.07235789 0.04702353 -0.9962698 0.07235479 0.04703783 -0.9962694 0.07235193 0.04703843 -0.984635 0.1681705 0.04703468 -0.9846353 0.1681701 0.04701346 -0.9846333 0.1681873 0.04701411 -0.9638085 0.262417 0.04702514 -0.9638085 0.2624157 0.04705309 -0.7936888 0.6065015 0.04705423 -0.8485279 0.5270544 0.04702675 -0.8485274 0.5270575 0.04702681 -0.895434 0.4427034 0.04703927 -0.8954354 0.4426993 0.04705446 -0.8954339 0.4427011 0.04705482 -0.9339799 0.3542138 0.04702055 -0.9339827 0.354211 0.04702645 -0.9339817 0.3542129 0.04703801 -0.7936983 0.6064903 0.04704487 -0.7936977 0.6064906 0.04704302 -0.7314589 0.680261 0.0470466 -0.7314582 0.6802613 0.04702848 -0.7314561 0.6802648 0.04702979 -0.6623902 0.7476814 0.04705476 -0.6623873 0.7476825 0.04704213 -0.6623722 0.7476966 0.04704278 -0.5871345 0.8081213 0.0470522 -0.5871351 0.8081203 0.04705059 -0.5063968 0.861016 0.04703968 -0.5063999 0.8610147 0.04703426 -0.5063993 0.8610154 0.04703515 -0.4209344 0.9058709 0.04703634 -0.4209342 0.9058709 0.0470401 -0.4209355 0.90587 0.04704028 -0.3315401 0.9422677 0.04704833 -0.3315408 0.9422671 0.04703754 0.1443289 0.9884112 0.04703742 0.04826009 0.9977266 0.04703986 0.04825985 0.9977265 0.04703986 -0.04826009 0.9977265 0.04703742 -0.04825985 0.9977266 0.04703754 -0.1443289 0.9884112 0.04703879 -0.1443292 0.9884111 0.04704582 -0.1443279 0.9884109 0.04704689 -0.2390507 0.9698668 0.0470429 -0.2390511 0.9698668 0.04704773 -0.2390482 0.9698672 0.1794759 -0.1421428 0.9734392 0.179475 -0.142143 0.9734393 0.1794753 -0.2354296 0.9551762 0.1794744 -0.2354298 0.9551764 0.1794747 -0.326518 0.9279951 0.1794736 -0.3265182 0.9279952 0.1794734 -0.4145591 0.8921492 0.1794781 -0.4145578 0.8921487 0.1794793 -0.4987283 0.8479725 0.1794756 -0.4987293 0.8479726 0.1794751 -0.578241 0.7958807 0.1794742 -0.5782412 0.7958807 0.1794744 -0.6523542 0.7363579 0.1794729 -0.6523547 0.7363579 0.1794724 -0.7203791 0.6699579 0.1794719 -0.7203793 0.6699579 0.179471 -0.7816759 0.5973047 0.1794698 -0.7816762 0.5973046 0.1794692 -0.8356765 0.5190718 0.1794837 -0.8356727 0.5190728 0.1794835 -0.8818694 0.4359954 0.1794695 -0.881873 0.435994 0.1794694 -0.9198351 0.3488469 0.1794812 -0.9198322 0.3488483 0.1794819 -0.9492068 0.258443 0.1794738 -0.9492086 0.2584418 0.1794739 -0.969721 0.1656212 0.1794823 -0.9697192 0.1656225 0.1794829 -0.9811769 0.07125818 0.1794853 -0.9811765 0.0712586 0.179485 -0.9834735 -0.0237689 0.1794732 -0.9834756 -0.02377128 0.1794734 -0.9765899 -0.1185815 0.179479 -0.9765891 -0.1185802 0.179479 -0.9605856 -0.2122797 0.1794649 -0.9605874 -0.2122829 0.1794648 -0.9356158 -0.3039991 0.179472 -0.935615 -0.3039973 0.1794729 -0.9019057 -0.3928813 0.1794777 -0.9019052 -0.39288 0.1794779 -0.8597768 -0.4780917 0.1794742 -0.859777 -0.4780926 0.1794739 -0.8096202 -0.5588418 0.1794795 -0.80962 -0.5588403 0.1794795 -0.751905 -0.6343706 0.1794769 -0.751905 -0.6343712 0.1794754 -0.6871685 -0.7039802 0.1794817 -0.6871686 -0.7039785 0.1794819 -0.6160186 -0.767012 0.1794714 -0.6160182 -0.7670148 0.1794722 -0.5391126 -0.8228897 0.1794764 -0.5391129 -0.8228886 0.1794769 -0.4571788 -0.8710772 0.1794736 -0.4571785 -0.8710781 0.1794729 -0.3709716 -0.9111364 0.1794731 -0.3709716 -0.9111364 0.1794728 -0.2813025 -0.9426869 0.1794723 -0.2813023 -0.9426869 0.1794725 -0.1890089 -0.9654352 0.1794657 -0.1890078 -0.9654368 0.1794656 -0.09494459 -0.9791719 0.1794798 -0.09494709 -0.9791691 0.1794807 0 -0.9837614 0.1794807 0 -0.9837614 0.1794798 0.09494435 -0.9791694 0.1794656 0.09494733 -0.9791716 0.1794657 0.1890091 -0.9654365 0.1794724 0.1890075 -0.9654355 0.1794723 0.2813025 -0.9426869 0.1794727 0.2813023 -0.9426869 0.179473 0.3709716 -0.9111364 0.1794729 0.3709716 -0.9111364 0.1794736 0.4571791 -0.8710777 0.179477 0.4571782 -0.8710775 0.1794765 0.5391122 -0.822889 0.1794722 0.5391133 -0.8228892 0.1794715 0.6160199 -0.7670134 0.1794819 0.616017 -0.7670133 0.1794817 0.6871677 -0.7039794 0.1794754 0.6871693 -0.7039793 0.1794768 0.7519053 -0.6343709 0.1794797 0.7519046 -0.634371 0.1794797 0.8096193 -0.5588412 0.1794738 0.8096209 -0.5588409 0.1794743 0.8597773 -0.4780919 0.1794779 0.8597764 -0.4780922 0.1794776 0.9019048 -0.3928809 0.1794729 0.901906 -0.3928804 0.179472 0.9356145 -0.3039987 0.1794813 0.9356123 -0.3039999 0.1794819 0.9605851 -0.2122796 0.179479 0.9605857 -0.2122791 0.179479 0.9765889 -0.1185813 0.1794734 0.9765899 -0.1185804 0.1794732 0.9834757 -0.02376896 0.179485 0.9834735 -0.02377122 0.1794853 0.9811766 0.07125812 0.1794829 0.9811769 0.07125866 0.1794823 0.9697194 0.1656209 0.1794738 0.9697207 0.1656228 0.1794737 0.9492083 0.2584434 0.1794818 0.9492072 0.2584415 0.1794812 0.9198331 0.348846 0.1794694 0.9198343 0.3488491 0.1794694 0.8818717 0.4359965 0.1794836 0.8818707 0.4359929 0.1794837 0.8356743 0.5190705 0.1794693 0.835675 0.5190743 0.1794697 0.7816762 0.5973048 0.1794708 0.7816761 0.5973045 0.1794718 0.7203792 0.669958 0.1794726 0.7203792 0.6699577 0.1794728 0.6523544 0.736358 0.1794742 0.6523544 0.7363576 0.1794741 0.5782411 0.7958809 0.1794752 0.5782412 0.7958806 0.1794755 0.4987286 0.847973 0.1794794 0.4987289 0.847972 0.1794782 0.4145587 0.8921483 0.1794734 0.4145582 0.8921495 0.1794737 0.3265181 0.9279952 0.1794748 0.3265182 0.9279949 0.1794744 0.2354297 0.9551763 0.1794752 0.2354298 0.9551761 0.179475 0.1421428 0.9734393 0.1794759 0.142143 0.9734391 0.1794757 0.04752928 0.9826135 0.1794735 0.04752886 0.982614 0.1794735 -0.04752928 0.982614 0.1794757 -0.0475288 0.9826136 0.3457681 -0.135577 0.9284735 0.3457687 -0.1355769 0.9284735 0.3457677 -0.224555 0.9110542 0.34577 -0.2245544 0.9110535 0.3457703 -0.3114355 0.8851276 0.3457725 -0.3114348 0.885127 0.3457734 -0.3954079 0.8509368 0.3457694 -0.3954093 0.8509379 0.3457686 -0.4756911 0.8088029 0.3457692 -0.4756909 0.8088026 0.3457692 -0.5515303 0.7591167 0.3457688 -0.5515304 0.7591167 0.3457688 -0.6222209 0.7023426 0.3457742 -0.6222187 0.7023419 0.3457744 -0.6871005 0.6390093 0.345772 -0.6871016 0.6390095 0.3457723 -0.7455672 0.5697115 0.345777 -0.7455652 0.5697113 0.3457773 -0.7970691 0.4950949 0.3457625 -0.7970753 0.4950951 0.3457621 -0.8411384 0.4158543 0.3457777 -0.8411318 0.4158548 0.3457778 -0.8773411 0.3327315 0.3457758 -0.877342 0.3327314 0.3457754 -0.9053595 0.2465028 0.3457837 -0.9053561 0.2465036 0.3457837 -0.9249207 0.1579728 0.3457684 -0.9249267 0.1579706 0.3457678 -0.9358553 0.06796562 0.3457729 -0.9358535 0.06796652 0.3457728 -0.9380444 -0.02267068 0.3457714 -0.9380449 -0.02267098 0.3457711 -0.9314771 -0.1131042 0.3457735 -0.9314764 -0.1131036 0.3457738 -0.9162123 -0.2024739 0.3457753 -0.9162117 -0.2024735 0.345775 -0.8923928 -0.2899566 0.3457819 -0.8923908 -0.2899545 0.345781 -0.8602401 -0.3747296 0.3457738 -0.8602421 -0.3747321 0.3457732 -0.8200604 -0.4560064 0.3457717 -0.8200608 -0.456007 0.3457724 -0.7722208 -0.5330259 0.3457689 -0.7722213 -0.5330272 0.3457689 -0.7171732 -0.6050674 0.3457674 -0.7171733 -0.6050681 0.3457675 -0.655427 -0.6714612 0.3457648 -0.6554273 -0.6714625 0.3457638 -0.5875623 -0.7315859 0.3457794 -0.5875613 -0.7315794 0.3457786 -0.5142104 -0.7848725 0.3457598 -0.5142109 -0.7848804 0.3457595 -0.4360593 -0.8308446 0.345775 -0.4360595 -0.8308379 0.3457753 -0.3538346 -0.8690458 0.3457735 -0.3538345 -0.8690465 0.3457737 -0.2683091 -0.8991389 0.3457667 -0.2683084 -0.8991418 0.3457659 -0.1802759 -0.92084 0.345777 -0.1802774 -0.9208357 0.3457772 -0.0905596 -0.9339363 0.3457711 -0.09055858 -0.9339387 0.3457704 0 -0.9383192 0.3457704 0 -0.9383192 0.345771 0.09055984 -0.9339385 0.3457772 0.09055835 -0.9339365 0.345777 0.1802751 -0.9208362 0.345766 0.1802782 -0.9208397 0.3457667 0.2683098 -0.8991414 0.3457737 0.2683076 -0.8991394 0.3457735 0.3538348 -0.8690463 0.3457753 0.3538343 -0.8690459 0.3457751 0.4360566 -0.8308394 0.3457596 0.4360621 -0.8308429 0.3457599 0.5142127 -0.7848792 0.3457698 0.5142089 -0.7848773 0.3457694 0.5875627 -0.7315829 0.3457639 0.5875648 -0.7315838 0.3457648 0.6554278 -0.6714621 0.3457675 0.6554266 -0.6714617 0.3457674 0.7171736 -0.6050678 0.345769 0.7171729 -0.6050677 0.3457689 0.7722217 -0.5330266 0.3457723 0.7722204 -0.5330265 0.3457716 0.8200609 -0.4560067 0.3457732 0.8200603 -0.4560067 0.3457738 0.8602414 -0.3747335 0.3457666 0.8602445 -0.3747332 0.3457668 0.8923966 -0.2899546 0.345775 0.8923932 -0.2899553 0.3457753 0.9162116 -0.2024738 0.3457738 0.9162123 -0.2024736 0.3457735 0.9314764 -0.1131041 0.3457711 0.9314773 -0.1131037 0.3457714 0.9380449 -0.02267068 0.3457728 0.9380444 -0.02267098 0.3457729 0.9358536 0.0679655 0.3457678 0.9358552 0.06796669 0.3457683 0.9249262 0.1579738 0.3457837 0.9249212 0.1579697 0.3457837 0.9053565 0.2465019 0.3457754 0.9053589 0.2465044 0.3457758 0.8773419 0.3327318 0.3457778 0.8773412 0.3327311 0.3457776 0.8411332 0.4158518 0.345762 0.8411369 0.4158573 0.3457625 0.7970737 0.4950977 0.3457772 0.7970708 0.4950923 0.3457771 0.7455657 0.5697104 0.3457725 0.7455665 0.5697123 0.345772 0.6871011 0.6390098 0.3457745 0.6871008 0.6390089 0.3457741 0.6222195 0.7023411 0.3457689 0.62222 0.7023433 0.3457688 0.5515303 0.7591167 0.3457692 0.5515303 0.7591165 0.3457692 0.475691 0.8088026 0.3457686 0.4756911 0.8088029 0.3457694 0.3954085 0.8509382 0.3457733 0.3954086 0.8509364 0.3457726 0.3114352 0.8851268 0.3457704 0.311435 0.8851277 0.34577 0.2245548 0.9110535 0.3457677 0.2245545 0.9110543 0.3457687 0.1355774 0.9284734 0.3457658 0.135577 0.9284745 0.3457674 0.04533302 0.9372246 0.3457709 0.04533374 0.9372232 0.3457709 -0.04533314 0.9372232 0.3457681 -0.0453338 0.9372242 0.5018039 -0.1249805 0.8559046 0.5018042 -0.1249803 0.8559045 0.5018051 -0.2070038 0.8398459 0.5018054 -0.2070037 0.8398457 0.5018056 -0.2870936 0.8159462 0.5018052 -0.2870938 0.8159465 0.5018055 -0.3645035 0.7844287 0.5018063 -0.3645032 0.7844284 0.5018069 -0.4385099 0.7455863 0.5018032 -0.4385117 0.7455877 0.5018033 -0.5084225 0.6997857 0.5017985 -0.5084249 0.6997873 0.5017982 -0.5735918 0.6474498 0.5018038 -0.5735886 0.6474481 0.5018039 -0.6333984 0.5890665 0.5018016 -0.6333997 0.5890671 0.5018013 -0.6872959 0.5251855 0.5017982 -0.6872978 0.525186 0.5017982 -0.734777 0.4564005 0.5018057 -0.7347724 0.4563996 0.5018058 -0.7753917 0.3833518 0.5017974 -0.775397 0.3833522 0.5017971 -0.8087757 0.306727 0.5018014 -0.808773 0.3067271 0.5018013 -0.834601 0.2272369 0.5018032 -0.8345998 0.227237 0.5018037 -0.8526345 0.1456273 0.5018006 -0.8526364 0.145627 0.5018012 -0.8627107 0.06265479 0.5017959 -0.862714 0.06265377 0.501796 -0.8647334 -0.02090257 0.501812 -0.8647242 -0.02089869 0.5018122 -0.8586701 -0.1042611 0.501801 -0.8586761 -0.1042643 0.5018008 -0.844605 -0.18665 0.5018035 -0.8446037 -0.1866492 0.5018035 -0.8226465 -0.2672939 0.5018002 -0.8226481 -0.2672952 0.5018005 -0.7930107 -0.3454421 0.5017942 -0.7930135 -0.345445 0.501795 -0.7559698 -0.4203706 0.5018058 -0.7559655 -0.4203655 0.5018057 -0.7118652 -0.4913645 0.5018022 -0.7118664 -0.4913662 0.5018026 -0.6611199 -0.5577766 0.5018037 -0.6611195 -0.5577759 0.5018045 -0.6041986 -0.61898 0.5018053 -0.6041985 -0.6189795 0.5018053 -0.5416389 -0.6744025 0.5017969 -0.5416405 -0.6744076 0.501797 -0.474022 -0.723535 0.5018082 -0.4740206 -0.7235283 0.5018079 -0.4019768 -0.7659005 0.5017978 -0.4019774 -0.7659068 0.5017973 -0.3261801 -0.801128 0.5018038 -0.32618 -0.8011239 0.5018039 -0.2473369 -0.8288651 0.501812 -0.2473374 -0.82886 0.5018121 -0.1661858 -0.8488622 0.5018066 -0.1661852 -0.8488655 0.5018069 -0.08348274 -0.8609416 0.5018023 -0.0834819 -0.8609445 0.5018022 0 -0.8649825 0.5018021 0 -0.8649825 0.5018022 0.08348298 -0.8609443 0.5018069 0.08348166 -0.8609417 0.5018066 0.1661864 -0.8488652 0.5018121 0.1661846 -0.8488625 0.501812 0.2473356 -0.8288605 0.5018041 0.2473387 -0.8288645 0.5018038 0.3261787 -0.8011245 0.5017973 0.3261815 -0.8011275 0.5017978 0.4019795 -0.7659057 0.5018078 0.4019747 -0.7659016 0.5018081 0.4740185 -0.7235296 0.5018044 0.4740204 -0.7235309 0.5018054 0.5416374 -0.6744038 0.5017967 0.541642 -0.6744064 0.5017959 0.6042037 -0.618982 0.5018045 0.6041988 -0.6189799 0.5018036 0.6611195 -0.5577762 0.5018026 0.6611201 -0.5577764 0.5018023 0.7118668 -0.4913656 0.5018056 0.7118647 -0.4913651 0.5018059 0.7559642 -0.4203675 0.5017951 0.7559709 -0.4203684 0.5017942 0.7930141 -0.3454436 0.5018129 0.7930024 -0.3454432 0.501813 0.8226412 -0.2672922 0.5018036 0.8226471 -0.2672918 0.5018035 0.8446036 -0.1866497 0.5018008 0.8446052 -0.1866495 0.501801 0.8586764 -0.1042618 0.5018121 0.8586698 -0.1042636 0.5018121 0.8647241 -0.02090233 0.5017961 0.8647335 -0.02089887 0.5017958 0.8627139 0.06265503 0.5018013 0.862711 0.0626536 0.5018006 0.8526363 0.1456277 0.5018037 0.8526347 0.1456267 0.5018033 0.8345999 0.2272366 0.5018014 0.8346008 0.2272372 0.5018015 0.8087733 0.3067261 0.5017971 0.8087754 0.306728 0.5017973 0.7753961 0.3833539 0.5018059 0.7753926 0.38335 0.5018057 0.7347732 0.4563982 0.5017981 0.734776 0.4564019 0.5017982 0.6872974 0.5251866 0.5018012 0.6872964 0.5251849 0.5018016 0.6333994 0.5890675 0.5018039 0.6333987 0.5890662 0.5018038 0.5735896 0.6474473 0.5017982 0.5735908 0.6474506 0.5017986 0.5084241 0.699788 0.5018033 0.5084233 0.6997851 0.5018032 0.438511 0.7455882 0.5018069 0.4385106 0.7455859 0.5018061 0.3645033 0.7844284 0.5018055 0.3645033 0.7844288 0.5018052 0.2870938 0.8159465 0.5018056 0.2870938 0.8159463 0.5018054 0.2070037 0.8398457 0.5018051 0.2070037 0.839846 0.5018042 0.1249804 0.8559045 0.5018058 0.1249806 0.8559035 0.5018055 0.04179012 0.8639703 0.5018041 0.04178982 0.8639712 0.5018041 -0.04179012 0.8639713 0.5018048 -0.04178994 0.8639708 0.6430248 -0.1106557 0.757809 0.6430221 -0.1106567 0.7578111 0.6430218 -0.1832795 0.7435936 0.6430212 -0.1832798 0.7435942 0.6430211 -0.2541911 0.7224339 0.6430215 -0.2541909 0.7224337 0.643021 -0.3227298 0.6945282 0.6430235 -0.3227283 0.6945267 0.6430236 -0.3882534 0.6601363 0.6430242 -0.388253 0.6601359 0.6430241 -0.4501527 0.6195826 0.6430274 -0.4501504 0.6195808 0.643028 -0.5078468 0.5732422 0.6430202 -0.5078527 0.5732458 0.6430198 -0.5608075 0.5215559 0.6430211 -0.5608066 0.5215554 0.643021 -0.608527 0.4649936 0.6430267 -0.6085221 0.4649918 0.6430269 -0.6505602 0.404089 0.6430298 -0.6505576 0.4040884 0.6430301 -0.6865196 0.339416 0.6430216 -0.686527 0.3394172 0.6430215 -0.716081 0.2715719 0.6430242 -0.7160787 0.2715718 0.6430246 -0.7389452 0.2011951 0.6430156 -0.7389531 0.2011948 0.6430154 -0.754922 0.1289351 0.6430277 -0.7549111 0.1289365 0.6430273 -0.7638314 0.05547469 0.6430233 -0.7638349 0.05547386 0.6430231 -0.7656231 -0.01850551 0.6430181 -0.7656273 -0.01850694 0.6430181 -0.7602669 -0.09231442 0.6430245 -0.7602618 -0.09231215 0.6430244 -0.7478033 -0.1652573 0.6430228 -0.7478045 -0.165258 0.6430229 -0.7283638 -0.2366596 0.643023 -0.7283637 -0.2366595 0.643023 -0.7021228 -0.3058513 0.6430251 -0.7021214 -0.30585 0.6430249 -0.6693237 -0.3721892 0.6430237 -0.6693244 -0.3721899 0.6430239 -0.63028 -0.4350488 0.6430187 -0.6302827 -0.4350523 0.6430193 -0.5853514 -0.4938523 0.6430206 -0.5853507 -0.4938512 0.64302 -0.5349539 -0.5480415 0.6430207 -0.5349537 -0.5480411 0.6430213 -0.4795631 -0.5971122 0.643024 -0.4795622 -0.59711 0.6430239 -0.4196938 -0.640607 0.6430177 -0.4196954 -0.6406123 0.6430181 -0.3559073 -0.678128 0.6430274 -0.3559059 -0.67812 0.643028 -0.2887961 -0.7093037 0.6430193 -0.2887969 -0.7093114 0.6430182 -0.2189901 -0.7338739 0.6430221 -0.2189902 -0.7338705 0.6430222 -0.1471405 -0.7515797 0.6430216 -0.1471405 -0.7515802 0.6430219 -0.07391393 -0.7622727 0.6430264 -0.07391476 -0.7622687 0.6430266 0 -0.7658439 0.6430267 0 -0.7658439 0.6430265 0.07391357 -0.7622688 0.6430218 0.07391512 -0.7622725 0.6430216 0.1471406 -0.7515803 0.6430223 0.1471403 -0.7515797 0.6430221 0.2189884 -0.7338709 0.6430152 0.2189918 -0.7338761 0.6430153 0.2888011 -0.7093133 0.643028 0.2887941 -0.7093046 0.6430276 0.3559037 -0.6781211 0.6430183 0.3559094 -0.6781268 0.6430177 0.4196967 -0.6406114 0.6430238 0.4196926 -0.640608 0.6430241 0.4795615 -0.5971103 0.6430277 0.4795588 -0.5971085 0.6430281 0.5349493 -0.5480367 0.6430202 0.5349555 -0.54804 0.6430206 0.5853505 -0.4938516 0.6430193 0.5853516 -0.4938519 0.6430187 0.6302835 -0.4350512 0.6430239 0.6302792 -0.4350498 0.6430237 0.6693245 -0.3721897 0.643025 0.6693235 -0.3721895 0.6430252 0.7021211 -0.3058505 0.6430231 0.7021231 -0.3058508 0.643023 0.7283636 -0.2366595 0.6430229 0.7283638 -0.2366595 0.6430227 0.7478046 -0.1652576 0.6430243 0.7478032 -0.1652577 0.6430245 0.7602616 -0.09231382 0.6430182 0.760267 -0.09231281 0.6430181 0.7656273 -0.01850563 0.6430231 0.7656232 -0.01850682 0.6430233 0.7638348 0.05547493 0.6430273 0.7638316 0.05547362 0.6430278 0.7549116 0.1289333 0.6430155 0.7549213 0.1289382 0.6430155 0.7389525 0.2011971 0.6430246 0.7389457 0.2011928 0.6430242 0.7160789 0.2715711 0.6430215 0.7160808 0.2715726 0.6430215 0.686526 0.3394192 0.6430299 0.6865206 0.3394141 0.6430298 0.6505581 0.4040877 0.643027 0.6505598 0.4040897 0.6430268 0.608523 0.4649906 0.6430211 0.6085259 0.4649947 0.643021 0.5608068 0.5215552 0.6430197 0.5608073 0.5215561 0.64302 0.5078513 0.5732473 0.6430279 0.5078484 0.5732409 0.6430274 0.4501511 0.6195803 0.643024 0.450152 0.619583 0.6430242 0.3882531 0.6601359 0.6430237 0.3882533 0.6601364 0.6430235 0.3227289 0.6945264 0.6430211 0.3227292 0.6945285 0.6430215 0.254191 0.7224336 0.6430211 0.2541911 0.722434 0.6430211 0.1832796 0.7435942 0.6430219 0.1832797 0.7435936 0.6430221 0.1106564 0.7578112 0.6430233 0.1106565 0.7578102 0.6430235 0.03700053 0.7649522 0.6430238 0.03700059 0.764952 0.6430237 -0.03700065 0.764952 0.643024 -0.03700059 0.7649517 0.7651246 -0.09303379 0.6371256 0.7651258 -0.09303325 0.6371244 0.7651254 -0.1540914 0.6251712 0.7651268 -0.1540906 0.6251698 0.7651268 -0.2137084 0.6073794 0.7651257 -0.2137091 0.6073805 0.7651261 -0.2713319 0.5839188 0.7651247 -0.2713329 0.58392 0.7651246 -0.3264219 0.5550074 0.7651221 -0.326424 0.5550096 0.7651219 -0.3784673 0.5209137 0.7651262 -0.3784632 0.5209103 0.7651261 -0.4269714 0.4819516 0.7651281 -0.4269694 0.4819503 0.7651283 -0.4714911 0.4384915 0.7651268 -0.4714927 0.4384924 0.7651268 -0.5116124 0.3909393 0.7651245 -0.5116152 0.3909404 0.7651242 -0.5469587 0.3397371 0.7651264 -0.546956 0.3397363 0.7651264 -0.5771905 0.2853639 0.7651256 -0.5771915 0.2853641 0.7651254 -0.6020398 0.2283226 0.7651239 -0.6020416 0.2283228 0.7651239 -0.6212671 0.1691524 0.7651304 -0.6212592 0.1691523 0.7651304 -0.6346845 0.1084025 0.7651208 -0.6346964 0.1084014 0.7651206 -0.6421957 0.04663789 0.7651293 -0.6421852 0.04663985 0.7651296 -0.6436884 -0.01555675 0.7651246 -0.6436942 -0.01555842 0.7651244 -0.6391878 -0.07761174 0.7651218 -0.6391908 -0.07761293 0.7651218 -0.6287162 -0.1389409 0.7651238 -0.628714 -0.1389397 0.7651239 -0.6123695 -0.1989698 0.7651211 -0.6123725 -0.1989718 0.7651212 -0.5903094 -0.2571467 0.7651283 -0.5903025 -0.2571413 0.7651281 -0.5627291 -0.3129136 0.765123 -0.5627336 -0.3129179 0.7651231 -0.5299062 -0.3657679 0.765128 -0.5299022 -0.3657633 0.7651279 -0.4921269 -0.4151995 0.7651261 -0.492128 -0.4152011 0.7651264 -0.4497575 -0.4607601 0.7651251 -0.4497582 -0.4607615 0.7651247 -0.4031893 -0.5020184 0.7651256 -0.4031889 -0.5020175 0.7651256 -0.3528539 -0.538588 0.7651315 -0.3528516 -0.5385812 0.7651315 -0.2992238 -0.5701218 0.7651253 -0.2992255 -0.5701293 0.7651252 -0.2428048 -0.5963467 0.7651261 -0.2428047 -0.5963454 0.7651267 -0.1841141 -0.6169953 0.7651237 -0.1841142 -0.6169989 0.7651234 -0.1237078 -0.6318882 0.7651237 -0.1237078 -0.6318877 0.7651232 -0.06214255 -0.6408781 0.7651242 -0.06214272 -0.640877 0.7651241 0 -0.643883 0.7651241 0 -0.643883 0.7651242 0.06214249 -0.6408771 0.7651233 0.06214284 -0.6408781 0.7651237 0.1237072 -0.6318878 0.7651219 0.1237083 -0.6318898 0.7651215 0.1841165 -0.6170009 0.7651287 0.1841119 -0.6169933 0.765129 0.2428031 -0.5963425 0.7651251 0.2428059 -0.5963462 0.7651252 0.2992273 -0.5701285 0.7651315 0.2992221 -0.5701227 0.7651315 0.35285 -0.538582 0.7651255 0.3528554 -0.538587 0.7651256 0.4031887 -0.5020176 0.7651249 0.4031895 -0.5020182 0.7651251 0.4497585 -0.4607612 0.7651264 0.4497572 -0.4607604 0.7651261 0.4921284 -0.4152007 0.7651278 0.4921265 -0.4151999 0.765128 0.5299013 -0.3657646 0.7651231 0.5299071 -0.3657667 0.765123 0.5627344 -0.3129165 0.7651281 0.5627284 -0.312915 0.7651283 0.5903016 -0.2571433 0.7651213 0.5903102 -0.2571446 0.765121 0.6123728 -0.1989709 0.7651239 0.6123693 -0.1989707 0.7651238 0.6287139 -0.1389403 0.7651218 0.6287164 -0.1389402 0.7651218 0.6391909 -0.0776121 0.7651244 0.6391878 -0.07761257 0.7651246 0.6436944 -0.01555687 0.7651296 0.6436884 -0.0155583 0.7651294 0.6421853 0.04663711 0.7651208 0.6421955 0.04664063 0.7651206 0.634696 0.1084045 0.7651303 0.6346851 0.1083995 0.7651305 0.6212598 0.1691504 0.765124 0.6212666 0.1691544 0.765124 0.6020414 0.2283232 0.7651253 0.60204 0.2283222 0.7651258 0.5771923 0.2853624 0.7651197 0.5771979 0.2853673 0.76512 0.5469617 0.3397414 0.7651241 0.5469583 0.3397377 0.7651244 0.5116148 0.3909412 0.765127 0.511613 0.3909387 0.7651269 0.4714924 0.4384927 0.7651283 0.4714915 0.4384912 0.7651282 0.4269698 0.4819498 0.7651261 0.426971 0.481952 0.7651262 0.3784642 0.5209095 0.7651219 0.3784661 0.5209143 0.7651221 0.3264233 0.5550099 0.7651246 0.3264225 0.5550071 0.7651247 0.2713325 0.5839201 0.7651261 0.2713323 0.5839186 0.7651257 0.2137088 0.6073806 0.7651269 0.2137086 0.6073792 0.7651268 0.154091 0.6251696 0.7651253 0.154091 0.6251714 0.7651258 0.09303361 0.6371243 0.7651257 0.09303355 0.6371244 0.7651256 0.03110831 0.6431291 0.7651245 0.03110802 0.6431306 0.7651244 -0.03110843 0.6431305 0.7651253 -0.03110814 0.6431296 0.8644638 -0.07263398 0.4974198 0.8644644 -0.07263368 0.497419 0.8644647 -0.1203026 0.4880862 0.8644641 -0.1203031 0.4880872 0.864464 -0.166848 0.474198 0.8644639 -0.1668481 0.4741982 0.8644636 -0.2118366 0.4558815 0.8644643 -0.2118358 0.4558805 0.8644644 -0.2548458 0.4333069 0.864466 -0.2548438 0.4333049 0.8644663 -0.2954739 0.4066858 0.8644629 -0.2954784 0.4066895 0.864463 -0.3333497 0.3762736 0.8644642 -0.3333479 0.3762724 0.8644644 -0.368107 0.3423431 0.8644644 -0.3681067 0.342343 0.8644645 -0.3994292 0.3052173 0.8644629 -0.3994316 0.3052183 0.864463 -0.4270245 0.2652427 0.8644604 -0.4270291 0.2652442 0.8644601 -0.4506354 0.2227919 0.8644666 -0.4506244 0.2227894 0.8644668 -0.470023 0.1782571 0.864463 -0.4700296 0.1782579 0.8644628 -0.4850398 0.1320624 0.8644614 -0.4850423 0.1320624 0.8644613 -0.4955239 0.08463233 0.8644659 -0.4955159 0.08463287 0.864466 -0.5013709 0.03641164 0.864464 -0.5013744 0.0364111 0.8644641 -0.502548 -0.01214605 0.8644651 -0.5025462 -0.01214557 0.8644651 -0.4990276 -0.06059288 0.8644646 -0.4990285 -0.06059324 0.8644647 -0.4908505 -0.1084741 0.8644655 -0.4908491 -0.1084734 0.8644655 -0.4780889 -0.1553403 0.8644669 -0.4780867 -0.155339 0.8644668 -0.4608625 -0.2007561 0.8644629 -0.460868 -0.2007603 0.8644629 -0.4393408 -0.2443019 0.8644633 -0.4393405 -0.2443016 0.8644632 -0.4137104 -0.2855647 0.864465 -0.4137083 -0.2855623 0.8644648 -0.3842163 -0.324158 0.8644665 -0.3842145 -0.3241555 0.8644665 -0.3511354 -0.3597243 0.8644645 -0.3511373 -0.3597273 0.864465 -0.3147791 -0.3919368 0.8644644 -0.3147795 -0.3919376 0.8644646 -0.275482 -0.4204886 0.8644636 -0.2754825 -0.4204902 0.8644636 -0.2336142 -0.4451147 0.8644649 -0.2336136 -0.4451124 0.8644652 -0.1895634 -0.4655811 0.8644644 -0.1895636 -0.4655822 0.8644643 -0.1437437 -0.4817045 0.8644621 -0.1437439 -0.4817084 0.8644624 -0.09658086 -0.4933326 0.8644652 -0.09658104 -0.4933273 0.8644655 -0.04851639 -0.5003455 0.8644644 -0.04851609 -0.5003476 0.8644644 0 -0.502694 0.8644645 0 -0.502694 0.8644642 0.04851657 -0.5003476 0.8644655 0.04851585 -0.5003455 0.8644653 0.09657984 -0.4933275 0.8644632 0.09658139 -0.4933309 0.8644633 0.1437441 -0.481706 0.8644643 0.1437433 -0.4817046 0.8644645 0.1895639 -0.4655821 0.8644652 0.1895631 -0.4655811 0.8644649 0.2336131 -0.4451126 0.8644636 0.2336146 -0.4451144 0.8644636 0.2754828 -0.42049 0.8644645 0.2754817 -0.4204889 0.8644644 0.3147797 -0.3919376 0.8644649 0.3147789 -0.391937 0.8644645 0.3511379 -0.3597268 0.8644664 0.3511349 -0.3597249 0.8644666 0.384214 -0.3241561 0.8644648 0.3842168 -0.3241575 0.8644651 0.4137078 -0.2855628 0.8644632 0.4137108 -0.285564 0.8644632 0.4393405 -0.2443017 0.864463 0.439341 -0.2443018 0.8644627 0.4608687 -0.2007588 0.8644667 0.4608619 -0.2007576 0.8644669 0.4780865 -0.1553395 0.8644655 0.478089 -0.1553397 0.8644655 0.4908491 -0.1084738 0.8644647 0.4908506 -0.1084737 0.8644646 0.4990286 -0.06059306 0.8644651 0.4990276 -0.06059312 0.8644651 0.5025462 -0.01214599 0.864464 0.5025479 -0.01214563 0.8644639 0.5013743 0.03641188 0.864466 0.501371 0.03641086 0.8644659 0.4955162 0.08463102 0.8644613 0.4955235 0.08463418 0.8644614 0.4850421 0.132063 0.8644628 0.48504 0.1320618 0.8644629 0.4700291 0.1782594 0.8644668 0.4700235 0.1782556 0.8644667 0.4506255 0.222787 0.8644644 0.4506287 0.2227897 0.8644641 0.4270229 0.2652418 0.8644631 0.4270243 0.2652431 0.864463 0.3994312 0.3052189 0.8644644 0.3994296 0.3052169 0.8644645 0.3681067 0.3423429 0.8644643 0.3681069 0.3423431 0.8644642 0.3333483 0.3762721 0.864463 0.3333493 0.3762739 0.864463 0.2954772 0.4066903 0.8644661 0.2954751 0.4066851 0.864466 0.2548444 0.4333046 0.8644644 0.2548452 0.4333073 0.8644643 0.211836 0.4558804 0.8644636 0.2118363 0.4558815 0.8644639 0.1668481 0.4741982 0.8644639 0.166848 0.474198 0.8644641 0.1203029 0.4880872 0.8644647 0.1203029 0.4880862 0.8644643 0.07263386 0.497419 0.8644638 0.0726338 0.4974199 0.8644635 0.02428704 0.5021085 0.8644639 0.0242871 0.502108 0.8644639 -0.02428698 0.502108 0.8644636 -0.0242871 0.5021085 0.9380628 -0.05006045 0.3428297 0.9380627 -0.05006051 0.3428299 0.9380626 -0.08291476 0.3363979 0.9380627 -0.08291476 0.3363978 0.9380627 -0.1149944 0.3268252 0.9380626 -0.1149945 0.3268253 0.9380627 -0.1460012 0.3142008 0.9380627 -0.146001 0.3142005 0.9380627 -0.1756442 0.2986425 0.938063 -0.1756438 0.298642 0.938063 -0.2036466 0.2802959 0.9380633 -0.2036462 0.2802956 0.9380633 -0.2297481 0.2593322 0.9380628 -0.2297492 0.259333 0.9380628 -0.2537056 0.2359484 0.9380632 -0.2537047 0.2359478 0.9380632 -0.2752928 0.2103599 0.9380639 -0.275291 0.2103591 0.9380639 -0.2943086 0.1828075 0.9380637 -0.294309 0.1828076 0.9380637 -0.3105787 0.1535491 0.9380629 -0.310581 0.1535497 0.9380628 -0.3239502 0.122859 0.9380624 -0.3239516 0.1228592 0.9380624 -0.3342968 0.09101909 0.9380629 -0.3342956 0.09101903 0.9380629 -0.3415196 0.05832993 0.938062 -0.3415221 0.05832982 0.938062 -0.3455575 0.02509582 0.9380619 -0.3455575 0.02509582 0.9380619 -0.3463667 -0.008372306 0.9380636 -0.3463621 -0.008371174 0.9380637 -0.343937 -0.04176074 0.9380624 -0.3439403 -0.04176187 0.9380623 -0.3383041 -0.07476186 0.9380614 -0.3383067 -0.07476311 0.9380614 -0.3295116 -0.1070649 0.9380618 -0.3295108 -0.1070644 0.9380618 -0.3176389 -0.1383672 0.9380629 -0.3176366 -0.1383655 0.9380629 -0.3027994 -0.1683763 0.9380632 -0.3027987 -0.1683756 0.9380633 -0.2851342 -0.1968144 0.9380629 -0.2851348 -0.196815 0.9380629 -0.2648088 -0.2234148 0.938062 -0.2648103 -0.2234168 0.9380621 -0.2420111 -0.2479315 0.938063 -0.2420098 -0.2479295 0.9380628 -0.2169517 -0.2701297 0.9380623 -0.2169524 -0.2701311 0.9380623 -0.1898672 -0.2898096 0.9380633 -0.1898663 -0.289807 0.9380633 -0.1610107 -0.3067782 0.9380616 -0.1610119 -0.3067826 0.9380615 -0.1306515 -0.3208906 0.9380623 -0.1306511 -0.3208884 0.9380624 -0.0990709 -0.332 0.9380623 -0.0990709 -0.332 0.9380624 -0.06656503 -0.3400118 0.9380622 -0.06656503 -0.3400124 0.9380621 -0.03343909 -0.3448498 0.9380613 -0.0334388 -0.344852 0.9380611 0 -0.3464697 0.9380612 0 -0.3464697 0.9380612 0.03343933 -0.344852 0.9380621 0.03343862 -0.3448498 0.9380621 0.06656515 -0.3400124 0.9380624 0.06656491 -0.3400119 0.9380623 0.0990709 -0.332 0.9380623 0.0990709 -0.332 0.9380624 0.1306507 -0.3208886 0.9380615 0.130652 -0.3208904 0.9380617 0.1610128 -0.3067821 0.9380633 0.1610099 -0.3067787 0.9380633 0.1898657 -0.2898073 0.9380623 0.1898677 -0.2898092 0.9380623 0.2169526 -0.2701309 0.9380629 0.2169514 -0.2701299 0.9380631 0.2420094 -0.2479298 0.9380621 0.2420115 -0.2479311 0.9380621 0.2648107 -0.2234164 0.9380629 0.2648085 -0.2234153 0.938063 0.2851349 -0.1968148 0.9380632 0.2851341 -0.1968145 0.9380632 0.3027986 -0.1683758 0.9380629 0.3027995 -0.1683761 0.9380629 0.3176363 -0.1383661 0.9380618 0.3176392 -0.1383666 0.9380618 0.3295106 -0.1070646 0.9380614 0.3295117 -0.1070647 0.9380613 0.3383069 -0.07476252 0.9380623 0.3383039 -0.07476252 0.9380624 0.3439404 -0.04176115 0.9380637 0.343937 -0.04176151 0.9380636 0.346362 -0.008372187 0.9380619 0.3463666 -0.008371293 0.938062 0.3455575 0.02509582 0.9380619 0.3455575 0.02509582 0.9380619 0.341522 0.05833035 0.9380629 0.3415197 0.0583294 0.9380629 0.3342956 0.09101879 0.9380625 0.3342968 0.09101939 0.9380624 0.3239514 0.1228595 0.9380629 0.3239504 0.1228588 0.9380629 0.3105807 0.1535502 0.9380637 0.3105789 0.1535487 0.9380637 0.294309 0.1828078 0.9380639 0.2943086 0.1828073 0.9380639 0.2752912 0.2103587 0.9380632 0.2752925 0.2103602 0.9380632 0.2537048 0.2359476 0.9380627 0.2537055 0.2359486 0.9380629 0.229749 0.2593332 0.9380632 0.2297483 0.259332 0.9380633 0.2036463 0.2802955 0.938063 0.2036465 0.2802959 0.938063 0.1756439 0.2986419 0.9380628 0.1756441 0.2986426 0.9380628 0.1460011 0.3142005 0.9380626 0.1460012 0.3142008 0.9380626 0.1149944 0.3268254 0.9380628 0.1149944 0.3268252 0.9380627 0.08291476 0.3363978 0.9380627 0.08291476 0.336398 0.9380627 0.05006045 0.3428299 0.9380629 0.05006051 0.3428297 0.9380629 0.01673889 0.3460604 0.938063 0.01673895 0.3460601 0.938063 -0.01673889 0.3460601 0.9380629 -0.01673895 0.3460604 0.9836764 -0.0260002 0.1780582 0.9836764 -0.02600032 0.1780585 0.9836763 -0.04306429 0.174718 0.9836764 -0.04306405 0.1747175 0.9836764 -0.0597254 0.1697456 0.9836763 -0.05972558 0.1697459 0.9836763 -0.07582986 0.1631891 0.9836763 -0.07582992 0.1631892 0.9836763 -0.09122604 0.1551089 0.9836763 -0.09122604 0.1551089 0.9836763 -0.1057702 0.1455802 0.9836764 -0.1057698 0.1455799 0.9836764 -0.1193265 0.134692 0.9836763 -0.1193268 0.1346923 0.9836763 -0.1317696 0.1225466 0.9836764 -0.131769 0.1225462 0.9836764 -0.1429811 0.1092565 0.9836764 -0.1429815 0.1092568 0.9836764 -0.1528588 0.09494704 0.9836764 -0.1528588 0.09494704 0.9836764 -0.161309 0.07975059 0.9836764 -0.1613088 0.07975059 0.9836764 -0.1682527 0.06380993 0.9836767 -0.1682512 0.06380969 0.9836767 -0.1736243 0.04727298 0.9836765 -0.1736254 0.04727303 0.9836766 -0.1773773 0.03029489 0.9836768 -0.1773759 0.03029495 0.9836767 -0.1794717 0.01303452 0.9836764 -0.1794742 0.01303416 0.9836763 -0.1798942 -0.004348158 0.9836761 -0.1798952 -0.004348397 0.9836762 -0.1786358 -0.02169054 0.9836767 -0.178633 -0.02168953 0.9836767 -0.1757057 -0.03882938 0.9836768 -0.1757051 -0.03882908 0.9836768 -0.1711373 -0.05560582 0.9836767 -0.1711377 -0.055606 0.9836767 -0.1649722 -0.07186335 0.9836763 -0.1649739 -0.07186454 0.9836763 -0.1572678 -0.08745115 0.9836763 -0.1572681 -0.08745133 0.9836763 -0.1480936 -0.1022216 0.9836761 -0.1480944 -0.1022224 0.983676 -0.1375373 -0.1160381 0.9836762 -0.137537 -0.1160377 0.9836761 -0.1256951 -0.1287709 0.9836767 -0.1256935 -0.1287683 0.9836767 -0.1126793 -0.1402978 0.9836764 -0.1126803 -0.1402999 0.9836763 -0.09861314 -0.1505203 0.983676 -0.09861385 -0.1505222 0.983676 -0.08362627 -0.1593372 0.9836766 -0.08362531 -0.1593337 0.9836766 -0.06785678 -0.1666607 0.9836763 -0.06785708 -0.1666625 0.9836763 -0.05145514 -0.1724335 0.9836764 -0.05145508 -0.172433 0.9836764 -0.03457248 -0.1765941 0.9836762 -0.03457248 -0.176595 0.9836761 -0.01736676 -0.1791073 0.9836769 -0.01736718 -0.1791039 0.9836769 0 -0.1799439 0.9836769 0 -0.1799439 0.9836769 0.01736646 -0.1791039 0.9836763 0.01736748 -0.1791072 0.9836763 0.03457266 -0.176595 0.9836764 0.0345723 -0.1765942 0.9836765 0.05145496 -0.172433 0.9836764 0.05145525 -0.1724334 0.9836763 0.0678575 -0.1666624 0.9836766 0.06785643 -0.1666609 0.9836766 0.0836246 -0.159334 0.983676 0.08362692 -0.1593368 0.9836759 0.09861421 -0.150522 0.9836763 0.09861278 -0.1505206 0.9836764 0.1126807 -0.1402996 0.9836767 0.1126789 -0.1402981 0.9836767 0.125693 -0.1287688 0.9836761 0.1256955 -0.1287704 0.9836763 0.1375369 -0.1160378 0.9836761 0.1375374 -0.116038 0.9836761 0.1480945 -0.1022222 0.9836763 0.1480935 -0.1022217 0.9836763 0.1572681 -0.08745127 0.9836764 0.1572678 -0.08745115 0.9836763 0.164974 -0.07186412 0.9836766 0.164972 -0.07186377 0.9836768 0.1711377 -0.05560594 0.9836768 0.1711373 -0.05560594 0.9836768 0.175705 -0.0388292 0.9836767 0.1757057 -0.0388292 0.9836767 0.1786329 -0.02169018 0.9836763 0.1786358 -0.02168989 0.9836761 0.1798952 -0.004348158 0.9836764 0.1798942 -0.004348337 0.9836763 0.1794742 0.0130347 0.9836767 0.1794717 0.01303398 0.9836768 0.177376 0.03029465 0.9836766 0.1773772 0.03029519 0.9836764 0.1736253 0.04727321 0.9836767 0.1736245 0.0472728 0.9836767 0.1682513 0.06380939 0.9836764 0.1682525 0.06381022 0.9836765 0.1613089 0.07975059 0.9836764 0.161309 0.07975065 0.9836764 0.1528587 0.09494704 0.9836764 0.1528588 0.09494704 0.9836764 0.1429815 0.1092569 0.9836764 0.1429811 0.1092565 0.9836764 0.131769 0.1225461 0.9836763 0.1317695 0.1225467 0.9836763 0.1193268 0.1346923 0.9836764 0.1193265 0.134692 0.9836764 0.1057699 0.1455798 0.9836763 0.1057702 0.1455803 0.9836762 0.09122604 0.1551089 0.9836764 0.09122604 0.1551089 0.9836763 0.07582992 0.1631892 0.9836763 0.07582992 0.1631891 0.9836763 0.05972552 0.1697459 0.9836764 0.05972546 0.1697456 0.9836764 0.04306417 0.1747174 0.9836763 0.04306417 0.174718 0.9836764 0.02600026 0.1780585 0.9836764 0.02600026 0.1780582 0.9836763 0.008693814 0.1797364 0.9836764 0.008693814 0.1797366 0.9836763 -0.008693814 0.1797365 0.9836764 -0.008693814 0.1797364 -0.003120064 0.06824147 0.9976639 0.0010854 0.2393159 0.9709412 -0.003663003 0.2034555 0.9790773 0.001832067 0.1444876 0.9895048 0.001832067 0.1444886 0.9895048 0.0010854 0.2393131 0.9709419 -0.00154227 0.3319079 0.9433105 -0.002120316 0.3348781 0.942259 0.00171405 0.5069596 0.8619681 -0.003748714 0.4600623 0.8878788 0.00137484 0.4214004 0.9068737 0.00137484 0.4214016 0.9068731 0.00171405 0.5069575 0.8619693 -0.003540515 0.5877825 0.8090113 -6.63858e-4 0.5766804 0.8169696 4.6038e-4 0.6631063 0.7485253 4.6038e-4 0.6631239 0.7485095 -0.003377258 0.6825492 0.7308318 7.32214e-4 0.7945776 0.6071621 -0.003513038 0.7757056 0.6310852 0.001885235 0.7322682 0.6810137 0.001885235 0.732265 0.6810172 7.32214e-4 0.7945687 0.6071739 -9.10361e-4 0.8494685 0.5276386 -0.002548575 0.8544167 0.5195821 0.001532077 0.9350157 0.3546028 -0.003770112 0.9172048 0.3983979 0.001599848 0.8964257 0.4431914 0.001599848 0.8964247 0.4431932 0.001532077 0.9350149 0.3546048 -0.002737402 0.9648723 0.2627053 -0.001263141 0.9629165 0.2697966 8.5701e-4 0.985723 0.1683735 8.5701e-4 0.9857258 0.1683568 -0.003570318 0.9906799 0.1361641 3.14004e-4 0.9997079 -0.02416443 -0.003299057 0.9999945 0 0.001874685 0.9973712 0.07243794 0.001874685 0.9973716 0.07243198 3.14004e-4 0.999709 -0.02411949 -3.43224e-4 0.9927085 -0.1205388 -0.002912938 0.990682 -0.1361644 0.001285612 0.9510557 -0.3090171 -0.003727138 0.9629105 -0.2697949 0.001760542 0.9764395 -0.2157839 0.001760542 0.97644 -0.2157821 0.001285612 0.9510574 -0.3090116 -0.001998901 0.9167906 -0.3993632 -0.001799046 0.9172099 -0.3984002 0.001799941 0.8229835 -0.5680626 -0.003698348 0.8544136 -0.5195802 0.001189112 0.8739663 -0.4859849 0.001189112 0.8739656 -0.4859864 0.001799941 0.8229827 -0.5680636 -0.004110872 0.7643101 -0.6448358 -2.28731e-4 0.7757104 -0.6310891 1.60774e-4 0.6984226 -0.7156856 1.60774e-4 0.6985123 -0.7155981 -0.003213226 0.6825489 -0.7308328 9.74591e-4 0.5480144 -0.8364684 -0.003620147 0.5766772 -0.8169642 0.001856386 0.6261802 -0.7796762 0.001856386 0.6261863 -0.7796714 9.74591e-4 0.5480032 -0.8364756 -0.001324236 0.4647251 -0.8854539 -0.002270638 0.4600638 -0.887883 0.001660108 0.2859441 -0.9582449 -0.003763377 0.3348765 -0.9422546 0.001456856 0.3770966 -0.9261728 0.001456856 0.3770856 -0.9261773 0.001660108 0.2859427 -0.9582452 -0.003265678 0.192128 -0.9813644 -8.70867e-4 0.2034586 -0.9790831 5.99959e-4 0.09650844 -0.995332 5.99959e-4 0.09651345 -0.9953315 -0.003448724 0.06824082 -0.9976629 5.99906e-4 -0.09651345 -0.9953315 -0.003448724 -0.068241 -0.9976629 0.00188893 0 -0.9999981 0.00188893 0 -0.9999981 5.99906e-4 -0.09650844 -0.995332 -7.14085e-4 -0.192129 -0.9813694 -0.00267744 -0.2034574 -0.9790802 0.001456856 -0.3770966 -0.9261728 -0.003763377 -0.3348765 -0.9422546 0.001660108 -0.2859441 -0.9582449 0.001660108 -0.2859427 -0.9582452 0.001456856 -0.3770856 -0.9261773 -0.002484679 -0.4647241 -0.885452 -0.001449048 -0.4600645 -0.8878843 9.74591e-4 -0.5480032 -0.8364756 9.74591e-4 -0.5480144 -0.8364684 -0.003620147 -0.5766772 -0.8169642 0.001856386 -0.6261802 -0.7796762 0.001856386 -0.6261863 -0.7796714 -0.003213226 -0.6825489 -0.7308328 1.60779e-4 -0.6985123 -0.7155981 1.59722e-4 -0.7757104 -0.6310891 -0.02508854 -0.6982029 -0.7154604 -0.004110872 -0.7643101 -0.6448358 0.001189112 -0.8739663 -0.4859849 -0.003698348 -0.8544136 -0.5195802 0.001799941 -0.8229835 -0.5680626 0.001799941 -0.8229827 -0.5680636 0.001189112 -0.8739731 -0.4859727 -0.001766383 -0.9167898 -0.3993663 -0.001963257 -0.9172096 -0.3984001 0.001760542 -0.9764395 -0.2157839 -0.003727138 -0.9629105 -0.2697949 0.001285612 -0.9510557 -0.3090171 0.001285612 -0.9510574 -0.3090116 0.001760542 -0.97644 -0.2157821 -0.003822028 -0.9927018 -0.1205345 -4.49619e-4 -0.9906861 -0.136165 3.14004e-4 -0.9997071 -0.02420008 3.14004e-4 -0.9997079 -0.02416443 -0.003299057 -0.9999945 0 8.5701e-4 -0.9857258 0.1683568 -0.003570318 -0.9906799 0.1361641 0.001874685 -0.9973716 0.07243198 0.001874685 -0.9973712 0.07243794 8.5701e-4 -0.985723 0.1683735 -0.001113355 -0.9648752 0.2627062 -0.002412915 -0.9629145 0.269796 0.001599848 -0.8964257 0.4431914 -0.003770112 -0.9172048 0.3983979 0.001532077 -0.9350157 0.3546028 0.001532077 -0.9350149 0.3546048 0.001599848 -0.8964247 0.4431932 -0.002997756 -0.849465 0.5276364 -0.001070737 -0.8544191 0.5195835 7.32214e-4 -0.7945687 0.6071739 7.32214e-4 -0.7945776 0.6071621 -0.003513038 -0.7757057 0.6310852 4.6038e-4 -0.6631239 0.7485096 -0.003377258 -0.6825492 0.7308318 0.001885235 -0.732265 0.6810172 0.001885235 -0.7322682 0.6810137 4.6038e-4 -0.6631063 0.7485253 -5.24791e-4 -0.587786 0.8090163 -0.002798914 -0.5766783 0.8169665 0.00137484 -0.4214004 0.9068737 -0.003748714 -0.4600623 0.8878788 0.00171405 -0.5069596 0.8619681 0.00171405 -0.5069575 0.8619694 0.00137484 -0.4214016 0.9068731 -0.002237915 -0.3319075 0.9433093 -0.001627802 -0.3348784 0.94226 0.0010854 -0.2393131 0.9709419 0.0010854 -0.2393159 0.9709411 -0.003663063 -0.203455 0.9790774 0.001831948 -0.1444876 0.9895049 0.001831948 -0.1444886 0.9895048 -0.003120064 -0.06824165 0.997664 0 -0.04831355 0.9988322 0 0.04831355 0.9988322 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.7057583 0.6843128 0.183361 -0.7057582 0.6843128 0.1833609 -0.7057582 0.6420766 0.2994042 -0.7057589 0.6420754 0.2994053 -0.7057588 0.5803295 0.4063522 -0.7057587 0.5803299 0.4063519 -0.7057587 0.5009515 0.5009515 -0.7057586 0.5009514 0.5009514 -0.7057586 0.4063509 0.5803307 -0.705758 0.4063523 0.5803304 -0.7057582 0.2994058 0.642076 -0.7057582 0.2994056 0.6420761 -0.7057582 0.1833611 0.6843128 -0.7057583 0.1833609 0.6843127 -0.7057583 0.06174612 0.7057567 -0.7057588 0.0617451 0.7057564 -0.7057588 -0.06174606 0.7057564 -0.7057583 -0.06174516 0.7057569 -0.7057583 -0.183361 0.6843128 -0.7057583 -0.1833609 0.6843128 -0.7057582 -0.2994058 0.642076 -0.7057581 -0.2994056 0.6420761 -0.7057581 -0.4063512 0.5803312 -0.7057587 -0.4063519 0.5803299 -0.7057587 -0.5009515 0.5009515 -0.7057586 -0.5009514 0.5009514 -0.7057587 -0.5803297 0.4063522 -0.7057589 -0.5803298 0.4063519 -0.7057588 -0.6420761 0.299404 -0.7057582 -0.6420761 0.2994056 -0.7057582 -0.6843128 0.1833611 -0.7057583 -0.6843128 0.1833609 -0.7057583 -0.7057567 0.06174612 -0.7057588 -0.7057564 0.0617451 -0.7057588 -0.7057564 -0.06174606 -0.7057583 -0.7057569 -0.06174516 -0.7057583 -0.6843128 -0.183361 -0.7057585 -0.6843125 -0.1833613 -0.7057586 -0.6420764 -0.2994041 -0.7057588 -0.6420757 -0.2994047 -0.7057588 -0.5803295 -0.4063522 -0.7057587 -0.5803299 -0.4063519 -0.7057587 -0.5009515 -0.5009515 -0.7057586 -0.5009514 -0.5009514 -0.7057586 -0.4063509 -0.5803307 -0.705758 -0.4063523 -0.5803304 -0.7057582 -0.2994058 -0.642076 -0.7057582 -0.2994056 -0.6420761 -0.7057582 -0.1833611 -0.6843128 -0.7057583 -0.1833609 -0.6843127 -0.7057583 -0.06174486 -0.7057569 -0.7057582 -0.06174516 -0.705757 -0.7057582 0.0617448 -0.705757 -0.7057583 0.06174516 -0.7057569 -0.7057583 0.183361 -0.6843128 -0.7057583 0.1833609 -0.6843128 -0.7057582 0.2994058 -0.642076 -0.7057581 0.2994056 -0.6420761 -0.7057581 0.4063512 -0.5803312 -0.7057587 0.4063519 -0.5803299 -0.7057587 0.5009515 -0.5009515 -0.7057586 0.5009514 -0.5009514 -0.7057587 0.5803297 -0.4063522 -0.7057589 0.5803298 -0.4063519 -0.7057588 0.6420761 -0.299404 -0.7057585 0.6420761 -0.2994049 -0.7057583 0.6843127 -0.183361 -0.7057583 0.6843127 -0.1833613 -0.7057583 0.7057567 -0.06174612 -0.7057588 0.7057564 -0.0617451 -0.7057588 0.7057564 0.06174606 -0.7057583 0.7057569 0.06174516 -0.9992098 5.61423e-4 0.03974241 -0.999379 0 0.03523588 -0.9985391 -0.002336084 0.05398291 -0.9985392 -0.002336084 0.05398291 -0.9992337 -0.005005359 0.0388211 -0.9991952 -0.0051952 0.03977471 -0.9993906 -0.008853793 0.03376346 -0.9986446 -0.01121658 0.05082422 -0.9986447 -0.0112167 0.05082422 -0.9987341 -0.0232855 0.04458773 -0.9990748 -0.01641041 0.03975015 -0.9992458 -0.01457262 0.03599447 -0.9985194 -0.01628011 0.051903 -0.9985194 -0.01628011 0.051903 -0.998734 -0.02328443 0.04458826 -0.9993937 -0.01708447 0.03033518 -0.9985529 -0.0290234 0.04527664 -0.9985527 -0.02902317 0.04527682 -0.9993476 -0.0216003 0.02894258 -0.9990004 -0.02731168 0.0353862 -0.9993572 -0.02494072 0.02575331 -0.9987998 -0.0331465 0.03605997 -0.9987998 -0.03314501 0.03606122 -0.9989153 -0.03925102 0.02505016 -0.9989855 -0.03569149 0.02745884 -0.9993487 -0.02821493 0.02250069 -0.9984428 -0.04109817 0.03772312 -0.9984428 -0.0410977 0.03772366 -0.9989153 -0.03924751 0.02505522 -0.9993784 -0.0301488 0.01827627 -0.9984836 -0.04880034 0.02547669 -0.9984836 -0.04880017 0.02547699 -0.9993438 -0.03312122 0.01466172 -0.9989041 -0.04317128 0.01807975 -0.998852 -0.04555439 0.01481926 -0.9993761 -0.03385907 0.01004922 -0.9985067 -0.05319386 0.0124439 -0.9985067 -0.05319392 0.01244354 -0.9993501 -0.03558361 0.005752801 -0.9989684 -0.04495006 0.006446957 -0.9993516 -0.03598701 0.001154124 -0.9988358 -0.04816591 0.002702474 -0.9988358 -0.04816573 0.002704203 -0.9993492 -0.03590625 -0.003463864 -0.9984259 -0.0560646 -0.001625359 -0.9984258 -0.0560646 -0.001625061 -0.9993626 -0.03480285 -0.007943451 -0.9989222 -0.04546368 -0.009363412 -0.9989368 -0.04579079 -0.005319952 -0.9987876 -0.04577118 -0.01812154 -0.9987877 -0.04577112 -0.01812165 -0.999347 -0.03391081 -0.01247954 -0.9984561 -0.05322784 -0.01588171 -0.9984562 -0.05322772 -0.01588225 -0.9989845 -0.04024583 -0.02025669 -0.9993233 -0.03261321 -0.01701426 -0.9985678 -0.0454548 -0.02821856 -0.9985678 -0.04545491 -0.02821838 -0.9994035 -0.02832478 -0.01975816 -0.9987465 -0.04005861 -0.03001159 -0.999277 -0.0281459 -0.02556133 -0.999093 -0.03175121 -0.02837234 -0.9987465 -0.04005932 -0.03001075 -0.998719 -0.03142881 -0.03965491 -0.998719 -0.03142952 -0.03965437 -0.9993892 -0.02265292 -0.02660948 -0.9984737 -0.03791981 -0.04015618 -0.9984737 -0.03791964 -0.04015642 -0.9991735 -0.02236539 -0.03394311 -0.9992939 -0.02049714 -0.03148913 -0.9985824 -0.02530449 -0.04682892 -0.9985823 -0.02530521 -0.0468285 -0.9993877 -0.01518166 -0.03152507 -0.9986165 -0.02096158 -0.04822587 -0.9992951 -0.01182955 -0.03562891 -0.9991304 -0.01343816 -0.03946912 -0.9986165 -0.0209611 -0.04822605 -0.9987024 -0.007951378 -0.05030018 -0.9987025 -0.007951498 -0.05030018 -0.9993962 -0.006641864 -0.03410458 -0.9985298 -0.01310247 -0.05259752 -0.9985298 -0.01310271 -0.05259746 -0.9991197 -0.002945423 -0.04184752 -0.9992622 -0.002460896 -0.03833132 -0.9988735 -6.70765e-4 -0.04744768 -0.9988716 0.002053439 -0.04744762 -0.9993411 0.002325356 -0.03622007 -0.9984561 0.007194161 -0.05507892 -0.9984561 0.007193684 -0.05507898 -0.9993695 0.006787657 -0.03485321 -0.9988493 0.01033568 -0.04683244 -0.9993247 0.01157808 -0.03487139 -0.9989569 0.01366633 -0.04357004 -0.9988493 0.01033574 -0.04683244 -0.9987223 0.02339255 -0.04479479 -0.9987223 0.02339231 -0.04479491 -0.9993809 0.01526492 -0.03169798 -0.9983677 0.02179467 -0.05279165 -0.9983677 0.02179455 -0.05279165 -0.9991531 0.02220439 -0.03463912 -0.9993035 0.02035862 -0.03127622 -0.9985774 0.03257942 -0.04221087 -0.9985774 0.03257912 -0.04221105 -0.9993888 0.02266067 -0.02661859 -0.9986208 0.0355311 -0.03865414 -0.9992589 0.02849584 -0.02587914 -0.999133 0.03067058 -0.02815228 -0.9986208 0.03553044 -0.0386548 -0.9986788 0.04331374 -0.02765077 -0.9986789 0.04331368 -0.02765089 -0.9994112 0.02814155 -0.01963037 -0.9985959 0.0419867 -0.0323019 -0.9985958 0.04198646 -0.0323022 -0.9992249 0.03489607 -0.01821798 -0.9992315 0.03475421 -0.01813119 -0.9985615 0.04945498 -0.02071148 -0.9985616 0.04945486 -0.02071171 -0.999381 0.03301459 -0.01214969 -0.9986835 0.04878002 -0.01586842 -0.9992793 0.03700715 -0.008446574 -0.9991583 0.03994488 -0.009344398 -0.9986835 0.04878026 -0.01586765 -0.9985982 0.05284827 -0.002965569 -0.998598 0.05284827 -0.002965688 -0.9993907 0.03473967 -0.00335133 -0.9985814 0.05270814 -0.007559776 -0.9985814 0.0527082 -0.007559299 -0.999162 0.04091155 0.001186192 -0.999236 0.03906202 0.00125271 -0.9985889 0.05275225 0.006128847 -0.9985889 0.05275231 0.006128668 -0.9994028 0.03410917 0.005514442 -0.998627 0.05130732 0.01056689 -0.9992048 0.03822171 0.01134407 -0.9992391 0.03737658 0.01115232 -0.998627 0.0513072 0.01056718 -0.9993832 0.03211128 0.01421463 -0.9985475 0.05009549 0.01983374 -0.9985474 0.05009555 0.01983368 -0.9987974 0.03923749 0.02939814 -0.9991002 0.03603434 0.02237015 -0.9993243 0.03143054 0.01905328 -0.9984908 0.04905694 0.02469205 -0.9984906 0.0490573 0.0246914 -0.9987974 0.03923845 0.02939671 -0.9993854 0.02740502 0.02185481 -0.9984586 0.04138785 0.03698337 -0.9984585 0.04138779 0.03698337 -0.9993017 0.02599275 0.02683967 -0.999015 0.03046542 0.03226232 -0.9993924 0.02084696 0.02793318 -0.9988031 0.03038138 0.03833234 -0.9988031 0.03038251 0.03833144 -0.9988152 0.01939994 0.04462927 -0.9989764 0.0215047 0.03979587 -0.9993519 0.01766312 0.03136265 -0.998549 0.02962875 0.04496598 -0.9985492 0.02962845 0.04496622 -0.9988152 0.01939857 0.04462993 -0.9993562 0.01346325 0.03325426 -0.9985238 0.0175063 0.05141812 -0.9985237 0.01750683 0.05141794 -0.999318 0.009366869 0.03572022 -0.9990499 0.01053482 0.04229038 -0.9984449 0.003914177 0.05560976 -0.9984449 0.003913938 0.05560976 -0.9993776 0.004511177 0.03498834 -0.9988019 0.007641196 0.04833644 -0.998802 0.007641673 0.04833638 -0.04703581 0.2533753 0.9662238 -0.0470376 0.1277384 0.9906919 -0.04702669 0.1277346 0.9906929 -0.04698264 0.3748515 0.9258937 -0.04698461 0.3748511 0.9258937 -0.04698538 0.2533735 0.9662268 -0.0469793 0.4901756 0.8703567 -0.04699087 0.4901745 0.8703567 -0.04700022 0.3748522 0.9258924 -0.04703086 0.6949126 0.7175546 -0.04703122 0.5974644 0.8005151 -0.04700767 0.5974485 0.8005284 -0.04702508 0.5974472 0.8005284 -0.04702609 0.4901793 0.870352 -0.04703015 0.7809664 0.6228 -0.04703944 0.780965 0.6228008 -0.04703879 0.6949127 0.717554 -0.04706287 0.9134008 0.4043318 -0.0470609 0.8541945 0.5178195 -0.04706811 0.8541948 0.5178185 -0.04702079 0.8541985 0.5178166 -0.04701811 0.7809662 0.622801 -0.04700297 0.9576076 0.2842151 -0.04699164 0.9576138 0.2841962 -0.0469917 0.9134024 0.4043363 -0.04698526 0.9860913 0.1594249 -0.04705363 0.9860867 0.1594329 -0.04705196 0.9576062 0.2842121 -0.04697179 0.9738512 -0.2222781 -0.04697161 0.9942808 -0.09591376 -0.04708588 0.9942748 -0.09591883 -0.04708331 0.9983777 0.03201824 -0.04709243 0.9983773 0.03201645 -0.04707896 0.998378 0.03201556 -0.04707497 0.9860883 0.1594172 -0.04697757 0.9738515 -0.2222756 -0.04703873 0.9738494 -0.222272 -0.04704302 0.9374287 -0.3449848 -0.04702311 0.9374287 -0.3449871 -0.04694825 0.9374345 -0.3449819 -0.04695332 0.885621 -0.462029 -0.04696929 0.8856207 -0.4620279 -0.04696834 0.8856209 -0.4620276 -0.04697132 0.819267 -0.5714852 -0.04696142 0.8192677 -0.5714851 -0.04696476 0.7394537 -0.6715672 -0.04702121 0.7394613 -0.6715549 -0.04706132 0.7394583 -0.6715554 -0.04705852 0.6475089 -0.7606037 -0.04705476 0.6475087 -0.760604 -0.04702007 0.6475126 -0.7606027 -0.04702109 0.5449334 -0.8371599 -0.0469861 0.5449328 -0.8371623 -0.04700475 0.5449233 -0.8371673 -0.04700171 0.4334048 -0.8999729 -0.04700291 0.4334046 -0.8999729 -0.04699987 0.314759 -0.9480073 -0.04700815 0.3147603 -0.9480065 -0.04702258 0.3147591 -0.9480062 -0.04702126 0.190947 -0.9804735 -0.04700809 0.1909461 -0.9804744 -0.04700332 0.1909468 -0.9804744 -0.04700237 0.06399911 -0.9968425 -0.0470106 0.06399869 -0.9968421 -0.0470106 -0.06399941 -0.996842 -0.04699599 -0.06399875 -0.9968428 -0.04698449 -0.1909469 -0.9804753 -0.04699599 -0.1909453 -0.980475 -0.04702126 -0.190947 -0.9804735 -0.04702258 -0.3147591 -0.9480062 -0.04700827 -0.3147603 -0.9480065 -0.04699987 -0.314759 -0.9480073 -0.04700291 -0.4334048 -0.8999729 -0.04700171 -0.4334046 -0.8999729 -0.04705476 -0.6475087 -0.760604 -0.04702007 -0.6475126 -0.7606027 -0.04702109 -0.5449319 -0.8371609 -0.04698413 -0.5449343 -0.8371613 -0.04700475 -0.5449234 -0.8371673 -0.04696142 -0.8192674 -0.5714855 -0.04696476 -0.7394537 -0.6715673 -0.04702121 -0.7394613 -0.6715549 -0.04706096 -0.7394583 -0.6715554 -0.04705852 -0.6475089 -0.7606037 -0.04696905 -0.8856207 -0.4620279 -0.04696828 -0.8856209 -0.4620277 -0.04697132 -0.8192672 -0.5714848 -0.04697436 -0.9374325 -0.3449836 -0.04694849 -0.9374345 -0.3449819 -0.04695332 -0.885621 -0.4620291 -0.04697161 -0.9942807 -0.09591454 -0.04697179 -0.9738512 -0.2222781 -0.0469737 -0.9738513 -0.2222773 -0.04694247 -0.9738531 -0.2222759 -0.04695045 -0.9374327 -0.3449864 -0.04701852 -0.9983809 0.03201174 -0.04698473 -0.9983823 0.03201842 -0.04698771 -0.99428 -0.09591364 -0.04698526 -0.9860913 0.1594249 -0.04707479 -0.9860883 0.1594172 -0.04707896 -0.998378 0.03201556 -0.0469917 -0.9134038 0.4043331 -0.04699164 -0.9576138 0.2841962 -0.04700297 -0.9576076 0.2842151 -0.04705172 -0.9576062 0.2842121 -0.04705363 -0.9860867 0.1594329 -0.04706811 -0.8541948 0.5178185 -0.0470609 -0.8541945 0.5178195 -0.04706287 -0.9133993 0.404335 -0.04703122 -0.5974644 0.8005151 -0.04703086 -0.6949129 0.7175543 -0.04703879 -0.6949124 0.7175542 -0.04703956 -0.780965 0.6228008 -0.04703015 -0.7809664 0.6228 -0.04701799 -0.7809662 0.622801 -0.04702061 -0.8541985 0.5178166 -0.0470066 -0.5974477 0.800529 -0.04702496 -0.597448 0.8005278 -0.04702609 -0.4901793 0.8703521 -0.0469793 -0.4901756 0.8703567 -0.04699069 -0.4901745 0.8703567 -0.04700022 -0.3748522 0.9258924 -0.04698252 -0.3748515 0.9258937 -0.04698449 -0.3748511 0.9258937 -0.04698538 -0.2533759 0.9662262 -0.04706084 -0.2533714 0.9662237 -0.04701447 0.1277354 0.9906934 -0.04708242 0.03201925 0.9983777 0.2700611 0 0.9628432 -0.04708242 -0.03201925 0.9983777 -0.04701447 -0.1277347 0.9906934 -0.04702872 -0.1277353 0.9906927 -0.04705023 -0.1277427 0.9906907 -0.9836742 -0.03440046 -0.1766403 -0.9836735 -0.03440159 -0.1766443 -0.9836734 -0.05670762 -0.1707945 -0.9836736 -0.05670726 -0.1707937 -0.9836737 -0.07808202 -0.1621394 -0.9836733 -0.07808321 -0.1621414 -0.9836733 -0.09817624 -0.150825 -0.9836731 -0.09817689 -0.1508258 -0.983673 -0.1166584 -0.1370335 -0.9836736 -0.1166558 -0.137031 -0.9836736 -0.1332219 -0.1209881 -0.9836741 -0.1332201 -0.1209867 -0.9836741 -0.1475971 -0.1029576 -0.9836739 -0.1475983 -0.1029583 -0.9836739 -0.1595524 -0.08323866 -0.9836732 -0.1595559 -0.08324009 -0.9836733 -0.1688905 -0.06215327 -0.9836737 -0.1688876 -0.0621525 -0.9836737 -0.1754491 -0.04004454 -0.9836742 -0.1754465 -0.04004418 -0.9836742 -0.1791269 -0.01728075 -0.9836736 -0.1791297 -0.01728081 -0.9836737 -0.1798692 0.005768358 -0.9836734 -0.1798703 0.005768537 -0.9836734 -0.1776558 0.02872157 -0.983673 -0.1776583 0.02872222 -0.983673 -0.1725268 0.05120515 -0.9836724 -0.1725296 0.05120623 -0.9836724 -0.1645648 0.07284814 -0.9836734 -0.1645607 0.07284587 -0.9836733 -0.1538938 0.09329152 -0.9836748 -0.1538878 0.09328716 -0.9836748 -0.1406949 0.1122005 -0.9836744 -0.1406961 0.1122016 -0.9836742 -0.1251941 0.1292727 -0.9836735 -0.1251965 0.1292755 -0.9836736 -0.1076369 0.1442238 -0.9836729 -0.1076394 0.1442278 -0.9836727 -0.0883125 0.1568083 -0.9836734 -0.08831107 0.1568052 -0.9836734 -0.06753426 0.1668109 -0.9836741 -0.06753301 0.1668068 -0.9836741 -0.04564732 0.1740733 -0.9836739 -0.04564756 0.1740746 -0.9836741 -0.02301257 0.1784821 -0.9836739 -0.02301263 0.1784831 -0.9836739 0 0.1799607 -0.9836739 0 0.1799607 -0.9836736 0.02301299 0.1784844 -0.9836741 0.02301251 0.1784821 -0.9836739 0.04564768 0.1740746 -0.9836742 0.04564726 0.1740733 -0.9836742 0.06753265 0.1668069 -0.9836733 0.06753462 0.1668108 -0.9836734 0.08831083 0.1568053 -0.9836727 0.08831274 0.1568081 -0.9836727 0.1076397 0.1442276 -0.9836736 0.1076366 0.1442241 -0.9836736 0.1251962 0.1292757 -0.983673 0.1251986 0.1292777 -0.983673 0.1407024 0.1122057 -0.9836747 0.1406949 0.1122007 -0.9836748 0.1538875 0.0932877 -0.9836735 0.1538941 0.09329098 -0.9836733 0.1645604 0.07284623 -0.9836725 0.1645649 0.07284778 -0.9836724 0.1725298 0.05120599 -0.9836729 0.1725268 0.05120539 -0.983673 0.1776584 0.02872198 -0.9836735 0.1776558 0.0287218 -0.9836734 0.1798703 0.005768418 -0.9836736 0.1798692 0.005768477 -0.9836736 0.1791297 -0.01728105 -0.9836742 0.1791269 -0.01728051 -0.9836742 0.1754465 -0.04004395 -0.9836737 0.1754491 -0.04004478 -0.9836738 0.1688877 -0.06215226 -0.9836732 0.1688904 -0.06215351 -0.9836733 0.1595557 -0.08324038 -0.9836738 0.1595526 -0.08323836 -0.9836739 0.1475986 -0.1029578 -0.9836727 0.1476036 -0.102962 -0.9836727 0.1332251 -0.1209918 -0.9836736 0.1332218 -0.1209882 -0.9836737 0.1166561 -0.1370308 -0.983673 0.1166581 -0.1370336 -0.9836731 0.09817683 -0.1508259 -0.9836733 0.0981763 -0.1508249 -0.9836733 0.07808303 -0.1621415 -0.9836738 0.0780822 -0.1621393 -0.9836736 0.05670732 -0.1707937 -0.9836735 0.05670756 -0.1707945 -0.9836733 0.03440123 -0.1766443 -0.9836742 0.03440082 -0.1766402 -0.9836742 0.01152998 -0.1795891 -0.9836739 0.01152992 -0.1795905 -0.9836739 -0.01153004 -0.1795905 -0.9836742 -0.0115298 -0.1795891 -0.9380543 -0.06623411 -0.3400987 -0.9380557 -0.06623303 -0.3400951 -0.9380552 -0.1091808 -0.3288344 -0.9380566 -0.1091793 -0.3288308 -0.9380567 -0.1503325 -0.3121694 -0.9380568 -0.1503324 -0.3121692 -0.9380568 -0.1890174 -0.2903819 -0.9380557 -0.1890195 -0.2903845 -0.9380559 -0.2246015 -0.2638283 -0.9380592 -0.224595 -0.2638219 -0.9380599 -0.2564861 -0.2329347 -0.9380545 -0.2564978 -0.2329435 -0.9380538 -0.2841812 -0.1982325 -0.9380549 -0.2841785 -0.1982311 -0.9380549 -0.3071953 -0.160263 -0.9380585 -0.307186 -0.1602593 -0.9380587 -0.3251571 -0.1196613 -0.9380567 -0.3251623 -0.1196628 -0.9380565 -0.3377951 -0.07709962 -0.9380519 -0.3378078 -0.07710134 -0.9380518 -0.344894 -0.03327095 -0.9380588 -0.3448751 -0.03327089 -0.938059 -0.3462976 0.01110476 -0.938055 -0.3463084 0.01110607 -0.9380547 -0.3420457 0.05529946 -0.9380586 -0.3420358 0.05529683 -0.9380585 -0.3321561 0.09858202 -0.9380574 -0.3321592 0.09858328 -0.9380573 -0.3168259 0.1402493 -0.9380557 -0.3168298 0.1402515 -0.9380556 -0.2962937 0.1796151 -0.9380547 -0.296296 0.1796168 -0.9380548 -0.2708941 0.2160313 -0.9380558 -0.2708922 0.2160294 -0.9380562 -0.2410418 0.248896 -0.9380607 -0.2410342 0.2488866 -0.9380603 -0.2072289 0.2776672 -0.938058 -0.2072321 0.2776724 -0.9380581 -0.1700227 0.301893 -0.9380571 -0.1700236 0.3018952 -0.9380573 -0.1300235 0.3211584 -0.938054 -0.1300259 0.3211665 -0.9380539 -0.08788794 0.3351576 -0.9380563 -0.08788686 0.335151 -0.9380566 -0.04430764 0.3436376 -0.9380536 -0.04430794 0.3436454 -0.9380544 0 0.3464882 -0.9380543 0 0.3464882 -0.9380545 0.04430836 0.3436431 -0.9380565 0.04430711 0.3436377 -0.9380564 0.08788627 0.3351511 -0.9380539 0.08788853 0.3351575 -0.938054 0.1300267 0.3211663 -0.9380571 0.1300228 0.3211587 -0.9380572 0.1700237 0.301895 -0.938058 0.1700225 0.3018932 -0.9380581 0.2072325 0.2776721 -0.9380602 0.2072286 0.2776676 -0.9380608 0.2410334 0.2488874 -0.9380608 0.2410332 0.2488871 -0.9380609 0.2708811 0.216021 -0.9380549 0.2708948 0.21603 -0.9380548 0.296296 0.1796165 -0.9380556 0.2962935 0.1796153 -0.9380556 0.31683 0.1402512 -0.9380573 0.3168258 0.1402497 -0.9380573 0.3321593 0.09858298 -0.9380586 0.3321561 0.09858232 -0.9380586 0.3420355 0.05529779 -0.9380547 0.3420459 0.0552985 -0.938055 0.3463085 0.01110512 -0.9380589 0.3462976 0.01110577 -0.9380587 0.3448751 -0.03326916 -0.9380519 0.3448938 -0.03327268 -0.9380519 0.3378075 -0.07710248 -0.9380566 0.3377954 -0.07709854 -0.9380567 0.3251622 -0.1196632 -0.9380586 0.3251573 -0.1196609 -0.9380585 0.3071863 -0.1602584 -0.9380548 0.3071947 -0.1602637 -0.9380549 0.2841786 -0.1982308 -0.938059 0.28417 -0.1982235 -0.9380593 0.256488 -0.2329349 -0.938055 0.2564958 -0.2329434 -0.9380551 0.2246022 -0.2638307 -0.9380558 0.2246008 -0.2638288 -0.9380558 0.1890192 -0.2903847 -0.938057 0.1890177 -0.2903818 -0.9380568 0.1503324 -0.3121691 -0.9380567 0.1503325 -0.3121694 -0.9380566 0.1091796 -0.3288307 -0.9380551 0.1091805 -0.3288345 -0.9380558 0.06623339 -0.340095 -0.9380543 0.06623381 -0.3400988 -0.9380543 0.02219909 -0.3457764 -0.9380561 0.02219921 -0.3457714 -0.9380562 -0.02219873 -0.3457714 -0.9380543 -0.02219951 -0.3457763 -0.8641451 -0.09619933 -0.4939626 -0.8641466 -0.09619855 -0.4939599 -0.8641478 -0.1585736 -0.4776013 -0.8641407 -0.1585786 -0.4776125 -0.8641391 -0.2183546 -0.4534147 -0.8641501 -0.2183446 -0.4533984 -0.8641502 -0.2745319 -0.4217543 -0.864153 -0.2745288 -0.4217505 -0.8641532 -0.3262057 -0.3831826 -0.8641351 -0.3262284 -0.3832044 -0.864134 -0.372555 -0.338342 -0.86415 -0.3725327 -0.3383256 -0.864151 -0.412737 -0.2879084 -0.8641471 -0.4127428 -0.2879117 -0.8641468 -0.4461724 -0.2327671 -0.8641467 -0.4461726 -0.2327672 -0.8641474 -0.4722734 -0.1738017 -0.8641478 -0.4722729 -0.1738016 -0.8641479 -0.4906207 -0.1119807 -0.8641501 -0.4906168 -0.1119803 -0.8641499 -0.5009092 -0.04832166 -0.8641481 -0.5009123 -0.04832166 -0.8641474 -0.5029804 0.01612871 -0.8641448 -0.5029847 0.01612925 -0.8641447 -0.4967927 0.08031713 -0.8641408 -0.4967994 0.08031886 -0.864141 -0.4824494 0.1431887 -0.8641442 -0.4824444 0.1431867 -0.8641446 -0.4601725 0.2037044 -0.8641431 -0.4601745 0.2037054 -0.8641427 -0.4303472 0.2608804 -0.8641487 -0.430339 0.2608743 -0.8641483 -0.3934477 0.3137623 -0.864137 -0.3934616 0.3137758 -0.8641371 -0.3501063 0.3615144 -0.8641374 -0.3501058 0.3615138 -0.8641381 -0.301002 0.4033152 -0.8641414 -0.3009991 0.4033104 -0.8641414 -0.2469529 0.4384905 -0.8641409 -0.2469533 0.4384914 -0.8641409 -0.1888531 0.4664709 -0.864148 -0.1888496 0.466459 -0.8641481 -0.1276482 0.4867792 -0.8641443 -0.1276492 0.4867857 -0.8641441 -0.06435418 0.4991126 -0.8641439 -0.06435418 0.4991129 -0.8641433 0 0.5032459 -0.8641432 0 0.5032459 -0.864144 0.06435424 0.499113 -0.8641442 0.06435418 0.4991127 -0.8641443 0.1276499 0.4867856 -0.8641481 0.1276475 0.4867794 -0.864148 0.1888485 0.4664595 -0.8641408 0.1888542 0.4664704 -0.8641408 0.2469533 0.4384912 -0.8641414 0.2469529 0.4384906 -0.8641414 0.3009986 0.4033106 -0.8641381 0.3010025 0.4033149 -0.8641375 0.3501058 0.3615139 -0.8641371 0.3501064 0.3615143 -0.8641368 0.3934629 0.3137744 -0.8641482 0.3934465 0.3137638 -0.8641486 0.4303386 0.2608752 -0.8641428 0.4303477 0.2608796 -0.8641432 0.4601747 0.2037053 -0.8641446 0.4601724 0.2037045 -0.8641442 0.4824442 0.1431872 -0.864141 0.4824495 0.1431882 -0.8641408 0.4967995 0.08031821 -0.8641448 0.4967927 0.08031779 -0.8641449 0.5029847 0.01612883 -0.8641473 0.5029804 0.01612913 -0.8641481 0.5009122 -0.04832196 -0.8641499 0.5009092 -0.04832136 -0.8641502 0.4906169 -0.1119799 -0.8641479 0.4906206 -0.1119811 -0.8641477 0.4722728 -0.1738015 -0.8641474 0.4722734 -0.1738017 -0.8641467 0.4461726 -0.2327672 -0.8641467 0.4461724 -0.2327671 -0.8641471 0.4127423 -0.2879121 -0.864151 0.4127375 -0.287908 -0.86415 0.3725345 -0.3383235 -0.864144 0.3725415 -0.3383312 -0.8641439 0.3262162 -0.383195 -0.8641532 0.3262072 -0.3831818 -0.864153 0.2745292 -0.4217502 -0.8641502 0.2745314 -0.4217544 -0.8641502 0.2183463 -0.4533975 -0.8641392 0.2183528 -0.4534153 -0.8641406 0.1585775 -0.477613 -0.8641477 0.1585748 -0.477601 -0.8641466 0.09619885 -0.4939599 -0.8641451 0.09619909 -0.4939625 -0.864145 0.03224223 -0.502209 -0.8641443 0.03224223 -0.5022101 -0.8641443 -0.03224235 -0.5022101 -0.864145 -0.03224211 -0.502209 -0.7649188 -0.1231298 -0.6322486 -0.764913 -0.1231319 -0.6322551 -0.7649104 -0.2029733 -0.6113215 -0.7649224 -0.2029672 -0.6113084 -0.7649224 -0.2794743 -0.5803343 -0.7649092 -0.2794828 -0.5803476 -0.7649078 -0.351402 -0.5398449 -0.7649176 -0.3513947 -0.5398361 -0.7649181 -0.4175403 -0.4904694 -0.7649219 -0.4175372 -0.4904665 -0.7649219 -0.4768297 -0.4330451 -0.7648986 -0.4768522 -0.4330613 -0.7648978 -0.5283166 -0.3685281 -0.7649217 -0.5282915 -0.3685145 -0.7649223 -0.5710781 -0.2979323 -0.7649079 -0.5710942 -0.2979385 -0.7649078 -0.6045047 -0.2224637 -0.7649115 -0.6045005 -0.2224627 -0.7649124 -0.6279844 -0.1433344 -0.7649026 -0.6279959 -0.1433357 -0.7649032 -0.6411689 -0.06185072 -0.7649142 -0.6411558 -0.06185096 -0.7649146 -0.6438009 0.02064502 -0.7649202 -0.6437942 0.02064406 -0.7649201 -0.6358688 0.102802 -0.7649227 -0.6358656 0.1028012 -0.764923 -0.6174986 0.1832708 -0.7649234 -0.6174982 0.1832706 -0.7649223 -0.5889941 0.2607296 -0.7649211 -0.5889954 0.2607303 -0.7649213 -0.5508183 0.3339082 -0.764903 -0.5508356 0.3339216 -0.7649037 -0.5036114 0.4016193 -0.7649318 -0.5035876 0.4015954 -0.7649315 -0.448098 0.4626966 -0.7649188 -0.4481072 0.4627086 -0.7649177 -0.3852595 0.516213 -0.7649198 -0.3852584 0.516211 -0.7649204 -0.3160833 0.5612381 -0.7649186 -0.316084 0.56124 -0.7649199 -0.2417197 0.5970503 -0.7649142 -0.2417215 0.5970569 -0.7649129 -0.1633871 0.6230674 -0.7649129 -0.1633871 0.6230674 -0.7649112 -0.08236962 0.6388475 -0.7649229 -0.08236938 0.6388335 -0.7649224 0 0.6441224 -0.7649224 0 0.6441224 -0.764923 0.08236783 0.6388337 -0.7649113 0.08237117 0.6388472 -0.7649129 0.1633871 0.6230674 -0.7649129 0.1633871 0.6230674 -0.7649142 0.2417223 0.5970567 -0.76492 0.2417189 0.5970505 -0.7649186 0.3160843 0.56124 -0.7649205 0.316083 0.5612381 -0.7649198 0.385258 0.5162111 -0.7649177 0.3852597 0.5162128 -0.7649187 0.4481085 0.4627075 -0.7649314 0.4480968 0.4626979 -0.764932 0.5035851 0.4015983 -0.7649039 0.5036135 0.4016161 -0.7649028 0.5508369 0.3339194 -0.7649212 0.5508171 0.3339104 -0.764921 0.5889955 0.2607302 -0.7649223 0.5889941 0.2607297 -0.7649234 0.6174982 0.1832706 -0.764923 0.6174987 0.1832708 -0.7649227 0.6358656 0.1028016 -0.7649201 0.6358687 0.1028017 -0.7649201 0.6437942 0.02064484 -0.7649146 0.6438009 0.0206443 -0.7649142 0.6411558 -0.06184947 -0.7649033 0.6411687 -0.06185221 -0.7649025 0.6279956 -0.143337 -0.7649124 0.6279847 -0.1433331 -0.7649115 0.6045006 -0.2224622 -0.7649079 0.6045045 -0.2224642 -0.7649079 0.5710932 -0.2979403 -0.7649222 0.5710792 -0.2979307 -0.7649217 0.5282934 -0.3685119 -0.7648979 0.5283146 -0.3685306 -0.7648986 0.4768502 -0.4330638 -0.7649218 0.4768319 -0.4330428 -0.7649218 0.4175391 -0.4904649 -0.7649037 0.4175512 -0.4904829 -0.7649053 0.3514023 -0.5398484 -0.7649078 0.351401 -0.5398458 -0.7649091 0.2794812 -0.5803485 -0.7649224 0.2794759 -0.5803334 -0.7649225 0.2029687 -0.6113077 -0.7649104 0.2029717 -0.6113219 -0.764913 0.1231311 -0.6322554 -0.7649188 0.1231306 -0.6322485 -0.7649184 0.04126995 -0.6428038 -0.764908 0.04126936 -0.6428161 -0.764908 -0.04127079 -0.6428161 -0.7649183 -0.04126858 -0.6428039 -0.6426818 -0.1464527 -0.752005 -0.6426858 -0.1464517 -0.752002 -0.6426885 -0.2414135 -0.7270977 -0.6426864 -0.2414143 -0.7270992 -0.6426894 -0.332409 -0.690257 -0.6426793 -0.3324138 -0.6902642 -0.6426802 -0.4179539 -0.6420877 -0.642672 -0.4179586 -0.6420931 -0.6426717 -0.4966351 -0.5833753 -0.6426939 -0.4966211 -0.5833627 -0.6426949 -0.5671425 -0.5150657 -0.6426914 -0.5671449 -0.5150673 -0.6426916 -0.6283553 -0.4383116 -0.6426815 -0.6283629 -0.4383155 -0.6426828 -0.6792528 -0.3543649 -0.6427001 -0.6792389 -0.3543601 -0.6427001 -0.7189764 -0.2645931 -0.6426784 -0.7189943 -0.264597 -0.6426779 -0.7469285 -0.1704791 -0.6427098 -0.7469015 -0.1704767 -0.64271 -0.7625695 -0.07356435 -0.642687 -0.7625889 -0.07356357 -0.6426876 -0.7657347 0.02455502 -0.6426866 -0.7657356 0.0245552 -0.642687 -0.7563086 0.1222731 -0.6426808 -0.7563138 0.1222746 -0.6426804 -0.7344685 0.2179862 -0.6426745 -0.7344731 0.2179883 -0.6426758 -0.7005663 0.3101207 -0.6426876 -0.7005577 0.3101153 -0.6426882 -0.6551494 0.3971541 -0.6426885 -0.6551491 0.3971539 -0.6426886 -0.5989825 0.4776728 -0.6426683 -0.5989944 0.4776852 -0.6426681 -0.5329921 0.5503607 -0.6426936 -0.5329794 0.5503435 -0.6426939 -0.4582278 0.6139803 -0.6426752 -0.4582355 0.6139943 -0.6426763 -0.3759574 0.6675501 -0.6426736 -0.3759583 0.6675522 -0.6426737 -0.2875056 0.7101486 -0.642695 -0.2875012 0.7101312 -0.6426957 -0.19433 0.7410656 -0.6426933 -0.1943302 0.7410675 -0.6426945 -0.09797006 0.7598328 -0.6426838 -0.09796994 0.7598417 -0.6426834 0 0.7661319 -0.6426833 0 0.7661319 -0.6426837 0.0979712 0.7598416 -0.6426943 0.09796881 0.759833 -0.6426934 0.1943305 0.7410675 -0.6426957 0.1943297 0.7410655 -0.6426951 0.2874989 0.710132 -0.6426738 0.2875079 0.7101476 -0.6426734 0.3759586 0.6675522 -0.6426764 0.3759571 0.6675502 -0.642675 0.4582373 0.6139931 -0.6426937 0.4582262 0.6139818 -0.6426937 0.5329772 0.5503454 -0.6426683 0.5329942 0.5503587 -0.6426684 0.5989958 0.4776833 -0.6426886 0.5989811 0.4776746 -0.6426883 0.6551492 0.397154 -0.6426881 0.6551494 0.3971541 -0.6426877 0.7005571 0.3101166 -0.6426759 0.7005667 0.3101193 -0.6426745 0.7344732 0.2179876 -0.6426803 0.7344683 0.2179869 -0.6426808 0.7563138 0.1222739 -0.642687 0.7563084 0.1222738 -0.6426866 0.7657356 0.02455508 -0.6426876 0.7657348 0.02455514 -0.642687 0.7625887 -0.07356625 -0.6427099 0.7625697 -0.07356172 -0.6427099 0.7469022 -0.1704731 -0.642678 0.7469275 -0.1704826 -0.6426784 0.7189935 -0.2645994 -0.6426999 0.7189774 -0.2645908 -0.6427003 0.6792398 -0.3543582 -0.6426831 0.6792517 -0.3543667 -0.6426816 0.6283622 -0.4383164 -0.6426914 0.6283561 -0.4383108 -0.6426914 0.5671447 -0.5150676 -0.6426948 0.5671429 -0.5150654 -0.6426941 0.4966229 -0.5833609 -0.6426922 0.4966238 -0.5833622 -0.6426892 0.4179497 -0.6420814 -0.6426803 0.417953 -0.6420882 -0.6426792 0.3324127 -0.6902647 -0.6426892 0.3324101 -0.6902565 -0.6426865 0.241414 -0.7270992 -0.6426885 0.2414137 -0.7270977 -0.6426857 0.1464528 -0.7520017 -0.6426758 0.1464532 -0.7520101 -0.6426784 0.04908484 -0.764562 -0.6426993 0.04908609 -0.7645445 -0.6426993 -0.04908394 -0.7645446 -0.6426805 -0.0490871 -0.7645601 -0.5014692 -0.1653857 -0.849221 -0.5014713 -0.1653853 -0.8492198 -0.5014726 -0.2726238 -0.8210977 -0.5014734 -0.2726236 -0.8210974 -0.50147 -0.3753849 -0.779496 -0.5014771 -0.3753825 -0.7794926 -0.5014762 -0.4719815 -0.7250897 -0.5014685 -0.4719846 -0.7250931 -0.5014653 -0.560834 -0.6587852 -0.5014758 -0.5608292 -0.6587811 -0.5014776 -0.6404668 -0.5816549 -0.5014936 -0.640459 -0.5816499 -0.5014947 -0.7095795 -0.4949749 -0.5014543 -0.7096011 -0.4949849 -0.5014508 -0.7670744 -0.4001801 -0.5014616 -0.7670682 -0.4001781 -0.5014598 -0.8119451 -0.2988027 -0.5014984 -0.8119229 -0.2987987 -0.5014998 -0.8434658 -0.1925183 -0.5014473 -0.8434967 -0.1925198 -0.5014461 -0.8611912 -0.08307623 -0.5014659 -0.8611795 -0.08307719 -0.5014649 -0.8647335 0.02773064 -0.5014746 -0.8647279 0.02772951 -0.5014762 -0.8540815 0.1380813 -0.5014877 -0.8540751 0.1380791 -0.5014873 -0.8294055 0.2461646 -0.5015022 -0.8293977 0.2461607 -0.501502 -0.7911105 0.3501999 -0.5014839 -0.7911193 0.3502059 -0.5014813 -0.7398426 0.4484969 -0.5014927 -0.7398376 0.4484925 -0.50149 -0.6764127 0.5394198 -0.5014786 -0.6764171 0.5394248 -0.5014774 -0.6018836 0.6214953 -0.5014643 -0.601888 0.6215018 -0.5014635 -0.5174723 0.6933664 -0.501488 -0.5174658 0.6933534 -0.501485 -0.4245532 0.7538352 -0.5014773 -0.4245547 0.7538394 -0.5014784 -0.3246695 0.8019409 -0.5014648 -0.3246712 0.8019487 -0.5014628 -0.2194569 0.8368834 -0.5014583 -0.2194571 0.8368861 -0.5014585 -0.1106356 0.8580788 -0.5014773 -0.1106361 0.8580677 -0.5014789 0 0.8651699 -0.5014789 0 0.86517 -0.5014774 0.1106342 0.8580679 -0.5014585 0.1106375 0.8580785 -0.5014583 0.2194575 0.8368859 -0.5014628 0.2194564 0.8368835 -0.5014648 0.3246724 0.8019481 -0.5014783 0.3246682 0.8019415 -0.5014773 0.4245554 0.7538391 -0.501485 0.4245525 0.7538355 -0.5014883 0.5174637 0.6933549 -0.5014635 0.5174743 0.6933649 -0.5014642 0.601889 0.6215009 -0.5014773 0.6018827 0.6214963 -0.5014786 0.6764178 0.5394238 -0.5014898 0.6764121 0.5394208 -0.5014927 0.739837 0.4484934 -0.5014812 0.7398433 0.4484959 -0.501484 0.7911185 0.3502076 -0.501465 0.7911293 0.3502103 -0.5014635 0.8294199 0.2461647 -0.5014873 0.8294059 0.2461631 -0.5014877 0.8540748 0.1380802 -0.5014763 0.8540818 0.1380801 -0.5014746 0.8647278 0.02773046 -0.5014649 0.8647335 0.02772969 -0.501466 0.8611797 -0.08307516 -0.5014462 0.8611909 -0.08307832 -0.5014472 0.8434956 -0.1925251 -0.5014998 0.843467 -0.1925131 -0.5014983 0.8119242 -0.2987949 -0.5014599 0.8119437 -0.2988063 -0.5014617 0.7670688 -0.4001771 -0.5014506 0.7670739 -0.4001811 -0.5014543 0.7095986 -0.4949882 -0.5014943 0.709582 -0.4949716 -0.5014936 0.64046 -0.5816487 -0.5014774 0.640466 -0.5816562 -0.5014759 0.56083 -0.6587804 -0.5014652 0.5608332 -0.6587858 -0.5014687 0.4719839 -0.7250934 -0.5014761 0.4719821 -0.7250893 -0.501477 0.3753831 -0.7794923 -0.5014701 0.3753842 -0.7794962 -0.5014733 0.2726237 -0.8210973 -0.5014726 0.2726237 -0.8210978 -0.5014713 0.1653855 -0.8492197 -0.501477 0.1653854 -0.8492164 -0.5014725 0.0554319 -0.863396 -0.5014539 0.05543065 -0.8634068 -0.5014538 -0.05543261 -0.8634068 -0.50147 -0.05543035 -0.8633976 -0.3455065 -0.1793861 -0.9211111 -0.3455052 -0.1793864 -0.9211117 -0.3454999 -0.2957032 -0.8906118 -0.3454912 -0.295705 -0.8906146 -0.3454931 -0.4071666 -0.8454879 -0.3455079 -0.4071629 -0.8454837 -0.3455128 -0.5119358 -0.7864748 -0.3454864 -0.5119432 -0.7864816 -0.3454878 -0.6083128 -0.7145584 -0.3454722 -0.6083176 -0.7145618 -0.3454695 -0.6947 -0.6309062 -0.3454831 -0.6946955 -0.6309038 -0.345483 -0.7696705 -0.5368882 -0.3455159 -0.7696587 -0.5368837 -0.3455187 -0.8319962 -0.4340499 -0.3455163 -0.831997 -0.43405 -0.3455178 -0.8806694 -0.324097 -0.3454849 -0.8806819 -0.3240984 -0.3454831 -0.9148971 -0.2088174 -0.3455324 -0.9148783 -0.208818 -0.3455337 -0.9340698 -0.09011077 -0.3454906 -0.9340861 -0.09010821 -0.3454909 -0.9379399 0.03007978 -0.3455065 -0.9379342 0.03007811 -0.3455043 -0.9263882 0.1497722 -0.3455137 -0.9263849 0.1497708 -0.3455124 -0.8996285 0.2670015 -0.3454611 -0.8996452 0.2670115 -0.3454628 -0.8581138 0.3798633 -0.3454917 -0.8581051 0.3798564 -0.3454925 -0.8024841 0.4864712 -0.345499 -0.8024824 0.4864695 -0.3455008 -0.733685 0.5850945 -0.3455151 -0.7336817 0.5850902 -0.3455148 -0.6528393 0.6741072 -0.3454858 -0.6528447 0.6741169 -0.3454876 -0.5612815 0.7520648 -0.3454753 -0.5612833 0.7520692 -0.3454789 -0.4605005 0.8176696 -0.3455129 -0.4604972 0.8176571 -0.3455117 -0.3521556 0.8698323 -0.3455115 -0.3521556 0.8698322 -0.3455118 -0.2380332 0.9077235 -0.345513 -0.2380332 0.907723 -0.3455134 -0.1200028 0.9307094 -0.3454859 -0.1200014 0.9307197 -0.3454852 0 0.9384242 -0.3454852 0 0.9384242 -0.3454859 0.1200041 0.9307194 -0.3455132 0.1200001 0.9307097 -0.3455131 0.238032 0.9077233 -0.3454996 0.2380344 0.9077277 -0.3454938 0.3521597 0.8698377 -0.3455117 0.3521556 0.8698322 -0.3455129 0.4604943 0.8176587 -0.3454792 0.4605033 0.8176679 -0.3454751 0.5612842 0.7520685 -0.3454874 0.5612806 0.7520655 -0.3454857 0.6528466 0.6741149 -0.3455148 0.6528372 0.6741091 -0.3455149 0.733681 0.5850913 -0.345501 0.7336858 0.5850934 -0.3454991 0.802482 0.48647 -0.3454924 0.8024845 0.4864707 -0.3454919 0.8581041 0.379859 -0.3455064 0.8580986 0.379858 -0.3455066 0.8996293 0.2670062 -0.345467 0.8996444 0.2670068 -0.3454665 0.9264026 0.14977 -0.3455044 0.9263883 0.1497713 -0.3455065 0.9379342 0.0300796 -0.3454909 0.9379399 0.03007829 -0.3454905 0.9340857 -0.09011226 -0.3455336 0.9340703 -0.09010666 -0.3455324 0.9148794 -0.2088134 -0.3454834 0.9148959 -0.208822 -0.345485 0.8806822 -0.3240973 -0.3454729 0.8806859 -0.3240998 -0.3454741 0.8320088 -0.434061 -0.3455187 0.8319963 -0.4340497 -0.345516 0.7696605 -0.5368812 -0.3454831 0.7696686 -0.5368907 -0.3454828 0.6946964 -0.630903 -0.3454695 0.6946992 -0.6309072 -0.3454723 0.6083165 -0.7145628 -0.3454877 0.6083139 -0.7145575 -0.3454864 0.5119411 -0.786483 -0.3455127 0.5119379 -0.7864735 -0.345508 0.4071642 -0.8454831 -0.3454931 0.4071652 -0.8454887 -0.3454913 0.2957043 -0.8906149 -0.3454999 0.295704 -0.8906115 -0.345505 0.1793863 -0.9211117 -0.3455064 0.1793863 -0.9211112 -0.3455075 0.06012523 -0.9364879 -0.3455005 0.06012475 -0.9364905 -0.3455005 -0.06012541 -0.9364904 -0.3455075 -0.06012457 -0.936488 -0.1792841 -0.1880593 -0.9656557 -0.1792637 -0.1880618 -0.965659 -0.1792676 -0.3100039 -0.9336813 -0.1792745 -0.310003 -0.9336803 -0.179272 -0.4268552 -0.8863725 -0.1792686 -0.4268557 -0.8863729 -0.1792637 -0.5366982 -0.8245117 -0.1792933 -0.5366929 -0.8245086 -0.1792981 -0.637722 -0.749108 -0.1792716 -0.637727 -0.7491101 -0.179271 -0.7282874 -0.6614072 -0.1792894 -0.7282838 -0.6614061 -0.1792883 -0.8068827 -0.5628464 -0.1792819 -0.806884 -0.5628466 -0.1792814 -0.8722345 -0.4550443 -0.17926 -0.8722388 -0.4550443 -0.1792598 -0.923267 -0.3397706 -0.1792896 -0.9232609 -0.3397713 -0.1792922 -0.9591296 -0.2189171 -0.1792498 -0.959138 -0.2189151 -0.179248 -0.9792581 -0.09446537 -0.1793001 -0.9792482 -0.09446918 -0.1793016 -0.9832888 0.03152781 -0.1792325 -0.9833013 0.03153449 -0.1792352 -0.9711955 0.1570166 -0.1792384 -0.9711949 0.1570162 -0.1792407 -0.9431418 0.2799217 -0.1793028 -0.9431326 0.2799131 -0.1792996 -0.8995954 0.3982206 -0.1792453 -0.8996024 0.3982291 -0.179248 -0.8412926 0.509997 -0.179246 -0.8412928 0.5099973 -0.1792473 -0.769169 0.6133919 -0.1792455 -0.7691692 0.6133922 -0.1792467 -0.6844152 0.7067151 -0.1792709 -0.6844139 0.7067105 -0.1792717 -0.58842 0.7884311 -0.179293 -0.5884192 0.7884268 -0.1792878 -0.4827662 0.8572005 -0.1792648 -0.4827664 0.8572052 -0.1792601 -0.3691872 0.9119027 -0.1792688 -0.3691874 0.911901 -0.179269 -0.2495469 0.9516245 -0.1792536 -0.2495462 0.9516274 -0.179256 -0.1258049 0.9757257 -0.1792799 -0.1258064 0.975721 -0.1792819 0 0.9837977 -0.1792819 0 0.9837977 -0.1792798 0.1258043 0.9757214 -0.179256 0.125807 0.9757254 -0.1792537 0.2495476 0.9516271 -0.1792821 0.2495437 0.9516227 -0.1792884 0.3691853 0.911898 -0.1792602 0.3691896 0.9119018 -0.1792647 0.4827682 0.8572041 -0.1792876 0.4827644 0.8572015 -0.1792929 0.5884177 0.7884279 -0.1792718 0.5884215 0.7884299 -0.1792713 0.6844121 0.706712 -0.1792471 0.6844168 0.7067136 -0.1792455 0.7691692 0.6133921 -0.179247 0.7691689 0.613392 -0.1792463 0.8412927 0.5099971 -0.1792481 0.8412925 0.5099972 -0.1792452 0.8996046 0.3982247 -0.1792995 0.8995934 0.3982251 -0.1793029 0.943131 0.2799185 -0.1792907 0.9431334 0.2799181 -0.17929 0.9711856 0.157015 -0.1792352 0.9711961 0.1570117 -0.1792325 0.9833012 0.031533 -0.1792494 0.9832981 0.03153443 -0.179248 0.9792576 -0.09447008 -0.1792481 0.9792577 -0.09447008 -0.1792497 0.9591381 -0.2189143 -0.1792412 0.9591395 -0.2189154 -0.1792408 0.9232687 -0.339776 -0.1793088 0.9232591 -0.3397659 -0.1793062 0.8722304 -0.4550421 -0.1792811 0.8722335 -0.4550462 -0.1792821 0.8068836 -0.5628471 -0.1792886 0.8068829 -0.5628459 -0.1792893 0.728285 -0.6614049 -0.1792708 0.7282863 -0.6614084 -0.1792712 0.6377252 -0.7491118 -0.179298 0.6377239 -0.7491064 -0.1792936 0.5366952 -0.8245072 -0.1792638 0.5366959 -0.8245132 -0.1792685 0.4268554 -0.8863731 -0.179272 0.4268555 -0.8863724 -0.1792744 0.3100035 -0.9336801 -0.1792678 0.3100033 -0.9336815 -0.1792635 0.1880609 -0.9656592 -0.1792741 0.1880615 -0.9656571 -0.179279 0.06303191 -0.981777 -0.1792902 0.0630328 -0.9817748 -0.1792902 -0.06303209 -0.9817749 -0.1792824 -0.06303286 -0.9817762 -5.51555e-4 0.08715629 0.9961945 1.53254e-4 0.1278768 0.9917901 1.51884e-4 0.2588191 0.9659258 -0.003466427 0.1278792 0.9917837 -3.47829e-4 0.2536537 0.9672951 2.21468e-4 0.3752655 0.9269174 2.21467e-4 0.3752669 0.9269168 -5.81282e-4 0.4226191 0.9063072 3.11424e-4 0.4907165 0.8713192 3.11424e-4 0.4907222 0.871316 -5.04107e-4 0.5735753 0.8191527 6.72104e-5 0.5981088 0.8014149 6.65083e-5 0.7071068 0.7071068 -0.003839671 0.5981218 0.801396 -5.10756e-4 0.6956826 0.718349 2.84842e-4 0.8551443 0.51839 -5.93115e-4 0.8191512 0.5735774 2.71921e-4 0.7818309 0.6234905 2.71921e-4 0.7818306 0.623491 2.84841e-4 0.855142 0.5183938 -5.68965e-4 0.9144124 0.4047834 -4.74021e-5 0.9063083 0.422617 3.46314e-5 0.958673 0.2845105 3.46314e-5 0.9586679 0.2845273 -4.8429e-4 0.9659257 0.2588191 3.04518e-4 0.9871802 0.1596097 3.04518e-4 0.9871826 0.1595941 -5.87149e-4 0.9961945 0.08715629 2.40324e-4 0.9994862 0.03205114 2.38616e-4 0.9961946 -0.08715629 -0.002995371 0.9994817 0.03205364 -1.58173e-4 0.9953795 -0.09601974 1.2652e-4 0.9749273 -0.2225237 1.2652e-4 0.9749279 -0.2225213 -5.37753e-4 0.9659257 -0.2588191 3.194e-4 0.9384676 -0.3453672 3.194e-4 0.9384692 -0.3453626 -5.63454e-4 0.9063082 -0.422617 1.78001e-4 0.8865988 -0.4625391 1.765e-4 0.8191514 -0.5735775 -0.003345847 0.8865944 -0.4625356 -2.97447e-4 0.8201726 -0.5721162 2.0075e-4 0.7402706 -0.6723091 2.0075e-4 0.7402785 -0.6723003 -5.73313e-4 0.7071067 -0.7071067 3.16476e-4 0.6482269 -0.7614472 3.16476e-4 0.6482296 -0.7614449 -5.21889e-4 0.5735753 -0.8191527 9.78279e-5 0.5455368 -0.8380869 9.68651e-5 0.4226192 -0.9063074 -0.003713428 0.5455225 -0.8380879 -4.54495e-4 0.4338842 -0.9009686 2.57082e-4 0.3151072 -0.949056 2.57082e-4 0.3151077 -0.949056 -5.91138e-4 0.258819 -0.9659256 2.95663e-4 0.1911584 -0.9815591 2.95663e-4 0.1911581 -0.9815592 -4.62564e-4 0.08715456 -0.9961947 0 0.06406956 -0.9979454 0 -0.06406956 -0.9979454 -4.62564e-4 -0.08715456 -0.9961947 2.57082e-4 -0.3151077 -0.949056 -5.91138e-4 -0.258819 -0.9659256 2.95663e-4 -0.1911584 -0.9815591 2.95663e-4 -0.1911581 -0.9815592 2.57082e-4 -0.3151072 -0.949056 -4.54494e-4 -0.4338842 -0.9009686 -1.36372e-4 -0.4226191 -0.9063074 9.78279e-5 -0.5455263 -0.8380937 9.78279e-5 -0.5455368 -0.8380869 -5.21889e-4 -0.5735753 -0.8191527 3.16476e-4 -0.6482296 -0.7614449 3.16476e-4 -0.6482269 -0.7614472 -5.73313e-4 -0.7071067 -0.7071067 2.0075e-4 -0.7402785 -0.6723003 1.99147e-4 -0.8191514 -0.5735774 -0.003227293 -0.7402667 -0.6723056 -2.48994e-4 -0.8201726 -0.5721162 1.78001e-4 -0.8865994 -0.4625381 1.78001e-4 -0.8865988 -0.4625391 -5.63454e-4 -0.9063082 -0.422617 3.194e-4 -0.9384692 -0.3453626 3.194e-4 -0.9384676 -0.3453672 -5.37753e-4 -0.9659257 -0.2588191 1.26521e-4 -0.9749279 -0.2225213 1.2533e-4 -0.9961947 -0.08715635 -0.003589212 -0.974921 -0.2225223 -4.00103e-4 -0.9953793 -0.09601974 2.40324e-4 -0.9994861 0.03205382 2.40324e-4 -0.9994862 0.03205114 -5.87149e-4 -0.9961945 0.08715629 3.04518e-4 -0.9871826 0.1595941 3.04518e-4 -0.9871802 0.1596097 -4.8429e-4 -0.9659257 0.2588191 3.46314e-5 -0.9586679 0.2845273 3.42496e-5 -0.9063084 0.422617 -0.003969013 -0.9586654 0.2845082 -5.68965e-4 -0.9144124 0.4047834 2.71921e-4 -0.7818309 0.6234905 -5.93115e-4 -0.8191512 0.5735774 2.84842e-4 -0.8551443 0.51839 2.84842e-4 -0.8551419 0.5183939 2.71921e-4 -0.7818306 0.623491 -5.10757e-4 -0.6956826 0.718349 -9.28651e-5 -0.7071068 0.7071068 6.721e-5 -0.5981262 0.8014019 6.721e-5 -0.5981088 0.8014149 -5.04107e-4 -0.5735753 0.8191527 3.11424e-4 -0.4907222 0.871316 3.11424e-4 -0.4907165 0.8713192 -5.81282e-4 -0.4226191 0.9063072 2.21468e-4 -0.3752669 0.9269168 2.19803e-4 -0.2588191 0.9659258 -0.00311017 -0.3752637 0.9269129 -2.02553e-4 -0.2536525 0.9672954 1.53254e-4 -0.1278843 0.9917891 1.53254e-4 -0.1278768 0.9917901 -5.51555e-4 -0.08715629 0.9961945 0 -0.03205478 0.9994862 0 0.03205478 0.9994862 0.865197 0.1297801 -0.4843462 0.8651971 0.0437026 -0.499524 0.865197 0.354566 -0.354566 0.865197 0.2876101 -0.4107487 0.865197 0.2119137 -0.454452 0.865197 0.4843463 -0.1297802 0.8651971 0.4544523 -0.2119132 0.8655533 0.4162875 -0.278428 0.865197 0.4843463 0.1297802 0.865197 0.4995239 0.04370379 0.865197 0.4995239 -0.04370379 0.865197 0.354566 0.354566 0.865197 0.4107487 0.2876101 0.8655534 0.4492688 0.2213029 0.865197 0.1297802 0.4843464 0.865197 0.2119138 0.4544522 0.865197 0.2876093 0.4107494 0.865197 -0.1297802 0.4843464 0.865197 -0.04370391 0.4995239 0.8655534 0.03298074 0.4997296 0.865197 -0.354566 0.354566 0.8651971 -0.2876093 0.4107494 0.8651968 -0.2119138 0.4544522 0.865197 -0.4843463 0.1297802 0.8651971 -0.4544523 0.2119132 0.8655533 -0.416287 0.2784289 0.865197 -0.4843463 -0.1297802 0.865197 -0.4995239 -0.04370379 0.865197 -0.4995239 0.04370379 0.865197 -0.354566 -0.354566 0.865197 -0.4107487 -0.2876101 0.8655534 -0.4492688 -0.2213029 0.8651971 -0.1297801 -0.4843462 0.865197 -0.2119137 -0.454452 0.865197 -0.2876101 -0.4107487 0.8655534 -0.03298074 -0.4997296 0.865975 -0.07629698 -0.4942328 0.865975 -0.4661692 -0.1810349 0.865975 -0.3898723 0.3131884 0.8659749 0.07630234 0.4942321 0.865975 0.4661692 0.1810349 0.865975 0.3898701 -0.3131911 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -0.1314213 -0.9913266 0 -0.131421 -0.9913266 0 -0.1314207 -0.9913266 0 -0.9242246 -0.3818494 0 -0.9242246 -0.3818494 0 -0.9242246 -0.3818494 0 -0.7928038 0.6094769 3.44594e-7 -0.7928034 0.6094776 0 -0.7928028 0.6094782 0 0.1314213 0.9913266 0 0.131421 0.9913266 0 0.1314207 0.9913266 0 0.9242246 0.3818494 0 0.9242246 0.3818494 0 0.9242246 0.3818494 0 0.7928035 -0.6094773 1.47683e-7 0.7928034 -0.6094776 0 0.7928031 -0.6094778 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0.9988856 -0.04404562 -0.01696354 0.9988836 -0.04519814 -0.01374065 0.9988835 -0.04519814 -0.01374065 0.9988836 -0.04631322 -0.009314358 0.9988836 -0.046314 -0.009314417 0.9988836 -0.04699671 -0.004800975 0.9988835 -0.04699623 -0.004800975 0.9988836 -0.04724019 -2.42715e-4 0.9988836 -0.04724025 -2.42707e-4 0.9988834 -0.04704314 0.00431776 0.9988836 -0.04704201 0.004317522 0.9988836 -0.04640573 0.008837521 0.9988835 -0.04640716 0.008837997 0.9988836 -0.04533749 0.01327568 0.9988836 -0.04533737 0.01327556 0.9988836 -0.0438444 0.01758933 0.9988836 -0.04384368 0.01758891 0.9988836 -0.0419414 0.02173835 0.9988836 -0.04194128 0.02173829 0.9988836 -0.03964745 0.02568465 0.9988835 -0.03964811 0.02568519 0.9988836 -0.03698396 0.02939194 0.9988836 -0.03698372 0.0293917 0.9988836 -0.03397446 0.03282392 0.9988835 -0.0339747 0.03282421 0.9988835 -0.03064805 0.03595 0.9988835 -0.03064793 0.03594976 0.9988835 -0.02703517 0.0387398 0.9988836 -0.02703505 0.03873962 0.9988835 -0.02316999 0.04116815 0.9988835 -0.02317017 0.04116868 0.9988836 -0.01908868 0.04321271 0.9988836 -0.01908862 0.04321259 0.9988836 -0.01482886 0.04485315 0.9988837 -0.0148288 0.04485267 0.9988836 -0.01043063 0.04607445 0.9988836 -0.01043069 0.04607492 0.9988836 -0.005935132 0.04686647 0.9988836 -0.005935132 0.04686594 0.9988836 -0.001384139 0.04722011 0.9988835 -0.001384139 0.04722028 0.9988836 0.003179609 0.04713338 0.9988835 0.003179669 0.04713356 0.9988836 0.007713913 0.04660671 0.9988836 0.007713854 0.0466066 0.9988836 0.01217603 0.04564452 0.9988836 0.01217597 0.04564428 0.9988835 0.01652437 0.04425597 0.9988835 0.01652479 0.04425668 0.9988836 0.02071899 0.04245525 0.9988836 0.02071863 0.04245471 0.9988836 0.02471941 0.04025691 0.9988835 0.02471989 0.04025751 0.9988836 0.02848982 0.03768384 0.9988835 0.02848976 0.03768372 0.9988836 0.03199392 0.03475815 0.9988836 0.03199344 0.03475773 0.9988836 0.03519862 0.03150767 0.9988836 0.03519928 0.03150808 0.9988835 0.03807598 0.02796375 0.9988837 0.03807443 0.02796286 0.9988836 0.04059553 0.02415752 0.9988837 0.04059565 0.02415764 0.9988836 0.0427376 0.02012687 0.9988836 0.04273891 0.02012729 0.9988836 0.04448205 0.01590836 0.9988836 0.04448109 0.01590818 0.9988836 0.04580879 0.01154088 0.9988836 0.04580974 0.011541 0.9988835 0.04670977 0.007065892 0.9988837 0.04670834 0.007065832 0.9988836 0.04717224 0.002524852 0.9988835 0.04717314 0.002524793 0.9988835 0.04719662 -0.00203979 0.9988835 0.0471974 -0.002039968 0.9988835 0.0467801 -0.006585538 0.9988835 0.04677963 -0.006585419 0.9988836 0.04592561 -0.01106971 0.9988836 0.04592508 -0.01106953 0.9988836 0.04464238 -0.01545017 0.9988836 0.04464238 -0.01545017 0.9988835 0.04294282 -0.01968669 0.9988835 0.04294329 -0.01968699 0.9988835 0.04084277 -0.02373975 0.9988836 0.04084247 -0.02373951 0.9988836 0.03836059 -0.02757048 0.9988836 0.03836011 -0.02757006 0.9988836 0.03552013 -0.03114372 0.9988835 0.03552114 -0.03114485 0.9988835 0.03234946 -0.03442764 0.9988835 0.03234893 -0.03442686 0.9988836 0.02887517 -0.03738838 0.9988836 0.02887529 -0.03738856 0.9988835 0.02513206 -0.04000097 0.9988836 0.02513194 -0.04000067 0.9988836 0.02115392 -0.04223948 0.9988835 0.02115422 -0.04224032 0.9988834 0.01697874 -0.04408478 0.9988835 0.01697862 -0.04408419 0.9988836 0.01264458 -0.04551714 0.9988835 0.01264464 -0.04551744 0.9988835 0.008192539 -0.04652529 0.9988836 0.008192539 -0.04652535 0.9988835 0.003663957 -0.04709875 0.9988834 0.003663957 -0.04709899 0.9988836 -8.98762e-4 -0.04723274 0.9988835 -8.98818e-4 -0.0472331 0.9988835 -0.005453348 -0.04692578 0.9988836 -0.00545299 -0.04692417 0.9988836 -0.009956359 -0.04617881 0.9988835 -0.009956717 -0.04617989 0.9988834 -0.01436728 -0.04500335 0.9988835 -0.01436728 -0.04500329 0.9988836 -0.01864361 -0.0434066 0.9988836 -0.01864302 -0.04340559 0.9988837 -0.02274537 -0.04140365 0.9988836 -0.02274554 -0.04140394 0.9988836 -0.02663534 -0.03901535 0.9988835 -0.02663582 -0.03901588 0.9988835 -0.03027701 -0.03626298 0.9988836 -0.03027635 -0.03626239 0.9988836 -0.03363478 -0.03317093 0.9988835 -0.03363543 -0.03317141 0.9988835 -0.0366798 -0.02977043 0.9988836 -0.03667986 -0.02977049 0.9988836 -0.03938204 -0.02609115 0.9988836 -0.0393815 -0.02609086 0.9988836 -0.04171568 -0.02216833 0.9988835 -0.04171633 -0.02216857 0.9988855 -0.0431748 -0.01907199 0.9986177 -0.04857856 -0.02007049 0.04703551 0.1631081 0.9854863 0.04704737 0.1631092 0.9854857 0.04704946 0.257461 0.9651425 0.04704415 0.2574602 0.965143 0.0470488 0.2574589 0.9651432 0.04704934 0.3494073 0.9357889 0.0470438 0.4380944 0.8976972 0.04703861 0.4380828 0.8977031 0.04703909 0.3494084 0.935789 0.04704225 0.5226881 0.8512251 0.0470553 0.5226904 0.851223 0.04705345 0.4380933 0.8976972 0.04701435 0.7442654 0.6662272 0.04701554 0.676496 0.7349441 0.0470345 0.6764939 0.7349447 0.0470348 0.60241 0.7967998 0.04704529 0.6024029 0.7968046 0.04704356 0.6024028 0.7968047 0.04704385 0.5226878 0.8512252 0.0470286 0.7442685 0.6662228 0.04703402 0.7442687 0.6662221 0.04703497 0.8050941 0.5912792 0.04703634 0.8050943 0.5912789 0.04704767 0.8050915 0.5912818 0.04704827 0.8584018 0.5108158 0.04705351 0.8584014 0.5108162 0.04702508 0.9405517 0.3363792 0.04703599 0.9405521 0.3363769 0.04703658 0.9036954 0.4255847 0.04702615 0.9036953 0.4255859 0.04705536 0.9037064 0.4255592 0.04702389 0.987657 0.1494064 0.04702317 0.9686349 0.2439986 0.04704421 0.9686256 0.2440312 0.04701942 0.9686261 0.2440342 0.04702067 0.9405522 0.3363783 0.04704046 0.9974655 0.05338418 0.04703617 0.9974656 0.05338549 0.04703533 0.9876564 0.1494076 0.04703205 0.9710835 -0.2340617 0.0470317 0.98914 -0.1392478 0.04705488 0.9891392 -0.1392453 0.04705554 0.9979605 -0.04313486 0.04706239 0.9979604 -0.04313182 0.04705673 0.9979606 -0.04313099 0.04705721 0.9974646 0.0533868 0.04703789 0.9710823 -0.2340651 0.04704171 0.9710821 -0.2340655 0.04704082 0.9439594 -0.3266925 0.04705238 0.9439581 -0.3266943 0.04705131 0.9439581 -0.3266946 0.04705172 0.9080215 -0.4162728 0.04703879 0.9080227 -0.4162718 0.04703801 0.9079886 -0.416346 0.04703861 0.8636062 -0.5019677 0.0470516 0.8636064 -0.5019662 0.0470519 0.8111273 -0.5829738 0.04704815 0.8111281 -0.5829732 0.04702889 0.8111268 -0.5829765 0.04702818 0.7510766 -0.6585379 0.04703646 0.7510757 -0.6585385 0.0470544 0.7510824 -0.6585296 0.04705631 0.6840112 -0.7279522 0.04703468 0.6840103 -0.7279545 0.04704475 0.3590252 -0.9321415 0.04704242 0.4472953 -0.8931483 0.04704535 0.4472956 -0.893148 0.04704463 0.5314072 -0.8458092 0.04705864 0.5314105 -0.8458064 0.04707634 0.5314076 -0.8458072 0.04707735 0.6105586 -0.7905706 0.04704403 0.6105623 -0.7905697 0.04703599 0.6105654 -0.7905678 0.04705697 0.3590059 -0.9321482 0.04702359 0.3590098 -0.9321485 0.04702574 0.2673663 -0.9624468 0.04702705 0.2673659 -0.9624468 0.0470274 0.2673661 -0.9624468 0.04702919 0.1732289 -0.9837582 0.04703873 0.1732277 -0.9837579 0.04703658 0.1732256 -0.9837584 0.04703521 0.07747215 -0.9958844 0.04704391 0.07747304 -0.995884 0.04707038 -0.3038026 -0.9515715 0.04706937 -0.210527 -0.9764543 0.04702687 -0.2105318 -0.9764553 0.04702806 -0.1153107 -0.9922156 0.04704487 -0.1153044 -0.9922155 0.04706323 -0.115307 -0.9922144 0.04706412 -0.01900541 -0.9987111 0.04705387 -0.01900434 -0.9987117 0.04704356 -0.0190007 -0.9987121 0.04705214 -0.3037885 -0.951577 0.04703354 -0.3037869 -0.9515783 0.04703366 -0.3942094 -0.9178164 0.04704594 -0.3942114 -0.9178149 0.04702001 -0.3942174 -0.9178136 0.04702109 -0.4809528 -0.8754847 0.04703646 -0.480954 -0.8754833 0.04706335 -0.4808969 -0.8755131 0.04706209 -0.563202 -0.8249779 0.04703021 -0.5632057 -0.8249773 0.04703056 -0.6401993 -0.7667678 0.04702079 -0.6401975 -0.76677 0.0470432 -0.6401938 -0.7667716 0.04704242 -0.7112123 -0.7014015 0.04704314 -0.7112123 -0.7014014 0.04705065 -0.7112095 -0.7014037 0.04704904 -0.775586 -0.629486 0.04704272 -0.7755867 -0.6294858 0.04703754 -0.9232014 -0.3814271 0.04703921 -0.8820761 -0.4687528 0.04701942 -0.8820794 -0.4687485 0.04702657 -0.8820797 -0.4687472 0.04702728 -0.8327208 -0.5516924 0.04705053 -0.8327213 -0.5516898 0.04704153 -0.8327189 -0.551694 0.04702728 -0.9557055 -0.290543 0.04704052 -0.9557252 -0.2904763 0.04704105 -0.923201 -0.3814274 0.04704642 -0.9792844 -0.1969483 0.04703563 -0.9792844 -0.196951 0.04703664 -0.9557048 -0.2905439 0.04703527 -0.9947123 0.09129697 0.04703438 -0.9988802 -0.005132377 0.04705774 -0.998879 -0.00513488 0.04705798 -0.9937199 -0.1015188 0.04705137 -0.9937209 -0.1015143 0.04705947 -0.9937205 -0.1015132 0.04705977 -0.9792833 -0.1969506 0.04702889 -0.9947129 0.0912944 0.04705411 -0.9947115 0.09129697 0.04705297 -0.9812563 0.1868747 0.04705214 -0.9812563 0.1868746 0.04704976 -0.9812563 0.1868754 0.04704964 -0.9586396 0.2807072 0.04704326 -0.9586396 0.2807079 0.04704523 -0.8868489 0.4596584 0.04705995 -0.8868468 0.4596609 0.04705989 -0.9270724 0.3719169 0.04704946 -0.9270732 0.3719161 0.04704308 -0.9270765 0.3719088 0.04704511 -0.7183789 0.6940594 0.04704523 -0.782015 0.6214816 0.04703938 -0.7820148 0.6214822 0.04704052 -0.8383516 0.5430964 0.0470336 -0.8383474 0.5431036 0.04704529 -0.8383463 0.5431044 0.04704517 -0.8868489 0.4596585 0.04701673 -0.7183863 0.6940537 0.04704827 -0.718383 0.6940551 0.04704844 -0.6480426 0.7601494 0.04704177 -0.6480436 0.7601491 0.04704183 -0.6480437 0.7601491 0.04704099 -0.5716514 0.8191471 0.04705154 -0.571652 0.819146 0.04703837 -0.4036238 0.913715 0.04705411 -0.4036208 0.9137156 0.04705637 -0.4899252 0.8704936 0.04704701 -0.4899263 0.8704935 0.04705029 -0.4899243 0.8704945 0.04704046 -0.2205552 0.9742395 0.04703843 -0.3135501 0.9484059 0.04703891 -0.3135524 0.9484052 0.04704266 -0.313552 0.9484051 0.04704344 -0.4036248 0.9137143 0.04704028 -0.1254971 0.9909782 0.0470373 -0.1254978 0.9909781 0.04703766 -0.220555 0.9742397 0.04704159 0.163111 0.9854856 0.04704171 0.06723344 0.9966278 0.04703974 0.06723368 0.9966278 0.04709285 0.009503066 0.9988453 0.1181712 -0.02909541 0.992567 0.04706138 -0.0387656 0.9981395 0.04704225 -0.1254974 0.990978 0.1794717 0.8453997 0.5030797 0.1794766 0.8453994 0.5030784 0.1794763 0.7928984 0.5823233 0.1794816 0.7928982 0.5823219 0.1794815 0.7329947 0.656129 0.1794764 0.7329946 0.6561303 0.1794764 0.6662466 0.7238119 0.1794759 0.6662465 0.7238121 0.179476 0.5932791 0.7847346 0.1794705 0.5932789 0.784736 0.1794705 0.5147707 0.8383326 0.1794744 0.5147709 0.8383315 0.1794738 0.4314584 0.8841 0.179476 0.4314585 0.8840994 0.1794751 0.3441153 0.9216145 0.1794724 0.344115 0.9216151 0.1794731 0.2535601 0.9505245 0.1794754 0.2535604 0.9505239 0.1794753 0.1606388 0.9705584 0.1794741 0.1606386 0.9705588 0.1794738 0.06621515 0.9815318 0.1794744 0.06621527 0.9815317 0.1794745 -0.02882498 0.9833402 0.1794746 -0.02882492 0.9833402 0.1794736 -0.1235964 0.9759678 0.1794749 -0.1235961 0.9759675 0.1794748 -0.2172137 0.9594827 0.1794711 -0.2172146 0.9594832 0.1794708 -0.3088034 0.93404 0.1794723 -0.3088031 0.9340398 0.1794715 -0.3975105 0.8998752 0.1794723 -0.3975102 0.8998752 0.179472 -0.482505 0.857309 0.1794732 -0.4825046 0.8573089 0.1794728 -0.5629938 0.8067389 0.1794793 -0.562992 0.8067386 0.1794798 -0.6382254 0.7486355 0.1794698 -0.6382282 0.7486357 0.1794703 -0.7075023 0.683543 0.1794699 -0.7075023 0.6835429 0.1794692 -0.7701712 0.6120679 0.1794773 -0.7701692 0.6120682 0.179477 -0.8256471 0.5348785 0.179466 -0.8256499 0.5348778 0.1794654 -0.8734185 0.4526946 0.1794779 -0.8734152 0.4526957 0.1794782 -0.9130298 0.3662842 0.1794742 -0.9130308 0.3662837 0.179474 -0.9441191 0.2764564 0.179469 -0.9441203 0.2764557 0.1794694 -0.966395 0.1840424 0.1794789 -0.9663928 0.1840439 0.1794785 -0.9796442 0.08991491 0.1794742 -0.979645 0.08991414 0.1794747 -0.9837496 -0.005056977 0.1794739 -0.9837497 -0.005057096 0.1794734 -0.9786695 -0.09997713 0.1794755 -0.9786691 -0.09997665 0.1794758 -0.964451 -0.1939656 0.1794784 -0.9644507 -0.193965 0.1794776 -0.9412285 -0.286141 0.1794734 -0.941229 -0.2861421 0.1794731 -0.909217 -0.3756512 0.1794819 -0.9092162 -0.375649 0.1794812 -0.8687164 -0.4616473 0.1794816 -0.8687164 -0.4616472 0.1794815 -0.8201065 -0.543334 0.1794765 -0.8201066 -0.5433353 0.1794758 -0.7638377 -0.6199519 0.17948 -0.7638377 -0.6199508 0.1794793 -0.7004398 -0.6907758 0.1794733 -0.7004398 -0.6907774 0.1794729 -0.6304993 -0.7551558 0.1794773 -0.6304994 -0.7551546 0.1794775 -0.5546724 -0.8124815 0.1794715 -0.5546721 -0.8124831 0.1794694 -0.4736674 -0.8622239 0.17948 -0.4736683 -0.8622211 0.1794806 -0.3882398 -0.9039118 0.1794811 -0.3882398 -0.9039117 0.1794822 -0.2991861 -0.9371626 0.1794757 -0.2991852 -0.9371642 0.1794762 -0.2073438 -0.9616636 0.1794707 -0.2073429 -0.9616648 0.1794703 -0.1135591 -0.9771871 0.1794646 -0.1135581 -0.9771883 0.1794632 -0.0187155 -0.9835866 0.179474 -0.01871758 -0.9835847 0.1794747 0.07629781 -0.9807994 0.1794704 0.07629871 -0.9808002 0.1794692 0.1706054 -0.9688574 0.1794771 0.1706036 -0.9688562 0.1794767 0.263317 -0.9478672 0.1794826 0.2633156 -0.9478664 0.1794824 0.3535681 -0.9180282 0.1794664 0.3535721 -0.9180298 0.1794674 0.440523 -0.8796198 0.1794781 0.4405201 -0.879619 0.1794772 0.5233597 -0.8329962 0.179467 0.5233624 -0.8329967 0.1794663 0.6013141 -0.7785969 0.1794775 0.6013111 -0.7785967 0.1794786 0.6736496 -0.7169265 0.1794731 0.6736511 -0.7169265 0.179474 0.7396996 -0.6485629 0.1794785 0.7396984 -0.6485629 0.1794781 0.7988408 -0.5741438 0.1794714 0.7988425 -0.5741434 0.1794716 0.8505254 -0.4943647 0.1794707 0.8505257 -0.4943647 0.1794712 0.8942691 -0.4099668 0.1794704 0.8942694 -0.4099667 0.1794704 0.9296616 -0.3217446 0.1794792 0.9296596 -0.3217458 0.1794787 0.9563722 -0.2305206 0.1794751 0.9563729 -0.2305201 0.179475 0.974157 -0.1371379 0.1794663 0.9741588 -0.1371364 0.1794658 0.9828467 -0.04247742 0.1794717 0.9828456 -0.04247856 0.1794711 0.9823573 0.05257761 0.1794815 0.9823555 0.05257546 0.1794815 0.9726952 0.147141 0.1794709 0.9726968 0.1471433 0.1794716 0.9539539 0.2403373 0.1794831 0.9539524 0.2403345 0.1794829 0.9263031 0.331283 0.1794815 0.9263032 0.3312833 0.179481 0.8900066 0.4191359 0.1794711 0.8900074 0.4191385 0.345779 0.8063452 0.4798379 0.3457742 0.8063462 0.4798397 0.3457737 0.7562716 0.5554222 0.3457678 0.7562726 0.5554245 0.3457679 0.6991347 0.6258237 0.3457823 0.6991327 0.625818 0.3457816 0.6354682 0.6903734 0.3457791 0.6354683 0.6903743 0.3457786 0.5658717 0.7484828 0.3457793 0.5658716 0.7484825 0.3457787 0.4909908 0.7996031 0.3457718 0.4909909 0.799606 0.345772 0.4115274 0.8432598 0.3457722 0.4115274 0.8432596 0.3457727 0.3282194 0.8790411 0.3457717 0.3282193 0.8790416 0.3457711 0.2418475 0.9066158 0.3457694 0.2418473 0.9066166 0.3457696 0.1532178 0.9257255 0.3457728 0.1532182 0.9257243 0.3457728 0.06315684 0.9361904 0.3457705 0.06315642 0.9361912 0.3457706 -0.02749341 0.9379162 0.3457705 -0.02749347 0.9379162 0.3457717 -0.117887 0.9308838 0.345772 -0.1178869 0.9308836 0.3457725 -0.2071794 0.9151601 0.3457715 -0.2071797 0.9151605 0.3457716 -0.2945395 0.890892 0.345777 -0.2945377 0.8908904 0.3457782 -0.3791459 0.8583041 0.3457739 -0.3791473 0.8583052 0.3457742 -0.4602149 0.8177056 0.3457708 -0.4602161 0.8177064 0.345771 -0.5369858 0.769473 0.3457649 -0.5369881 0.7694741 0.3457645 -0.6087484 0.7140536 0.3457815 -0.6087415 0.7140511 0.3457821 -0.6748146 0.6519663 0.3457683 -0.6748202 0.6519677 0.3457683 -0.7345947 0.5837936 0.3457719 -0.7345931 0.5837934 0.3457722 -0.7875073 0.5101702 0.3457731 -0.787507 0.5101702 0.3457738 -0.833069 0.4317829 0.3457673 -0.8330718 0.4317828 0.3457676 -0.8708551 0.3493656 0.3457642 -0.8708564 0.3493654 0.3457643 -0.9005095 0.2636846 0.3457736 -0.9005057 0.2636855 0.3457737 -0.9217511 0.1755431 0.3457606 -0.9217564 0.1755414 0.3457606 -0.9343957 0.08575814 0.3457782 -0.9343888 0.08576124 0.3457779 -0.938304 -0.004821896 0.3457709 -0.9383065 -0.004823386 0.3457711 -0.9334608 -0.09535843 0.3457694 -0.9334614 -0.09535884 0.3457689 -0.9199007 -0.1850046 0.3457631 -0.9199024 -0.1850062 0.3457634 -0.8977521 -0.2729266 0.3457759 -0.8977484 -0.2729228 0.3457762 -0.8672151 -0.3582971 0.3457733 -0.8672159 -0.3582981 0.3457732 -0.8285885 -0.4403205 0.3457635 -0.8285906 -0.4403239 0.3457636 -0.7822241 -0.5182404 0.3457798 -0.7822209 -0.5182342 0.34578 -0.7285528 -0.5913096 0.3457648 -0.728555 -0.5913155 0.345764 -0.6680835 -0.6588716 0.3457836 -0.6680812 -0.6588637 0.3457836 -0.6013718 -0.7202678 0.3457782 -0.6013722 -0.72027 0.3457776 -0.5290496 -0.774948 0.3457738 -0.5290498 -0.7749496 0.3457757 -0.4517866 -0.8223918 0.3457708 -0.4517865 -0.8223937 0.3457698 -0.370305 -0.8621587 0.3457756 -0.3703053 -0.8621562 0.3457745 -0.2853677 -0.893871 0.3457638 -0.2853668 -0.8938754 0.3457639 -0.1977624 -0.9172444 0.3457831 -0.1977649 -0.9172366 0.345783 -0.1083149 -0.9320418 0.3457729 -0.1083132 -0.9320458 0.3457729 -0.01785206 -0.9381483 0.3457673 -0.01785093 -0.9381504 0.3457662 0.07277452 -0.9354944 0.345771 0.07277333 -0.9354925 0.345772 0.1627256 -0.9241006 0.3457787 0.1627238 -0.9240984 0.3457795 0.2511513 -0.9040794 0.3457725 0.2511534 -0.9040815 0.3457731 0.3372351 -0.8756217 0.3457705 0.337236 -0.8756225 0.3457697 0.4201728 -0.8389864 0.3457675 0.4201735 -0.8389869 0.345768 0.4991844 -0.7945184 0.3457669 0.4991847 -0.7945186 0.3457671 0.5735374 -0.7426306 0.3457677 0.573537 -0.7426305 0.3457671 0.6425331 -0.6838102 0.3457694 0.6425321 -0.68381 0.3457689 0.705531 -0.6186032 0.345772 0.7055297 -0.6186029 0.3457716 0.7619393 -0.5476227 0.345768 0.7619407 -0.5476228 0.3457683 0.8112382 -0.4715261 0.345781 0.8112328 -0.471526 0.3457815 0.8529543 -0.3910298 0.3457673 0.8529602 -0.3910292 0.3457675 0.8867175 -0.3068824 0.3457664 0.886718 -0.3068823 0.3457669 0.9121962 -0.2198711 0.3457738 0.9121934 -0.2198719 0.3457739 0.9291561 -0.1308034 0.3457713 0.929157 -0.130803 0.3457714 0.9374437 -0.04051607 0.3457669 0.9374454 -0.04051524 0.3457671 0.9369793 0.05015009 0.3457729 0.9369772 0.05014878 0.3457731 0.9277631 0.1403442 0.3457737 0.927763 0.140344 0.3457735 0.9098864 0.2292324 0.3457618 0.9098899 0.2292358 0.3457622 0.883518 0.3159815 0.3457629 0.8835179 0.3159813 0.3457633 0.848896 0.3997792 0.3457792 0.8488921 0.3997736 0.5017952 0.7433278 0.4423407 0.5018067 0.7433235 0.4423351 0.5018069 0.6971625 0.51201 0.5018031 0.6971637 0.5120121 0.5018027 0.6444923 0.5769088 0.501795 0.6444945 0.5769131 0.5017951 0.5858063 0.6364219 0.5017987 0.5858054 0.6364198 0.5017992 0.5216471 0.6899868 0.5017997 0.521647 0.6899866 0.5018001 0.4526181 0.7371115 0.501801 0.452618 0.737111 0.5018014 0.3793637 0.7773535 0.5018019 0.3793637 0.7773532 0.5018016 0.3025666 0.8103385 0.5018028 0.3025667 0.8103379 0.5018032 0.2229449 0.8357565 0.5018044 0.222945 0.8357559 0.5018038 0.1412427 0.8533718 0.5018026 0.1412425 0.8533725 0.5018026 0.0582202 0.8630205 0.5018045 0.05822062 0.8630194 0.5018049 -0.02534389 0.8646095 0.5018019 -0.02534461 0.8646112 0.5018013 -0.1086735 0.8581292 0.5018014 -0.1086733 0.858129 0.5018014 -0.1909881 0.8436343 0.501806 -0.1909865 0.8436319 0.5018069 -0.2715165 0.8212603 0.5017988 -0.2715197 0.8212644 0.5017978 -0.3495154 0.7912257 0.5018004 -0.3495142 0.7912244 0.5017996 -0.4242468 0.7537983 0.5017988 -0.4242473 0.7537986 0.5017977 -0.49502 0.7093336 0.5018095 -0.495014 0.7093296 0.5018104 -0.5611641 0.658241 0.5018014 -0.561169 0.6582437 0.5018012 -0.622077 0.6010122 0.5018079 -0.6220731 0.6010106 0.5018078 -0.6771762 0.5381649 0.5017989 -0.6771814 0.5381664 0.5017988 -0.7259604 0.4702973 0.5018025 -0.7259582 0.4702969 0.5018019 -0.7679604 0.3980348 0.5018099 -0.7679555 0.3980343 0.5018095 -0.8027855 0.3220601 0.5018002 -0.8027913 0.3220601 0.5018003 -0.830127 0.2430757 0.501799 -0.8301277 0.2430756 0.5017988 -0.8497131 0.1618198 0.5018163 -0.8497024 0.1618218 0.5018162 -0.8613536 0.07905942 0.5017945 -0.8613667 0.0790556 0.5017945 -0.8649755 -0.004447698 0.5018061 -0.8649687 -0.004445016 0.5018059 -0.8605019 -0.08790594 0.501809 -0.8605001 -0.08790504 0.5018095 -0.8479989 -0.170544 0.5018087 -0.8479992 -0.1705443 0.5018091 -0.8275801 -0.2515925 0.5018047 -0.8275823 -0.2515942 0.5018049 -0.7994371 -0.330291 0.5017926 -0.7994427 -0.3302964 0.5017924 -0.7638324 -0.4059118 0.5018055 -0.7638271 -0.4059056 0.5018051 -0.7210853 -0.4777316 0.501794 -0.7210893 -0.4777373 0.5017942 -0.6716158 -0.5451006 0.5018021 -0.6716134 -0.5450963 0.5018031 -0.6158658 -0.607374 0.5018033 -0.6158657 -0.6073738 0.5018034 -0.5543727 -0.6639761 0.5018021 -0.554373 -0.6639769 0.5018022 -0.4877018 -0.7143819 0.5018017 -0.4877019 -0.7143822 0.5018018 -0.4164776 -0.7581171 0.5017991 -0.4164777 -0.7581187 0.5017995 -0.3413628 -0.794776 0.5018026 -0.3413627 -0.794774 0.5018032 -0.2630647 -0.8240087 0.5018013 -0.2630646 -0.8240101 0.5018005 -0.1823049 -0.8455538 0.5018036 -0.1823052 -0.8455519 0.5018038 -0.09984797 -0.8591992 0.5018112 -0.09984916 -0.8591949 0.5018117 -0.01645767 -0.8648204 0.5018073 -0.01645672 -0.8648229 0.5018072 0.06708705 -0.862374 0.5018107 0.0670861 -0.862372 0.5018108 0.1500033 -0.8518714 0.5017958 0.1500082 -0.8518794 0.5017961 0.2315236 -0.8334252 0.5017961 0.2315236 -0.8334251 0.5017958 0.3108814 -0.8071887 0.5018057 0.3108773 -0.8071842 0.5018057 0.387332 -0.7734113 0.5018051 0.3873322 -0.7734115 0.5018048 0.4601695 -0.732418 0.5018119 0.4601659 -0.7324153 0.501812 0.5287047 -0.6845846 0.5018 0.5287111 -0.6845884 0.5018004 0.5923147 -0.6303647 0.5018035 0.5923129 -0.630364 0.5018036 0.6503881 -0.5702531 0.5018079 0.6503855 -0.5702521 0.5018081 0.7023864 -0.5048187 0.5018152 0.7023822 -0.5048177 0.5018154 0.7478251 -0.4346709 0.5018032 0.7478327 -0.4346721 0.5018036 0.786292 -0.3604693 0.5018023 0.7862927 -0.3604694 0.501802 0.8174127 -0.2828979 0.5017975 0.8174154 -0.2828978 0.5017969 0.8409035 -0.2026851 0.5018053 0.8408982 -0.2026858 0.5018059 0.8565344 -0.12058 0.5018059 0.8565346 -0.12058 0.5018056 0.8641735 -0.03735089 0.5017989 0.8641775 -0.03734952 0.5017989 0.8637479 0.04623115 0.5018014 0.8637465 0.04623043 0.5018015 0.8552525 0.129377 0.5018084 0.8552488 0.1293748 0.5018083 0.8387694 0.2113158 0.5018091 0.8387689 0.2113155 0.5018087 0.8144587 0.2912818 0.5018035 0.8144611 0.291284 0.5018034 0.7825463 0.3685303 0.5017951 0.7825499 0.3685341 0.6430287 0.6581286 0.3916386 0.6430231 0.658132 0.3916422 0.643023 0.6172626 0.4533302 0.6430239 0.6172621 0.4533296 0.643024 0.570626 0.5107896 0.6430273 0.5706245 0.510787 0.6430277 0.5186631 0.563475 0.6430218 0.5186653 0.5634797 0.6430214 0.4618608 0.6109076 0.6430226 0.4618604 0.6109066 0.6430223 0.4007437 0.6526306 0.6430203 0.4007442 0.6526323 0.6430208 0.3358851 0.6882627 0.6430228 0.3358848 0.688261 0.6430231 0.26789 0.7174651 0.6430206 0.2678902 0.7174674 0.6430209 0.1973938 0.7399728 0.6430212 0.1973938 0.7399727 0.6430221 0.1250551 0.7555686 0.6430224 0.1250551 0.7555684 0.6430224 0.05154794 0.7641108 0.6430212 0.05154776 0.7641117 0.6430207 -0.02244013 0.76552 0.6430239 -0.02243924 0.7655173 0.6430247 -0.09621781 0.7597771 0.6430234 -0.09621828 0.7597783 0.6430231 -0.1690986 0.746945 0.6430222 -0.169099 0.7469458 0.6430221 -0.2403991 0.7271389 0.6430227 -0.2403988 0.7271384 0.6430231 -0.3094561 0.7005414 0.6430214 -0.3094571 0.7005425 0.6430212 -0.3756251 0.6674051 0.6430259 -0.375622 0.6674022 0.6430265 -0.4382816 0.6280336 0.6430205 -0.4382857 0.6280367 0.6430198 -0.496854 0.582805 0.6430217 -0.4968526 0.5828041 0.643022 -0.550782 0.5321295 0.6430271 -0.5507781 0.5321276 0.6430277 -0.5995641 0.4764853 0.6430268 -0.5995648 0.4764856 0.6430267 -0.6427535 0.4163946 0.6430237 -0.6427562 0.4163954 0.6430236 -0.6799432 0.3524172 0.6430174 -0.6799486 0.3524182 0.6430175 -0.7107875 0.2851485 0.6430315 -0.7107753 0.2851476 0.6430314 -0.7349781 0.2152156 0.6430271 -0.7349819 0.2152155 0.6430273 -0.752322 0.1432743 0.6430207 -0.7523279 0.1432737 0.6430209 -0.7626432 0.06999611 0.6430327 -0.762633 0.06999832 0.6430329 -0.7658285 -0.003934502 0.6430198 -0.7658394 -0.003937959 0.64302 -0.7618841 -0.0778321 0.6430223 -0.7618823 -0.07783132 0.6430222 -0.7508138 -0.1510001 0.6430272 -0.75081 -0.1509981 0.6430271 -0.7327319 -0.2227555 0.6430191 -0.7327378 -0.2227595 0.6430187 -0.7078173 -0.2924407 0.6430289 -0.7078105 -0.2924351 0.6430289 -0.676281 -0.3593854 0.6430277 -0.6762817 -0.3593861 0.6430276 -0.6384403 -0.422977 0.6430251 -0.6384417 -0.4229788 0.6430247 -0.5946377 -0.4826232 0.6430247 -0.5946378 -0.4826233 0.6430243 -0.5452831 -0.5377605 0.6430134 -0.5452875 -0.5377689 0.6430134 -0.4908402 -0.5878858 0.643021 -0.4908376 -0.5878797 0.6430215 -0.4318078 -0.6325072 0.6430181 -0.4318087 -0.6325101 0.6430177 -0.368745 -0.6712342 0.643027 -0.3687434 -0.6712262 0.6430269 -0.30224 -0.7036814 0.643016 -0.302241 -0.7036909 0.6430157 -0.2329151 -0.7295762 0.6430229 -0.2329151 -0.7295698 0.6430233 -0.1614115 -0.7486438 0.6430201 -0.1614112 -0.7486465 0.6430197 -0.08840501 -0.76073 0.643019 -0.08840489 -0.7607306 0.6430196 -0.01457095 -0.7657111 0.6430223 -0.0145716 -0.7657089 0.6430222 0.05939847 -0.7635406 0.6430222 0.05939847 -0.7635407 0.6430212 0.1328135 -0.7542442 0.6430254 0.1328119 -0.7542409 0.6430245 0.2049884 -0.7379019 0.6430281 0.2049868 -0.7378994 0.6430279 0.2752475 -0.7146706 0.6430225 0.2752503 -0.7146742 0.6430233 0.3429395 -0.6847727 0.6430185 0.3429424 -0.6847756 0.6430191 0.4074308 -0.6484804 0.6430134 0.4074345 -0.6484836 0.6430135 0.4681196 -0.6061334 0.6430221 0.4681134 -0.6061292 0.6430224 0.5244292 -0.5581185 0.643022 0.5244296 -0.5581187 0.6430227 0.5758475 -0.5048977 0.6430199 0.5758496 -0.5048986 0.6430199 0.6218905 -0.446965 0.6430191 0.6218911 -0.4469652 0.643019 0.6621261 -0.384858 0.6430212 0.6621242 -0.3848575 0.643021 0.696178 -0.3191557 0.6430265 0.6961732 -0.319155 0.6430267 0.7237259 -0.2504748 0.6430235 0.7237287 -0.2504749 0.6430232 0.7445248 -0.1794543 0.6430246 0.7445237 -0.1794544 0.6430244 0.758368 -0.1067602 0.6430256 0.7583668 -0.1067603 0.6430259 0.76513 -0.0330708 0.6430233 0.7651323 -0.0330702 0.6430236 0.7647518 0.04093164 0.6430205 0.7647543 0.04093259 0.6430204 0.757234 0.1145493 0.64302 0.7572342 0.1145494 0.6430201 0.7426433 0.1870992 0.6430238 0.7426404 0.1870974 0.6430237 0.7211164 0.2578988 0.643023 0.7211167 0.2578992 0.643023 0.6928587 0.3262948 0.643029 0.6928549 0.3262913 0.7651211 0.5533261 0.3292721 0.7651192 0.5533277 0.3292738 0.7651194 0.5189646 0.3811403 0.7651247 0.5189606 0.3811352 0.7651247 0.4797514 0.4294447 0.7651261 0.4797505 0.4294433 0.7651258 0.4360653 0.47374 0.7651239 0.4360664 0.4737421 0.7651242 0.388307 0.5136173 0.7651241 0.388307 0.5136173 0.7651244 0.336923 0.5486962 0.7651261 0.3369223 0.5486943 0.7651258 0.282392 0.5786513 0.7651277 0.2823916 0.5786491 0.7651273 0.2252263 0.6032027 0.7651271 0.2252263 0.6032028 0.7651267 0.165957 0.6221249 0.7651261 0.165957 0.6221256 0.7651258 0.1051391 0.6352388 0.7651259 0.1051391 0.6352385 0.7651261 0.04333853 0.6424205 0.7651261 0.04333853 0.6424202 0.7651259 -0.0188663 0.6436043 0.7651258 -0.01886636 0.6436045 0.7651255 -0.08089512 0.6387793 0.7651268 -0.08089447 0.6387777 0.7651272 -0.1421678 0.6279878 0.7651258 -0.1421686 0.6279894 0.765126 -0.2021142 0.6113364 0.7651273 -0.2021132 0.6113349 0.7651275 -0.2601717 0.5889741 0.765125 -0.2601737 0.5889766 0.7651251 -0.3158043 0.561116 0.7651255 -0.3158038 0.5611157 0.7651255 -0.3684844 0.5280174 0.7651267 -0.3684833 0.5280164 0.7651267 -0.4177248 0.4899871 0.7651269 -0.4177246 0.4899869 0.7651268 -0.4630647 0.4473836 0.765125 -0.4630666 0.4473847 0.7651252 -0.5040826 0.4006049 0.765124 -0.504084 0.4006054 0.765124 -0.5403956 0.3500825 0.7651282 -0.5403907 0.3500809 0.7651281 -0.5716556 0.2962915 0.7651278 -0.5716561 0.2962916 0.7651278 -0.5975834 0.2397366 0.7651203 -0.5975925 0.2397378 0.7651202 -0.6179407 0.1809435 0.7651241 -0.6179358 0.1809434 0.7651242 -0.6325147 0.1204583 0.7651227 -0.6325166 0.1204582 0.7651225 -0.6411898 0.05884855 0.7651241 -0.641188 0.05884885 0.765124 -0.6438745 -0.003308236 0.765125 -0.6438733 -0.003307938 0.7651248 -0.6405484 -0.06543648 0.7651238 -0.6405494 -0.06543684 0.7651237 -0.631244 -0.1269521 0.7651215 -0.6312465 -0.1269533 0.7651213 -0.6160468 -0.187285 0.7651293 -0.6160384 -0.1872798 0.7651295 -0.5950868 -0.2458628 0.7651226 -0.5950936 -0.2458679 0.7651227 -0.5685862 -0.3021538 0.76512 -0.5685887 -0.3021562 0.7651203 -0.5367719 -0.3556219 0.7651252 -0.5367679 -0.3556174 0.7651251 -0.4999387 -0.4057644 0.7651283 -0.4999365 -0.4057614 0.7651283 -0.4584414 -0.4521172 0.7651289 -0.4584411 -0.4521166 0.765129 -0.4126639 -0.494253 0.7651289 -0.4126641 -0.4942532 0.7651286 -0.3630363 -0.5317735 0.7651322 -0.3630348 -0.5317693 0.7651322 -0.3100161 -0.5643251 0.7651265 -0.3100178 -0.5643318 0.7651264 -0.2541066 -0.5916178 0.7651284 -0.2541062 -0.5916153 0.7651284 -0.1958204 -0.6133783 0.7651249 -0.1958206 -0.6133826 0.7651247 -0.1357054 -0.629419 0.7651267 -0.1357055 -0.6294167 0.765127 -0.07432663 -0.6395751 0.7651233 -0.07432597 -0.6395795 0.7651228 -0.01225101 -0.643768 0.7651209 -0.01225048 -0.6437702 0.7651209 0.04994153 -0.6419469 0.7651281 0.04993861 -0.6419386 0.7651286 0.1116613 -0.6341213 0.7651285 0.1116613 -0.6341215 0.7651288 0.1723413 -0.6203842 0.7651261 0.1723429 -0.620387 0.7651266 0.2314121 -0.6008575 0.7651224 0.2314152 -0.6008618 0.7651222 0.2883271 -0.5757218 0.7651254 0.2883245 -0.5757188 0.7651255 0.3425446 -0.5452029 0.7651299 0.3425406 -0.5451991 0.7651301 0.3935614 -0.5095934 0.7651305 0.393561 -0.509593 0.7651305 0.4409053 -0.4692311 0.7651259 0.4409102 -0.4692342 0.7651256 0.4841399 -0.4244894 0.7651255 0.4841402 -0.4244896 0.7651255 0.522849 -0.3757815 0.7651267 0.5228477 -0.375781 0.7651271 0.5566744 -0.3235647 0.7651268 0.5566747 -0.3235648 0.7651269 0.5853041 -0.2683283 0.7651224 0.5853095 -0.2683291 0.7651225 0.6084742 -0.2105866 0.7651244 0.6084719 -0.2105864 0.7651244 0.6259559 -0.1508764 0.7651215 0.6259596 -0.1508763 0.7651212 0.6375992 -0.08975917 0.76512 0.6376007 -0.08975899 0.7651197 0.6432876 -0.02780103 0.7651305 0.6432746 -0.02780389 0.7651305 0.6429551 0.0344122 0.7651287 0.6429572 0.03441286 0.7651286 0.6366344 0.09630578 0.7651286 0.6366344 0.09630578 0.7651286 0.6243677 0.1573002 0.7651256 0.6243708 0.157302 0.7651258 0.6062738 0.2168282 0.76513 0.6062695 0.2168252 0.7651301 0.582513 0.2743255 0.7651211 0.5825216 0.2743327 0.864466 0.4319894 0.2570677 0.8644669 0.4319881 0.2570665 0.8644669 0.4051612 0.2975589 0.8644645 0.4051641 0.2975624 0.8644645 0.3745536 0.3352772 0.8644632 0.3745548 0.335279 0.8644632 0.3404478 0.369863 0.8644657 0.3404456 0.3698591 0.8644658 0.3031592 0.4009907 0.8644646 0.30316 0.4009925 0.8644644 0.2630434 0.42838 0.8644648 0.2630431 0.4283792 0.8644647 0.2204711 0.4517669 0.8644627 0.2204718 0.4517702 0.8644629 0.1758406 0.4709396 0.8644646 0.1758402 0.4709365 0.8644646 0.1295673 0.485709 0.8644637 0.1295674 0.4857106 0.8644638 0.08208471 0.4959481 0.8644644 0.08208477 0.495947 0.8644642 0.03383535 0.5015543 0.8644646 0.03383547 0.5015538 0.8644648 -0.01472908 0.5024775 0.864464 -0.01472944 0.5024789 0.864464 -0.06315708 0.4987117 0.8644641 -0.0631569 0.4987112 0.8644641 -0.1109944 0.4902877 0.8644643 -0.1109943 0.4902875 0.8644642 -0.1577954 0.4772865 0.864463 -0.1577965 0.4772882 0.8644629 -0.203125 0.4598305 0.8644648 -0.203123 0.4598279 0.8644648 -0.2465549 0.4380768 0.8644626 -0.2465575 0.4380796 0.8644623 -0.2876877 0.4122385 0.8644647 -0.2876846 0.4122359 0.8644648 -0.3261281 0.3825455 0.8644642 -0.326129 0.3825463 0.864464 -0.3615271 0.3492851 0.8644627 -0.3615291 0.3492863 0.8644626 -0.3935524 0.3127634 0.864464 -0.3935501 0.3127623 0.8644638 -0.4218993 0.2733191 0.8644604 -0.4219049 0.2733212 0.8644604 -0.4463148 0.2313253 0.8644635 -0.4463094 0.231324 0.8644635 -0.4665521 0.1871685 0.8644666 -0.4665467 0.1871677 0.8644666 -0.4824331 0.141265 0.8644656 -0.4824349 0.1412652 0.8644654 -0.4938169 0.09404426 0.8644654 -0.4938169 0.09404426 0.8644655 -0.5005882 0.0459451 0.864463 -0.5005924 0.04594445 0.8644631 -0.5026897 -0.00258255 0.8644624 -0.5026907 -0.002582848 0.8644627 -0.5000944 -0.05108815 0.8644627 -0.5000942 -0.05108809 0.8644628 -0.4928286 -0.0991162 0.8644663 -0.4928229 -0.09911364 0.8644663 -0.4809567 -0.1462141 0.8644614 -0.4809643 -0.1462184 0.8644614 -0.4646069 -0.1919557 0.8644642 -0.4646029 -0.1919528 0.8644642 -0.4439071 -0.2358989 0.8644666 -0.4439039 -0.2358961 0.8644663 -0.4190647 -0.2776378 0.8644648 -0.4190665 -0.2776398 0.8644649 -0.390314 -0.3167893 0.8644639 -0.390315 -0.3167907 0.8644639 -0.3579198 -0.3529811 0.8644618 -0.3579217 -0.3529841 0.8644619 -0.3221813 -0.3858819 0.8644636 -0.3221799 -0.3858791 0.8644636 -0.2834348 -0.4151714 0.8644606 -0.2834367 -0.4151765 0.8644604 -0.2420427 -0.4405945 0.8644627 -0.2420417 -0.4405906 0.8644627 -0.198389 -0.461894 0.864462 -0.1983892 -0.4618952 0.8644621 -0.1528833 -0.4788862 0.8644636 -0.1528831 -0.4788836 0.8644638 -0.1059484 -0.4914035 0.8644645 -0.1059484 -0.4914022 0.8644645 -0.05802917 -0.4993332 0.8644637 -0.05802893 -0.4993349 0.8644638 -0.009563446 -0.5026041 0.8644667 -0.009564518 -0.5025992 0.8644669 0.03898841 -0.5011755 0.8644633 0.03899043 -0.5011817 0.8644632 0.08717685 -0.4950795 0.8644613 0.08717811 -0.4950823 0.8644616 0.134553 -0.4843569 0.864461 0.1345535 -0.4843579 0.8644607 0.1806744 -0.4691103 0.8644675 0.1806677 -0.4691006 0.8644671 0.2251004 -0.4494735 0.8644666 0.2251011 -0.4494742 0.8644663 0.2674301 -0.4256515 0.8644627 0.2674347 -0.425656 0.8644626 0.3072677 -0.397858 0.8644626 0.3072677 -0.3978581 0.8644624 0.3442313 -0.366346 0.8644631 0.3442305 -0.3663455 0.864463 0.3779823 -0.3314109 0.8644638 0.377981 -0.3314102 0.8644636 0.4082025 -0.2933828 0.8644636 0.4082025 -0.2933829 0.8644635 0.4346122 -0.2526165 0.8644635 0.4346121 -0.2526165 0.8644635 0.4569645 -0.209491 0.8644652 0.4569612 -0.2094904 0.8644652 0.4750469 -0.1644094 0.8644637 0.4750494 -0.1644097 0.8644639 0.4886997 -0.1177919 0.8644666 0.4886949 -0.1177919 0.8644668 0.4977816 -0.07007694 0.8644648 0.497785 -0.07007658 0.8644647 0.5022247 -0.02170574 0.8644622 0.502229 -0.02170491 0.8644621 0.5019794 0.02686738 0.8644633 0.5019774 0.02686679 0.8644635 0.4970407 0.07518845 0.8644622 0.4970428 0.07518929 0.8644625 0.487465 0.1228107 0.864465 0.4874609 0.1228086 0.864465 0.4733329 0.1692814 0.8644613 0.4733384 0.1692851 0.8644613 0.4547903 0.2141785 0.864466 0.4547839 0.2141734 0.9380636 0.2977348 0.1771744 0.9380616 0.2977386 0.177178 0.9380617 0.2792481 0.2050873 0.9380638 0.2792442 0.2050828 0.9380638 0.2581472 0.2310764 0.9380625 0.2581492 0.2310792 0.9380626 0.2346414 0.2549153 0.9380632 0.2346407 0.2549141 0.938063 0.2089427 0.2763704 0.9380635 0.2089422 0.2763692 0.9380635 0.1812933 0.2952449 0.938063 0.1812938 0.2952465 0.938063 0.1519525 0.3113651 0.9380626 0.1519529 0.3113663 0.9380626 0.1211918 0.3245783 0.9380626 0.1211918 0.3245782 0.9380627 0.08930027 0.3347593 0.9380625 0.08930033 0.33476 0.9380625 0.05657404 0.3418159 0.9380627 0.0565741 0.3418154 0.9380627 0.02332013 0.3456798 0.9380624 0.02332001 0.345681 0.9380624 -0.01015174 0.3463177 0.9380627 -0.0101515 0.3463168 0.9380628 -0.04352861 0.3437204 0.9380623 -0.04352897 0.3437213 0.9380623 -0.07649946 0.3379158 0.9380622 -0.07649958 0.3379162 0.938062 -0.1087564 0.3289555 0.9380629 -0.1087551 0.3289532 0.9380629 -0.1399963 0.3169212 0.9380627 -0.1399966 0.3169216 0.9380627 -0.1699303 0.3019305 0.9380629 -0.1699298 0.30193 0.938063 -0.1982774 0.2841194 0.9380627 -0.198278 0.28412 0.9380627 -0.2247731 0.2636579 0.9380617 -0.2247753 0.2636595 0.9380618 -0.2491729 0.2407345 0.9380629 -0.2491701 0.2407329 0.9380629 -0.2712414 0.21556 0.9380636 -0.2712395 0.2155591 0.9380639 -0.2907774 0.188374 0.9380645 -0.2907758 0.1883734 0.9380645 -0.3075989 0.1594299 0.9380628 -0.3076034 0.1594311 0.9380627 -0.3215545 0.1289999 0.9380618 -0.3215572 0.1290004 0.9380617 -0.3325062 0.09736406 0.9380613 -0.3325074 0.09736412 0.9380614 -0.3403522 0.06481748 0.938062 -0.3403504 0.06481754 0.9380619 -0.3450175 0.03166592 0.9380627 -0.3450151 0.03166621 0.9380628 -0.3464608 -0.001779794 0.9380626 -0.3464614 -0.001779913 0.9380624 -0.3446723 -0.0352109 0.9380628 -0.3446714 -0.03521054 0.9380628 -0.3396641 -0.06831175 0.938062 -0.3396662 -0.06831264 0.938062 -0.3314877 -0.1007757 0.9380638 -0.3314831 -0.100773 0.9380639 -0.3202089 -0.1322969 0.9380644 -0.3202075 -0.132296 0.9380644 -0.3059449 -0.162582 0.9380621 -0.3059498 -0.1625862 0.9380621 -0.2888298 -0.1913552 0.9380625 -0.288829 -0.1913543 0.9380625 -0.269012 -0.2183372 0.9380624 -0.2690123 -0.2183377 0.9380624 -0.246684 -0.2432815 0.938064 -0.2466818 -0.243278 0.9380639 -0.2220498 -0.2659507 0.9380618 -0.2220526 -0.2659562 0.9380618 -0.1953485 -0.286145 0.938063 -0.1953473 -0.2861422 0.938063 -0.1668179 -0.3036602 0.9380622 -0.1668186 -0.3036627 0.9380621 -0.1367325 -0.318345 0.9380629 -0.1367322 -0.3183431 0.9380629 -0.1053681 -0.3300538 0.9380642 -0.1053678 -0.3300504 0.9380641 -0.07302188 -0.3386791 0.9380618 -0.07302182 -0.3386854 0.9380616 -0.03999358 -0.3441525 0.9380641 -0.03999429 -0.3441458 0.938064 -0.006592333 -0.3463989 0.9380623 -0.00659132 -0.346404 0.9380623 0.02687162 -0.3454232 0.9380619 0.02687191 -0.3454241 0.9380618 0.06008517 -0.3412182 0.9380638 0.06008309 -0.3412132 0.9380636 0.09273499 -0.3338215 0.9380642 0.09273427 -0.3338202 0.9380643 0.1245195 -0.3233112 0.9380622 0.1245228 -0.3233162 0.9380623 0.1551447 -0.3097891 0.9380615 0.1551459 -0.3097906 0.9380618 0.1843209 -0.2933701 0.9380633 0.1843177 -0.2933668 0.9380633 0.2117718 -0.2742076 0.9380633 0.211772 -0.2742077 0.9380633 0.237248 -0.2524893 0.9380636 0.237247 -0.2524886 0.9380636 0.2605082 -0.2284122 0.938062 0.2605124 -0.2284145 0.9380619 0.2813413 -0.2022049 0.9380626 0.2813397 -0.2022042 0.9380625 0.299542 -0.1741072 0.9380629 0.2995408 -0.1741068 0.9380631 0.314946 -0.1443841 0.9380627 0.3149465 -0.1443842 0.9380629 0.3274109 -0.113314 0.9380627 0.3274114 -0.1133141 0.9380629 0.3368197 -0.08118379 0.9380632 0.3368186 -0.08118379 0.9380632 0.3430814 -0.04829788 0.938064 0.3430788 -0.04829806 0.9380642 0.3461385 -0.01496058 0.9380629 0.3461419 -0.01495993 0.9380629 0.3459699 0.01851642 0.9380615 0.3459738 0.01851749 0.9380614 0.3425716 0.0518226 0.9380631 0.3425672 0.05182093 0.9380632 0.3359665 0.08464151 0.9380615 0.3359706 0.0846436 0.9380615 0.3262326 0.1166742 0.9380636 0.3262279 0.1166712 0.9380636 0.313444 0.147613 0.9380636 0.313444 0.147613 0.9836758 0.1546397 0.09202283 0.9836764 0.1546378 0.09202098 0.9836764 0.1450341 0.1065169 0.9836763 0.1450342 0.106517 0.9836764 0.1340772 0.1200172 0.9836764 0.134077 0.1200169 0.9836764 0.1218677 0.1323972 0.9836763 0.121868 0.1323978 0.9836763 0.1085208 0.1435418 0.9836764 0.1085204 0.1435409 0.9836764 0.09416037 0.1533444 0.9836763 0.09416061 0.1533452 0.9836763 0.0789209 0.1617172 0.9836767 0.07892048 0.1617154 0.9836766 0.06294429 0.1685775 0.9836763 0.06294459 0.1685794 0.9836763 0.04638051 0.1738674 0.9836766 0.04638046 0.173866 0.9836764 0.02938324 0.1775308 0.9836765 0.02938324 0.1775311 0.9836764 0.0121119 0.1795383 0.9836765 0.01211196 0.179538 0.9836764 -0.005272448 0.179869 0.9836764 -0.005272567 0.1798695 0.9836763 -0.02260798 0.178521 0.9836764 -0.02260774 0.1785203 0.9836764 -0.03973186 0.1755048 0.9836765 -0.0397318 0.1755048 0.9836766 -0.05648499 0.1708504 0.9836765 -0.05648511 0.1708506 0.9836766 -0.07271063 0.1646013 0.9836766 -0.07271081 0.1646015 0.9836766 -0.08825749 0.1568154 0.9836764 -0.08825802 0.1568161 0.9836764 -0.1029812 0.1475659 0.9836764 -0.1029812 0.1475657 0.9836764 -0.1167423 0.1369377 0.9836766 -0.1167413 0.136937 0.9836767 -0.1294128 0.1250304 0.9836765 -0.1294134 0.1250308 0.9836766 -0.1408764 0.1119573 0.9836761 -0.140878 0.1119581 0.9836761 -0.151026 0.09783905 0.9836761 -0.1510263 0.09783917 0.983676 -0.1597642 0.08280628 0.9836762 -0.1597631 0.08280599 0.9836762 -0.1670094 0.06699967 0.9836766 -0.1670075 0.06699937 0.9836766 -0.1726941 0.05056798 0.9836767 -0.1726937 0.05056798 0.9836767 -0.176768 0.03366452 0.9836763 -0.1767699 0.03366446 0.9836764 -0.1791937 0.01644647 0.9836764 -0.1791934 0.01644647 0.9836764 -0.1799443 -9.24501e-4 0.9836764 -0.1799438 -9.24396e-4 0.9836764 -0.1790144 -0.01828765 0.9836765 -0.1790144 -0.01828765 0.9836764 -0.1764137 -0.03547942 0.9836764 -0.1764141 -0.0354796 0.9836764 -0.1721662 -0.0523402 0.9836764 -0.1721664 -0.05234032 0.9836764 -0.166311 -0.06871241 0.9836761 -0.1663124 -0.06871336 0.983676 -0.1589043 -0.08444386 0.9836764 -0.1589025 -0.08444231 0.9836765 -0.1500108 -0.09938454 0.9836762 -0.1500119 -0.09938573 0.9836762 -0.1397192 -0.1134003 0.9836765 -0.1397181 -0.1133989 0.9836765 -0.1281216 -0.1263541 0.9836763 -0.1281221 -0.1263549 0.9836763 -0.1153289 -0.1381307 0.9836766 -0.1153283 -0.1381295 0.9836766 -0.1014584 -0.1486153 0.9836764 -0.1014587 -0.148616 0.9836765 -0.08664155 -0.1577143 0.9836764 -0.0866416 -0.1577146 0.9836764 -0.07101505 -0.1653407 0.9836769 -0.07101464 -0.1653385 0.9836768 -0.05472594 -0.1714205 0.9836761 -0.05472624 -0.1714239 0.9836762 -0.03792643 -0.1759055 0.9836763 -0.03792643 -0.1759049 0.9836763 -0.02077156 -0.1787441 0.9836764 -0.02077162 -0.1787437 0.9836764 -0.003423631 -0.1799141 0.9836767 -0.003423929 -0.1799126 0.9836766 0.0139563 -0.1794032 0.9836766 0.01395636 -0.1794036 0.9836766 0.03120607 -0.1772189 0.9836762 0.03120684 -0.1772208 0.9836762 0.04816502 -0.1733815 0.9836762 0.04816502 -0.1733815 0.9836763 0.06467413 -0.1679236 0.9836765 0.0646733 -0.1679222 0.9836764 0.08057802 -0.1608964 0.9836764 0.08057838 -0.1608968 0.9836764 0.09573143 -0.1523687 0.9836764 0.09573149 -0.1523687 0.9836764 0.1099901 -0.1424184 0.9836762 0.109991 -0.1424192 0.9836763 0.123223 -0.1311383 0.9836767 0.1232209 -0.1311368 0.9836767 0.1353018 -0.1186323 0.9836765 0.1353029 -0.1186329 0.9836765 0.1461213 -0.1050199 0.9836764 0.1461214 -0.1050199 0.9836764 0.1555749 -0.09042721 0.9836764 0.1555753 -0.09042733 0.9836764 0.1635764 -0.07499021 0.9836764 0.1635769 -0.07499033 0.9836763 0.1700509 -0.05885255 0.9836767 0.1700485 -0.05885231 0.9836767 0.1749346 -0.04216539 0.9836761 0.1749384 -0.04216545 0.9836761 0.1781913 -0.02508491 0.9836763 0.1781901 -0.02508497 0.9836763 0.1797792 -0.007770419 0.9836761 0.1797797 -0.007770299 0.9836761 0.1796904 0.009617328 0.9836764 0.1796891 0.00961703 0.9836765 0.177922 0.02691543 0.9836766 0.1779209 0.02691501 0.9836766 0.1744928 0.04396069 0.9836766 0.1744931 0.0439608 0.9836766 0.1694356 0.06059676 0.9836763 0.1694371 0.06059765 0.9836763 0.1627978 0.07666736 0.9836759 0.1627994 0.07666856 -0.001779377 0.06730788 0.9977307 -0.001954495 0.06824189 0.997667 0.001762688 0.2577461 0.9662111 -0.003726005 0.203455 0.9790772 0.001280426 0.1632887 0.9865776 0.001280426 0.1632916 0.986577 0.001762688 0.2577439 0.9662117 -0.003837943 0.3497931 0.9368191 -4.37725e-4 0.3348788 0.9422611 3.06019e-4 0.4385682 0.8986979 3.06019e-4 0.4385791 0.8986926 -0.003294289 0.460063 0.8878802 8.63287e-4 0.6030703 0.7976876 -0.003573179 0.5766769 0.8169646 0.00187397 0.5232663 0.8521672 0.00187397 0.5232691 0.8521654 8.63287e-4 0.6030772 0.7976824 -0.001125216 0.6772445 0.7357572 -0.002405405 0.6825512 0.7308338 0.001603424 0.8059852 0.5919336 -0.003769993 0.7757049 0.6310846 0.001527786 0.7450921 0.66696 0.001527786 0.7450884 0.6669639 0.001603424 0.805983 0.5919365 -0.003012418 0.8593493 0.5113803 -0.001060009 0.8544191 0.5195836 7.25403e-4 0.9047083 0.4260309 7.25403e-4 0.904696 0.4260572 -0.003509461 0.9172058 0.3983983 4.68368e-4 0.9696985 0.2443044 -0.003381013 0.9629118 0.2697952 0.001886129 0.9415921 0.3367502 0.001886129 0.9415926 0.336749 4.68368e-4 0.9697074 0.2442687 -5.34579e-4 0.9887505 0.149573 -0.002792418 0.9906823 0.1361644 0.001379072 0.9990664 -0.04317879 -0.003749907 0.999993 0 0.00171113 0.9985692 0.05344593 0.00171113 0.9985694 0.05344456 0.001379072 0.9990663 -0.04318267 -0.002251446 0.9902333 -0.1394018 -0.001618027 0.9906849 -0.1361648 0.001079738 0.9721587 -0.2343209 0.001079738 0.9721578 -0.2343244 -0.003660559 0.9629108 -0.269795 0.001833558 0.9450039 -0.327054 0.001833558 0.9450031 -0.3270562 -0.00312519 0.9172069 -0.3983988 9.07088e-6 0.9090283 -0.4167343 9.01377e-6 0.8544195 -0.5195838 -0.02563112 0.9086962 -0.4166705 -0.004390895 0.8645556 -0.5025179 0.001091241 0.7519083 -0.659267 -0.00366497 0.7757052 -0.6310849 0.001830339 0.8120239 -0.5836214 0.001830339 0.8120254 -0.5836193 0.001091241 0.7519147 -0.6592595 -0.001554548 0.6847673 -0.7287602 -0.00211209 0.682551 -0.730835 0.001716494 0.5319967 -0.8467447 -0.003748178 0.5766769 -0.8169637 0.001369714 0.6112385 -0.7914452 0.001369714 0.6112414 -0.791443 0.001716494 0.5319955 -0.8467454 -0.003555774 0.4477882 -0.8941326 -6.52269e-4 0.4600649 -0.887885 4.52637e-4 0.3594231 -0.9331746 4.52637e-4 0.359404 -0.933182 -0.003373324 0.334877 -0.9422559 7.3918e-4 0.1734207 -0.9848475 -0.003516376 0.2034569 -0.9790776 0.001884818 0.2676617 -0.9635111 0.001884818 0.2676619 -0.9635111 7.3918e-4 0.1734175 -0.9848482 -9.20965e-4 0.07755887 -0.9969874 -0.002541422 0.06824117 -0.9976657 0.001536011 -0.1154348 -0.9933139 -0.003770411 -0.06824076 -0.9976618 0.001596093 -0.01902538 -0.9998177 0.001596093 -0.01902174 -0.9998179 0.001536011 -0.1154384 -0.9933134 -0.002750992 -0.2107598 -0.9775339 -0.001253724 -0.2034585 -0.9790827 8.49989e-4 -0.3041396 -0.9526271 8.49989e-4 -0.3041253 -0.9526317 -0.003567457 -0.3348767 -0.9422552 3.22408e-4 -0.4814853 -0.8764541 -0.00330305 -0.4600625 -0.8878804 0.001875162 -0.3946532 -0.9188282 0.001875162 -0.3946454 -0.9188315 3.22408e-4 -0.4814302 -0.8764843 -3.52919e-4 -0.5638296 -0.8258911 -0.002907276 -0.5766786 -0.8169661 0.00129038 -0.712 -0.7021783 -0.003728985 -0.6825478 -0.7308315 0.001757979 -0.6409024 -0.7676203 0.001757979 -0.6409076 -0.7676161 0.00129038 -0.7119975 -0.7021808 -0.002012014 -0.7764447 -0.6301822 -0.001789808 -0.7757092 -0.6310881 0.001802146 -0.8830552 -0.4692656 -0.00369656 -0.8544136 -0.5195802 0.001183629 -0.833644 -0.5523011 0.001183629 -0.8336412 -0.5523051 0.001802146 -0.8830521 -0.4692714 -0.004126906 -0.9242165 -0.3818469 -2.16207e-4 -0.9172114 -0.3984009 1.52252e-4 -0.9567844 -0.2907983 1.52252e-4 -0.9567638 -0.2908658 -0.003207921 -0.9629124 -0.2697954 9.80779e-4 -0.9948222 -0.1016258 -0.003622889 -0.9906798 -0.1361641 0.00185579 -0.9803679 -0.1971688 0.00185579 -0.9803677 -0.1971688 9.80779e-4 -0.9948216 -0.1016314 -0.001336395 -0.9999859 -0.005138099 -0.002262532 -0.9999974 0 0.001452326 -0.9958134 0.091398 0.001452326 -0.9958136 0.09139543 -0.003762722 -0.9906792 0.136164 -7.03173e-4 -0.959702 0.281019 -0.002684116 -0.9629138 0.2697958 0.001663506 -0.9823428 0.1870823 0.001663506 -0.982343 0.1870816 5.92582e-4 -0.9281039 0.372321 5.92582e-4 -0.9281009 0.3723283 -0.003445148 -0.917206 0.3983985 6.07523e-4 -0.8392753 0.5437064 -0.003452062 -0.8544144 0.5195807 0.001889228 -0.8878303 0.4601671 0.001889228 -0.8878289 0.4601699 6.07523e-4 -0.8392806 0.5436981 -7.24384e-4 -0.7828816 0.6221702 -0.002670645 -0.7757077 0.6310868 0.001460909 -0.6487603 0.7609914 -0.003763854 -0.6825484 0.7308308 0.001657426 -0.7191807 0.6948211 0.001657426 -0.7191742 0.6948278 0.001460909 -0.6487612 0.7609906 -0.00249809 -0.5722841 0.8200517 -0.001439273 -0.57668 0.8169689 9.68541e-4 -0.4904672 0.8714591 9.68541e-4 -0.4904691 0.871458 -0.003617703 -0.4600625 0.8878792 0.001858174 -0.4040677 0.9147272 0.001858174 -0.4040716 0.9147255 -0.003217875 -0.3348771 0.9422563 1.69212e-4 -0.3138995 0.9494563 1.68105e-4 -0.2034569 0.9790838 -0.02502727 -0.3137992 0.9491595 -0.004095077 -0.2207975 0.9753111 0.001797854 -0.1256367 0.9920747 0.001797854 -0.1256363 0.9920748 -0.003700435 -0.06824135 0.997662 0 -0.03880864 0.9992467 0 0.009513616 0.9999548 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.7058964 0.6747428 0.2154821 -0.7058961 0.6747421 0.2154846 -0.7058966 0.6747413 0.215486 -0.7058965 0.7010069 0.1014863 -0.7058961 0.7010067 0.1014899 -0.7058961 0.7010068 0.1014898 -0.7058963 0.7081505 -0.01527446 -0.7058969 0.7081497 -0.01527899 -0.7058963 0.7081505 -0.01528161 -0.7058961 0.695978 -0.1316248 -0.7058969 0.6959767 -0.1316286 -0.7058972 0.6959767 -0.1316269 -0.7058971 0.6648188 -0.2443873 -0.7058967 0.66482 -0.2443854 -0.7058967 0.66482 -0.2443856 -0.7058968 0.6155285 -0.3504775 -0.7058962 0.6155282 -0.3504791 -0.7058962 0.6155284 -0.3504788 -0.7058964 0.5494462 -0.4470114 -0.7058957 0.5494457 -0.4470131 -0.7058965 0.5494486 -0.4470083 -0.7058967 0.4683762 -0.5313507 -0.7058964 0.4683758 -0.5313516 -0.7058966 0.4683773 -0.5313498 -0.7058965 0.3745302 -0.6011965 -0.7058977 0.374532 -0.601194 -0.7058975 0.3745307 -0.601195 -0.7058974 0.2704691 -0.6546414 -0.7058974 0.2704691 -0.6546413 -0.7058974 0.2704696 -0.6546411 -0.7058975 0.1590309 -0.6902304 -0.705897 0.1590297 -0.6902312 -0.7058969 0.159029 -0.6902314 -0.7058969 0.04325276 -0.7069928 -0.7058969 0.04325282 -0.7069929 -0.7058969 0.04325187 -0.7069929 -0.7058967 -0.07370448 -0.7044696 -0.7058967 -0.07370448 -0.7044696 -0.7058967 -0.07369834 -0.7044703 -0.705897 -0.1886504 -0.6827301 -0.7058966 -0.1886517 -0.6827303 -0.7058953 -0.1886159 -0.6827414 -0.7058969 -0.2984519 -0.6423676 -0.7058964 -0.298453 -0.6423674 -0.7058974 -0.4000911 -0.5844963 -0.7058967 -0.4001116 -0.584483 -0.7058969 -0.4001114 -0.5844831 -0.7058976 -0.4908438 -0.5106671 -0.7058976 -0.4908571 -0.5106543 -0.7058971 -0.4908586 -0.5106537 -0.705897 -0.5682127 -0.4228993 -0.705897 -0.5682131 -0.4228988 -0.7058968 -0.6300708 -0.3236055 -0.7058972 -0.63007 -0.3236063 -0.7058969 -0.630068 -0.3236109 -0.7058966 -0.5682139 -0.4228981 -0.7057582 -0.6758547 -0.2124281 -0.7057585 -0.6758552 -0.2124257 -0.7057583 -0.6758555 -0.2124254 -0.705758 -0.7024759 -0.09183245 -0.7057577 -0.7024756 -0.09183728 -0.7057585 -0.7024744 -0.09183996 -0.7057583 -0.7077499 0.03154951 -0.7057576 -0.7077507 0.03154146 -0.7057579 -0.7077507 0.03154093 -0.7057578 -0.6915211 0.1539625 -0.7057577 -0.6915215 0.1539611 -0.7057582 -0.6915214 0.1539598 -0.7057583 -0.654281 0.2717014 -0.7057585 -0.65428 0.2717034 -0.7057578 -0.6542798 0.2717053 -0.7057579 -0.5971614 0.3811874 -0.7057583 -0.5971584 0.3811916 -0.705758 -0.5971581 0.3811926 -0.705758 -0.5218948 0.4790944 -0.705758 -0.5218942 0.4790949 -0.7057583 -0.5218946 0.4790944 -0.7057581 -0.4307683 0.5624449 -0.7057578 -0.4307708 0.5624433 -0.7057582 -0.4307716 0.5624421 -0.7057583 -0.3265602 0.6287 -0.7057583 -0.3265605 0.6286998 -0.705758 -0.3265598 0.6287006 -0.7057579 -0.212425 0.675856 -0.7057579 -0.212426 0.6758558 -0.7057582 -0.2124269 0.6758551 -0.7057583 -0.09183818 0.702475 -0.7057583 -0.09183746 0.702475 -0.705758 -0.09183633 0.7024755 -0.7057582 0.03153967 0.7077504 -0.7057583 0.03154152 0.7077502 -0.7057585 0.03154093 0.7077501 -0.7057585 0.1539613 0.6915207 -0.7057585 0.1539606 0.6915209 -0.7057582 0.1539614 0.691521 -0.705758 0.2717059 0.6542793 -0.7057579 0.2717036 0.6542805 -0.7057576 0.2717046 0.6542804 -0.7057576 0.3811891 0.5971609 -0.7057577 0.3811908 0.5971596 -0.7057579 0.3811902 0.5971598 -0.7057578 0.4790971 0.5218926 -0.7057577 0.479096 0.5218937 -0.7057582 0.4790945 0.5218945 -0.7057582 0.5624429 0.4307706 -0.7057582 0.562443 0.4307706 -0.705758 0.6287006 0.3265598 -0.7057585 0.6286993 0.326561 -0.7057588 0.6287006 0.3265579 -0.7057587 0.5624416 0.4307716 -0.9992095 0.03695195 0.01465851 -0.999379 0.03256589 0.01345473 -0.998539 0.04900199 0.02277326 -0.998539 0.04900157 0.02277404 -0.9992335 0.03397107 0.01945155 -0.9991951 0.03477835 0.01999008 -0.9993906 0.0278232 0.02107477 -0.9986445 0.04269325 0.02977561 -0.9986445 0.04269289 0.02977621 -0.9987342 0.03231751 0.03854322 -0.9990748 0.03047215 0.03034609 -0.9992458 0.02770161 0.02721208 -0.9985196 0.04175138 0.034864 -0.9985196 0.04175138 0.034864 -0.9987342 0.03231668 0.03854399 -0.9993938 0.02151298 0.02737331 -0.9985527 0.03076374 0.04411345 -0.9985528 0.0307635 0.04411357 -0.9993476 0.01850187 0.03101634 -0.9990005 0.02227473 0.03875219 -0.9993572 0.01427775 0.03288358 -0.9987997 0.02067136 0.04440528 -0.9987998 0.02067035 0.04440581 -0.9989156 0.008168697 0.04583686 -0.9989858 0.01174855 0.04346895 -0.9993487 0.01002132 0.03466725 -0.9984427 0.01917207 0.05238866 -0.9984427 0.01917195 0.05238872 -0.9989156 0.008169233 0.04583674 -0.9993784 0.005379021 0.03484237 -0.9984838 0.004911959 0.05482822 -0.9984837 0.004911839 0.05482822 -0.9993438 9.03435e-4 0.03621017 -0.9989042 2.25124e-4 0.04680049 -0.9988521 -0.003698289 0.04775959 -0.9993762 -0.003641128 0.03512907 -0.9985067 -0.008811414 0.05391514 -0.9985066 -0.008811295 0.05391514 -0.9993501 -0.008270859 0.03508496 -0.9989685 -0.01120573 0.0440064 -0.9993517 -0.01267403 0.03369802 -0.9988354 -0.01589554 0.04555344 -0.9988355 -0.01589715 0.04555296 -0.9993491 -0.01691263 0.03186374 -0.9984261 -0.02290892 0.05119144 -0.9984261 -0.0229085 0.05119162 -0.9993627 -0.0206294 0.0291301 -0.9989221 -0.02601432 0.0384441 -0.998937 -0.02240091 0.04028832 -0.9987875 -0.03422701 0.03538298 -0.9987875 -0.03422641 0.03538364 -0.999347 -0.02448254 0.02657586 -0.9984562 -0.03500103 0.04312759 -0.9984562 -0.03500169 0.04312705 -0.9989842 -0.03409326 0.02946478 -0.9993232 -0.02817827 0.02364492 -0.9985678 -0.04343777 0.03123605 -0.9985677 -0.04343783 0.03123599 -0.9994034 -0.02907776 0.01863443 -0.9987467 -0.04303079 0.02556198 -0.9992769 -0.03437066 0.01625186 -0.999093 -0.03834789 0.01851207 -0.9987466 -0.04303073 0.02556216 -0.998719 -0.04865193 0.0139051 -0.998719 -0.04865157 0.01390635 -0.9993893 -0.03324234 0.0107755 -0.9984738 -0.0515896 0.01971197 -0.9984739 -0.05158954 0.01971197 -0.9991734 -0.03991562 0.007710635 -0.9992939 -0.03692919 0.006919682 -0.9985822 -0.05294489 0.005505859 -0.9985823 -0.05294477 0.005506932 -0.9993877 -0.03493309 0.001993358 -0.9986166 -0.05257397 9.58427e-4 -0.9992952 -0.03744316 -0.00267148 -0.9991303 -0.04161137 -0.002651095 -0.9986166 -0.05257397 9.58289e-4 -0.9987027 -0.04952186 -0.01185691 -0.9987027 -0.04952192 -0.01185679 -0.9993962 -0.03405702 -0.006884276 -0.9985297 -0.05361753 -0.007974505 -0.9985297 -0.05361741 -0.007975459 -0.9991196 -0.03980302 -0.01325732 -0.9992622 -0.03636384 -0.01236134 -0.9988734 -0.04410958 -0.01749885 -0.9988716 -0.04306948 -0.02001607 -0.9993412 -0.03258603 -0.01597911 -0.9984563 -0.04815566 -0.02767962 -0.9984562 -0.0481556 -0.02767968 -0.9993693 -0.02962183 -0.01958298 -0.9988493 -0.03933668 -0.02743482 -0.9993247 -0.02780747 -0.02401608 -0.998957 -0.03504848 -0.02926695 -0.9988493 -0.03933829 -0.02743273 -0.9987223 -0.03246825 -0.0387246 -0.9987223 -0.03246819 -0.03872466 -0.999381 -0.02346664 -0.0262115 -0.9983681 -0.04046493 -0.04029786 -0.998368 -0.04046553 -0.04029726 -0.9991533 -0.02353584 -0.03374898 -0.9993034 -0.02113246 -0.03075873 -0.9985773 -0.0265727 -0.04622983 -0.9985774 -0.02657288 -0.04622972 -0.9993888 -0.01594865 -0.03110808 -0.9986206 -0.02215766 -0.04759895 -0.9992588 -0.01303708 -0.0362187 -0.9991329 -0.01430749 -0.03909659 -0.9986207 -0.02215892 -0.04759836 -0.9986789 -0.009016156 -0.05058956 -0.9986789 -0.009016275 -0.05058956 -0.9994112 -0.007396936 -0.03350478 -0.9985957 -0.01382285 -0.05114275 -0.9985957 -0.01382255 -0.05114287 -0.9992249 -0.00351262 -0.03920942 -0.9992314 -0.003486275 -0.03904277 -0.9985616 -2.57553e-4 -0.05361592 -0.9985616 -2.57788e-4 -0.05361592 -0.999381 0.001377522 -0.03515368 -0.9986836 0.003960192 -0.05114239 -0.9992793 0.00632447 -0.03742772 -0.9991582 0.006616473 -0.04048585 -0.9986835 0.003960609 -0.05114239 -0.9985983 0.01743793 -0.0499733 -0.9985983 0.01743793 -0.0499733 -0.9993907 0.01016789 -0.03338676 -0.9985814 0.01313924 -0.05159932 -0.9985815 0.01313894 -0.05159938 -0.9991621 0.01671814 -0.03735822 -0.999236 0.0160737 -0.03562432 -0.9985887 0.02580809 -0.04641664 -0.9985888 0.02580833 -0.04641646 -0.9994028 0.0181213 -0.02941912 -0.998627 0.02935808 -0.0433852 -0.9992049 0.02508002 -0.03099453 -0.999239 0.02458012 -0.03028666 -0.998627 0.02935802 -0.04338526 -0.9993833 0.02539992 -0.02425074 -0.9985471 0.03746455 -0.03873151 -0.9985471 0.03746497 -0.03873103 -0.9987976 0.04214876 -0.0250377 -0.9991004 0.03443115 -0.02475947 -0.9993244 0.02961182 -0.02177363 -0.9984907 0.04155361 -0.03591161 -0.9984906 0.04155319 -0.03591215 -0.9987976 0.04214859 -0.025038 -0.9993856 0.03066104 -0.01698184 -0.9984587 0.04998165 -0.02412801 -0.9984586 0.04998159 -0.02412813 -0.9993019 0.03473174 -0.01377481 -0.999015 0.04144752 -0.01583683 -0.9993924 0.03377789 -0.008601307 -0.9988029 0.04703366 -0.01344388 -0.9988029 0.0470345 -0.01344138 -0.998815 0.04866153 -8.831e-4 -0.9989766 0.04498893 -0.004679143 -0.9993519 0.0357325 -0.004348993 -0.9985491 0.052872 -0.01021319 -0.9985491 0.05287194 -0.01021373 -0.998815 0.04866129 -8.87328e-4 -0.9993562 0.03587514 2.55076e-4 -0.998524 0.05420243 0.003453135 -0.9985239 0.05420243 0.003453493 -0.999318 0.03659105 0.004982709 -0.9990499 0.04310679 0.006411552 -0.998445 0.05288803 0.01761656 -0.998445 0.05288833 0.01761561 -0.9993776 0.0340597 0.009190857 -0.9988018 0.04759287 0.01139503 -0.9988019 0.04759311 0.01139378 0.2249569 0.02430194 0.9740656 -0.04699015 0.2773953 0.9596061 -0.04698592 0.1524042 0.9872007 -0.04701721 0.1524085 0.9871985 -0.04704278 0.1524065 0.9871976 -0.04709714 0.04446804 0.9979 -0.04699915 0.3978295 0.9162548 -0.04700422 0.3978213 0.9162582 -0.04699534 0.2773955 0.9596058 -0.04701876 0.5117309 0.8578581 -0.04703974 0.5117282 0.8578587 -0.04703265 0.3978304 0.9162526 -0.0469644 0.7962569 0.603133 -0.04696995 0.7125963 0.7000002 -0.04702138 0.7125964 0.6999968 -0.04701977 0.6172323 0.7853748 -0.04701536 0.6172317 0.7853754 -0.04704117 0.6172297 0.7853755 -0.04704123 0.511732 0.8578563 -0.04694974 0.7962613 0.6031282 -0.04698491 0.7962589 0.6031286 -0.04697936 0.8668488 0.4963527 -0.0469737 0.8668494 0.4963523 -0.04694962 0.8668493 0.4963549 -0.04694265 0.9232068 0.3814256 -0.04706317 0.9231988 0.38143 -0.04709368 0.923201 0.3814213 -0.04709547 0.9643962 0.2602348 -0.04700779 0.964399 0.26024 -0.0470066 0.9897581 0.1347936 -0.04694104 0.9897633 0.1347777 -0.04698324 0.9897617 0.1347749 -0.04698187 0.9988706 0.007100939 -0.04705905 0.9988669 0.007107734 -0.04703736 0.9988678 0.007110178 -0.04704159 0.991575 -0.1206901 -0.04708945 0.9915731 -0.1206873 -0.04707121 0.9915752 -0.1206766 -0.0470665 0.9679998 -0.2464979 -0.04698538 0.9680044 -0.246495 -0.04698735 0.9285332 -0.368264 -0.04703146 0.9285341 -0.368256 -0.04702478 0.9285345 -0.3682557 -0.04702138 0.8738185 -0.4839732 -0.04701769 0.8738186 -0.4839736 -0.04698956 0.8738215 -0.4839709 -0.04698979 0.804756 -0.591743 -0.04697322 0.8047561 -0.5917441 -0.0470184 0.7991153 -0.5993365 -0.0469895 0.7224811 -0.689792 -0.04702419 0.7224788 -0.6897921 -0.04702317 0.6283354 -0.7765201 -0.04706031 0.6283382 -0.7765156 -0.04705917 0.6283383 -0.7765156 -0.04705381 0.5238782 -0.8504925 -0.04707205 0.5238788 -0.8504911 -0.04705125 0.5238825 -0.85049 -0.04704523 0.4108191 -0.9105024 -0.04702115 0.4108206 -0.9105029 -0.0470066 0.1664334 -0.9849316 -0.04697722 0.1664304 -0.9849335 -0.04697394 0.2910166 -0.9555641 -0.04696905 0.2910165 -0.9555644 -0.04701822 0.2910434 -0.9555538 -0.04702615 -0.08884245 -0.994935 -0.04702478 0.03911149 -0.9981277 -0.04701191 0.03911477 -0.9981282 -0.04701399 0.03911489 -0.9981281 -0.04701232 0.1664329 -0.9849314 -0.04705971 -0.2153435 -0.9754037 -0.04702448 -0.215354 -0.9754032 -0.04702097 -0.08884221 -0.9949353 -0.04700452 -0.3383078 -0.9398609 -0.04702228 -0.338306 -0.9398605 -0.04702699 -0.2153419 -0.9754057 -0.04702705 -0.5656427 -0.8233085 -0.04703009 -0.4557224 -0.8888787 -0.04701614 -0.4557172 -0.8888821 -0.04705774 -0.4557143 -0.8888814 -0.04705721 -0.3383122 -0.9398567 -0.04702669 -0.6662829 -0.7442147 -0.04703694 -0.6662811 -0.7442157 -0.04703021 -0.5656427 -0.8233082 -0.04703283 -0.755978 -0.6529053 -0.04702121 -0.7559789 -0.6529049 -0.04702132 -0.6662828 -0.7442151 -0.04695355 -0.8968697 -0.4397956 -0.04695343 -0.833213 -0.5509551 -0.04701191 -0.8332672 -0.5508681 -0.04701262 -0.8332672 -0.5508681 -0.04700928 -0.7559769 -0.6529083 -0.04704362 -0.9457418 -0.3214954 -0.04697525 -0.945748 -0.3214869 -0.04697787 -0.8968691 -0.439794 -0.04706048 -0.9972714 0.05687707 -0.04706174 -0.9963594 -0.07108449 -0.04699802 -0.9963623 -0.07108783 -0.04700082 -0.9790919 -0.1979141 -0.04699289 -0.979092 -0.1979154 -0.0470131 -0.9790908 -0.1979166 -0.04701775 -0.9457423 -0.3214976 -0.04702323 -0.9972714 0.05691003 -0.04700934 -0.997272 0.05691075 -0.04700839 -0.9818072 0.1839697 -0.04700249 -0.9818073 0.1839705 -0.04704105 -0.981805 0.1839733 -0.04704535 -0.95022 0.3080078 -0.0469923 -0.9502213 0.3080117 -0.04702663 -0.9502174 0.3080185 -0.04703021 -0.9030322 0.4269908 -0.0470308 -0.9030321 0.4269908 -0.04698657 -0.7651898 0.6420878 -0.04700142 -0.7651902 0.6420863 -0.04700493 -0.8410156 0.538965 -0.04698073 -0.841016 0.5389665 -0.04703128 -0.8410235 0.5389503 -0.04703211 -0.5772944 0.8151805 -0.04703408 -0.6767945 0.734668 -0.04701495 -0.6768 0.7346642 -0.04696387 -0.6767995 0.7346678 -0.04695886 -0.7651926 0.6420866 -0.04701316 -0.4683139 0.8823105 -0.04699671 -0.4683111 0.8823129 -0.04699915 -0.5772965 0.8151808 -0.04702842 -0.3516415 0.9349527 -0.04702699 -0.3516414 0.9349528 -0.04702621 -0.4683129 0.8823104 -0.04708552 -0.01956415 0.9986993 -0.04700088 -0.1029847 0.9935718 -0.04698348 -0.1029856 0.9935725 -0.0469917 -0.2292158 0.9722407 -0.04701685 -0.2291939 0.9722446 -0.0470311 -0.2291945 0.9722439 -0.04703247 -0.3516409 0.9349527 -0.9836739 -0.1763926 -0.03565657 -0.9836726 -0.1764001 -0.03565746 -0.9836725 -0.1795117 -0.0128073 -0.9836739 -0.1795045 -0.01280736 -0.9836738 -0.1796683 0.01025253 -0.9836739 -0.1796679 0.01025247 -0.9836738 -0.1768822 0.03314405 -0.9836744 -0.1768793 0.03314322 -0.9836744 -0.1711885 0.05549001 -0.9836729 -0.1711962 0.05549323 -0.9836729 -0.1626946 0.07692927 -0.9836738 -0.1626898 0.07692646 -0.9836739 -0.1515167 0.09709936 -0.9836743 -0.1515152 0.09709823 -0.9836742 -0.1378546 0.1156767 -0.9836745 -0.1378537 0.1156757 -0.9836744 -0.1219303 0.1323548 -0.9836729 -0.1219351 0.132361 -0.9836729 -0.104008 0.1468671 -0.9836739 -0.1040052 0.1468623 -0.9836739 -0.08437114 0.1589561 -0.9836732 -0.08437281 0.15896 -0.9836731 -0.0633527 0.1684447 -0.9836738 -0.06335192 0.1684418 -0.9836736 -0.04129201 0.1751606 -0.9836735 -0.04129207 0.1751613 -0.9836735 -0.01855415 0.1790033 -0.9836728 -0.01855421 0.179007 -0.983673 0.004488825 0.1799091 -0.9836733 0.004488587 0.1799068 -0.9836734 0.02745789 0.1778561 -0.9836733 0.02745795 0.1778564 -0.9836734 0.04997634 0.1728845 -0.9836737 0.04997575 0.1728829 -0.9836738 0.07167309 0.1650724 -0.9836737 0.07167315 0.1650726 -0.9836739 0.09219336 0.154551 -0.983675 0.09219032 0.1545467 -0.9836749 0.1111958 0.1414886 -0.9836724 0.1112054 0.1414989 -0.9836723 0.128387 0.1261169 -0.9836741 0.1283794 0.1261107 -0.9836742 0.1434516 0.1086582 -0.9836737 0.1434541 0.1086598 -0.9836738 0.1561716 0.08942246 -0.9836744 0.1561689 0.08942121 -0.9836744 0.1663211 0.06871724 -0.9836727 0.1663296 0.06871992 -0.9836728 0.1737518 0.04688566 -0.9836739 0.1737459 0.04688459 -0.9836738 0.1783153 0.02428203 -0.9836735 0.178317 0.02428209 -0.9836733 0.1799585 0.001279175 -0.9836741 0.1799547 0.001279473 -0.983674 0.178641 -0.02174264 -0.9836745 0.1786386 -0.0217421 -0.9836745 0.1743913 -0.04440784 -0.9836749 0.174389 -0.04440706 -0.9836749 0.1672791 -0.0663433 -0.9836736 0.1672853 -0.0663464 -0.9836737 0.1574282 -0.08719277 -0.9836733 0.1574295 -0.08719366 -0.9836735 0.1449867 -0.1066091 -0.9836732 0.1449876 -0.1066098 -0.9836733 0.1301635 -0.1242749 -0.9836741 0.1301608 -0.1242719 -0.9836739 0.1132009 -0.1398965 -0.983674 0.1132007 -0.1398963 -0.983674 0.09438151 -0.1532238 -0.9836738 0.0943821 -0.153225 -0.9836739 0.07401347 -0.1640362 -0.9836736 0.07401376 -0.1640371 -0.9836736 0.05242985 -0.172155 -0.9836733 0.05243021 -0.1721565 -0.9836734 0.02998459 -0.1774473 -0.983674 0.02998429 -0.177444 -0.9836741 0.007047057 -0.1798211 -0.9836733 0.007046818 -0.1798255 -0.9836733 -0.01600617 -0.1792499 -0.9836737 -0.01600581 -0.179248 -0.9836736 -0.03879654 -0.1757298 -0.9836738 -0.0387963 -0.175729 -0.9836738 -0.0609495 -0.1693252 -0.983674 -0.06094878 -0.1693238 -0.9836742 -0.08210146 -0.1601394 -0.9836747 -0.08209979 -0.1601366 -0.9836747 -0.1019029 -0.1483231 -0.9836732 -0.1019086 -0.1483301 -0.983673 -0.1200401 -0.1340811 -0.9836727 -0.1200413 -0.1340822 -0.9836726 -0.1362025 -0.1176312 -0.9836739 -0.1361963 -0.1176267 -0.9836742 -0.1501195 -0.09924405 -0.9836739 -0.1501206 -0.09924465 -0.983674 -0.1615786 -0.07923316 -0.9836735 -0.161581 -0.07923406 -0.9836735 -0.170387 -0.05792039 -0.9836739 -0.170385 -0.05791985 -0.938055 -0.3396174 -0.06865042 -0.9380589 -0.3396067 -0.06864929 -0.9380592 -0.3455967 -0.02465748 -0.9380556 -0.345606 -0.0246573 -0.9380558 -0.3459215 0.01973944 -0.9380552 -0.3459231 0.01973968 -0.9380553 -0.3405584 0.06381398 -0.938057 -0.3405539 0.06381273 -0.9380571 -0.329598 0.1068375 -0.9380562 -0.3296 0.1068384 -0.938056 -0.3132317 0.1481104 -0.9380579 -0.3132274 0.1481078 -0.9380578 -0.2917166 0.1869462 -0.9380575 -0.2917175 0.1869469 -0.9380573 -0.2654163 0.2227168 -0.9380591 -0.2654127 0.2227132 -0.9380594 -0.2347537 0.2548241 -0.9380595 -0.2347536 0.2548239 -0.9380592 -0.2002405 0.282752 -0.9380529 -0.200249 0.2827667 -0.9380531 -0.1624456 0.3060519 -0.9380586 -0.1624398 0.3060383 -0.9380586 -0.1219707 0.324298 -0.9380552 -0.1219731 0.3243069 -0.9380559 -0.07950007 0.3372402 -0.9380568 -0.07949972 0.3372375 -0.9380565 -0.03572189 0.344636 -0.9380585 -0.03572183 0.3446307 -0.9380583 0.008641481 0.3463697 -0.9380555 0.008642375 0.3463774 -0.9380553 0.0528658 0.3424289 -0.9380582 0.05286389 0.3424212 -0.9380583 0.09621751 0.3328496 -0.9380559 0.09621983 0.3328557 -0.938056 0.1379942 0.3178182 -0.9380564 0.1379937 0.3178175 -0.9380561 0.1775026 0.2975624 -0.9380543 0.1775057 0.2975666 -0.938054 0.2141003 0.2724254 -0.9380587 0.2140918 0.2724164 -0.9380587 0.247171 0.2428013 -0.9380568 0.2471749 0.2428045 -0.9380569 0.2761937 0.2092042 -0.9380577 0.276192 0.2092031 -0.9380574 0.300678 0.1721657 -0.9380568 0.3006796 0.1721664 -0.938057 0.3202264 0.1323039 -0.9380599 0.3202184 0.1323014 -0.9380599 0.3345083 0.09026557 -0.9380563 0.3345179 0.09026724 -0.9380567 0.3433134 0.04674988 -0.9380597 0.3433053 0.04674953 -0.9380599 0.3464645 0.002464115 -0.9380545 0.3464791 0.002462863 -0.9380545 0.3439495 -0.04186272 -0.9380552 0.3439477 -0.0418623 -0.938055 0.3357712 -0.08550208 -0.9380537 0.3357747 -0.08550333 -0.9380537 0.3220838 -0.1277395 -0.9380546 0.3220813 -0.1277382 -0.9380546 0.3031027 -0.1678765 -0.9380571 0.3030967 -0.1678724 -0.9380571 0.2791411 -0.2052538 -0.9380598 0.2791357 -0.2052491 -0.9380592 0.2505981 -0.2392605 -0.9380573 0.2506016 -0.2392644 -0.9380573 0.2179483 -0.269346 -0.9380573 0.2179481 -0.2693459 -0.9380575 0.1817153 -0.2950047 -0.9380547 0.1817187 -0.2950115 -0.9380549 0.1425013 -0.3158263 -0.9380553 0.142501 -0.3158254 -0.9380552 0.1009449 -0.3314553 -0.9380552 0.1009448 -0.3314553 -0.938055 0.05773037 -0.341643 -0.9380535 0.05773067 -0.3416473 -0.9380537 0.01356786 -0.3462241 -0.9380554 0.0135681 -0.3462194 -0.9380557 -0.03081703 -0.3451111 -0.9380567 -0.03081661 -0.3451086 -0.9380571 -0.07469469 -0.3383333 -0.9380552 -0.07469636 -0.3383386 -0.9380554 -0.117349 -0.3260081 -0.9380582 -0.1173458 -0.3260011 -0.9380584 -0.1580705 -0.3083183 -0.9380564 -0.1580734 -0.3083231 -0.9380564 -0.1962019 -0.2855787 -0.9380558 -0.1962028 -0.2855799 -0.9380557 -0.2311122 -0.2581449 -0.9380565 -0.2311106 -0.2581434 -0.9380565 -0.2622242 -0.2264692 -0.9380581 -0.2622208 -0.2264668 -0.9380581 -0.2890272 -0.1910771 -0.9380544 -0.2890359 -0.1910817 -0.9380542 -0.3110987 -0.1525515 -0.9380602 -0.3110836 -0.1525457 -0.9380607 -0.3280355 -0.111512 -0.9380549 -0.3280506 -0.1115157 -0.864149 -0.4932591 -0.09970957 -0.8641382 -0.4932777 -0.09971141 -0.8641378 -0.5019793 -0.03581297 -0.8641499 -0.5019585 -0.03581357 -0.8641499 -0.5024173 0.02866953 -0.8641496 -0.5024178 0.02866965 -0.8641497 -0.4946266 0.09268134 -0.864138 -0.494646 0.09268701 -0.8641382 -0.4787323 0.1551792 -0.864141 -0.4787277 0.1551771 -0.8641419 -0.4549525 0.215121 -0.8641341 -0.454964 0.215128 -0.8641341 -0.4237194 0.2715401 -0.8641344 -0.423719 0.2715398 -0.8641354 -0.385514 0.3234949 -0.8641409 -0.3855074 0.323488 -0.8641406 -0.3409766 0.3701297 -0.8641449 -0.3409721 0.3701238 -0.8641451 -0.2908418 0.4106876 -0.8641483 -0.290839 0.4106827 -0.8641475 -0.2359339 0.4445045 -0.8641436 -0.2359365 0.4445109 -0.8641431 -0.1771574 0.4710327 -0.8641496 -0.1771546 0.4710221 -0.8641481 -0.1154679 0.4898113 -0.8641418 -0.1154693 0.4898222 -0.864143 -0.05188417 0.5005646 -0.8641422 -0.05188417 0.5005659 -0.8641412 0.01255321 0.5030928 -0.8641511 0.01255106 0.5030758 -0.8641509 0.07678008 0.4973409 -0.8641406 0.07678449 0.497358 -0.8641403 0.1397545 0.4834566 -0.8641448 0.1397517 0.4834494 -0.8641453 0.2004268 0.4616081 -0.8641464 0.2004258 0.4616065 -0.8641462 0.2578088 0.4321876 -0.8641422 0.2578127 0.4321929 -0.8641417 0.3109647 0.3956767 -0.8641443 0.3109616 0.3956735 -0.8641451 0.3590049 0.3526596 -0.8641391 0.359013 0.3526661 -0.8641387 0.4011636 0.3038622 -0.8641433 0.4011567 0.303858 -0.8641429 0.4367212 0.2500631 -0.8641421 0.4367225 0.2500637 -0.8641411 0.4651153 0.1921662 -0.8641389 0.465119 0.1921674 -0.8641387 0.4858748 0.1311107 -0.8641409 0.485871 0.1311101 -0.8641402 0.4986491 0.06790244 -0.8641397 0.4986501 0.0679025 -0.8641392 0.5032401 0.003578186 -0.8641447 0.5032308 0.00357902 -0.8641449 0.4995564 -0.06080204 -0.8641456 0.4995554 -0.0608018 -0.8641455 0.487679 -0.1241839 -0.8641421 0.4876845 -0.1241859 -0.8641427 0.4677989 -0.1855304 -0.8641417 0.4678006 -0.1855312 -0.8641423 0.4402347 -0.2438271 -0.8641358 0.4402439 -0.2438335 -0.8641356 0.4054484 -0.2981297 -0.8641418 0.4054404 -0.2981224 -0.864142 0.3639889 -0.3475208 -0.8641402 0.3639909 -0.3475232 -0.8641406 0.3165609 -0.3912166 -0.8641498 0.316552 -0.3912031 -0.8641487 0.2639288 -0.4284725 -0.8641448 0.2639319 -0.4284787 -0.8641449 0.2069718 -0.4587116 -0.8641429 0.2069728 -0.4587147 -0.8641441 0.1466144 -0.4814139 -0.8641463 0.1466137 -0.4814101 -0.8641453 0.08384782 -0.496208 -0.8641496 0.08384728 -0.4962006 -0.8641496 0.01970654 -0.5028489 -0.8641445 0.01970601 -0.5028578 -0.8641433 -0.04476004 -0.5012513 -0.8641448 -0.04475951 -0.5012488 -0.8641436 -0.1084911 -0.4914119 -0.8641485 -0.1084885 -0.4914037 -0.864149 -0.170436 -0.4734954 -0.8641371 -0.1704449 -0.473514 -0.8641366 -0.2295973 -0.4478315 -0.8641387 -0.2295953 -0.4478284 -0.8641381 -0.2849777 -0.4147928 -0.8641455 -0.2849695 -0.4147831 -0.8641456 -0.3356727 -0.3749349 -0.8641485 -0.335669 -0.3749315 -0.8641491 -0.3808572 -0.3289289 -0.8641375 -0.3808735 -0.3289403 -0.864137 -0.41981 -0.2775369 -0.8641431 -0.4198007 -0.2775319 -0.8641438 -0.4518445 -0.2215675 -0.864147 -0.4518391 -0.2215655 -0.8641468 -0.4764627 -0.1619678 -0.8641489 -0.4764592 -0.161967 -0.764905 -0.6313732 -0.1276259 -0.7649243 -0.6313501 -0.1276239 -0.7649241 -0.6424874 -0.04583835 -0.7649163 -0.6424967 -0.04583793 -0.764916 -0.6430841 0.03669518 -0.7649062 -0.6430954 0.03669714 -0.7649071 -0.6331217 0.1186341 -0.7649216 -0.6331052 0.118629 -0.7649206 -0.6127376 0.1986178 -0.7649303 -0.6127271 0.198613 -0.7649287 -0.5823004 0.275337 -0.764931 -0.582298 0.2753354 -0.7649302 -0.5423093 0.3475377 -0.7649268 -0.5423124 0.3475403 -0.7649266 -0.4934176 0.4140366 -0.7649105 -0.4934309 0.4140506 -0.7649108 -0.4364339 0.4737479 -0.7649076 -0.436436 0.4737508 -0.7649083 -0.3722702 0.5256711 -0.7649133 -0.3722674 0.525666 -0.7649135 -0.3019906 0.5689542 -0.764905 -0.3019943 0.5689637 -0.7649065 -0.2267561 0.6029095 -0.7649116 -0.2267546 0.6029035 -0.7649128 -0.147796 0.6269488 -0.7649175 -0.1477953 0.6269431 -0.7649157 -0.06640917 0.6406981 -0.7649155 -0.06640917 0.6406982 -0.7649167 0.0160669 0.6439288 -0.7649131 0.0160675 0.6439331 -0.7649143 0.0982784 0.6365906 -0.7649202 0.09827655 0.6365837 -0.7649205 0.1788749 0.6187894 -0.7649145 0.1788777 0.6187962 -0.7649146 0.2565384 0.5908415 -0.7649105 0.2565408 0.5908458 -0.7649102 0.3299897 0.5531901 -0.7649133 0.3299874 0.553187 -0.7649131 0.3980198 0.5064468 -0.7649143 0.3980188 0.5064457 -0.7649134 0.4595143 0.4513913 -0.7649199 0.4595082 0.4513865 -0.7649197 0.5134581 0.3889197 -0.7649209 0.513457 0.3889191 -0.764923 0.5589727 0.3200663 -0.764904 0.5589935 0.3200752 -0.7649033 0.5953353 0.245965 -0.7649219 0.5953139 0.2459589 -0.7649229 0.6218779 0.1678118 -0.7649133 0.6218892 0.1678135 -0.7649129 0.6382437 0.08690935 -0.7649282 0.6382255 0.08690899 -0.7649295 0.6440976 0.004582524 -0.7649089 0.6441222 0.004579901 -0.7649085 0.63942 -0.07782703 -0.7649226 0.6394036 -0.07782316 -0.7649229 0.6242026 -0.1589469 -0.7649103 0.6242165 -0.1589522 -0.7649098 0.5987651 -0.2374727 -0.7649152 0.5987596 -0.2374697 -0.7649158 0.5634762 -0.3120872 -0.7649282 0.5634641 -0.3120786 -0.764928 0.5189313 -0.38157 -0.7649005 0.5189552 -0.3815922 -0.7649015 0.4658961 -0.444822 -0.7649259 0.4658774 -0.4447996 -0.7649255 0.4051736 -0.5007227 -0.7649052 0.4051867 -0.5007432 -0.7649064 0.3378269 -0.5484444 -0.7649176 0.3378212 -0.5484324 -0.764918 0.2649134 -0.5871298 -0.7649245 0.264911 -0.5871224 -0.7649227 0.1876586 -0.6161798 -0.7649137 0.1876605 -0.6161904 -0.7649154 0.1073223 -0.6351271 -0.7649123 0.1073225 -0.6351308 -0.7649106 0.02522337 -0.6436426 -0.7649171 0.02522397 -0.6436347 -0.7649176 -0.0572896 -0.6415753 -0.7649113 -0.05729115 -0.6415828 -0.7649137 -0.1388645 -0.6289862 -0.764917 -0.1388632 -0.6289825 -0.7649169 -0.2181547 -0.6060616 -0.7649249 -0.2181505 -0.6060529 -0.7649269 -0.2938594 -0.5731783 -0.7649172 -0.2938659 -0.573188 -0.7649183 -0.3647499 -0.5309025 -0.7649217 -0.3647472 -0.5308996 -0.7649221 -0.4296427 -0.4798972 -0.7649174 -0.429647 -0.479901 -0.7649176 -0.4874868 -0.4210199 -0.7649182 -0.4874861 -0.4210194 -0.7649184 -0.5373222 -0.355225 -0.764914 -0.5373268 -0.3552273 -0.7649129 -0.5783426 -0.2835983 -0.7649073 -0.5783489 -0.2836005 -0.7649062 -0.6098672 -0.2073172 -0.7649056 -0.6098679 -0.2073174 -0.6427049 -0.7509253 -0.1517947 -0.6426829 -0.7509438 -0.1517959 -0.6426839 -0.7641888 -0.0545237 -0.6426619 -0.7642075 -0.05452251 -0.6426609 -0.7649062 0.04365032 -0.6426942 -0.7648786 0.0436449 -0.642694 -0.7530179 0.1410981 -0.6426765 -0.7530319 0.1411027 -0.6426777 -0.7288042 0.2362406 -0.6426774 -0.7288046 0.2362407 -0.6426773 -0.6926118 0.3274978 -0.6426839 -0.6926071 0.3274948 -0.6426848 -0.6450413 0.4133738 -0.6426881 -0.6450392 0.413372 -0.6426873 -0.5868824 0.4924655 -0.6426919 -0.5868797 0.4924625 -0.6426909 -0.5190876 0.5634683 -0.6426914 -0.5190874 0.5634679 -0.6426924 -0.44277 0.6252211 -0.6426898 -0.442771 0.6252229 -0.642691 -0.3591848 0.6767086 -0.6426903 -0.359185 0.6767092 -0.642689 -0.269698 0.7170871 -0.6426942 -0.2696971 0.7170828 -0.642693 -0.1757875 0.7456839 -0.6426844 -0.1757882 0.7456911 -0.6426867 -0.07898694 0.7620465 -0.6426885 -0.078987 0.7620451 -0.6426879 0.01910853 0.7658897 -0.6426752 0.01911026 0.7659003 -0.6426735 0.1168942 0.7571701 -0.6426771 0.1168934 0.7571671 -0.6426758 0.2127596 0.7360035 -0.6426867 0.2127557 0.735995 -0.6426861 0.3051272 0.702746 -0.6426929 0.3051242 0.7027412 -0.6426946 0.3924816 0.6579529 -0.6426848 0.3924868 0.6579592 -0.6426862 0.4734037 0.6023648 -0.6426955 0.4733981 0.6023594 -0.6426948 0.546539 0.5368785 -0.64269 0.5465424 0.5368809 -0.6426917 0.6107082 0.4625828 -0.6426866 0.610712 0.4625849 -0.642686 0.664853 0.3806904 -0.6427062 0.6648371 0.380684 -0.6427077 0.7080593 0.2925387 -0.6426966 0.7080683 0.292541 -0.6426969 0.7396635 0.1995965 -0.642692 0.7396676 0.199597 -0.6426938 0.7591172 0.1033724 -0.6426615 0.7591446 0.1033724 -0.6426591 0.7661329 0.005446672 -0.642695 0.7661029 0.005450546 -0.6426958 0.7605091 -0.09256386 -0.6426826 0.7605199 -0.09256672 -0.6426829 0.742439 -0.1890583 -0.6427136 0.742415 -0.1890485 -0.6427126 0.7121447 -0.2824366 -0.6426883 0.7121628 -0.2824467 -0.6426873 0.6701998 -0.3711944 -0.6426659 0.6702143 -0.3712052 -0.6426663 0.617242 -0.4538635 -0.6427053 0.6172185 -0.4538405 -0.6427054 0.5541139 -0.529044 -0.6426718 0.5541316 -0.5290664 -0.6426727 0.4819288 -0.5955808 -0.6426851 0.4819233 -0.5955717 -0.6426839 0.4018055 -0.6523111 -0.6426872 0.4018044 -0.6523086 -0.6426868 0.315091 -0.6983346 -0.6426716 0.3150947 -0.698347 -0.6426723 0.2232058 -0.7329063 -0.6426889 0.2232035 -0.7328922 -0.642688 0.1276496 -0.755419 -0.6426833 0.1276497 -0.7554228 -0.6426842 0.02999991 -0.7655436 -0.6426894 0.03000032 -0.7655393 -0.6426917 -0.06814134 -0.7630885 -0.6427019 -0.06813943 -0.7630803 -0.6427009 -0.1651602 -0.7481028 -0.6426821 -0.1651657 -0.7481176 -0.642682 -0.2594746 -0.7208557 -0.6426746 -0.2594774 -0.7208612 -0.6426726 -0.3495314 -0.6817622 -0.6426938 -0.3495212 -0.6817476 -0.6426925 -0.4338317 -0.6314557 -0.6426789 -0.4338395 -0.6314643 -0.6426774 -0.5110282 -0.5708028 -0.6426732 -0.5110309 -0.5708051 -0.6426709 -0.5798295 -0.5007714 -0.6426753 -0.5798263 -0.5007693 -0.6426748 -0.6391035 -0.4225113 -0.6426862 -0.6390948 -0.4225071 -0.6426865 -0.6878781 -0.3373097 -0.6426929 -0.6878729 -0.3373079 -0.6426946 -0.7253579 -0.2465758 -0.6427029 -0.7253509 -0.2465745 -0.5014525 -0.8480331 -0.1714216 -0.5014801 -0.8480169 -0.1714212 -0.501479 -0.862976 -0.06157165 -0.5014829 -0.8629738 -0.06157189 -0.5014839 -0.8637617 0.04929137 -0.5014813 -0.8637633 0.04929172 -0.5014813 -0.8503686 0.1593419 -0.5015053 -0.8503553 0.1593369 -0.5015035 -0.8229997 0.2667693 -0.5014615 -0.8230215 0.2667809 -0.5014638 -0.7821488 0.3698338 -0.5014538 -0.7821538 0.3698373 -0.5014561 -0.7284374 0.4668198 -0.5014702 -0.7284313 0.4668141 -0.501471 -0.662756 0.5561308 -0.5014566 -0.6627613 0.5561372 -0.5014585 -0.5862007 0.6363239 -0.5014881 -0.5861913 0.6363092 -0.5014858 -0.5000117 0.7060456 -0.5014601 -0.5000182 0.7060593 -0.5014602 -0.4056232 0.7642038 -0.5014813 -0.4056193 0.7641919 -0.5014802 -0.3045657 0.8097884 -0.5014571 -0.3045682 0.8098018 -0.5014591 -0.1985142 0.8420992 -0.5014805 -0.1985134 0.8420865 -0.501479 -0.08919805 0.8605594 -0.5014777 -0.08919799 0.8605602 -0.5014801 0.02157771 0.8649001 -0.5014695 0.0215789 0.8649061 -0.5014707 0.1320066 0.8550447 -0.5014914 0.1320026 0.8550331 -0.5014939 0.2402566 0.8311321 -0.501474 0.2402618 0.8311427 -0.5014734 0.3445733 0.7935953 -0.5014737 0.3445733 0.7935952 -0.5014734 0.4432243 0.7430186 -0.5014678 0.4432265 0.7430211 -0.5014666 0.5346072 0.6802399 -0.5014724 0.5346046 0.6802376 -0.5014729 0.6171994 0.6062918 -0.5014596 0.6172059 0.6062963 -0.5014563 0.6896727 0.5223919 -0.5014778 0.6896615 0.5223861 -0.5014789 0.7507997 0.4299055 -0.5014566 0.750812 0.42991 -0.5014566 0.799623 0.33037 -0.5014454 0.7996294 0.3303714 -0.5014439 0.835312 0.2254059 -0.5014544 0.8353058 0.2254053 -0.5014542 0.8572729 0.1167344 -0.5014961 0.8572483 0.1167353 -0.5014981 0.865137 0.006152451 -0.5014788 0.8651481 0.006150603 -0.5014775 0.8588331 -0.1045275 -0.5014417 0.8588533 -0.1045337 -0.5014418 0.8384342 -0.2135045 -0.5014564 0.8384264 -0.213501 -0.501458 0.8042399 -0.3189641 -0.5014818 0.8042279 -0.3189567 -0.5014818 0.7568385 -0.4191796 -0.5014797 0.7568394 -0.4191803 -0.5014814 0.6970205 -0.5125222 -0.5014575 0.6970302 -0.5125324 -0.501459 0.6257668 -0.597457 -0.5014728 0.625762 -0.5974505 -0.5014724 0.5442228 -0.6725675 -0.501485 0.5442193 -0.6725611 -0.5014848 0.4537461 -0.7366325 -0.5014775 0.4537476 -0.7366366 -0.5014742 0.3558251 -0.7886141 -0.5014776 0.3558245 -0.7886121 -0.5014797 0.2520572 -0.8276383 -0.5014725 0.2520577 -0.8276426 -0.5014697 0.144152 -0.8530818 -0.5014742 0.1441521 -0.8530791 -0.501477 0.0338788 -0.8645074 -0.50147 0.0338782 -0.8645115 -0.5014693 -0.07694947 -0.8617467 -0.5014525 -0.07695204 -0.8617562 -0.5014528 -0.1865192 -0.8448406 -0.5014717 -0.186515 -0.8448303 -0.5014688 -0.2930193 -0.8140447 -0.5014775 -0.2930167 -0.8140403 -0.5014789 -0.3947089 -0.7698854 -0.5014596 -0.3947159 -0.7698946 -0.5014608 -0.489925 -0.7130992 -0.5014727 -0.4899202 -0.7130942 -0.5014733 -0.5770884 -0.6445881 -0.5014853 -0.5770827 -0.6445836 -0.5014877 -0.6547704 -0.565496 -0.5014742 -0.6547772 -0.5655002 -0.5014743 -0.7217165 -0.4771259 -0.5014812 -0.7217126 -0.4771242 -0.5014827 -0.7767993 -0.3809172 -0.5014488 -0.7768185 -0.3809227 -0.5014466 -0.8191531 -0.2784594 -0.5014547 -0.8191483 -0.2784587 -0.3455006 -0.9198147 -0.1859307 -0.3455088 -0.9198116 -0.1859309 -0.3455082 -0.9360362 -0.06678664 -0.3454841 -0.9360452 -0.06678497 -0.3454848 -0.9369001 0.05346417 -0.345475 -0.9369037 0.0534653 -0.345473 -0.9223753 0.1728363 -0.3454918 -0.9223687 0.1728333 -0.3454912 -0.8926954 0.2893628 -0.345513 -0.8926883 0.2893584 -0.3455127 -0.8483559 0.4011397 -0.3455165 -0.8483548 0.4011389 -0.3455127 -0.7900944 0.5063318 -0.3455044 -0.7900966 0.5063341 -0.3455051 -0.7188619 0.6032113 -0.3455132 -0.71886 0.6032087 -0.3455128 -0.6358211 0.6901829 -0.3454836 -0.6358264 0.6901928 -0.3454838 -0.5423476 0.7658329 -0.3455235 -0.5423422 0.7658188 -0.3455225 -0.4399587 0.8288851 -0.3454855 -0.439962 0.8288989 -0.3454896 -0.3303506 0.8783538 -0.3455187 -0.3303494 0.8783428 -0.3455162 -0.2153195 0.9133762 -0.3454889 -0.2153193 0.9133867 -0.3454859 -0.096749 0.9334233 -0.345501 -0.0967499 0.9334176 -0.3454957 0.02340704 0.9381284 -0.345521 0.02340435 0.9381192 -0.3455244 0.1431772 0.9274229 -0.345487 0.1431827 0.9274359 -0.3454835 0.2606036 0.9015138 -0.3455004 0.2606003 0.9015082 -0.3454993 0.3737447 0.8607817 -0.3454943 0.3737459 0.8607833 -0.3454947 0.4807509 0.8059231 -0.345521 0.4807438 0.805916 -0.3455209 0.5798575 0.7378215 -0.3454906 0.5798666 0.7378284 -0.3454924 0.6694542 0.6576215 -0.3455045 0.6694502 0.6576192 -0.3455054 0.74805 0.5666103 -0.3455005 0.7480518 0.5666109 -0.3454998 0.814367 0.4663006 -0.3455301 0.8143559 0.4662976 -0.3455305 0.8672991 0.3583308 -0.3455303 0.8672991 0.3583309 -0.345533 0.906 0.2444807 -0.3455335 0.9059999 0.2444807 -0.3455328 0.9298253 0.1266179 -0.3454899 0.9298414 0.126616 -0.3454892 0.938399 0.006672799 -0.3454965 0.9383962 0.006673455 -0.3454973 0.9315455 -0.1133784 -0.3455094 0.9315412 -0.1133767 -0.3455079 0.9093943 -0.2315735 -0.3455 0.9093969 -0.2315749 -0.3454992 0.8723182 -0.3459642 -0.3454993 0.8723182 -0.3459641 -0.3454992 0.820917 -0.4546709 -0.3455086 0.8209145 -0.4546684 -0.345508 0.7560325 -0.5559129 -0.3454995 0.7560345 -0.5559155 -0.3454988 0.6787388 -0.6480309 -0.3454853 0.6787416 -0.6480354 -0.3454872 0.5902996 -0.7295101 -0.345485 0.5902999 -0.7295109 -0.345488 0.4921649 -0.7990068 -0.3455057 0.492163 -0.7990003 -0.3455049 0.3859485 -0.8553771 -0.3455072 0.3859484 -0.8553764 -0.3455058 0.2733977 -0.8977079 -0.3454975 0.2733978 -0.897711 -0.3455011 0.1563541 -0.9253013 -0.3455149 0.1563546 -0.925296 -0.3455104 0.03674787 -0.9376952 -0.3455003 0.03674703 -0.9376989 -0.3455005 -0.08346396 -0.9346995 -0.3455026 -0.08346372 -0.9346988 -0.3454992 -0.2023063 -0.9163528 -0.345489 -0.2023081 -0.9163563 -0.3454891 -0.3178277 -0.8829625 -0.3455001 -0.3178253 -0.8829591 -0.3454982 -0.428128 -0.8350673 -0.34551 -0.428125 -0.8350639 -0.3455122 -0.531394 -0.7734609 -0.3454977 -0.5313982 -0.7734645 -0.3454977 -0.625945 -0.6991597 -0.3454946 -0.6259459 -0.6991603 -0.345493 -0.710214 -0.6133766 -0.3455221 -0.7102041 -0.6133717 -0.3455237 -0.7828097 -0.5175154 -0.3455163 -0.7828124 -0.5175163 -0.3455168 -0.8425632 -0.4131652 -0.3455215 -0.8425614 -0.4131648 -0.3455225 -0.8884782 -0.3020277 -0.3455013 -0.8884863 -0.3020283 -0.1792591 -0.9642979 -0.1949249 -0.1792338 -0.9643028 -0.1949235 -0.1792345 -0.9813119 -0.07001399 -0.1792678 -0.9813056 -0.07001662 -0.179269 -0.9822021 0.05605077 -0.1792852 -0.9821993 0.05604916 -0.1792867 -0.9669677 0.1811898 -0.1792618 -0.9669716 0.1811929 -0.1792618 -0.9358629 0.3033575 -0.1792839 -0.9358597 0.3033543 -0.1792808 -0.8893854 0.420538 -0.179258 -0.8893881 0.4205416 -0.179259 -0.8283084 0.5308216 -0.1792616 -0.8283081 0.530821 -0.1792613 -0.7536273 0.6323854 -0.1792771 -0.753626 0.6323825 -0.1792767 -0.6665721 0.7235617 -0.1792665 -0.6665726 0.7235637 -0.1792672 -0.5685716 0.8028634 -0.1792691 -0.5685716 0.802863 -0.1792693 -0.4612373 0.868978 -0.1792889 -0.4612371 0.868974 -0.1792839 -0.3463272 0.9208229 -0.1792441 -0.3463263 0.920831 -0.1792493 -0.2257314 0.9575568 -0.1792832 -0.2257331 0.9575501 -0.1792883 -0.1014289 0.978554 -0.179265 -0.1014273 0.9785584 -0.1792674 0.0245372 0.9834944 -0.179248 0.02453905 0.9834978 -0.1792476 0.1501061 0.9722852 -0.1792812 0.1501022 0.9722796 -0.1792829 0.2732025 0.9451021 -0.1792693 0.2732045 0.9451041 -0.1792659 0.3918179 0.9024092 -0.1792546 0.3918197 0.9024108 -0.1792498 0.5040002 0.8448984 -0.1792463 0.5040008 0.8448988 -0.179247 0.6079074 0.7735109 -0.1792581 0.6079053 0.7735099 -0.1792548 0.7018306 0.6894213 -0.1792879 0.7018241 0.6894192 -0.1792897 0.7842227 0.5940117 -0.1792678 0.784227 0.5940126 -0.1792668 0.8537493 0.4888513 -0.1792601 0.8537507 0.4888514 -0.1792615 0.9092519 0.3756677 -0.1792237 0.9092597 0.3756672 -0.1792213 0.9498353 0.2563056 -0.1792629 0.9498271 0.2563073 -0.1792634 0.9748049 0.1327407 -0.1792875 0.9748002 0.1327424 -0.1792873 0.9837719 0.007000327 -0.1792333 0.9837817 0.006995499 -0.1792324 0.9765997 -0.1188648 -0.1792637 0.9765943 -0.1188613 -0.1792664 0.9533752 -0.2427738 -0.179275 0.9533739 -0.2427727 -0.1792745 0.914503 -0.3626912 -0.1792383 0.9145079 -0.3626968 -0.1792395 0.8606193 -0.4766631 -0.1792666 0.8606162 -0.4766585 -0.1792647 0.7925947 -0.5828017 -0.1793048 0.7925909 -0.5827944 -0.1793015 0.7115588 -0.6793638 -0.1792844 0.71156 -0.6793671 -0.1792824 0.6188433 -0.7647815 -0.1792562 0.6188445 -0.7647868 -0.179255 0.5159654 -0.8376441 -0.1792457 0.5159655 -0.8376458 -0.17925 0.4046133 -0.8967484 -0.1792706 0.4046134 -0.8967441 -0.1792702 0.2866185 -0.9411227 -0.1792823 0.286619 -0.9411203 -0.1792818 0.163918 -0.9700458 -0.1792489 0.1639161 -0.9700523 -0.1792501 0.03852379 -0.983049 -0.1792661 0.03852516 -0.9830461 -0.1792659 -0.08750009 -0.9799018 -0.1792633 -0.08750033 -0.9799023 -0.1792638 -0.2120901 -0.9606676 -0.1792671 -0.2120897 -0.960667 -0.1792705 -0.3331955 -0.9256581 -0.1792628 -0.3331965 -0.9256591 -0.179264 -0.4488314 -0.8754512 -0.1792551 -0.4488329 -0.8754523 -0.1792524 -0.5570974 -0.8108706 -0.1792669 -0.5570948 -0.8108691 -0.1792663 -0.6562155 -0.7329698 -0.1792742 -0.6562141 -0.7329692 -0.1792742 -0.7445544 -0.6430392 -0.1792361 -0.7445619 -0.6430413 -0.1792336 -0.8206811 -0.5425475 -0.1792765 -0.8206725 -0.5425465 -0.1792747 -0.8833138 -0.4331482 -0.179272 -0.8833143 -0.4331482 -0.1792739 -0.9314514 -0.3166375 -0.1792574 -0.9314546 -0.316637 -4.38819e-4 0.04452085 0.9990084 2.84792e-4 0.1525754 0.9882918 -1.54543e-4 0.2173205 0.9761003 -1.52972e-4 0.1525727 0.9882923 -5.93124e-4 0.2173206 0.9761002 2.71914e-4 0.2777023 0.9606671 -4.13153e-4 0.38352 0.9235325 -4.04244e-4 0.3982614 0.9172719 -4.04305e-4 0.3835179 0.9235333 -7.51428e-5 0.3982712 0.9172677 1.00726e-4 0.5380581 0.8429078 -1.34059e-4 0.5122953 0.8588093 -1.34059e-4 0.5122992 0.8588072 -5.04116e-4 0.53806 0.8429066 3.11476e-4 0.6179137 0.7862459 -1.99161e-4 0.6762579 0.7366648 -1.99161e-4 0.6762546 0.7366681 -0.001767933 0.6179147 0.7862432 2.21475e-4 0.7133836 0.7007737 -3.24158e-4 0.7939031 0.6080443 -3.12324e-4 0.7971363 0.6037992 -3.12332e-4 0.7939018 0.6080459 -2.02583e-4 0.7971404 0.6037942 2.66681e-4 0.8874284 0.4609457 -1.19001e-4 0.867807 0.4969014 -1.19638e-4 0.8874273 0.4609476 -9.59859e-4 0.8678057 0.4969025 0.001144289 0.9526019 0.3042176 -2.28786e-4 0.9242257 0.3818466 -2.30788e-4 0.9526007 0.3042235 -0.001806199 0.9242248 0.3818443 2.12969e-4 0.9654663 0.260528 -2.90974e-4 0.9896824 0.1432785 -2.58284e-4 0.9908534 0.1349428 -2.58308e-4 0.9896817 0.1432833 -1.09105e-4 0.9908559 0.1349239 1.3831e-4 0.9997674 -0.02156448 -1.79594e-4 0.9999747 0.007108807 -1.79928e-4 0.9997672 -0.02157461 -6.45535e-4 0.9999745 0.007118046 7.81394e-4 0.982582 -0.1858279 -4.215e-4 0.9926739 -0.1208238 -4.22839e-4 0.9825816 -0.1858311 -0.001395285 0.9926747 -0.1208105 2.88419e-4 0.9690747 -0.2467675 -4.15225e-4 0.9385928 -0.3450267 -2.74605e-4 0.9295598 -0.3686712 -2.74859e-4 0.9385938 -0.3450241 6.38507e-5 0.9295629 -0.3686636 -8.33996e-5 0.8690031 -0.4948065 -2.34105e-4 0.8747861 -0.4845091 -2.34162e-4 0.8690034 -0.4948062 -3.75191e-4 0.8747878 -0.4845061 4.62635e-4 0.7757071 -0.6310929 -5.13956e-4 0.8056458 -0.5923973 -5.14571e-4 0.7757121 -0.6310868 -9.28747e-4 0.7999997 -0.5999997 3.19511e-4 0.7232789 -0.690556 -4.95091e-4 0.6612533 -0.7501625 -1.90275e-4 0.6290312 -0.77738 -1.90972e-4 0.6612558 -0.7501605 1.9256e-4 0.6290352 -0.7773768 -2.60785e-4 0.5287655 -0.8487679 -1.8767e-4 0.5244591 -0.8514356 -1.87679e-4 0.5287636 -0.8487691 -1.48987e-4 0.5244634 -0.851433 1.20711e-4 0.4112755 -0.9115111 -4.52433e-4 0.3818491 -0.9242246 -2.90692e-4 0.2913656 -0.9566118 -2.92946e-4 0.3818498 -0.9242243 3.0617e-4 0.291338 -0.9566201 -5.30607e-4 0.2245185 -0.9744697 -5.51797e-6 0.1666144 -0.9860221 -6.62969e-6 0.2245174 -0.9744701 2.76873e-4 0.166617 -0.9860216 -3.93905e-4 0.06106448 -0.9981338 -4.07557e-5 0.03915816 -0.999233 -4.08617e-5 0.06106311 -0.9981339 5.29041e-5 -0.4562197 -0.8898672 0.002292275 -0.5648484 -0.8251915 -0.001982927 -0.3386867 -0.9408972 3.28334e-5 0.03915482 -0.9992332 -3.45842e-5 -0.08894056 -0.9960369 -3.4599e-4 -0.1040561 -0.9945714 3.1276e-5 -0.2155925 -0.9764835 2.92044e-5 -0.1040475 -0.9945724 2.4851e-4 -0.2155805 -0.976486 -5.21722e-4 -0.2663387 -0.9638794 2.79078e-4 -0.3386806 -0.9409013 2.78041e-4 -0.2662878 -0.9638935 3.60098e-4 -0.4213562 -0.9068951 -0.00375849 -0.4562245 -0.8898568 0.004133045 -0.6929692 -0.7209555 5.12955e-5 -0.5648781 -0.8251744 -5.75062e-4 -0.5662692 -0.8242201 6.2876e-5 -0.6670193 -0.7450404 6.26148e-5 -0.6929953 -0.7209421 -7.65883e-4 -0.6670204 -0.7450391 9.2131e-4 -0.8022037 -0.5970499 3.77406e-5 -0.7568161 -0.6536279 3.77407e-5 -0.7568134 -0.6536309 -5.27099e-4 -0.8022051 -0.5970483 2.63563e-4 -0.8341895 -0.5514779 -3.09879e-4 -0.8895312 -0.4568743 -3.09879e-4 -0.889535 -0.4568668 -0.002557098 -0.8341303 -0.5515616 0 -0.8978605 -0.4402801 0 -0.953987 -0.299848 -1.53834e-4 -0.9467933 -0.3218423 -1.54027e-4 -0.9539882 -0.2998441 -6.29275e-4 -0.9467893 -0.3218535 7.95627e-4 -0.9915629 -0.1296239 -1.6581e-4 -0.9801746 -0.1981357 -1.6581e-4 -0.9801751 -0.1981331 -5.91196e-4 -0.9915617 -0.1296346 2.57111e-4 -0.9974647 -0.07116335 -3.85468e-4 -0.9990078 0.04453301 -3.71677e-4 -0.9983775 0.05694013 -3.71717e-4 -0.9990084 0.04452085 -1.15673e-4 -0.9983757 0.05697309 1.54056e-4 -0.9761 0.2173221 -1.27091e-4 -0.9828938 0.1841733 -1.27091e-4 -0.9828931 0.1841772 -5.21881e-4 -0.9761008 0.2173183 3.1646e-4 -0.9512732 0.3083491 -2.17879e-4 -0.9235351 0.3835138 -2.17879e-4 -0.923533 0.3835191 -0.001859366 -0.9512682 0.3083591 2.00722e-4 -0.9040324 0.4274637 -2.9051e-4 -0.8429089 0.5380561 -2.85604e-4 -0.8419553 0.5395473 -2.85605e-4 -0.8429044 0.5380633 -2.49068e-4 -0.8419457 0.5395624 3.25855e-4 -0.7366682 0.6762543 -1.17972e-4 -0.7660369 0.6427967 -1.17972e-4 -0.7660377 0.6427958 -5.63484e-4 -0.736668 0.6762545 3.19392e-4 -0.6775471 0.7354793 -2.86083e-4 -0.6080407 0.7939058 -2.86082e-4 -0.6080456 0.7939021 -0.002145886 -0.6775428 0.7354803 1.26539e-4 -0.5779352 0.8160826 -1.77867e-4 -0.4609485 0.8874268 -2.17323e-4 -0.4688291 0.8832889 -2.17349e-4 -0.4609477 0.8874273 -4.0016e-4 -0.4688315 0.8832875 5.15424e-4 -0.2998434 0.9539883 -1.26594e-4 -0.3520309 0.9359885 -1.26594e-4 -0.3520305 0.9359885 -5.87184e-4 -0.2998462 0.9539874 3.04585e-4 -0.2294483 0.9733208 -3.7174e-4 -0.1296321 0.9915621 -3.7174e-4 -0.1296294 0.9915624 -0.002450346 -0.2294686 0.973313 3.4584e-5 -0.1030986 0.9946711 -4.74351e-5 0.04451912 0.9990085 -4.37868e-4 -0.01958584 0.9998081 -4.38771e-4 0.04451745 0.9990085 0.865197 -0.4843463 -0.1297802 0.865197 -0.4995239 -0.04370379 0.865197 -0.354566 -0.354566 0.865197 -0.4107487 -0.2876101 0.865197 -0.4544523 -0.2119132 0.865197 -0.1297802 -0.4843464 0.865197 -0.2119138 -0.4544522 0.865197 -0.2876093 -0.4107494 0.865197 0.1297802 -0.4843464 0.865197 0.04370391 -0.4995239 0.865197 -0.04370391 -0.4995239 0.865197 0.354566 -0.354566 0.8651971 0.2876093 -0.4107494 0.8651968 0.2119138 -0.4544522 0.865197 0.4843463 -0.1297802 0.8651971 0.4544523 -0.2119132 0.865197 0.4107487 -0.2876101 0.865197 0.4843463 0.1297802 0.865197 0.4995239 0.04370379 0.865197 0.4995239 -0.04370379 0.865197 0.354566 0.354566 0.865197 0.4107487 0.2876101 0.865197 0.4544523 0.2119132 0.8651971 0.1297801 0.4843462 0.865197 0.2119137 0.454452 0.865197 0.2876101 0.4107487 0.865197 -0.1297801 0.4843462 0.8651971 -0.0437026 0.499524 0.865197 0.0437026 0.4995239 0.865197 -0.354566 0.354566 0.865197 -0.2876101 0.4107487 0.865197 -0.2119137 0.454452 0.865197 -0.4843463 0.1297802 0.8651971 -0.4544523 0.2119132 0.865197 -0.4107487 0.2876101 0.865197 -0.4995239 0.04370379 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.8660252 -0.5000005 -2.62548e-7 0.8660256 -0.5 0 0.8660259 -0.4999992 0 0 -1 0 0 -1 0 0 -1 0 -0.8660259 -0.4999992 -2.78957e-7 -0.8660256 -0.5 0 -0.8660252 -0.5000005 0 -0.8660252 0.5000005 -2.62548e-7 -0.8660256 0.5 0 -0.8660259 0.4999992 0 0 1 0 0 1 0 0 1 0 0.8660259 0.4999992 -2.78957e-7 0.8660256 0.5 0 0.8660252 0.5000005 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0.9988855 -0.001140475 -0.04718559 0.9988836 -0.004559338 -0.04702007 0.9988836 -0.004559278 -0.04701983 0.9988836 -0.009076118 -0.04636031 0.9988836 -0.009076058 -0.04636013 0.9988835 -0.01350808 -0.0452677 0.9988836 -0.0135082 -0.04526787 0.9988836 -0.01781404 -0.04375278 0.9988836 -0.01781415 -0.04375296 0.9988836 -0.0219537 -0.04182934 0.9988835 -0.02195382 -0.04182946 0.9988835 -0.02588844 -0.03951537 0.9988835 -0.02588856 -0.03951549 0.9988835 -0.02958154 -0.03683245 0.9988835 -0.02958166 -0.03683257 0.9988836 -0.03299838 -0.0338056 0.9988836 -0.0329976 -0.03380495 0.9988836 -0.03610616 -0.03046232 0.9988836 -0.03610676 -0.03046268 0.9988835 -0.03887826 -0.02683573 0.9988836 -0.0388785 -0.02683585 0.9988836 -0.04128706 -0.02295821 0.9988835 -0.04128646 -0.02295798 0.9988836 -0.04330945 -0.01886612 0.9988836 -0.04331058 -0.01886647 0.9988835 -0.04492926 -0.01459842 0.9988835 -0.04492956 -0.01459848 0.9988836 -0.04612874 -0.010194 0.9988835 -0.0461288 -0.01019406 0.9988835 -0.04689735 -0.00569421 0.9988836 -0.04689592 -0.00569421 0.9988836 -0.04722654 -0.001141428 0.9988836 -0.04722619 -0.001141488 0.9988836 -0.04711586 0.003421723 0.9988835 -0.04711717 0.003421962 0.9988834 -0.0465669 0.007953345 0.9988835 -0.04656666 0.007953286 0.9988836 -0.04558163 0.01241064 0.9988836 -0.04558098 0.0124104 0.9988836 -0.04417049 0.01675164 0.9988835 -0.04417079 0.01675176 0.9988836 -0.04234784 0.02093666 0.9988835 -0.04234749 0.02093642 0.9988836 -0.04012912 0.02492576 0.9988836 -0.04012978 0.0249263 0.9988836 -0.03753662 0.02868306 0.9988835 -0.03753614 0.02868258 0.9988836 -0.03459268 0.03217142 0.9988836 -0.0345928 0.03217154 0.9988836 -0.03132629 0.03536009 0.9988836 -0.03132683 0.03536087 0.9988834 -0.02776789 0.03821915 0.9988835 -0.02776783 0.03821903 0.9988835 -0.02394932 0.04072064 0.9988836 -0.02394902 0.04071998 0.9988836 -0.01990723 0.04284131 0.9988836 -0.01990687 0.04284024 0.9988836 -0.01567924 0.04456156 0.9988836 -0.01567941 0.04456233 0.9988836 -0.01130521 0.04586756 0.9988836 -0.01130515 0.04586714 0.9988836 -0.006825625 0.04674422 0.9988835 -0.006825625 0.0467447 0.9988836 -0.002282321 0.0471853 0.9988836 -0.002282381 0.04718458 0.9988836 0.002282321 0.04718458 0.9988836 0.00228244 0.0471853 0.9988836 0.006825685 0.0467447 0.9988836 0.006825625 0.04674446 0.9988836 0.01130527 0.0458675 0.9988835 0.01130527 0.04586756 0.9988836 0.01567947 0.04456233 0.9988836 0.01567912 0.04456162 0.9988836 0.01990675 0.0428403 0.9988836 0.01990735 0.04284125 0.9988836 0.02394896 0.04072004 0.9988836 0.02394938 0.04072064 0.9988834 0.02776783 0.03821903 0.9988834 0.02776789 0.03821915 0.9988835 0.03132694 0.03536081 0.9988835 0.03132623 0.03536015 0.9988835 0.03459274 0.0321716 0.9988834 0.03459352 0.0321722 0.9988835 0.03753715 0.0286833 0.9988834 0.03753668 0.028683 0.9988835 0.04012984 0.02492618 0.9988836 0.04012906 0.02492588 0.9988835 0.04234743 0.02093648 0.9988836 0.04234784 0.0209366 0.9988835 0.04417079 0.01675176 0.9988836 0.04417049 0.01675164 0.9988836 0.04558098 0.01241046 0.9988835 0.04558163 0.01241058 0.9988835 0.04656666 0.007953286 0.9988836 0.04656696 0.007953286 0.9988834 0.04711717 0.003421783 0.9988835 0.04711586 0.003421843 0.9988836 0.04722619 -0.001141428 0.9988837 0.04722654 -0.001141488 0.9988836 0.04689598 -0.005694091 0.9988836 0.04689735 -0.005694389 0.9988834 0.0461288 -0.01019406 0.9988834 0.04612874 -0.010194 0.9988835 0.04492956 -0.01459848 0.9988834 0.04492926 -0.01459836 0.9988835 0.04331052 -0.01886659 0.9988835 0.0433095 -0.018866 0.9988836 0.04128652 -0.02295786 0.9988835 0.04128706 -0.02295827 0.9988836 0.0388785 -0.02683591 0.9988835 0.03887832 -0.02683573 0.9988836 0.0361067 -0.0304628 0.9988836 0.03610622 -0.03046226 0.9988837 0.03299766 -0.03380489 0.9988836 0.03299832 -0.03380572 0.9988834 0.02958166 -0.03683257 0.9988836 0.02958154 -0.03683245 0.9988836 0.02588856 -0.03951555 0.9988835 0.02588844 -0.03951537 0.9988835 0.02195376 -0.04182946 0.9988836 0.02195376 -0.04182934 0.9988836 0.01781415 -0.04375302 0.9988836 0.01781409 -0.04375278 0.9988836 0.01350814 -0.04526787 0.9988835 0.01350814 -0.0452677 0.9988836 0.009076118 -0.04636013 0.9988836 0.009076118 -0.04636031 0.9988836 0.004559338 -0.04701983 0.9988835 0.004559338 -0.04702007 0.9988855 0.001140475 -0.04718559 0.9986178 0 -0.05256074 0.1587109 0.9866766 -0.03577929 0.04704821 0.998601 -0.02413684 0.04704803 0.9916095 -0.1204038 0.04705059 0.9916093 -0.1204043 0.04703611 0.9916095 -0.1204089 0.04703563 0.9753607 -0.2155442 0.04703384 0.9753607 -0.2155444 0.04705494 0.9157766 -0.3989226 0.04705297 0.9157768 -0.3989222 0.04705315 0.9500029 -0.3086757 0.04704278 0.9500037 -0.3086748 0.04703551 0.950007 -0.3086653 0.04704499 0.7634693 -0.6441283 0.04704511 0.8220732 -0.5674349 0.04703581 0.8220731 -0.5674359 0.04703468 0.8729989 -0.485449 0.04703801 0.8730005 -0.4854457 0.04705524 0.8729988 -0.4854471 0.04705613 0.9157766 -0.3989223 0.04703879 0.763471 -0.644127 0.04704535 0.7634703 -0.6441273 0.04704469 0.6977378 -0.7148069 0.04705029 0.697737 -0.7148072 0.04704153 0.6977349 -0.71481 0.04704135 0.6254917 -0.7788114 0.04703521 0.6254914 -0.7788121 0.04703915 0.4642099 -0.8844752 0.04704624 0.4642085 -0.8844756 0.04704707 0.5474057 -0.8355439 0.04704654 0.5474057 -0.8355439 0.04703587 0.5474128 -0.8355399 0.04703664 0.2856287 -0.9571853 0.04703527 0.3766779 -0.9251495 0.04703497 0.3766772 -0.9251497 0.04703122 0.3766776 -0.9251497 0.04703021 0.4642082 -0.8844766 0.04703933 0.1919136 -0.9802839 0.04704046 0.1919133 -0.9802839 0.04704016 0.2856291 -0.9571852 0.04704523 -0.09640777 -0.9942295 0.04704546 0 -0.9988929 0.04704546 0 -0.9988927 0.04704523 0.09640777 -0.9942295 0.04704469 0.09640747 -0.9942296 0.04704952 0.09640681 -0.9942294 0.04705083 0.1919155 -0.980283 0.04704344 -0.09640681 -0.9942297 0.04704952 -0.09640747 -0.9942294 0.04705083 -0.1919155 -0.980283 0.04703927 -0.1919136 -0.980284 0.04704046 -0.1919133 -0.9802839 0.04704016 -0.2856287 -0.9571852 0.04703664 -0.2856292 -0.9571853 0.04703521 -0.3766779 -0.9251494 0.04703497 -0.3766772 -0.9251498 0.04703116 -0.3766776 -0.9251497 0.04703021 -0.4642082 -0.8844766 0.04703915 -0.4642099 -0.8844752 0.04704636 -0.4642086 -0.8844757 0.04704707 -0.5474057 -0.8355439 0.04704672 -0.5474057 -0.8355439 0.04703587 -0.5474128 -0.8355399 0.04703521 -0.6254919 -0.7788116 0.04704135 -0.6254912 -0.7788118 0.04703468 -0.8729989 -0.485449 0.04703581 -0.8220736 -0.5674352 0.04704511 -0.8220728 -0.5674358 0.04704499 -0.7634693 -0.6441283 0.04704076 -0.7634704 -0.6441273 0.04704517 -0.7634707 -0.6441267 0.04704469 -0.6977371 -0.7148074 0.0470522 -0.6977376 -0.7148066 0.04704159 -0.6977349 -0.71481 0.04703927 -0.8730011 -0.4854445 0.04702645 -0.873001 -0.485446 0.04702603 -0.9157753 -0.3989286 0.04705494 -0.9157765 -0.3989226 0.04705297 -0.9157768 -0.3989222 0.04705315 -0.9500033 -0.3086746 0.04707247 -0.950003 -0.3086723 0.0470668 -0.9500057 -0.3086649 0.04706597 -0.9753584 -0.2155472 0.04703563 -0.9753606 -0.2155444 0.04703611 -0.9916095 -0.1204089 0.04705059 -0.9916093 -0.1204043 0.04701542 -0.9916116 -0.1203988 0.04701536 -0.9986025 -0.02414035 0.0470398 -0.9986014 -0.02413684 0.04703718 -0.9986016 -0.02413576 0.04703706 -0.9962692 0.07235473 0.04703778 -0.9962692 0.07235461 0.04704499 -0.9638072 0.2624166 0.04701411 -0.9638102 0.2624115 0.04701346 -0.9846363 0.1681703 0.0470184 -0.984636 0.1681708 0.04703843 -0.9846327 0.1681835 0.04704731 -0.8954347 0.4426998 0.0470491 -0.9339676 0.3542469 0.04705262 -0.9339801 0.3542138 0.04702067 -0.9339826 0.3542112 0.04702085 -0.9638067 0.2624228 0.04703426 -0.8485277 0.5270566 0.04703545 -0.8485274 0.5270568 0.04703414 -0.8954347 0.4427013 0.04702979 -0.6623994 0.7476733 0.04702848 -0.731457 0.680264 0.04705423 -0.7314579 0.6802611 0.04705458 -0.793698 0.6064894 0.04705101 -0.7936968 0.6064912 0.04705321 -0.7936966 0.6064914 0.04705423 -0.8485288 0.5270531 0.04706257 -0.6623869 0.7476823 0.04704809 -0.6623885 0.7476817 0.04704946 -0.587135 0.8081206 0.04705429 -0.5871343 0.8081209 0.04705888 -0.5871351 0.8081198 0.04705768 -0.5063995 0.861014 0.04704135 -0.5063984 0.8610156 0.0470426 -0.4209311 0.905872 0.04704129 -0.4209334 0.905871 0.0470401 -0.4209333 0.9058712 0.04704028 -0.3315445 0.9422662 0.04705321 -0.3315415 0.9422666 0.04704833 -0.3315406 0.9422671 0.04704773 -0.2390483 0.9698672 0.0470348 -0.23905 0.9698675 0.04704684 -0.2390604 0.9698644 0.04704582 -0.1443274 0.988411 0.0470457 -0.1443274 0.988411 0.04704684 0.2390604 0.9698644 0.04704582 0.1443274 0.988411 0.0470457 0.1443274 0.988411 0.04704564 0.04826474 0.997726 0.04705917 0.04825979 0.9977256 0.04705631 0.04825937 0.9977258 0.04705631 -0.04825979 0.9977257 0.04706031 -0.04825937 0.9977256 0.04704564 -0.04826474 0.997726 0.04703301 0.2390485 0.9698679 0.04704785 0.2390498 0.9698668 0.04704833 0.3315406 0.9422671 0.04705333 0.3315415 0.9422666 0.04704028 0.3315445 0.9422662 0.0470401 0.4209333 0.9058712 0.04704129 0.4209334 0.905871 0.0470426 0.4209311 0.905872 0.04704135 0.5063999 0.8610147 0.04705768 0.506398 0.8610149 0.04705888 0.5871351 0.8081198 0.04705429 0.5871343 0.8081209 0.04704946 0.587135 0.8081206 0.04704821 0.6623873 0.7476828 0.04705917 0.6623881 0.7476814 0.04702979 0.6623994 0.7476733 0.04702848 0.7314588 0.6802619 0.04705417 0.7314561 0.6802632 0.04703414 0.8954353 0.4427 0.04703545 0.8485274 0.5270568 0.04703426 0.8485277 0.5270566 0.04705417 0.8485288 0.5270531 0.04705315 0.7936967 0.6064912 0.04705059 0.7936967 0.6064915 0.04705458 0.793698 0.6064894 0.04705262 0.9339801 0.3542138 0.0470491 0.9339676 0.3542469 0.04704731 0.8954342 0.4427011 0.04704499 0.9638072 0.2624166 0.04702091 0.9638067 0.2624228 0.04702061 0.9339826 0.3542112 0.04708856 0.9988178 0.0120669 0.04703706 0.9962692 0.07235467 0.04703778 0.9962691 0.07235473 0.04703843 0.9846327 0.1681835 0.04701769 0.984636 0.1681702 0.04701346 0.9846361 0.1681708 0.04701411 0.9638102 0.2624115 0.1794629 -0.1421431 0.9734415 0.1794707 -0.1421414 0.9734404 0.1794711 -0.2354289 0.9551771 0.1794703 -0.2354292 0.9551772 0.1794706 -0.3265206 0.9279949 0.1794737 -0.3265198 0.9279946 0.1794735 -0.4145576 0.8921498 0.1794742 -0.4145574 0.8921497 0.1794756 -0.4987286 0.8479731 0.1794718 -0.4987297 0.8479732 0.1794716 -0.5782425 0.7958804 0.1794777 -0.5782409 0.7958803 0.1794776 -0.6523524 0.7363588 0.17946 -0.6523572 0.7363588 0.1794605 -0.7203816 0.6699585 0.1794658 -0.7203801 0.6699586 0.1794657 -0.7816767 0.5973052 0.1794698 -0.7816756 0.5973055 0.1794692 -0.8356765 0.5190718 0.1794791 -0.8356739 0.5190725 0.1794797 -0.8818705 0.4359951 0.1794734 -0.881872 0.4359944 0.1794724 -0.9198346 0.3488466 0.1794844 -0.9198318 0.3488481 0.1794841 -0.9492062 0.2584433 0.1794738 -0.9492086 0.2584418 0.1794739 -0.969721 0.1656212 0.1794823 -0.9697192 0.1656225 0.1794829 -0.9811769 0.07125818 0.1794853 -0.9811765 0.0712586 0.179485 -0.9834735 -0.02376884 0.1794733 -0.9834756 -0.02377122 0.1794734 -0.9765899 -0.1185817 0.179479 -0.9765889 -0.1185804 0.179479 -0.9605856 -0.2122797 0.1794649 -0.9605874 -0.2122829 0.1794648 -0.935616 -0.3039986 0.1794694 -0.9356154 -0.3039975 0.1794694 -0.9019063 -0.3928815 0.1794742 -0.9019058 -0.3928803 0.1794737 -0.859777 -0.4780927 0.1794742 -0.859777 -0.4780926 0.1794739 -0.8096202 -0.5588418 0.1794795 -0.80962 -0.5588403 0.1794795 -0.751905 -0.6343706 0.1794825 -0.751905 -0.6343698 0.1794817 -0.6871685 -0.7039785 0.1794754 -0.6871685 -0.7039802 0.1794751 -0.6160184 -0.7670138 0.179468 -0.6160181 -0.7670156 0.1794685 -0.5391141 -0.8228894 0.179473 -0.5391144 -0.8228882 0.1794731 -0.4571778 -0.8710786 0.1794775 -0.4571782 -0.8710774 0.179477 -0.3709713 -0.9111358 0.179477 -0.3709713 -0.9111357 0.1794769 -0.2813031 -0.9426859 0.1794723 -0.2813023 -0.9426869 0.1794725 -0.1890064 -0.9654359 0.1794742 -0.1890066 -0.9654353 0.1794743 -0.09494698 -0.9791701 0.1794754 -0.09494721 -0.9791699 0.1794763 0 -0.9837623 0.1794763 0 -0.9837623 0.1794754 0.09494698 -0.9791699 0.1794743 0.09494721 -0.97917 0.1794742 0.1890063 -0.9654355 0.1794725 0.1890068 -0.9654357 0.1794723 0.2813033 -0.9426867 0.1794769 0.2813022 -0.9426862 0.179477 0.3709713 -0.9111357 0.179477 0.3709713 -0.9111357 0.1794775 0.4571774 -0.8710778 0.179473 0.4571786 -0.8710782 0.1794729 0.5391137 -0.8228888 0.1794685 0.5391148 -0.822889 0.1794682 0.6160192 -0.7670148 0.179475 0.6160173 -0.7670146 0.1794754 0.6871693 -0.7039793 0.1794816 0.6871677 -0.7039793 0.1794824 0.7519046 -0.6343702 0.1794794 0.7519053 -0.63437 0.1794797 0.8096193 -0.5588412 0.1794738 0.8096209 -0.5588409 0.1794743 0.8597769 -0.4780926 0.1794736 0.859777 -0.4780926 0.1794742 0.9019055 -0.3928812 0.1794694 0.9019066 -0.3928807 0.1794694 0.9356152 -0.3039984 0.1794813 0.9356123 -0.3039999 0.1794819 0.9605851 -0.2122796 0.179479 0.9605857 -0.2122791 0.179479 0.9765888 -0.1185815 0.1794734 0.97659 -0.1185805 0.1794732 0.9834757 -0.0237689 0.179485 0.9834735 -0.02377122 0.1794853 0.9811766 0.07125812 0.1794829 0.9811769 0.07125866 0.1794823 0.9697194 0.1656209 0.1794738 0.9697207 0.1656228 0.1794737 0.9492081 0.2584438 0.1794842 0.9492068 0.2584413 0.1794843 0.9198326 0.3488459 0.1794724 0.9198337 0.3488489 0.1794733 0.8818715 0.4359956 0.1794796 0.8818711 0.4359939 0.1794791 0.835675 0.5190709 0.1794693 0.8356754 0.5190735 0.1794697 0.7816762 0.5973048 0.1794655 0.7816763 0.597306 0.1794658 0.7203807 0.6699578 0.1794606 0.7203808 0.6699593 0.1794598 0.6523545 0.7363612 0.1794775 0.6523551 0.7363564 0.1794776 0.5782418 0.7958794 0.1794717 0.5782415 0.7958812 0.1794717 0.498729 0.8479737 0.1794757 0.4987293 0.8479726 0.1794743 0.4145576 0.8921497 0.1794735 0.4145575 0.8921498 0.1794737 0.3265204 0.9279944 0.1794705 0.32652 0.9279952 0.1794702 0.235429 0.9551773 0.179471 0.2354291 0.9551771 0.1794707 0.142143 0.9734402 0.1794629 0.1421416 0.9734418 0.1794626 0.04752767 0.982616 0.1794691 0.04752886 0.9826148 0.1794691 -0.04752761 0.9826148 0.1794627 -0.04752892 0.982616 0.345776 -0.1355749 0.9284709 0.3457687 -0.1355769 0.9284735 0.3457677 -0.2245573 0.9110536 0.3457853 -0.2245522 0.9110482 0.3457853 -0.3114329 0.8851227 0.3457727 -0.3114369 0.8851261 0.3457733 -0.3954071 0.8509371 0.345773 -0.3954073 0.8509372 0.345772 -0.4756899 0.8088021 0.3457692 -0.4756909 0.8088026 0.3457692 -0.5515308 0.7591162 0.3457655 -0.5515322 0.7591169 0.3457658 -0.6222216 0.7023434 0.3457799 -0.6222159 0.7023414 0.3457798 -0.6870991 0.6390079 0.345772 -0.6871023 0.6390087 0.3457723 -0.7455672 0.5697115 0.345777 -0.7455652 0.5697113 0.3457773 -0.7970691 0.4950949 0.3457625 -0.7970753 0.4950951 0.3457621 -0.8411387 0.4158537 0.3457776 -0.8411321 0.4158541 0.3457778 -0.8773409 0.3327321 0.3457729 -0.8773429 0.3327317 0.3457733 -0.9053603 0.2465029 0.3457837 -0.9053559 0.246504 0.3457837 -0.9249207 0.1579728 0.3457684 -0.9249267 0.1579706 0.3457678 -0.9358553 0.06796562 0.3457729 -0.9358535 0.06796652 0.3457728 -0.9380444 -0.02267068 0.3457716 -0.9380449 -0.02267092 0.3457721 -0.9314768 -0.1131041 0.3457735 -0.9314764 -0.1131038 0.3457738 -0.9162123 -0.2024739 0.3457753 -0.9162117 -0.2024735 0.345775 -0.8923928 -0.2899566 0.3457843 -0.8923901 -0.2899537 0.3457842 -0.8602391 -0.3747292 0.345777 -0.860241 -0.3747316 0.3457771 -0.8200595 -0.456005 0.3457679 -0.8200616 -0.4560083 0.3457679 -0.7722215 -0.5330276 0.3457689 -0.7722213 -0.5330272 0.3457689 -0.7171725 -0.6050682 0.3457724 -0.7171719 -0.6050668 0.3457732 -0.6554264 -0.671459 0.3457705 -0.6554267 -0.6714601 0.34577 -0.587561 -0.7315841 0.3457792 -0.5875603 -0.7315802 0.3457786 -0.5142098 -0.7848728 0.3457699 -0.5142101 -0.7848765 0.34577 -0.4360588 -0.8308404 0.3457716 -0.4360588 -0.8308398 0.3457716 -0.3538351 -0.869047 0.3457698 -0.3538351 -0.8690478 0.34577 -0.2683079 -0.8991408 0.3457744 -0.2683084 -0.8991389 0.3457737 -0.1802762 -0.9208372 0.3457693 -0.1802755 -0.9208389 0.3457693 -0.09056073 -0.9339392 0.345771 -0.09056103 -0.9339385 0.3457704 0 -0.9383192 0.3457704 0 -0.9383192 0.345771 0.09056067 -0.9339385 0.3457693 0.09056109 -0.9339392 0.3457692 0.1802765 -0.9208388 0.3457736 0.1802752 -0.9208373 0.3457744 0.2683075 -0.8991392 0.3457699 0.2683088 -0.8991405 0.3457698 0.3538354 -0.8690477 0.3457717 0.3538348 -0.8690472 0.3457716 0.4360585 -0.8308399 0.34577 0.4360591 -0.8308403 0.3457698 0.5142102 -0.7848766 0.3457698 0.5142101 -0.7848765 0.3457694 0.5875627 -0.7315829 0.3457701 0.5875625 -0.7315828 0.3457704 0.6554271 -0.6714597 0.3457733 0.655426 -0.6714594 0.3457725 0.7171715 -0.6050674 0.345769 0.7171729 -0.6050677 0.3457689 0.7722212 -0.5330274 0.345768 0.7722217 -0.5330274 0.3457677 0.8200626 -0.4560067 0.345777 0.8200587 -0.4560067 0.345777 0.8602403 -0.374733 0.3457698 0.8602433 -0.3747327 0.3457692 0.8923957 -0.2899543 0.345775 0.8923934 -0.2899548 0.3457753 0.9162116 -0.2024738 0.3457738 0.9162123 -0.2024736 0.3457735 0.9314764 -0.1131041 0.3457721 0.9314769 -0.1131038 0.3457716 0.9380448 -0.02267068 0.3457728 0.9380443 -0.02267092 0.3457729 0.9358536 0.0679655 0.3457678 0.9358552 0.06796669 0.3457683 0.9249262 0.1579738 0.3457837 0.9249212 0.1579697 0.3457837 0.9053565 0.2465019 0.3457733 0.9053596 0.246505 0.345773 0.8773425 0.3327327 0.3457778 0.8773412 0.3327311 0.3457776 0.8411335 0.4158512 0.3457623 0.8411372 0.4158566 0.3457625 0.7970737 0.4950977 0.3457772 0.7970708 0.4950923 0.3457771 0.7455657 0.5697104 0.3457725 0.7455665 0.5697123 0.345772 0.6871011 0.6390098 0.3457798 0.6871002 0.6390067 0.3457801 0.6222181 0.7023394 0.345766 0.6222194 0.7023454 0.3457657 0.5515316 0.7591174 0.3457691 0.5515314 0.7591158 0.3457692 0.4756904 0.808803 0.345772 0.4756904 0.8088018 0.345773 0.3954072 0.8509372 0.3457735 0.3954072 0.850937 0.3457726 0.3114345 0.885127 0.3457852 0.3114354 0.8851217 0.3457853 0.2245558 0.9110473 0.3457677 0.2245538 0.9110544 0.3457686 0.1355758 0.9284736 0.3457736 0.1355766 0.9284716 0.3457753 0.04533457 0.9372216 0.345763 0.04533219 0.9372262 0.3457629 -0.04533493 0.9372261 0.345776 -0.04533201 0.9372214 0.5017971 -0.1249825 0.8559083 0.5018109 -0.1249783 0.8559008 0.5018116 -0.2070036 0.8398421 0.5018056 -0.2070058 0.8398451 0.5018056 -0.2870916 0.8159469 0.5017988 -0.2870944 0.8159502 0.5017993 -0.3645069 0.784431 0.5018122 -0.3645011 0.7844256 0.5018127 -0.438507 0.745584 0.5018061 -0.4385102 0.7455866 0.5018061 -0.5084215 0.6997844 0.5017985 -0.5084255 0.699787 0.5017982 -0.5735918 0.6474498 0.5018038 -0.5735886 0.6474481 0.5018039 -0.6333984 0.5890665 0.5018016 -0.6333997 0.5890671 0.5018014 -0.6872964 0.5251847 0.5018023 -0.6872959 0.5251846 0.5018018 -0.7347747 0.4564 0.5018057 -0.7347724 0.4563996 0.5018058 -0.7753921 0.3833512 0.5017974 -0.7753973 0.3833516 0.5017971 -0.8087755 0.3067275 0.5018016 -0.8087729 0.3067276 0.5018013 -0.8346011 0.2272365 0.501805 -0.8345988 0.2272367 0.5018048 -0.852634 0.1456273 0.5018018 -0.8526358 0.1456269 0.5018017 -0.8627105 0.06265491 0.5017959 -0.862714 0.06265377 0.501796 -0.8647334 -0.02090257 0.501812 -0.8647242 -0.02089869 0.5018122 -0.8586701 -0.1042611 0.501801 -0.8586761 -0.1042643 0.5018008 -0.844605 -0.18665 0.5018035 -0.8446037 -0.1866492 0.5018035 -0.8226467 -0.2672934 0.5017982 -0.8226493 -0.2672955 0.501798 -0.7930122 -0.3454428 0.5017914 -0.793015 -0.3454456 0.5017917 -0.7559715 -0.4203716 0.5018058 -0.7559658 -0.4203648 0.5018057 -0.7118647 -0.4913653 0.5018024 -0.7118659 -0.4913669 0.5018026 -0.6611205 -0.5577757 0.5017948 -0.6611229 -0.55778 0.5017949 -0.6042019 -0.6189848 0.5018054 -0.6041992 -0.6189787 0.5018053 -0.5416384 -0.674403 0.5017995 -0.5416395 -0.6744064 0.5017998 -0.4740216 -0.7235333 0.5018054 -0.4740209 -0.7235299 0.5018049 -0.401977 -0.7659024 0.5018037 -0.401977 -0.7659031 0.5018035 -0.3261801 -0.8011242 0.5018038 -0.32618 -0.8011239 0.5018039 -0.2473376 -0.8288648 0.5018024 -0.2473375 -0.8288659 0.5018021 -0.1661862 -0.848868 0.5018033 -0.1661863 -0.8488672 0.5018036 -0.08348292 -0.8609436 0.5018022 -0.08348268 -0.8609443 0.5018022 0 -0.8649825 0.5018021 0 -0.8649825 0.5018022 0.08348298 -0.8609443 0.5018036 0.08348262 -0.8609436 0.5018033 0.166186 -0.8488672 0.5018021 0.1661864 -0.8488679 0.5018023 0.2473379 -0.8288657 0.5018039 0.2473373 -0.828865 0.5018038 0.32618 -0.801124 0.5018035 0.3261801 -0.8011241 0.5018038 0.4019773 -0.7659029 0.5018048 0.4019767 -0.7659025 0.5018053 0.47402 -0.7235307 0.5018072 0.4740189 -0.7235299 0.5018079 0.5416359 -0.6744029 0.5017967 0.541642 -0.6744064 0.5017959 0.6042029 -0.6189827 0.5017949 0.6042035 -0.6189831 0.5017949 0.6611239 -0.5577787 0.5018026 0.6611194 -0.5577771 0.5018023 0.7118663 -0.4913663 0.5018056 0.7118643 -0.4913659 0.5018059 0.7559642 -0.4203675 0.5017918 0.7559729 -0.4203687 0.5017915 0.7930155 -0.3454442 0.5018101 0.7930039 -0.3454439 0.5018109 0.8226425 -0.2672921 0.5018036 0.8226471 -0.2672918 0.5018035 0.8446036 -0.1866497 0.5018008 0.8446052 -0.1866495 0.501801 0.8586764 -0.1042618 0.5018121 0.8586698 -0.1042636 0.5018121 0.8647241 -0.02090233 0.5017961 0.8647335 -0.02089887 0.5017958 0.8627139 0.06265515 0.5018017 0.8627106 0.06265354 0.5018017 0.8526357 0.1456276 0.5018048 0.852634 0.1456266 0.501805 0.834599 0.2272359 0.5018014 0.8346008 0.2272372 0.5018014 0.8087732 0.3067266 0.5017972 0.8087751 0.3067284 0.5017974 0.7753965 0.3833533 0.5018058 0.775393 0.3833494 0.5018057 0.7347729 0.4563989 0.5018017 0.7347743 0.4564008 0.5018022 0.687296 0.5251844 0.5018012 0.6872964 0.5251849 0.5018016 0.6333994 0.5890675 0.5018039 0.6333987 0.5890662 0.5018038 0.5735896 0.6474473 0.5017982 0.5735908 0.6474506 0.5017986 0.5084241 0.699788 0.5018061 0.5084229 0.6997835 0.501806 0.438509 0.7455874 0.5018128 0.4385083 0.7455832 0.5018123 0.3645037 0.7844243 0.5017994 0.3645042 0.7844324 0.5017988 0.2870929 0.8159508 0.5018056 0.2870931 0.8159465 0.5018054 0.2070044 0.8398455 0.5018116 0.207005 0.8398417 0.5018109 0.1249814 0.8559005 0.5017992 0.1249797 0.8559075 0.5017987 0.04178953 0.8639743 0.5018073 0.04179126 0.8639692 0.5018075 -0.04178929 0.8639693 0.5017981 -0.04179167 0.8639746 0.6430299 -0.110655 0.7578046 0.6430222 -0.110658 0.7578109 0.6430219 -0.1832782 0.743594 0.6430135 -0.183282 0.7436003 0.6430135 -0.2541939 0.7224397 0.6430239 -0.2541884 0.7224323 0.6430234 -0.3227295 0.6945261 0.6430211 -0.3227308 0.6945276 0.6430213 -0.3882533 0.6601386 0.643022 -0.388253 0.6601382 0.643022 -0.4501552 0.6195831 0.6430315 -0.4501483 0.619578 0.6430319 -0.5078446 0.5732397 0.643024 -0.5078506 0.5732434 0.6430234 -0.5608046 0.5215545 0.6430211 -0.5608066 0.5215554 0.643021 -0.608527 0.4649936 0.6430236 -0.6085247 0.4649928 0.6430242 -0.6505622 0.4040903 0.6430298 -0.6505573 0.404089 0.6430301 -0.6865199 0.3394155 0.6430215 -0.6865271 0.3394166 0.6430215 -0.7160809 0.2715724 0.6430242 -0.7160785 0.2715723 0.6430246 -0.7389453 0.2011947 0.6430156 -0.7389532 0.2011944 0.6430153 -0.7549219 0.1289353 0.6430268 -0.7549118 0.1289366 0.643027 -0.7638317 0.05547469 0.6430233 -0.7638348 0.05547398 0.6430231 -0.7656232 -0.01850545 0.643018 -0.7656275 -0.01850694 0.6430175 -0.7602674 -0.09231466 0.6430245 -0.7602618 -0.09231215 0.6430244 -0.7478033 -0.1652573 0.6430228 -0.7478045 -0.165258 0.6430229 -0.7283638 -0.2366596 0.6430246 -0.7283625 -0.2366587 0.6430251 -0.7021212 -0.3058506 0.6430272 -0.7021198 -0.3058493 0.6430274 -0.6693221 -0.3721876 0.6430237 -0.6693244 -0.3721899 0.6430239 -0.6302796 -0.4350494 0.6430187 -0.6302824 -0.4350529 0.6430193 -0.5853508 -0.4938529 0.6430274 -0.5853469 -0.4938468 0.6430277 -0.5349502 -0.5480363 0.6430208 -0.5349529 -0.5480417 0.6430212 -0.4795623 -0.5971129 0.6430262 -0.4795606 -0.5971088 0.6430261 -0.4196934 -0.6406052 0.64302 -0.4196949 -0.6406103 0.6430205 -0.3559075 -0.6781256 0.6430228 -0.3559072 -0.6781238 0.6430231 -0.2887966 -0.7093081 0.6430242 -0.2887964 -0.709307 0.6430234 -0.2189908 -0.7338693 0.6430221 -0.2189908 -0.7338702 0.6430222 -0.1471399 -0.7515798 0.6430216 -0.1471398 -0.7515804 0.643022 -0.07391458 -0.7622725 0.6430239 -0.07391494 -0.762271 0.643024 0 -0.7658461 0.643024 0 -0.765846 0.6430239 0.07391446 -0.7622709 0.6430218 0.07391512 -0.7622725 0.6430215 0.1471399 -0.7515804 0.6430224 0.1471397 -0.7515799 0.6430221 0.2189903 -0.7338704 0.6430203 0.2189912 -0.7338718 0.6430202 0.2887984 -0.7093099 0.6430231 0.2887968 -0.7093079 0.6430228 0.3559066 -0.678124 0.6430206 0.355908 -0.6781254 0.6430199 0.4196962 -0.6406095 0.6430261 0.419692 -0.6406061 0.6430261 0.4795596 -0.5971096 0.6430279 0.4795584 -0.5971088 0.643028 0.53495 -0.548036 0.6430276 0.5349503 -0.5480362 0.6430274 0.5853455 -0.4938485 0.6430192 0.5853522 -0.4938513 0.6430187 0.6302831 -0.4350518 0.6430237 0.6302789 -0.4350506 0.6430237 0.6693249 -0.3721891 0.6430274 0.6693217 -0.3721884 0.6430273 0.7021195 -0.3058498 0.6430251 0.7021214 -0.30585 0.6430246 0.7283624 -0.2366591 0.6430229 0.728364 -0.2366592 0.6430227 0.7478046 -0.1652576 0.6430243 0.7478032 -0.1652577 0.6430245 0.7602615 -0.09231394 0.6430175 0.7602676 -0.09231287 0.643018 0.7656275 -0.01850557 0.6430231 0.7656232 -0.01850682 0.6430233 0.7638348 0.05547493 0.6430269 0.7638318 0.05547374 0.6430269 0.7549123 0.1289337 0.6430155 0.7549213 0.1289382 0.6430155 0.7389526 0.2011967 0.6430246 0.7389459 0.2011924 0.6430242 0.7160788 0.2715716 0.6430215 0.7160806 0.2715731 0.6430215 0.6865262 0.3394187 0.6430299 0.6865209 0.3394135 0.6430298 0.6505581 0.4040877 0.6430241 0.6505613 0.4040915 0.6430236 0.6085251 0.4649922 0.6430211 0.6085265 0.4649941 0.643021 0.5608062 0.521556 0.6430234 0.560805 0.521554 0.6430239 0.507849 0.5732448 0.6430319 0.5078462 0.5732384 0.6430317 0.4501503 0.6195763 0.643022 0.4501531 0.6195846 0.643022 0.3882531 0.6601381 0.6430213 0.3882532 0.6601387 0.6430211 0.3227303 0.6945279 0.6430234 0.32273 0.6945258 0.643024 0.2541909 0.7224314 0.6430137 0.2541913 0.7224406 0.6430134 0.1832799 0.7436009 0.6430219 0.1832803 0.7435935 0.6430221 0.1106564 0.7578112 0.6430284 0.1106572 0.7578057 0.6430287 0.03699964 0.7649478 0.643029 0.0369997 0.7649475 0.643029 -0.03699976 0.7649475 0.6430292 -0.0369997 0.7649474 0.7651228 -0.09303408 0.6371278 0.7651239 -0.09303355 0.6371265 0.7651236 -0.154093 0.625173 0.7651321 -0.154088 0.6251637 0.7651322 -0.2137047 0.607374 0.765124 -0.2137103 0.6073822 0.7651244 -0.2713342 0.58392 0.7651266 -0.2713326 0.583918 0.7651262 -0.3264195 0.5550065 0.7651221 -0.3264232 0.5550101 0.7651219 -0.3784677 0.5209134 0.7651231 -0.3784664 0.5209124 0.7651234 -0.4269731 0.4819547 0.7651227 -0.4269738 0.4819552 0.7651232 -0.4714961 0.438495 0.7651268 -0.4714922 0.438493 0.7651268 -0.5116124 0.3909393 0.7651245 -0.5116152 0.3909404 0.7651242 -0.5469587 0.3397371 0.7651264 -0.546956 0.3397363 0.7651264 -0.5771905 0.2853639 0.765124 -0.5771934 0.2853645 0.765124 -0.6020414 0.2283228 0.7651252 -0.6020401 0.2283226 0.7651248 -0.621266 0.1691524 0.7651293 -0.6212604 0.1691523 0.7651298 -0.6346853 0.1084026 0.7651207 -0.6346964 0.1084017 0.7651206 -0.6421957 0.04663789 0.7651293 -0.6421852 0.04663985 0.7651296 -0.6436884 -0.01555675 0.7651247 -0.6436942 -0.01555842 0.7651248 -0.6391873 -0.07761168 0.7651218 -0.6391908 -0.07761305 0.7651218 -0.6287162 -0.1389409 0.7651238 -0.628714 -0.1389397 0.7651239 -0.6123695 -0.1989694 0.7651199 -0.6123738 -0.1989722 0.7651196 -0.5903108 -0.2571478 0.7651283 -0.5903025 -0.2571413 0.7651281 -0.5627291 -0.3129136 0.7651249 -0.562732 -0.3129164 0.7651252 -0.5299041 -0.3657665 0.7651281 -0.5299018 -0.3657638 0.7651279 -0.4921269 -0.4151995 0.7651239 -0.4921297 -0.4152035 0.7651236 -0.449759 -0.4607629 0.7651278 -0.4497566 -0.4607586 0.7651277 -0.4031872 -0.5020157 0.7651256 -0.4031882 -0.502018 0.7651256 -0.3528555 -0.5385869 0.7651268 -0.352855 -0.5385856 0.7651265 -0.2992261 -0.5701273 0.7651252 -0.2992264 -0.5701288 0.7651251 -0.2428044 -0.5963469 0.7651244 -0.2428045 -0.5963477 0.7651249 -0.1841147 -0.6169973 0.7651273 -0.1841146 -0.6169943 0.765127 -0.1237064 -0.631884 0.7651274 -0.1237064 -0.6318836 0.765127 -0.06214332 -0.6408736 0.7651259 -0.06214314 -0.6408747 0.7651259 0 -0.6438807 0.7651259 0 -0.6438807 0.765126 0.06214344 -0.6408747 0.7651271 0.06214302 -0.6408736 0.7651274 0.1237059 -0.6318836 0.7651255 0.1237068 -0.6318857 0.7651252 0.1841153 -0.6169968 0.765127 0.1841141 -0.6169949 0.7651273 0.2428034 -0.5963445 0.7651252 0.2428049 -0.5963465 0.7651253 0.2992268 -0.5701287 0.7651265 0.2992257 -0.5701275 0.7651268 0.3528547 -0.5385857 0.7651255 0.3528558 -0.5385867 0.7651256 0.4031887 -0.5020176 0.7651277 0.4031866 -0.5020161 0.7651277 0.4497557 -0.4607595 0.7651237 0.4497599 -0.460762 0.7651237 0.4921306 -0.4152026 0.7651278 0.4921259 -0.4152004 0.765128 0.5299013 -0.3657646 0.7651252 0.5299046 -0.3657658 0.7651248 0.5627325 -0.3129155 0.7651281 0.5627286 -0.3129145 0.7651284 0.5903014 -0.2571437 0.7651198 0.5903118 -0.2571454 0.7651198 0.6123743 -0.198971 0.7651239 0.6123693 -0.1989707 0.7651238 0.6287139 -0.1389403 0.7651218 0.6287164 -0.1389402 0.7651218 0.6391909 -0.0776121 0.7651248 0.6391872 -0.07761263 0.7651247 0.6436942 -0.01555687 0.7651295 0.6436884 -0.01555824 0.7651294 0.6421853 0.04663711 0.7651208 0.6421955 0.04664063 0.7651206 0.634696 0.1084045 0.7651297 0.6346858 0.1083998 0.7651295 0.6212607 0.169151 0.765125 0.6212655 0.1691538 0.7651253 0.6020401 0.2283222 0.765124 0.6020414 0.2283231 0.7651241 0.577194 0.2853633 0.7651197 0.5771981 0.2853668 0.76512 0.5469617 0.3397414 0.7651241 0.5469583 0.3397377 0.7651244 0.5116148 0.3909412 0.765127 0.511613 0.3909387 0.7651269 0.4714928 0.4384921 0.7651232 0.4714953 0.4384959 0.7651225 0.4269736 0.4819554 0.7651233 0.4269732 0.4819545 0.7651232 0.3784667 0.5209121 0.7651219 0.3784673 0.5209136 0.7651221 0.326422 0.5550107 0.7651262 0.3264207 0.5550058 0.7651265 0.2713332 0.5839177 0.7651244 0.2713336 0.5839202 0.7651239 0.2137079 0.6073832 0.7651321 0.2137071 0.6073731 0.7651322 0.1540906 0.6251631 0.7651236 0.1540904 0.6251736 0.7651239 0.0930339 0.6371265 0.7651239 0.0930339 0.6371266 0.7651238 0.03110903 0.6431313 0.7651189 0.03110778 0.6431372 0.7651188 -0.03110933 0.6431371 0.7651234 -0.03110766 0.6431318 0.8644661 -0.07263344 0.4974161 0.8644666 -0.07263314 0.4974153 0.8644669 -0.1203017 0.4880826 0.8644641 -0.1203039 0.4880869 0.8644641 -0.1668476 0.4741981 0.864466 -0.1668457 0.4741953 0.8644657 -0.2118355 0.4558781 0.8644643 -0.2118369 0.45588 0.8644644 -0.2548454 0.4333072 0.8644679 -0.2548411 0.4333027 0.8644681 -0.2954718 0.4066835 0.864463 -0.2954786 0.4066892 0.8644629 -0.3333501 0.3762731 0.8644676 -0.3333435 0.3762685 0.8644674 -0.3681026 0.3423399 0.8644645 -0.3681071 0.3423425 0.8644645 -0.3994295 0.3052169 0.8644643 -0.3994297 0.3052169 0.8644642 -0.4270225 0.265242 0.8644604 -0.4270291 0.2652442 0.8644601 -0.4506354 0.2227919 0.8644666 -0.4506244 0.2227894 0.8644668 -0.470023 0.1782571 0.8644621 -0.470031 0.1782581 0.8644621 -0.4850408 0.1320626 0.8644613 -0.4850422 0.1320627 0.8644613 -0.4955239 0.08463233 0.8644659 -0.4955159 0.08463287 0.864466 -0.5013709 0.03641164 0.864464 -0.5013744 0.0364111 0.8644641 -0.502548 -0.01214605 0.8644651 -0.5025462 -0.01214557 0.8644651 -0.4990276 -0.06059288 0.8644646 -0.4990285 -0.06059324 0.8644647 -0.4908505 -0.1084741 0.8644655 -0.4908491 -0.1084734 0.8644654 -0.4780889 -0.15534 0.8644667 -0.4780868 -0.1553387 0.8644667 -0.4608623 -0.2007564 0.8644629 -0.4608679 -0.2007607 0.8644629 -0.4393408 -0.2443019 0.8644633 -0.4393405 -0.2443016 0.8644632 -0.4137104 -0.2855647 0.864465 -0.4137083 -0.2855623 0.8644648 -0.3842167 -0.3241575 0.8644651 -0.3842165 -0.3241572 0.8644648 -0.3511374 -0.3597263 0.8644612 -0.3511407 -0.3597318 0.8644615 -0.3147824 -0.391942 0.8644627 -0.3147814 -0.39194 0.8644627 -0.2754844 -0.4204909 0.8644636 -0.2754839 -0.4204894 0.8644636 -0.2336142 -0.4451147 0.8644639 -0.233614 -0.4451141 0.8644641 -0.1895633 -0.465583 0.8644645 -0.1895632 -0.4655824 0.8644642 -0.1437433 -0.4817047 0.8644632 -0.1437434 -0.4817066 0.8644635 -0.09658139 -0.4933305 0.8644631 -0.09658139 -0.4933312 0.8644633 -0.04851722 -0.5003493 0.8644631 -0.04851716 -0.5003494 0.8644632 0 -0.5026959 0.8644632 0 -0.5026959 0.8644632 0.04851722 -0.5003495 0.8644633 0.04851716 -0.5003493 0.864463 0.09658151 -0.4933311 0.8644644 0.09658062 -0.4933291 0.8644645 0.1437432 -0.4817043 0.8644643 0.1437433 -0.4817046 0.8644644 0.189563 -0.4655824 0.8644641 0.1895634 -0.465583 0.864464 0.2336139 -0.4451141 0.8644636 0.2336143 -0.4451146 0.8644636 0.2754836 -0.4204896 0.8644627 0.2754847 -0.4204907 0.8644626 0.314781 -0.3919404 0.8644614 0.3147827 -0.3919417 0.8644613 0.3511418 -0.3597308 0.8644648 0.3511365 -0.3597275 0.8644651 0.3842163 -0.3241572 0.8644648 0.3842168 -0.3241575 0.8644651 0.4137078 -0.2855628 0.8644632 0.4137108 -0.285564 0.8644632 0.4393405 -0.2443017 0.864463 0.439341 -0.2443018 0.8644628 0.4608686 -0.2007592 0.8644667 0.4608618 -0.200758 0.8644669 0.4780866 -0.1553392 0.8644655 0.478089 -0.1553394 0.8644655 0.4908491 -0.1084738 0.8644647 0.4908506 -0.1084737 0.8644646 0.4990286 -0.06059306 0.8644651 0.4990276 -0.06059312 0.8644651 0.5025462 -0.01214599 0.864464 0.5025479 -0.01214563 0.8644639 0.5013743 0.03641188 0.864466 0.501371 0.03641086 0.8644659 0.4955162 0.08463102 0.8644613 0.4955235 0.08463418 0.8644614 0.4850421 0.132063 0.8644621 0.4850409 0.1320623 0.8644621 0.4700304 0.1782599 0.8644668 0.4700237 0.1782553 0.8644667 0.4506255 0.222787 0.8644644 0.4506287 0.2227897 0.8644641 0.4270226 0.2652422 0.8644642 0.4270225 0.265242 0.8644643 0.3994296 0.3052169 0.8644644 0.3994296 0.3052169 0.8644645 0.3681064 0.3423434 0.8644673 0.3681034 0.342339 0.8644676 0.3333449 0.3762672 0.8644631 0.3333487 0.3762743 0.8644629 0.2954769 0.4066905 0.864468 0.2954735 0.4066823 0.864468 0.2548424 0.4333019 0.8644644 0.2548442 0.4333079 0.8644644 0.2118365 0.4558802 0.8644657 0.211836 0.4558779 0.864466 0.1668464 0.4741949 0.864464 0.1668468 0.4741984 0.8644641 0.1203029 0.4880872 0.8644669 0.1203028 0.4880823 0.8644666 0.07263332 0.4974152 0.864466 0.07263326 0.4974161 0.8644659 0.02428823 0.5021045 0.8644638 0.02428758 0.502108 0.8644638 -0.02428841 0.502108 0.8644658 -0.0242874 0.5021045 0.9380622 -0.05006098 0.3428311 0.9380627 -0.05006051 0.3428299 0.9380626 -0.08291476 0.3363979 0.9380627 -0.08291476 0.3363978 0.9380628 -0.1149938 0.3268254 0.9380621 -0.1149947 0.3268268 0.9380621 -0.1460015 0.3142021 0.9380612 -0.146003 0.3142039 0.9380614 -0.1756467 0.2986456 0.938063 -0.1756435 0.2986422 0.938063 -0.2036464 0.280296 0.9380633 -0.203646 0.2802957 0.9380633 -0.2297481 0.2593322 0.938062 -0.229751 0.2593343 0.938062 -0.2537071 0.2359498 0.9380632 -0.2537044 0.2359482 0.9380632 -0.2752928 0.2103599 0.9380633 -0.2752926 0.2103599 0.9380633 -0.2943099 0.1828082 0.9380636 -0.2943089 0.1828079 0.9380637 -0.3105787 0.1535491 0.9380629 -0.310581 0.1535497 0.9380628 -0.3239504 0.1228588 0.9380628 -0.3239506 0.1228588 0.9380627 -0.334296 0.09101909 0.9380629 -0.3342956 0.09101903 0.9380629 -0.3415196 0.05832993 0.938062 -0.3415221 0.05832982 0.938062 -0.3455575 0.02509582 0.9380619 -0.3455575 0.02509582 0.9380618 -0.3463666 -0.008372306 0.9380635 -0.3463621 -0.008371174 0.9380635 -0.3439373 -0.04176086 0.9380624 -0.3439403 -0.04176187 0.9380624 -0.3383041 -0.07476174 0.9380611 -0.3383073 -0.07476323 0.9380611 -0.3295125 -0.1070652 0.9380618 -0.3295108 -0.1070642 0.9380618 -0.3176389 -0.1383675 0.9380629 -0.3176365 -0.1383658 0.9380629 -0.3027994 -0.1683763 0.9380632 -0.3027987 -0.1683756 0.9380633 -0.2851342 -0.1968144 0.9380629 -0.2851348 -0.196815 0.938063 -0.2648091 -0.2234145 0.938062 -0.2648106 -0.2234165 0.9380622 -0.2420108 -0.2479319 0.9380638 -0.2420084 -0.247928 0.9380637 -0.2169502 -0.270128 0.9380623 -0.216952 -0.2701314 0.9380623 -0.1898677 -0.2898093 0.9380633 -0.1898667 -0.2898067 0.9380633 -0.1610099 -0.3067786 0.938063 -0.1610101 -0.3067791 0.9380631 -0.13065 -0.3208869 0.9380628 -0.1306501 -0.3208873 0.9380629 -0.09907048 -0.3319987 0.9380624 -0.0990706 -0.3320001 0.9380624 -0.06656503 -0.3400118 0.9380633 -0.06656509 -0.3400095 0.9380632 -0.0334388 -0.3448469 0.9380629 -0.03343874 -0.3448476 0.9380628 0 -0.3464652 0.9380628 0 -0.3464652 0.9380629 0.03343892 -0.3448477 0.9380632 0.03343862 -0.3448469 0.9380633 0.06656461 -0.3400096 0.9380624 0.06656551 -0.3400118 0.9380623 0.0990709 -0.332 0.9380628 0.09907019 -0.3319987 0.9380629 0.1306502 -0.3208873 0.938063 0.1306499 -0.3208869 0.938063 0.1610102 -0.306779 0.9380633 0.1610099 -0.3067787 0.9380633 0.1898662 -0.289807 0.9380623 0.1898682 -0.2898089 0.9380623 0.2169526 -0.2701309 0.9380638 0.2169496 -0.2701285 0.9380638 0.2420076 -0.2479286 0.9380621 0.2420115 -0.2479311 0.938062 0.264811 -0.2234161 0.938063 0.2648088 -0.2234149 0.938063 0.2851349 -0.1968148 0.9380632 0.2851341 -0.1968145 0.9380632 0.3027986 -0.1683758 0.9380629 0.3027995 -0.1683761 0.9380629 0.3176362 -0.1383664 0.9380618 0.3176391 -0.1383669 0.9380618 0.3295106 -0.1070646 0.9380611 0.3295125 -0.1070647 0.9380611 0.3383075 -0.07476252 0.9380623 0.3383039 -0.07476252 0.9380624 0.3439404 -0.04176121 0.9380636 0.3439373 -0.04176151 0.9380636 0.3463621 -0.008372187 0.9380619 0.3463666 -0.008371293 0.938062 0.3455575 0.02509582 0.9380619 0.3455575 0.02509582 0.9380619 0.341522 0.05833035 0.9380629 0.3415197 0.0583294 0.9380629 0.3342956 0.09101891 0.9380627 0.334296 0.09101915 0.9380629 0.3239506 0.1228589 0.9380629 0.3239504 0.1228588 0.9380629 0.3105807 0.1535502 0.9380637 0.3105789 0.1535487 0.9380637 0.294309 0.1828078 0.9380633 0.2943098 0.1828085 0.9380632 0.2752926 0.2103598 0.9380632 0.2752927 0.2103599 0.9380632 0.2537048 0.2359476 0.938062 0.2537066 0.2359502 0.938062 0.2297504 0.2593348 0.9380632 0.2297486 0.2593317 0.9380632 0.2036461 0.2802956 0.938063 0.2036463 0.280296 0.938063 0.1756443 0.2986416 0.9380614 0.1756458 0.298646 0.9380612 0.1460025 0.3142042 0.9380621 0.1460019 0.3142018 0.9380621 0.1149943 0.3268269 0.9380627 0.1149941 0.3268252 0.9380627 0.08291476 0.3363978 0.9380627 0.08291476 0.336398 0.9380627 0.0500608 0.3428298 0.9380622 0.05006068 0.3428311 0.9380624 0.0167393 0.3460618 0.9380636 0.01673984 0.3460586 0.9380635 -0.01673913 0.3460586 0.9380624 -0.01673996 0.3460618 0.9836766 -0.02599996 0.1780574 0.9836763 -0.02600061 0.1780592 0.9836762 -0.04306417 0.1747188 0.983676 -0.04306459 0.1747197 0.9836759 -0.05972629 0.1697477 0.9836763 -0.05972528 0.1697461 0.9836763 -0.07583022 0.1631891 0.9836767 -0.0758289 0.1631873 0.9836767 -0.09122473 0.1551072 0.9836762 -0.09122663 0.1551093 0.9836761 -0.1057709 0.1455806 0.9836766 -0.105769 0.1455789 0.9836767 -0.1193255 0.1346913 0.9836763 -0.1193268 0.1346923 0.9836763 -0.1317696 0.1225466 0.9836764 -0.131769 0.1225462 0.9836764 -0.1429811 0.1092565 0.9836764 -0.1429815 0.1092568 0.9836764 -0.1528588 0.09494704 0.9836764 -0.1528588 0.09494704 0.9836764 -0.161309 0.07975059 0.9836764 -0.1613088 0.07975059 0.9836764 -0.1682527 0.06380993 0.9836766 -0.1682517 0.06380981 0.9836766 -0.1736248 0.04727309 0.9836766 -0.1736254 0.04727309 0.9836766 -0.1773773 0.03029489 0.9836768 -0.1773759 0.03029495 0.9836768 -0.1794717 0.01303446 0.9836764 -0.1794741 0.01303416 0.9836764 -0.1798943 -0.004348158 0.9836762 -0.1798952 -0.004348397 0.9836762 -0.1786356 -0.02169048 0.9836767 -0.178633 -0.02168959 0.9836767 -0.1757057 -0.03882938 0.9836768 -0.1757047 -0.0388289 0.9836769 -0.1711369 -0.0556057 0.9836769 -0.1711372 -0.05560588 0.9836768 -0.1649716 -0.07186311 0.9836763 -0.1649738 -0.07186466 0.9836763 -0.1572678 -0.08745115 0.9836763 -0.1572681 -0.08745133 0.9836763 -0.1480936 -0.1022216 0.9836761 -0.1480944 -0.1022224 0.983676 -0.1375373 -0.1160381 0.9836764 -0.1375364 -0.1160368 0.9836763 -0.1256944 -0.1287699 0.9836764 -0.125694 -0.1287693 0.9836764 -0.1126796 -0.1402991 0.9836765 -0.1126796 -0.1402989 0.9836766 -0.09861254 -0.1505191 0.9836763 -0.09861302 -0.1505204 0.9836763 -0.08362555 -0.1593351 0.9836764 -0.08362555 -0.1593351 0.9836764 -0.06785702 -0.1666622 0.9836763 -0.06785708 -0.1666625 0.9836763 -0.05145514 -0.1724335 0.9836764 -0.05145508 -0.172433 0.9836764 -0.03457248 -0.1765941 0.9836762 -0.03457248 -0.176595 0.9836763 -0.0173673 -0.1791073 0.9836764 -0.01736742 -0.1791062 0.9836764 0 -0.1799463 0.9836764 0 -0.1799463 0.9836764 0.01736718 -0.1791063 0.9836763 0.01736748 -0.1791072 0.9836763 0.03457266 -0.176595 0.9836764 0.0345723 -0.1765942 0.9836765 0.05145496 -0.172433 0.9836764 0.05145525 -0.1724334 0.9836763 0.0678572 -0.1666625 0.9836763 0.06785696 -0.1666622 0.9836763 0.08362555 -0.1593351 0.9836763 0.08362555 -0.1593351 0.9836763 0.09861326 -0.1505203 0.9836765 0.09861224 -0.1505193 0.9836766 0.1126795 -0.140299 0.9836765 0.1126797 -0.1402991 0.9836765 0.1256939 -0.1287694 0.9836764 0.1256945 -0.1287698 0.9836764 0.1375361 -0.1160371 0.9836761 0.1375375 -0.1160379 0.9836761 0.1480945 -0.1022222 0.9836763 0.1480935 -0.1022217 0.9836763 0.1572681 -0.08745127 0.9836764 0.1572678 -0.08745115 0.9836763 0.164974 -0.07186412 0.9836768 0.1649714 -0.07186365 0.9836767 0.1711372 -0.05560582 0.9836768 0.1711369 -0.05560576 0.9836769 0.1757047 -0.03882914 0.9836767 0.1757057 -0.03882914 0.9836767 0.1786329 -0.02169018 0.9836762 0.1786357 -0.02168989 0.9836762 0.1798952 -0.004348158 0.9836763 0.1798943 -0.004348337 0.9836763 0.1794741 0.01303464 0.9836767 0.1794717 0.01303398 0.9836768 0.177376 0.03029465 0.9836766 0.1773772 0.03029519 0.9836764 0.1736253 0.04727321 0.9836766 0.1736248 0.04727298 0.9836766 0.1682518 0.06380963 0.9836765 0.1682526 0.06381011 0.9836765 0.1613089 0.07975059 0.9836764 0.161309 0.07975065 0.9836764 0.1528587 0.09494704 0.9836764 0.1528588 0.09494704 0.9836764 0.1429815 0.1092569 0.9836764 0.1429811 0.1092565 0.9836764 0.131769 0.1225461 0.9836763 0.1317695 0.1225467 0.9836763 0.1193266 0.1346925 0.9836766 0.1193258 0.1346911 0.9836766 0.1057694 0.1455786 0.9836762 0.1057704 0.1455809 0.9836761 0.09122616 0.1551096 0.9836767 0.09122526 0.155107 0.9836768 0.07582932 0.1631871 0.9836764 0.0758298 0.1631892 0.9836763 0.05972564 0.1697459 0.983676 0.05972588 0.1697478 0.983676 0.04306441 0.1747198 0.9836762 0.04306435 0.1747187 0.9836763 0.0260002 0.1780593 0.9836765 0.02600032 0.1780574 0.9836766 0.008694171 0.1797356 0.9836764 0.008693993 0.1797366 0.9836763 -0.008694171 0.1797365 0.9836765 -0.008693933 0.1797356 0.001688122 0.9927074 -0.1205372 -0.00375694 0.9976618 -0.06824082 0 0.9993432 -0.03623861 0.001688122 0.9927068 -0.1205421 -0.003401756 0.9764357 -0.2157819 -7.6808e-4 0.9790838 -0.2034558 5.31171e-4 0.9510595 -0.3090074 5.31171e-4 0.9510564 -0.3090169 -0.003414154 0.9422548 -0.3348795 6.66916e-4 0.8739668 -0.4859853 -0.003482043 0.8878801 -0.4600617 0.001887738 0.9167906 -0.399364 0.001887738 0.9167906 -0.3993638 6.66915e-4 0.8739659 -0.4859867 -8.1109e-4 0.8229842 -0.5680637 -0.002613902 0.8169674 -0.576678 0.001495003 0.6985104 -0.7155984 -0.003767669 0.7308301 -0.682549 0.001631081 0.7643159 -0.6448398 0.001631081 0.7643147 -0.6448415 0.001495003 0.6985074 -0.7156014 -0.002610146 0.6261823 -0.7796723 -0.001357078 0.6310878 -0.7757103 9.16738e-4 0.5480192 -0.8364654 9.16738e-4 0.5480123 -0.8364698 -0.003596127 0.5195803 -0.8544141 2.38359e-4 0.3770949 -0.9261746 -0.003256738 0.3983991 -0.9172064 0.001866638 0.4647216 -0.8854548 0.001866638 0.4647223 -0.8854545 2.3836e-4 0.3770953 -0.9261744 -2.54341e-4 0.2859457 -0.9582458 -0.002967476 0.2697956 -0.962913 0.001238167 0.09651362 -0.9953309 -0.003713965 0.136166 -0.990679 0.001781046 0.192128 -0.9813683 0.001781046 0.1921257 -0.9813688 0.001238167 0.09651452 -0.9953308 -0.001882076 0 -0.9999982 -0.001882076 0 -0.9999982 0.001781046 -0.192128 -0.9813683 -0.003713965 -0.1361657 -0.9906792 0.001238107 -0.09651362 -0.9953309 0.001238107 -0.09651452 -0.9953308 0.001781046 -0.1921257 -0.9813688 -0.003965735 -0.2859434 -0.9582383 -3.39914e-4 -0.2697967 -0.9629172 2.3836e-4 -0.3770953 -0.9261744 2.38359e-4 -0.3770949 -0.9261746 -0.003256738 -0.3983991 -0.9172064 9.16737e-4 -0.5480123 -0.8364698 -0.003596127 -0.5195803 -0.8544141 0.001866638 -0.4647223 -0.8854545 0.001866638 -0.4647216 -0.8854548 9.16737e-4 -0.5480192 -0.8364654 -0.001217961 -0.6261841 -0.7796744 -0.0023427 -0.6310867 -0.7757088 0.001631081 -0.7643159 -0.6448398 -0.003767669 -0.7308301 -0.682549 0.001495003 -0.6985104 -0.7155984 0.001495003 -0.6985073 -0.7156013 0.001631081 -0.7643147 -0.6448415 -0.003130912 -0.8229804 -0.5680611 -9.71549e-4 -0.8169698 -0.5766796 6.66915e-4 -0.8739659 -0.4859867 6.66915e-4 -0.8739684 -0.4859824 -0.003481566 -0.8878801 -0.4600617 5.31171e-4 -0.9510564 -0.3090168 -0.003414154 -0.9422548 -0.3348795 0.001887738 -0.9167906 -0.3993638 0.001887738 -0.916788 -0.3993698 5.31171e-4 -0.9510595 -0.3090074 -6.18336e-4 -0.9764412 -0.2157831 -0.002738654 -0.9790804 -0.203455 0.001416563 -0.9997069 -0.02416706 -0.003756403 -0.9976618 -0.06824082 0.001688122 -0.992708 -0.1205319 0.001688122 -0.9927068 -0.1205421 0.001416563 -0.9997071 -0.02416247 -0.002360343 -0.9973704 0.0724346 -0.00153917 -0.9976677 0.06824123 0.001031458 -0.9857234 0.1683697 0.001031458 -0.9857256 0.1683569 -0.003642022 -0.9790776 0.2034547 0.00184518 -0.9648754 0.2627015 0.00184518 -0.9648723 0.2627129 -0.003167271 -0.9422556 0.3348798 8.0886e-5 -0.9350168 0.3546034 8.03576e-5 -0.8878855 0.4600645 -0.02536344 -0.9347022 0.3545256 -0.004258334 -0.8964186 0.4431878 0.001138269 -0.7945761 0.6071635 -0.003682017 -0.8169651 0.5766754 0.00181663 -0.8494682 0.5276366 0.00181663 -0.8494662 0.5276399 0.001138269 -0.7945776 0.6071617 -0.001653611 -0.7322662 0.6810165 -0.002042412 -0.7308338 0.6825523 0.001737773 -0.587785 0.8090153 -0.003739058 -0.6310831 0.7757061 0.001330733 -0.663121 0.748511 0.001330733 -0.6631325 0.7485009 0.001737773 -0.5877855 0.809015 -0.003680825 -0.5069562 0.861964 -5.57778e-4 -0.519585 0.8544186 3.88251e-4 -0.4213975 0.9068759 3.88251e-4 -0.4213997 0.906875 -0.003338694 -0.3983991 0.9172061 7.95629e-4 -0.2393133 0.970942 -0.003542542 -0.2697951 0.9629113 0.001880943 -0.3319076 0.94331 0.001880943 -0.3319113 0.9433087 7.95629e-4 -0.2393253 0.9709392 -0.001011073 -0.1444873 0.9895062 -0.002481818 -0.1361644 0.9906832 0.001566469 0.04831284 0.998831 -0.003771245 0 0.9999929 0.00156641 -0.04831284 0.998831 0.00156641 -0.04831814 0.9988308 0.001566469 0.04831814 0.9988308 -0.002866864 0.1444868 0.9895026 -0.001167953 0.136165 0.9906855 7.95629e-4 0.2393253 0.9709392 7.95629e-4 0.2393132 0.970942 -0.003542542 0.2697951 0.9629113 3.88251e-4 0.4213997 0.906875 -0.003338694 0.3983991 0.9172061 0.001880943 0.3319113 0.9433087 0.001880943 0.3319076 0.94331 3.88251e-4 0.4213975 0.9068759 -4.32967e-4 0.5069596 0.8619697 -0.002857148 0.5195829 0.8544153 0.001330733 0.663121 0.748511 -0.003739058 0.6310831 0.7757061 0.001737773 0.587785 0.8090153 0.001737773 0.5877856 0.809015 0.001330733 0.6631325 0.7485009 -0.002117276 0.7322656 0.681016 -0.001714169 0.7308343 0.6825528 0.00181663 0.8494682 0.5276366 -0.003682017 0.8169651 0.5766754 0.001138269 0.7945761 0.6071635 0.001138269 0.7945776 0.6071617 0.00181663 0.8494662 0.5276399 -0.004258334 0.8964186 0.4431878 -1.15358e-4 0.8878855 0.4600645 8.08876e-5 0.9350031 0.3546397 8.08876e-5 0.9350168 0.3546034 -0.003167271 0.9422556 0.3348798 0.00184518 0.9648723 0.2627129 0.00184518 0.9648754 0.2627015 -0.003642022 0.9790776 0.2034547 0.001031458 0.9857256 0.1683569 0.001031458 0.9857234 0.1683697 -0.00153917 0.9976677 0.06824123 -0.002360343 0.9973704 0.0724346 0 0.9999271 0.01208031 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.7057583 -0.183361 0.6843128 -0.7057583 -0.1833609 0.6843128 -0.7057582 -0.2994058 0.642076 -0.7057581 -0.2994056 0.6420761 -0.7057581 -0.4063512 0.5803312 -0.7057587 -0.4063519 0.5803299 -0.7057587 -0.5009515 0.5009515 -0.7057586 -0.5009514 0.5009514 -0.7057587 -0.5803297 0.4063522 -0.7057589 -0.5803298 0.4063519 -0.7057588 -0.6420761 0.299404 -0.7057585 -0.6420761 0.2994049 -0.7057583 -0.6843127 0.183361 -0.7057583 -0.6843127 0.1833613 -0.7057583 -0.7057567 0.06174612 -0.7057588 -0.7057564 0.0617451 -0.7057588 -0.7057564 -0.06174606 -0.7057583 -0.7057569 -0.06174516 -0.7057583 -0.6843128 -0.183361 -0.7057582 -0.6843128 -0.1833609 -0.7057582 -0.6420766 -0.2994042 -0.7057589 -0.6420754 -0.2994053 -0.7057588 -0.5803295 -0.4063522 -0.7057587 -0.5803299 -0.4063519 -0.7057587 -0.5009515 -0.5009515 -0.7057586 -0.5009514 -0.5009514 -0.7057586 -0.4063509 -0.5803307 -0.705758 -0.4063523 -0.5803304 -0.7057582 -0.2994058 -0.642076 -0.7057582 -0.2994056 -0.6420761 -0.7057582 -0.1833611 -0.6843128 -0.7057583 -0.1833609 -0.6843127 -0.7057583 -0.06174612 -0.7057567 -0.7057588 -0.0617451 -0.7057564 -0.7057588 0.06174606 -0.7057564 -0.7057583 0.06174516 -0.7057569 -0.7057583 0.183361 -0.6843128 -0.7057583 0.1833609 -0.6843128 -0.7057582 0.2994058 -0.642076 -0.7057581 0.2994056 -0.6420761 -0.7057581 0.4063512 -0.5803312 -0.7057587 0.4063519 -0.5803299 -0.7057587 0.5009515 -0.5009515 -0.7057586 0.5009514 -0.5009514 -0.7057587 0.5803297 -0.4063522 -0.7057589 0.5803298 -0.4063519 -0.7057588 0.6420761 -0.299404 -0.7057582 0.6420761 -0.2994056 -0.7057582 0.6843128 -0.1833611 -0.7057583 0.6843128 -0.1833609 -0.7057583 0.7057567 -0.06174612 -0.7057588 0.7057564 -0.0617451 -0.7057588 0.7057564 0.06174606 -0.7057583 0.7057569 0.06174516 -0.7057583 0.6843128 0.183361 -0.7057585 0.6843125 0.1833613 -0.7057586 0.6420764 0.2994041 -0.7057588 0.6420757 0.2994047 -0.7057588 0.5803295 0.4063522 -0.7057587 0.5803299 0.4063519 -0.7057587 0.5009515 0.5009515 -0.7057586 0.5009514 0.5009514 -0.7057586 0.4063509 0.5803307 -0.705758 0.4063523 0.5803304 -0.7057582 0.2994058 0.642076 -0.7057582 0.2994056 0.6420761 -0.7057582 0.1833611 0.6843128 -0.7057583 0.1833609 0.6843127 -0.7057583 0.06174486 0.7057569 -0.7057582 0.06174516 0.705757 -0.7057582 -0.0617448 0.705757 -0.7057583 -0.06174516 0.7057569 -0.9992096 5.61889e-4 0.03974616 -0.999379 0 0.03523588 -0.998539 -0.002336442 0.05398595 -0.998539 -0.002336263 0.05398595 -0.9992336 -0.005005538 0.03882271 -0.9991952 -0.005195021 0.03977441 -0.9993906 -0.008853793 0.03376346 -0.9986446 -0.01121658 0.05082422 -0.9986447 -0.0112167 0.05082422 -0.998734 -0.02328443 0.04458826 -0.9990749 -0.0164113 0.03975194 -0.9992458 -0.01457262 0.03599447 -0.9985194 -0.01628011 0.051903 -0.9985194 -0.01628011 0.051903 -0.998734 -0.02328443 0.04458826 -0.9993937 -0.01708447 0.03033518 -0.9985529 -0.0290234 0.04527664 -0.9985527 -0.02902317 0.04527682 -0.9993476 -0.0216003 0.02894258 -0.9990004 -0.02731168 0.0353862 -0.9993572 -0.02494072 0.02575331 -0.9987998 -0.0331465 0.03605997 -0.9987998 -0.03314501 0.03606122 -0.9989153 -0.03925102 0.02505016 -0.9989855 -0.03569149 0.02745884 -0.9993487 -0.02821493 0.02250069 -0.9984428 -0.04109817 0.03772312 -0.9984428 -0.0410977 0.03772366 -0.9989153 -0.03924751 0.02505522 -0.9993784 -0.0301488 0.01827627 -0.9984836 -0.04880034 0.02547669 -0.9984836 -0.04880017 0.02547699 -0.9993438 -0.0331211 0.01466161 -0.9989041 -0.04317051 0.01807945 -0.998852 -0.04555368 0.01481902 -0.9993761 -0.03385895 0.01004922 -0.9985066 -0.05319452 0.01244401 -0.9985067 -0.05319458 0.01244378 -0.9993501 -0.03558361 0.005752801 -0.9989684 -0.04495006 0.006446957 -0.9993516 -0.03598707 0.001154124 -0.9988358 -0.04816591 0.002702474 -0.9988358 -0.04816573 0.002704203 -0.9993492 -0.03590625 -0.003463864 -0.9984259 -0.0560646 -0.001625359 -0.9984258 -0.0560646 -0.001625061 -0.9993626 -0.03480285 -0.007943451 -0.9989221 -0.04546326 -0.009363353 -0.9989369 -0.04579055 -0.005319893 -0.9987875 -0.04577082 -0.01812231 -0.9987877 -0.04577112 -0.0181216 -0.999347 -0.03391093 -0.01247954 -0.9984561 -0.05322784 -0.01588171 -0.9984562 -0.05322772 -0.01588225 -0.9989844 -0.04024672 -0.02025711 -0.9993233 -0.03261333 -0.01701438 -0.9985678 -0.0454548 -0.02821856 -0.9985678 -0.04545491 -0.02821838 -0.9994035 -0.02832478 -0.01975816 -0.9987465 -0.04005861 -0.03001159 -0.999277 -0.0281459 -0.02556133 -0.999093 -0.03175121 -0.02837234 -0.9987465 -0.04005932 -0.03001075 -0.998719 -0.03142881 -0.03965491 -0.998719 -0.03142952 -0.03965437 -0.9993892 -0.02265292 -0.02660948 -0.9984737 -0.03791981 -0.04015618 -0.9984737 -0.03791964 -0.04015642 -0.9991735 -0.02236539 -0.03394311 -0.9992939 -0.02049714 -0.03148913 -0.9985825 -0.02530366 -0.04682642 -0.9985825 -0.02530378 -0.04682636 -0.9993877 -0.01518166 -0.03152507 -0.9986165 -0.02096158 -0.04822587 -0.9992951 -0.01182913 -0.0356276 -0.9991304 -0.0134384 -0.03946942 -0.9986165 -0.0209611 -0.04822605 -0.9987027 -0.007950961 -0.05029755 -0.9987027 -0.007951319 -0.05029749 -0.9993962 -0.006641864 -0.03410458 -0.9985298 -0.01310247 -0.05259752 -0.9985298 -0.01310223 -0.05259758 -0.9991198 -0.002945244 -0.04184567 -0.9992621 -0.002460777 -0.03832978 -0.9988735 -6.70272e-4 -0.04744768 -0.9988716 0.00205326 -0.04744762 -0.9993412 0.002325236 -0.0362187 -0.9984562 0.007193744 -0.05507576 -0.9984562 0.007193624 -0.05507576 -0.9993695 0.006787657 -0.03485321 -0.9988493 0.01033568 -0.04683244 -0.9993247 0.01157808 -0.03487139 -0.9989569 0.01366633 -0.04357004 -0.9988493 0.01033574 -0.04683244 -0.9987223 0.02339255 -0.04479479 -0.9987223 0.02339243 -0.04479485 -0.999381 0.01526445 -0.03169697 -0.9983677 0.02179443 -0.05279171 -0.9983677 0.02179455 -0.05279165 -0.9991531 0.02220439 -0.03463912 -0.9993035 0.02035862 -0.03127622 -0.9985774 0.03257942 -0.04221087 -0.9985774 0.03257912 -0.04221105 -0.9993888 0.02266067 -0.02661859 -0.9986209 0.03552955 -0.03865271 -0.9992589 0.02849584 -0.02587914 -0.999133 0.03067058 -0.02815228 -0.9986208 0.03552949 -0.03865277 -0.9986788 0.04331374 -0.02765077 -0.9986789 0.04331368 -0.02765089 -0.9994112 0.02814155 -0.01963037 -0.9985959 0.0419867 -0.0323019 -0.9985958 0.04198646 -0.0323022 -0.9992249 0.03489607 -0.01821798 -0.9992313 0.03475475 -0.01813155 -0.9985615 0.04945486 -0.02071171 -0.9985616 0.04945492 -0.02071166 -0.999381 0.03301483 -0.01214975 -0.9986835 0.04877918 -0.01586818 -0.9992793 0.03700715 -0.008446574 -0.9991583 0.03994488 -0.009344398 -0.9986836 0.04877954 -0.01586711 -0.9985982 0.05284827 -0.002965569 -0.998598 0.05284827 -0.002965688 -0.9993907 0.03473967 -0.00335133 -0.9985814 0.05270814 -0.007559776 -0.9985814 0.0527082 -0.007559299 -0.9991621 0.04091161 0.001186192 -0.999236 0.03906202 0.00125271 -0.9985889 0.05275225 0.006128847 -0.9985888 0.05275225 0.006128728 -0.9994028 0.03410935 0.005514442 -0.998627 0.05130732 0.01056683 -0.9992049 0.03822129 0.01134395 -0.9992391 0.03737658 0.01115232 -0.998627 0.0513072 0.01056718 -0.9993832 0.0321111 0.01421451 -0.9985476 0.05009448 0.01983338 -0.9985475 0.05009454 0.01983326 -0.9987974 0.03923749 0.02939814 -0.9991002 0.03603434 0.02237015 -0.9993243 0.03143054 0.01905328 -0.9984908 0.04905694 0.02469205 -0.9984906 0.0490573 0.0246914 -0.9987974 0.03923845 0.02939671 -0.9993854 0.02740502 0.02185481 -0.9984586 0.04138785 0.03698337 -0.9984585 0.04138779 0.03698337 -0.9993017 0.02599275 0.02683967 -0.999015 0.03046542 0.03226232 -0.9993924 0.02084696 0.02793318 -0.9988031 0.03038138 0.03833234 -0.9988031 0.03038251 0.03833144 -0.9988151 0.01939857 0.04463243 -0.9989764 0.0215047 0.03979587 -0.9993519 0.01766312 0.03136265 -0.998549 0.02962875 0.04496598 -0.9985492 0.02962845 0.04496622 -0.9988151 0.01939958 0.04463195 -0.9993562 0.01346325 0.03325426 -0.9985238 0.0175063 0.05141812 -0.9985237 0.01750642 0.05141806 -0.999318 0.009367227 0.03572154 -0.9990498 0.01053488 0.04229015 -0.9984449 0.00391376 0.05560982 -0.9984449 0.003914296 0.05560976 -0.9993776 0.004511356 0.03498959 -0.9988018 0.007641017 0.0483365 -0.998802 0.007641673 0.04833638 -0.04697895 0.9738515 -0.2222749 -0.04702746 0.9738498 -0.2222721 -0.04702597 0.9374287 -0.3449868 -0.04702311 0.9374287 -0.3449871 -0.0469312 0.9374358 -0.3449806 -0.04693055 0.8856214 -0.4620307 -0.0469883 0.8856205 -0.4620265 -0.04699116 0.88562 -0.4620271 -0.04699957 0.819266 -0.5714845 -0.04698967 0.8192665 -0.5714843 -0.0469979 0.7394526 -0.6715661 -0.04704779 0.7394593 -0.6715552 -0.04706132 0.7394583 -0.6715554 -0.04705852 0.6475113 -0.7606015 -0.04701709 0.6475098 -0.7606053 -0.04702013 0.6475095 -0.7606054 -0.04702109 0.5449334 -0.8371599 -0.04702419 0.5449336 -0.8371596 -0.04704612 0.5449222 -0.8371657 -0.04704612 0.4334019 -0.899972 -0.04700291 0.4334046 -0.8999729 -0.04699987 0.314759 -0.9480073 -0.04700815 0.3147603 -0.9480065 -0.04702258 0.3147591 -0.9480062 -0.04702126 0.190947 -0.9804735 -0.04703891 0.1909482 -0.9804724 -0.04705172 0.1909464 -0.9804722 -0.04705154 0.06399899 -0.9968402 -0.0470106 0.06400114 -0.996842 -0.0470106 -0.06399941 -0.996842 -0.04704523 -0.06400102 -0.9968403 -0.04703289 -0.1909465 -0.980473 -0.04702693 -0.1909474 -0.9804732 -0.04702126 -0.190947 -0.9804735 -0.04702258 -0.3147591 -0.9480062 -0.04700827 -0.3147603 -0.9480065 -0.04699987 -0.314759 -0.9480073 -0.04700291 -0.4334028 -0.8999738 -0.04704612 -0.4334038 -0.899971 -0.04701733 -0.6475098 -0.7606053 -0.04702001 -0.6475095 -0.7606055 -0.04702109 -0.5449336 -0.8371598 -0.04702472 -0.5449334 -0.8371597 -0.04704606 -0.5449223 -0.8371657 -0.04698967 -0.8192663 -0.5714847 -0.0469979 -0.7394525 -0.6715661 -0.04704779 -0.7394593 -0.6715552 -0.04706096 -0.7394583 -0.6715554 -0.04705852 -0.6475113 -0.7606015 -0.04698807 -0.8856205 -0.4620265 -0.04699116 -0.8856199 -0.4620271 -0.04699951 -0.8192662 -0.571484 -0.04697436 -0.9374325 -0.3449836 -0.04693132 -0.9374358 -0.3449806 -0.04693049 -0.8856213 -0.4620307 -0.04697161 -0.9942807 -0.09591454 -0.04697179 -0.9738512 -0.2222781 -0.0469737 -0.9738513 -0.2222773 -0.04693138 -0.9738538 -0.2222754 -0.04693341 -0.9374328 -0.3449883 -0.04701852 -0.9983809 0.03201174 -0.04698473 -0.9983823 0.03201842 -0.04698771 -0.99428 -0.09591364 -0.04698526 -0.9860913 0.1594249 -0.04707479 -0.9860883 0.1594172 -0.04707896 -0.998378 0.03201556 -0.0469917 -0.9134038 0.4043331 -0.04699164 -0.9576138 0.2841962 -0.04700297 -0.9576076 0.2842151 -0.04705172 -0.9576062 0.2842121 -0.04705363 -0.9860867 0.1594329 -0.04706811 -0.8541948 0.5178185 -0.0470609 -0.8541945 0.5178195 -0.04706287 -0.9133993 0.404335 -0.04703122 -0.5974644 0.8005151 -0.04703086 -0.6949129 0.7175543 -0.04700338 -0.6949148 0.7175542 -0.04700881 -0.7809693 0.6227979 -0.0470395 -0.780965 0.6228008 -0.04701811 -0.7809649 0.6228026 -0.04702061 -0.8541985 0.5178166 -0.0470066 -0.5974477 0.800529 -0.04698586 -0.5974475 0.8005304 -0.04698318 -0.4901803 0.8703538 -0.04693627 -0.4901766 0.8703584 -0.04694771 -0.4901756 0.8703585 -0.04695451 -0.374853 0.9258945 -0.04697269 -0.3748537 0.9258933 -0.04703027 -0.3748409 0.9258955 -0.04703307 -0.2533754 0.966224 -0.04706084 -0.2533737 0.9662231 -0.04700851 0 0.9988945 -0.04700851 0 0.9988944 -0.04701447 -0.1277347 0.9906934 -0.04702872 -0.1277353 0.9906927 -0.04705023 -0.1277427 0.9906907 -0.04703581 0.2533753 0.9662238 -0.0470376 0.1277384 0.9906919 -0.04702669 0.1277346 0.9906929 -0.04701447 0.1277354 0.9906934 -0.04700851 0 0.9988944 -0.04697257 0.3748538 0.9258933 -0.04703027 0.3748409 0.9258955 -0.04703307 0.2533752 0.9662241 -0.04693651 0.4901766 0.8703584 -0.04694765 0.4901756 0.8703585 -0.04695451 0.374853 0.9258945 -0.04703086 0.6949138 0.7175533 -0.04703122 0.5974644 0.8005151 -0.04700547 0.597447 0.8005297 -0.04698568 0.5974484 0.8005298 -0.04698318 0.4901803 0.8703538 -0.0470395 0.780965 0.6228008 -0.04700869 0.7809693 0.6227979 -0.04700338 0.6949138 0.7175552 -0.04706287 0.9134008 0.4043318 -0.0470609 0.8541945 0.5178195 -0.04706811 0.8541948 0.5178185 -0.04702079 0.8541985 0.5178166 -0.04701811 0.7809649 0.6228026 -0.04700297 0.9576076 0.2842151 -0.04699164 0.9576138 0.2841962 -0.0469917 0.9134024 0.4043363 -0.04698526 0.9860913 0.1594249 -0.04705363 0.9860867 0.1594329 -0.04705196 0.9576062 0.2842121 -0.04697179 0.9738512 -0.2222781 -0.04697161 0.9942808 -0.09591376 -0.04708588 0.9942748 -0.09591883 -0.04717493 0.9987583 -0.01601958 0.1947272 0.9803534 0.03143846 -0.0471208 0.9977344 0.04801708 -0.04707497 0.9860883 0.1594172 -0.9836732 -0.03440177 -0.1766448 -0.9836735 -0.03440159 -0.1766443 -0.9836734 -0.05670762 -0.1707945 -0.9836736 -0.05670726 -0.1707937 -0.9836737 -0.07808202 -0.1621394 -0.9836733 -0.07808321 -0.1621414 -0.9836733 -0.09817624 -0.150825 -0.9836731 -0.09817689 -0.1508258 -0.983673 -0.1166584 -0.1370335 -0.9836736 -0.1166558 -0.137031 -0.9836736 -0.1332219 -0.1209881 -0.9836741 -0.1332201 -0.1209867 -0.9836741 -0.1475971 -0.1029576 -0.9836739 -0.1475983 -0.1029583 -0.9836739 -0.1595523 -0.08323884 -0.9836732 -0.1595557 -0.08324021 -0.9836733 -0.1688905 -0.0621531 -0.9836738 -0.1688877 -0.06215232 -0.9836737 -0.1754491 -0.04004454 -0.9836742 -0.1754465 -0.04004418 -0.9836742 -0.1791269 -0.01728075 -0.9836736 -0.1791297 -0.01728081 -0.9836737 -0.1798692 0.005768358 -0.9836734 -0.1798703 0.005768537 -0.9836734 -0.1776558 0.02872157 -0.983673 -0.1776583 0.02872222 -0.983673 -0.1725268 0.05120515 -0.9836722 -0.1725309 0.0512067 -0.9836722 -0.1645666 0.07284897 -0.9836733 -0.1645607 0.07284569 -0.9836733 -0.1538938 0.09329152 -0.9836748 -0.1538878 0.09328716 -0.9836748 -0.1406947 0.1122007 -0.983675 -0.1406937 0.1121998 -0.9836749 -0.1251919 0.12927 -0.9836735 -0.1251965 0.1292755 -0.9836736 -0.1076367 0.1442241 -0.9836735 -0.1076371 0.1442247 -0.9836736 -0.08831077 0.1568045 -0.9836734 -0.08831107 0.1568052 -0.9836734 -0.06753426 0.1668109 -0.9836741 -0.06753301 0.1668068 -0.9836741 -0.04564732 0.1740733 -0.9836739 -0.04564756 0.1740746 -0.9836741 -0.02301257 0.1784821 -0.9836739 -0.02301263 0.1784831 -0.9836739 0 0.1799607 -0.9836739 0 0.1799607 -0.9836736 0.02301299 0.1784844 -0.9836741 0.02301251 0.1784821 -0.9836739 0.04564768 0.1740746 -0.9836742 0.04564726 0.1740733 -0.9836742 0.06753265 0.1668069 -0.9836733 0.06753462 0.1668108 -0.9836733 0.08831119 0.1568052 -0.9836736 0.08831071 0.1568045 -0.9836735 0.1076372 0.1442247 -0.9836736 0.1076366 0.1442241 -0.9836736 0.1251965 0.1292755 -0.9836736 0.1251961 0.1292752 -0.9836736 0.1406999 0.112204 -0.9836747 0.1406949 0.1122007 -0.9836748 0.1538875 0.0932877 -0.9836735 0.1538941 0.09329098 -0.9836733 0.1645604 0.07284623 -0.9836722 0.1645668 0.07284837 -0.9836722 0.1725311 0.05120635 -0.983673 0.1725268 0.05120551 -0.983673 0.1776584 0.02872198 -0.9836735 0.1776558 0.0287218 -0.9836734 0.1798703 0.005768418 -0.9836736 0.1798692 0.005768477 -0.9836736 0.1791297 -0.01728105 -0.9836742 0.1791269 -0.01728051 -0.9836742 0.1754465 -0.04004395 -0.9836737 0.1754491 -0.04004478 -0.9836737 0.1688877 -0.06215208 -0.9836732 0.1688904 -0.06215333 -0.9836732 0.1595556 -0.08324056 -0.9836739 0.1595524 -0.08323854 -0.9836739 0.1475986 -0.1029578 -0.9836727 0.1476036 -0.102962 -0.9836727 0.1332251 -0.1209918 -0.9836736 0.1332218 -0.1209882 -0.9836737 0.1166561 -0.1370308 -0.983673 0.1166581 -0.1370336 -0.9836731 0.09817683 -0.1508259 -0.9836733 0.0981763 -0.1508249 -0.9836733 0.07808303 -0.1621415 -0.9836738 0.0780822 -0.1621393 -0.9836736 0.05670732 -0.1707937 -0.9836735 0.05670756 -0.1707945 -0.9836735 0.03440165 -0.1766443 -0.9836733 0.03440171 -0.1766448 -0.9836733 0.01153028 -0.1795938 -0.983673 0.01153022 -0.1795953 -0.983673 -0.01153033 -0.1795953 -0.9836733 -0.01153016 -0.1795938 -0.9380576 -0.0662325 -0.3400903 -0.9380558 -0.06623387 -0.340095 -0.9380552 -0.1091808 -0.3288344 -0.9380566 -0.1091793 -0.3288308 -0.9380567 -0.1503325 -0.3121694 -0.9380568 -0.1503324 -0.3121692 -0.9380568 -0.1890174 -0.2903819 -0.9380557 -0.1890195 -0.2903845 -0.9380559 -0.2246015 -0.2638283 -0.9380592 -0.224595 -0.2638219 -0.9380599 -0.2564857 -0.2329351 -0.9380523 -0.2565022 -0.2329475 -0.9380519 -0.2841856 -0.1982351 -0.9380549 -0.2841785 -0.1982311 -0.9380548 -0.3071951 -0.1602634 -0.9380585 -0.3071858 -0.1602596 -0.9380587 -0.3251571 -0.1196613 -0.9380555 -0.3251652 -0.1196635 -0.9380559 -0.3377971 -0.07709991 -0.9380519 -0.3378078 -0.07710134 -0.9380518 -0.344894 -0.03327095 -0.9380588 -0.3448751 -0.03327089 -0.938059 -0.3462976 0.01110476 -0.938055 -0.3463084 0.01110607 -0.9380547 -0.3420457 0.05529946 -0.9380586 -0.3420358 0.05529683 -0.9380585 -0.3321561 0.09858202 -0.9380574 -0.3321592 0.09858328 -0.9380573 -0.3168259 0.1402493 -0.9380557 -0.3168298 0.1402515 -0.9380556 -0.2962937 0.1796151 -0.9380547 -0.296296 0.1796168 -0.9380548 -0.2708941 0.2160313 -0.9380538 -0.2708961 0.2160332 -0.9380539 -0.2410462 0.2489005 -0.9380608 -0.2410346 0.2488862 -0.9380603 -0.2072289 0.2776672 -0.9380554 -0.2072358 0.2776784 -0.9380553 -0.1700264 0.3018997 -0.9380571 -0.1700242 0.3018948 -0.9380571 -0.1300228 0.3211587 -0.9380569 -0.1300229 0.321159 -0.938057 -0.08788657 0.3351492 -0.9380563 -0.08788686 0.335151 -0.9380566 -0.04430764 0.3436376 -0.9380536 -0.04430794 0.3436454 -0.9380544 0 0.3464882 -0.9380543 0 0.3464882 -0.9380545 0.04430836 0.3436431 -0.9380565 0.04430711 0.3436377 -0.9380564 0.08788704 0.335151 -0.938057 0.08788639 0.3351493 -0.938057 0.130023 0.3211591 -0.9380571 0.1300228 0.3211587 -0.9380572 0.1700237 0.301895 -0.9380552 0.1700268 0.3018994 -0.9380555 0.2072368 0.2776777 -0.9380602 0.207228 0.2776679 -0.9380608 0.2410334 0.2488874 -0.9380586 0.241038 0.2488913 -0.9380589 0.2708854 0.2160244 -0.9380549 0.2708947 0.2160304 -0.9380548 0.296296 0.1796165 -0.9380556 0.2962935 0.1796153 -0.9380556 0.31683 0.1402512 -0.9380573 0.3168258 0.1402497 -0.9380573 0.3321593 0.09858298 -0.9380586 0.3321561 0.09858232 -0.9380586 0.3420355 0.05529779 -0.9380547 0.3420459 0.0552985 -0.938055 0.3463085 0.01110512 -0.9380589 0.3462976 0.01110577 -0.9380587 0.3448751 -0.03326916 -0.9380519 0.3448938 -0.03327268 -0.9380518 0.3378075 -0.0771023 -0.9380559 0.3377974 -0.07709896 -0.9380556 0.325165 -0.1196643 -0.9380587 0.3251574 -0.1196607 -0.9380584 0.3071861 -0.1602587 -0.9380549 0.3071945 -0.1602641 -0.9380549 0.2841789 -0.1982304 -0.9380573 0.2841741 -0.1982263 -0.9380571 0.2564921 -0.2329393 -0.938055 0.2564958 -0.2329434 -0.9380551 0.2246022 -0.2638307 -0.9380558 0.2246008 -0.2638288 -0.9380558 0.1890192 -0.2903847 -0.938057 0.1890177 -0.2903818 -0.9380568 0.1503324 -0.3121691 -0.9380567 0.1503325 -0.3121694 -0.9380566 0.1091796 -0.3288307 -0.9380551 0.1091805 -0.3288345 -0.9380558 0.06623339 -0.340095 -0.9380574 0.06623291 -0.3400902 -0.9380576 0.02219933 -0.3457675 -0.9380561 0.02219921 -0.3457714 -0.9380561 -0.02219957 -0.3457714 -0.9380576 -0.02219897 -0.3457676 -0.8641451 -0.09619933 -0.4939626 -0.8641466 -0.09619855 -0.4939599 -0.8641478 -0.1585736 -0.4776013 -0.8641407 -0.1585786 -0.4776125 -0.8641391 -0.2183536 -0.4534151 -0.864144 -0.2183492 -0.4534079 -0.8641445 -0.2745373 -0.4217625 -0.8641473 -0.2745342 -0.4217588 -0.864148 -0.3262122 -0.3831889 -0.8641351 -0.3262284 -0.3832044 -0.864134 -0.372555 -0.338342 -0.8641546 -0.3725264 -0.3383209 -0.8641549 -0.4127311 -0.287905 -0.8641431 -0.4127488 -0.287915 -0.8641436 -0.4461776 -0.2327691 -0.8641498 -0.4461675 -0.2327651 -0.8641498 -0.4722694 -0.1738007 -0.8641478 -0.4722729 -0.1738016 -0.8641479 -0.4906207 -0.1119807 -0.8641487 -0.4906195 -0.1119806 -0.8641493 -0.5009102 -0.04832178 -0.8641474 -0.5009134 -0.04832172 -0.8641476 -0.50298 0.01612865 -0.8641451 -0.5029842 0.01612925 -0.8641458 -0.496791 0.08031666 -0.8641408 -0.4967994 0.08031886 -0.864141 -0.4824494 0.1431887 -0.8641442 -0.4824444 0.1431867 -0.8641445 -0.4601722 0.2037048 -0.8641459 -0.4601702 0.2037036 -0.8641463 -0.4303423 0.2608768 -0.8641487 -0.430339 0.2608743 -0.8641482 -0.3934472 0.3137629 -0.8641413 -0.3934558 0.3137713 -0.864142 -0.350101 0.3615077 -0.8641374 -0.3501058 0.3615138 -0.8641381 -0.3010013 0.4033158 -0.8641469 -0.3009935 0.4033028 -0.8641474 -0.2469479 0.4384815 -0.8641468 -0.2469483 0.4384825 -0.8641472 -0.18885 0.4664602 -0.8641416 -0.1888527 0.4664696 -0.8641415 -0.127651 0.4867902 -0.8641442 -0.1276503 0.4867855 -0.8641441 -0.06435304 0.4991128 -0.8641507 -0.06435269 0.4991014 -0.8641501 0 0.5032342 -0.8641501 0 0.5032342 -0.8641508 0.06435155 0.4991016 -0.8641442 0.06435418 0.4991127 -0.8641443 0.1276499 0.4867856 -0.8641414 0.1276515 0.4867901 -0.8641417 0.1888536 0.4664692 -0.8641472 0.1888491 0.4664608 -0.8641468 0.2469483 0.4384824 -0.8641474 0.2469478 0.4384816 -0.864147 0.3009921 0.4033036 -0.8641381 0.3010025 0.4033149 -0.8641375 0.3501064 0.3615133 -0.8641421 0.3501004 0.3615082 -0.8641412 0.3934567 0.3137704 -0.8641482 0.3934465 0.3137638 -0.8641486 0.4303389 0.2608746 -0.8641464 0.4303425 0.2608764 -0.8641459 0.46017 0.2037038 -0.8641446 0.4601724 0.2037045 -0.8641442 0.4824442 0.1431872 -0.864141 0.4824495 0.1431882 -0.8641408 0.4967995 0.08031803 -0.8641458 0.4967908 0.08031749 -0.8641451 0.5029843 0.01612883 -0.8641476 0.50298 0.01612913 -0.8641474 0.5009134 -0.04832208 -0.8641492 0.5009103 -0.04832142 -0.8641487 0.4906194 -0.1119804 -0.8641479 0.4906207 -0.1119809 -0.8641478 0.4722727 -0.1738018 -0.8641498 0.4722696 -0.1738004 -0.8641498 0.446168 -0.2327643 -0.8641437 0.4461769 -0.23277 -0.8641432 0.4127475 -0.2879166 -0.8641548 0.4127324 -0.2879036 -0.8641546 0.3725287 -0.3383182 -0.8641442 0.3725408 -0.3383316 -0.8641439 0.3262169 -0.3831943 -0.864148 0.3262128 -0.3831884 -0.8641474 0.2745346 -0.4217585 -0.8641445 0.2745368 -0.4217627 -0.864144 0.21835 -0.4534075 -0.8641392 0.2183528 -0.4534153 -0.8641406 0.1585775 -0.477613 -0.8641477 0.1585748 -0.477601 -0.8641466 0.09619885 -0.4939599 -0.8641451 0.09619909 -0.4939625 -0.864145 0.03224343 -0.5022088 -0.8641443 0.03224337 -0.5022101 -0.8641443 -0.03224349 -0.5022101 -0.8641451 -0.03224331 -0.5022088 -0.7649188 -0.1231298 -0.6322486 -0.764913 -0.1231319 -0.6322551 -0.7649104 -0.2029719 -0.6113219 -0.7649118 -0.2029712 -0.6113203 -0.7649124 -0.2794795 -0.580345 -0.764909 -0.2794816 -0.5803483 -0.7649078 -0.351402 -0.5398449 -0.7649176 -0.3513947 -0.5398361 -0.7649181 -0.4175413 -0.4904688 -0.7649217 -0.4175381 -0.4904657 -0.7649219 -0.4768297 -0.4330451 -0.7648986 -0.4768522 -0.4330613 -0.7648978 -0.5283166 -0.3685281 -0.7649279 -0.5282849 -0.3685109 -0.7649275 -0.5710726 -0.2979295 -0.764908 -0.5710944 -0.2979379 -0.7649078 -0.6045047 -0.2224637 -0.7649153 -0.604496 -0.2224616 -0.7649149 -0.6279814 -0.1433337 -0.764905 -0.627993 -0.143335 -0.7649043 -0.6411677 -0.0618506 -0.7649154 -0.6411546 -0.06185084 -0.7649142 -0.6438013 0.02064514 -0.7649202 -0.6437942 0.02064406 -0.7649201 -0.6358688 0.1028018 -0.7649227 -0.6358658 0.102801 -0.764923 -0.6174986 0.1832712 -0.7649266 -0.6174946 0.1832696 -0.7649269 -0.5889894 0.2607268 -0.7649165 -0.5890001 0.2607331 -0.7649155 -0.5508241 0.3339117 -0.764903 -0.550836 0.3339209 -0.7649037 -0.5036114 0.4016193 -0.7649248 -0.5035936 0.4016013 -0.7649234 -0.4481046 0.4627034 -0.7649187 -0.448108 0.4627079 -0.7649177 -0.3852595 0.516213 -0.7649109 -0.3852636 0.5162202 -0.7649106 -0.316089 0.5612482 -0.7649089 -0.3160898 0.5612502 -0.7649096 -0.241723 0.5970624 -0.7649247 -0.2417182 0.597045 -0.7649238 -0.1633852 0.6230545 -0.7649129 -0.1633871 0.6230674 -0.7649112 -0.08236962 0.6388475 -0.7649118 -0.08236962 0.6388468 -0.7649112 0 0.6441358 -0.7649112 0 0.6441357 -0.7649119 0.0823695 0.6388468 -0.7649112 0.08236968 0.6388475 -0.7649129 0.1633885 0.6230671 -0.7649238 0.1633838 0.6230549 -0.7649247 0.2417163 0.5970457 -0.7649097 0.2417248 0.5970614 -0.7649088 0.31609 0.5612501 -0.7649107 0.3160886 0.5612481 -0.7649109 0.3852645 0.5162197 -0.7649178 0.3852587 0.5162136 -0.7649187 0.4481085 0.4627075 -0.7649234 0.448104 0.4627038 -0.764925 0.5035915 0.4016035 -0.7649036 0.5036132 0.4016171 -0.7649028 0.5508369 0.3339194 -0.7649153 0.5508235 0.3339133 -0.7649164 0.5890007 0.2607318 -0.7649268 0.5889889 0.2607281 -0.7649266 0.6174944 0.18327 -0.764923 0.6174987 0.1832708 -0.7649227 0.6358657 0.1028013 -0.7649201 0.6358688 0.1028015 -0.7649202 0.6437942 0.0206449 -0.7649142 0.6438013 0.0206443 -0.7649154 0.6411547 -0.06184935 -0.7649043 0.6411674 -0.06185209 -0.7649051 0.6279928 -0.1433364 -0.7649148 0.6279817 -0.1433324 -0.7649154 0.6044963 -0.2224606 -0.7649079 0.6045042 -0.2224646 -0.7649079 0.5710932 -0.2979403 -0.7649274 0.571074 -0.2979273 -0.7649281 0.5282871 -0.3685075 -0.7648981 0.528314 -0.3685312 -0.7648986 0.4768502 -0.4330638 -0.7649218 0.4768319 -0.4330428 -0.7649219 0.41754 -0.4904641 -0.7649036 0.4175521 -0.4904822 -0.7649053 0.3514023 -0.5398484 -0.7649078 0.351401 -0.5398458 -0.7649091 0.2794812 -0.5803485 -0.7649124 0.2794799 -0.5803448 -0.7649118 0.2029713 -0.6113202 -0.7649104 0.2029717 -0.6113219 -0.764913 0.1231311 -0.6322554 -0.7649188 0.1231306 -0.6322485 -0.7649184 0.04126995 -0.6428038 -0.7649192 0.04127001 -0.6428028 -0.7649192 -0.04126989 -0.6428028 -0.7649183 -0.04127007 -0.6428037 -0.6426818 -0.1464527 -0.752005 -0.6426858 -0.1464517 -0.752002 -0.6426885 -0.2414135 -0.7270977 -0.6427016 -0.2414086 -0.7270878 -0.6427037 -0.3324038 -0.6902462 -0.6426934 -0.3324086 -0.6902533 -0.6426936 -0.4179479 -0.6420784 -0.6426852 -0.4179524 -0.6420837 -0.6426838 -0.4966286 -0.5833676 -0.6426939 -0.4966222 -0.5833618 -0.6426949 -0.5671425 -0.5150657 -0.6426914 -0.5671449 -0.5150673 -0.6426916 -0.6283553 -0.4383116 -0.6426815 -0.6283629 -0.4383155 -0.6426828 -0.6792528 -0.3543649 -0.6427001 -0.6792389 -0.3543601 -0.6427001 -0.7189764 -0.2645931 -0.6426784 -0.7189943 -0.264597 -0.6426779 -0.7469285 -0.1704791 -0.6427098 -0.7469015 -0.1704767 -0.64271 -0.7625695 -0.07356435 -0.642687 -0.7625889 -0.07356357 -0.6426876 -0.7657347 0.02455502 -0.642686 -0.7657361 0.02455526 -0.6426845 -0.7563107 0.1222735 -0.6426807 -0.7563138 0.1222743 -0.6426804 -0.7344685 0.2179862 -0.6426699 -0.7344765 0.2179899 -0.6426694 -0.7005712 0.3101229 -0.6426877 -0.7005579 0.3101146 -0.6426882 -0.6551494 0.3971541 -0.6426885 -0.6551491 0.3971539 -0.6426885 -0.5989819 0.4776737 -0.6426785 -0.5989878 0.47768 -0.6426796 -0.5329864 0.550353 -0.6426936 -0.5329794 0.5503435 -0.6426939 -0.4582278 0.6139803 -0.6426752 -0.4582355 0.6139943 -0.6426763 -0.3759561 0.6675509 -0.6426873 -0.3759526 0.6675422 -0.6426885 -0.2875026 0.7101365 -0.6426803 -0.2875043 0.7101432 -0.6426804 -0.1943333 0.741078 -0.6426934 -0.194332 0.741067 -0.6426945 -0.09797006 0.7598328 -0.6426838 -0.09796994 0.7598417 -0.6426834 0 0.7661319 -0.6426833 0 0.7661319 -0.6426837 0.0979712 0.7598416 -0.6426943 0.09796881 0.759833 -0.6426934 0.1943305 0.7410675 -0.6426805 0.1943347 0.7410776 -0.6426804 0.2875051 0.7101429 -0.6426885 0.2875017 0.7101369 -0.6426873 0.3759515 0.6675429 -0.6426764 0.3759571 0.6675502 -0.642675 0.4582373 0.6139931 -0.6426937 0.4582262 0.6139818 -0.6426936 0.5329782 0.5503445 -0.6426797 0.5329876 0.5503519 -0.6426783 0.5989887 0.4776791 -0.6426886 0.5989811 0.4776746 -0.6426883 0.6551492 0.397154 -0.6426881 0.6551494 0.3971541 -0.6426877 0.7005571 0.3101166 -0.6426694 0.700572 0.3101209 -0.64267 0.7344769 0.2179887 -0.6426804 0.7344681 0.2179874 -0.6426808 0.7563138 0.1222739 -0.6426845 0.7563107 0.1222739 -0.642686 0.7657361 0.02455508 -0.6426876 0.7657347 0.0245552 -0.642687 0.7625887 -0.07356625 -0.6427099 0.7625697 -0.07356172 -0.6427099 0.7469022 -0.1704731 -0.642678 0.7469275 -0.1704826 -0.6426784 0.7189935 -0.2645994 -0.6426999 0.7189774 -0.2645908 -0.6427003 0.6792398 -0.3543582 -0.6426831 0.6792517 -0.3543667 -0.6426816 0.6283622 -0.4383164 -0.6426914 0.6283561 -0.4383108 -0.6426914 0.5671447 -0.5150676 -0.6426948 0.5671429 -0.5150654 -0.6426941 0.4966229 -0.5833609 -0.6427043 0.4966183 -0.5833536 -0.6427026 0.4179437 -0.6420721 -0.6426936 0.4179469 -0.6420789 -0.6426935 0.3324075 -0.6902539 -0.6427036 0.3324049 -0.6902456 -0.6427015 0.24141 -0.7270873 -0.6426886 0.2414121 -0.7270981 -0.6426857 0.1464528 -0.7520017 -0.6426758 0.1464532 -0.7520101 -0.6426785 0.04908668 -0.7645618 -0.6426835 0.04908698 -0.7645577 -0.6426834 -0.04908663 -0.7645577 -0.6426805 -0.0490871 -0.7645601 -0.5014692 -0.1653857 -0.849221 -0.5014713 -0.1653853 -0.8492198 -0.5014727 -0.2726219 -0.8210984 -0.5014542 -0.2726271 -0.8211079 -0.5014518 -0.3753912 -0.7795047 -0.5014771 -0.3753825 -0.7794926 -0.5014762 -0.47198 -0.7250906 -0.5014515 -0.4719899 -0.7251013 -0.5014498 -0.560841 -0.6587909 -0.5014758 -0.5608292 -0.6587811 -0.5014776 -0.6404668 -0.5816549 -0.5014936 -0.640459 -0.5816499 -0.5014947 -0.7095795 -0.4949749 -0.5014543 -0.7096011 -0.4949849 -0.5014508 -0.7670739 -0.4001809 -0.5014522 -0.7670731 -0.4001807 -0.5014529 -0.8119493 -0.2988035 -0.5014984 -0.8119229 -0.2987987 -0.5014998 -0.8434658 -0.1925183 -0.5014473 -0.8434967 -0.1925198 -0.5014461 -0.8611912 -0.08307647 -0.501464 -0.8611807 -0.08307731 -0.5014655 -0.8647331 0.02773058 -0.5014746 -0.8647279 0.02772951 -0.5014762 -0.8540815 0.1380813 -0.5014877 -0.8540751 0.1380791 -0.5014873 -0.8294055 0.2461646 -0.5015022 -0.8293977 0.2461607 -0.5015019 -0.7911102 0.3502007 -0.501492 -0.7911151 0.350204 -0.5014917 -0.7398379 0.4484928 -0.5014927 -0.7398376 0.4484925 -0.5014899 -0.6764119 0.5394208 -0.5014786 -0.6764163 0.5394259 -0.5014775 -0.6018847 0.6214942 -0.5014644 -0.601889 0.6215007 -0.5014635 -0.5174723 0.6933664 -0.501488 -0.5174658 0.6933534 -0.501485 -0.4245532 0.7538352 -0.5014598 -0.4245581 0.753849 -0.5014597 -0.3246718 0.8019517 -0.5014835 -0.3246688 0.8019379 -0.5014824 -0.2194559 0.8368719 -0.5014583 -0.2194571 0.8368861 -0.5014585 -0.1106356 0.8580788 -0.5014773 -0.1106361 0.8580677 -0.5014789 0 0.8651699 -0.5014789 0 0.86517 -0.5014774 0.1106342 0.8580679 -0.5014585 0.1106375 0.8580785 -0.5014582 0.2194595 0.8368855 -0.5014824 0.2194535 0.8368725 -0.5014836 0.3246666 0.8019388 -0.5014597 0.3246741 0.8019508 -0.5014597 0.4245604 0.7538479 -0.5014846 0.424551 0.7538366 -0.5014883 0.5174637 0.6933549 -0.5014635 0.5174743 0.6933649 -0.5014641 0.60189 0.6214998 -0.5014771 0.601884 0.6214954 -0.5014787 0.676417 0.5394249 -0.5014896 0.6764113 0.5394219 -0.5014926 0.7398375 0.4484925 -0.5014914 0.7398381 0.4484928 -0.5014922 0.7911138 0.3502065 -0.501465 0.7911293 0.3502103 -0.5014635 0.8294199 0.2461647 -0.5014873 0.8294059 0.2461631 -0.5014877 0.8540748 0.1380802 -0.5014763 0.8540818 0.1380801 -0.5014746 0.8647277 0.0277304 -0.5014656 0.8647331 0.02772963 -0.5014641 0.8611808 -0.08307546 -0.5014462 0.8611909 -0.08307832 -0.5014472 0.8434956 -0.1925251 -0.5014998 0.843467 -0.1925131 -0.5014984 0.8119245 -0.2987943 -0.501453 0.8119475 -0.2988077 -0.5014524 0.7670732 -0.4001805 -0.5014506 0.7670739 -0.4001811 -0.5014543 0.7095986 -0.4949882 -0.5014943 0.709582 -0.4949716 -0.5014936 0.64046 -0.5816487 -0.5014774 0.640466 -0.5816562 -0.5014761 0.5608313 -0.6587793 -0.5014501 0.5608389 -0.6587925 -0.5014517 0.4719877 -0.7251025 -0.5014761 0.4719821 -0.7250893 -0.5014771 0.3753848 -0.7794915 -0.5014519 0.3753888 -0.7795057 -0.5014541 0.2726253 -0.8211085 -0.5014726 0.2726237 -0.8210978 -0.5014713 0.1653855 -0.8492197 -0.501477 0.1653854 -0.8492164 -0.5014725 0.0554319 -0.863396 -0.501474 0.05543202 -0.8633952 -0.501474 -0.05543184 -0.8633952 -0.5014699 -0.05543243 -0.8633974 -0.3455065 -0.1793861 -0.9211111 -0.3455052 -0.1793864 -0.9211117 -0.3454999 -0.2957032 -0.8906118 -0.3455137 -0.2957004 -0.8906073 -0.3455145 -0.4071631 -0.8454808 -0.345508 -0.4071647 -0.8454828 -0.3455128 -0.5119358 -0.7864748 -0.345506 -0.5119377 -0.7864766 -0.345506 -0.6083084 -0.7145534 -0.3454722 -0.6083189 -0.7145608 -0.3454695 -0.6947 -0.6309062 -0.3454831 -0.6946955 -0.6309038 -0.345483 -0.7696705 -0.5368882 -0.3455159 -0.7696587 -0.5368837 -0.3455187 -0.8319962 -0.4340499 -0.3455273 -0.831993 -0.4340491 -0.345526 -0.8806666 -0.324096 -0.3454849 -0.8806821 -0.3240976 -0.3454831 -0.9148971 -0.2088174 -0.3455324 -0.9148783 -0.208818 -0.3455337 -0.9340698 -0.09011077 -0.3454928 -0.9340852 -0.09010833 -0.3454901 -0.9379402 0.03007978 -0.3455065 -0.9379343 0.03007805 -0.3455043 -0.9263882 0.1497722 -0.3455137 -0.9263849 0.1497708 -0.3455124 -0.8996285 0.2670015 -0.3454611 -0.8996452 0.2670115 -0.3454628 -0.8581134 0.3798641 -0.3454917 -0.8581049 0.3798573 -0.3454925 -0.8024846 0.4864702 -0.3454993 -0.8024829 0.4864684 -0.3455008 -0.733685 0.5850945 -0.3455002 -0.7336851 0.5850947 -0.3454978 -0.6528435 0.6741116 -0.3454857 -0.6528458 0.6741157 -0.3454876 -0.5612815 0.7520648 -0.3454753 -0.5612833 0.7520692 -0.3454789 -0.4605005 0.8176696 -0.3455129 -0.4604972 0.8176571 -0.3455117 -0.3521556 0.8698323 -0.3454895 -0.3521567 0.8698406 -0.3454888 -0.2380353 0.9077316 -0.3455131 -0.2380353 0.9077224 -0.3455134 -0.1200028 0.9307094 -0.3454859 -0.1200014 0.9307197 -0.3454852 0 0.9384242 -0.3454852 0 0.9384242 -0.3454859 0.1200041 0.9307194 -0.3455132 0.1200001 0.9307097 -0.3455131 0.238032 0.9077233 -0.3454767 0.2380387 0.9077354 -0.3454717 0.3521627 0.8698452 -0.3455116 0.3521537 0.8698331 -0.3455129 0.4604943 0.8176587 -0.3454792 0.4605033 0.8176679 -0.3454751 0.5612842 0.7520685 -0.3454874 0.5612806 0.7520655 -0.3454857 0.6528466 0.6741149 -0.3454974 0.6528428 0.6741126 -0.3455001 0.7336853 0.5850947 -0.3455007 0.733685 0.5850946 -0.3454991 0.8024826 0.486469 -0.3454927 0.802485 0.4864697 -0.3454919 0.8581037 0.3798598 -0.3455063 0.8580982 0.3798588 -0.3455066 0.8996293 0.2670062 -0.345467 0.8996444 0.2670068 -0.3454665 0.9264026 0.14977 -0.3455044 0.9263883 0.1497713 -0.3455065 0.9379342 0.0300796 -0.3454902 0.9379402 0.03007823 -0.3454928 0.9340848 -0.0901122 -0.3455337 0.9340704 -0.0901069 -0.3455324 0.9148794 -0.2088134 -0.3454834 0.9148959 -0.208822 -0.345485 0.8806822 -0.3240973 -0.3454811 0.8806834 -0.3240981 -0.3454851 0.8320053 -0.4340591 -0.3455184 0.8319958 -0.4340506 -0.345516 0.7696605 -0.5368812 -0.3454831 0.7696686 -0.5368907 -0.3454828 0.6946964 -0.630903 -0.3454695 0.6946992 -0.6309072 -0.3454723 0.6083165 -0.7145628 -0.345506 0.6083109 -0.7145513 -0.3455063 0.5119371 -0.7864768 -0.3455126 0.5119364 -0.7864745 -0.345508 0.4071642 -0.8454831 -0.3455145 0.4071636 -0.8454805 -0.3455138 0.2957017 -0.890607 -0.3454999 0.295702 -0.8906123 -0.345505 0.1793863 -0.9211117 -0.3455064 0.1793863 -0.9211112 -0.3455075 0.06012523 -0.9364879 -0.3455005 0.06012475 -0.9364905 -0.3455005 -0.06012541 -0.9364904 -0.3455075 -0.06012457 -0.936488 -0.1792585 -0.1880625 -0.9656598 -0.1792637 -0.1880618 -0.965659 -0.1792676 -0.3100039 -0.9336813 -0.1792745 -0.310003 -0.9336803 -0.179272 -0.4268532 -0.8863734 -0.1792448 -0.4268576 -0.8863768 -0.1792418 -0.536702 -0.824514 -0.1792933 -0.5366929 -0.8245086 -0.1792981 -0.637722 -0.749108 -0.1792716 -0.637727 -0.7491101 -0.179271 -0.7282864 -0.6614084 -0.1792718 -0.7282861 -0.6614082 -0.1792734 -0.8068848 -0.562848 -0.1792669 -0.8068862 -0.5628482 -0.1792693 -0.8722369 -0.4550443 -0.17926 -0.8722388 -0.4550443 -0.1792598 -0.923267 -0.3397706 -0.1792896 -0.9232609 -0.3397713 -0.1792922 -0.9591296 -0.2189171 -0.1792498 -0.959138 -0.2189151 -0.179248 -0.9792581 -0.09446537 -0.1793001 -0.9792482 -0.09446918 -0.1793016 -0.9832888 0.03152781 -0.1792325 -0.9833013 0.03153449 -0.1792352 -0.9711955 0.1570166 -0.1792384 -0.9711949 0.1570162 -0.1792407 -0.9431418 0.2799217 -0.1793028 -0.9431326 0.2799131 -0.1792996 -0.8995954 0.3982206 -0.1792348 -0.8996039 0.3982308 -0.1792345 -0.8412947 0.5099983 -0.1792462 -0.8412934 0.5099962 -0.1792472 -0.769168 0.613393 -0.1792615 -0.7691668 0.6133903 -0.1792655 -0.6844141 0.7067115 -0.1792709 -0.6844139 0.7067105 -0.1792717 -0.5884185 0.7884323 -0.1793137 -0.5884169 0.7884238 -0.1793106 -0.4827642 0.8571969 -0.1792876 -0.4827644 0.8572015 -0.1792844 -0.3691876 0.9118979 -0.1792688 -0.3691874 0.911901 -0.179269 -0.2495469 0.9516245 -0.1792536 -0.2495462 0.9516274 -0.179256 -0.1258049 0.9757257 -0.1792799 -0.1258064 0.975721 -0.1792819 0 0.9837977 -0.1792819 0 0.9837977 -0.1792798 0.1258043 0.9757214 -0.179256 0.125807 0.9757254 -0.1792537 0.2495476 0.9516271 -0.1792821 0.2495437 0.9516227 -0.1792883 0.3691873 0.9118971 -0.1792845 0.369188 0.9118977 -0.1792875 0.4827662 0.8572006 -0.1793103 0.4827623 0.8571979 -0.1793138 0.5884139 0.7884261 -0.1792718 0.5884215 0.7884299 -0.1792713 0.6844134 0.7067108 -0.1792657 0.6844145 0.7067111 -0.1792618 0.769166 0.6133913 -0.179247 0.7691689 0.613392 -0.1792463 0.8412927 0.5099971 -0.1792343 0.8412953 0.5099974 -0.1792346 0.8996064 0.3982254 -0.1792994 0.899593 0.398226 -0.1793029 0.943131 0.2799185 -0.1792907 0.9431334 0.2799181 -0.17929 0.9711856 0.157015 -0.1792352 0.9711961 0.1570117 -0.1792325 0.9833012 0.031533 -0.1792494 0.9832981 0.03153443 -0.179248 0.9792576 -0.09447008 -0.1792481 0.9792577 -0.09447008 -0.1792497 0.9591381 -0.2189143 -0.1792412 0.9591395 -0.2189154 -0.1792408 0.9232687 -0.339776 -0.1793088 0.9232591 -0.3397659 -0.1793062 0.872231 -0.4550412 -0.1792691 0.8722353 -0.4550472 -0.1792671 0.8068858 -0.5628486 -0.1792736 0.8068852 -0.5628474 -0.1792716 0.7282862 -0.6614082 -0.1792708 0.7282863 -0.6614084 -0.1792712 0.6377252 -0.7491118 -0.179298 0.6377239 -0.7491064 -0.1792936 0.5366969 -0.8245061 -0.1792416 0.5366981 -0.8245166 -0.1792449 0.4268553 -0.8863778 -0.179272 0.4268555 -0.8863724 -0.1792744 0.3100035 -0.9336801 -0.1792678 0.3100033 -0.9336815 -0.1792636 0.1880632 -0.9656588 -0.1792485 0.1880624 -0.9656617 -0.179253 0.0630322 -0.9817817 -0.1792641 0.0630331 -0.9817796 -0.1792641 -0.06303238 -0.9817796 -0.1792563 -0.06303316 -0.981781 1.2652e-4 0.9749273 -0.2225237 1.2652e-4 0.9749279 -0.2225207 -5.37765e-4 0.9659257 -0.2588191 3.194e-4 0.938467 -0.3453689 3.194e-4 0.9384698 -0.3453611 -5.63475e-4 0.9063082 -0.422617 1.78e-4 0.8865982 -0.4625403 1.765e-4 0.8191514 -0.5735775 -0.003345847 0.8865944 -0.4625356 -2.97447e-4 0.8201726 -0.5721162 2.0075e-4 0.7402706 -0.6723091 2.0075e-4 0.7402785 -0.6723003 -5.73313e-4 0.7071067 -0.7071067 3.16439e-4 0.6482294 -0.761445 3.16439e-4 0.6482264 -0.7614476 -5.21889e-4 0.5735753 -0.8191527 9.78279e-5 0.5455368 -0.8380869 9.68651e-5 0.4226192 -0.9063074 -0.003713428 0.5455225 -0.8380879 -4.54495e-4 0.4338842 -0.9009686 2.57082e-4 0.3151072 -0.949056 2.57082e-4 0.3151077 -0.949056 -5.91138e-4 0.258819 -0.9659256 2.95663e-4 0.1911584 -0.9815591 2.95663e-4 0.1911581 -0.9815592 -4.62551e-4 0.08715629 -0.9961946 0 0.06407195 -0.9979452 0 -0.06407195 -0.9979452 -4.62551e-4 -0.08715629 -0.9961946 2.57082e-4 -0.3151077 -0.949056 -5.91138e-4 -0.258819 -0.9659256 2.95663e-4 -0.1911584 -0.9815591 2.95663e-4 -0.1911581 -0.9815592 2.57082e-4 -0.3151072 -0.949056 -4.54494e-4 -0.4338842 -0.9009686 -1.36372e-4 -0.4226191 -0.9063074 9.78279e-5 -0.5455263 -0.8380937 9.78279e-5 -0.5455368 -0.8380869 -5.21889e-4 -0.5735753 -0.8191527 3.16439e-4 -0.6482264 -0.7614476 3.16439e-4 -0.6482294 -0.761445 -5.73313e-4 -0.7071067 -0.7071067 2.0075e-4 -0.7402785 -0.6723003 1.99147e-4 -0.8191514 -0.5735774 -0.003227293 -0.7402667 -0.6723056 -2.48994e-4 -0.8201726 -0.5721162 1.78001e-4 -0.8865994 -0.4625381 1.78001e-4 -0.8865982 -0.4625403 -5.63475e-4 -0.9063082 -0.422617 3.194e-4 -0.9384698 -0.3453611 3.194e-4 -0.938467 -0.3453689 -5.37765e-4 -0.9659257 -0.2588191 1.26521e-4 -0.9749279 -0.2225207 1.2533e-4 -0.9961947 -0.08715635 -0.003589212 -0.974921 -0.2225223 -4.00103e-4 -0.9953793 -0.09601974 2.40324e-4 -0.9994861 0.03205382 2.40324e-4 -0.9994862 0.03205114 -5.87149e-4 -0.9961945 0.08715629 3.04518e-4 -0.9871826 0.1595941 3.04518e-4 -0.9871802 0.1596097 -4.8429e-4 -0.9659257 0.2588191 3.46314e-5 -0.9586679 0.2845273 3.42496e-5 -0.9063084 0.422617 -0.003969013 -0.9586654 0.2845082 -5.68965e-4 -0.9144124 0.4047834 2.71951e-4 -0.7818296 0.6234922 -5.93115e-4 -0.8191512 0.5735774 2.84842e-4 -0.8551443 0.51839 2.84842e-4 -0.8551419 0.5183939 2.71951e-4 -0.7818335 0.6234871 -5.10757e-4 -0.6956826 0.718349 -9.28651e-5 -0.7071068 0.7071068 6.721e-5 -0.5981262 0.8014019 6.721e-5 -0.5981088 0.8014149 -5.04107e-4 -0.5735753 0.8191527 3.11424e-4 -0.4907222 0.871316 3.11424e-4 -0.4907165 0.8713192 -5.81282e-4 -0.4226191 0.9063072 2.21468e-4 -0.3752669 0.9269168 2.19803e-4 -0.2588191 0.9659258 -0.003109931 -0.3752543 0.9269167 -2.02559e-4 -0.2536548 0.9672948 1.53254e-4 -0.1278843 0.9917891 1.53254e-4 -0.1278768 0.9917901 -5.51585e-4 -0.08715456 0.9961947 3.20365e-4 0 1 3.20365e-4 0 1 -5.51585e-4 0.08715456 0.9961947 1.53254e-4 0.1278768 0.9917901 1.51884e-4 0.2588191 0.9659258 -0.003466427 0.1278792 0.9917837 -3.47772e-4 0.2536559 0.9672944 2.21467e-4 0.3752561 0.9269211 2.21467e-4 0.3752669 0.9269168 -5.81282e-4 0.4226191 0.9063072 3.11424e-4 0.4907165 0.8713192 3.11424e-4 0.4907222 0.871316 -5.04107e-4 0.5735753 0.8191527 6.72104e-5 0.5981088 0.8014149 6.65083e-5 0.7071068 0.7071068 -0.003839671 0.5981218 0.801396 -5.10756e-4 0.6956826 0.718349 2.84842e-4 0.8551443 0.51839 -5.93115e-4 0.8191512 0.5735774 2.71951e-4 0.7818296 0.6234922 2.71951e-4 0.7818335 0.6234871 2.84841e-4 0.855142 0.5183938 -5.68965e-4 0.9144124 0.4047834 -4.74021e-5 0.9063083 0.422617 3.46314e-5 0.958673 0.2845105 3.46314e-5 0.9586679 0.2845273 -4.8429e-4 0.9659257 0.2588191 3.04518e-4 0.9871802 0.1596097 3.04518e-4 0.9871826 0.1595941 -5.87149e-4 0.9961945 0.08715629 0 0.9988439 0.04807049 0 0.9961947 -0.08715635 -0.001934409 0.9998695 -0.0160374 -1.58173e-4 0.9953795 -0.09601974 0.865197 -0.4843463 -0.1297802 0.865197 -0.4995239 -0.04370379 0.865197 -0.354566 -0.354566 0.865197 -0.4107487 -0.2876101 0.865197 -0.4544523 -0.2119132 0.865197 -0.1297802 -0.4843464 0.865197 -0.2119138 -0.4544522 0.865197 -0.2876093 -0.4107494 0.865197 0.1297802 -0.4843464 0.865197 0.04370391 -0.4995239 0.865197 -0.04370391 -0.4995239 0.865197 0.354566 -0.354566 0.8651971 0.2876093 -0.4107494 0.8651968 0.2119138 -0.4544522 0.865197 0.4843463 -0.1297802 0.8651971 0.4544523 -0.2119132 0.865197 0.4107487 -0.2876101 0.865197 0.4843463 0.1297802 0.865197 0.4995239 0.04370379 0.865197 0.4995239 -0.04370379 0.865197 0.354566 0.354566 0.865197 0.4107487 0.2876101 0.865197 0.4544523 0.2119132 0.8651971 0.1297801 0.4843462 0.865197 0.2119137 0.454452 0.865197 0.2876101 0.4107487 0.865197 -0.1297801 0.4843462 0.8651971 -0.0437026 0.499524 0.865197 0.0437026 0.4995239 0.865197 -0.354566 0.354566 0.865197 -0.2876101 0.4107487 0.865197 -0.2119137 0.454452 0.865197 -0.4843463 0.1297802 0.8651971 -0.4544523 0.2119132 0.865197 -0.4107487 0.2876101 0.865197 -0.4995239 0.04370379 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.8660252 -0.5000005 -2.62548e-7 0.8660256 -0.5 0 0.8660259 -0.4999992 0 0 -1 0 0 -1 0 0 -1 0 -0.8660259 -0.4999992 -2.78957e-7 -0.8660256 -0.5 0 -0.8660252 -0.5000005 0 -0.8660252 0.5000005 -2.62548e-7 -0.8660256 0.5 0 -0.8660259 0.4999992 0 0 1 0 0 1 0 0 1 0 0.8660259 0.4999992 -2.78957e-7 0.8660256 0.5 0 0.8660252 0.5000005 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0.9988855 -0.001140475 -0.04718559 0.9988836 -0.004559338 -0.04702007 0.9988836 -0.004559278 -0.04701983 0.9988836 -0.009076118 -0.04636031 0.9988836 -0.009076058 -0.04636013 0.9988835 -0.01350808 -0.0452677 0.9988836 -0.0135082 -0.04526787 0.9988836 -0.01781404 -0.04375278 0.9988836 -0.01781415 -0.04375296 0.9988836 -0.0219537 -0.04182934 0.9988835 -0.02195382 -0.04182946 0.9988835 -0.02588844 -0.03951537 0.9988835 -0.02588856 -0.03951549 0.9988835 -0.02958154 -0.03683245 0.9988835 -0.02958166 -0.03683257 0.9988836 -0.03299838 -0.0338056 0.9988836 -0.0329976 -0.03380495 0.9988836 -0.03610616 -0.03046232 0.9988836 -0.03610676 -0.03046268 0.9988835 -0.03887826 -0.02683573 0.9988836 -0.0388785 -0.02683585 0.9988836 -0.04128706 -0.02295821 0.9988835 -0.04128646 -0.02295798 0.9988836 -0.04330945 -0.01886612 0.9988836 -0.04331058 -0.01886647 0.9988835 -0.04492926 -0.01459842 0.9988835 -0.04492956 -0.01459848 0.9988836 -0.04612874 -0.010194 0.9988835 -0.0461288 -0.01019406 0.9988835 -0.04689735 -0.00569421 0.9988836 -0.04689592 -0.00569421 0.9988836 -0.04722654 -0.001141428 0.9988836 -0.04722619 -0.001141488 0.9988836 -0.04711586 0.003421723 0.9988835 -0.04711717 0.003421962 0.9988834 -0.0465669 0.007953345 0.9988835 -0.04656666 0.007953286 0.9988836 -0.04558163 0.01241064 0.9988836 -0.04558098 0.0124104 0.9988836 -0.04417049 0.01675164 0.9988835 -0.04417079 0.01675176 0.9988836 -0.04234784 0.02093666 0.9988835 -0.04234749 0.02093642 0.9988836 -0.04012912 0.02492576 0.9988836 -0.04012978 0.0249263 0.9988834 -0.03753668 0.02868294 0.9988835 -0.03753715 0.02868336 0.9988835 -0.03459346 0.03217232 0.9988836 -0.0345928 0.03217154 0.9988836 -0.03132629 0.03536009 0.9988836 -0.03132683 0.03536087 0.9988834 -0.02776789 0.03821915 0.9988835 -0.02776783 0.03821903 0.9988835 -0.02394932 0.04072064 0.9988836 -0.02394902 0.04071998 0.9988836 -0.01990723 0.04284131 0.9988836 -0.01990687 0.04284024 0.9988836 -0.01567924 0.04456156 0.9988836 -0.01567941 0.04456233 0.9988836 -0.01130527 0.04586756 0.9988835 -0.01130527 0.0458675 0.9988836 -0.006825625 0.04674446 0.9988835 -0.006825625 0.0467447 0.9988836 -0.002282321 0.0471853 0.9988836 -0.002282381 0.04718458 0.9988836 0.002282321 0.04718458 0.9988836 0.00228244 0.0471853 0.9988835 0.006825685 0.0467447 0.9988835 0.006825566 0.04674422 0.9988836 0.01130515 0.04586714 0.9988835 0.01130527 0.04586756 0.9988836 0.01567947 0.04456233 0.9988836 0.01567912 0.04456162 0.9988836 0.01990675 0.0428403 0.9988836 0.01990735 0.04284125 0.9988836 0.02394896 0.04072004 0.9988836 0.02394938 0.04072064 0.9988834 0.02776783 0.03821903 0.9988834 0.02776789 0.03821915 0.9988835 0.03132694 0.03536081 0.9988835 0.03132623 0.03536015 0.9988836 0.0345928 0.03217154 0.9988836 0.03459268 0.03217142 0.9988835 0.03753608 0.02868264 0.9988834 0.03753668 0.028683 0.9988835 0.04012984 0.02492618 0.9988836 0.04012906 0.02492588 0.9988835 0.04234743 0.02093648 0.9988836 0.04234784 0.0209366 0.9988835 0.04417079 0.01675176 0.9988836 0.04417049 0.01675164 0.9988836 0.04558098 0.01241046 0.9988835 0.04558163 0.01241058 0.9988835 0.04656666 0.007953286 0.9988836 0.04656696 0.007953286 0.9988834 0.04711717 0.003421783 0.9988835 0.04711586 0.003421843 0.9988836 0.04722619 -0.001141428 0.9988837 0.04722654 -0.001141488 0.9988836 0.04689598 -0.005694091 0.9988836 0.04689735 -0.005694389 0.9988834 0.0461288 -0.01019406 0.9988834 0.04612874 -0.010194 0.9988835 0.04492956 -0.01459848 0.9988834 0.04492926 -0.01459836 0.9988835 0.04331052 -0.01886659 0.9988835 0.0433095 -0.018866 0.9988836 0.04128652 -0.02295786 0.9988835 0.04128706 -0.02295827 0.9988836 0.0388785 -0.02683591 0.9988835 0.03887832 -0.02683573 0.9988836 0.0361067 -0.0304628 0.9988836 0.03610622 -0.03046226 0.9988837 0.03299766 -0.03380489 0.9988836 0.03299832 -0.03380572 0.9988834 0.02958166 -0.03683257 0.9988836 0.02958154 -0.03683245 0.9988836 0.02588856 -0.03951555 0.9988835 0.02588844 -0.03951537 0.9988835 0.02195376 -0.04182946 0.9988836 0.02195376 -0.04182934 0.9988836 0.01781415 -0.04375302 0.9988836 0.01781409 -0.04375278 0.9988836 0.01350814 -0.04526787 0.9988835 0.01350814 -0.0452677 0.9988836 0.009076118 -0.04636013 0.9988836 0.009076118 -0.04636031 0.9988836 0.004559338 -0.04701983 0.9988835 0.004559338 -0.04702007 0.9988855 0.001140475 -0.04718559 0.9986178 0 -0.05256074 0.1587215 0.9866748 -0.03578388 0.04701536 0.9986026 -0.0241369 0.04701542 0.9916116 -0.1203988 0.04705059 0.9916093 -0.1204043 0.04703611 0.9916095 -0.1204089 0.04703563 0.9753599 -0.2155475 0.04706597 0.9753592 -0.2155441 0.04705494 0.9157766 -0.3989226 0.04705297 0.9157768 -0.3989222 0.04705315 0.9500039 -0.3086726 0.04707396 0.9500022 -0.3086743 0.0470668 0.9500057 -0.3086649 0.04704499 0.7634693 -0.6441283 0.04704511 0.8220732 -0.5674349 0.04703581 0.8220731 -0.5674359 0.04703468 0.8729989 -0.485449 0.04703801 0.8730005 -0.4854457 0.04702633 0.8730016 -0.4854448 0.04702603 0.9157753 -0.3989286 0.04703879 0.763471 -0.644127 0.04704535 0.7634703 -0.6441273 0.04704469 0.6977378 -0.7148069 0.04705029 0.697737 -0.7148072 0.04704153 0.6977349 -0.71481 0.04704135 0.6254917 -0.7788114 0.04703521 0.6254914 -0.7788121 0.04703915 0.4642099 -0.8844752 0.04704624 0.4642085 -0.8844756 0.04704707 0.5474057 -0.8355439 0.04704654 0.5474057 -0.8355439 0.04703587 0.5474128 -0.8355399 0.04703664 0.2856287 -0.9571853 0.04703527 0.3766779 -0.9251495 0.04703497 0.3766772 -0.9251497 0.04703122 0.3766776 -0.9251497 0.04703021 0.4642082 -0.8844766 0.04703933 0.1919136 -0.9802839 0.04704046 0.1919133 -0.9802839 0.04704016 0.2856291 -0.9571852 0.04704523 -0.09640777 -0.9942295 0.04704546 0 -0.9988929 0.04704546 0 -0.9988927 0.04704523 0.09640777 -0.9942295 0.04704469 0.09640747 -0.9942296 0.04704952 0.09640681 -0.9942294 0.04705083 0.1919155 -0.980283 0.04704344 -0.09640681 -0.9942297 0.04704952 -0.09640747 -0.9942294 0.04705083 -0.1919155 -0.980283 0.04703927 -0.1919136 -0.980284 0.04704046 -0.1919133 -0.9802839 0.04704016 -0.2856287 -0.9571852 0.04703664 -0.2856292 -0.9571853 0.04703521 -0.3766779 -0.9251494 0.04703497 -0.3766772 -0.9251498 0.04703116 -0.3766776 -0.9251497 0.04703021 -0.4642082 -0.8844766 0.04703915 -0.4642099 -0.8844752 0.04704636 -0.4642086 -0.8844757 0.04704707 -0.5474057 -0.8355439 0.04704672 -0.5474057 -0.8355439 0.04703587 -0.5474128 -0.8355399 0.04703521 -0.6254919 -0.7788116 0.04704135 -0.6254912 -0.7788118 0.04703468 -0.8729989 -0.485449 0.04703581 -0.8220736 -0.5674352 0.04704511 -0.8220728 -0.5674358 0.04704499 -0.7634693 -0.6441283 0.04704076 -0.7634704 -0.6441273 0.04704517 -0.7634707 -0.6441267 0.04704469 -0.6977371 -0.7148074 0.0470522 -0.6977376 -0.7148066 0.04704159 -0.6977349 -0.71481 0.04703617 -0.8729996 -0.4854475 0.04705524 -0.8729999 -0.4854453 0.04705613 -0.9157766 -0.3989223 0.04705494 -0.9157765 -0.3989226 0.04705297 -0.9157768 -0.3989222 0.04705315 -0.9500033 -0.3086746 0.04704362 -0.9500033 -0.3086758 0.04703551 -0.950007 -0.3086653 0.04703384 -0.9753607 -0.2155442 0.04703563 -0.9753606 -0.2155444 0.04703611 -0.9916095 -0.1204089 0.04705059 -0.9916093 -0.1204043 0.04704803 -0.9916095 -0.1204038 0.04704821 -0.9986011 -0.02413564 0.0470398 -0.9986014 -0.02413684 0.04703718 -0.9986016 -0.02413576 0.04703706 -0.9962692 0.07235473 0.04703778 -0.9962692 0.07235461 0.04704499 -0.9638072 0.2624166 0.04701411 -0.9638102 0.2624115 0.04701346 -0.9846363 0.1681703 0.0470184 -0.984636 0.1681708 0.04703843 -0.9846327 0.1681835 0.04704731 -0.8954347 0.4426998 0.0470491 -0.9339676 0.3542469 0.04705262 -0.9339801 0.3542138 0.04702067 -0.9339826 0.3542112 0.04702085 -0.9638067 0.2624228 0.04703426 -0.8485277 0.5270566 0.04703545 -0.8485274 0.5270568 0.04703414 -0.8954347 0.4427013 0.04702979 -0.6623994 0.7476733 0.04702848 -0.731457 0.680264 0.04705423 -0.7314579 0.6802611 0.04705458 -0.793698 0.6064894 0.04705101 -0.7936968 0.6064912 0.04705321 -0.7936966 0.6064914 0.04705423 -0.8485288 0.5270531 0.04706257 -0.6623869 0.7476823 0.04704809 -0.6623885 0.7476817 0.04704946 -0.587135 0.8081206 0.04705429 -0.5871343 0.8081209 0.04705888 -0.5871351 0.8081198 0.04705768 -0.5063995 0.861014 0.04704135 -0.5063984 0.8610156 0.0470426 -0.4209311 0.905872 0.04704129 -0.4209334 0.905871 0.0470401 -0.4209333 0.9058712 0.04704028 -0.3315445 0.9422662 0.04705321 -0.3315415 0.9422666 0.04704833 -0.3315406 0.9422671 0.04704773 -0.2390483 0.9698672 0.0470348 -0.23905 0.9698675 0.04704684 -0.2390604 0.9698644 0.04704582 -0.1443274 0.988411 0.0470457 -0.1443274 0.988411 0.04704684 0.2390604 0.9698644 0.04704582 0.1443274 0.988411 0.0470457 0.1443274 0.988411 0.04704564 0.04826474 0.997726 0.04705917 0.04825979 0.9977256 0.04705631 0.04825937 0.9977258 0.04705631 -0.04825979 0.9977257 0.04706031 -0.04825937 0.9977256 0.04704564 -0.04826474 0.997726 0.04703301 0.2390485 0.9698679 0.04704785 0.2390498 0.9698668 0.04704833 0.3315406 0.9422671 0.04705333 0.3315415 0.9422666 0.04704028 0.3315445 0.9422662 0.0470401 0.4209333 0.9058712 0.04704129 0.4209334 0.905871 0.0470426 0.4209311 0.905872 0.04704135 0.5063999 0.8610147 0.04705768 0.506398 0.8610149 0.04705888 0.5871351 0.8081198 0.04705429 0.5871343 0.8081209 0.04704946 0.587135 0.8081206 0.04704821 0.6623873 0.7476828 0.04705917 0.6623881 0.7476814 0.04702979 0.6623994 0.7476733 0.04702848 0.7314588 0.6802619 0.04705417 0.7314561 0.6802632 0.04703414 0.8954353 0.4427 0.04703545 0.8485274 0.5270568 0.04703426 0.8485277 0.5270566 0.04705417 0.8485288 0.5270531 0.04705315 0.7936967 0.6064912 0.04705059 0.7936967 0.6064915 0.04705458 0.793698 0.6064894 0.04705262 0.9339801 0.3542138 0.0470491 0.9339676 0.3542469 0.04704731 0.8954342 0.4427011 0.04704499 0.9638072 0.2624166 0.04702091 0.9638067 0.2624228 0.04702061 0.9339826 0.3542112 0.04708856 0.9988178 0.0120669 0.04703706 0.9962692 0.07235467 0.04703778 0.9962691 0.07235473 0.04703843 0.9846327 0.1681835 0.04701769 0.984636 0.1681702 0.04701346 0.9846361 0.1681708 0.04701411 0.9638102 0.2624115 0.1794629 -0.1421431 0.9734415 0.1794707 -0.1421414 0.9734404 0.1794711 -0.2354289 0.9551771 0.1794703 -0.2354292 0.9551772 0.1794706 -0.3265206 0.9279949 0.1794737 -0.3265198 0.9279946 0.1794735 -0.4145576 0.8921498 0.1794742 -0.4145574 0.8921497 0.1794756 -0.4987286 0.8479731 0.1794718 -0.4987297 0.8479732 0.1794716 -0.5782425 0.7958804 0.1794777 -0.5782409 0.7958803 0.1794776 -0.6523524 0.7363588 0.17946 -0.6523572 0.7363588 0.1794605 -0.7203816 0.6699585 0.1794658 -0.7203801 0.6699586 0.1794657 -0.7816767 0.5973052 0.1794698 -0.7816756 0.5973055 0.1794692 -0.8356765 0.5190718 0.1794791 -0.8356739 0.5190725 0.1794797 -0.8818705 0.4359951 0.1794734 -0.881872 0.4359944 0.1794724 -0.9198346 0.3488466 0.1794844 -0.9198318 0.3488481 0.1794841 -0.9492062 0.2584433 0.1794738 -0.9492086 0.2584418 0.1794739 -0.969721 0.1656212 0.1794823 -0.9697192 0.1656225 0.1794829 -0.9811769 0.07125818 0.1794853 -0.9811765 0.0712586 0.179485 -0.9834735 -0.02376884 0.1794733 -0.9834756 -0.02377122 0.1794734 -0.9765899 -0.1185817 0.179479 -0.9765889 -0.1185804 0.179479 -0.9605856 -0.2122797 0.1794819 -0.9605852 -0.212279 0.1794813 -0.9356131 -0.3039977 0.1794694 -0.9356144 -0.3040006 0.1794694 -0.9019063 -0.3928815 0.1794742 -0.9019058 -0.3928803 0.1794737 -0.859777 -0.4780927 0.1794742 -0.859777 -0.4780926 0.1794739 -0.8096202 -0.5588418 0.1794795 -0.80962 -0.5588403 0.1794795 -0.751905 -0.6343706 0.1794825 -0.751905 -0.6343698 0.1794817 -0.6871685 -0.7039785 0.1794754 -0.6871685 -0.7039802 0.1794751 -0.6160184 -0.7670138 0.179468 -0.6160181 -0.7670156 0.1794685 -0.5391141 -0.8228894 0.179473 -0.5391144 -0.8228882 0.1794731 -0.4571778 -0.8710786 0.1794775 -0.4571782 -0.8710774 0.179477 -0.3709713 -0.9111358 0.179477 -0.3709713 -0.9111357 0.1794769 -0.2813031 -0.9426859 0.1794723 -0.2813023 -0.9426869 0.1794725 -0.1890064 -0.9654359 0.1794742 -0.1890066 -0.9654353 0.1794743 -0.09494698 -0.9791701 0.1794754 -0.09494721 -0.9791699 0.1794763 0 -0.9837623 0.1794763 0 -0.9837623 0.1794754 0.09494698 -0.9791699 0.1794743 0.09494721 -0.97917 0.1794742 0.1890063 -0.9654355 0.1794725 0.1890068 -0.9654357 0.1794723 0.2813033 -0.9426867 0.1794769 0.2813022 -0.9426862 0.179477 0.3709713 -0.9111357 0.179477 0.3709713 -0.9111357 0.1794775 0.4571774 -0.8710778 0.179473 0.4571786 -0.8710782 0.1794729 0.5391137 -0.8228888 0.1794685 0.5391148 -0.822889 0.1794682 0.6160192 -0.7670148 0.179475 0.6160173 -0.7670146 0.1794754 0.6871693 -0.7039793 0.1794816 0.6871677 -0.7039793 0.1794824 0.7519046 -0.6343702 0.1794794 0.7519053 -0.63437 0.1794797 0.8096193 -0.5588412 0.1794738 0.8096209 -0.5588409 0.1794743 0.8597769 -0.4780926 0.1794736 0.859777 -0.4780926 0.1794742 0.9019055 -0.3928812 0.1794694 0.9019066 -0.3928807 0.1794694 0.9356152 -0.3039984 0.1794648 0.9356163 -0.3039978 0.1794649 0.960588 -0.2122802 0.179479 0.960585 -0.2122824 0.179479 0.9765888 -0.1185815 0.1794734 0.97659 -0.1185805 0.1794732 0.9834757 -0.0237689 0.179485 0.9834735 -0.02377122 0.1794853 0.9811766 0.07125812 0.1794829 0.9811769 0.07125866 0.1794823 0.9697194 0.1656209 0.1794738 0.9697207 0.1656228 0.1794737 0.9492081 0.2584438 0.1794842 0.9492068 0.2584413 0.1794843 0.9198326 0.3488459 0.1794724 0.9198337 0.3488489 0.1794733 0.8818715 0.4359956 0.1794796 0.8818711 0.4359939 0.1794791 0.835675 0.5190709 0.1794693 0.8356754 0.5190735 0.1794697 0.7816762 0.5973048 0.1794655 0.7816763 0.597306 0.1794658 0.7203807 0.6699578 0.1794606 0.7203808 0.6699593 0.1794598 0.6523545 0.7363612 0.1794775 0.6523551 0.7363564 0.1794776 0.5782418 0.7958794 0.1794717 0.5782415 0.7958812 0.1794717 0.498729 0.8479737 0.1794757 0.4987293 0.8479726 0.1794743 0.4145576 0.8921497 0.1794735 0.4145575 0.8921498 0.1794737 0.3265204 0.9279944 0.1794705 0.32652 0.9279952 0.1794702 0.235429 0.9551773 0.179471 0.2354291 0.9551771 0.1794707 0.142143 0.9734402 0.1794629 0.1421416 0.9734418 0.1794626 0.04752767 0.982616 0.1794691 0.04752886 0.9826148 0.1794691 -0.04752761 0.9826148 0.1794627 -0.04752892 0.982616 0.3457737 -0.1355755 0.9284718 0.3457687 -0.1355769 0.9284735 0.3457677 -0.2245573 0.9110536 0.3457853 -0.2245522 0.9110482 0.3457853 -0.3114329 0.8851227 0.3457727 -0.3114369 0.8851261 0.3457733 -0.3954071 0.8509371 0.345773 -0.3954073 0.8509372 0.345772 -0.4756899 0.8088021 0.3457692 -0.4756909 0.8088026 0.3457692 -0.5515308 0.7591162 0.3457655 -0.5515322 0.7591169 0.3457658 -0.6222216 0.7023434 0.3457799 -0.6222159 0.7023414 0.3457798 -0.6870991 0.6390079 0.345772 -0.6871023 0.6390087 0.3457723 -0.7455672 0.5697115 0.345777 -0.7455652 0.5697113 0.3457773 -0.7970691 0.4950949 0.3457625 -0.7970753 0.4950951 0.3457621 -0.8411387 0.4158537 0.3457776 -0.8411321 0.4158541 0.3457778 -0.8773409 0.3327321 0.3457729 -0.8773429 0.3327317 0.3457733 -0.9053603 0.2465029 0.3457837 -0.9053559 0.246504 0.3457837 -0.9249207 0.1579728 0.3457684 -0.9249267 0.1579706 0.3457678 -0.9358553 0.06796562 0.3457729 -0.9358535 0.06796652 0.3457728 -0.9380444 -0.02267068 0.3457716 -0.9380449 -0.02267092 0.3457721 -0.9314768 -0.1131041 0.3457735 -0.9314764 -0.1131038 0.3457738 -0.9162123 -0.2024739 0.3457753 -0.9162117 -0.2024735 0.3457751 -0.8923937 -0.2899537 0.3457692 -0.8923953 -0.2899554 0.3457697 -0.8602429 -0.3747341 0.345777 -0.860241 -0.3747316 0.3457771 -0.8200595 -0.456005 0.3457679 -0.8200616 -0.4560083 0.3457679 -0.7722215 -0.5330276 0.3457689 -0.7722213 -0.5330272 0.3457689 -0.7171725 -0.6050682 0.3457724 -0.7171719 -0.6050668 0.3457732 -0.6554264 -0.671459 0.3457705 -0.6554267 -0.6714601 0.3457701 -0.5875625 -0.7315828 0.3457695 -0.5875626 -0.731583 0.3457699 -0.5142101 -0.7848766 0.3457699 -0.5142101 -0.7848765 0.34577 -0.4360588 -0.8308404 0.3457716 -0.4360588 -0.8308398 0.3457716 -0.3538351 -0.869047 0.3457698 -0.3538351 -0.8690478 0.34577 -0.2683079 -0.8991408 0.3457744 -0.2683084 -0.8991389 0.3457737 -0.1802762 -0.9208372 0.3457693 -0.1802755 -0.9208389 0.3457693 -0.09056073 -0.9339392 0.345771 -0.09056103 -0.9339385 0.3457704 0 -0.9383192 0.3457704 0 -0.9383192 0.345771 0.09056067 -0.9339385 0.3457693 0.09056109 -0.9339392 0.3457692 0.1802765 -0.9208388 0.3457736 0.1802752 -0.9208373 0.3457744 0.2683075 -0.8991392 0.3457699 0.2683088 -0.8991405 0.3457698 0.3538354 -0.8690477 0.3457717 0.3538348 -0.8690472 0.3457716 0.4360585 -0.8308399 0.34577 0.4360591 -0.8308403 0.3457698 0.5142117 -0.7848756 0.3457785 0.5142084 -0.784874 0.3457794 0.5875588 -0.7315813 0.3457701 0.5875625 -0.7315828 0.3457704 0.6554271 -0.6714597 0.3457733 0.655426 -0.6714594 0.3457725 0.7171715 -0.6050674 0.345769 0.7171729 -0.6050677 0.3457689 0.7722212 -0.5330274 0.345768 0.7722217 -0.5330274 0.3457677 0.8200626 -0.4560067 0.345777 0.8200587 -0.4560067 0.3457769 0.8602416 -0.3747302 0.3457843 0.8602385 -0.3747306 0.3457843 0.8923894 -0.2899556 0.345775 0.8923934 -0.2899548 0.3457753 0.9162116 -0.2024738 0.3457738 0.9162123 -0.2024736 0.3457735 0.9314764 -0.1131041 0.3457721 0.9314769 -0.1131038 0.3457716 0.9380448 -0.02267068 0.3457728 0.9380443 -0.02267092 0.3457729 0.9358536 0.0679655 0.3457678 0.9358552 0.06796669 0.3457683 0.9249262 0.1579738 0.3457837 0.9249212 0.1579697 0.3457837 0.9053565 0.2465019 0.3457733 0.9053596 0.246505 0.345773 0.8773425 0.3327327 0.3457778 0.8773412 0.3327311 0.3457776 0.8411335 0.4158512 0.3457623 0.8411372 0.4158566 0.3457625 0.7970737 0.4950977 0.3457772 0.7970708 0.4950923 0.3457771 0.7455657 0.5697104 0.3457725 0.7455665 0.5697123 0.345772 0.6871011 0.6390098 0.3457798 0.6871002 0.6390067 0.3457801 0.6222181 0.7023394 0.345766 0.6222194 0.7023454 0.3457657 0.5515316 0.7591174 0.3457691 0.5515314 0.7591158 0.3457692 0.4756904 0.808803 0.345772 0.4756904 0.8088018 0.345773 0.3954072 0.8509372 0.3457735 0.3954072 0.850937 0.3457726 0.3114345 0.885127 0.3457852 0.3114354 0.8851217 0.3457853 0.2245558 0.9110473 0.3457677 0.2245538 0.9110544 0.3457686 0.1355753 0.9284737 0.345776 0.1355764 0.9284709 0.345776 0.04533469 0.9372214 0.345763 0.04533219 0.9372262 0.3457629 -0.04533475 0.937226 0.3457752 -0.04533201 0.9372218 0.5017991 -0.1249824 0.8559072 0.5018107 -0.1249787 0.8559008 0.5018116 -0.2070036 0.8398421 0.5018056 -0.2070058 0.8398451 0.5018056 -0.2870916 0.8159469 0.5017988 -0.2870944 0.8159502 0.5017993 -0.3645069 0.784431 0.5018122 -0.3645011 0.7844256 0.5018127 -0.438507 0.745584 0.5018061 -0.4385102 0.7455866 0.5018061 -0.5084215 0.6997844 0.5017985 -0.5084255 0.699787 0.5017982 -0.5735918 0.6474498 0.5018038 -0.5735886 0.6474481 0.5018039 -0.6333984 0.5890665 0.5018016 -0.6333997 0.5890671 0.5018014 -0.6872964 0.5251847 0.5018023 -0.6872959 0.5251846 0.5018018 -0.7347747 0.4564 0.5018057 -0.7347724 0.4563996 0.5018058 -0.7753921 0.3833512 0.5017974 -0.7753973 0.3833516 0.5017971 -0.8087755 0.3067275 0.5018016 -0.8087729 0.3067276 0.5018013 -0.8346011 0.2272365 0.501805 -0.8345988 0.2272367 0.5018048 -0.852634 0.1456273 0.5018018 -0.8526358 0.1456269 0.5018017 -0.8627105 0.06265491 0.5017959 -0.862714 0.06265377 0.501796 -0.8647334 -0.02090257 0.501812 -0.8647242 -0.02089869 0.5018122 -0.8586701 -0.1042611 0.501801 -0.8586761 -0.1042643 0.5018008 -0.844605 -0.18665 0.5018035 -0.8446037 -0.1866492 0.5018035 -0.8226467 -0.2672934 0.5018109 -0.8226431 -0.2672905 0.5018103 -0.7930055 -0.3454399 0.5017915 -0.7930138 -0.3454481 0.5017917 -0.7559715 -0.4203716 0.5018058 -0.7559658 -0.4203648 0.5018057 -0.7118647 -0.4913653 0.5018024 -0.7118659 -0.4913669 0.5018026 -0.6611205 -0.5577757 0.5017948 -0.6611229 -0.55778 0.5017949 -0.6042034 -0.6189833 0.5017961 -0.6042031 -0.6189826 0.5017969 -0.5416401 -0.674408 0.5018078 -0.541638 -0.6744014 0.5018072 -0.4740194 -0.7235298 0.5018053 -0.4740196 -0.7235309 0.5018049 -0.401977 -0.7659024 0.5018037 -0.401977 -0.7659031 0.5018035 -0.3261801 -0.8011242 0.5018038 -0.32618 -0.8011239 0.5018039 -0.2473376 -0.8288648 0.5018024 -0.2473375 -0.8288659 0.5018021 -0.1661862 -0.848868 0.5018033 -0.1661863 -0.8488672 0.5018036 -0.08348292 -0.8609436 0.5018022 -0.08348268 -0.8609443 0.5018022 0 -0.8649825 0.5018021 0 -0.8649825 0.5018022 0.08348298 -0.8609443 0.5018036 0.08348262 -0.8609436 0.5018033 0.166186 -0.8488672 0.5018021 0.1661864 -0.8488679 0.5018023 0.2473379 -0.8288657 0.5018039 0.2473373 -0.828865 0.5018038 0.32618 -0.801124 0.5018035 0.3261801 -0.8011241 0.5018038 0.4019773 -0.7659029 0.5018048 0.4019767 -0.7659025 0.5018053 0.47402 -0.7235307 0.5018 0.4740227 -0.7235326 0.5017995 0.5416405 -0.6744055 0.5018052 0.5416374 -0.6744037 0.5018054 0.6041975 -0.6189804 0.5017949 0.6042035 -0.6189831 0.5017949 0.6611239 -0.5577787 0.5018026 0.6611194 -0.5577771 0.5018023 0.7118663 -0.4913663 0.5018056 0.7118643 -0.4913659 0.5018059 0.7559642 -0.4203675 0.5017918 0.7559729 -0.4203687 0.5017915 0.7930155 -0.3454442 0.5017979 0.7930115 -0.3454442 0.5017981 0.8226496 -0.2672944 0.5018034 0.8226463 -0.2672946 0.5018035 0.8446036 -0.1866497 0.5018008 0.8446052 -0.1866495 0.501801 0.8586764 -0.1042618 0.5018121 0.8586698 -0.1042636 0.5018121 0.8647241 -0.02090233 0.5017961 0.8647335 -0.02089887 0.5017958 0.8627139 0.06265515 0.5018017 0.8627106 0.06265354 0.5018017 0.8526357 0.1456276 0.5018048 0.852634 0.1456266 0.501805 0.834599 0.2272359 0.5018014 0.8346008 0.2272372 0.5018014 0.8087732 0.3067266 0.5017972 0.8087751 0.3067284 0.5017974 0.7753965 0.3833533 0.5018058 0.775393 0.3833494 0.5018057 0.7347729 0.4563989 0.5018017 0.7347743 0.4564008 0.5018022 0.687296 0.5251844 0.5018012 0.6872964 0.5251849 0.5018016 0.6333994 0.5890675 0.5018039 0.6333987 0.5890662 0.5018038 0.5735896 0.6474473 0.5017982 0.5735908 0.6474506 0.5017986 0.5084241 0.699788 0.5018061 0.5084229 0.6997835 0.501806 0.438509 0.7455874 0.5018128 0.4385083 0.7455832 0.5018123 0.3645037 0.7844243 0.5017994 0.3645042 0.7844324 0.5017988 0.2870929 0.8159508 0.5018056 0.2870931 0.8159465 0.5018054 0.2070044 0.8398455 0.5018116 0.207005 0.8398417 0.5018109 0.1249814 0.8559005 0.5017972 0.1249794 0.8559087 0.5017981 0.04178953 0.8639748 0.5018074 0.04179137 0.8639692 0.5018075 -0.04178929 0.8639693 0.5017988 -0.04179149 0.8639743 0.6430284 -0.1106556 0.7578059 0.6430222 -0.110658 0.7578109 0.6430219 -0.1832782 0.743594 0.6430135 -0.183282 0.7436003 0.6430135 -0.2541939 0.7224397 0.6430239 -0.2541884 0.7224323 0.6430234 -0.3227295 0.6945261 0.6430211 -0.3227308 0.6945276 0.6430213 -0.3882533 0.6601386 0.643022 -0.388253 0.6601382 0.643022 -0.4501552 0.6195831 0.6430315 -0.4501483 0.619578 0.6430319 -0.5078446 0.5732397 0.643024 -0.5078506 0.5732434 0.6430234 -0.5608046 0.5215545 0.6430211 -0.5608066 0.5215554 0.643021 -0.608527 0.4649936 0.6430236 -0.6085247 0.4649928 0.6430242 -0.6505622 0.4040903 0.6430298 -0.6505573 0.404089 0.6430301 -0.6865199 0.3394155 0.6430215 -0.6865271 0.3394166 0.6430215 -0.7160809 0.2715724 0.6430242 -0.7160785 0.2715723 0.6430246 -0.7389453 0.2011947 0.6430156 -0.7389532 0.2011944 0.6430153 -0.7549219 0.1289353 0.6430268 -0.7549118 0.1289366 0.643027 -0.7638317 0.05547469 0.6430233 -0.7638348 0.05547398 0.6430231 -0.7656232 -0.01850545 0.643018 -0.7656275 -0.01850694 0.6430175 -0.7602674 -0.09231466 0.6430245 -0.7602618 -0.09231215 0.6430244 -0.7478033 -0.1652573 0.6430228 -0.7478045 -0.165258 0.6430229 -0.7283638 -0.2366596 0.6430246 -0.7283625 -0.2366587 0.6430251 -0.7021212 -0.3058506 0.6430272 -0.7021198 -0.3058493 0.6430274 -0.6693221 -0.3721876 0.6430237 -0.6693244 -0.3721899 0.6430239 -0.6302796 -0.4350494 0.6430187 -0.6302824 -0.4350529 0.6430193 -0.5853508 -0.4938529 0.6430274 -0.5853469 -0.4938468 0.6430277 -0.5349502 -0.5480363 0.6430281 -0.5349501 -0.548036 0.6430278 -0.4795588 -0.5971086 0.6430262 -0.4795593 -0.5971099 0.6430261 -0.4196934 -0.6406052 0.64302 -0.4196949 -0.6406103 0.6430205 -0.3559075 -0.6781256 0.6430228 -0.3559072 -0.6781238 0.6430231 -0.2887975 -0.7093076 0.6430202 -0.2887977 -0.7093102 0.6430202 -0.2189908 -0.7338719 0.6430221 -0.2189908 -0.7338702 0.6430222 -0.1471399 -0.7515798 0.6430216 -0.1471398 -0.7515804 0.643022 -0.07391458 -0.7622725 0.6430239 -0.07391494 -0.762271 0.643024 0 -0.7658461 0.643024 0 -0.765846 0.6430239 0.07391446 -0.7622709 0.6430218 0.07391512 -0.7622725 0.6430215 0.1471399 -0.7515804 0.6430224 0.1471397 -0.7515799 0.6430221 0.2189911 -0.7338702 0.6430233 0.2189905 -0.7338693 0.6430242 0.2887962 -0.7093071 0.6430231 0.2887968 -0.7093079 0.6430228 0.3559066 -0.678124 0.6430206 0.355908 -0.6781254 0.6430199 0.4196962 -0.6406095 0.6430261 0.419692 -0.6406061 0.6430261 0.4795596 -0.5971096 0.6430212 0.4795632 -0.5971121 0.6430206 0.5349543 -0.5480405 0.6430276 0.5349488 -0.5480375 0.6430274 0.5853455 -0.4938485 0.6430192 0.5853522 -0.4938513 0.6430187 0.6302831 -0.4350518 0.6430237 0.6302789 -0.4350506 0.6430237 0.6693249 -0.3721891 0.6430274 0.6693217 -0.3721884 0.6430273 0.7021195 -0.3058498 0.6430251 0.7021214 -0.30585 0.6430246 0.7283624 -0.2366591 0.6430229 0.728364 -0.2366592 0.6430227 0.7478046 -0.1652576 0.6430243 0.7478032 -0.1652577 0.6430245 0.7602615 -0.09231394 0.6430175 0.7602676 -0.09231287 0.643018 0.7656275 -0.01850557 0.6430231 0.7656232 -0.01850682 0.6430233 0.7638348 0.05547493 0.6430269 0.7638318 0.05547374 0.6430269 0.7549123 0.1289337 0.6430155 0.7549213 0.1289382 0.6430155 0.7389526 0.2011967 0.6430246 0.7389459 0.2011924 0.6430242 0.7160788 0.2715716 0.6430215 0.7160806 0.2715731 0.6430215 0.6865262 0.3394187 0.6430299 0.6865209 0.3394135 0.6430298 0.6505581 0.4040877 0.6430241 0.6505613 0.4040915 0.6430236 0.6085251 0.4649922 0.6430211 0.6085265 0.4649941 0.643021 0.5608062 0.521556 0.6430234 0.560805 0.521554 0.6430239 0.507849 0.5732448 0.6430319 0.5078462 0.5732384 0.6430317 0.4501503 0.6195763 0.643022 0.4501531 0.6195846 0.643022 0.3882531 0.6601381 0.6430213 0.3882532 0.6601387 0.6430211 0.3227303 0.6945279 0.6430234 0.32273 0.6945258 0.643024 0.2541909 0.7224314 0.6430137 0.2541913 0.7224406 0.6430134 0.1832799 0.7436009 0.6430219 0.1832803 0.7435935 0.6430221 0.110656 0.7578112 0.6430299 0.110657 0.7578043 0.6430293 0.03699976 0.7649474 0.643029 0.0369997 0.7649475 0.6430291 -0.03699958 0.7649475 0.6430287 -0.0369997 0.7649478 0.7651239 -0.0930339 0.6371266 0.765124 -0.09303385 0.6371264 0.7651236 -0.154093 0.625173 0.7651321 -0.154088 0.6251637 0.7651322 -0.2137047 0.607374 0.765124 -0.2137103 0.6073822 0.7651244 -0.2713342 0.58392 0.7651266 -0.2713326 0.583918 0.7651262 -0.3264195 0.5550065 0.7651221 -0.3264232 0.5550101 0.7651219 -0.3784677 0.5209134 0.7651231 -0.3784664 0.5209124 0.7651234 -0.4269731 0.4819547 0.7651227 -0.4269738 0.4819552 0.7651232 -0.4714961 0.438495 0.7651268 -0.4714922 0.438493 0.7651268 -0.5116124 0.3909393 0.7651245 -0.5116152 0.3909404 0.7651242 -0.5469576 0.3397388 0.7651201 -0.5469623 0.3397402 0.7651197 -0.5771987 0.2853656 0.765124 -0.5771934 0.2853645 0.765124 -0.6020414 0.2283228 0.7651252 -0.6020401 0.2283226 0.7651248 -0.621266 0.1691524 0.7651293 -0.6212604 0.1691523 0.7651298 -0.6346853 0.1084026 0.7651207 -0.6346964 0.1084017 0.7651206 -0.6421957 0.04663789 0.7651293 -0.6421852 0.04663985 0.7651296 -0.6436884 -0.01555675 0.7651247 -0.6436942 -0.01555842 0.7651248 -0.6391873 -0.07761168 0.7651218 -0.6391908 -0.07761305 0.7651218 -0.6287162 -0.1389409 0.7651238 -0.628714 -0.1389397 0.7651239 -0.6123695 -0.1989694 0.7651199 -0.6123738 -0.1989722 0.7651196 -0.5903108 -0.2571478 0.7651283 -0.5903025 -0.2571413 0.7651281 -0.5627291 -0.3129136 0.7651249 -0.562732 -0.3129164 0.7651252 -0.5299041 -0.3657665 0.7651281 -0.5299018 -0.3657638 0.7651279 -0.4921269 -0.4151995 0.7651239 -0.4921297 -0.4152035 0.7651236 -0.449759 -0.4607629 0.7651278 -0.4497566 -0.4607586 0.7651277 -0.4031872 -0.5020157 0.7651256 -0.4031882 -0.502018 0.7651256 -0.3528555 -0.5385869 0.7651268 -0.352855 -0.5385856 0.7651265 -0.2992261 -0.5701273 0.7651252 -0.2992264 -0.5701288 0.7651251 -0.2428044 -0.5963469 0.7651273 -0.242804 -0.5963443 0.765127 -0.1841146 -0.6169946 0.7651252 -0.1841147 -0.616997 0.7651255 -0.1237063 -0.6318858 0.7651274 -0.1237064 -0.6318836 0.765127 -0.06214332 -0.6408736 0.7651259 -0.06214314 -0.6408747 0.7651259 0 -0.6438807 0.7651259 0 -0.6438807 0.765126 0.06214344 -0.6408747 0.7651271 0.06214302 -0.6408736 0.7651274 0.1237063 -0.6318836 0.765127 0.1237065 -0.6318839 0.7651273 0.1841139 -0.6169946 0.7651249 0.1841154 -0.6169971 0.7651244 0.2428046 -0.5963476 0.7651252 0.2428041 -0.5963469 0.7651253 0.2992268 -0.5701287 0.7651265 0.2992257 -0.5701275 0.7651268 0.3528547 -0.5385857 0.7651255 0.3528558 -0.5385867 0.7651256 0.4031887 -0.5020176 0.7651277 0.4031866 -0.5020161 0.7651277 0.4497557 -0.4607595 0.7651237 0.4497599 -0.460762 0.7651237 0.4921306 -0.4152026 0.7651278 0.4921259 -0.4152004 0.765128 0.5299013 -0.3657646 0.7651252 0.5299046 -0.3657658 0.7651248 0.5627325 -0.3129155 0.7651281 0.5627286 -0.3129145 0.7651284 0.5903014 -0.2571437 0.7651198 0.5903118 -0.2571454 0.7651198 0.6123743 -0.198971 0.7651239 0.6123693 -0.1989707 0.7651238 0.6287139 -0.1389403 0.7651218 0.6287164 -0.1389402 0.7651218 0.6391909 -0.0776121 0.7651248 0.6391872 -0.07761263 0.7651247 0.6436942 -0.01555687 0.7651295 0.6436884 -0.01555824 0.7651294 0.6421853 0.04663711 0.7651208 0.6421955 0.04664063 0.7651206 0.634696 0.1084045 0.7651297 0.6346858 0.1083998 0.7651295 0.6212607 0.169151 0.765125 0.6212655 0.1691538 0.7651253 0.6020401 0.2283222 0.765124 0.6020414 0.2283231 0.7651241 0.5771932 0.2853652 0.7651264 0.5771909 0.2853633 0.7651264 0.5469564 0.3397357 0.7651241 0.5469583 0.3397377 0.7651244 0.5116148 0.3909412 0.765127 0.511613 0.3909387 0.7651269 0.4714928 0.4384921 0.7651232 0.4714953 0.4384959 0.7651225 0.4269736 0.4819554 0.7651233 0.4269732 0.4819545 0.7651232 0.3784667 0.5209121 0.7651219 0.3784673 0.5209136 0.7651221 0.326422 0.5550107 0.7651262 0.3264207 0.5550058 0.7651265 0.2713332 0.5839177 0.7651244 0.2713336 0.5839202 0.7651239 0.2137079 0.6073832 0.7651321 0.2137071 0.6073731 0.7651322 0.1540906 0.6251631 0.7651236 0.1540904 0.6251736 0.7651239 0.0930339 0.6371265 0.7651228 0.09303373 0.6371278 0.7651234 0.03110903 0.6431317 0.7651188 0.0311079 0.6431371 0.7651188 -0.03110933 0.6431371 0.7651237 -0.03110748 0.6431314 0.8644661 -0.07263344 0.4974161 0.8644666 -0.07263314 0.4974153 0.8644669 -0.1203017 0.4880826 0.8644641 -0.1203039 0.4880869 0.8644641 -0.1668476 0.4741981 0.864466 -0.1668457 0.4741953 0.8644657 -0.2118355 0.4558781 0.8644643 -0.2118369 0.45588 0.8644644 -0.2548454 0.4333072 0.8644679 -0.2548411 0.4333027 0.8644681 -0.2954718 0.4066835 0.864463 -0.2954786 0.4066892 0.8644629 -0.3333501 0.3762731 0.8644676 -0.3333435 0.3762685 0.8644674 -0.3681026 0.3423399 0.8644645 -0.3681071 0.3423425 0.8644645 -0.3994295 0.3052169 0.8644643 -0.3994297 0.3052169 0.8644642 -0.4270225 0.265242 0.8644642 -0.4270226 0.265242 0.8644642 -0.4506292 0.2227888 0.8644667 -0.4506251 0.2227879 0.8644668 -0.470023 0.1782571 0.8644621 -0.470031 0.1782581 0.8644621 -0.4850408 0.1320626 0.8644613 -0.4850422 0.1320627 0.8644613 -0.4955239 0.08463233 0.8644659 -0.4955159 0.08463287 0.864466 -0.5013709 0.03641164 0.864464 -0.5013744 0.0364111 0.8644641 -0.502548 -0.01214605 0.8644651 -0.5025462 -0.01214557 0.8644651 -0.4990276 -0.06059288 0.8644646 -0.4990285 -0.06059324 0.8644647 -0.4908505 -0.1084741 0.8644655 -0.4908491 -0.1084734 0.8644654 -0.4780889 -0.15534 0.8644667 -0.4780868 -0.1553387 0.8644667 -0.4608623 -0.2007564 0.8644629 -0.4608679 -0.2007607 0.8644629 -0.4393408 -0.2443019 0.8644633 -0.4393405 -0.2443016 0.8644632 -0.4137104 -0.2855647 0.864465 -0.4137083 -0.2855623 0.8644648 -0.3842167 -0.3241575 0.8644651 -0.3842165 -0.3241572 0.8644648 -0.3511374 -0.3597263 0.8644612 -0.3511407 -0.3597318 0.8644615 -0.3147824 -0.391942 0.8644627 -0.3147814 -0.39194 0.8644627 -0.2754844 -0.4204909 0.8644636 -0.2754839 -0.4204894 0.8644636 -0.2336142 -0.4451147 0.8644639 -0.233614 -0.4451141 0.8644641 -0.1895633 -0.465583 0.8644645 -0.1895632 -0.4655824 0.8644642 -0.1437433 -0.4817047 0.8644645 -0.1437432 -0.4817042 0.8644643 -0.0965811 -0.493329 0.8644631 -0.09658104 -0.4933312 0.8644633 -0.04851722 -0.5003493 0.8644631 -0.04851716 -0.5003494 0.8644632 0 -0.5026959 0.8644632 0 -0.5026959 0.8644632 0.04851722 -0.5003495 0.8644633 0.04851716 -0.5003493 0.864463 0.09658151 -0.4933311 0.8644635 0.09658122 -0.4933305 0.8644632 0.1437438 -0.4817065 0.8644643 0.1437429 -0.4817048 0.8644644 0.189563 -0.4655824 0.8644641 0.1895634 -0.465583 0.864464 0.2336139 -0.4451141 0.8644636 0.2336143 -0.4451146 0.8644636 0.2754836 -0.4204896 0.8644627 0.2754847 -0.4204907 0.8644626 0.314781 -0.3919404 0.8644614 0.3147827 -0.3919417 0.8644613 0.3511418 -0.3597308 0.8644648 0.3511365 -0.3597275 0.8644651 0.3842163 -0.3241572 0.8644648 0.3842168 -0.3241575 0.8644651 0.4137078 -0.2855628 0.8644632 0.4137108 -0.285564 0.8644632 0.4393405 -0.2443017 0.864463 0.439341 -0.2443018 0.8644628 0.4608686 -0.2007592 0.8644667 0.4608618 -0.200758 0.8644669 0.4780866 -0.1553392 0.8644655 0.478089 -0.1553394 0.8644655 0.4908491 -0.1084738 0.8644647 0.4908506 -0.1084737 0.8644646 0.4990286 -0.06059306 0.8644651 0.4990276 -0.06059312 0.8644651 0.5025462 -0.01214599 0.864464 0.5025479 -0.01214563 0.8644639 0.5013743 0.03641188 0.864466 0.501371 0.03641086 0.8644659 0.4955162 0.08463102 0.8644613 0.4955235 0.08463418 0.8644614 0.4850421 0.132063 0.8644621 0.4850409 0.1320623 0.8644621 0.4700304 0.1782599 0.8644668 0.4700237 0.1782553 0.8644667 0.4506255 0.222787 0.8644603 0.4506343 0.2227942 0.8644603 0.4270282 0.2652456 0.8644642 0.4270234 0.2652407 0.8644643 0.3994296 0.3052169 0.8644644 0.3994296 0.3052169 0.8644645 0.3681064 0.3423434 0.8644673 0.3681034 0.342339 0.8644676 0.3333449 0.3762672 0.8644631 0.3333487 0.3762743 0.8644629 0.2954769 0.4066905 0.864468 0.2954735 0.4066823 0.864468 0.2548424 0.4333019 0.8644644 0.2548442 0.4333079 0.8644644 0.2118365 0.4558802 0.8644657 0.211836 0.4558779 0.864466 0.1668464 0.4741949 0.864464 0.1668468 0.4741984 0.8644641 0.1203029 0.4880872 0.8644669 0.1203028 0.4880823 0.8644666 0.07263332 0.4974152 0.864466 0.07263326 0.4974161 0.8644659 0.02428823 0.5021045 0.8644638 0.02428758 0.502108 0.8644638 -0.02428841 0.502108 0.8644658 -0.0242874 0.5021045 0.9380622 -0.05006098 0.3428311 0.9380627 -0.05006051 0.3428299 0.9380626 -0.08291476 0.3363979 0.9380627 -0.08291476 0.3363978 0.9380628 -0.1149938 0.3268254 0.9380621 -0.1149947 0.3268268 0.9380621 -0.1460015 0.3142021 0.9380612 -0.146003 0.3142039 0.9380614 -0.1756467 0.2986456 0.938063 -0.1756435 0.2986422 0.938063 -0.2036464 0.280296 0.9380633 -0.203646 0.2802957 0.9380633 -0.2297481 0.2593322 0.938062 -0.229751 0.2593343 0.938062 -0.2537071 0.2359498 0.9380632 -0.2537044 0.2359482 0.9380632 -0.2752928 0.2103599 0.9380633 -0.2752926 0.2103599 0.9380633 -0.2943099 0.1828082 0.9380636 -0.2943089 0.1828079 0.9380637 -0.3105787 0.1535491 0.9380629 -0.310581 0.1535497 0.9380628 -0.3239504 0.1228588 0.9380628 -0.3239506 0.1228588 0.9380627 -0.334296 0.09101909 0.9380629 -0.3342956 0.09101903 0.9380629 -0.3415196 0.05832993 0.938062 -0.3415221 0.05832982 0.938062 -0.3455575 0.02509582 0.9380619 -0.3455575 0.02509582 0.9380618 -0.3463666 -0.008372306 0.9380635 -0.3463621 -0.008371174 0.9380635 -0.3439373 -0.04176086 0.9380624 -0.3439403 -0.04176187 0.9380624 -0.3383041 -0.07476174 0.9380611 -0.3383073 -0.07476323 0.9380611 -0.3295125 -0.1070652 0.9380618 -0.3295108 -0.1070642 0.9380618 -0.3176389 -0.1383675 0.9380629 -0.3176365 -0.1383658 0.9380629 -0.3027994 -0.1683763 0.9380632 -0.3027987 -0.1683756 0.9380633 -0.2851342 -0.1968144 0.9380629 -0.2851348 -0.196815 0.938063 -0.2648091 -0.2234145 0.938062 -0.2648106 -0.2234165 0.9380622 -0.2420108 -0.2479319 0.9380638 -0.2420084 -0.247928 0.9380637 -0.2169502 -0.270128 0.9380623 -0.216952 -0.2701314 0.9380623 -0.1898677 -0.2898093 0.9380633 -0.1898667 -0.2898067 0.9380633 -0.1610099 -0.3067786 0.938063 -0.1610101 -0.3067791 0.9380631 -0.13065 -0.3208869 0.9380628 -0.1306501 -0.3208873 0.9380629 -0.09907048 -0.3319987 0.9380624 -0.0990706 -0.3320001 0.9380624 -0.06656503 -0.3400118 0.9380633 -0.06656509 -0.3400095 0.9380632 -0.0334388 -0.3448469 0.9380629 -0.03343874 -0.3448476 0.9380628 0 -0.3464652 0.9380628 0 -0.3464652 0.9380629 0.03343892 -0.3448477 0.9380632 0.03343862 -0.3448469 0.9380633 0.06656461 -0.3400096 0.9380624 0.06656551 -0.3400118 0.9380623 0.0990709 -0.332 0.9380628 0.09907019 -0.3319987 0.9380629 0.1306502 -0.3208873 0.938063 0.1306499 -0.3208869 0.938063 0.1610102 -0.306779 0.9380633 0.1610099 -0.3067787 0.9380633 0.1898662 -0.289807 0.9380623 0.1898682 -0.2898089 0.9380623 0.2169526 -0.2701309 0.9380638 0.2169496 -0.2701285 0.9380638 0.2420076 -0.2479286 0.9380621 0.2420115 -0.2479311 0.938062 0.264811 -0.2234161 0.938063 0.2648088 -0.2234149 0.938063 0.2851349 -0.1968148 0.9380632 0.2851341 -0.1968145 0.9380632 0.3027986 -0.1683758 0.9380629 0.3027995 -0.1683761 0.9380629 0.3176362 -0.1383664 0.9380618 0.3176391 -0.1383669 0.9380618 0.3295106 -0.1070646 0.9380611 0.3295125 -0.1070647 0.9380611 0.3383075 -0.07476252 0.9380623 0.3383039 -0.07476252 0.9380624 0.3439404 -0.04176121 0.9380636 0.3439373 -0.04176151 0.9380636 0.3463621 -0.008372187 0.9380619 0.3463666 -0.008371293 0.938062 0.3455575 0.02509582 0.9380619 0.3455575 0.02509582 0.9380619 0.341522 0.05833035 0.9380629 0.3415197 0.0583294 0.9380629 0.3342956 0.09101891 0.9380627 0.334296 0.09101915 0.9380629 0.3239506 0.1228589 0.9380629 0.3239504 0.1228588 0.9380629 0.3105807 0.1535502 0.9380637 0.3105789 0.1535487 0.9380637 0.294309 0.1828078 0.9380633 0.2943098 0.1828085 0.9380632 0.2752926 0.2103598 0.9380632 0.2752927 0.2103599 0.9380632 0.2537048 0.2359476 0.938062 0.2537066 0.2359502 0.938062 0.2297504 0.2593348 0.9380632 0.2297486 0.2593317 0.9380632 0.2036461 0.2802956 0.938063 0.2036463 0.280296 0.938063 0.1756443 0.2986416 0.9380614 0.1756458 0.298646 0.9380612 0.1460025 0.3142042 0.9380621 0.1460019 0.3142018 0.9380621 0.1149943 0.3268269 0.9380627 0.1149941 0.3268252 0.9380627 0.08291476 0.3363978 0.9380627 0.08291476 0.336398 0.9380627 0.0500608 0.3428298 0.9380622 0.05006068 0.3428311 0.9380624 0.0167393 0.3460618 0.9380636 0.01673984 0.3460586 0.9380635 -0.01673913 0.3460586 0.9380624 -0.01673996 0.3460618 0.9836766 -0.02599996 0.1780574 0.9836763 -0.02600061 0.1780592 0.9836762 -0.04306417 0.1747188 0.983676 -0.04306459 0.1747197 0.9836759 -0.05972629 0.1697477 0.9836763 -0.05972528 0.1697461 0.9836763 -0.07583022 0.1631891 0.9836767 -0.0758289 0.1631873 0.9836767 -0.09122473 0.1551072 0.9836762 -0.09122663 0.1551093 0.9836761 -0.1057709 0.1455806 0.9836766 -0.105769 0.1455789 0.9836767 -0.1193255 0.1346913 0.9836763 -0.1193268 0.1346923 0.9836763 -0.1317696 0.1225466 0.9836764 -0.131769 0.1225462 0.9836764 -0.1429811 0.1092565 0.9836764 -0.1429815 0.1092568 0.9836764 -0.1528588 0.09494704 0.9836764 -0.1528588 0.09494704 0.9836764 -0.161309 0.07975059 0.9836764 -0.1613088 0.07975059 0.9836764 -0.1682527 0.06380993 0.9836766 -0.1682517 0.06380981 0.9836766 -0.1736248 0.04727309 0.9836766 -0.1736254 0.04727309 0.9836766 -0.1773773 0.03029489 0.9836768 -0.1773759 0.03029495 0.9836768 -0.1794717 0.01303446 0.9836764 -0.1794741 0.01303416 0.9836764 -0.1798943 -0.004348158 0.9836762 -0.1798952 -0.004348397 0.9836762 -0.1786356 -0.02169048 0.9836767 -0.178633 -0.02168959 0.9836767 -0.1757057 -0.03882938 0.9836768 -0.1757047 -0.0388289 0.9836769 -0.1711369 -0.0556057 0.9836769 -0.1711372 -0.05560588 0.9836768 -0.1649716 -0.07186311 0.9836763 -0.1649738 -0.07186466 0.9836763 -0.1572678 -0.08745115 0.9836763 -0.1572681 -0.08745133 0.9836763 -0.1480936 -0.1022216 0.9836761 -0.1480944 -0.1022224 0.983676 -0.1375373 -0.1160381 0.9836764 -0.1375364 -0.1160368 0.9836763 -0.1256944 -0.1287699 0.9836764 -0.125694 -0.1287693 0.9836764 -0.1126796 -0.1402991 0.9836765 -0.1126796 -0.1402989 0.9836766 -0.09861254 -0.1505191 0.9836763 -0.09861302 -0.1505204 0.9836763 -0.08362555 -0.1593351 0.9836764 -0.08362555 -0.1593351 0.9836764 -0.06785702 -0.1666622 0.9836763 -0.06785708 -0.1666625 0.9836763 -0.05145514 -0.1724335 0.9836764 -0.05145508 -0.172433 0.9836764 -0.03457248 -0.1765941 0.9836762 -0.03457248 -0.176595 0.9836763 -0.0173673 -0.1791073 0.9836764 -0.01736742 -0.1791062 0.9836764 0 -0.1799463 0.9836764 0 -0.1799463 0.9836764 0.01736718 -0.1791063 0.9836763 0.01736748 -0.1791072 0.9836763 0.03457266 -0.176595 0.9836764 0.0345723 -0.1765942 0.9836765 0.05145496 -0.172433 0.9836764 0.05145525 -0.1724334 0.9836763 0.0678572 -0.1666625 0.9836763 0.06785696 -0.1666622 0.9836763 0.08362555 -0.1593351 0.9836763 0.08362555 -0.1593351 0.9836763 0.09861326 -0.1505203 0.9836765 0.09861224 -0.1505193 0.9836766 0.1126795 -0.140299 0.9836765 0.1126797 -0.1402991 0.9836765 0.1256939 -0.1287694 0.9836764 0.1256945 -0.1287698 0.9836764 0.1375361 -0.1160371 0.9836761 0.1375375 -0.1160379 0.9836761 0.1480945 -0.1022222 0.9836763 0.1480935 -0.1022217 0.9836763 0.1572681 -0.08745127 0.9836764 0.1572678 -0.08745115 0.9836763 0.164974 -0.07186412 0.9836768 0.1649714 -0.07186365 0.9836767 0.1711372 -0.05560582 0.9836768 0.1711369 -0.05560576 0.9836769 0.1757047 -0.03882914 0.9836767 0.1757057 -0.03882914 0.9836767 0.1786329 -0.02169018 0.9836762 0.1786357 -0.02168989 0.9836762 0.1798952 -0.004348158 0.9836763 0.1798943 -0.004348337 0.9836763 0.1794741 0.01303464 0.9836767 0.1794717 0.01303398 0.9836768 0.177376 0.03029465 0.9836766 0.1773772 0.03029519 0.9836764 0.1736253 0.04727321 0.9836766 0.1736248 0.04727298 0.9836766 0.1682518 0.06380963 0.9836765 0.1682526 0.06381011 0.9836765 0.1613089 0.07975059 0.9836764 0.161309 0.07975065 0.9836764 0.1528587 0.09494704 0.9836764 0.1528588 0.09494704 0.9836764 0.1429815 0.1092569 0.9836764 0.1429811 0.1092565 0.9836764 0.131769 0.1225461 0.9836763 0.1317695 0.1225467 0.9836763 0.1193266 0.1346925 0.9836766 0.1193258 0.1346911 0.9836766 0.1057694 0.1455786 0.9836762 0.1057704 0.1455809 0.9836761 0.09122616 0.1551096 0.9836767 0.09122526 0.155107 0.9836768 0.07582932 0.1631871 0.9836764 0.0758298 0.1631892 0.9836763 0.05972564 0.1697459 0.983676 0.05972588 0.1697478 0.983676 0.04306441 0.1747198 0.9836762 0.04306435 0.1747187 0.9836763 0.0260002 0.1780593 0.9836765 0.02600032 0.1780574 0.9836766 0.008694171 0.1797356 0.9836764 0.008693993 0.1797366 0.9836763 -0.008694171 0.1797365 0.9836765 -0.008693933 0.1797356 0.001688122 0.992708 -0.1205319 -0.003756403 0.9976618 -0.06824082 0.001688122 0.9927068 -0.1205421 -0.003401756 0.9764357 -0.2157819 -7.6808e-4 0.9790838 -0.2034558 5.31171e-4 0.9510595 -0.3090074 5.31171e-4 0.9510564 -0.3090169 -0.003414154 0.9422548 -0.3348795 6.66916e-4 0.8739684 -0.4859824 -0.003481566 0.8878801 -0.4600617 0.001887738 0.916788 -0.3993698 0.001887738 0.9167906 -0.3993638 6.66915e-4 0.8739659 -0.4859867 -8.1109e-4 0.8229842 -0.5680637 -0.002613902 0.8169674 -0.576678 0.001495003 0.6985104 -0.7155984 -0.003767669 0.7308301 -0.682549 0.001631081 0.7643159 -0.6448398 0.001631081 0.7643147 -0.6448415 0.001495003 0.6985074 -0.7156014 -0.002610146 0.6261823 -0.7796723 -0.001357078 0.6310878 -0.7757103 9.16738e-4 0.5480192 -0.8364654 9.16738e-4 0.5480123 -0.8364698 -0.003596127 0.5195803 -0.8544141 2.38359e-4 0.3770949 -0.9261746 -0.003256738 0.3983991 -0.9172064 0.001866638 0.4647216 -0.8854548 0.001866638 0.4647223 -0.8854545 2.3836e-4 0.3770953 -0.9261744 -2.54341e-4 0.2859457 -0.9582458 -0.002967476 0.2697956 -0.962913 0.001238107 0.09651362 -0.9953309 -0.003713965 0.1361657 -0.9906792 0.001781046 0.192128 -0.9813683 0.001781046 0.1921257 -0.9813688 0.001238107 0.09651452 -0.9953308 -0.001882076 0 -0.9999982 -0.001882076 0 -0.9999982 0.001781046 -0.192128 -0.9813683 -0.003713965 -0.136166 -0.990679 0.001238167 -0.09651362 -0.9953309 0.001238167 -0.09651452 -0.9953308 0.001781046 -0.1921257 -0.9813688 -0.003965735 -0.2859434 -0.9582383 -3.39914e-4 -0.2697967 -0.9629172 2.3836e-4 -0.3770953 -0.9261744 2.38359e-4 -0.3770949 -0.9261746 -0.003256738 -0.3983991 -0.9172064 9.16737e-4 -0.5480123 -0.8364698 -0.003596127 -0.5195803 -0.8544141 0.001866638 -0.4647223 -0.8854545 0.001866638 -0.4647216 -0.8854548 9.16737e-4 -0.5480192 -0.8364654 -0.001217961 -0.6261841 -0.7796744 -0.0023427 -0.6310867 -0.7757088 0.001631081 -0.7643159 -0.6448398 -0.003767669 -0.7308301 -0.682549 0.001495003 -0.6985104 -0.7155984 0.001495003 -0.6985073 -0.7156013 0.001631081 -0.7643147 -0.6448415 -0.003130912 -0.8229804 -0.5680611 -9.71549e-4 -0.8169698 -0.5766796 6.66915e-4 -0.8739659 -0.4859867 6.66916e-4 -0.8739668 -0.4859853 -0.003482043 -0.8878801 -0.4600617 5.31171e-4 -0.9510564 -0.3090168 -0.003414154 -0.9422548 -0.3348795 0.001887738 -0.9167906 -0.3993638 0.001887738 -0.9167906 -0.399364 5.31171e-4 -0.9510595 -0.3090074 -6.18336e-4 -0.9764412 -0.2157831 -0.002738654 -0.9790804 -0.203455 0.001416563 -0.999707 -0.02416235 -0.00375694 -0.9976618 -0.06824082 0.001688122 -0.9927074 -0.1205372 0.001688122 -0.9927068 -0.1205421 0.001416563 -0.9997071 -0.02416247 -0.002360343 -0.9973704 0.0724346 -0.00153917 -0.9976677 0.06824123 0.001031458 -0.9857234 0.1683697 0.001031458 -0.9857256 0.1683569 -0.003642022 -0.9790776 0.2034547 0.00184518 -0.9648754 0.2627015 0.00184518 -0.9648723 0.2627129 -0.003167271 -0.9422556 0.3348798 8.0886e-5 -0.9350168 0.3546034 8.03576e-5 -0.8878855 0.4600645 -0.02536344 -0.9347022 0.3545256 -0.004258334 -0.8964186 0.4431878 0.001138269 -0.7945761 0.6071635 -0.003682017 -0.8169651 0.5766754 0.00181663 -0.8494682 0.5276366 0.00181663 -0.8494662 0.5276399 0.001138269 -0.7945776 0.6071617 -0.001653611 -0.7322662 0.6810165 -0.002042412 -0.7308338 0.6825523 0.001737773 -0.587785 0.8090153 -0.003739058 -0.6310831 0.7757061 0.001330733 -0.663121 0.748511 0.001330733 -0.6631325 0.7485009 0.001737773 -0.5877855 0.809015 -0.003680825 -0.5069562 0.861964 -5.57778e-4 -0.519585 0.8544186 3.88251e-4 -0.4213975 0.9068759 3.88251e-4 -0.4213997 0.906875 -0.003338694 -0.3983991 0.9172061 7.95629e-4 -0.2393133 0.970942 -0.003542542 -0.2697951 0.9629113 0.001880943 -0.3319076 0.94331 0.001880943 -0.3319113 0.9433087 7.95629e-4 -0.2393253 0.9709392 -0.001011073 -0.1444873 0.9895062 -0.002481758 -0.1361647 0.9906831 0.00156641 0.04831284 0.998831 -0.003771245 0 0.9999929 0.001566469 -0.04831284 0.998831 0.001566469 -0.04831814 0.9988308 0.00156641 0.04831814 0.9988308 -0.002866923 0.1444868 0.9895026 -0.001167953 0.1361647 0.9906855 7.95629e-4 0.2393253 0.9709392 7.95629e-4 0.2393132 0.970942 -0.003542542 0.2697951 0.9629113 3.88251e-4 0.4213997 0.906875 -0.003338694 0.3983991 0.9172061 0.001880943 0.3319113 0.9433087 0.001880943 0.3319076 0.94331 3.88251e-4 0.4213975 0.9068759 -4.32967e-4 0.5069596 0.8619697 -0.002857148 0.5195829 0.8544153 0.001330733 0.663121 0.748511 -0.003739058 0.6310831 0.7757061 0.001737773 0.587785 0.8090153 0.001737773 0.5877856 0.809015 0.001330733 0.6631325 0.7485009 -0.002117276 0.7322656 0.681016 -0.001714169 0.7308343 0.6825528 0.00181663 0.8494682 0.5276366 -0.003682017 0.8169651 0.5766754 0.001138269 0.7945761 0.6071635 0.001138269 0.7945776 0.6071617 0.00181663 0.8494662 0.5276399 -0.004258334 0.8964186 0.4431878 -1.15358e-4 0.8878855 0.4600645 8.08876e-5 0.9350031 0.3546397 8.08876e-5 0.9350168 0.3546034 -0.003167271 0.9422556 0.3348798 0.001031458 0.9857256 0.1683569 -0.003642022 0.9790776 0.2034547 0.00184518 0.9648754 0.2627015 0.00184518 0.9648723 0.2627128 0.001031458 0.9857234 0.1683697 -0.00143218 0.9973722 0.07243478 -0.002196252 0.9976664 0.06824111 0 0.9999271 0.01208031 0 0.999343 -0.03624331 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.7057583 -0.183361 0.6843128 -0.7057583 -0.1833609 0.6843128 -0.7057582 -0.2994058 0.642076 -0.7057581 -0.2994056 0.6420761 -0.7057581 -0.4063512 0.5803312 -0.7057587 -0.4063519 0.5803299 -0.7057587 -0.5009515 0.5009515 -0.7057586 -0.5009514 0.5009514 -0.7057587 -0.5803297 0.4063522 -0.7057589 -0.5803298 0.4063519 -0.7057588 -0.6420761 0.299404 -0.7057585 -0.6420761 0.2994049 -0.7057583 -0.6843127 0.183361 -0.7057583 -0.6843127 0.1833613 -0.7057583 -0.7057567 0.06174612 -0.7057588 -0.7057564 0.0617451 -0.7057588 -0.7057564 -0.06174606 -0.7057583 -0.7057569 -0.06174516 -0.7057583 -0.6843128 -0.183361 -0.7057582 -0.6843128 -0.1833609 -0.7057582 -0.6420766 -0.2994042 -0.7057589 -0.6420754 -0.2994053 -0.7057588 -0.5803295 -0.4063522 -0.7057587 -0.5803299 -0.4063519 -0.7057587 -0.5009515 -0.5009515 -0.7057586 -0.5009514 -0.5009514 -0.7057586 -0.4063509 -0.5803307 -0.705758 -0.4063523 -0.5803304 -0.7057582 -0.2994058 -0.642076 -0.7057582 -0.2994056 -0.6420761 -0.7057582 -0.1833611 -0.6843128 -0.7057583 -0.1833609 -0.6843127 -0.7057583 -0.06174612 -0.7057567 -0.7057588 -0.0617451 -0.7057564 -0.7057588 0.06174606 -0.7057564 -0.7057583 0.06174516 -0.7057569 -0.7057583 0.183361 -0.6843128 -0.7057583 0.1833609 -0.6843128 -0.7057582 0.2994058 -0.642076 -0.7057581 0.2994056 -0.6420761 -0.7057581 0.4063512 -0.5803312 -0.7057587 0.4063519 -0.5803299 -0.7057587 0.5009515 -0.5009515 -0.7057586 0.5009514 -0.5009514 -0.7057587 0.5803297 -0.4063522 -0.7057589 0.5803298 -0.4063519 -0.7057588 0.6420761 -0.299404 -0.7057582 0.6420761 -0.2994056 -0.7057582 0.6843128 -0.1833611 -0.7057583 0.6843128 -0.1833609 -0.7057583 0.7057567 -0.06174612 -0.7057588 0.7057564 -0.0617451 -0.7057588 0.7057564 0.06174606 -0.7057583 0.7057569 0.06174516 -0.7057583 0.6843128 0.183361 -0.7057585 0.6843125 0.1833613 -0.7057586 0.6420764 0.2994041 -0.7057588 0.6420757 0.2994047 -0.7057588 0.5803295 0.4063522 -0.7057587 0.5803299 0.4063519 -0.7057587 0.5009515 0.5009515 -0.7057586 0.5009514 0.5009514 -0.7057586 0.4063509 0.5803307 -0.705758 0.4063523 0.5803304 -0.7057582 0.2994058 0.642076 -0.7057582 0.2994056 0.6420761 -0.7057582 0.1833611 0.6843128 -0.7057583 0.1833609 0.6843127 -0.7057583 0.06174486 0.7057569 -0.7057582 0.06174516 0.705757 -0.7057582 -0.0617448 0.705757 -0.7057583 -0.06174516 0.7057569 -0.9992096 5.61889e-4 0.03974616 -0.999379 0 0.03523588 -0.9985389 -0.002336382 0.05398565 -0.998539 -0.002336263 0.05398571 -0.9992336 -0.005005538 0.03882271 -0.9991953 -0.005194902 0.03977388 -0.9993906 -0.008853793 0.03376346 -0.9986446 -0.01121658 0.05082422 -0.9986447 -0.01121699 0.05082416 -0.998734 -0.02328443 0.04458826 -0.9990749 -0.0164113 0.03975194 -0.9992458 -0.01457262 0.03599447 -0.9985194 -0.01628011 0.051903 -0.9985194 -0.01628011 0.051903 -0.998734 -0.02328443 0.04458826 -0.9993937 -0.01708447 0.03033518 -0.9985529 -0.0290234 0.04527664 -0.9985527 -0.02902317 0.04527682 -0.9993476 -0.0216003 0.02894258 -0.9990004 -0.02731168 0.0353862 -0.9993572 -0.02494072 0.02575331 -0.9987998 -0.0331465 0.03605997 -0.9987998 -0.03314501 0.03606122 -0.9989156 -0.03924226 0.02505612 -0.9989855 -0.03569149 0.02745884 -0.9993487 -0.02821493 0.02250069 -0.9984428 -0.04109817 0.03772312 -0.9984428 -0.0410977 0.03772366 -0.9989155 -0.03924447 0.02505296 -0.9993784 -0.0301488 0.01827627 -0.9984836 -0.04880034 0.02547669 -0.9984836 -0.04880017 0.02547699 -0.9993438 -0.0331211 0.01466161 -0.9989043 -0.04316645 0.01807802 -0.9988522 -0.04554957 0.01481735 -0.9993761 -0.03385895 0.01004922 -0.9985066 -0.05319452 0.01244401 -0.9985067 -0.05319458 0.01244378 -0.9993501 -0.03558361 0.005752801 -0.9989684 -0.04495006 0.006446957 -0.9993517 -0.03598439 0.001154005 -0.9988356 -0.04816585 0.002702832 -0.9988358 -0.04816573 0.002704203 -0.9993492 -0.03590625 -0.003463864 -0.9984259 -0.0560646 -0.001625359 -0.9984258 -0.05606454 -0.001625776 -0.9993626 -0.03480285 -0.007943451 -0.9989221 -0.04546326 -0.009363353 -0.9989369 -0.04579055 -0.005319893 -0.9987875 -0.04577082 -0.01812231 -0.9987877 -0.04577112 -0.0181216 -0.999347 -0.03391093 -0.01247954 -0.9984561 -0.05322784 -0.01588171 -0.9984562 -0.05322772 -0.01588225 -0.9989844 -0.04024672 -0.02025711 -0.9993233 -0.03261333 -0.01701438 -0.9985678 -0.0454548 -0.02821856 -0.9985678 -0.04545491 -0.02821838 -0.9994035 -0.02832478 -0.01975816 -0.9987465 -0.04005861 -0.03001159 -0.999277 -0.0281459 -0.02556133 -0.999093 -0.03175121 -0.02837234 -0.9987465 -0.04005932 -0.03001075 -0.998719 -0.03142881 -0.03965491 -0.998719 -0.03142952 -0.03965437 -0.9993892 -0.02265292 -0.02660948 -0.9984737 -0.03791981 -0.04015618 -0.9984737 -0.03791964 -0.04015642 -0.9991735 -0.02236539 -0.03394311 -0.9992939 -0.02049714 -0.03148913 -0.9985825 -0.02530366 -0.04682642 -0.9985825 -0.02530378 -0.04682636 -0.9993877 -0.01518166 -0.03152507 -0.9986165 -0.02096158 -0.04822587 -0.9992951 -0.01182913 -0.0356276 -0.9991304 -0.01343786 -0.0394681 -0.9986165 -0.02096176 -0.04822576 -0.9987027 -0.007950961 -0.05029755 -0.9987027 -0.007951319 -0.05029749 -0.9993962 -0.006641864 -0.03410458 -0.9985298 -0.01310247 -0.05259752 -0.9985298 -0.01310223 -0.05259758 -0.9991198 -0.002945244 -0.04184567 -0.9992621 -0.002460777 -0.03832978 -0.9988735 -6.70272e-4 -0.04744768 -0.9988716 0.00205326 -0.04744762 -0.9993412 0.002325236 -0.0362187 -0.9984562 0.007193744 -0.05507576 -0.9984563 0.007193744 -0.05507576 -0.9993694 0.006787776 -0.03485369 -0.9988493 0.01033562 -0.04683244 -0.9993247 0.01157808 -0.03487139 -0.9989569 0.01366633 -0.04357004 -0.9988493 0.01033574 -0.04683244 -0.9987223 0.02339255 -0.04479479 -0.9987223 0.02339243 -0.04479485 -0.999381 0.01526445 -0.03169697 -0.9983677 0.02179443 -0.05279171 -0.9983677 0.02179455 -0.05279165 -0.9991531 0.02220439 -0.03463912 -0.9993035 0.02035862 -0.03127622 -0.9985774 0.03257942 -0.04221087 -0.9985774 0.03257912 -0.04221105 -0.9993888 0.02266067 -0.02661859 -0.9986209 0.03552955 -0.03865271 -0.9992589 0.02849584 -0.02587914 -0.999133 0.03067058 -0.02815228 -0.9986208 0.03552949 -0.03865277 -0.9986788 0.04331374 -0.02765077 -0.9986789 0.04331368 -0.02765089 -0.9994112 0.02814155 -0.01963037 -0.9985959 0.0419867 -0.0323019 -0.9985958 0.04198646 -0.0323022 -0.9992249 0.03489607 -0.01821798 -0.9992313 0.03475475 -0.01813155 -0.9985615 0.04945486 -0.02071171 -0.9985616 0.0494551 -0.02071124 -0.999381 0.03301709 -0.01215058 -0.9986835 0.04877907 -0.0158686 -0.9992793 0.03700715 -0.008446574 -0.9991583 0.03994488 -0.009344398 -0.9986836 0.04877954 -0.01586711 -0.9985978 0.05285406 -0.002965927 -0.9985978 0.05285406 -0.002965569 -0.9993907 0.03473967 -0.00335133 -0.9985814 0.05270814 -0.007559776 -0.9985814 0.0527082 -0.007559299 -0.9991619 0.04091578 0.001186072 -0.999236 0.03906202 0.00125271 -0.9985889 0.05275225 0.006128847 -0.9985888 0.05275225 0.006128728 -0.9994028 0.03410935 0.005514442 -0.998627 0.05130732 0.01056683 -0.9992049 0.03822129 0.01134395 -0.9992391 0.03737658 0.01115232 -0.998627 0.0513072 0.01056718 -0.9993832 0.0321111 0.01421451 -0.9985476 0.05009448 0.01983338 -0.9985475 0.05009454 0.01983326 -0.9987974 0.03923749 0.02939814 -0.9991002 0.03603434 0.02237015 -0.9993243 0.03143054 0.01905328 -0.9984908 0.04905694 0.02469205 -0.9984906 0.0490573 0.0246914 -0.9987974 0.03923845 0.02939671 -0.9993854 0.02740502 0.02185481 -0.9984586 0.04138785 0.03698337 -0.9984585 0.04138779 0.03698337 -0.9993017 0.02599275 0.02683967 -0.999015 0.03046542 0.03226232 -0.9993924 0.02084696 0.02793318 -0.9988029 0.03038352 0.03833466 -0.9988029 0.03038245 0.03833556 -0.9988151 0.01939857 0.04463243 -0.9989764 0.0215047 0.03979587 -0.9993519 0.01766312 0.03136265 -0.998549 0.02962875 0.04496598 -0.9985492 0.02962845 0.04496622 -0.9988151 0.01939946 0.04463201 -0.9993562 0.01346361 0.03325521 -0.9985238 0.01750648 0.05141806 -0.9985237 0.01750642 0.05141806 -0.999318 0.009367227 0.03572154 -0.9990498 0.01053488 0.04229015 -0.9984449 0.00391376 0.05560982 -0.9984449 0.003914296 0.05560976 -0.9993776 0.004511356 0.03498959 -0.9988018 0.007641017 0.0483365 -0.998802 0.007641673 0.04833638 -0.04697895 0.9738515 -0.2222749 -0.0469315 0.9738532 -0.2222777 -0.04693341 0.9374328 -0.3449883 -0.04697424 0.9374325 -0.3449836 -0.0469312 0.9374358 -0.3449806 -0.04693055 0.8856214 -0.4620307 -0.0469883 0.8856205 -0.4620265 -0.04699116 0.88562 -0.4620271 -0.04699957 0.819266 -0.5714845 -0.04698967 0.8192665 -0.5714843 -0.0469979 0.7394526 -0.6715661 -0.04704779 0.7394593 -0.6715552 -0.04706132 0.7394583 -0.6715554 -0.04705852 0.6475113 -0.7606015 -0.04701709 0.6475098 -0.7606053 -0.04702013 0.6475095 -0.7606054 -0.04702109 0.5449334 -0.8371599 -0.04702419 0.5449336 -0.8371596 -0.04704612 0.5449222 -0.8371657 -0.04704612 0.4334019 -0.899972 -0.04700291 0.4334046 -0.8999729 -0.04699987 0.314759 -0.9480073 -0.04700815 0.3147603 -0.9480065 -0.04702258 0.3147591 -0.9480062 -0.04702126 0.190947 -0.9804735 -0.04702693 0.1909474 -0.9804732 -0.04703289 0.1909465 -0.980473 -0.04704523 0.06399929 -0.9968404 -0.0470106 0.06400114 -0.996842 -0.0470106 -0.06399911 -0.996842 -0.04705154 -0.06400102 -0.99684 -0.04705172 -0.1909464 -0.9804722 -0.04703903 -0.1909482 -0.9804724 -0.04702126 -0.190947 -0.9804735 -0.04702258 -0.3147591 -0.9480062 -0.04700827 -0.3147603 -0.9480065 -0.04699987 -0.314759 -0.9480073 -0.04700291 -0.4334028 -0.8999738 -0.04704612 -0.4334038 -0.899971 -0.04701733 -0.6475098 -0.7606053 -0.04702001 -0.6475095 -0.7606055 -0.04702109 -0.5449336 -0.8371598 -0.04702472 -0.5449334 -0.8371597 -0.04704606 -0.5449223 -0.8371657 -0.04698967 -0.8192663 -0.5714847 -0.0469979 -0.7394525 -0.6715661 -0.04704779 -0.7394593 -0.6715552 -0.04706096 -0.7394583 -0.6715554 -0.04705852 -0.6475113 -0.7606015 -0.04698807 -0.8856205 -0.4620265 -0.04699116 -0.8856199 -0.4620271 -0.04699951 -0.8192662 -0.571484 -0.04702323 -0.9374287 -0.3449871 -0.04693132 -0.9374358 -0.3449806 -0.04693049 -0.8856213 -0.4620307 -0.04697161 -0.9942802 -0.09591931 -0.04697179 -0.9738512 -0.2222781 -0.04698437 -0.9738518 -0.2222726 -0.0470274 -0.9738492 -0.2222744 -0.04702597 -0.9374287 -0.3449868 -0.04709243 -0.9983773 0.03201645 -0.04708331 -0.9983777 0.03201824 -0.04708588 -0.9942753 -0.09591323 -0.04698526 -0.9860913 0.1594249 -0.04707479 -0.9860883 0.1594172 -0.04707896 -0.998378 0.03201556 -0.0469917 -0.9134038 0.4043331 -0.04699164 -0.9576138 0.2841962 -0.04700297 -0.9576076 0.2842151 -0.04705172 -0.9576062 0.2842121 -0.04705363 -0.9860867 0.1594329 -0.04706811 -0.8541948 0.5178185 -0.0470609 -0.8541945 0.5178195 -0.04706287 -0.9133993 0.404335 -0.04703122 -0.5974644 0.8005151 -0.04703086 -0.6949129 0.7175543 -0.04700338 -0.6949148 0.7175542 -0.04700881 -0.7809693 0.6227979 -0.0470395 -0.780965 0.6228008 -0.04701811 -0.7809649 0.6228026 -0.04702061 -0.8541985 0.5178166 -0.0470066 -0.5974477 0.800529 -0.04698586 -0.5974475 0.8005304 -0.04698318 -0.4901803 0.8703538 -0.04693627 -0.4901766 0.8703584 -0.04694771 -0.4901756 0.8703585 -0.04695451 -0.374853 0.9258945 -0.04697269 -0.3748537 0.9258933 -0.04703027 -0.3748409 0.9258955 -0.04703307 -0.2533754 0.966224 -0.04703581 -0.2533752 0.966224 -0.04700851 0 0.9988945 -0.04700851 0 0.9988944 -0.04701447 -0.1277347 0.9906934 -0.04702872 -0.1277353 0.9906927 -0.04703754 -0.1277384 0.9906919 -0.04706084 0.2533751 0.9662228 -0.04705023 0.1277427 0.9906907 -0.04702669 0.1277346 0.9906929 -0.04701447 0.1277354 0.9906934 -0.04700851 0 0.9988944 -0.04697257 0.3748538 0.9258933 -0.04703027 0.3748409 0.9258955 -0.04703307 0.253374 0.9662244 -0.04693651 0.4901766 0.8703584 -0.04694765 0.4901756 0.8703585 -0.04695451 0.374853 0.9258945 -0.04703086 0.6949138 0.7175533 -0.04703122 0.5974644 0.8005151 -0.04700547 0.597447 0.8005297 -0.04698568 0.5974484 0.8005298 -0.04698318 0.4901803 0.8703538 -0.0470395 0.780965 0.6228008 -0.04700869 0.7809693 0.6227979 -0.04700338 0.6949138 0.7175552 -0.04706287 0.9134008 0.4043318 -0.0470609 0.8541945 0.5178195 -0.04706811 0.8541948 0.5178185 -0.04702079 0.8541985 0.5178166 -0.04701811 0.7809649 0.6228026 -0.04700297 0.9576076 0.2842151 -0.04699164 0.9576138 0.2841962 -0.0469917 0.9134024 0.4043363 -0.04698526 0.9860913 0.1594249 -0.04705363 0.9860867 0.1594329 -0.04705196 0.9576062 0.2842121 -0.04697179 0.9738512 -0.2222781 -0.04697161 0.9942808 -0.09591376 -0.04698771 0.9942799 -0.09591448 -0.04707634 0.9987629 -0.01601964 0.1947972 0.9803398 0.03143328 -0.0471208 0.9977344 0.04801708 -0.04707497 0.9860883 0.1594172 -0.9836732 -0.03440177 -0.1766448 -0.9836735 -0.03440159 -0.1766443 -0.9836734 -0.05670762 -0.1707945 -0.9836736 -0.05670726 -0.1707937 -0.9836737 -0.07808202 -0.1621394 -0.9836733 -0.07808321 -0.1621414 -0.9836733 -0.09817624 -0.150825 -0.9836731 -0.09817689 -0.1508258 -0.983673 -0.1166584 -0.1370335 -0.9836736 -0.1166558 -0.137031 -0.9836736 -0.1332215 -0.1209885 -0.9836727 -0.1332253 -0.1209915 -0.9836727 -0.147604 -0.1029615 -0.9836739 -0.1475983 -0.1029583 -0.9836739 -0.1595523 -0.08323884 -0.9836732 -0.1595557 -0.08324021 -0.9836733 -0.1688905 -0.0621531 -0.9836738 -0.1688877 -0.06215232 -0.9836737 -0.1754491 -0.04004454 -0.9836742 -0.1754465 -0.04004418 -0.9836742 -0.1791269 -0.01728075 -0.9836736 -0.1791297 -0.01728081 -0.9836737 -0.1798692 0.005768358 -0.9836734 -0.1798703 0.005768537 -0.9836734 -0.1776558 0.02872157 -0.983673 -0.1776583 0.02872222 -0.983673 -0.1725268 0.05120515 -0.9836722 -0.1725309 0.0512067 -0.9836722 -0.1645666 0.07284897 -0.9836733 -0.1645607 0.07284569 -0.9836733 -0.1538938 0.09329152 -0.9836748 -0.1538878 0.09328716 -0.9836747 -0.1406951 0.1122002 -0.9836736 -0.1406996 0.1122044 -0.9836736 -0.1251962 0.1292752 -0.9836735 -0.1251965 0.1292755 -0.9836736 -0.1076367 0.1442241 -0.9836735 -0.1076371 0.1442247 -0.9836736 -0.08831077 0.1568045 -0.9836734 -0.08831107 0.1568052 -0.9836734 -0.06753426 0.1668109 -0.9836741 -0.06753301 0.1668068 -0.9836741 -0.04564732 0.1740733 -0.9836739 -0.04564756 0.1740746 -0.9836741 -0.02301269 0.1784821 -0.9836736 -0.02301275 0.1784843 -0.9836739 0 0.1799607 -0.9836739 0 0.1799607 -0.9836738 0.02301269 0.1784831 -0.9836741 0.02301251 0.1784821 -0.9836739 0.04564768 0.1740746 -0.9836742 0.04564726 0.1740733 -0.9836742 0.06753265 0.1668069 -0.9836733 0.06753462 0.1668108 -0.9836733 0.08831119 0.1568052 -0.9836736 0.08831071 0.1568045 -0.9836735 0.1076372 0.1442247 -0.9836736 0.1076366 0.1442241 -0.9836736 0.1251969 0.1292751 -0.9836748 0.1251915 0.1292704 -0.9836751 0.1406937 0.1121999 -0.9836747 0.1406949 0.1122007 -0.9836748 0.1538875 0.0932877 -0.9836735 0.1538941 0.09329098 -0.9836733 0.1645604 0.07284623 -0.9836722 0.1645668 0.07284837 -0.9836722 0.1725311 0.05120635 -0.983673 0.1725268 0.05120551 -0.983673 0.1776584 0.02872198 -0.9836735 0.1776558 0.0287218 -0.9836734 0.1798703 0.005768418 -0.9836736 0.1798692 0.005768477 -0.9836736 0.1791297 -0.01728105 -0.9836742 0.1791269 -0.01728051 -0.9836742 0.1754465 -0.04004395 -0.9836737 0.1754491 -0.04004478 -0.9836737 0.1688877 -0.06215208 -0.9836732 0.1688904 -0.06215333 -0.9836732 0.1595556 -0.08324056 -0.9836739 0.1595524 -0.08323854 -0.9836739 0.1475982 -0.1029583 -0.9836742 0.1475973 -0.1029575 -0.9836741 0.1332202 -0.1209866 -0.9836736 0.1332218 -0.1209882 -0.9836737 0.1166561 -0.1370308 -0.983673 0.1166581 -0.1370336 -0.9836731 0.09817683 -0.1508259 -0.9836733 0.0981763 -0.1508249 -0.9836733 0.07808303 -0.1621415 -0.9836738 0.0780822 -0.1621393 -0.9836736 0.05670732 -0.1707937 -0.9836735 0.05670756 -0.1707945 -0.9836735 0.03440165 -0.1766443 -0.9836733 0.03440171 -0.1766448 -0.9836733 0.01153028 -0.1795938 -0.983673 0.01153022 -0.1795953 -0.983673 -0.01153033 -0.1795953 -0.9836733 -0.01153016 -0.1795938 -0.9380576 -0.0662325 -0.3400903 -0.9380558 -0.06623387 -0.340095 -0.9380552 -0.1091808 -0.3288344 -0.9380566 -0.1091793 -0.3288308 -0.9380567 -0.1503325 -0.3121694 -0.9380568 -0.1503324 -0.3121692 -0.9380568 -0.1890174 -0.2903819 -0.9380557 -0.1890195 -0.2903845 -0.9380559 -0.2246007 -0.2638289 -0.938055 -0.2246024 -0.2638306 -0.9380551 -0.2564961 -0.2329429 -0.938057 -0.2564918 -0.2329397 -0.9380571 -0.2841737 -0.1982268 -0.9380549 -0.2841793 -0.19823 -0.9380548 -0.3071951 -0.1602634 -0.9380585 -0.3071858 -0.1602596 -0.9380587 -0.3251571 -0.1196613 -0.9380555 -0.3251652 -0.1196635 -0.9380559 -0.3377971 -0.07709991 -0.9380519 -0.3378078 -0.07710134 -0.9380518 -0.344894 -0.03327095 -0.9380588 -0.3448751 -0.03327089 -0.938059 -0.3462976 0.01110476 -0.938055 -0.3463084 0.01110607 -0.9380547 -0.3420457 0.05529946 -0.9380586 -0.3420358 0.05529683 -0.9380585 -0.3321561 0.09858202 -0.9380574 -0.3321592 0.09858328 -0.9380573 -0.3168259 0.1402493 -0.9380557 -0.3168298 0.1402515 -0.9380556 -0.2962937 0.1796151 -0.9380547 -0.296296 0.1796168 -0.9380548 -0.2708941 0.2160313 -0.9380589 -0.2708862 0.2160237 -0.9380585 -0.2410377 0.2488918 -0.9380608 -0.2410337 0.2488869 -0.9380603 -0.2072289 0.2776672 -0.9380554 -0.2072358 0.2776784 -0.9380553 -0.1700264 0.3018997 -0.9380571 -0.1700242 0.3018948 -0.9380571 -0.1300228 0.3211587 -0.9380569 -0.1300229 0.321159 -0.938057 -0.08788657 0.3351492 -0.9380563 -0.08788686 0.335151 -0.9380566 -0.04430764 0.3436376 -0.9380545 -0.04430782 0.3436432 -0.9380543 0 0.3464882 -0.9380543 0 0.3464882 -0.9380536 0.04430866 0.3436454 -0.9380565 0.04430693 0.3436377 -0.9380564 0.08788704 0.335151 -0.938057 0.08788639 0.3351493 -0.938057 0.130023 0.3211591 -0.9380571 0.1300228 0.3211587 -0.9380572 0.1700237 0.301895 -0.9380552 0.1700268 0.3018994 -0.9380555 0.2072368 0.2776777 -0.9380602 0.207228 0.2776679 -0.9380608 0.2410334 0.2488874 -0.938054 0.2410474 0.2488994 -0.9380539 0.2708962 0.216033 -0.9380548 0.270894 0.2160315 -0.9380548 0.296296 0.1796165 -0.9380556 0.2962935 0.1796153 -0.9380556 0.31683 0.1402512 -0.9380573 0.3168258 0.1402497 -0.9380573 0.3321593 0.09858298 -0.9380586 0.3321561 0.09858232 -0.9380586 0.3420355 0.05529779 -0.9380547 0.3420459 0.0552985 -0.938055 0.3463085 0.01110512 -0.9380589 0.3462976 0.01110577 -0.9380587 0.3448751 -0.03326916 -0.9380519 0.3448938 -0.03327268 -0.9380518 0.3378075 -0.0771023 -0.9380559 0.3377974 -0.07709896 -0.9380556 0.325165 -0.1196643 -0.9380587 0.3251574 -0.1196607 -0.9380584 0.3071861 -0.1602587 -0.9380549 0.3071945 -0.1602641 -0.9380549 0.2841789 -0.1982304 -0.9380519 0.2841852 -0.1982357 -0.9380522 0.256501 -0.232949 -0.9380599 0.2564871 -0.2329338 -0.9380592 0.2245955 -0.2638213 -0.9380558 0.2246008 -0.2638288 -0.9380558 0.1890192 -0.2903847 -0.938057 0.1890177 -0.2903818 -0.9380568 0.1503324 -0.3121691 -0.9380567 0.1503325 -0.3121694 -0.9380566 0.1091796 -0.3288307 -0.9380551 0.1091805 -0.3288345 -0.9380558 0.06623339 -0.340095 -0.9380574 0.06623291 -0.3400902 -0.9380576 0.02219933 -0.3457675 -0.9380561 0.02219921 -0.3457714 -0.9380561 -0.02219957 -0.3457714 -0.9380576 -0.02219897 -0.3457676 -0.8641451 -0.09619933 -0.4939626 -0.8641466 -0.09619855 -0.4939599 -0.8641478 -0.1585736 -0.4776013 -0.8641407 -0.1585786 -0.4776125 -0.8641391 -0.2183536 -0.4534151 -0.864144 -0.2183492 -0.4534079 -0.8641445 -0.2745373 -0.4217625 -0.8641473 -0.2745342 -0.4217588 -0.864148 -0.3262122 -0.3831889 -0.8641439 -0.3262175 -0.3831939 -0.864144 -0.3725421 -0.3383303 -0.8641545 -0.3725277 -0.3383197 -0.8641549 -0.4127311 -0.287905 -0.8641431 -0.4127488 -0.287915 -0.8641436 -0.4461776 -0.2327691 -0.8641498 -0.4461675 -0.2327651 -0.8641498 -0.4722694 -0.1738007 -0.8641478 -0.4722729 -0.1738016 -0.8641479 -0.4906207 -0.1119807 -0.8641487 -0.4906195 -0.1119806 -0.8641493 -0.5009102 -0.04832178 -0.8641474 -0.5009134 -0.04832172 -0.8641476 -0.50298 0.01612865 -0.8641451 -0.5029842 0.01612925 -0.8641458 -0.496791 0.08031666 -0.8641408 -0.4967994 0.08031886 -0.864141 -0.4824494 0.1431887 -0.8641442 -0.4824444 0.1431867 -0.8641445 -0.4601722 0.2037048 -0.8641459 -0.4601702 0.2037036 -0.8641463 -0.4303423 0.2608768 -0.8641487 -0.430339 0.2608743 -0.8641482 -0.3934472 0.3137629 -0.8641413 -0.3934558 0.3137713 -0.864142 -0.350101 0.3615077 -0.8641374 -0.3501058 0.3615138 -0.8641381 -0.3010013 0.4033158 -0.8641469 -0.3009935 0.4033028 -0.8641474 -0.2469479 0.4384815 -0.8641468 -0.2469483 0.4384825 -0.8641472 -0.18885 0.4664602 -0.8641416 -0.1888527 0.4664696 -0.8641415 -0.127651 0.4867902 -0.8641442 -0.1276503 0.4867855 -0.8641441 -0.06435304 0.4991128 -0.8641507 -0.06435269 0.4991014 -0.8641501 0 0.5032342 -0.8641501 0 0.5032342 -0.8641508 0.06435155 0.4991016 -0.8641442 0.06435418 0.4991127 -0.8641443 0.1276499 0.4867856 -0.8641414 0.1276515 0.4867901 -0.8641417 0.1888536 0.4664692 -0.8641472 0.1888491 0.4664608 -0.8641468 0.2469483 0.4384824 -0.8641474 0.2469478 0.4384816 -0.864147 0.3009921 0.4033036 -0.8641381 0.3010025 0.4033149 -0.8641375 0.3501064 0.3615133 -0.8641421 0.3501004 0.3615082 -0.8641412 0.3934567 0.3137704 -0.8641482 0.3934465 0.3137638 -0.8641486 0.4303389 0.2608746 -0.8641464 0.4303425 0.2608764 -0.8641459 0.46017 0.2037038 -0.8641446 0.4601724 0.2037045 -0.8641442 0.4824442 0.1431872 -0.864141 0.4824495 0.1431882 -0.8641408 0.4967995 0.08031803 -0.8641458 0.4967908 0.08031749 -0.8641451 0.5029843 0.01612883 -0.8641476 0.50298 0.01612913 -0.8641474 0.5009134 -0.04832208 -0.8641492 0.5009103 -0.04832142 -0.8641487 0.4906194 -0.1119804 -0.8641479 0.4906207 -0.1119809 -0.8641478 0.4722727 -0.1738018 -0.8641498 0.4722696 -0.1738004 -0.8641498 0.446168 -0.2327643 -0.8641437 0.4461769 -0.23277 -0.8641432 0.4127475 -0.2879166 -0.8641548 0.4127324 -0.2879036 -0.8641546 0.3725287 -0.3383182 -0.864134 0.3725525 -0.3383446 -0.864135 0.3262268 -0.3832059 -0.8641479 0.3262141 -0.3831875 -0.8641474 0.2745346 -0.4217585 -0.8641445 0.2745368 -0.4217627 -0.864144 0.21835 -0.4534075 -0.8641392 0.2183528 -0.4534153 -0.8641406 0.1585775 -0.477613 -0.8641477 0.1585748 -0.477601 -0.8641466 0.09619885 -0.4939599 -0.8641451 0.09619909 -0.4939625 -0.864145 0.03224343 -0.5022088 -0.8641443 0.03224337 -0.5022101 -0.8641443 -0.03224349 -0.5022101 -0.8641451 -0.03224331 -0.5022088 -0.7649188 -0.1231298 -0.6322486 -0.764913 -0.1231319 -0.6322551 -0.7649104 -0.2029719 -0.6113219 -0.7649118 -0.2029712 -0.6113203 -0.7649124 -0.2794795 -0.580345 -0.764909 -0.2794816 -0.5803483 -0.764908 -0.3514006 -0.5398458 -0.7649055 -0.3514025 -0.5398481 -0.7649036 -0.417554 -0.4904807 -0.7649217 -0.4175381 -0.4904657 -0.7649219 -0.4768297 -0.4330451 -0.7648986 -0.4768522 -0.4330613 -0.7648978 -0.5283166 -0.3685281 -0.7649279 -0.5282849 -0.3685109 -0.7649275 -0.5710726 -0.2979295 -0.764908 -0.5710944 -0.2979379 -0.7649078 -0.6045047 -0.2224637 -0.7649153 -0.604496 -0.2224616 -0.7649149 -0.6279814 -0.1433337 -0.764905 -0.627993 -0.143335 -0.7649043 -0.6411677 -0.0618506 -0.7649154 -0.6411546 -0.06185084 -0.7649142 -0.6438013 0.02064514 -0.7649202 -0.6437942 0.02064406 -0.7649201 -0.6358688 0.1028018 -0.7649227 -0.6358658 0.102801 -0.764923 -0.6174986 0.1832712 -0.7649266 -0.6174946 0.1832696 -0.7649269 -0.5889894 0.2607268 -0.7649165 -0.5890001 0.2607331 -0.7649155 -0.5508241 0.3339117 -0.764903 -0.550836 0.3339209 -0.7649037 -0.5036114 0.4016193 -0.7649248 -0.5035936 0.4016013 -0.7649234 -0.4481046 0.4627034 -0.7649187 -0.448108 0.4627079 -0.7649177 -0.3852595 0.516213 -0.7649109 -0.3852636 0.5162202 -0.7649106 -0.316089 0.5612482 -0.7649089 -0.3160898 0.5612502 -0.7649096 -0.241723 0.5970624 -0.7649247 -0.2417182 0.597045 -0.7649238 -0.1633852 0.6230545 -0.7649129 -0.1633871 0.6230674 -0.7649112 -0.08236962 0.6388475 -0.7649118 -0.08236962 0.6388468 -0.7649112 0 0.6441358 -0.7649112 0 0.6441357 -0.7649119 0.0823695 0.6388468 -0.7649112 0.08236968 0.6388475 -0.7649129 0.1633885 0.6230671 -0.7649238 0.1633838 0.6230549 -0.7649247 0.2417163 0.5970457 -0.7649097 0.2417248 0.5970614 -0.7649088 0.31609 0.5612501 -0.7649107 0.3160886 0.5612481 -0.7649109 0.3852645 0.5162197 -0.7649178 0.3852587 0.5162136 -0.7649187 0.4481085 0.4627075 -0.7649234 0.448104 0.4627038 -0.764925 0.5035915 0.4016035 -0.7649036 0.5036132 0.4016171 -0.7649028 0.5508369 0.3339194 -0.7649153 0.5508235 0.3339133 -0.7649164 0.5890007 0.2607318 -0.7649268 0.5889889 0.2607281 -0.7649266 0.6174944 0.18327 -0.764923 0.6174987 0.1832708 -0.7649227 0.6358657 0.1028013 -0.7649201 0.6358688 0.1028015 -0.7649202 0.6437942 0.0206449 -0.7649142 0.6438013 0.0206443 -0.7649154 0.6411547 -0.06184935 -0.7649043 0.6411674 -0.06185209 -0.7649051 0.6279928 -0.1433364 -0.7649148 0.6279817 -0.1433324 -0.7649154 0.6044963 -0.2224606 -0.7649079 0.6045042 -0.2224646 -0.7649079 0.5710932 -0.2979403 -0.7649274 0.571074 -0.2979273 -0.7649281 0.5282871 -0.3685075 -0.7648981 0.528314 -0.3685312 -0.7648986 0.4768502 -0.4330638 -0.7649218 0.4768319 -0.4330428 -0.7649217 0.4175385 -0.4904655 -0.7649182 0.417541 -0.4904691 -0.7649176 0.3513957 -0.5398352 -0.7649078 0.351401 -0.5398458 -0.7649091 0.2794812 -0.5803485 -0.7649124 0.2794799 -0.5803448 -0.7649118 0.2029713 -0.6113202 -0.7649104 0.2029717 -0.6113219 -0.764913 0.1231311 -0.6322554 -0.7649188 0.1231306 -0.6322485 -0.7649184 0.04126995 -0.6428038 -0.7649192 0.04127001 -0.6428028 -0.7649192 -0.04126989 -0.6428028 -0.7649183 -0.04127007 -0.6428037 -0.6426758 -0.1464544 -0.7520099 -0.6426858 -0.1464517 -0.752002 -0.6426885 -0.2414135 -0.7270977 -0.6427016 -0.2414086 -0.7270878 -0.6427037 -0.3324038 -0.6902462 -0.6426934 -0.3324086 -0.6902533 -0.6426936 -0.4179479 -0.6420784 -0.6427025 -0.4179428 -0.6420726 -0.6427043 -0.4966174 -0.5833544 -0.6426944 -0.4966237 -0.58336 -0.6426949 -0.5671425 -0.5150657 -0.6426914 -0.5671449 -0.5150673 -0.6426916 -0.6283553 -0.4383116 -0.6426815 -0.6283629 -0.4383155 -0.6426828 -0.6792528 -0.3543649 -0.6427001 -0.6792389 -0.3543601 -0.6427001 -0.7189764 -0.2645931 -0.6426784 -0.7189943 -0.264597 -0.6426779 -0.7469285 -0.1704791 -0.6427098 -0.7469015 -0.1704767 -0.64271 -0.7625695 -0.07356435 -0.642687 -0.7625889 -0.07356357 -0.6426876 -0.7657347 0.02455502 -0.642686 -0.7657361 0.02455526 -0.6426845 -0.7563107 0.1222735 -0.6426807 -0.7563138 0.1222743 -0.6426804 -0.7344685 0.2179862 -0.6426699 -0.7344765 0.2179899 -0.6426694 -0.7005712 0.3101229 -0.6426877 -0.7005579 0.3101146 -0.6426882 -0.6551494 0.3971541 -0.6426885 -0.6551491 0.3971539 -0.6426885 -0.5989819 0.4776737 -0.6426785 -0.5989878 0.47768 -0.6426796 -0.5329864 0.550353 -0.6426936 -0.5329794 0.5503435 -0.6426939 -0.4582278 0.6139803 -0.6426752 -0.4582355 0.6139943 -0.6426763 -0.3759561 0.6675509 -0.6426873 -0.3759526 0.6675422 -0.6426885 -0.2875026 0.7101365 -0.6426803 -0.2875043 0.7101432 -0.6426804 -0.1943333 0.741078 -0.6426934 -0.194332 0.741067 -0.6426945 -0.09797006 0.7598328 -0.6426838 -0.09796994 0.7598417 -0.6426834 0 0.7661319 -0.6426833 0 0.7661319 -0.6426837 0.0979712 0.7598416 -0.6426943 0.09796881 0.759833 -0.6426934 0.1943305 0.7410675 -0.6426805 0.1943347 0.7410776 -0.6426804 0.2875051 0.7101429 -0.6426885 0.2875017 0.7101369 -0.6426873 0.3759515 0.6675429 -0.6426764 0.3759571 0.6675502 -0.642675 0.4582373 0.6139931 -0.6426937 0.4582262 0.6139818 -0.6426936 0.5329782 0.5503445 -0.6426797 0.5329876 0.5503519 -0.6426783 0.5989887 0.4776791 -0.6426886 0.5989811 0.4776746 -0.6426883 0.6551492 0.397154 -0.6426881 0.6551494 0.3971541 -0.6426877 0.7005571 0.3101166 -0.6426694 0.700572 0.3101209 -0.64267 0.7344769 0.2179887 -0.6426804 0.7344681 0.2179874 -0.6426808 0.7563138 0.1222739 -0.6426845 0.7563107 0.1222739 -0.642686 0.7657361 0.02455508 -0.6426876 0.7657347 0.0245552 -0.642687 0.7625887 -0.07356625 -0.6427099 0.7625697 -0.07356172 -0.6427099 0.7469022 -0.1704731 -0.642678 0.7469275 -0.1704826 -0.6426784 0.7189935 -0.2645994 -0.6426999 0.7189774 -0.2645908 -0.6427003 0.6792398 -0.3543582 -0.6426831 0.6792517 -0.3543667 -0.6426816 0.6283622 -0.4383164 -0.6426914 0.6283561 -0.4383108 -0.6426914 0.5671447 -0.5150676 -0.6426948 0.5671429 -0.5150654 -0.6426941 0.4966229 -0.5833609 -0.6426838 0.4966276 -0.5833683 -0.6426852 0.4179516 -0.6420841 -0.6426935 0.4179487 -0.6420779 -0.6426935 0.3324075 -0.6902539 -0.6427036 0.3324049 -0.6902456 -0.6427015 0.24141 -0.7270873 -0.6426886 0.2414121 -0.7270981 -0.6426858 0.1464521 -0.7520018 -0.6426819 0.1464523 -0.7520052 -0.6426806 0.0490868 -0.7645601 -0.6426835 0.04908698 -0.7645577 -0.6426834 -0.04908639 -0.7645577 -0.6426785 -0.04908722 -0.7645618 -0.501477 -0.1653848 -0.8492166 -0.5014713 -0.165386 -0.8492196 -0.5014727 -0.2726219 -0.8210984 -0.5014542 -0.2726271 -0.8211079 -0.5014518 -0.3753912 -0.7795047 -0.5014771 -0.3753825 -0.7794926 -0.5014762 -0.47198 -0.7250906 -0.5014515 -0.4719899 -0.7251013 -0.5014498 -0.560841 -0.6587909 -0.5014758 -0.5608292 -0.6587811 -0.5014776 -0.6404668 -0.5816549 -0.5014936 -0.640459 -0.5816499 -0.5014947 -0.7095795 -0.4949749 -0.5014543 -0.7096011 -0.4949849 -0.5014508 -0.7670739 -0.4001809 -0.5014522 -0.7670731 -0.4001807 -0.5014529 -0.8119493 -0.2988035 -0.5014984 -0.8119229 -0.2987987 -0.5014998 -0.8434658 -0.1925183 -0.5014473 -0.8434967 -0.1925198 -0.5014461 -0.8611912 -0.08307647 -0.501464 -0.8611807 -0.08307731 -0.5014655 -0.8647331 0.02773058 -0.5014746 -0.8647279 0.02772951 -0.5014762 -0.8540815 0.1380813 -0.5014877 -0.8540751 0.1380791 -0.5014874 -0.8294066 0.2461608 -0.5014635 -0.8294192 0.2461671 -0.5014649 -0.7911282 0.3502129 -0.501492 -0.7911151 0.350204 -0.5014917 -0.7398379 0.4484928 -0.5014927 -0.7398376 0.4484925 -0.5014899 -0.6764119 0.5394208 -0.5014786 -0.6764163 0.5394259 -0.5014775 -0.6018847 0.6214942 -0.5014644 -0.601889 0.6215007 -0.5014635 -0.5174723 0.6933664 -0.501488 -0.5174658 0.6933534 -0.501485 -0.4245532 0.7538352 -0.5014598 -0.4245581 0.753849 -0.5014597 -0.3246718 0.8019517 -0.5014835 -0.3246688 0.8019379 -0.5014824 -0.2194559 0.8368719 -0.5014583 -0.2194571 0.8368861 -0.5014585 -0.1106356 0.8580788 -0.5014773 -0.1106361 0.8580677 -0.5014789 0 0.8651699 -0.5014789 0 0.86517 -0.5014774 0.1106342 0.8580679 -0.5014585 0.1106375 0.8580785 -0.5014582 0.2194595 0.8368855 -0.5014824 0.2194535 0.8368725 -0.5014836 0.3246666 0.8019388 -0.5014597 0.3246741 0.8019508 -0.5014597 0.4245604 0.7538479 -0.5014846 0.424551 0.7538366 -0.5014883 0.5174637 0.6933549 -0.5014635 0.5174743 0.6933649 -0.5014641 0.60189 0.6214998 -0.5014771 0.601884 0.6214954 -0.5014787 0.676417 0.5394249 -0.5014896 0.6764113 0.5394219 -0.5014926 0.7398375 0.4484925 -0.5014914 0.7398381 0.4484928 -0.501492 0.7911154 0.350203 -0.5015019 0.7911099 0.3502017 -0.5015023 0.8293972 0.2461621 -0.5014873 0.8294059 0.2461631 -0.5014877 0.8540748 0.1380802 -0.5014763 0.8540818 0.1380801 -0.5014746 0.8647277 0.0277304 -0.5014656 0.8647331 0.02772963 -0.5014641 0.8611808 -0.08307546 -0.5014462 0.8611909 -0.08307832 -0.5014472 0.8434956 -0.1925251 -0.5014998 0.843467 -0.1925131 -0.5014984 0.8119245 -0.2987943 -0.501453 0.8119475 -0.2988077 -0.5014524 0.7670732 -0.4001805 -0.5014506 0.7670739 -0.4001811 -0.5014543 0.7095986 -0.4949882 -0.5014943 0.709582 -0.4949716 -0.5014936 0.64046 -0.5816487 -0.5014774 0.640466 -0.5816562 -0.5014761 0.5608313 -0.6587793 -0.5014501 0.5608389 -0.6587925 -0.5014517 0.4719877 -0.7251025 -0.5014761 0.4719821 -0.7250893 -0.5014771 0.3753848 -0.7794915 -0.5014519 0.3753888 -0.7795057 -0.5014541 0.2726253 -0.8211085 -0.5014726 0.2726237 -0.8210978 -0.5014713 0.1653855 -0.8492197 -0.5014692 0.1653855 -0.8492209 -0.50147 0.05543202 -0.8633974 -0.501474 0.05543226 -0.8633952 -0.501474 -0.05543184 -0.8633952 -0.5014725 -0.05543202 -0.8633959 -0.3455065 -0.1793861 -0.9211111 -0.3455052 -0.1793864 -0.9211117 -0.3454999 -0.2957032 -0.8906118 -0.3455137 -0.2957004 -0.8906073 -0.3455145 -0.4071631 -0.8454808 -0.345508 -0.4071647 -0.8454828 -0.3455128 -0.5119358 -0.7864748 -0.345506 -0.5119377 -0.7864766 -0.345506 -0.6083084 -0.7145534 -0.3454722 -0.6083189 -0.7145608 -0.3454695 -0.6947 -0.6309062 -0.3454831 -0.6946955 -0.6309038 -0.345483 -0.7696705 -0.5368882 -0.3455159 -0.7696587 -0.5368837 -0.3455188 -0.8319942 -0.4340534 -0.3454852 -0.8320068 -0.4340563 -0.3454813 -0.8806834 -0.3240977 -0.3454849 -0.8806821 -0.3240976 -0.3454831 -0.9148971 -0.2088174 -0.3455324 -0.9148783 -0.208818 -0.3455337 -0.9340698 -0.09011077 -0.3454928 -0.9340852 -0.09010833 -0.3454901 -0.9379402 0.03007978 -0.3455065 -0.9379343 0.03007805 -0.3455044 -0.9263888 0.1497678 -0.3454666 -0.926402 0.1497735 -0.3454668 -0.8996434 0.2670104 -0.3455066 -0.8996304 0.2670027 -0.3455063 -0.8580988 0.3798576 -0.3454921 -0.858103 0.3798609 -0.3454925 -0.8024846 0.4864702 -0.3454993 -0.8024829 0.4864684 -0.3455008 -0.733685 0.5850945 -0.3455002 -0.7336851 0.5850947 -0.3454978 -0.6528435 0.6741116 -0.3454857 -0.6528458 0.6741157 -0.3454876 -0.5612815 0.7520648 -0.3454753 -0.5612833 0.7520692 -0.3454789 -0.4605005 0.8176696 -0.3455129 -0.4604972 0.8176571 -0.3455117 -0.3521572 0.8698316 -0.3454717 -0.3521592 0.8698466 -0.3454768 -0.2380353 0.9077361 -0.3455131 -0.2380353 0.9077224 -0.3455134 -0.1200028 0.9307094 -0.3454859 -0.1200014 0.9307197 -0.3454852 0 0.9384242 -0.3454852 0 0.9384242 -0.3454859 0.1200041 0.9307194 -0.3455132 0.1200001 0.9307097 -0.3455131 0.2380331 0.907723 -0.3454889 0.2380375 0.907731 -0.3454896 0.3521587 0.8698398 -0.3455116 0.3521537 0.8698331 -0.3455129 0.4604943 0.8176587 -0.3454792 0.4605033 0.8176679 -0.3454751 0.5612842 0.7520685 -0.3454874 0.5612806 0.7520655 -0.3454857 0.6528466 0.6741149 -0.3454974 0.6528428 0.6741126 -0.3455001 0.7336853 0.5850947 -0.3455007 0.733685 0.5850946 -0.3454991 0.8024826 0.486469 -0.3454927 0.802485 0.4864697 -0.3454919 0.8581037 0.3798598 -0.3454629 0.8581146 0.3798616 -0.345461 0.8996467 0.2670069 -0.3455125 0.899627 0.2670062 -0.3455136 0.9263848 0.1497716 -0.3455044 0.9263883 0.1497713 -0.3455065 0.9379342 0.0300796 -0.3454902 0.9379402 0.03007823 -0.3454928 0.9340848 -0.0901122 -0.3455337 0.9340704 -0.0901069 -0.3455324 0.9148794 -0.2088134 -0.3454834 0.9148959 -0.208822 -0.3454849 0.8806807 -0.3241013 -0.3455259 0.8806679 -0.3240924 -0.3455273 0.8319933 -0.4340484 -0.3455184 0.8319958 -0.4340506 -0.345516 0.7696605 -0.5368812 -0.3454831 0.7696686 -0.5368907 -0.3454828 0.6946964 -0.630903 -0.3454695 0.6946992 -0.6309072 -0.3454723 0.6083165 -0.7145628 -0.345506 0.6083109 -0.7145513 -0.3455063 0.5119371 -0.7864768 -0.3455126 0.5119364 -0.7864745 -0.345508 0.4071642 -0.8454831 -0.3455145 0.4071636 -0.8454805 -0.3455138 0.2957017 -0.890607 -0.3454999 0.295702 -0.8906123 -0.345505 0.1793863 -0.9211117 -0.3455064 0.1793863 -0.9211112 -0.3455075 0.06012523 -0.9364879 -0.3455005 0.06012475 -0.9364905 -0.3455005 -0.06012541 -0.9364904 -0.3455075 -0.06012457 -0.936488 -0.1792485 -0.1880638 -0.9656614 -0.1792637 -0.1880618 -0.965659 -0.1792676 -0.3100039 -0.9336813 -0.1792745 -0.310003 -0.9336803 -0.179272 -0.4268532 -0.8863734 -0.1792448 -0.4268576 -0.8863768 -0.1792418 -0.536702 -0.824514 -0.1792933 -0.5366929 -0.8245086 -0.1792981 -0.637722 -0.749108 -0.1792716 -0.637727 -0.7491101 -0.179271 -0.7282864 -0.6614084 -0.1792718 -0.7282861 -0.6614082 -0.1792734 -0.8068848 -0.562848 -0.1792669 -0.8068862 -0.5628482 -0.1792693 -0.8722369 -0.4550443 -0.1793061 -0.8722294 -0.4550441 -0.1793089 -0.9232571 -0.3397718 -0.1792408 -0.9232708 -0.3397702 -0.1792412 -0.9591397 -0.2189146 -0.1792498 -0.959138 -0.2189151 -0.179248 -0.9792576 -0.09447008 -0.179248 -0.9792577 -0.09447008 -0.1792494 -0.9832983 0.03153288 -0.1792325 -0.9833013 0.03153449 -0.1792352 -0.9711955 0.1570166 -0.1792899 -0.9711863 0.1570101 -0.1792908 -0.943133 0.2799192 -0.1793029 -0.9431313 0.2799175 -0.1792996 -0.8995954 0.3982206 -0.1792348 -0.8996039 0.3982308 -0.1792345 -0.8412947 0.5099983 -0.1792462 -0.8412934 0.5099962 -0.1792472 -0.769168 0.613393 -0.1792615 -0.7691668 0.6133903 -0.1792655 -0.6844141 0.7067115 -0.1792709 -0.6844139 0.7067105 -0.1792717 -0.5884185 0.7884323 -0.1793137 -0.5884169 0.7884238 -0.1793106 -0.4827642 0.8571969 -0.1792876 -0.4827644 0.8572015 -0.1792844 -0.3691876 0.9118979 -0.1792884 -0.3691877 0.911897 -0.1792822 -0.2495462 0.951622 -0.1792539 -0.249545 0.9516277 -0.179256 -0.1258049 0.9757257 -0.1792799 -0.1258064 0.975721 -0.1792819 0 0.9837977 -0.1792819 0 0.9837977 -0.1792798 0.1258043 0.9757214 -0.179256 0.125807 0.9757254 -0.1792537 0.2495476 0.9516271 -0.1792689 0.2495455 0.9516248 -0.1792687 0.3691887 0.9119004 -0.1792843 0.3691863 0.9118984 -0.1792875 0.4827662 0.8572006 -0.1793103 0.4827623 0.8571979 -0.1793138 0.5884139 0.7884261 -0.1792718 0.5884215 0.7884299 -0.1792713 0.6844134 0.7067108 -0.1792657 0.6844145 0.7067111 -0.1792618 0.769166 0.6133913 -0.179247 0.7691689 0.613392 -0.1792463 0.8412927 0.5099971 -0.1792343 0.8412953 0.5099974 -0.1792346 0.8996064 0.3982254 -0.1792994 0.899593 0.398226 -0.1793029 0.943131 0.2799185 -0.1792408 0.9431435 0.2799163 -0.1792385 0.9711948 0.1570165 -0.1792352 0.9711954 0.1570163 -0.1792325 0.9833015 0.03152823 -0.1793016 0.9832887 0.03153413 -0.1793001 0.9792487 -0.09446442 -0.1792481 0.9792577 -0.09447008 -0.1792497 0.9591371 -0.2189188 -0.1792922 0.9591305 -0.2189134 -0.1792898 0.9232618 -0.3397688 -0.1792599 0.9232661 -0.3397732 -0.1792599 0.8722385 -0.4550451 -0.1792696 0.8722373 -0.4550435 -0.1792671 0.8068858 -0.5628486 -0.1792736 0.8068852 -0.5628474 -0.1792716 0.7282862 -0.6614082 -0.1792708 0.7282863 -0.6614084 -0.1792712 0.6377252 -0.7491118 -0.179298 0.6377239 -0.7491064 -0.1792936 0.5366969 -0.8245061 -0.1792416 0.5366981 -0.8245166 -0.1792449 0.4268553 -0.8863778 -0.179272 0.4268555 -0.8863724 -0.1792744 0.3100035 -0.9336801 -0.1792678 0.3100033 -0.9336815 -0.1792636 0.1880623 -0.9656589 -0.1792585 0.188062 -0.9656599 -0.1792563 0.06303244 -0.9817811 -0.1792641 0.0630331 -0.9817796 -0.1792641 -0.06303209 -0.9817796 -0.179253 -0.06303322 -0.9817816 1.2652e-4 0.9749273 -0.2225237 1.2652e-4 0.9749279 -0.2225207 -5.37765e-4 0.9659257 -0.2588191 3.194e-4 0.938467 -0.3453689 3.194e-4 0.9384698 -0.3453611 -5.63475e-4 0.9063082 -0.422617 1.78e-4 0.8865982 -0.4625403 1.765e-4 0.8191514 -0.5735775 -0.003345847 0.8865944 -0.4625356 -2.97447e-4 0.8201726 -0.5721162 2.0075e-4 0.7402706 -0.6723091 2.0075e-4 0.7402785 -0.6723003 -5.73313e-4 0.7071067 -0.7071067 3.16439e-4 0.6482294 -0.761445 3.16439e-4 0.6482264 -0.7614476 -5.21889e-4 0.5735753 -0.8191527 9.78279e-5 0.5455368 -0.8380869 9.68651e-5 0.4226192 -0.9063074 -0.003713428 0.5455225 -0.8380879 -4.54495e-4 0.4338842 -0.9009686 2.57082e-4 0.3151072 -0.949056 2.57082e-4 0.3151077 -0.949056 -5.91138e-4 0.258819 -0.9659256 2.95663e-4 0.1911584 -0.9815591 2.95663e-4 0.1911581 -0.9815592 -4.62551e-4 0.08715629 -0.9961946 0 0.06407195 -0.9979452 0 -0.06407195 -0.9979452 -4.62551e-4 -0.08715629 -0.9961946 2.57082e-4 -0.3151077 -0.949056 -5.91138e-4 -0.258819 -0.9659256 2.95663e-4 -0.1911584 -0.9815591 2.95663e-4 -0.1911581 -0.9815592 2.57082e-4 -0.3151072 -0.949056 -4.54494e-4 -0.4338842 -0.9009686 -1.36372e-4 -0.4226191 -0.9063074 9.78279e-5 -0.5455263 -0.8380937 9.78279e-5 -0.5455368 -0.8380869 -5.21889e-4 -0.5735753 -0.8191527 3.16439e-4 -0.6482264 -0.7614476 3.16439e-4 -0.6482294 -0.761445 -5.73313e-4 -0.7071067 -0.7071067 2.0075e-4 -0.7402785 -0.6723003 1.99147e-4 -0.8191514 -0.5735774 -0.003227293 -0.7402667 -0.6723056 -2.48994e-4 -0.8201726 -0.5721162 1.78001e-4 -0.8865994 -0.4625381 1.78001e-4 -0.8865982 -0.4625403 -5.63475e-4 -0.9063082 -0.422617 3.194e-4 -0.9384698 -0.3453611 3.194e-4 -0.938467 -0.3453689 -5.37765e-4 -0.9659257 -0.2588191 1.26521e-4 -0.9749279 -0.2225207 1.2533e-4 -0.9961947 -0.08715635 -0.003589212 -0.974921 -0.2225223 -4.00103e-4 -0.9953793 -0.09601974 2.40324e-4 -0.9994861 0.03205382 2.40324e-4 -0.9994862 0.03205114 -5.87149e-4 -0.9961945 0.08715629 3.04518e-4 -0.9871826 0.1595941 3.04518e-4 -0.9871802 0.1596097 -4.8429e-4 -0.9659257 0.2588191 3.46314e-5 -0.9586679 0.2845273 3.42496e-5 -0.9063084 0.422617 -0.003969013 -0.9586654 0.2845082 -5.68965e-4 -0.9144124 0.4047834 2.71951e-4 -0.7818296 0.6234922 -5.93115e-4 -0.8191512 0.5735774 2.84842e-4 -0.8551443 0.51839 2.84842e-4 -0.8551419 0.5183939 2.71951e-4 -0.7818335 0.6234871 -5.10757e-4 -0.6956826 0.718349 -9.28651e-5 -0.7071068 0.7071068 6.721e-5 -0.5981262 0.8014019 6.721e-5 -0.5981088 0.8014149 -5.04107e-4 -0.5735753 0.8191527 3.11424e-4 -0.4907222 0.871316 3.11424e-4 -0.4907165 0.8713192 -5.81282e-4 -0.4226191 0.9063072 2.21468e-4 -0.3752669 0.9269168 2.19803e-4 -0.2588191 0.9659258 -0.003109931 -0.3752543 0.9269167 -2.02587e-4 -0.2536559 0.9672945 1.53254e-4 -0.1278799 0.9917896 1.53254e-4 -0.1278768 0.9917901 -5.51585e-4 -0.08715456 0.9961947 3.20365e-4 0 1 3.20365e-4 0 1 -5.51585e-4 0.08715456 0.9961947 1.53254e-4 0.1278768 0.9917901 1.51884e-4 0.2588191 0.9659258 -0.003466308 0.1278836 0.9917832 -3.47777e-4 0.2536548 0.9672948 2.21467e-4 0.3752561 0.9269211 2.21467e-4 0.3752669 0.9269168 -5.81282e-4 0.4226191 0.9063072 3.11424e-4 0.4907165 0.8713192 3.11424e-4 0.4907222 0.871316 -5.04107e-4 0.5735753 0.8191527 6.72104e-5 0.5981088 0.8014149 6.65083e-5 0.7071068 0.7071068 -0.003839671 0.5981218 0.801396 -5.10756e-4 0.6956826 0.718349 2.84842e-4 0.8551443 0.51839 -5.93115e-4 0.8191512 0.5735774 2.71951e-4 0.7818296 0.6234922 2.71951e-4 0.7818335 0.6234871 2.84841e-4 0.855142 0.5183938 -5.68965e-4 0.9144124 0.4047834 -4.74021e-5 0.9063083 0.422617 3.46314e-5 0.958673 0.2845105 3.46314e-5 0.9586679 0.2845273 -4.8429e-4 0.9659257 0.2588191 3.04518e-4 0.9871802 0.1596097 3.04518e-4 0.9871826 0.1595941 -5.87149e-4 0.9961945 0.08715629 0 0.9988439 0.04807049 0 0.9961947 -0.08715635 -0.001934409 0.9998695 -0.0160374 -1.58173e-4 0.9953795 -0.09601974 0 0.9961946 -0.08715599 0 0.9961947 0.08715611 0 0.9961947 0.08715611 0 0.9659261 0.2588181 0 0.9659261 0.2588181 0 0.9063075 0.4226189 0 0.9063075 0.4226189 0 0.8191519 0.5735767 0 0.8191519 0.5735767 0 0.7071068 0.7071068 0 0.7071068 0.7071068 0 0.5735763 0.8191522 0 0.5735763 0.8191522 0 0.4226189 0.9063075 0 0.4226189 0.9063075 0 0.2588183 0.9659261 0 0.2588183 0.9659261 0 0.08715611 0.9961947 0 0.08715611 0.9961947 0 -0.08715611 0.9961947 0 -0.08715611 0.9961947 0 -0.2588183 0.9659261 0 -0.2588183 0.9659261 0 -0.4226189 0.9063075 0 -0.4226189 0.9063075 0 -0.5735763 0.8191522 0 -0.5735763 0.8191522 0 -0.7071068 0.7071068 0 -0.7071068 0.7071068 0 -0.8191519 0.5735767 0 -0.8191519 0.5735767 0 -0.9063075 0.4226189 0 -0.9063075 0.4226189 0 -0.9659261 0.2588181 0 -0.9659261 0.2588181 0 -0.9961947 0.08715611 0 -0.9961947 0.08715611 0 -0.9961946 -0.08715599 0 -0.9961946 -0.08715599 0 -0.9659261 -0.2588183 0 -0.9659261 -0.2588183 0 -0.9063075 -0.4226189 0 -0.9063075 -0.4226189 0 -0.8191519 -0.5735767 0 -0.8191519 -0.5735767 0 -0.7071071 -0.7071064 0 -0.7071071 -0.7071064 0 -0.5735757 -0.8191525 0 -0.5735757 -0.8191525 0 -0.4226186 -0.9063077 0 -0.4226186 -0.9063077 0 -0.2588191 -0.9659259 0 -0.2588191 -0.9659259 0 -0.08715569 -0.9961947 0 -0.08715569 -0.9961947 0 0.08715569 -0.9961947 0 0.08715569 -0.9961947 0 0.2588191 -0.9659259 0 0.2588191 -0.9659259 0 0.4226186 -0.9063077 0 0.4226186 -0.9063077 0 0.5735757 -0.8191525 0 0.5735757 -0.8191525 0 0.7071071 -0.7071064 0 0.7071071 -0.7071064 0 0.8191519 -0.5735767 0 0.8191519 -0.5735767 0 0.9063075 -0.4226189 0 0.9063075 -0.4226189 0 0.9659261 -0.2588183 0 0.9659261 -0.2588183 0 0.9961946 -0.08715599 0 0.9961947 -0.08715611 0 0.9961946 0.08715599 0 0.9961946 0.08715599 0 0.9659261 0.2588183 0 0.9659261 0.2588183 0 0.9063075 0.4226189 0 0.9063075 0.4226189 0 0.8191519 0.5735767 0 0.8191519 0.5735767 0 0.7071071 0.7071064 0 0.7071071 0.7071064 0 0.5735757 0.8191525 0 0.5735757 0.8191525 0 0.4226186 0.9063077 0 0.4226186 0.9063077 0 0.2588191 0.9659259 0 0.2588191 0.9659259 0 0.08715569 0.9961947 0 0.08715569 0.9961947 0 -0.08715569 0.9961947 0 -0.08715569 0.9961947 0 -0.2588191 0.9659259 0 -0.2588191 0.9659259 0 -0.4226186 0.9063077 0 -0.4226186 0.9063077 0 -0.5735757 0.8191525 0 -0.5735757 0.8191525 0 -0.7071071 0.7071064 0 -0.7071071 0.7071064 0 -0.8191519 0.5735767 0 -0.8191519 0.5735767 0 -0.9063075 0.4226189 0 -0.9063075 0.4226189 0 -0.9659261 0.2588183 0 -0.9659261 0.2588183 0 -0.9961946 0.08715599 0 -0.9961946 0.08715599 0 -0.9961947 -0.08715611 0 -0.9961947 -0.08715611 0 -0.9659261 -0.2588181 0 -0.9659261 -0.2588181 0 -0.9063075 -0.4226189 0 -0.9063075 -0.4226189 0 -0.8191519 -0.5735767 0 -0.8191519 -0.5735767 0 -0.7071068 -0.7071068 0 -0.7071068 -0.7071068 0 -0.5735763 -0.8191522 0 -0.5735763 -0.8191522 0 -0.4226189 -0.9063075 0 -0.4226189 -0.9063075 0 -0.2588183 -0.9659261 0 -0.2588183 -0.9659261 0 -0.08715611 -0.9961947 0 -0.08715611 -0.9961947 0 0.08715611 -0.9961947 0 0.08715611 -0.9961947 0 0.2588183 -0.9659261 0 0.2588183 -0.9659261 0 0.4226189 -0.9063075 0 0.4226189 -0.9063075 0 0.5735763 -0.8191522 0 0.5735763 -0.8191522 0 0.7071068 -0.7071068 0 0.7071068 -0.7071068 0 0.8191519 -0.5735767 0 0.8191519 -0.5735767 0 0.9063075 -0.4226189 0 0.9063075 -0.4226189 0 0.9659261 -0.2588181 0 0.9659261 -0.2588181 0 0.9961947 -0.08715611 0.9848064 -0.1736562 0 0.9848064 -0.1736562 0 1 0 0 1 0 0 0.9848064 0.1736562 0 0.9848064 0.1736562 0 0 0.9961946 -0.08715599 0 0.9961947 0.08715611 0 0.9961947 0.08715611 0 0.9659261 0.2588181 0 0.9659261 0.2588181 0 0.9063075 0.4226189 0 0.9063075 0.4226189 0 0.8191519 0.5735767 0 0.8191519 0.5735767 0 0.7071068 0.7071068 0 0.7071068 0.7071068 0 0.5735763 0.8191522 0 0.5735763 0.8191522 0 0.4226189 0.9063075 0 0.4226189 0.9063075 0 0.2588183 0.9659261 0 0.2588183 0.9659261 0 0.08715611 0.9961947 0 0.08715611 0.9961947 0 -0.08715611 0.9961947 0 -0.08715611 0.9961947 0 -0.2588183 0.9659261 0 -0.2588183 0.9659261 0 -0.4226189 0.9063075 0 -0.4226189 0.9063075 0 -0.5735763 0.8191522 0 -0.5735763 0.8191522 0 -0.7071068 0.7071068 0 -0.7071068 0.7071068 0 -0.8191519 0.5735767 0 -0.8191519 0.5735767 0 -0.9063075 0.4226189 0 -0.9063075 0.4226189 0 -0.9659261 0.2588181 0 -0.9659261 0.2588181 0 -0.9961947 0.08715611 0 -0.9961947 0.08715611 0 -0.9961946 -0.08715599 0 -0.9961946 -0.08715599 0 -0.9659261 -0.2588183 0 -0.9659261 -0.2588183 0 -0.9063075 -0.4226189 0 -0.9063075 -0.4226189 0 -0.8191519 -0.5735767 0 -0.8191519 -0.5735767 0 -0.7071071 -0.7071064 0 -0.7071071 -0.7071064 0 -0.5735757 -0.8191525 0 -0.5735757 -0.8191525 0 -0.4226186 -0.9063077 0 -0.4226186 -0.9063077 0 -0.2588191 -0.9659259 0 -0.2588191 -0.9659259 0 -0.08715569 -0.9961947 0 -0.08715569 -0.9961947 0 0.08715569 -0.9961947 0 0.08715569 -0.9961947 0 0.2588191 -0.9659259 0 0.2588191 -0.9659259 0 0.4226186 -0.9063077 0 0.4226186 -0.9063077 0 0.5735757 -0.8191525 0 0.5735757 -0.8191525 0 0.7071071 -0.7071064 0 0.7071071 -0.7071064 0 0.8191519 -0.5735767 0 0.8191519 -0.5735767 0 0.9063075 -0.4226189 0 0.9063075 -0.4226189 0 0.9659261 -0.2588183 0 0.9659261 -0.2588183 0 0.9961946 -0.08715599 0 0.9961947 -0.08715611 0 0.9961946 0.08715599 0 0.9961946 0.08715599 0 0.9659261 0.2588183 0 0.9659261 0.2588183 0 0.9063075 0.4226189 0 0.9063075 0.4226189 0 0.8191519 0.5735767 0 0.8191519 0.5735767 0 0.7071071 0.7071064 0 0.7071071 0.7071064 0 0.5735757 0.8191525 0 0.5735757 0.8191525 0 0.4226186 0.9063077 0 0.4226186 0.9063077 0 0.2588191 0.9659259 0 0.2588191 0.9659259 0 0.08715569 0.9961947 0 0.08715569 0.9961947 0 -0.08715569 0.9961947 0 -0.08715569 0.9961947 0 -0.2588191 0.9659259 0 -0.2588191 0.9659259 0 -0.4226186 0.9063077 0 -0.4226186 0.9063077 0 -0.5735757 0.8191525 0 -0.5735757 0.8191525 0 -0.7071071 0.7071064 0 -0.7071071 0.7071064 0 -0.8191519 0.5735767 0 -0.8191519 0.5735767 0 -0.9063075 0.4226189 0 -0.9063075 0.4226189 0 -0.9659261 0.2588183 0 -0.9659261 0.2588183 0 -0.9961946 0.08715599 0 -0.9961946 0.08715599 0 -0.9961947 -0.08715611 0 -0.9961947 -0.08715611 0 -0.9659261 -0.2588181 0 -0.9659261 -0.2588181 0 -0.9063075 -0.4226189 0 -0.9063075 -0.4226189 0 -0.8191519 -0.5735767 0 -0.8191519 -0.5735767 0 -0.7071068 -0.7071068 0 -0.7071068 -0.7071068 0 -0.5735763 -0.8191522 0 -0.5735763 -0.8191522 0 -0.4226189 -0.9063075 0 -0.4226189 -0.9063075 0 -0.2588183 -0.9659261 0 -0.2588183 -0.9659261 0 -0.08715611 -0.9961947 0 -0.08715611 -0.9961947 0 0.08715611 -0.9961947 0 0.08715611 -0.9961947 0 0.2588183 -0.9659261 0 0.2588183 -0.9659261 0 0.4226189 -0.9063075 0 0.4226189 -0.9063075 0 0.5735763 -0.8191522 0 0.5735763 -0.8191522 0 0.7071068 -0.7071068 0 0.7071068 -0.7071068 0 0.8191519 -0.5735767 0 0.8191519 -0.5735767 0 0.9063075 -0.4226189 0 0.9063075 -0.4226189 0 0.9659261 -0.2588181 0 0.9659261 -0.2588181 0 0.9961947 -0.08715611 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0.9659258 -0.2588193 0 0.9659258 -0.2588193 0 0.9659258 0.2588193 0 0.9659258 0.2588193 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.9961948 -0.08715468 0 0.9961948 0.08715468 0 0.9961948 0.08715468 0 0.9659253 0.2588208 0 0.9659253 0.2588208 0 0.9063082 0.4226173 0 0.9063082 0.4226173 0 0.8191526 0.5735756 0 0.8191526 0.5735756 0 0.7071068 0.7071068 0 0.7071068 0.7071068 0 0.5735766 0.8191518 0 0.5735766 0.8191518 0 0.422618 0.9063079 0 0.422618 0.9063079 0 0.2588183 0.965926 0 0.2588183 0.965926 0 0.08715611 0.9961947 0 0.08715611 0.9961947 0 -0.08715611 0.9961947 0 -0.08715611 0.9961947 0 -0.2588183 0.965926 0 -0.2588183 0.965926 0 -0.422618 0.9063079 0 -0.422618 0.9063079 0 -0.5735782 0.8191509 0 -0.5735782 0.8191509 0 -0.7071052 0.7071084 0 -0.7071052 0.7071084 0 -0.8191526 0.5735756 0 -0.8191526 0.5735756 0 -0.9063082 0.4226173 0 -0.9063082 0.4226173 0 -0.9659253 0.2588208 0 -0.9659253 0.2588208 0 -0.9961948 0.08715468 0 -0.9961948 0.08715468 0 -0.9961948 -0.08715468 0 -0.9961948 -0.08715468 0 -0.9659255 -0.2588205 0 -0.9659255 -0.2588205 0 -0.9063079 -0.4226179 0 -0.9063079 -0.4226179 0 -0.8191526 -0.5735756 0 -0.8191526 -0.5735756 0 -0.7071059 -0.7071076 0 -0.7071059 -0.7071076 0 -0.5735771 -0.8191516 0 -0.5735771 -0.8191516 0 -0.422618 -0.9063079 0 -0.422618 -0.9063079 0 -0.2588198 -0.9659256 0 -0.2588198 -0.9659256 0 -0.08715456 -0.9961947 0 -0.08715456 -0.9961947 0 0.08715456 -0.9961947 0 0.08715456 -0.9961947 0 0.2588198 -0.9659256 0 0.2588198 -0.9659256 0 0.422618 -0.9063079 0 0.422618 -0.9063079 0 0.5735756 -0.8191526 0 0.5735756 -0.8191526 0 0.7071076 -0.7071061 0 0.7071076 -0.7071061 0 0.8191526 -0.5735756 0 0.8191526 -0.5735756 0 0.9063079 -0.4226179 0 0.9063079 -0.4226179 0 0.9659255 -0.2588205 0 0.9659255 -0.2588205 0 0.9961948 -0.08715468 0 0.9961948 -0.08715468 0 0.9961948 0.08715468 0 0.9961948 0.08715468 0 0.9659253 0.2588208 0 0.9659253 0.2588208 0 0.9063082 0.4226173 0 0.9063082 0.4226173 0 0.8191526 0.5735756 0 0.8191526 0.5735756 0 0.7071052 0.7071084 0 0.7071052 0.7071084 0 0.5735782 0.8191509 0 0.5735782 0.8191509 0 0.422618 0.9063079 0 0.422618 0.9063079 0 0.2588183 0.965926 0 0.2588183 0.965926 0 0.08715611 0.9961947 0 0.08715611 0.9961947 0 -0.08715611 0.9961947 0 -0.08715611 0.9961947 0 -0.2588183 0.965926 0 -0.2588183 0.965926 0 -0.422618 0.9063079 0 -0.422618 0.9063079 0 -0.5735766 0.8191518 0 -0.5735766 0.8191518 0 -0.7071068 0.7071068 0 -0.7071068 0.7071068 0 -0.8191526 0.5735756 0 -0.8191526 0.5735756 0 -0.9063082 0.4226173 0 -0.9063082 0.4226173 0 -0.9659253 0.2588208 0 -0.9659253 0.2588208 0 -0.9961948 0.08715468 0 -0.9961948 0.08715468 0 -0.9961948 -0.08715468 0 -0.9961948 -0.08715468 0 -0.9659255 -0.2588205 0 -0.9659255 -0.2588205 0 -0.9063079 -0.4226179 0 -0.9063079 -0.4226179 0 -0.8191526 -0.5735756 0 -0.8191526 -0.5735756 0 -0.7071076 -0.7071061 0 -0.7071076 -0.7071061 0 -0.5735756 -0.8191526 0 -0.5735756 -0.8191526 0 -0.422618 -0.9063079 0 -0.422618 -0.9063079 0 -0.2588198 -0.9659256 0 -0.2588198 -0.9659256 0 -0.08715456 -0.9961947 0 -0.08715456 -0.9961947 0 0.08715456 -0.9961947 0 0.08715456 -0.9961947 0 0.2588198 -0.9659256 0 0.2588198 -0.9659256 0 0.422618 -0.9063079 0 0.422618 -0.9063079 0 0.5735771 -0.8191516 0 0.5735771 -0.8191516 0 0.7071059 -0.7071076 0 0.7071059 -0.7071076 0 0.8191526 -0.5735756 0 0.8191526 -0.5735756 0 0.9063079 -0.4226179 0 0.9063079 -0.4226179 0 0.9659255 -0.2588205 0 0.9659255 -0.2588205 0 0.9961948 -0.08715468 0 0.9961948 -0.08715468 0 0.9961948 0.08715468 0 0.9961948 0.08715468 0 0.9659255 0.2588205 0 0.9659255 0.2588205 0 0.9063079 0.4226179 0 0.9063079 0.4226179 0 0.8191526 0.5735756 0 0.8191526 0.5735756 0 0.7071076 0.7071061 0 0.7071076 0.7071061 0 0.5735756 0.8191526 0 0.5735756 0.8191526 0 0.422618 0.9063079 0 0.422618 0.9063079 0 0.2588198 0.9659256 0 0.2588198 0.9659256 0 0.08715456 0.9961947 0 0.08715456 0.9961947 0 -0.08715456 0.9961947 0 -0.08715456 0.9961947 0 -0.2588198 0.9659256 0 -0.2588198 0.9659256 0 -0.422618 0.9063079 0 -0.422618 0.9063079 0 -0.5735771 0.8191516 0 -0.5735771 0.8191516 0 -0.7071059 0.7071076 0 -0.7071059 0.7071076 0 -0.8191526 0.5735756 0 -0.8191526 0.5735756 0 -0.9063079 0.4226179 0 -0.9063079 0.4226179 0 -0.9659255 0.2588205 0 -0.9659255 0.2588205 0 -0.9961948 0.08715468 0 -0.9961948 0.08715468 0 -0.9961948 -0.08715468 0 -0.9961948 -0.08715468 0 -0.9659253 -0.2588208 0 -0.9659253 -0.2588208 0 -0.9063082 -0.4226173 0 -0.9063082 -0.4226173 0 -0.8191526 -0.5735756 0 -0.8191526 -0.5735756 0 -0.7071052 -0.7071084 0 -0.7071052 -0.7071084 0 -0.5735782 -0.8191509 0 -0.5735782 -0.8191509 0 -0.422618 -0.9063079 0 -0.422618 -0.9063079 0 -0.2588183 -0.965926 0 -0.2588183 -0.965926 0 -0.08715611 -0.9961947 0 -0.08715611 -0.9961947 0 0.08715611 -0.9961947 0 0.08715611 -0.9961947 0 0.2588183 -0.965926 0 0.2588183 -0.965926 0 0.422618 -0.9063079 0 0.422618 -0.9063079 0 0.5735766 -0.8191518 0 0.5735766 -0.8191518 0 0.7071068 -0.7071068 0 0.7071068 -0.7071068 0 0.8191526 -0.5735756 0 0.8191526 -0.5735756 0 0.9063082 -0.4226173 0 0.9063082 -0.4226173 0 0.9659253 -0.2588208 0 0.9659253 -0.2588208 0 0.9961948 -0.08715468 0 0.9961948 -0.08715468 0 0.9961948 0.08715468 0 0.9961948 0.08715468 0 0.9659255 0.2588205 0 0.9659255 0.2588205 0 0.9063079 0.4226179 0 0.9063079 0.4226179 0 0.8191526 0.5735756 0 0.8191526 0.5735756 0 0.7071059 0.7071076 0 0.7071059 0.7071076 0 0.5735771 0.8191516 0 0.5735771 0.8191516 0 0.422618 0.9063079 0 0.422618 0.9063079 0 0.2588198 0.9659256 0 0.2588198 0.9659256 0 0.08715456 0.9961947 0 0.08715456 0.9961947 0 -0.08715456 0.9961947 0 -0.08715456 0.9961947 0 -0.2588198 0.9659256 0 -0.2588198 0.9659256 0 -0.422618 0.9063079 0 -0.422618 0.9063079 0 -0.5735756 0.8191526 0 -0.5735756 0.8191526 0 -0.7071076 0.7071061 0 -0.7071076 0.7071061 0 -0.8191526 0.5735756 0 -0.8191526 0.5735756 0 -0.9063079 0.4226179 0 -0.9063079 0.4226179 0 -0.9659255 0.2588205 0 -0.9659255 0.2588205 0 -0.9961948 0.08715468 0 -0.9961948 0.08715468 0 -0.9961948 -0.08715468 0 -0.9961948 -0.08715468 0 -0.9659253 -0.2588208 0 -0.9659253 -0.2588208 0 -0.9063082 -0.4226173 0 -0.9063082 -0.4226173 0 -0.8191526 -0.5735756 0 -0.8191526 -0.5735756 0 -0.7071068 -0.7071068 0 -0.7071068 -0.7071068 0 -0.5735766 -0.8191518 0 -0.5735766 -0.8191518 0 -0.422618 -0.9063079 0 -0.422618 -0.9063079 0 -0.2588183 -0.965926 0 -0.2588183 -0.965926 0 -0.08715611 -0.9961947 0 -0.08715611 -0.9961947 0 0.08715611 -0.9961947 0 0.08715611 -0.9961947 0 0.2588183 -0.965926 0 0.2588183 -0.965926 0 0.422618 -0.9063079 0 0.422618 -0.9063079 0 0.5735782 -0.8191509 0 0.5735782 -0.8191509 0 0.7071052 -0.7071084 0 0.7071052 -0.7071084 0 0.8191526 -0.5735756 0 0.8191526 -0.5735756 0 0.9063082 -0.4226173 0 0.9063082 -0.4226173 0 0.9659253 -0.2588208 0 0.9659253 -0.2588208 0 0.9961948 -0.08715468 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 + + + + + + + + + + + + + + + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +

110 178 111 178 112 178 112 179 111 179 113 179 114 180 91 180 90 180 115 181 116 181 117 181 77 182 76 182 110 182 110 183 76 183 75 183 118 184 119 184 120 184 120 185 119 185 121 185 122 186 123 186 115 186 115 187 123 187 124 187 115 188 124 188 116 188 117 189 125 189 115 189 115 190 125 190 126 190 115 191 126 191 127 191 127 192 126 192 128 192 129 193 130 193 131 193 132 194 133 194 134 194 132 195 135 195 133 195 133 196 135 196 136 196 133 197 136 197 137 197 138 198 139 198 111 198 140 199 141 199 88 199 81 200 80 200 142 200 143 201 144 201 145 201 145 202 144 202 146 202 145 203 146 203 147 203 148 204 149 204 150 204 151 205 148 205 152 205 153 206 154 206 148 206 139 207 155 207 111 207 111 208 155 208 156 208 111 209 156 209 113 209 114 210 90 210 141 210 141 211 90 211 89 211 141 212 89 212 88 212 128 213 126 213 157 213 157 214 126 214 158 214 157 215 158 215 159 215 150 216 160 216 148 216 148 217 160 217 161 217 148 218 161 218 145 218 145 219 161 219 162 219 145 220 162 220 143 220 163 221 164 221 165 221 165 222 164 222 166 222 165 223 166 223 167 223 154 224 168 224 148 224 148 225 168 225 169 225 148 226 169 226 149 226 134 227 170 227 132 227 132 228 170 228 171 228 132 229 171 229 172 229 172 230 173 230 132 230 132 231 173 231 174 231 132 232 174 232 175 232 137 233 138 233 133 233 133 234 138 234 111 234 133 235 111 235 176 235 176 236 111 236 145 236 176 237 145 237 177 237 177 238 145 238 147 238 142 239 80 239 178 239 178 240 80 240 79 240 178 241 79 241 110 241 110 242 79 242 78 242 110 243 78 243 77 243 111 244 108 244 107 244 98 245 97 245 179 245 179 246 97 246 96 246 179 247 96 247 180 247 96 248 95 248 180 248 180 249 95 249 94 249 180 250 94 250 114 250 114 251 94 251 93 251 114 252 93 252 91 252 181 253 182 253 118 253 183 254 184 254 115 254 115 255 184 255 185 255 186 256 187 256 157 256 167 257 188 257 165 257 165 258 188 258 189 258 165 259 189 259 131 259 131 260 189 260 190 260 131 261 190 261 129 261 191 262 192 262 165 262 165 263 192 263 193 263 165 264 193 264 163 264 194 265 195 265 196 265 120 266 197 266 118 266 118 267 197 267 198 267 118 268 198 268 199 268 199 269 200 269 118 269 118 270 200 270 201 270 118 271 201 271 202 271 121 272 183 272 120 272 120 273 183 273 115 273 120 274 115 274 203 274 203 275 115 275 131 275 203 276 131 276 204 276 204 277 131 277 130 277 185 278 205 278 115 278 115 279 205 279 206 279 115 280 206 280 122 280 207 281 208 281 159 281 159 282 208 282 209 282 210 283 211 283 165 283 165 284 211 284 212 284 165 285 212 285 213 285 75 286 74 286 110 286 110 287 74 287 73 287 110 288 73 288 111 288 111 289 73 289 109 289 111 290 109 290 108 290 107 291 106 291 111 291 111 292 106 292 105 292 111 293 105 293 104 293 202 294 214 294 118 294 118 295 214 295 215 295 118 296 215 296 216 296 216 297 217 297 118 297 118 298 217 298 218 298 118 299 218 299 181 299 219 300 220 300 182 300 182 301 220 301 221 301 182 302 221 302 118 302 151 303 222 303 148 303 148 304 222 304 223 304 148 305 223 305 224 305 175 306 225 306 132 306 132 307 225 307 226 307 132 308 226 308 196 308 196 309 226 309 227 309 196 310 227 310 194 310 88 311 87 311 140 311 140 312 87 312 86 312 140 313 86 313 228 313 228 314 86 314 85 314 228 315 85 315 229 315 229 316 85 316 84 316 229 317 84 317 230 317 230 318 84 318 83 318 230 319 83 319 231 319 231 320 83 320 232 320 233 321 234 321 157 321 157 322 234 322 235 322 157 323 235 323 186 323 224 324 236 324 148 324 148 325 236 325 237 325 148 326 237 326 153 326 232 327 83 327 238 327 238 328 83 328 82 328 238 329 82 329 239 329 209 330 240 330 159 330 159 331 240 331 241 331 159 332 241 332 157 332 157 333 241 333 242 333 157 334 242 334 233 334 243 335 244 335 245 335 245 336 244 336 246 336 245 337 246 337 165 337 165 338 246 338 247 338 165 339 247 339 210 339 213 340 248 340 165 340 165 341 248 341 249 341 165 342 249 342 191 342 142 343 250 343 81 343 81 344 250 344 251 344 81 345 251 345 82 345 82 346 251 346 252 346 82 347 252 347 239 347 253 348 254 348 255 348 255 349 256 349 253 349 253 350 256 350 257 350 253 351 257 351 159 351 159 352 257 352 258 352 159 353 258 353 259 353 259 354 260 354 159 354 159 355 260 355 261 355 159 356 261 356 262 356 262 357 263 357 159 357 159 358 263 358 264 358 159 359 264 359 207 359 265 360 266 360 267 360 266 361 268 361 267 361 267 362 268 362 269 362 267 363 269 363 270 363 187 364 271 364 157 364 157 365 271 365 272 365 157 366 272 366 267 366 267 367 272 367 273 367 267 368 273 368 265 368 274 369 275 369 152 369 152 370 275 370 276 370 152 371 276 371 151 371 245 372 277 372 243 372 243 373 277 373 278 373 243 374 278 374 279 374 279 375 278 375 275 375 279 376 275 376 280 376 280 377 275 377 274 377 101 378 281 378 102 378 102 379 281 379 282 379 282 380 283 380 102 380 102 381 283 381 284 381 102 382 284 382 103 382 103 383 284 383 285 383 103 384 285 384 104 384 104 385 285 385 286 385 104 386 286 386 111 386 287 387 101 387 288 387 288 388 101 388 100 388 179 389 289 389 98 389 98 390 289 390 290 390 98 391 290 391 99 391 99 392 290 392 291 392 99 393 291 393 100 393 100 394 291 394 292 394 100 395 292 395 293 395 287 396 294 396 101 396 101 397 294 397 295 397 101 398 295 398 281 398 293 399 296 399 100 399 100 400 296 400 297 400 100 401 297 401 288 401 610 710 611 710 612 710 613 711 614 711 615 711 615 712 614 712 612 712 615 713 612 713 616 713 617 714 618 714 615 714 612 715 619 715 620 715 611 716 621 716 612 716 612 717 621 717 622 717 612 718 622 718 623 718 623 719 624 719 612 719 612 720 624 720 625 720 612 721 625 721 616 721 619 722 612 722 626 722 626 723 612 723 627 723 626 724 627 724 628 724 620 725 629 725 612 725 612 726 629 726 630 726 612 727 630 727 610 727 631 728 632 728 633 728 628 729 634 729 626 729 626 730 634 730 635 730 626 731 635 731 636 731 637 732 638 732 636 732 636 733 638 733 639 733 636 734 639 734 626 734 633 735 640 735 631 735 631 736 640 736 641 736 631 737 641 737 642 737 643 738 644 738 642 738 642 739 644 739 645 739 642 740 645 740 631 740 632 741 631 741 615 741 615 742 631 742 646 742 615 743 646 743 647 743 618 744 648 744 615 744 615 745 648 745 649 745 615 746 649 746 613 746 647 747 650 747 615 747 615 748 650 748 651 748 615 749 651 749 617 749 652 750 653 750 654 750 654 751 653 751 655 751 656 752 657 752 655 752 655 753 657 753 658 753 655 754 658 754 654 754 659 755 660 755 661 755 662 756 663 756 654 756 654 757 663 757 664 757 654 758 664 758 652 758 665 759 666 759 661 759 661 760 666 760 667 760 661 761 667 761 654 761 654 762 667 762 668 762 654 763 668 763 669 763 670 764 671 764 672 764 669 765 673 765 654 765 654 766 673 766 674 766 654 767 674 767 662 767 675 768 676 768 655 768 655 769 676 769 677 769 655 770 677 770 656 770 672 771 678 771 670 771 670 772 678 772 679 772 670 773 679 773 680 773 681 774 682 774 680 774 680 775 682 775 683 775 680 776 683 776 670 776 671 777 670 777 661 777 661 778 670 778 684 778 661 779 684 779 685 779 660 780 686 780 661 780 661 781 686 781 687 781 661 782 687 782 665 782 685 783 688 783 661 783 661 784 688 784 689 784 661 785 689 785 659 785 675 786 655 786 690 786 690 787 655 787 691 787 690 788 691 788 692 788 693 789 694 789 695 789 696 790 697 790 698 790 698 791 697 791 699 791 700 792 701 792 697 792 700 793 697 793 702 793 703 794 704 794 698 794 698 795 704 795 705 795 698 796 705 796 696 796 693 797 695 797 706 797 706 798 695 798 707 798 706 799 707 799 697 799 697 800 707 800 708 800 697 801 708 801 702 801 701 802 709 802 697 802 697 803 709 803 710 803 697 804 710 804 711 804 711 805 712 805 697 805 697 806 712 806 713 806 697 807 713 807 699 807 698 808 714 808 703 808 703 809 714 809 715 809 703 810 715 810 716 810 716 811 715 811 717 811 716 812 717 812 718 812 718 813 717 813 719 813 720 814 721 814 722 814 720 815 722 815 723 815 724 816 725 816 726 816 726 817 725 817 727 817 726 818 727 818 728 818 729 819 722 819 725 819 730 820 731 820 732 820 732 821 733 821 730 821 730 822 733 822 734 822 730 823 734 823 735 823 724 824 736 824 725 824 725 825 736 825 737 825 725 826 737 826 729 826 729 827 737 827 730 827 729 828 730 828 738 828 738 829 730 829 735 829 739 830 740 830 727 830 727 831 740 831 741 831 727 832 741 832 728 832 742 833 743 833 722 833 722 834 743 834 744 834 722 835 744 835 723 835 745 836 746 836 722 836 722 837 746 837 747 837 722 838 747 838 742 838 748 839 749 839 739 839 739 840 749 840 750 840 739 841 750 841 740 841 729 842 751 842 722 842 722 843 751 843 752 843 722 844 752 844 753 844 753 845 754 845 722 845 722 846 754 846 755 846 722 847 755 847 745 847 756 848 757 848 758 848 758 849 757 849 759 849 760 850 761 850 759 850 759 851 761 851 762 851 759 852 762 852 758 852 763 853 764 853 765 853 766 854 767 854 758 854 758 855 767 855 768 855 758 856 768 856 756 856 769 857 770 857 765 857 765 858 770 858 771 858 765 859 771 859 758 859 758 860 771 860 772 860 758 861 772 861 773 861 774 862 775 862 776 862 773 863 777 863 758 863 758 864 777 864 778 864 758 865 778 865 766 865 779 866 780 866 759 866 759 867 780 867 781 867 759 868 781 868 760 868 776 869 782 869 774 869 774 870 782 870 783 870 774 871 783 871 784 871 785 872 786 872 784 872 784 873 786 873 787 873 784 874 787 874 774 874 775 875 774 875 765 875 765 876 774 876 788 876 765 877 788 877 789 877 764 878 790 878 765 878 765 879 790 879 791 879 765 880 791 880 769 880 789 881 792 881 765 881 765 882 792 882 793 882 765 883 793 883 763 883 779 884 759 884 794 884 794 885 759 885 795 885 794 886 795 886 796 886 797 887 798 887 799 887 800 888 801 888 802 888 803 889 804 889 802 889 802 890 804 890 805 890 802 891 805 891 806 891 800 892 802 892 807 892 806 893 805 893 808 893 808 894 805 894 809 894 808 895 809 895 810 895 797 896 799 896 802 896 802 897 799 897 811 897 802 898 811 898 807 898 801 899 812 899 802 899 802 900 812 900 813 900 802 901 813 901 814 901 814 902 815 902 802 902 802 903 815 903 816 903 802 904 816 904 803 904 817 905 818 905 809 905 809 906 818 906 819 906 809 907 819 907 810 907 820 908 821 908 822 908 822 909 821 909 823 909 822 910 823 910 824 910 820 911 822 911 809 911 809 912 822 912 825 912 809 913 825 913 817 913 156 914 826 914 113 914 113 915 826 915 827 915 113 916 827 916 112 916 112 917 827 917 828 917 112 918 828 918 110 918 110 919 828 919 829 919 110 920 829 920 178 920 178 921 829 921 830 921 178 922 830 922 142 922 142 923 830 923 831 923 142 924 831 924 250 924 250 925 831 925 832 925 250 926 832 926 251 926 251 927 832 927 833 927 251 928 833 928 252 928 252 929 833 929 834 929 252 930 834 930 239 930 239 931 834 931 835 931 239 932 835 932 238 932 238 933 835 933 836 933 238 934 836 934 232 934 232 935 836 935 837 935 232 936 837 936 231 936 231 937 837 937 838 937 231 938 838 938 230 938 230 939 838 939 839 939 230 940 839 940 229 940 229 941 839 941 840 941 229 942 840 942 228 942 228 943 840 943 841 943 228 944 841 944 140 944 140 945 841 945 842 945 140 946 842 946 141 946 141 947 842 947 843 947 141 948 843 948 114 948 114 949 843 949 844 949 114 950 844 950 180 950 180 951 844 951 845 951 180 952 845 952 179 952 179 953 845 953 846 953 179 954 846 954 289 954 289 955 846 955 847 955 289 956 847 956 290 956 290 957 847 957 848 957 290 958 848 958 291 958 291 959 848 959 849 959 291 960 849 960 292 960 292 961 849 961 850 961 292 962 850 962 293 962 293 963 850 963 851 963 293 964 851 964 296 964 296 965 851 965 852 965 296 966 852 966 297 966 297 967 852 967 853 967 297 968 853 968 288 968 288 969 853 969 854 969 288 970 854 970 287 970 287 971 854 971 855 971 287 972 855 972 294 972 294 973 855 973 856 973 294 974 856 974 295 974 295 975 856 975 857 975 295 976 857 976 281 976 281 977 857 977 858 977 281 978 858 978 282 978 282 979 858 979 859 979 282 980 859 980 283 980 283 981 859 981 860 981 283 982 860 982 284 982 284 983 860 983 861 983 284 984 861 984 285 984 285 985 861 985 862 985 285 986 862 986 286 986 286 987 862 987 863 987 286 988 863 988 111 988 111 989 863 989 864 989 111 990 864 990 145 990 145 991 864 991 865 991 145 992 865 992 148 992 148 993 865 993 866 993 148 994 866 994 152 994 152 995 866 995 867 995 152 996 867 996 274 996 274 997 867 997 868 997 274 998 868 998 280 998 280 999 868 999 869 999 280 1000 869 1000 279 1000 279 1001 869 1001 870 1001 279 1002 870 1002 243 1002 243 1003 870 1003 871 1003 243 1004 871 1004 244 1004 244 1005 871 1005 872 1005 244 1006 872 1006 246 1006 246 1007 872 1007 873 1007 246 1008 873 1008 247 1008 247 1009 873 1009 874 1009 247 1010 874 1010 210 1010 210 1011 874 1011 875 1011 210 1012 875 1012 211 1012 211 1013 875 1013 876 1013 211 1014 876 1014 212 1014 212 1015 876 1015 877 1015 212 1016 877 1016 213 1016 213 1017 877 1017 878 1017 213 1018 878 1018 248 1018 248 1019 878 1019 879 1019 248 1020 879 1020 249 1020 249 1021 879 1021 880 1021 249 1022 880 1022 191 1022 191 1023 880 1023 881 1023 191 1024 881 1024 192 1024 192 1025 881 1025 882 1025 192 1026 882 1026 193 1026 193 1027 882 1027 883 1027 193 1028 883 1028 163 1028 163 1029 883 1029 884 1029 163 1030 884 1030 164 1030 164 1031 884 1031 885 1031 164 1032 885 1032 166 1032 166 1033 885 1033 886 1033 166 1034 886 1034 167 1034 167 1035 886 1035 887 1035 167 1036 887 1036 188 1036 188 1037 887 1037 888 1037 188 1038 888 1038 189 1038 189 1039 888 1039 889 1039 189 1040 889 1040 190 1040 190 1041 889 1041 890 1041 190 1042 890 1042 129 1042 129 1043 890 1043 891 1043 129 1044 891 1044 130 1044 130 1045 891 1045 892 1045 130 1046 892 1046 204 1046 204 1047 892 1047 893 1047 204 1048 893 1048 203 1048 203 1049 893 1049 894 1049 203 1050 894 1050 120 1050 120 1051 894 1051 895 1051 120 1052 895 1052 197 1052 197 1053 895 1053 896 1053 197 1054 896 1054 198 1054 198 1055 896 1055 897 1055 198 1056 897 1056 199 1056 199 1057 897 1057 898 1057 199 1058 898 1058 200 1058 200 1059 898 1059 899 1059 200 1060 899 1060 201 1060 201 1061 899 1061 900 1061 201 1062 900 1062 202 1062 202 1063 900 1063 901 1063 202 1064 901 1064 214 1064 214 1065 901 1065 902 1065 214 1066 902 1066 215 1066 215 1067 902 1067 903 1067 215 1068 903 1068 216 1068 216 1069 903 1069 904 1069 216 1070 904 1070 217 1070 217 1071 904 1071 905 1071 217 1072 905 1072 218 1072 218 1073 905 1073 906 1073 218 1074 906 1074 181 1074 181 1075 906 1075 907 1075 181 1076 907 1076 182 1076 182 1077 907 1077 908 1077 182 1078 908 1078 219 1078 219 1079 908 1079 909 1079 219 1080 909 1080 220 1080 220 1081 909 1081 910 1081 220 1082 910 1082 221 1082 221 1083 910 1083 911 1083 221 1084 911 1084 118 1084 118 1085 911 1085 912 1085 118 1086 912 1086 119 1086 119 1087 912 1087 913 1087 119 1088 913 1088 121 1088 121 1089 913 1089 914 1089 121 1090 914 1090 183 1090 183 1091 914 1091 915 1091 183 1092 915 1092 184 1092 184 1093 915 1093 916 1093 184 1094 916 1094 185 1094 185 1095 916 1095 917 1095 185 1096 917 1096 205 1096 205 1097 917 1097 918 1097 205 1098 918 1098 206 1098 206 1099 918 1099 919 1099 206 1100 919 1100 122 1100 122 1101 919 1101 920 1101 122 1102 920 1102 123 1102 123 1103 920 1103 921 1103 123 1104 921 1104 124 1104 124 1105 921 1105 922 1105 124 1106 922 1106 116 1106 116 1107 922 1107 923 1107 116 1108 923 1108 117 1108 117 1109 923 1109 924 1109 117 1110 924 1110 125 1110 125 1111 924 1111 925 1111 125 1112 925 1112 126 1112 126 1113 925 1113 926 1113 126 1114 926 1114 158 1114 158 1115 926 1115 927 1115 158 1116 927 1116 159 1116 159 1117 927 1117 928 1117 159 1118 928 1118 253 1118 253 1119 928 1119 929 1119 253 1120 929 1120 254 1120 254 1121 929 1121 930 1121 254 1122 930 1122 255 1122 255 1123 930 1123 931 1123 255 1124 931 1124 256 1124 256 1125 931 1125 932 1125 256 1126 932 1126 257 1126 257 1127 932 1127 933 1127 257 1128 933 1128 258 1128 258 1129 933 1129 934 1129 258 1130 934 1130 259 1130 259 1131 934 1131 935 1131 259 1132 935 1132 260 1132 260 1133 935 1133 936 1133 260 1134 936 1134 261 1134 261 1135 936 1135 937 1135 261 1136 937 1136 262 1136 262 1137 937 1137 938 1137 262 1138 938 1138 263 1138 263 1139 938 1139 939 1139 263 1140 939 1140 264 1140 264 1141 939 1141 940 1141 264 1142 940 1142 207 1142 207 1143 940 1143 941 1143 207 1144 941 1144 208 1144 208 1145 941 1145 942 1145 208 1146 942 1146 209 1146 209 1147 942 1147 943 1147 209 1148 943 1148 240 1148 240 1149 943 1149 944 1149 240 1150 944 1150 241 1150 241 1151 944 1151 945 1151 241 1152 945 1152 242 1152 242 1153 945 1153 946 1153 242 1154 946 1154 233 1154 233 1155 946 1155 947 1155 233 1156 947 1156 234 1156 234 1157 947 1157 948 1157 234 1158 948 1158 235 1158 235 1159 948 1159 949 1159 235 1160 949 1160 186 1160 186 1161 949 1161 950 1161 186 1162 950 1162 187 1162 187 1163 950 1163 951 1163 187 1164 951 1164 271 1164 271 1165 951 1165 952 1165 271 1166 952 1166 272 1166 272 1167 952 1167 953 1167 272 1168 953 1168 273 1168 273 1169 953 1169 954 1169 273 1170 954 1170 265 1170 265 1171 954 1171 955 1171 265 1172 955 1172 266 1172 266 1173 955 1173 956 1173 266 1174 956 1174 268 1174 268 1175 956 1175 957 1175 268 1176 957 1176 269 1176 269 1177 957 1177 958 1177 269 1178 958 1178 270 1178 270 1179 958 1179 959 1179 270 1180 959 1180 267 1180 267 1181 959 1181 960 1181 267 1182 960 1182 157 1182 157 1183 960 1183 961 1183 157 1184 961 1184 128 1184 128 1185 961 1185 962 1185 128 1186 962 1186 127 1186 127 1187 962 1187 963 1187 127 1188 963 1188 115 1188 115 1189 963 1189 964 1189 115 1190 964 1190 131 1190 131 1191 964 1191 965 1191 131 1192 965 1192 165 1192 165 1193 965 1193 966 1193 165 1194 966 1194 245 1194 245 1195 966 1195 967 1195 245 1196 967 1196 277 1196 277 1197 967 1197 968 1197 277 1198 968 1198 278 1198 278 1199 968 1199 969 1199 278 1200 969 1200 275 1200 275 1201 969 1201 970 1201 275 1202 970 1202 276 1202 276 1203 970 1203 971 1203 276 1204 971 1204 151 1204 151 1205 971 1205 972 1205 151 1206 972 1206 222 1206 222 1207 972 1207 973 1207 222 1208 973 1208 223 1208 223 1209 973 1209 974 1209 223 1210 974 1210 224 1210 224 1211 974 1211 975 1211 224 1212 975 1212 236 1212 236 1213 975 1213 976 1213 236 1214 976 1214 237 1214 237 1215 976 1215 977 1215 237 1216 977 1216 153 1216 153 1217 977 1217 978 1217 153 1218 978 1218 154 1218 154 1219 978 1219 979 1219 154 1220 979 1220 168 1220 168 1221 979 1221 980 1221 168 1222 980 1222 169 1222 169 1223 980 1223 981 1223 169 1224 981 1224 149 1224 149 1225 981 1225 982 1225 149 1226 982 1226 150 1226 150 1227 982 1227 983 1227 150 1228 983 1228 160 1228 160 1229 983 1229 984 1229 160 1230 984 1230 161 1230 161 1231 984 1231 985 1231 161 1232 985 1232 162 1232 162 1233 985 1233 986 1233 162 1234 986 1234 143 1234 143 1235 986 1235 987 1235 143 1236 987 1236 144 1236 144 1237 987 1237 988 1237 144 1238 988 1238 146 1238 146 1239 988 1239 989 1239 146 1240 989 1240 147 1240 147 1241 989 1241 990 1241 147 1242 990 1242 177 1242 177 1243 990 1243 991 1243 177 1244 991 1244 176 1244 176 1245 991 1245 992 1245 176 1246 992 1246 133 1246 133 1247 992 1247 993 1247 133 1248 993 1248 134 1248 134 1249 993 1249 994 1249 134 1250 994 1250 170 1250 170 1251 994 1251 995 1251 170 1252 995 1252 171 1252 171 1253 995 1253 996 1253 171 1254 996 1254 172 1254 172 1255 996 1255 997 1255 172 1256 997 1256 173 1256 173 1257 997 1257 998 1257 173 1258 998 1258 174 1258 174 1259 998 1259 999 1259 174 1260 999 1260 175 1260 175 1261 999 1261 1000 1261 175 1262 1000 1262 225 1262 225 1263 1000 1263 1001 1263 225 1264 1001 1264 226 1264 226 1265 1001 1265 1002 1265 226 1266 1002 1266 227 1266 227 1267 1002 1267 1003 1267 227 1268 1003 1268 194 1268 194 1269 1003 1269 1004 1269 194 1270 1004 1270 195 1270 195 1271 1004 1271 1005 1271 195 1272 1005 1272 196 1272 196 1273 1005 1273 1006 1273 196 1274 1006 1274 132 1274 132 1275 1006 1275 1007 1275 132 1276 1007 1276 135 1276 135 1277 1007 1277 1008 1277 135 1278 1008 1278 136 1278 136 1279 1008 1279 1009 1279 136 1280 1009 1280 137 1280 137 1281 1009 1281 1010 1281 137 1282 1010 1282 138 1282 138 1283 1010 1283 1011 1283 138 1284 1011 1284 139 1284 139 1285 1011 1285 1012 1285 139 1286 1012 1286 155 1286 155 1287 1012 1287 1013 1287 155 1288 1013 1288 156 1288 156 1289 1013 1289 826 1289 615 1914 616 1914 1326 1914 1326 1915 616 1915 1327 1915 1327 1916 616 1916 625 1916 1327 1917 625 1917 1328 1917 1328 1918 625 1918 624 1918 1328 1919 624 1919 1329 1919 1329 1920 624 1920 623 1920 1329 1921 623 1921 1330 1921 1330 1922 623 1922 622 1922 1330 1923 622 1923 1331 1923 1331 1924 622 1924 621 1924 1331 1925 621 1925 1332 1925 1332 1926 621 1926 611 1926 1332 1927 611 1927 1333 1927 1333 1928 611 1928 610 1928 1333 1929 610 1929 1334 1929 1334 1930 610 1930 630 1930 1334 1931 630 1931 1335 1931 1335 1932 630 1932 629 1932 1335 1933 629 1933 1336 1933 1336 1934 629 1934 620 1934 1336 1935 620 1935 1337 1935 1337 1936 620 1936 619 1936 1337 1937 619 1937 1338 1937 1338 1938 619 1938 626 1938 1338 1939 626 1939 1339 1939 1339 1940 626 1940 639 1940 1339 1941 639 1941 1340 1941 1340 1942 639 1942 638 1942 1340 1943 638 1943 1341 1943 1341 1944 638 1944 637 1944 1341 1945 637 1945 1342 1945 1342 1946 637 1946 636 1946 1342 1947 636 1947 1343 1947 1343 1948 636 1948 635 1948 1343 1949 635 1949 1344 1949 1344 1950 635 1950 634 1950 1344 1951 634 1951 1345 1951 1345 1952 634 1952 628 1952 1345 1953 628 1953 1346 1953 1346 1954 628 1954 627 1954 1346 1955 627 1955 1347 1955 1347 1956 627 1956 612 1956 1347 1957 612 1957 1348 1957 1348 1958 612 1958 614 1958 1348 1959 614 1959 1349 1959 1349 1960 614 1960 613 1960 1349 1961 613 1961 1350 1961 1350 1962 613 1962 649 1962 1350 1963 649 1963 1351 1963 1351 1964 649 1964 648 1964 1351 1965 648 1965 1352 1965 1352 1966 648 1966 618 1966 1352 1967 618 1967 1353 1967 1353 1968 618 1968 617 1968 1353 1969 617 1969 1354 1969 1354 1970 617 1970 651 1970 1354 1971 651 1971 1355 1971 1355 1972 651 1972 650 1972 1355 1973 650 1973 1356 1973 1356 1974 650 1974 647 1974 1356 1975 647 1975 1357 1975 1357 1976 647 1976 646 1976 1357 1977 646 1977 1358 1977 1358 1978 646 1978 631 1978 1358 1979 631 1979 1359 1979 1359 1980 631 1980 645 1980 1359 1981 645 1981 1360 1981 1360 1982 645 1982 644 1982 1360 1983 644 1983 1361 1983 1361 1984 644 1984 643 1984 1361 1985 643 1985 1362 1985 1362 1986 643 1986 642 1986 1362 1987 642 1987 1363 1987 1363 1988 642 1988 641 1988 1363 1989 641 1989 1364 1989 1364 1990 641 1990 640 1990 1364 1991 640 1991 1365 1991 1365 1992 640 1992 633 1992 1365 1993 633 1993 1366 1993 1366 1994 633 1994 632 1994 1366 1995 632 1995 1367 1995 1367 1996 632 1996 615 1996 1367 1997 615 1997 1326 1997 661 1998 654 1998 1368 1998 1368 1999 654 1999 1369 1999 1369 2000 654 2000 658 2000 1369 2001 658 2001 1370 2001 1370 2002 658 2002 657 2002 1370 2003 657 2003 1371 2003 1371 2004 657 2004 656 2004 1371 2005 656 2005 1372 2005 1372 2006 656 2006 677 2006 1372 2007 677 2007 1373 2007 1373 2008 677 2008 676 2008 1373 2009 676 2009 1374 2009 1374 2010 676 2010 675 2010 1374 2011 675 2011 1375 2011 1375 2012 675 2012 690 2012 1375 2013 690 2013 1376 2013 1376 2014 690 2014 692 2014 1376 2015 692 2015 1377 2015 1377 2016 692 2016 691 2016 1377 2017 691 2017 1378 2017 1378 2018 691 2018 655 2018 1378 2019 655 2019 1379 2019 1379 2020 655 2020 653 2020 1379 2021 653 2021 1380 2021 1380 2022 653 2022 652 2022 1380 2023 652 2023 1381 2023 1381 2024 652 2024 664 2024 1381 2025 664 2025 1382 2025 1382 2026 664 2026 663 2026 1382 2027 663 2027 1383 2027 1383 2028 663 2028 662 2028 1383 2029 662 2029 1384 2029 1384 2030 662 2030 674 2030 1384 2031 674 2031 1385 2031 1385 2032 674 2032 673 2032 1385 2033 673 2033 1386 2033 1386 2034 673 2034 669 2034 1386 2035 669 2035 1387 2035 1387 2036 669 2036 668 2036 1387 2037 668 2037 1388 2037 1388 2038 668 2038 667 2038 1388 2039 667 2039 1389 2039 1389 2040 667 2040 666 2040 1389 2041 666 2041 1390 2041 1390 2042 666 2042 665 2042 1390 2043 665 2043 1391 2043 1391 2044 665 2044 687 2044 1391 2045 687 2045 1392 2045 1392 2046 687 2046 686 2046 1392 2047 686 2047 1393 2047 1393 2048 686 2048 660 2048 1393 2049 660 2049 1394 2049 1394 2050 660 2050 659 2050 1394 2051 659 2051 1395 2051 1395 2052 659 2052 689 2052 1395 2053 689 2053 1396 2053 1396 2054 689 2054 688 2054 1396 2055 688 2055 1397 2055 1397 2056 688 2056 685 2056 1397 2057 685 2057 1398 2057 1398 2058 685 2058 684 2058 1398 2059 684 2059 1399 2059 1399 2060 684 2060 670 2060 1399 2061 670 2061 1400 2061 1400 2062 670 2062 683 2062 1400 2063 683 2063 1401 2063 1401 2064 683 2064 682 2064 1401 2065 682 2065 1402 2065 1402 2066 682 2066 681 2066 1402 2067 681 2067 1403 2067 1403 2068 681 2068 680 2068 1403 2069 680 2069 1404 2069 1404 2070 680 2070 679 2070 1404 2071 679 2071 1405 2071 1405 2072 679 2072 678 2072 1405 2073 678 2073 1406 2073 1406 2074 678 2074 672 2074 1406 2075 672 2075 1407 2075 1407 2076 672 2076 671 2076 1407 2077 671 2077 1408 2077 1408 2078 671 2078 661 2078 1408 2079 661 2079 1368 2079 698 2080 699 2080 1409 2080 1409 2081 699 2081 1410 2081 1410 2082 699 2082 713 2082 1410 2083 713 2083 1411 2083 1411 2084 713 2084 712 2084 1411 2085 712 2085 1412 2085 1412 2086 712 2086 711 2086 1412 2087 711 2087 1413 2087 1413 2088 711 2088 710 2088 1413 2089 710 2089 1414 2089 1414 2090 710 2090 709 2090 1414 2091 709 2091 1415 2091 1415 2092 709 2092 701 2092 1415 2093 701 2093 1416 2093 1416 2094 701 2094 700 2094 1416 2095 700 2095 1417 2095 1417 2096 700 2096 702 2096 1417 2097 702 2097 1418 2097 1418 2098 702 2098 708 2098 1418 2099 708 2099 1419 2099 1419 2100 708 2100 707 2100 1419 2101 707 2101 1420 2101 1420 2102 707 2102 695 2102 1420 2103 695 2103 1421 2103 1421 2104 695 2104 694 2104 1421 2105 694 2105 1422 2105 694 2106 693 2106 1422 2106 1422 2107 693 2107 1423 2107 1423 2108 693 2108 706 2108 696 2109 1424 2109 697 2109 697 2110 1424 2110 1425 2110 697 2111 1425 2111 706 2111 706 2112 1425 2112 1426 2112 706 2113 1426 2113 1423 2113 1424 2114 696 2114 705 2114 1424 2115 705 2115 1427 2115 1427 2116 705 2116 704 2116 1427 2117 704 2117 1428 2117 1428 2118 704 2118 703 2118 1428 2119 703 2119 1429 2119 1429 2120 703 2120 716 2120 1429 2121 716 2121 1430 2121 1430 2122 716 2122 718 2122 1430 2123 718 2123 1431 2123 1431 2124 718 2124 719 2124 1431 2125 719 2125 1432 2125 1432 2126 719 2126 717 2126 1432 2127 717 2127 1433 2127 1433 2128 717 2128 715 2128 1433 2129 715 2129 1434 2129 1434 2130 715 2130 714 2130 1434 2131 714 2131 1435 2131 1435 2132 714 2132 698 2132 1435 2133 698 2133 1409 2133 752 2134 751 2134 1436 2134 1436 2135 751 2135 1437 2135 1437 2136 751 2136 729 2136 1437 2137 729 2137 1438 2137 1438 2138 729 2138 738 2138 1438 2139 738 2139 1439 2139 1439 2140 738 2140 735 2140 1439 2141 735 2141 1440 2141 1440 2142 735 2142 734 2142 1440 2143 734 2143 1441 2143 1441 2144 734 2144 733 2144 1441 2145 733 2145 1442 2145 1442 2146 733 2146 732 2146 1442 2147 732 2147 1443 2147 1443 2148 732 2148 731 2148 1443 2149 731 2149 1444 2149 1444 2150 731 2150 730 2150 1444 2151 730 2151 1445 2151 1445 2152 730 2152 737 2152 1445 2153 737 2153 1446 2153 1446 2154 737 2154 736 2154 1446 2155 736 2155 1447 2155 1447 2156 736 2156 724 2156 1447 2157 724 2157 1448 2157 1448 2158 724 2158 726 2158 1448 2159 726 2159 1449 2159 1449 2160 726 2160 728 2160 1449 2161 728 2161 1450 2161 1450 2162 728 2162 741 2162 1450 2163 741 2163 1451 2163 1451 2164 741 2164 740 2164 1451 2165 740 2165 1452 2165 1452 2166 740 2166 750 2166 1452 2167 750 2167 1453 2167 1453 2168 750 2168 749 2168 1453 2169 749 2169 1454 2169 1454 2170 749 2170 748 2170 1454 2171 748 2171 1455 2171 1455 2172 748 2172 739 2172 1455 2173 739 2173 1456 2173 1456 2174 739 2174 727 2174 1456 2175 727 2175 1457 2175 1457 2176 727 2176 725 2176 1457 2177 725 2177 1458 2177 1458 2178 725 2178 722 2178 1458 2179 722 2179 1459 2179 722 2180 721 2180 1459 2180 1459 2181 721 2181 1460 2181 1460 2182 721 2182 720 2182 1460 2183 720 2183 1461 2183 1461 2184 720 2184 723 2184 1461 2185 723 2185 1462 2185 1462 2186 723 2186 744 2186 1462 2187 744 2187 1463 2187 1463 2188 744 2188 743 2188 1463 2189 743 2189 1464 2189 1464 2190 743 2190 742 2190 1464 2191 742 2191 1465 2191 1465 2192 742 2192 747 2192 1465 2193 747 2193 1466 2193 1466 2194 747 2194 746 2194 1466 2195 746 2195 1467 2195 1467 2196 746 2196 745 2196 1467 2197 745 2197 1468 2197 1468 2198 745 2198 755 2198 1468 2199 755 2199 1469 2199 1469 2200 755 2200 754 2200 1469 2201 754 2201 1470 2201 1470 2202 754 2202 753 2202 1470 2203 753 2203 1471 2203 1471 2204 753 2204 752 2204 1471 2205 752 2205 1436 2205 765 2206 758 2206 1472 2206 1472 2207 758 2207 1473 2207 1473 2208 758 2208 762 2208 1473 2209 762 2209 1474 2209 1474 2210 762 2210 761 2210 1474 2211 761 2211 1475 2211 1475 2212 761 2212 760 2212 1475 2213 760 2213 1476 2213 1476 2214 760 2214 781 2214 1476 2215 781 2215 1477 2215 1477 2216 781 2216 780 2216 1477 2217 780 2217 1478 2217 1478 2218 780 2218 779 2218 1478 2219 779 2219 1479 2219 1479 2220 779 2220 794 2220 1479 2221 794 2221 1480 2221 1480 2222 794 2222 796 2222 1480 2223 796 2223 1481 2223 1481 2224 796 2224 795 2224 1481 2225 795 2225 1482 2225 1482 2226 795 2226 759 2226 1482 2227 759 2227 1483 2227 1483 2228 759 2228 757 2228 1483 2229 757 2229 1484 2229 1484 2230 757 2230 756 2230 1484 2231 756 2231 1485 2231 1485 2232 756 2232 768 2232 1485 2233 768 2233 1486 2233 1486 2234 768 2234 767 2234 1486 2235 767 2235 1487 2235 1487 2236 767 2236 766 2236 1487 2237 766 2237 1488 2237 1488 2238 766 2238 778 2238 1488 2239 778 2239 1489 2239 1489 2240 778 2240 777 2240 1489 2241 777 2241 1490 2241 1490 2242 777 2242 773 2242 1490 2243 773 2243 1491 2243 1491 2244 773 2244 772 2244 1491 2245 772 2245 1492 2245 1492 2246 772 2246 771 2246 1492 2247 771 2247 1493 2247 1493 2248 771 2248 770 2248 1493 2249 770 2249 1494 2249 1494 2250 770 2250 769 2250 1494 2251 769 2251 1495 2251 1495 2252 769 2252 791 2252 1495 2253 791 2253 1496 2253 1496 2254 791 2254 790 2254 1496 2255 790 2255 1497 2255 1497 2256 790 2256 764 2256 1497 2257 764 2257 1498 2257 1498 2258 764 2258 763 2258 1498 2259 763 2259 1499 2259 1499 2260 763 2260 793 2260 1499 2261 793 2261 1500 2261 1500 2262 793 2262 792 2262 1500 2263 792 2263 1501 2263 1501 2264 792 2264 789 2264 1501 2265 789 2265 1502 2265 1502 2266 789 2266 788 2266 1502 2267 788 2267 1503 2267 1503 2268 788 2268 774 2268 1503 2269 774 2269 1504 2269 1504 2270 774 2270 787 2270 1504 2271 787 2271 1505 2271 1505 2272 787 2272 786 2272 1505 2273 786 2273 1506 2273 1506 2274 786 2274 785 2274 1506 2275 785 2275 1507 2275 1507 2276 785 2276 784 2276 1507 2277 784 2277 1508 2277 1508 2278 784 2278 783 2278 1508 2279 783 2279 1509 2279 1509 2280 783 2280 782 2280 1509 2281 782 2281 1510 2281 1510 2282 782 2282 776 2282 1510 2283 776 2283 1511 2283 1511 2284 776 2284 775 2284 1511 2285 775 2285 1512 2285 1512 2286 775 2286 765 2286 1512 2287 765 2287 1472 2287 808 2288 1513 2288 806 2288 806 2289 1513 2289 1514 2289 806 2290 1514 2290 802 2290 802 2291 1514 2291 1515 2291 802 2292 1515 2292 797 2292 798 2293 797 2293 1516 2293 1516 2294 797 2294 1515 2294 1517 2295 811 2295 799 2295 1517 2296 799 2296 1518 2296 1518 2297 799 2297 798 2297 1518 2298 798 2298 1516 2298 1519 2299 812 2299 801 2299 1519 2300 801 2300 1520 2300 1520 2301 801 2301 800 2301 1520 2302 800 2302 1521 2302 1521 2303 800 2303 807 2303 1521 2304 807 2304 1522 2304 1522 2305 807 2305 811 2305 1522 2306 811 2306 1517 2306 1523 2307 805 2307 804 2307 1523 2308 804 2308 1524 2308 1524 2309 804 2309 803 2309 1524 2310 803 2310 1525 2310 1525 2311 803 2311 816 2311 1525 2312 816 2312 1526 2312 1526 2313 816 2313 815 2313 1526 2314 815 2314 1527 2314 1527 2315 815 2315 814 2315 1527 2316 814 2316 1528 2316 1528 2317 814 2317 813 2317 1528 2318 813 2318 1529 2318 1529 2319 813 2319 812 2319 1529 2320 812 2320 1519 2320 809 2321 805 2321 1530 2321 1530 2322 805 2322 1523 2322 1513 2323 808 2323 810 2323 1513 2324 810 2324 1531 2324 1531 2325 810 2325 819 2325 1531 2326 819 2326 1532 2326 1532 2327 819 2327 818 2327 1532 2328 818 2328 1533 2328 1533 2329 818 2329 817 2329 1533 2330 817 2330 1534 2330 1534 2331 817 2331 825 2331 1534 2332 825 2332 1535 2332 1535 2333 825 2333 822 2333 1535 2334 822 2334 1536 2334 1536 2335 822 2335 824 2335 1536 2336 824 2336 1537 2336 1537 2337 824 2337 823 2337 1537 2338 823 2338 1538 2338 1538 2339 823 2339 821 2339 1538 2340 821 2340 1539 2340 1539 2341 821 2341 820 2341 1539 2342 820 2342 1540 2342 1540 2343 820 2343 809 2343 1540 2344 809 2344 1530 2344 1853 2653 1854 2653 1855 2653 1856 2654 1857 2654 1858 2654 1858 2655 1857 2655 1855 2655 1858 2656 1855 2656 1859 2656 1860 2657 1861 2657 1858 2657 1855 2658 1862 2658 1863 2658 1854 2659 1864 2659 1855 2659 1855 2660 1864 2660 1865 2660 1855 2661 1865 2661 1866 2661 1866 2662 1867 2662 1855 2662 1855 2663 1867 2663 1868 2663 1855 2664 1868 2664 1859 2664 1862 2665 1855 2665 1869 2665 1869 2666 1855 2666 1870 2666 1869 2667 1870 2667 1871 2667 1863 2668 1872 2668 1855 2668 1855 2669 1872 2669 1873 2669 1855 2670 1873 2670 1853 2670 1874 2671 1875 2671 1876 2671 1871 2672 1877 2672 1869 2672 1869 2673 1877 2673 1878 2673 1869 2674 1878 2674 1879 2674 1880 2675 1881 2675 1879 2675 1879 2676 1881 2676 1882 2676 1879 2677 1882 2677 1869 2677 1876 2678 1883 2678 1874 2678 1874 2679 1883 2679 1884 2679 1874 2680 1884 2680 1885 2680 1886 2681 1887 2681 1885 2681 1885 2682 1887 2682 1888 2682 1885 2683 1888 2683 1874 2683 1875 2684 1874 2684 1858 2684 1858 2685 1874 2685 1889 2685 1858 2686 1889 2686 1890 2686 1861 2687 1891 2687 1858 2687 1858 2688 1891 2688 1892 2688 1858 2689 1892 2689 1856 2689 1890 2690 1893 2690 1858 2690 1858 2691 1893 2691 1894 2691 1858 2692 1894 2692 1860 2692 1895 2693 1896 2693 1897 2693 1897 2694 1896 2694 1898 2694 1899 2695 1900 2695 1898 2695 1898 2696 1900 2696 1901 2696 1898 2697 1901 2697 1897 2697 1902 2698 1903 2698 1904 2698 1905 2699 1906 2699 1897 2699 1897 2700 1906 2700 1907 2700 1897 2701 1907 2701 1895 2701 1908 2702 1909 2702 1904 2702 1904 2703 1909 2703 1910 2703 1904 2704 1910 2704 1897 2704 1897 2705 1910 2705 1911 2705 1897 2706 1911 2706 1912 2706 1913 2707 1914 2707 1915 2707 1912 2708 1916 2708 1897 2708 1897 2709 1916 2709 1917 2709 1897 2710 1917 2710 1905 2710 1918 2711 1919 2711 1898 2711 1898 2712 1919 2712 1920 2712 1898 2713 1920 2713 1899 2713 1915 2714 1921 2714 1913 2714 1913 2715 1921 2715 1922 2715 1913 2716 1922 2716 1923 2716 1924 2717 1925 2717 1923 2717 1923 2718 1925 2718 1926 2718 1923 2719 1926 2719 1913 2719 1914 2720 1913 2720 1904 2720 1904 2721 1913 2721 1927 2721 1904 2722 1927 2722 1928 2722 1903 2723 1929 2723 1904 2723 1904 2724 1929 2724 1930 2724 1904 2725 1930 2725 1908 2725 1928 2726 1931 2726 1904 2726 1904 2727 1931 2727 1932 2727 1904 2728 1932 2728 1902 2728 1918 2729 1898 2729 1933 2729 1933 2730 1898 2730 1934 2730 1933 2731 1934 2731 1935 2731 1936 2732 1937 2732 1938 2732 1939 2733 1940 2733 1941 2733 1941 2734 1940 2734 1942 2734 1943 2735 1944 2735 1940 2735 1943 2736 1940 2736 1945 2736 1946 2737 1947 2737 1941 2737 1941 2738 1947 2738 1948 2738 1941 2739 1948 2739 1939 2739 1936 2740 1938 2740 1949 2740 1949 2741 1938 2741 1950 2741 1949 2742 1950 2742 1940 2742 1940 2743 1950 2743 1951 2743 1940 2744 1951 2744 1945 2744 1944 2745 1952 2745 1940 2745 1940 2746 1952 2746 1953 2746 1940 2747 1953 2747 1954 2747 1954 2748 1955 2748 1940 2748 1940 2749 1955 2749 1956 2749 1940 2750 1956 2750 1942 2750 1941 2751 1957 2751 1946 2751 1946 2752 1957 2752 1958 2752 1946 2753 1958 2753 1959 2753 1959 2754 1958 2754 1960 2754 1959 2755 1960 2755 1961 2755 1961 2756 1960 2756 1962 2756 1963 2757 1964 2757 1965 2757 1963 2758 1965 2758 1966 2758 1967 2759 1968 2759 1969 2759 1969 2760 1968 2760 1970 2760 1969 2761 1970 2761 1971 2761 1972 2762 1965 2762 1968 2762 1973 2763 1974 2763 1975 2763 1975 2764 1976 2764 1973 2764 1973 2765 1976 2765 1977 2765 1973 2766 1977 2766 1978 2766 1967 2767 1979 2767 1968 2767 1968 2768 1979 2768 1980 2768 1968 2769 1980 2769 1972 2769 1972 2770 1980 2770 1973 2770 1972 2771 1973 2771 1981 2771 1981 2772 1973 2772 1978 2772 1982 2773 1983 2773 1970 2773 1970 2774 1983 2774 1984 2774 1970 2775 1984 2775 1971 2775 1985 2776 1986 2776 1965 2776 1965 2777 1986 2777 1987 2777 1965 2778 1987 2778 1966 2778 1988 2779 1989 2779 1965 2779 1965 2780 1989 2780 1990 2780 1965 2781 1990 2781 1985 2781 1991 2782 1992 2782 1982 2782 1982 2783 1992 2783 1993 2783 1982 2784 1993 2784 1983 2784 1972 2785 1994 2785 1965 2785 1965 2786 1994 2786 1995 2786 1965 2787 1995 2787 1996 2787 1996 2788 1997 2788 1965 2788 1965 2789 1997 2789 1998 2789 1965 2790 1998 2790 1988 2790 1999 2791 2000 2791 2001 2791 2001 2792 2000 2792 2002 2792 2003 2793 2004 2793 2002 2793 2002 2794 2004 2794 2005 2794 2002 2795 2005 2795 2001 2795 2006 2796 2007 2796 2008 2796 2009 2797 2010 2797 2001 2797 2001 2798 2010 2798 2011 2798 2001 2799 2011 2799 1999 2799 2012 2800 2013 2800 2008 2800 2008 2801 2013 2801 2014 2801 2008 2802 2014 2802 2001 2802 2001 2803 2014 2803 2015 2803 2001 2804 2015 2804 2016 2804 2017 2805 2018 2805 2019 2805 2016 2806 2020 2806 2001 2806 2001 2807 2020 2807 2021 2807 2001 2808 2021 2808 2009 2808 2022 2809 2023 2809 2002 2809 2002 2810 2023 2810 2024 2810 2002 2811 2024 2811 2003 2811 2019 2812 2025 2812 2017 2812 2017 2813 2025 2813 2026 2813 2017 2814 2026 2814 2027 2814 2028 2815 2029 2815 2027 2815 2027 2816 2029 2816 2030 2816 2027 2817 2030 2817 2017 2817 2018 2818 2017 2818 2008 2818 2008 2819 2017 2819 2031 2819 2008 2820 2031 2820 2032 2820 2007 2821 2033 2821 2008 2821 2008 2822 2033 2822 2034 2822 2008 2823 2034 2823 2012 2823 2032 2824 2035 2824 2008 2824 2008 2825 2035 2825 2036 2825 2008 2826 2036 2826 2006 2826 2022 2827 2002 2827 2037 2827 2037 2828 2002 2828 2038 2828 2037 2829 2038 2829 2039 2829 2040 2830 2041 2830 2042 2830 2043 2831 2044 2831 2045 2831 2046 2832 2047 2832 2045 2832 2045 2833 2047 2833 2048 2833 2045 2834 2048 2834 2049 2834 2043 2835 2045 2835 2050 2835 2049 2836 2048 2836 2051 2836 2051 2837 2048 2837 2052 2837 2051 2838 2052 2838 2053 2838 2040 2839 2042 2839 2045 2839 2045 2840 2042 2840 2054 2840 2045 2841 2054 2841 2050 2841 2044 2842 2055 2842 2045 2842 2045 2843 2055 2843 2056 2843 2045 2844 2056 2844 2057 2844 2057 2845 2058 2845 2045 2845 2045 2846 2058 2846 2059 2846 2045 2847 2059 2847 2046 2847 2060 2848 2061 2848 2052 2848 2052 2849 2061 2849 2062 2849 2052 2850 2062 2850 2053 2850 2063 2851 2064 2851 2065 2851 2065 2852 2064 2852 2066 2852 2065 2853 2066 2853 2067 2853 2063 2854 2065 2854 2052 2854 2052 2855 2065 2855 2068 2855 2052 2856 2068 2856 2060 2856 2069 2857 1006 2857 2070 2857 2070 2858 1006 2858 1005 2858 2070 2859 1005 2859 2071 2859 2071 2860 1005 2860 1004 2860 2071 2861 1004 2861 2072 2861 2069 2862 2073 2862 1006 2862 1006 2863 2073 2863 2074 2863 1006 2864 2074 2864 1007 2864 1007 2865 2074 2865 2075 2865 1007 2866 2075 2866 1008 2866 1008 2867 2075 2867 2076 2867 1008 2868 2076 2868 1009 2868 1009 2869 2076 2869 1010 2869 1010 2870 2076 2870 2077 2870 1010 2871 2077 2871 1011 2871 899 2872 898 2872 2078 2872 876 2873 875 2873 2079 2873 2079 2874 875 2874 2080 2874 985 2875 2081 2875 2082 2875 907 2876 2083 2876 908 2876 908 2877 2083 2877 2084 2877 2085 2878 856 2878 2086 2878 2086 2879 856 2879 855 2879 2086 2880 855 2880 854 2880 2087 2881 2088 2881 843 2881 884 2882 2089 2882 2090 2882 2091 2883 878 2883 2079 2883 2079 2884 878 2884 877 2884 2079 2885 877 2885 876 2885 836 2886 2092 2886 837 2886 837 2887 2092 2887 2093 2887 837 2888 2093 2888 838 2888 838 2889 2093 2889 2094 2889 838 2890 2094 2890 839 2890 839 2891 2094 2891 2095 2891 839 2892 2095 2892 840 2892 840 2893 2095 2893 2096 2893 840 2894 2096 2894 841 2894 841 2895 2096 2895 2087 2895 841 2896 2087 2896 842 2896 842 2897 2087 2897 843 2897 1011 2898 2077 2898 1012 2898 1012 2899 2077 2899 2097 2899 1012 2900 2097 2900 1013 2900 1013 2901 2097 2901 2098 2901 1013 2902 2098 2902 826 2902 826 2903 2098 2903 2099 2903 826 2904 2099 2904 827 2904 827 2905 2099 2905 2100 2905 827 2906 2100 2906 828 2906 828 2907 2100 2907 2101 2907 828 2908 2101 2908 829 2908 829 2909 2101 2909 2102 2909 829 2910 2102 2910 830 2910 830 2911 2102 2911 2103 2911 830 2912 2103 2912 831 2912 831 2913 2103 2913 2104 2913 831 2914 2104 2914 832 2914 832 2915 2104 2915 2105 2915 832 2916 2105 2916 833 2916 833 2917 2105 2917 2106 2917 833 2918 2106 2918 834 2918 834 2919 2106 2919 2107 2919 834 2920 2107 2920 835 2920 835 2921 2107 2921 2108 2921 835 2922 2108 2922 836 2922 836 2923 2108 2923 2109 2923 836 2924 2109 2924 2092 2924 2110 2925 2111 2925 869 2925 850 2926 2112 2926 851 2926 851 2927 2112 2927 2113 2927 851 2928 2113 2928 852 2928 852 2929 2113 2929 2114 2929 852 2930 2114 2930 853 2930 853 2931 2114 2931 2115 2931 853 2932 2115 2932 854 2932 854 2933 2115 2933 2116 2933 854 2934 2116 2934 2086 2934 2117 2935 981 2935 2118 2935 2118 2936 981 2936 980 2936 2119 2937 911 2937 2120 2937 2120 2938 911 2938 910 2938 2120 2939 910 2939 2084 2939 2084 2940 910 2940 909 2940 2084 2941 909 2941 908 2941 907 2942 906 2942 2083 2942 2083 2943 906 2943 905 2943 2083 2944 905 2944 2121 2944 905 2945 904 2945 2121 2945 2121 2946 904 2946 903 2946 2121 2947 903 2947 2122 2947 2078 2948 898 2948 2123 2948 2124 2949 889 2949 2125 2949 2125 2950 889 2950 888 2950 869 2951 868 2951 2110 2951 2110 2952 868 2952 867 2952 2110 2953 867 2953 2126 2953 2126 2954 867 2954 866 2954 2126 2955 866 2955 2127 2955 2127 2956 866 2956 865 2956 2127 2957 865 2957 2128 2957 2128 2958 865 2958 864 2958 2128 2959 864 2959 2129 2959 2129 2960 864 2960 863 2960 2129 2961 863 2961 2130 2961 2130 2962 863 2962 862 2962 2130 2963 862 2963 2131 2963 2131 2964 862 2964 861 2964 2131 2965 861 2965 2132 2965 875 2966 874 2966 2080 2966 2080 2967 874 2967 873 2967 2080 2968 873 2968 2133 2968 2133 2969 873 2969 872 2969 2133 2970 872 2970 2134 2970 2134 2971 872 2971 871 2971 2134 2972 871 2972 2111 2972 2111 2973 871 2973 870 2973 2111 2974 870 2974 869 2974 850 2975 849 2975 2112 2975 2112 2976 849 2976 848 2976 2112 2977 848 2977 2135 2977 2135 2978 848 2978 847 2978 847 2979 846 2979 2135 2979 2135 2980 846 2980 845 2980 2135 2981 845 2981 2088 2981 2088 2982 845 2982 844 2982 2088 2983 844 2983 843 2983 985 2984 984 2984 2081 2984 2081 2985 984 2985 983 2985 2081 2986 983 2986 2117 2986 2117 2987 983 2987 982 2987 2117 2988 982 2988 981 2988 903 2989 902 2989 2122 2989 2122 2990 902 2990 901 2990 2122 2991 901 2991 2078 2991 2078 2992 901 2992 900 2992 2078 2993 900 2993 899 2993 884 2994 883 2994 2089 2994 2089 2995 883 2995 882 2995 2089 2996 882 2996 2136 2996 2136 2997 882 2997 881 2997 2136 2998 881 2998 2137 2998 2137 2999 881 2999 880 2999 2137 3000 880 3000 2138 3000 2138 3001 880 3001 879 3001 2138 3002 879 3002 2139 3002 2139 3003 879 3003 878 3003 2139 3004 878 3004 2140 3004 2140 3005 878 3005 2091 3005 861 3006 860 3006 2132 3006 2132 3007 860 3007 859 3007 2132 3008 859 3008 2141 3008 2141 3009 859 3009 858 3009 2141 3010 858 3010 2085 3010 2085 3011 858 3011 857 3011 2085 3012 857 3012 856 3012 1004 3013 1003 3013 2072 3013 2072 3014 1003 3014 1002 3014 2072 3015 1002 3015 2142 3015 1002 3016 1001 3016 2142 3016 2142 3017 1001 3017 1000 3017 2142 3018 1000 3018 2143 3018 1000 3019 999 3019 2143 3019 2143 3020 999 3020 998 3020 2143 3021 998 3021 2144 3021 998 3022 997 3022 2144 3022 2144 3023 997 3023 996 3023 2144 3024 996 3024 2145 3024 980 3025 979 3025 2118 3025 2118 3026 979 3026 978 3026 2118 3027 978 3027 2146 3027 2146 3028 978 3028 977 3028 2146 3029 977 3029 2147 3029 2147 3030 977 3030 976 3030 2147 3031 976 3031 2148 3031 2148 3032 976 3032 975 3032 2148 3033 975 3033 2149 3033 2149 3034 975 3034 974 3034 2149 3035 974 3035 2150 3035 2150 3036 974 3036 2151 3036 2152 3037 914 3037 2153 3037 2153 3038 914 3038 913 3038 2153 3039 913 3039 2154 3039 2154 3040 913 3040 912 3040 2154 3041 912 3041 2155 3041 2155 3042 912 3042 911 3042 2155 3043 911 3043 2156 3043 2156 3044 911 3044 2119 3044 898 3045 897 3045 2123 3045 2123 3046 897 3046 896 3046 2123 3047 896 3047 2157 3047 893 3048 2158 3048 894 3048 894 3049 2158 3049 2157 3049 894 3050 2157 3050 895 3050 895 3051 2157 3051 896 3051 888 3052 887 3052 2125 3052 2125 3053 887 3053 886 3053 2125 3054 886 3054 2090 3054 2090 3055 886 3055 885 3055 2090 3056 885 3056 884 3056 2159 3057 2160 3057 992 3057 992 3058 991 3058 2159 3058 2159 3059 991 3059 990 3059 2159 3060 990 3060 989 3060 893 3061 892 3061 2158 3061 2158 3062 892 3062 891 3062 2158 3063 891 3063 2124 3063 2124 3064 891 3064 890 3064 2124 3065 890 3065 889 3065 996 3066 995 3066 2145 3066 2145 3067 995 3067 994 3067 2145 3068 994 3068 2160 3068 2160 3069 994 3069 993 3069 2160 3070 993 3070 992 3070 989 3071 988 3071 2159 3071 2159 3072 988 3072 987 3072 2159 3073 987 3073 2082 3073 2082 3074 987 3074 986 3074 2082 3075 986 3075 985 3075 2151 3076 974 3076 2161 3076 2161 3077 974 3077 973 3077 2161 3078 973 3078 2162 3078 2162 3079 973 3079 972 3079 2162 3080 972 3080 2163 3080 2163 3081 972 3081 971 3081 2163 3082 971 3082 2164 3082 2164 3083 971 3083 970 3083 2164 3084 970 3084 2165 3084 2165 3085 970 3085 969 3085 2165 3086 969 3086 2166 3086 2167 3087 920 3087 2168 3087 2168 3088 920 3088 919 3088 2168 3089 919 3089 2169 3089 969 3090 968 3090 2166 3090 2166 3091 968 3091 967 3091 2166 3092 967 3092 2170 3092 2170 3093 967 3093 966 3093 2170 3094 966 3094 2171 3094 2171 3095 966 3095 965 3095 2171 3096 965 3096 2172 3096 2172 3097 965 3097 964 3097 2172 3098 964 3098 2173 3098 2173 3099 964 3099 963 3099 2173 3100 963 3100 2174 3100 2174 3101 963 3101 962 3101 2174 3102 962 3102 2175 3102 2175 3103 962 3103 961 3103 2175 3104 961 3104 2176 3104 2176 3105 961 3105 960 3105 2176 3106 960 3106 2177 3106 2177 3107 960 3107 959 3107 2177 3108 959 3108 2178 3108 2178 3109 959 3109 958 3109 2178 3110 958 3110 2179 3110 2179 3111 958 3111 957 3111 2179 3112 957 3112 2180 3112 2180 3113 957 3113 2181 3113 2181 3114 957 3114 956 3114 2181 3115 956 3115 2182 3115 2182 3116 956 3116 955 3116 2182 3117 955 3117 2183 3117 2184 3118 2185 3118 937 3118 919 3119 918 3119 2169 3119 2169 3120 918 3120 917 3120 2169 3121 917 3121 2186 3121 2186 3122 917 3122 916 3122 2186 3123 916 3123 2152 3123 2152 3124 916 3124 915 3124 2152 3125 915 3125 914 3125 2187 3126 924 3126 2188 3126 2188 3127 924 3127 923 3127 2188 3128 923 3128 2189 3128 2189 3129 923 3129 922 3129 2189 3130 922 3130 2167 3130 2167 3131 922 3131 921 3131 2167 3132 921 3132 920 3132 2190 3133 927 3133 2191 3133 2191 3134 927 3134 926 3134 2191 3135 926 3135 2187 3135 2187 3136 926 3136 925 3136 2187 3137 925 3137 924 3137 2192 3138 939 3138 2185 3138 2185 3139 939 3139 938 3139 2185 3140 938 3140 937 3140 937 3141 936 3141 2184 3141 2184 3142 936 3142 935 3142 2184 3143 935 3143 2193 3143 2193 3144 935 3144 934 3144 2193 3145 934 3145 2194 3145 2194 3146 934 3146 933 3146 2194 3147 933 3147 2195 3147 2195 3148 933 3148 932 3148 2195 3149 932 3149 2196 3149 2196 3150 932 3150 931 3150 2196 3151 931 3151 2197 3151 2197 3152 931 3152 930 3152 2197 3153 930 3153 2198 3153 2198 3154 930 3154 929 3154 2198 3155 929 3155 2190 3155 2190 3156 929 3156 928 3156 2190 3157 928 3157 927 3157 952 3158 2199 3158 953 3158 953 3159 2199 3159 2183 3159 953 3160 2183 3160 954 3160 954 3161 2183 3161 955 3161 2200 3162 2201 3162 947 3162 947 3163 2201 3163 948 3163 952 3164 951 3164 2199 3164 2199 3165 951 3165 950 3165 2199 3166 950 3166 2201 3166 2201 3167 950 3167 949 3167 2201 3168 949 3168 948 3168 947 3169 946 3169 2200 3169 2200 3170 946 3170 945 3170 2200 3171 945 3171 2202 3171 2202 3172 945 3172 944 3172 2202 3173 944 3173 943 3173 943 3174 942 3174 2202 3174 2202 3175 942 3175 941 3175 2202 3176 941 3176 2192 3176 2192 3177 941 3177 940 3177 2192 3178 940 3178 939 3178 2106 3179 2203 3179 2204 3179 2106 3180 2204 3180 2107 3180 2107 3181 2204 3181 2205 3181 2107 3182 2205 3182 2108 3182 2108 3183 2205 3183 2206 3183 2108 3184 2206 3184 2109 3184 2109 3185 2206 3185 2207 3185 2109 3186 2207 3186 2092 3186 2092 3187 2207 3187 2208 3187 2092 3188 2208 3188 2093 3188 2093 3189 2208 3189 2209 3189 2093 3190 2209 3190 2094 3190 2094 3191 2209 3191 2210 3191 2094 3192 2210 3192 2095 3192 2095 3193 2210 3193 2211 3193 2095 3194 2211 3194 2096 3194 2199 3195 2212 3195 2213 3195 2199 3196 2213 3196 2183 3196 2183 3197 2213 3197 2214 3197 2183 3198 2214 3198 2182 3198 2182 3199 2214 3199 2215 3199 2182 3200 2215 3200 2181 3200 2181 3201 2215 3201 2216 3201 2181 3202 2216 3202 2180 3202 2180 3203 2216 3203 2217 3203 2180 3204 2217 3204 2179 3204 2179 3205 2217 3205 2218 3205 2179 3206 2218 3206 2178 3206 2178 3207 2218 3207 2219 3207 2178 3208 2219 3208 2177 3208 2177 3209 2219 3209 2220 3209 2177 3210 2220 3210 2176 3210 2221 3211 2175 3211 2220 3211 2220 3212 2175 3212 2176 3212 2175 3213 2221 3213 2222 3213 2175 3214 2222 3214 2174 3214 2174 3215 2222 3215 2223 3215 2174 3216 2223 3216 2173 3216 2173 3217 2223 3217 2224 3217 2173 3218 2224 3218 2172 3218 2172 3219 2224 3219 2225 3219 2172 3220 2225 3220 2171 3220 2171 3221 2225 3221 2226 3221 2171 3222 2226 3222 2170 3222 2170 3223 2226 3223 2227 3223 2170 3224 2227 3224 2166 3224 2166 3225 2227 3225 2228 3225 2166 3226 2228 3226 2165 3226 2164 3227 2165 3227 2229 3227 2229 3228 2165 3228 2228 3228 2164 3229 2229 3229 2230 3229 2164 3230 2230 3230 2163 3230 2163 3231 2230 3231 2231 3231 2163 3232 2231 3232 2162 3232 2162 3233 2231 3233 2232 3233 2162 3234 2232 3234 2161 3234 2233 3235 2151 3235 2232 3235 2232 3236 2151 3236 2161 3236 2151 3237 2233 3237 2234 3237 2151 3238 2234 3238 2150 3238 2150 3239 2234 3239 2235 3239 2150 3240 2235 3240 2149 3240 2149 3241 2235 3241 2236 3241 2149 3242 2236 3242 2148 3242 2148 3243 2236 3243 2237 3243 2148 3244 2237 3244 2147 3244 2147 3245 2237 3245 2238 3245 2147 3246 2238 3246 2146 3246 2146 3247 2238 3247 2239 3247 2146 3248 2239 3248 2118 3248 2118 3249 2239 3249 2240 3249 2118 3250 2240 3250 2117 3250 2117 3251 2240 3251 2241 3251 2117 3252 2241 3252 2081 3252 2081 3253 2241 3253 2242 3253 2081 3254 2242 3254 2082 3254 2082 3255 2242 3255 2243 3255 2082 3256 2243 3256 2159 3256 2159 3257 2243 3257 2244 3257 2159 3258 2244 3258 2160 3258 2244 3259 2245 3259 2160 3259 2160 3260 2245 3260 2246 3260 2160 3261 2246 3261 2145 3261 2145 3262 2246 3262 2247 3262 2145 3263 2247 3263 2144 3263 2144 3264 2247 3264 2248 3264 2144 3265 2248 3265 2143 3265 2143 3266 2248 3266 2249 3266 2143 3267 2249 3267 2142 3267 2142 3268 2249 3268 2250 3268 2142 3269 2250 3269 2072 3269 2072 3270 2250 3270 2251 3270 2072 3271 2251 3271 2071 3271 2071 3272 2251 3272 2252 3272 2071 3273 2252 3273 2070 3273 2070 3274 2252 3274 2253 3274 2070 3275 2253 3275 2069 3275 2069 3276 2253 3276 2254 3276 2069 3277 2254 3277 2073 3277 2073 3278 2254 3278 2255 3278 2073 3279 2255 3279 2074 3279 2256 3280 2075 3280 2255 3280 2255 3281 2075 3281 2074 3281 2075 3282 2256 3282 2257 3282 2075 3283 2257 3283 2076 3283 2076 3284 2257 3284 2258 3284 2076 3285 2258 3285 2077 3285 2077 3286 2258 3286 2259 3286 2077 3287 2259 3287 2097 3287 2098 3288 2097 3288 2260 3288 2260 3289 2097 3289 2259 3289 2098 3290 2260 3290 2261 3290 2098 3291 2261 3291 2099 3291 2099 3292 2261 3292 2262 3292 2099 3293 2262 3293 2100 3293 2100 3294 2262 3294 2263 3294 2100 3295 2263 3295 2101 3295 2101 3296 2263 3296 2264 3296 2101 3297 2264 3297 2102 3297 2102 3298 2264 3298 2265 3298 2102 3299 2265 3299 2103 3299 2103 3300 2265 3300 2266 3300 2103 3301 2266 3301 2104 3301 2104 3302 2266 3302 2267 3302 2104 3303 2267 3303 2105 3303 2203 3304 2106 3304 2267 3304 2267 3305 2106 3305 2105 3305 1858 5185 1859 5185 3332 5185 3332 5186 1859 5186 3333 5186 3333 5187 1859 5187 1868 5187 3333 5188 1868 5188 3334 5188 3334 5189 1868 5189 1867 5189 3334 5190 1867 5190 3335 5190 3335 5191 1867 5191 1866 5191 3335 5192 1866 5192 3336 5192 3336 5193 1866 5193 1865 5193 3336 5194 1865 5194 3337 5194 3337 5195 1865 5195 1864 5195 3337 5196 1864 5196 3338 5196 3338 5197 1864 5197 1854 5197 3338 5198 1854 5198 3339 5198 3339 5199 1854 5199 1853 5199 3339 5200 1853 5200 3340 5200 3340 5201 1853 5201 1873 5201 3340 5202 1873 5202 3341 5202 3341 5203 1873 5203 1872 5203 3341 5204 1872 5204 3342 5204 3342 5205 1872 5205 1863 5205 3342 5206 1863 5206 3343 5206 3343 5207 1863 5207 1862 5207 3343 5208 1862 5208 3344 5208 3344 5209 1862 5209 1869 5209 3344 5210 1869 5210 3345 5210 3345 5211 1869 5211 1882 5211 3345 5212 1882 5212 3346 5212 3346 5213 1882 5213 1881 5213 3346 5214 1881 5214 3347 5214 3347 5215 1881 5215 1880 5215 3347 5216 1880 5216 3348 5216 3348 5217 1880 5217 1879 5217 3348 5218 1879 5218 3349 5218 3349 5219 1879 5219 1878 5219 3349 5220 1878 5220 3350 5220 3350 5221 1878 5221 1877 5221 3350 5222 1877 5222 3351 5222 3351 5223 1877 5223 1871 5223 3351 5224 1871 5224 3352 5224 3352 5225 1871 5225 1870 5225 3352 5226 1870 5226 3353 5226 3353 5227 1870 5227 1855 5227 3353 5228 1855 5228 3354 5228 3354 5229 1855 5229 1857 5229 3354 5230 1857 5230 3355 5230 3355 5231 1857 5231 1856 5231 3355 5232 1856 5232 3356 5232 3356 5233 1856 5233 1892 5233 3356 5234 1892 5234 3357 5234 3357 5235 1892 5235 1891 5235 3357 5236 1891 5236 3358 5236 3358 5237 1891 5237 1861 5237 3358 5238 1861 5238 3359 5238 3359 5239 1861 5239 1860 5239 3359 5240 1860 5240 3360 5240 3360 5241 1860 5241 1894 5241 3360 5242 1894 5242 3361 5242 3361 5243 1894 5243 1893 5243 3361 5244 1893 5244 3362 5244 3362 5245 1893 5245 1890 5245 3362 5246 1890 5246 3363 5246 3363 5247 1890 5247 1889 5247 3363 5248 1889 5248 3364 5248 3364 5249 1889 5249 1874 5249 3364 5250 1874 5250 3365 5250 3365 5251 1874 5251 1888 5251 3365 5252 1888 5252 3366 5252 3366 5253 1888 5253 1887 5253 3366 5254 1887 5254 3367 5254 3367 5255 1887 5255 1886 5255 3367 5256 1886 5256 3368 5256 3368 5257 1886 5257 1885 5257 3368 5258 1885 5258 3369 5258 3369 5259 1885 5259 1884 5259 3369 5260 1884 5260 3370 5260 3370 5261 1884 5261 1883 5261 3370 5262 1883 5262 3371 5262 3371 5263 1883 5263 1876 5263 3371 5264 1876 5264 3372 5264 3372 5265 1876 5265 1875 5265 3372 5266 1875 5266 3373 5266 3373 5267 1875 5267 1858 5267 3373 5268 1858 5268 3332 5268 1904 5269 1897 5269 3374 5269 3374 5270 1897 5270 3375 5270 3375 5271 1897 5271 1901 5271 3375 5272 1901 5272 3376 5272 3376 5273 1901 5273 1900 5273 3376 5274 1900 5274 3377 5274 3377 5275 1900 5275 1899 5275 3377 5276 1899 5276 3378 5276 3378 5277 1899 5277 1920 5277 3378 5278 1920 5278 3379 5278 3379 5279 1920 5279 1919 5279 3379 5280 1919 5280 3380 5280 3380 5281 1919 5281 1918 5281 3380 5282 1918 5282 3381 5282 3381 5283 1918 5283 1933 5283 3381 5284 1933 5284 3382 5284 3382 5285 1933 5285 1935 5285 3382 5286 1935 5286 3383 5286 3383 5287 1935 5287 1934 5287 3383 5288 1934 5288 3384 5288 3384 5289 1934 5289 1898 5289 3384 5290 1898 5290 3385 5290 3385 5291 1898 5291 1896 5291 3385 5292 1896 5292 3386 5292 3386 5293 1896 5293 1895 5293 3386 5294 1895 5294 3387 5294 3387 5295 1895 5295 1907 5295 3387 5296 1907 5296 3388 5296 3388 5297 1907 5297 1906 5297 3388 5298 1906 5298 3389 5298 3389 5299 1906 5299 1905 5299 3389 5300 1905 5300 3390 5300 3390 5301 1905 5301 1917 5301 3390 5302 1917 5302 3391 5302 3391 5303 1917 5303 1916 5303 3391 5304 1916 5304 3392 5304 3392 5305 1916 5305 1912 5305 3392 5306 1912 5306 3393 5306 3393 5307 1912 5307 1911 5307 3393 5308 1911 5308 3394 5308 3394 5309 1911 5309 1910 5309 3394 5310 1910 5310 3395 5310 3395 5311 1910 5311 1909 5311 3395 5312 1909 5312 3396 5312 3396 5313 1909 5313 1908 5313 3396 5314 1908 5314 3397 5314 3397 5315 1908 5315 1930 5315 3397 5316 1930 5316 3398 5316 3398 5317 1930 5317 1929 5317 3398 5318 1929 5318 3399 5318 3399 5319 1929 5319 1903 5319 3399 5320 1903 5320 3400 5320 3400 5321 1903 5321 1902 5321 3400 5322 1902 5322 3401 5322 3401 5323 1902 5323 1932 5323 3401 5324 1932 5324 3402 5324 3402 5325 1932 5325 1931 5325 3402 5326 1931 5326 3403 5326 3403 5327 1931 5327 1928 5327 3403 5328 1928 5328 3404 5328 3404 5329 1928 5329 1927 5329 3404 5330 1927 5330 3405 5330 3405 5331 1927 5331 1913 5331 3405 5332 1913 5332 3406 5332 3406 5333 1913 5333 1926 5333 3406 5334 1926 5334 3407 5334 3407 5335 1926 5335 1925 5335 3407 5336 1925 5336 3408 5336 3408 5337 1925 5337 1924 5337 3408 5338 1924 5338 3409 5338 3409 5339 1924 5339 1923 5339 3409 5340 1923 5340 3410 5340 3410 5341 1923 5341 1922 5341 3410 5342 1922 5342 3411 5342 3411 5343 1922 5343 1921 5343 3411 5344 1921 5344 3412 5344 3412 5345 1921 5345 1915 5345 3412 5346 1915 5346 3413 5346 3413 5347 1915 5347 1914 5347 3413 5348 1914 5348 3414 5348 3414 5349 1914 5349 1904 5349 3414 5350 1904 5350 3374 5350 1941 5351 1942 5351 3415 5351 3415 5352 1942 5352 3416 5352 3416 5353 1942 5353 1956 5353 3416 5354 1956 5354 3417 5354 3417 5355 1956 5355 1955 5355 3417 5356 1955 5356 3418 5356 3418 5357 1955 5357 1954 5357 3418 5358 1954 5358 3419 5358 3419 5359 1954 5359 1953 5359 3419 5360 1953 5360 3420 5360 3420 5361 1953 5361 1952 5361 3420 5362 1952 5362 3421 5362 3421 5363 1952 5363 1944 5363 3421 5364 1944 5364 3422 5364 3422 5365 1944 5365 1943 5365 3422 5366 1943 5366 3423 5366 3423 5367 1943 5367 1945 5367 3423 5368 1945 5368 3424 5368 3424 5369 1945 5369 1951 5369 3424 5370 1951 5370 3425 5370 3425 5371 1951 5371 1950 5371 3425 5372 1950 5372 3426 5372 3426 5373 1950 5373 1938 5373 3426 5374 1938 5374 3427 5374 3427 5375 1938 5375 1937 5375 3427 5376 1937 5376 3428 5376 1937 5377 1936 5377 3428 5377 3428 5378 1936 5378 3429 5378 3429 5379 1936 5379 1949 5379 1939 5380 3430 5380 1940 5380 1940 5381 3430 5381 3431 5381 1940 5382 3431 5382 1949 5382 1949 5383 3431 5383 3432 5383 1949 5384 3432 5384 3429 5384 3430 5385 1939 5385 1948 5385 3430 5386 1948 5386 3433 5386 3433 5387 1948 5387 1947 5387 3433 5388 1947 5388 3434 5388 3434 5389 1947 5389 1946 5389 3434 5390 1946 5390 3435 5390 3435 5391 1946 5391 1959 5391 3435 5392 1959 5392 3436 5392 3436 5393 1959 5393 1961 5393 3436 5394 1961 5394 3437 5394 3437 5395 1961 5395 1962 5395 3437 5396 1962 5396 3438 5396 3438 5397 1962 5397 1960 5397 3438 5398 1960 5398 3439 5398 3439 5399 1960 5399 1958 5399 3439 5400 1958 5400 3440 5400 3440 5401 1958 5401 1957 5401 3440 5402 1957 5402 3441 5402 3441 5403 1957 5403 1941 5403 3441 5404 1941 5404 3415 5404 1995 5405 1994 5405 3442 5405 3442 5406 1994 5406 3443 5406 3443 5407 1994 5407 1972 5407 3443 5408 1972 5408 3444 5408 3444 5409 1972 5409 1981 5409 3444 5410 1981 5410 3445 5410 3445 5411 1981 5411 1978 5411 3445 5412 1978 5412 3446 5412 3446 5413 1978 5413 1977 5413 3446 5414 1977 5414 3447 5414 3447 5415 1977 5415 1976 5415 3447 5416 1976 5416 3448 5416 3448 5417 1976 5417 1975 5417 3448 5418 1975 5418 3449 5418 3449 5419 1975 5419 1974 5419 3449 5420 1974 5420 3450 5420 3450 5421 1974 5421 1973 5421 3450 5422 1973 5422 3451 5422 3451 5423 1973 5423 1980 5423 3451 5424 1980 5424 3452 5424 3452 5425 1980 5425 1979 5425 3452 5426 1979 5426 3453 5426 3453 5427 1979 5427 1967 5427 3453 5428 1967 5428 3454 5428 3454 5429 1967 5429 1969 5429 3454 5430 1969 5430 3455 5430 3455 5431 1969 5431 1971 5431 3455 5432 1971 5432 3456 5432 3456 5433 1971 5433 1984 5433 3456 5434 1984 5434 3457 5434 3457 5435 1984 5435 1983 5435 3457 5436 1983 5436 3458 5436 3458 5437 1983 5437 1993 5437 3458 5438 1993 5438 3459 5438 3459 5439 1993 5439 1992 5439 3459 5440 1992 5440 3460 5440 3460 5441 1992 5441 1991 5441 3460 5442 1991 5442 3461 5442 3461 5443 1991 5443 1982 5443 3461 5444 1982 5444 3462 5444 3462 5445 1982 5445 1970 5445 3462 5446 1970 5446 3463 5446 3463 5447 1970 5447 1968 5447 3463 5448 1968 5448 3464 5448 3464 5449 1968 5449 1965 5449 3464 5450 1965 5450 3465 5450 1965 5451 1964 5451 3465 5451 3465 5452 1964 5452 3466 5452 3466 5453 1964 5453 1963 5453 3466 5454 1963 5454 3467 5454 3467 5455 1963 5455 1966 5455 3467 5456 1966 5456 3468 5456 3468 5457 1966 5457 1987 5457 3468 5458 1987 5458 3469 5458 3469 5459 1987 5459 1986 5459 3469 5460 1986 5460 3470 5460 3470 5461 1986 5461 1985 5461 3470 5462 1985 5462 3471 5462 3471 5463 1985 5463 1990 5463 3471 5464 1990 5464 3472 5464 3472 5465 1990 5465 1989 5465 3472 5466 1989 5466 3473 5466 3473 5467 1989 5467 1988 5467 3473 5468 1988 5468 3474 5468 3474 5469 1988 5469 1998 5469 3474 5470 1998 5470 3475 5470 3475 5471 1998 5471 1997 5471 3475 5472 1997 5472 3476 5472 3476 5473 1997 5473 1996 5473 3476 5474 1996 5474 3477 5474 3477 5475 1996 5475 1995 5475 3477 5476 1995 5476 3442 5476 2008 5477 2001 5477 3478 5477 3478 5478 2001 5478 3479 5478 3479 5479 2001 5479 2005 5479 3479 5480 2005 5480 3480 5480 3480 5481 2005 5481 2004 5481 3480 5482 2004 5482 3481 5482 3481 5483 2004 5483 2003 5483 3481 5484 2003 5484 3482 5484 3482 5485 2003 5485 2024 5485 3482 5486 2024 5486 3483 5486 3483 5487 2024 5487 2023 5487 3483 5488 2023 5488 3484 5488 3484 5489 2023 5489 2022 5489 3484 5490 2022 5490 3485 5490 3485 5491 2022 5491 2037 5491 3485 5492 2037 5492 3486 5492 3486 5493 2037 5493 2039 5493 3486 5494 2039 5494 3487 5494 3487 5495 2039 5495 2038 5495 3487 5496 2038 5496 3488 5496 3488 5497 2038 5497 2002 5497 3488 5498 2002 5498 3489 5498 3489 5499 2002 5499 2000 5499 3489 5500 2000 5500 3490 5500 3490 5501 2000 5501 1999 5501 3490 5502 1999 5502 3491 5502 3491 5503 1999 5503 2011 5503 3491 5504 2011 5504 3492 5504 3492 5505 2011 5505 2010 5505 3492 5506 2010 5506 3493 5506 3493 5507 2010 5507 2009 5507 3493 5508 2009 5508 3494 5508 3494 5509 2009 5509 2021 5509 3494 5510 2021 5510 3495 5510 3495 5511 2021 5511 2020 5511 3495 5512 2020 5512 3496 5512 3496 5513 2020 5513 2016 5513 3496 5514 2016 5514 3497 5514 3497 5515 2016 5515 2015 5515 3497 5516 2015 5516 3498 5516 3498 5517 2015 5517 2014 5517 3498 5518 2014 5518 3499 5518 3499 5519 2014 5519 2013 5519 3499 5520 2013 5520 3500 5520 3500 5521 2013 5521 2012 5521 3500 5522 2012 5522 3501 5522 3501 5523 2012 5523 2034 5523 3501 5524 2034 5524 3502 5524 3502 5525 2034 5525 2033 5525 3502 5526 2033 5526 3503 5526 3503 5527 2033 5527 2007 5527 3503 5528 2007 5528 3504 5528 3504 5529 2007 5529 2006 5529 3504 5530 2006 5530 3505 5530 3505 5531 2006 5531 2036 5531 3505 5532 2036 5532 3506 5532 3506 5533 2036 5533 2035 5533 3506 5534 2035 5534 3507 5534 3507 5535 2035 5535 2032 5535 3507 5536 2032 5536 3508 5536 3508 5537 2032 5537 2031 5537 3508 5538 2031 5538 3509 5538 3509 5539 2031 5539 2017 5539 3509 5540 2017 5540 3510 5540 3510 5541 2017 5541 2030 5541 3510 5542 2030 5542 3511 5542 3511 5543 2030 5543 2029 5543 3511 5544 2029 5544 3512 5544 3512 5545 2029 5545 2028 5545 3512 5546 2028 5546 3513 5546 3513 5547 2028 5547 2027 5547 3513 5548 2027 5548 3514 5548 3514 5549 2027 5549 2026 5549 3514 5550 2026 5550 3515 5550 3515 5551 2026 5551 2025 5551 3515 5552 2025 5552 3516 5552 3516 5553 2025 5553 2019 5553 3516 5554 2019 5554 3517 5554 3517 5555 2019 5555 2018 5555 3517 5556 2018 5556 3518 5556 3518 5557 2018 5557 2008 5557 3518 5558 2008 5558 3478 5558 2051 5559 3519 5559 2049 5559 2049 5560 3519 5560 3520 5560 2049 5561 3520 5561 2045 5561 2045 5562 3520 5562 3521 5562 2045 5563 3521 5563 2040 5563 2041 5564 2040 5564 3522 5564 3522 5565 2040 5565 3521 5565 3523 5566 2054 5566 2042 5566 3523 5567 2042 5567 3524 5567 3524 5568 2042 5568 2041 5568 3524 5569 2041 5569 3522 5569 3525 5570 2055 5570 2044 5570 3525 5571 2044 5571 3526 5571 3526 5572 2044 5572 2043 5572 3526 5573 2043 5573 3527 5573 3527 5574 2043 5574 2050 5574 3527 5575 2050 5575 3528 5575 3528 5576 2050 5576 2054 5576 3528 5577 2054 5577 3523 5577 3529 5578 2048 5578 2047 5578 3529 5579 2047 5579 3530 5579 3530 5580 2047 5580 2046 5580 3530 5581 2046 5581 3531 5581 3531 5582 2046 5582 2059 5582 3531 5583 2059 5583 3532 5583 3532 5584 2059 5584 2058 5584 3532 5585 2058 5585 3533 5585 3533 5586 2058 5586 2057 5586 3533 5587 2057 5587 3534 5587 3534 5588 2057 5588 2056 5588 3534 5589 2056 5589 3535 5589 3535 5590 2056 5590 2055 5590 3535 5591 2055 5591 3525 5591 2052 5592 2048 5592 3536 5592 3536 5593 2048 5593 3529 5593 3519 5594 2051 5594 2053 5594 3519 5595 2053 5595 3537 5595 3537 5596 2053 5596 2062 5596 3537 5597 2062 5597 3538 5597 3538 5598 2062 5598 2061 5598 3538 5599 2061 5599 3539 5599 3539 5600 2061 5600 2060 5600 3539 5601 2060 5601 3540 5601 3540 5602 2060 5602 2068 5602 3540 5603 2068 5603 3541 5603 3541 5604 2068 5604 2065 5604 3541 5605 2065 5605 3542 5605 3542 5606 2065 5606 2067 5606 3542 5607 2067 5607 3543 5607 3543 5608 2067 5608 2066 5608 3543 5609 2066 5609 3544 5609 3544 5610 2066 5610 2064 5610 3544 5611 2064 5611 3545 5611 3545 5612 2064 5612 2063 5612 3545 5613 2063 5613 3546 5613 3546 5614 2063 5614 2052 5614 3546 5615 2052 5615 3536 5615 2198 5616 3547 5616 3548 5616 2198 5617 3548 5617 2197 5617 2197 5618 3548 5618 3549 5618 2197 5619 3549 5619 2196 5619 2196 5620 3549 5620 3550 5620 2196 5621 3550 5621 2195 5621 2195 5622 3550 5622 3551 5622 2195 5623 3551 5623 2194 5623 2194 5624 3551 5624 3552 5624 2194 5625 3552 5625 2193 5625 2193 5626 3552 5626 3553 5626 2193 5627 3553 5627 2184 5627 2184 5628 3553 5628 3554 5628 2184 5629 3554 5629 2185 5629 2185 5630 3554 5630 3555 5630 2185 5631 3555 5631 2192 5631 2192 5632 3555 5632 3556 5632 2192 5633 3556 5633 2202 5633 2202 5634 3556 5634 3557 5634 2202 5635 3557 5635 2200 5635 2200 5636 3557 5636 3558 5636 2200 5637 3558 5637 2201 5637 2201 5638 3558 5638 2212 5638 2201 5639 2212 5639 2199 5639 2096 5640 2211 5640 3559 5640 2096 5641 3559 5641 2087 5641 2087 5642 3559 5642 3560 5642 2087 5643 3560 5643 2088 5643 2088 5644 3560 5644 3561 5644 2088 5645 3561 5645 2135 5645 2135 5646 3561 5646 3562 5646 2135 5647 3562 5647 2112 5647 2112 5648 3562 5648 3563 5648 2112 5649 3563 5649 2113 5649 2113 5650 3563 5650 3564 5650 2113 5651 3564 5651 2114 5651 2114 5652 3564 5652 3565 5652 2114 5653 3565 5653 2115 5653 2115 5654 3565 5654 3566 5654 2115 5655 3566 5655 2116 5655 2116 5656 3566 5656 3567 5656 2116 5657 3567 5657 2086 5657 2086 5658 3567 5658 3568 5658 2086 5659 3568 5659 2085 5659 2085 5660 3568 5660 3569 5660 2085 5661 3569 5661 2141 5661 2141 5662 3569 5662 3570 5662 2141 5663 3570 5663 2132 5663 3570 5664 3571 5664 2132 5664 2132 5665 3571 5665 2131 5665 2131 5666 3571 5666 3572 5666 2131 5667 3572 5667 2130 5667 2130 5668 3572 5668 3573 5668 2130 5669 3573 5669 2129 5669 2129 5670 3573 5670 3574 5670 2129 5671 3574 5671 2128 5671 2128 5672 3574 5672 3575 5672 2128 5673 3575 5673 2127 5673 2127 5674 3575 5674 3576 5674 2127 5675 3576 5675 2126 5675 2126 5676 3576 5676 3577 5676 2126 5677 3577 5677 2110 5677 2110 5678 3577 5678 3578 5678 2110 5679 3578 5679 2111 5679 2134 5680 2111 5680 3579 5680 3579 5681 2111 5681 3578 5681 2134 5682 3579 5682 3580 5682 2134 5683 3580 5683 2133 5683 2133 5684 3580 5684 3581 5684 2133 5685 3581 5685 2080 5685 2080 5686 3581 5686 3582 5686 2080 5687 3582 5687 2079 5687 3582 5688 3583 5688 2079 5688 2079 5689 3583 5689 2091 5689 2091 5690 3583 5690 3584 5690 2091 5691 3584 5691 2140 5691 2140 5692 3584 5692 3585 5692 2140 5693 3585 5693 2139 5693 2139 5694 3585 5694 3586 5694 2139 5695 3586 5695 2138 5695 2138 5696 3586 5696 3587 5696 2138 5697 3587 5697 2137 5697 2137 5698 3587 5698 3588 5698 2137 5699 3588 5699 2136 5699 2136 5700 3588 5700 3589 5700 2136 5701 3589 5701 2089 5701 2089 5702 3589 5702 3590 5702 2089 5703 3590 5703 2090 5703 2090 5704 3590 5704 3591 5704 2090 5705 3591 5705 2125 5705 2125 5706 3591 5706 3592 5706 2125 5707 3592 5707 2124 5707 2124 5708 3592 5708 3593 5708 2124 5709 3593 5709 2158 5709 2158 5710 3593 5710 3594 5710 2158 5711 3594 5711 2157 5711 3594 5712 3595 5712 2157 5712 2157 5713 3595 5713 3596 5713 2157 5714 3596 5714 2123 5714 2123 5715 3596 5715 3597 5715 2123 5716 3597 5716 2078 5716 2078 5717 3597 5717 3598 5717 2078 5718 3598 5718 2122 5718 2122 5719 3598 5719 3599 5719 2122 5720 3599 5720 2121 5720 2121 5721 3599 5721 3600 5721 2121 5722 3600 5722 2083 5722 2083 5723 3600 5723 3601 5723 2083 5724 3601 5724 2084 5724 2084 5725 3601 5725 3602 5725 2084 5726 3602 5726 2120 5726 2120 5727 3602 5727 3603 5727 2120 5728 3603 5728 2119 5728 2119 5729 3603 5729 3604 5729 2119 5730 3604 5730 2156 5730 2156 5731 3604 5731 3605 5731 2156 5732 3605 5732 2155 5732 3605 5733 3606 5733 2155 5733 2155 5734 3606 5734 2154 5734 2154 5735 3606 5735 3607 5735 2154 5736 3607 5736 2153 5736 2153 5737 3607 5737 3608 5737 2153 5738 3608 5738 2152 5738 2152 5739 3608 5739 3609 5739 2152 5740 3609 5740 2186 5740 2169 5741 2186 5741 3610 5741 3610 5742 2186 5742 3609 5742 2169 5743 3610 5743 3611 5743 2169 5744 3611 5744 2168 5744 2168 5745 3611 5745 3612 5745 2168 5746 3612 5746 2167 5746 2167 5747 3612 5747 3613 5747 2167 5748 3613 5748 2189 5748 2189 5749 3613 5749 3614 5749 2189 5750 3614 5750 2188 5750 2188 5751 3614 5751 3615 5751 2188 5752 3615 5752 2187 5752 2187 5753 3615 5753 3616 5753 2187 5754 3616 5754 2191 5754 2191 5755 3616 5755 3617 5755 2191 5756 3617 5756 2190 5756 2198 5757 2190 5757 3547 5757 3547 5758 2190 5758 3617 5758 3878 6249 3879 6249 3880 6249 3880 6250 3879 6250 3881 6250 3880 6251 3881 6251 3882 6251 3882 6252 3881 6252 3883 6252 3882 6253 3883 6253 3884 6253 3884 6254 3883 6254 3885 6254 3884 6255 3885 6255 3886 6255 3886 6256 3885 6256 3887 6256 3886 6257 3887 6257 3888 6257 3888 6258 3887 6258 3889 6258 3888 6259 3889 6259 3890 6259 3890 6260 3889 6260 3891 6260 3890 6261 3891 6261 3892 6261 3892 6262 3891 6262 3893 6262 3892 6263 3893 6263 3894 6263 3894 6264 3893 6264 3895 6264 3894 6265 3895 6265 3896 6265 3896 6266 3895 6266 3897 6266 3896 6267 3897 6267 3898 6267 3898 6268 3897 6268 3899 6268 3898 6269 3899 6269 3900 6269 3900 6270 3899 6270 3901 6270 3900 6271 3901 6271 3902 6271 3902 6272 3901 6272 3903 6272 3902 6273 3903 6273 3904 6273 3904 6274 3903 6274 3905 6274 3904 6275 3905 6275 3906 6275 3906 6276 3905 6276 3907 6276 3906 6277 3907 6277 3908 6277 3908 6278 3907 6278 3909 6278 3908 6279 3909 6279 3910 6279 3910 6280 3909 6280 3911 6280 3910 6281 3911 6281 3912 6281 3912 6282 3911 6282 3913 6282 3912 6283 3913 6283 3914 6283 3914 6284 3913 6284 3915 6284 3914 6285 3915 6285 3916 6285 3916 6286 3915 6286 3917 6286 3916 6287 3917 6287 3918 6287 3918 6288 3917 6288 3919 6288 3918 6289 3919 6289 3920 6289 3920 6290 3919 6290 3921 6290 3920 6291 3921 6291 3922 6291 3922 6292 3921 6292 3923 6292 3922 6293 3923 6293 3924 6293 3924 6294 3923 6294 3925 6294 3924 6295 3925 6295 3926 6295 3926 6296 3925 6296 3927 6296 3926 6297 3927 6297 3928 6297 3928 6298 3927 6298 3929 6298 3928 6299 3929 6299 3930 6299 3930 6300 3929 6300 3931 6300 3930 6301 3931 6301 3932 6301 3932 6302 3931 6302 3933 6302 3932 6303 3933 6303 3934 6303 3934 6304 3933 6304 3935 6304 3934 6305 3935 6305 3936 6305 3936 6306 3935 6306 3937 6306 3936 6307 3937 6307 3938 6307 3938 6308 3937 6308 3939 6308 3938 6309 3939 6309 3940 6309 3940 6310 3939 6310 3941 6310 3940 6311 3941 6311 3942 6311 3942 6312 3941 6312 3943 6312 3942 6313 3943 6313 3944 6313 3944 6314 3943 6314 3945 6314 3944 6315 3945 6315 3946 6315 3946 6316 3945 6316 3947 6316 3946 6317 3947 6317 3948 6317 3948 6318 3947 6318 3949 6318 3948 6319 3949 6319 3878 6319 3878 6320 3949 6320 3879 6320 3950 6321 3951 6321 3952 6321 3952 6322 3951 6322 3953 6322 3952 6323 3953 6323 3954 6323 3954 6324 3953 6324 3955 6324 3954 6325 3955 6325 3956 6325 3956 6326 3955 6326 3957 6326 3956 6327 3957 6327 3958 6327 3958 6328 3957 6328 3959 6328 3958 6329 3959 6329 3960 6329 3960 6330 3959 6330 3961 6330 3960 6331 3961 6331 3962 6331 3962 6332 3961 6332 3963 6332 3962 6333 3963 6333 3964 6333 3964 6334 3963 6334 3965 6334 3964 6335 3965 6335 3966 6335 3966 6336 3965 6336 3967 6336 3966 6337 3967 6337 3968 6337 3968 6338 3967 6338 3969 6338 3968 6339 3969 6339 3970 6339 3970 6340 3969 6340 3971 6340 3970 6341 3971 6341 3972 6341 3972 6342 3971 6342 3973 6342 3972 6343 3973 6343 3974 6343 3974 6344 3973 6344 3975 6344 3974 6345 3975 6345 3976 6345 3976 6346 3975 6346 3977 6346 3976 6347 3977 6347 3978 6347 3978 6348 3977 6348 3979 6348 3978 6349 3979 6349 3980 6349 3980 6350 3979 6350 3981 6350 3980 6351 3981 6351 3982 6351 3982 6352 3981 6352 3983 6352 3982 6353 3983 6353 3984 6353 3984 6354 3983 6354 3985 6354 3984 6355 3985 6355 3986 6355 3986 6356 3985 6356 3987 6356 3986 6357 3987 6357 3988 6357 3988 6358 3987 6358 3989 6358 3988 6359 3989 6359 3990 6359 3990 6360 3989 6360 3991 6360 3990 6361 3991 6361 3992 6361 3992 6362 3991 6362 3993 6362 3992 6363 3993 6363 3994 6363 3994 6364 3993 6364 3995 6364 3994 6365 3995 6365 3996 6365 3996 6366 3995 6366 3997 6366 3996 6367 3997 6367 3998 6367 3998 6368 3997 6368 3999 6368 3998 6369 3999 6369 4000 6369 4000 6370 3999 6370 4001 6370 4000 6371 4001 6371 4002 6371 4002 6372 4001 6372 4003 6372 4002 6373 4003 6373 4004 6373 4004 6374 4003 6374 4005 6374 4004 6375 4005 6375 4006 6375 4006 6376 4005 6376 4007 6376 4006 6377 4007 6377 4008 6377 4008 6378 4007 6378 4009 6378 4008 6379 4009 6379 4010 6379 4010 6380 4009 6380 4011 6380 4010 6381 4011 6381 4012 6381 4012 6382 4011 6382 4013 6382 4012 6383 4013 6383 4014 6383 4014 6384 4013 6384 4015 6384 4014 6385 4015 6385 4016 6385 4016 6386 4015 6386 4017 6386 4016 6387 4017 6387 4018 6387 4018 6388 4017 6388 4019 6388 4018 6389 4019 6389 4020 6389 4020 6390 4019 6390 4021 6390 4020 6391 4021 6391 3950 6391 3950 6392 4021 6392 3951 6392 2422 6883 4282 6883 2418 6883 2418 6884 4282 6884 4283 6884 2418 6885 4283 6885 2417 6885 4283 6886 4284 6886 2417 6886 2417 6887 4284 6887 4285 6887 2417 6888 4285 6888 2415 6888 2415 6889 4285 6889 4286 6889 2415 6890 4286 6890 2425 6890 2425 6891 4286 6891 4287 6891 2425 6892 4287 6892 2433 6892 2433 6893 4287 6893 4288 6893 2433 6894 4288 6894 2434 6894 2434 6895 4288 6895 4289 6895 2434 6896 4289 6896 2435 6896 2435 6897 4289 6897 4290 6897 2435 6898 4290 6898 2443 6898 2443 6899 4290 6899 4291 6899 2443 6900 4291 6900 2444 6900 2444 6901 4291 6901 4292 6901 2444 6902 4292 6902 2426 6902 2426 6903 4292 6903 4293 6903 2426 6904 4293 6904 2427 6904 2427 6905 4293 6905 4294 6905 2427 6906 4294 6906 2436 6906 2436 6907 4294 6907 4295 6907 2436 6908 4295 6908 2437 6908 2437 6909 4295 6909 4296 6909 2437 6910 4296 6910 2439 6910 2439 6911 4296 6911 4297 6911 2439 6912 4297 6912 2438 6912 2438 6913 4297 6913 4298 6913 2438 6914 4298 6914 2424 6914 2424 6915 4298 6915 4299 6915 2424 6916 4299 6916 2428 6916 4299 6917 4300 6917 2428 6917 2428 6918 4300 6918 4301 6918 2428 6919 4301 6919 2429 6919 2429 6920 4301 6920 4302 6920 2429 6921 4302 6921 2416 6921 4302 6922 4303 6922 2416 6922 2416 6923 4303 6923 4304 6923 2416 6924 4304 6924 2419 6924 2419 6925 4304 6925 4305 6925 2419 6926 4305 6926 2420 6926 2420 6927 4305 6927 4306 6927 2420 6928 4306 6928 2421 6928 4306 6929 4307 6929 2421 6929 2421 6930 4307 6930 4308 6930 2421 6931 4308 6931 2423 6931 2423 6932 4308 6932 4309 6932 2423 6933 4309 6933 2414 6933 2414 6934 4309 6934 4310 6934 2414 6935 4310 6935 2430 6935 2430 6936 4310 6936 4311 6936 2430 6937 4311 6937 2440 6937 2440 6938 4311 6938 4312 6938 2440 6939 4312 6939 2441 6939 2441 6940 4312 6940 4313 6940 2441 6941 4313 6941 2442 6941 2442 6942 4313 6942 4314 6942 2442 6943 4314 6943 2445 6943 2445 6944 4314 6944 4315 6944 2445 6945 4315 6945 2446 6945 2446 6946 4315 6946 4316 6946 2446 6947 4316 6947 2447 6947 2447 6948 4316 6948 4317 6948 2447 6949 4317 6949 2431 6949 2431 6950 4317 6950 4318 6950 2431 6951 4318 6951 2432 6951 4318 6952 4319 6952 2432 6952 2432 6953 4319 6953 4320 6953 2432 6954 4320 6954 2412 6954 2412 6955 4320 6955 4321 6955 2412 6956 4321 6956 2413 6956 2413 6957 4321 6957 4322 6957 2413 6958 4322 6958 2422 6958 2422 6959 4322 6959 4323 6959 2422 6960 4323 6960 4282 6960 2454 6961 4324 6961 4325 6961 2454 6962 4325 6962 2473 6962 2473 6963 4325 6963 4326 6963 2473 6964 4326 6964 2488 6964 2488 6965 4326 6965 4327 6965 2488 6966 4327 6966 2489 6966 2489 6967 4327 6967 4328 6967 2489 6968 4328 6968 2491 6968 2491 6969 4328 6969 4329 6969 2491 6970 4329 6970 2492 6970 4329 6971 4330 6971 2492 6971 2492 6972 4330 6972 4331 6972 2492 6973 4331 6973 2490 6973 2490 6974 4331 6974 4332 6974 2490 6975 4332 6975 2474 6975 2474 6976 4332 6976 4333 6976 4334 6977 2456 6977 4333 6977 4333 6978 2456 6978 2475 6978 4333 6979 2475 6979 2474 6979 4334 6980 4335 6980 2456 6980 2456 6981 4335 6981 4336 6981 2456 6982 4336 6982 2455 6982 2453 6983 2452 6983 4337 6983 4337 6984 2452 6984 4338 6984 4337 6985 4339 6985 2453 6985 2453 6986 4339 6986 4340 6986 2453 6987 4340 6987 2454 6987 2454 6988 4340 6988 4324 6988 4341 6989 2481 6989 4342 6989 4342 6990 2481 6990 2470 6990 4342 6991 2470 6991 4343 6991 4343 6992 2470 6992 2469 6992 4343 6993 2469 6993 4344 6993 4345 6994 2466 6994 4341 6994 4341 6995 2466 6995 2482 6995 4341 6996 2482 6996 2481 6996 4345 6997 4346 6997 2466 6997 2466 6998 4346 6998 4347 6998 2466 6999 4347 6999 2467 6999 2467 7000 4347 7000 4348 7000 2467 7001 4348 7001 2471 7001 2471 7002 4348 7002 4349 7002 2471 7003 4349 7003 2472 7003 2472 7004 4349 7004 4338 7004 2472 7005 4338 7005 2452 7005 2448 7006 4350 7006 4351 7006 2448 7007 4351 7007 2449 7007 2449 7008 4351 7008 4352 7008 2449 7009 4352 7009 2468 7009 2468 7010 4352 7010 4344 7010 2468 7011 4344 7011 2469 7011 2458 7012 4353 7012 4354 7012 2458 7013 4354 7013 2476 7013 2476 7014 4354 7014 4355 7014 2476 7015 4355 7015 2493 7015 2493 7016 4355 7016 4356 7016 2493 7017 4356 7017 2494 7017 2494 7018 4356 7018 4357 7018 2494 7019 4357 7019 2496 7019 2496 7020 4357 7020 4358 7020 2496 7021 4358 7021 2497 7021 2497 7022 4358 7022 4359 7022 2497 7023 4359 7023 2495 7023 2495 7024 4359 7024 4360 7024 2495 7025 4360 7025 2477 7025 2477 7026 4360 7026 4361 7026 2477 7027 4361 7027 2478 7027 2478 7028 4361 7028 4362 7028 2478 7029 4362 7029 2460 7029 2460 7030 4362 7030 4363 7030 2460 7031 4363 7031 2459 7031 2459 7032 4363 7032 4350 7032 2459 7033 4350 7033 2448 7033 4353 7034 2458 7034 2457 7034 2464 7035 4364 7035 4365 7035 2464 7036 4365 7036 2465 7036 2465 7037 4365 7037 4366 7037 2465 7038 4366 7038 2457 7038 2457 7039 4366 7039 4367 7039 2457 7040 4367 7040 4353 7040 4368 7041 2487 7041 4369 7041 4369 7042 2487 7042 2486 7042 4369 7043 2486 7043 4370 7043 4370 7044 2486 7044 2480 7044 4370 7045 2480 7045 4371 7045 4371 7046 2480 7046 2479 7046 4371 7047 2479 7047 4372 7047 4372 7048 2479 7048 2483 7048 4372 7049 2483 7049 4373 7049 4373 7050 2483 7050 2500 7050 4373 7051 2500 7051 4374 7051 4374 7052 2500 7052 2499 7052 4374 7053 2499 7053 4375 7053 4375 7054 2499 7054 2498 7054 4375 7055 2498 7055 4376 7055 4376 7056 2498 7056 2485 7056 4376 7057 2485 7057 4377 7057 4377 7058 2485 7058 2484 7058 4377 7059 2484 7059 4378 7059 4378 7060 2484 7060 2463 7060 4378 7061 2463 7061 4379 7061 4380 7062 2462 7062 4368 7062 4368 7063 2462 7063 2461 7063 4368 7064 2461 7064 2487 7064 4380 7065 4381 7065 2462 7065 2462 7066 4381 7066 4364 7066 2462 7067 4364 7067 2464 7067 4336 7068 4382 7068 2455 7068 2455 7069 4382 7069 4383 7069 2455 7070 4383 7070 2451 7070 2451 7071 4383 7071 4384 7071 2451 7072 4384 7072 2450 7072 2450 7073 4384 7073 4379 7073 2450 7074 4379 7074 2463 7074 2533 7075 4385 7075 4386 7075 2533 7076 4386 7076 2535 7076 2535 7077 4386 7077 4387 7077 2535 7078 4387 7078 2548 7078 2548 7079 4387 7079 4388 7079 2548 7080 4388 7080 2549 7080 2549 7081 4388 7081 4389 7081 2549 7082 4389 7082 2551 7082 2551 7083 4389 7083 4390 7083 2551 7084 4390 7084 2553 7084 2553 7085 4390 7085 4391 7085 2553 7086 4391 7086 2552 7086 2552 7087 4391 7087 4392 7087 2552 7088 4392 7088 2550 7088 2550 7089 4392 7089 4393 7089 2550 7090 4393 7090 2536 7090 2536 7091 4393 7091 4394 7091 2536 7092 4394 7092 2534 7092 2534 7093 4394 7093 4395 7093 2534 7094 4395 7094 2510 7094 2531 7095 2501 7095 4396 7095 4396 7096 2501 7096 4397 7096 2531 7097 4396 7097 2532 7097 2532 7098 4396 7098 4385 7098 2532 7099 4385 7099 2533 7099 2508 7100 4398 7100 4399 7100 2508 7101 4399 7101 2509 7101 2509 7102 4399 7102 4400 7102 2509 7103 4400 7103 2520 7103 4400 7104 4401 7104 2520 7104 2520 7105 4401 7105 4402 7105 2520 7106 4402 7106 2521 7106 2521 7107 4402 7107 4403 7107 2521 7108 4403 7108 2523 7108 2523 7109 4403 7109 4404 7109 2523 7110 4404 7110 2522 7110 2522 7111 4404 7111 4405 7111 2522 7112 4405 7112 2507 7112 2507 7113 4405 7113 4406 7113 2507 7114 4406 7114 2518 7114 2518 7115 4406 7115 4407 7115 2518 7116 4407 7116 2519 7116 2519 7117 4407 7117 4408 7117 2519 7118 4408 7118 2529 7118 2529 7119 4408 7119 4409 7119 2529 7120 4409 7120 2530 7120 2530 7121 4409 7121 4410 7121 2530 7122 4410 7122 2503 7122 2503 7123 4410 7123 4397 7123 2503 7124 4397 7124 2501 7124 2517 7125 4411 7125 4412 7125 4398 7126 2508 7126 2506 7126 2517 7127 4412 7127 2505 7127 2505 7128 4412 7128 4413 7128 2505 7129 4413 7129 2506 7129 2506 7130 4413 7130 4414 7130 2506 7131 4414 7131 4398 7131 2515 7132 4415 7132 4416 7132 2515 7133 4416 7133 2542 7133 2542 7134 4416 7134 4417 7134 2542 7135 4417 7135 2538 7135 2538 7136 4417 7136 4418 7136 2538 7137 4418 7137 2540 7137 2540 7138 4418 7138 4419 7138 2540 7139 4419 7139 2541 7139 2541 7140 4419 7140 4420 7140 2541 7141 4420 7141 2539 7141 2539 7142 4420 7142 4421 7142 2539 7143 4421 7143 2537 7143 2537 7144 4421 7144 4422 7144 2537 7145 4422 7145 2543 7145 2543 7146 4422 7146 4423 7146 2543 7147 4423 7147 2513 7147 2513 7148 4423 7148 4424 7148 2513 7149 4424 7149 2514 7149 2514 7150 4424 7150 4425 7150 2514 7151 4425 7151 2516 7151 2516 7152 4425 7152 4411 7152 2516 7153 4411 7153 2517 7153 2526 7154 4426 7154 4427 7154 2526 7155 4427 7155 2502 7155 2502 7156 4427 7156 4428 7156 2502 7157 4428 7157 2504 7157 2504 7158 4428 7158 4415 7158 2504 7159 4415 7159 2515 7159 2524 7160 4429 7160 4430 7160 2524 7161 4430 7161 2525 7161 2525 7162 4430 7162 4431 7162 2525 7163 4431 7163 2527 7163 2527 7164 4431 7164 4432 7164 2527 7165 4432 7165 2544 7165 2544 7166 4432 7166 4433 7166 2544 7167 4433 7167 2545 7167 2545 7168 4433 7168 4434 7168 2545 7169 4434 7169 2547 7169 2547 7170 4434 7170 4435 7170 2547 7171 4435 7171 2546 7171 2546 7172 4435 7172 4436 7172 2546 7173 4436 7173 2528 7173 2528 7174 4436 7174 4426 7174 2528 7175 4426 7175 2526 7175 2510 7176 4395 7176 4437 7176 2510 7177 4437 7177 2511 7177 2511 7178 4437 7178 4438 7178 2511 7179 4438 7179 2512 7179 2512 7180 4438 7180 4429 7180 2512 7181 4429 7181 2524 7181 2570 7182 4439 7182 4440 7182 2570 7183 4440 7183 2581 7183 2581 7184 4440 7184 4441 7184 2581 7185 4441 7185 2602 7185 2602 7186 4441 7186 4442 7186 2602 7187 4442 7187 2603 7187 2603 7188 4442 7188 4443 7188 2603 7189 4443 7189 2605 7189 2605 7190 4443 7190 4444 7190 2605 7191 4444 7191 2606 7191 2606 7192 4444 7192 4445 7192 2606 7193 4445 7193 2604 7193 2604 7194 4445 7194 4446 7194 2604 7195 4446 7195 2582 7195 2582 7196 4446 7196 4447 7196 2582 7197 4447 7197 2583 7197 2583 7198 4447 7198 4448 7198 2583 7199 4448 7199 2572 7199 2572 7200 4448 7200 4449 7200 2572 7201 4449 7201 2571 7201 2568 7202 4450 7202 4451 7202 2568 7203 4451 7203 2569 7203 2569 7204 4451 7204 4439 7204 2569 7205 4439 7205 2570 7205 2591 7206 4452 7206 4453 7206 2591 7207 4453 7207 2592 7207 2592 7208 4453 7208 4454 7208 2592 7209 4454 7209 2593 7209 2593 7210 4454 7210 4455 7210 2593 7211 4455 7211 2594 7211 2594 7212 4455 7212 4456 7212 2594 7213 4456 7213 2595 7213 2595 7214 4456 7214 4457 7214 2595 7215 4457 7215 2596 7215 2596 7216 4457 7216 4458 7216 2596 7217 4458 7217 2597 7217 2597 7218 4458 7218 4459 7218 2597 7219 4459 7219 2598 7219 2598 7220 4459 7220 4450 7220 2598 7221 4450 7221 2568 7221 2560 7222 4460 7222 4461 7222 2560 7223 4461 7223 2561 7223 4461 7224 4462 7224 2561 7224 2561 7225 4462 7225 4463 7225 2561 7226 4463 7226 2562 7226 2562 7227 4463 7227 4452 7227 2562 7228 4452 7228 2591 7228 2557 7229 4464 7229 4465 7229 2557 7230 4465 7230 2558 7230 2558 7231 4465 7231 4466 7231 2558 7232 4466 7232 2559 7232 2559 7233 4466 7233 4467 7233 2559 7234 4467 7234 2578 7234 2578 7235 4467 7235 4468 7235 2578 7236 4468 7236 2579 7236 2579 7237 4468 7237 4469 7237 2579 7238 4469 7238 2580 7238 2580 7239 4469 7239 4470 7239 2580 7240 4470 7240 2589 7240 2589 7241 4470 7241 4471 7241 2589 7242 4471 7242 2590 7242 2590 7243 4471 7243 4472 7243 2590 7244 4472 7244 2573 7244 2573 7245 4472 7245 4473 7245 2573 7246 4473 7246 2574 7246 2574 7247 4473 7247 4474 7247 2574 7248 4474 7248 2575 7248 2575 7249 4474 7249 4460 7249 2575 7250 4460 7250 2560 7250 2566 7251 4475 7251 4476 7251 2566 7252 4476 7252 2567 7252 2567 7253 4476 7253 4477 7253 2567 7254 4477 7254 2556 7254 2556 7255 4477 7255 4464 7255 2556 7256 4464 7256 2557 7256 2565 7257 4478 7257 4479 7257 2565 7258 4479 7258 2585 7258 2585 7259 4479 7259 4480 7259 2585 7260 4480 7260 2586 7260 2586 7261 4480 7261 4481 7261 2586 7262 4481 7262 2599 7262 2599 7263 4481 7263 4482 7263 2599 7264 4482 7264 2600 7264 2600 7265 4482 7265 4483 7265 2600 7266 4483 7266 2601 7266 2601 7267 4483 7267 4484 7267 2601 7268 4484 7268 2584 7268 2584 7269 4484 7269 4485 7269 2584 7270 4485 7270 2576 7270 2576 7271 4485 7271 4486 7271 2576 7272 4486 7272 2577 7272 2577 7273 4486 7273 4487 7273 2577 7274 4487 7274 2587 7274 2587 7275 4487 7275 4488 7275 2587 7276 4488 7276 2588 7276 4488 7277 4489 7277 2588 7277 2588 7278 4489 7278 4490 7278 2588 7279 4490 7279 2563 7279 2563 7280 4490 7280 4491 7280 2563 7281 4491 7281 2564 7281 2564 7282 4491 7282 4475 7282 2564 7283 4475 7283 2566 7283 2571 7284 4449 7284 4492 7284 4492 7285 4493 7285 2571 7285 2571 7286 4493 7286 4494 7286 2571 7287 4494 7287 2554 7287 2554 7288 4494 7288 4495 7288 2554 7289 4495 7289 2555 7289 2555 7290 4495 7290 4478 7290 2555 7291 4478 7291 2565 7291 2638 7292 4496 7292 4497 7292 2638 7293 4497 7293 2629 7293 2629 7294 4497 7294 4498 7294 2629 7295 4498 7295 2630 7295 2630 7296 4498 7296 4499 7296 2630 7297 4499 7297 2644 7297 2644 7298 4499 7298 4500 7298 2644 7299 4500 7299 2645 7299 2645 7300 4500 7300 4501 7300 2645 7301 4501 7301 2646 7301 2607 7302 4502 7302 4503 7302 2607 7303 4503 7303 2635 7303 2635 7304 4503 7304 4504 7304 2635 7305 4504 7305 2636 7305 2636 7306 4504 7306 4505 7306 2636 7307 4505 7307 2637 7307 2637 7308 4505 7308 4496 7308 2637 7309 4496 7309 2638 7309 2623 7310 4506 7310 2607 7310 2607 7311 4506 7311 4502 7311 2618 7312 4507 7312 4508 7312 2618 7313 4508 7313 2619 7313 2619 7314 4508 7314 4509 7314 2619 7315 4509 7315 2621 7315 2621 7316 4509 7316 4506 7316 2621 7317 4506 7317 2623 7317 2625 7318 2608 7318 4510 7318 4510 7319 2608 7319 4511 7319 4512 7320 4507 7320 2618 7320 4510 7321 4513 7321 2625 7321 2625 7322 4513 7322 4512 7322 2625 7323 4512 7323 2617 7323 2617 7324 4512 7324 2618 7324 2612 7325 4514 7325 4515 7325 2612 7326 4515 7326 2610 7326 2610 7327 4515 7327 4511 7327 2610 7328 4511 7328 2608 7328 2614 7329 4516 7329 2612 7329 2612 7330 4516 7330 4514 7330 4516 7331 2614 7331 2613 7331 4516 7332 2613 7332 4517 7332 4517 7333 2613 7333 2611 7333 4517 7334 2611 7334 4518 7334 4518 7335 2611 7335 2609 7335 4518 7336 2609 7336 4519 7336 2624 7337 4520 7337 4521 7337 2624 7338 4521 7338 2626 7338 2626 7339 4521 7339 4522 7339 2626 7340 4522 7340 2627 7340 2627 7341 4522 7341 4523 7341 2627 7342 4523 7342 2628 7342 2628 7343 4523 7343 4524 7343 2628 7344 4524 7344 2631 7344 2631 7345 4524 7345 4525 7345 2631 7346 4525 7346 2632 7346 2632 7347 4525 7347 4519 7347 2632 7348 4519 7348 2609 7348 4526 7349 4527 7349 2620 7349 2620 7350 4527 7350 4528 7350 2620 7351 4528 7351 2615 7351 2615 7352 4528 7352 4529 7352 2615 7353 4529 7353 2616 7353 2616 7354 4529 7354 4520 7354 2616 7355 4520 7355 2624 7355 4530 7356 4531 7356 2634 7356 2634 7357 4531 7357 4532 7357 2634 7358 4532 7358 2643 7358 2643 7359 4532 7359 4533 7359 2643 7360 4533 7360 2622 7360 2622 7361 4533 7361 4526 7361 2622 7362 4526 7362 2620 7362 4530 7363 2634 7363 4534 7363 4534 7364 2634 7364 2633 7364 4534 7365 2633 7365 4535 7365 4535 7366 2633 7366 2642 7366 4535 7367 2642 7367 4536 7367 4536 7368 2642 7368 2641 7368 4536 7369 2641 7369 4537 7369 2639 7370 2677 7370 4538 7370 4539 7371 4537 7371 2641 7371 4538 7372 4540 7372 2639 7372 2639 7373 4540 7373 4539 7373 2639 7374 4539 7374 2640 7374 2640 7375 4539 7375 2641 7375 4538 7376 2677 7376 2676 7376 2667 7377 4541 7377 4542 7377 2667 7378 4542 7378 2668 7378 2668 7379 4542 7379 4543 7379 2668 7380 4543 7380 2669 7380 2669 7381 4543 7381 4544 7381 2669 7382 4544 7382 2670 7382 2670 7383 4544 7383 4545 7383 2670 7384 4545 7384 2671 7384 2671 7385 4545 7385 4546 7385 2671 7386 4546 7386 2672 7386 2672 7387 4546 7387 4547 7387 2672 7388 4547 7388 2673 7388 2673 7389 4547 7389 4548 7389 2673 7390 4548 7390 2674 7390 2674 7391 4548 7391 4549 7391 2674 7392 4549 7392 2675 7392 2675 7393 4549 7393 4550 7393 2675 7394 4550 7394 2676 7394 2676 7395 4550 7395 4551 7395 2676 7396 4551 7396 4538 7396 2658 7397 2657 7397 4552 7397 4552 7398 2657 7398 4553 7398 4552 7399 4554 7399 2658 7399 2658 7400 4554 7400 4555 7400 2658 7401 4555 7401 2659 7401 2659 7402 4555 7402 4556 7402 2659 7403 4556 7403 2660 7403 2660 7404 4556 7404 4557 7404 2660 7405 4557 7405 2661 7405 2661 7406 4557 7406 4558 7406 2661 7407 4558 7407 2662 7407 2662 7408 4558 7408 4559 7408 2662 7409 4559 7409 2663 7409 2663 7410 4559 7410 4560 7410 2663 7411 4560 7411 2664 7411 2664 7412 4560 7412 4561 7412 2664 7413 4561 7413 2665 7413 2665 7414 4561 7414 4562 7414 2665 7415 4562 7415 2666 7415 2666 7416 4562 7416 4541 7416 2666 7417 4541 7417 2667 7417 4553 7418 2657 7418 2656 7418 2647 7419 4563 7419 4564 7419 2647 7420 4564 7420 2648 7420 2648 7421 4564 7421 4565 7421 2648 7422 4565 7422 2649 7422 2649 7423 4565 7423 4566 7423 2649 7424 4566 7424 2650 7424 2650 7425 4566 7425 4567 7425 2650 7426 4567 7426 2651 7426 2651 7427 4567 7427 4568 7427 2651 7428 4568 7428 2652 7428 2652 7429 4568 7429 4569 7429 2652 7430 4569 7430 2653 7430 2653 7431 4569 7431 4570 7431 2653 7432 4570 7432 2654 7432 2654 7433 4570 7433 4571 7433 2654 7434 4571 7434 2655 7434 2655 7435 4571 7435 4572 7435 2655 7436 4572 7436 2656 7436 2656 7437 4572 7437 4573 7437 2656 7438 4573 7438 4553 7438 2646 7439 4501 7439 2647 7439 2647 7440 4501 7440 4563 7440 2679 7441 4574 7441 4575 7441 2679 7442 4575 7442 2681 7442 2681 7443 4575 7443 4576 7443 2681 7444 4576 7444 2694 7444 2694 7445 4576 7445 4577 7445 2694 7446 4577 7446 2695 7446 2695 7447 4577 7447 4578 7447 2695 7448 4578 7448 2703 7448 2703 7449 4578 7449 4579 7449 2703 7450 4579 7450 2704 7450 2704 7451 4579 7451 4580 7451 2704 7452 4580 7452 2706 7452 2706 7453 4580 7453 4581 7453 2706 7454 4581 7454 2708 7454 2678 7455 4582 7455 2679 7455 2679 7456 4582 7456 4574 7456 2680 7457 4583 7457 2678 7457 2678 7458 4583 7458 4582 7458 2691 7459 4584 7459 2680 7459 2680 7460 4584 7460 4583 7460 2707 7461 4585 7461 4586 7461 2707 7462 4586 7462 2705 7462 2705 7463 4586 7463 4587 7463 2705 7464 4587 7464 2700 7464 2700 7465 4587 7465 4588 7465 2700 7466 4588 7466 2701 7466 2701 7467 4588 7467 4589 7467 2701 7468 4589 7468 2702 7468 2702 7469 4589 7469 4590 7469 2702 7470 4590 7470 2693 7470 2693 7471 4590 7471 4591 7471 2693 7472 4591 7472 2692 7472 2692 7473 4591 7473 4584 7473 2692 7474 4584 7474 2691 7474 2709 7475 4592 7475 2707 7475 2707 7476 4592 7476 4585 7476 2683 7477 4593 7477 4594 7477 2683 7478 4594 7478 2685 7478 2685 7479 4594 7479 4595 7479 2685 7480 4595 7480 2689 7480 2689 7481 4595 7481 4596 7481 2689 7482 4596 7482 2690 7482 2690 7483 4596 7483 4597 7483 2690 7484 4597 7484 2696 7484 2696 7485 4597 7485 4598 7485 2696 7486 4598 7486 2697 7486 2697 7487 4598 7487 4599 7487 2697 7488 4599 7488 2711 7488 2711 7489 4599 7489 4592 7489 2711 7490 4592 7490 2709 7490 2682 7491 4600 7491 2683 7491 2683 7492 4600 7492 4593 7492 2684 7493 4601 7493 2682 7493 2682 7494 4601 7494 4600 7494 2686 7495 4602 7495 2684 7495 2684 7496 4602 7496 4601 7496 2710 7497 4603 7497 4604 7497 2710 7498 4604 7498 2712 7498 2712 7499 4604 7499 4605 7499 2712 7500 4605 7500 2713 7500 2713 7501 4605 7501 4606 7501 2713 7502 4606 7502 2699 7502 2699 7503 4606 7503 4607 7503 2699 7504 4607 7504 2698 7504 2698 7505 4607 7505 4608 7505 2698 7506 4608 7506 2688 7506 2688 7507 4608 7507 4609 7507 2688 7508 4609 7508 2687 7508 2687 7509 4609 7509 4602 7509 2687 7510 4602 7510 2686 7510 2708 7511 4581 7511 2710 7511 2710 7512 4581 7512 4603 7512 2726 7513 4610 7513 4611 7513 2726 7514 4611 7514 2727 7514 2727 7515 4611 7515 4612 7515 2727 7516 4612 7516 2714 7516 2714 7517 4612 7517 4613 7517 2714 7518 4613 7518 2715 7518 2715 7519 4613 7519 4614 7519 2715 7520 4614 7520 2717 7520 2717 7521 4614 7521 4615 7521 2717 7522 4615 7522 2735 7522 2735 7523 4615 7523 4616 7523 2735 7524 4616 7524 2734 7524 2725 7525 4617 7525 2726 7525 2726 7526 4617 7526 4610 7526 2716 7527 4618 7527 2725 7527 2725 7528 4618 7528 4617 7528 2724 7529 4619 7529 2716 7529 2716 7530 4619 7530 4618 7530 2722 7531 4620 7531 2724 7531 2724 7532 4620 7532 4619 7532 2721 7533 4621 7533 2722 7533 2722 7534 4621 7534 4620 7534 2755 7535 4622 7535 4623 7535 2755 7536 4623 7536 2737 7536 2737 7537 4623 7537 4624 7537 2737 7538 4624 7538 2738 7538 2738 7539 4624 7539 4625 7539 2738 7540 4625 7540 2739 7540 2739 7541 4625 7541 4626 7541 2739 7542 4626 7542 2723 7542 2723 7543 4626 7543 4621 7543 2723 7544 4621 7544 2721 7544 2754 7545 4627 7545 2755 7545 2755 7546 4627 7546 4622 7546 2753 7547 4628 7547 2754 7547 2754 7548 4628 7548 4627 7548 2729 7549 4629 7549 4630 7549 2729 7550 4630 7550 2730 7550 2730 7551 4630 7551 4631 7551 2730 7552 4631 7552 2740 7552 2740 7553 4631 7553 4632 7553 2740 7554 4632 7554 2741 7554 2741 7555 4632 7555 4633 7555 2741 7556 4633 7556 2742 7556 2742 7557 4633 7557 4634 7557 2742 7558 4634 7558 2736 7558 2736 7559 4634 7559 4635 7559 2736 7560 4635 7560 2718 7560 2718 7561 4635 7561 4636 7561 2718 7562 4636 7562 2719 7562 2719 7563 4636 7563 4637 7563 2719 7564 4637 7564 2748 7564 2748 7565 4637 7565 4638 7565 2748 7566 4638 7566 2749 7566 2749 7567 4638 7567 4639 7567 2749 7568 4639 7568 2751 7568 2751 7569 4639 7569 4628 7569 2751 7570 4628 7570 2753 7570 2728 7571 4640 7571 2729 7571 2729 7572 4640 7572 4629 7572 2720 7573 4641 7573 2728 7573 2728 7574 4641 7574 4640 7574 2744 7575 4642 7575 2720 7575 2720 7576 4642 7576 4641 7576 2752 7577 4643 7577 4644 7577 2752 7578 4644 7578 2750 7578 2750 7579 4644 7579 4645 7579 2750 7580 4645 7580 2745 7580 2745 7581 4645 7581 4646 7581 2745 7582 4646 7582 2746 7582 2746 7583 4646 7583 4647 7583 2746 7584 4647 7584 2747 7584 2747 7585 4647 7585 4648 7585 2747 7586 4648 7586 2731 7586 2731 7587 4648 7587 4649 7587 2731 7588 4649 7588 2732 7588 2732 7589 4649 7589 4650 7589 2732 7590 4650 7590 2743 7590 2743 7591 4650 7591 4642 7591 2743 7592 4642 7592 2744 7592 2733 7593 4651 7593 2752 7593 2752 7594 4651 7594 4643 7594 2734 7595 4616 7595 2733 7595 2733 7596 4616 7596 4651 7596 2767 7597 4652 7597 4653 7597 2767 7598 4653 7598 2768 7598 2768 7599 4653 7599 4654 7599 2768 7600 4654 7600 2769 7600 4654 7601 4655 7601 2769 7601 2769 7602 4655 7602 4656 7602 2769 7603 4656 7603 2770 7603 2770 7604 4656 7604 4657 7604 2770 7605 4657 7605 2771 7605 2771 7606 4657 7606 4658 7606 2771 7607 4658 7607 2772 7607 2772 7608 4658 7608 4659 7608 2772 7609 4659 7609 2773 7609 2773 7610 4659 7610 4660 7610 2773 7611 4660 7611 2774 7611 2774 7612 4660 7612 4661 7612 2774 7613 4661 7613 2775 7613 2775 7614 4661 7614 4662 7614 2775 7615 4662 7615 2776 7615 2776 7616 4662 7616 4663 7616 2776 7617 4663 7617 2777 7617 4652 7618 2767 7618 2766 7618 2757 7619 4664 7619 4665 7619 2757 7620 4665 7620 2758 7620 2758 7621 4665 7621 4666 7621 2758 7622 4666 7622 2759 7622 2759 7623 4666 7623 4667 7623 2759 7624 4667 7624 2760 7624 2760 7625 4667 7625 4668 7625 2760 7626 4668 7626 2761 7626 2761 7627 4668 7627 4669 7627 2761 7628 4669 7628 2762 7628 2762 7629 4669 7629 4670 7629 2762 7630 4670 7630 2763 7630 2763 7631 4670 7631 4671 7631 2763 7632 4671 7632 2764 7632 2764 7633 4671 7633 4672 7633 2764 7634 4672 7634 2765 7634 2765 7635 4672 7635 4673 7635 2765 7636 4673 7636 2766 7636 2766 7637 4673 7637 4674 7637 2766 7638 4674 7638 4652 7638 2789 7639 2788 7639 4675 7639 4675 7640 2788 7640 4676 7640 4675 7641 4677 7641 2789 7641 2789 7642 4677 7642 4678 7642 2789 7643 4678 7643 2790 7643 2790 7644 4678 7644 4679 7644 2790 7645 4679 7645 2791 7645 2791 7646 4679 7646 4680 7646 2791 7647 4680 7647 2792 7647 2792 7648 4680 7648 4681 7648 2792 7649 4681 7649 2793 7649 2793 7650 4681 7650 4682 7650 2793 7651 4682 7651 2794 7651 2794 7652 4682 7652 4683 7652 2794 7653 4683 7653 2795 7653 2795 7654 4683 7654 4684 7654 2795 7655 4684 7655 2796 7655 2796 7656 4684 7656 4685 7656 2796 7657 4685 7657 2756 7657 2756 7658 4685 7658 4664 7658 2756 7659 4664 7659 2757 7659 4676 7660 2788 7660 2787 7660 2778 7661 4686 7661 4687 7661 2778 7662 4687 7662 2779 7662 2779 7663 4687 7663 4688 7663 2779 7664 4688 7664 2780 7664 2780 7665 4688 7665 4689 7665 2780 7666 4689 7666 2781 7666 2781 7667 4689 7667 4690 7667 2781 7668 4690 7668 2782 7668 2782 7669 4690 7669 4691 7669 2782 7670 4691 7670 2783 7670 2783 7671 4691 7671 4692 7671 2783 7672 4692 7672 2784 7672 2784 7673 4692 7673 4693 7673 2784 7674 4693 7674 2785 7674 2785 7675 4693 7675 4694 7675 2785 7676 4694 7676 2786 7676 2786 7677 4694 7677 4695 7677 2786 7678 4695 7678 2787 7678 2787 7679 4695 7679 4696 7679 2787 7680 4696 7680 4676 7680 2777 7681 4663 7681 2778 7681 2778 7682 4663 7682 4686 7682 2841 7683 4697 7683 4698 7683 2841 7684 4698 7684 2842 7684 2842 7685 4698 7685 4699 7685 2842 7686 4699 7686 2843 7686 2843 7687 4699 7687 4700 7687 2843 7688 4700 7688 2849 7688 2849 7689 4700 7689 4701 7689 2849 7690 4701 7690 2850 7690 2850 7691 4701 7691 4702 7691 2850 7692 4702 7692 2851 7692 2851 7693 4702 7693 4703 7693 2851 7694 4703 7694 2852 7694 2852 7695 4703 7695 4704 7695 2852 7696 4704 7696 2817 7696 2817 7697 4704 7697 4705 7697 2817 7698 4705 7698 2816 7698 2837 7699 4706 7699 4707 7699 2837 7700 4707 7700 2818 7700 2818 7701 4707 7701 4708 7701 2818 7702 4708 7702 2853 7702 2853 7703 4708 7703 4709 7703 2853 7704 4709 7704 2854 7704 2854 7705 4709 7705 4697 7705 2854 7706 4697 7706 2841 7706 2870 7707 4710 7707 4711 7707 2870 7708 4711 7708 2869 7708 2869 7709 4711 7709 4712 7709 2869 7710 4712 7710 2868 7710 2868 7711 4712 7711 4706 7711 2868 7712 4706 7712 2837 7712 4710 7713 2870 7713 2819 7713 2821 7714 4713 7714 4714 7714 2821 7715 4714 7715 2819 7715 2819 7716 4714 7716 4715 7716 2819 7717 4715 7717 4710 7717 2823 7718 4716 7718 2821 7718 2821 7719 4716 7719 4713 7719 2825 7720 4717 7720 4718 7720 2825 7721 4718 7721 2824 7721 2824 7722 4718 7722 4719 7722 2824 7723 4719 7723 2865 7723 2865 7724 4719 7724 4720 7724 2865 7725 4720 7725 2866 7725 2866 7726 4720 7726 4721 7726 2866 7727 4721 7727 2867 7727 2867 7728 4721 7728 4722 7728 2867 7729 4722 7729 2844 7729 2844 7730 4722 7730 4723 7730 2844 7731 4723 7731 2845 7731 2845 7732 4723 7732 4724 7732 2845 7733 4724 7733 2846 7733 2846 7734 4724 7734 4725 7734 2846 7735 4725 7735 2820 7735 2820 7736 4725 7736 4726 7736 2820 7737 4726 7737 2822 7737 2822 7738 4726 7738 4716 7738 2822 7739 4716 7739 2823 7739 2834 7740 4727 7740 2825 7740 2825 7741 4727 7741 4717 7741 2799 7742 4728 7742 4729 7742 2799 7743 4729 7743 2801 7743 2801 7744 4729 7744 4730 7744 2801 7745 4730 7745 2802 7745 2802 7746 4730 7746 4731 7746 2802 7747 4731 7747 2807 7747 2807 7748 4731 7748 4732 7748 2807 7749 4732 7749 2808 7749 2808 7750 4732 7750 4733 7750 2808 7751 4733 7751 2809 7751 2809 7752 4733 7752 4734 7752 2809 7753 4734 7753 2836 7753 2836 7754 4734 7754 4735 7754 2836 7755 4735 7755 2835 7755 2835 7756 4735 7756 4727 7756 2835 7757 4727 7757 2834 7757 2798 7758 4736 7758 2799 7758 2799 7759 4736 7759 4728 7759 4736 7760 2798 7760 2800 7760 2864 7761 4737 7761 4738 7761 2864 7762 4738 7762 2800 7762 2800 7763 4738 7763 4739 7763 2800 7764 4739 7764 4736 7764 4737 7765 2864 7765 2863 7765 2847 7766 4740 7766 4741 7766 2847 7767 4741 7767 2863 7767 2863 7768 4741 7768 4742 7768 2863 7769 4742 7769 4737 7769 2813 7770 4743 7770 4744 7770 2813 7771 4744 7771 2812 7771 2812 7772 4744 7772 4745 7772 2812 7773 4745 7773 2848 7773 2848 7774 4745 7774 4740 7774 2848 7775 4740 7775 2847 7775 2828 7776 4746 7776 4747 7776 2828 7777 4747 7777 2827 7777 2827 7778 4747 7778 4748 7778 2827 7779 4748 7779 2826 7779 2826 7780 4748 7780 4749 7780 2826 7781 4749 7781 2805 7781 2805 7782 4749 7782 4750 7782 2805 7783 4750 7783 2804 7783 2804 7784 4750 7784 4751 7784 2804 7785 4751 7785 2803 7785 2803 7786 4751 7786 4752 7786 2803 7787 4752 7787 2797 7787 2797 7788 4752 7788 4753 7788 2797 7789 4753 7789 2815 7789 2815 7790 4753 7790 4754 7790 2815 7791 4754 7791 2814 7791 2814 7792 4754 7792 4743 7792 2814 7793 4743 7793 2813 7793 2811 7794 4755 7794 4756 7794 2811 7795 4756 7795 2857 7795 2857 7796 4756 7796 4757 7796 2857 7797 4757 7797 2856 7797 2856 7798 4757 7798 4758 7798 2856 7799 4758 7799 2855 7799 2855 7800 4758 7800 4759 7800 2855 7801 4759 7801 2833 7801 2833 7802 4759 7802 4760 7802 2833 7803 4760 7803 2832 7803 2832 7804 4760 7804 4761 7804 2832 7805 4761 7805 2831 7805 2831 7806 4761 7806 4762 7806 2831 7807 4762 7807 2830 7807 2830 7808 4762 7808 4763 7808 2830 7809 4763 7809 2829 7809 2829 7810 4763 7810 4746 7810 2829 7811 4746 7811 2828 7811 2810 7812 4764 7812 2811 7812 2811 7813 4764 7813 4755 7813 2806 7814 4765 7814 4766 7814 2806 7815 4766 7815 2838 7815 2838 7816 4766 7816 4767 7816 2838 7817 4767 7817 2839 7817 2839 7818 4767 7818 4768 7818 2839 7819 4768 7819 2840 7819 2840 7820 4768 7820 4769 7820 2840 7821 4769 7821 2858 7821 2858 7822 4769 7822 4770 7822 2858 7823 4770 7823 2859 7823 2859 7824 4770 7824 4771 7824 2859 7825 4771 7825 2860 7825 2860 7826 4771 7826 4772 7826 2860 7827 4772 7827 2861 7827 2861 7828 4772 7828 4773 7828 2861 7829 4773 7829 2862 7829 2862 7830 4773 7830 4764 7830 2862 7831 4764 7831 2810 7831 2816 7832 4705 7832 2806 7832 2806 7833 4705 7833 4765 7833 2882 7834 4774 7834 4775 7834 2882 7835 4775 7835 2883 7835 2883 7836 4775 7836 4776 7836 2883 7837 4776 7837 2884 7837 4776 7838 4777 7838 2884 7838 2884 7839 4777 7839 4778 7839 2884 7840 4778 7840 2885 7840 2885 7841 4778 7841 4779 7841 2885 7842 4779 7842 2886 7842 2886 7843 4779 7843 4780 7843 2886 7844 4780 7844 2887 7844 2887 7845 4780 7845 4781 7845 2887 7846 4781 7846 2888 7846 2888 7847 4781 7847 4782 7847 2888 7848 4782 7848 2889 7848 2889 7849 4782 7849 4783 7849 2889 7850 4783 7850 2890 7850 2890 7851 4783 7851 4784 7851 2890 7852 4784 7852 2891 7852 2891 7853 4784 7853 4785 7853 2891 7854 4785 7854 2892 7854 4774 7855 2882 7855 2881 7855 2872 7856 4786 7856 4787 7856 2872 7857 4787 7857 2873 7857 2873 7858 4787 7858 4788 7858 2873 7859 4788 7859 2874 7859 2874 7860 4788 7860 4789 7860 2874 7861 4789 7861 2875 7861 2875 7862 4789 7862 4790 7862 2875 7863 4790 7863 2876 7863 2876 7864 4790 7864 4791 7864 2876 7865 4791 7865 2877 7865 2877 7866 4791 7866 4792 7866 2877 7867 4792 7867 2878 7867 2878 7868 4792 7868 4793 7868 2878 7869 4793 7869 2879 7869 2879 7870 4793 7870 4794 7870 2879 7871 4794 7871 2880 7871 2880 7872 4794 7872 4795 7872 2880 7873 4795 7873 2881 7873 2881 7874 4795 7874 4796 7874 2881 7875 4796 7875 4774 7875 2904 7876 2903 7876 4797 7876 4797 7877 2903 7877 4798 7877 4797 7878 4799 7878 2904 7878 2904 7879 4799 7879 4800 7879 2904 7880 4800 7880 2905 7880 2905 7881 4800 7881 4801 7881 2905 7882 4801 7882 2906 7882 2906 7883 4801 7883 4802 7883 2906 7884 4802 7884 2907 7884 2907 7885 4802 7885 4803 7885 2907 7886 4803 7886 2908 7886 2908 7887 4803 7887 4804 7887 2908 7888 4804 7888 2909 7888 2909 7889 4804 7889 4805 7889 2909 7890 4805 7890 2910 7890 2910 7891 4805 7891 4806 7891 2910 7892 4806 7892 2911 7892 2911 7893 4806 7893 4807 7893 2911 7894 4807 7894 2871 7894 2871 7895 4807 7895 4786 7895 2871 7896 4786 7896 2872 7896 4798 7897 2903 7897 2902 7897 2893 7898 4808 7898 4809 7898 2893 7899 4809 7899 2894 7899 2894 7900 4809 7900 4810 7900 2894 7901 4810 7901 2895 7901 2895 7902 4810 7902 4811 7902 2895 7903 4811 7903 2896 7903 2896 7904 4811 7904 4812 7904 2896 7905 4812 7905 2897 7905 2897 7906 4812 7906 4813 7906 2897 7907 4813 7907 2898 7907 2898 7908 4813 7908 4814 7908 2898 7909 4814 7909 2899 7909 2899 7910 4814 7910 4815 7910 2899 7911 4815 7911 2900 7911 2900 7912 4815 7912 4816 7912 2900 7913 4816 7913 2901 7913 2901 7914 4816 7914 4817 7914 2901 7915 4817 7915 2902 7915 2902 7916 4817 7916 4818 7916 2902 7917 4818 7917 4798 7917 2892 7918 4785 7918 2893 7918 2893 7919 4785 7919 4808 7919 2921 7920 4819 7920 4820 7920 2921 7921 4820 7921 2922 7921 2922 7922 4820 7922 4821 7922 2922 7923 4821 7923 2956 7923 2956 7924 4821 7924 4822 7924 2956 7925 4822 7925 2935 7925 2935 7926 4822 7926 4823 7926 2935 7927 4823 7927 2927 7927 2927 7928 4823 7928 4824 7928 2927 7929 4824 7929 2928 7929 2928 7930 4824 7930 4825 7930 2928 7931 4825 7931 2976 7931 2976 7932 4825 7932 4826 7932 2976 7933 4826 7933 2977 7933 2977 7934 4826 7934 4827 7934 2977 7935 4827 7935 2978 7935 2978 7936 4827 7936 4828 7936 2978 7937 4828 7937 2979 7937 2920 7938 4829 7938 2921 7938 2921 7939 4829 7939 4819 7939 2963 7940 4830 7940 2929 7940 2929 7941 4830 7941 4831 7941 4831 7942 4832 7942 2929 7942 2929 7943 4832 7943 4829 7943 2929 7944 4829 7944 2920 7944 2965 7945 4833 7945 4834 7945 2965 7946 4834 7946 2966 7946 2966 7947 4834 7947 4830 7947 2966 7948 4830 7948 2963 7948 2936 7949 4835 7949 4836 7949 2936 7950 4836 7950 2937 7950 2937 7951 4836 7951 4837 7951 2937 7952 4837 7952 2964 7952 2964 7953 4837 7953 4833 7953 2964 7954 4833 7954 2965 7954 2943 7955 4838 7955 4839 7955 2943 7956 4839 7956 2942 7956 2942 7957 4839 7957 4840 7957 2942 7958 4840 7958 2941 7958 2941 7959 4840 7959 4841 7959 2941 7960 4841 7960 2940 7960 2940 7961 4841 7961 4842 7961 2940 7962 4842 7962 2939 7962 2939 7963 4842 7963 4843 7963 2939 7964 4843 7964 2938 7964 2938 7965 4843 7965 4844 7965 2938 7966 4844 7966 2930 7966 2930 7967 4844 7967 4845 7967 2930 7968 4845 7968 2931 7968 2931 7969 4845 7969 4835 7969 2931 7970 4835 7970 2936 7970 2957 7971 4846 7971 4847 7971 2957 7972 4847 7972 2958 7972 2958 7973 4847 7973 4848 7973 2958 7974 4848 7974 2959 7974 2959 7975 4848 7975 4849 7975 2959 7976 4849 7976 2960 7976 2960 7977 4849 7977 4850 7977 2960 7978 4850 7978 2961 7978 2961 7979 4850 7979 4851 7979 2961 7980 4851 7980 2962 7980 2962 7981 4851 7981 4838 7981 2962 7982 4838 7982 2943 7982 2953 7983 4852 7983 4853 7983 2953 7984 4853 7984 2951 7984 2951 7985 4853 7985 4854 7985 2951 7986 4854 7986 2952 7986 2952 7987 4854 7987 4846 7987 2952 7988 4846 7988 2957 7988 2954 7989 4855 7989 2953 7989 2953 7990 4855 7990 4852 7990 2973 7991 4856 7991 4857 7991 2973 7992 4857 7992 2981 7992 2981 7993 4857 7993 4858 7993 2981 7994 4858 7994 2955 7994 2955 7995 4858 7995 4855 7995 2955 7996 4855 7996 2954 7996 2948 7997 4859 7997 4860 7997 2948 7998 4860 7998 2950 7998 2950 7999 4860 7999 4861 7999 2950 8000 4861 8000 2970 8000 2970 8001 4861 8001 4862 8001 2970 8002 4862 8002 2971 8002 2971 8003 4862 8003 4856 8003 2971 8004 4856 8004 2973 8004 2947 8005 4863 8005 2948 8005 2948 8006 4863 8006 4859 8006 2949 8007 4864 8007 2947 8007 2947 8008 4864 8008 4863 8008 2975 8009 4865 8009 4866 8009 2975 8010 4866 8010 2974 8010 2974 8011 4866 8011 4867 8011 2974 8012 4867 8012 2972 8012 2972 8013 4867 8013 4864 8013 2972 8014 4864 8014 2949 8014 2926 8015 4868 8015 4869 8015 2926 8016 4869 8016 2982 8016 2982 8017 4869 8017 4870 8017 2982 8018 4870 8018 2983 8018 2983 8019 4870 8019 4865 8019 2983 8020 4865 8020 2975 8020 2946 8021 4871 8021 2926 8021 2926 8022 4871 8022 4868 8022 2980 8023 4872 8023 2946 8023 2946 8024 4872 8024 4871 8024 2913 8025 4873 8025 4874 8025 2913 8026 4874 8026 2914 8026 2914 8027 4874 8027 4875 8027 2914 8028 4875 8028 2923 8028 2923 8029 4875 8029 4876 8029 2923 8030 4876 8030 2915 8030 2915 8031 4876 8031 4877 8031 2915 8032 4877 8032 2916 8032 2916 8033 4877 8033 4878 8033 2916 8034 4878 8034 2944 8034 2944 8035 4878 8035 4879 8035 2944 8036 4879 8036 2934 8036 2934 8037 4879 8037 4880 8037 2934 8038 4880 8038 2968 8038 2968 8039 4880 8039 4872 8039 2968 8040 4872 8040 2980 8040 2912 8041 4881 8041 2913 8041 2913 8042 4881 8042 4873 8042 2917 8043 4882 8043 2912 8043 2912 8044 4882 8044 4881 8044 2925 8045 4883 8045 2917 8045 2917 8046 4883 8046 4882 8046 2969 8047 4884 8047 4885 8047 2969 8048 4885 8048 2967 8048 2967 8049 4885 8049 4886 8049 2967 8050 4886 8050 2932 8050 2932 8051 4886 8051 4887 8051 2932 8052 4887 8052 2933 8052 2933 8053 4887 8053 4888 8053 2933 8054 4888 8054 2945 8054 2945 8055 4888 8055 4889 8055 2945 8056 4889 8056 2918 8056 2918 8057 4889 8057 4890 8057 2918 8058 4890 8058 2919 8058 2919 8059 4890 8059 4891 8059 2919 8060 4891 8060 2924 8060 2924 8061 4891 8061 4883 8061 2924 8062 4883 8062 2925 8062 2979 8063 4828 8063 2969 8063 2969 8064 4828 8064 4884 8064 4892 8065 4893 8065 4894 8065 4895 8066 4896 8066 4892 8066 4897 8067 4898 8067 4899 8067 4900 8068 4901 8068 4902 8068 4903 8069 4904 8069 4905 8069 4906 8070 4907 8070 4908 8070 4909 8071 4910 8071 4911 8071 4912 8072 4913 8072 4914 8072 4915 8073 4916 8073 4917 8073 4918 8074 4919 8074 4920 8074 4921 8075 4922 8075 4923 8075 4923 8076 4922 8076 4924 8076 4920 8077 4925 8077 4926 8077 4925 8078 4920 8078 4927 8078 4927 8079 4920 8079 4919 8079 4927 8080 4919 8080 4928 8080 4929 8081 4930 8081 4931 8081 4932 8082 4933 8082 4934 8082 4934 8083 4933 8083 4935 8083 4934 8084 4935 8084 4930 8084 4930 8085 4935 8085 4936 8085 4930 8086 4936 8086 4931 8086 4932 8087 4934 8087 4937 8087 4937 8088 4934 8088 4938 8088 4937 8089 4938 8089 4939 8089 4940 8090 4941 8090 4938 8090 4938 8091 4941 8091 4942 8091 4938 8092 4942 8092 4939 8092 4943 8093 4944 8093 4940 8093 4940 8094 4944 8094 4945 8094 4940 8095 4945 8095 4941 8095 4946 8096 4947 8096 4948 8096 4948 8097 4947 8097 4949 8097 4948 8098 4949 8098 4943 8098 4943 8099 4949 8099 4950 8099 4943 8100 4950 8100 4944 8100 4913 8101 4951 8101 4948 8101 4948 8102 4951 8102 4952 8102 4948 8103 4952 8103 4946 8103 4946 8104 4952 8104 4953 8104 4946 8105 4953 8105 4954 8105 4912 8106 4914 8106 4910 8106 4909 8107 4911 8107 4907 8107 4955 8108 4956 8108 4906 8108 4957 8109 4956 8109 4958 8109 4958 8110 4956 8110 4955 8110 4958 8111 4955 8111 4959 8111 4959 8112 4955 8112 4960 8112 4959 8113 4960 8113 4961 8113 4961 8114 4960 8114 4962 8114 4962 8115 4960 8115 4963 8115 4962 8116 4963 8116 4964 8116 4964 8117 4963 8117 4965 8117 4965 8118 4963 8118 4966 8118 4965 8119 4966 8119 4967 8119 4967 8120 4966 8120 4968 8120 4968 8121 4966 8121 4969 8121 4968 8122 4969 8122 4970 8122 4970 8123 4969 8123 4971 8123 4971 8124 4969 8124 4972 8124 4971 8125 4972 8125 4973 8125 4973 8126 4972 8126 4974 8126 4974 8127 4972 8127 4975 8127 4974 8128 4975 8128 4976 8128 4976 8129 4975 8129 4977 8129 4977 8130 4975 8130 4978 8130 4977 8131 4978 8131 4979 8131 4980 8132 4981 8132 4978 8132 4978 8133 4981 8133 4982 8133 4978 8134 4982 8134 4979 8134 4983 8135 4981 8135 4984 8135 4984 8136 4981 8136 4980 8136 4984 8137 4980 8137 4985 8137 4896 8138 4986 8138 4892 8138 4892 8139 4986 8139 4987 8139 4892 8140 4987 8140 4893 8140 4893 8141 4987 8141 4988 8141 4893 8142 4988 8142 4989 8142 4916 8143 4918 8143 4917 8143 4917 8144 4918 8144 4920 8144 4917 8145 4920 8145 4922 8145 4922 8146 4920 8146 4926 8146 4922 8147 4926 8147 4924 8147 4921 8148 4895 8148 4922 8148 4922 8149 4895 8149 4892 8149 4922 8150 4892 8150 4917 8150 4917 8151 4892 8151 4894 8151 4917 8152 4894 8152 4915 8152 4915 8153 4894 8153 4929 8153 4915 8154 4929 8154 4990 8154 4990 8155 4929 8155 4931 8155 4913 8156 4948 8156 4914 8156 4914 8157 4948 8157 4943 8157 4914 8158 4943 8158 4991 8158 4991 8159 4943 8159 4940 8159 4991 8160 4940 8160 4992 8160 4992 8161 4940 8161 4938 8161 4992 8162 4938 8162 4993 8162 4993 8163 4938 8163 4934 8163 4993 8164 4934 8164 4994 8164 4994 8165 4934 8165 4930 8165 4994 8166 4930 8166 4995 8166 4995 8167 4930 8167 4929 8167 4995 8168 4929 8168 4996 8168 4996 8169 4929 8169 4894 8169 4996 8170 4894 8170 4997 8170 4997 8171 4894 8171 4893 8171 4997 8172 4893 8172 4899 8172 4899 8173 4893 8173 4989 8173 4899 8174 4989 8174 4897 8174 4910 8175 4914 8175 4911 8175 4911 8176 4914 8176 4991 8176 4911 8177 4991 8177 4998 8177 4998 8178 4991 8178 4992 8178 4998 8179 4992 8179 4999 8179 4999 8180 4992 8180 4993 8180 4999 8181 4993 8181 5000 8181 5000 8182 4993 8182 4994 8182 5000 8183 4994 8183 5001 8183 5001 8184 4994 8184 4995 8184 5001 8185 4995 8185 5002 8185 5002 8186 4995 8186 4996 8186 5002 8187 4996 8187 5003 8187 5003 8188 4996 8188 4997 8188 5003 8189 4997 8189 5004 8189 5004 8190 4997 8190 4899 8190 5004 8191 4899 8191 4902 8191 4902 8192 4899 8192 4898 8192 4902 8193 4898 8193 4900 8193 4907 8194 4911 8194 4908 8194 4908 8195 4911 8195 4998 8195 4908 8196 4998 8196 5005 8196 5005 8197 4998 8197 4999 8197 5005 8198 4999 8198 5006 8198 5006 8199 4999 8199 5000 8199 5006 8200 5000 8200 5007 8200 5007 8201 5000 8201 5001 8201 5007 8202 5001 8202 5008 8202 5008 8203 5001 8203 5002 8203 5008 8204 5002 8204 5009 8204 5009 8205 5002 8205 5003 8205 5009 8206 5003 8206 5010 8206 5010 8207 5003 8207 5004 8207 5010 8208 5004 8208 5011 8208 5011 8209 5004 8209 4902 8209 5011 8210 4902 8210 4905 8210 4905 8211 4902 8211 4901 8211 4905 8212 4901 8212 4903 8212 4906 8213 4908 8213 4955 8213 4955 8214 4908 8214 5005 8214 4955 8215 5005 8215 4960 8215 4960 8216 5005 8216 5006 8216 4960 8217 5006 8217 4963 8217 4963 8218 5006 8218 5007 8218 4963 8219 5007 8219 4966 8219 4966 8220 5007 8220 5008 8220 4966 8221 5008 8221 4969 8221 4969 8222 5008 8222 5009 8222 4969 8223 5009 8223 4972 8223 4972 8224 5009 8224 5010 8224 4972 8225 5010 8225 4975 8225 4975 8226 5010 8226 5011 8226 4975 8227 5011 8227 4978 8227 4978 8228 5011 8228 4905 8228 4978 8229 4905 8229 4980 8229 4980 8230 4905 8230 4904 8230 4980 8231 4904 8231 4985 8231 5012 8232 5013 8232 5014 8232 5014 8233 5013 8233 5015 8233 5014 8234 5015 8234 5016 8234 5012 8235 5017 8235 5013 8235 5013 8236 5017 8236 5018 8236 5013 8237 5018 8237 5019 8237 5019 8238 4923 8238 4924 8238 5019 8239 4924 8239 5013 8239 5013 8240 4924 8240 4926 8240 5013 8241 4926 8241 4925 8241 4928 8242 5020 8242 4927 8242 4927 8243 5020 8243 5021 8243 4927 8244 5021 8244 4925 8244 4925 8245 5021 8245 5022 8245 4925 8246 5022 8246 5013 8246 3005 8247 5023 8247 2984 8247 2984 8248 5023 8248 5024 8248 2984 8249 5024 8249 2985 8249 2985 8250 5024 8250 5025 8250 2985 8251 5025 8251 2987 8251 2987 8252 5025 8252 5026 8252 2987 8253 5026 8253 2988 8253 5026 8254 5027 8254 2988 8254 2988 8255 5027 8255 5028 8255 2988 8256 5028 8256 2989 8256 2989 8257 5028 8257 5029 8257 2989 8258 5029 8258 2990 8258 2990 8259 5029 8259 5030 8259 2990 8260 5030 8260 3016 8260 3016 8261 5030 8261 5031 8261 3016 8262 5031 8262 3017 8262 3017 8263 5031 8263 5032 8263 3017 8264 5032 8264 3008 8264 3008 8265 5032 8265 5033 8265 3008 8266 5033 8266 3007 8266 3007 8267 5033 8267 5034 8267 3007 8268 5034 8268 3006 8268 3006 8269 5034 8269 5035 8269 3006 8270 5035 8270 3012 8270 3012 8271 5035 8271 5036 8271 3012 8272 5036 8272 2991 8272 5036 8273 5037 8273 2991 8273 2991 8274 5037 8274 5038 8274 2991 8275 5038 8275 2992 8275 2992 8276 5038 8276 5039 8276 2992 8277 5039 8277 2993 8277 2993 8278 5039 8278 5040 8278 2993 8279 5040 8279 3009 8279 3009 8280 5040 8280 5041 8280 3009 8281 5041 8281 3010 8281 5041 8282 5042 8282 3010 8282 3010 8283 5042 8283 5043 8283 3010 8284 5043 8284 3011 8284 3011 8285 5043 8285 5044 8285 3011 8286 5044 8286 3013 8286 3013 8287 5044 8287 5045 8287 3013 8288 5045 8288 2986 8288 2986 8289 5045 8289 5046 8289 2986 8290 5046 8290 3014 8290 3014 8291 5046 8291 5047 8291 3014 8292 5047 8292 3015 8292 3015 8293 5047 8293 5048 8293 3015 8294 5048 8294 3018 8294 5048 8295 5049 8295 3018 8295 3018 8296 5049 8296 5050 8296 3018 8297 5050 8297 3019 8297 5050 8298 5051 8298 3019 8298 3019 8299 5051 8299 5052 8299 3019 8300 5052 8300 2995 8300 2995 8301 5052 8301 5053 8301 2995 8302 5053 8302 2996 8302 2996 8303 5053 8303 5054 8303 2996 8304 5054 8304 2997 8304 2997 8305 5054 8305 5055 8305 2997 8306 5055 8306 2998 8306 2998 8307 5055 8307 5056 8307 2998 8308 5056 8308 2999 8308 5056 8309 5057 8309 2999 8309 2999 8310 5057 8310 5058 8310 2999 8311 5058 8311 2994 8311 5058 8312 5059 8312 2994 8312 2994 8313 5059 8313 5060 8313 2994 8314 5060 8314 3000 8314 3000 8315 5060 8315 5061 8315 3000 8316 5061 8316 3001 8316 3001 8317 5061 8317 5062 8317 3001 8318 5062 8318 3002 8318 3002 8319 5062 8319 5063 8319 3002 8320 5063 8320 3003 8320 3003 8321 5063 8321 5064 8321 3003 8322 5064 8322 3004 8322 3004 8323 5064 8323 5065 8323 3004 8324 5065 8324 3005 8324 3005 8325 5065 8325 5066 8325 3005 8326 5066 8326 5023 8326 5067 8327 5068 8327 5069 8327 5070 8328 5071 8328 5072 8328 5073 8329 5074 8329 5075 8329 5075 8330 5074 8330 5076 8330 5075 8331 5076 8331 5077 8331 5078 8332 5079 8332 5080 8332 5080 8333 5079 8333 5081 8333 5080 8334 5081 8334 5082 8334 5082 8335 5081 8335 5083 8335 5083 8336 5081 8336 5084 8336 5083 8337 5084 8337 5085 8337 5085 8338 5084 8338 5086 8338 5086 8339 5084 8339 5087 8339 5086 8340 5087 8340 5088 8340 5088 8341 5087 8341 5089 8341 5089 8342 5087 8342 5090 8342 5089 8343 5090 8343 5091 8343 5091 8344 5090 8344 5092 8344 5092 8345 5090 8345 5093 8345 5092 8346 5093 8346 5094 8346 5094 8347 5093 8347 5095 8347 5095 8348 5093 8348 5096 8348 5095 8349 5096 8349 5097 8349 5097 8350 5096 8350 5098 8350 5098 8351 5096 8351 5099 8351 5098 8352 5099 8352 5100 8352 5101 8353 5100 8353 5102 8353 5102 8354 5100 8354 5099 8354 5102 8355 5099 8355 5103 8355 5103 8356 5099 8356 5071 8356 5104 8357 5105 8357 5106 8357 5106 8358 5105 8358 5070 8358 5107 8359 5108 8359 5109 8359 5109 8360 5108 8360 5104 8360 5110 8361 5111 8361 5107 8361 5067 8362 5111 8362 5068 8362 5068 8363 5111 8363 5110 8363 5068 8364 5110 8364 5112 8364 5112 8365 5110 8365 5113 8365 5113 8366 5110 8366 5114 8366 5114 8367 5110 8367 5115 8367 5114 8368 5115 8368 5116 8368 5116 8369 5115 8369 5117 8369 5117 8370 5115 8370 5118 8370 5117 8371 5118 8371 5119 8371 5119 8372 5118 8372 5120 8372 5120 8373 5118 8373 5121 8373 5120 8374 5121 8374 5122 8374 5122 8375 5121 8375 5123 8375 5123 8376 5121 8376 5124 8376 5123 8377 5124 8377 5125 8377 5125 8378 5124 8378 5126 8378 5126 8379 5124 8379 5127 8379 5126 8380 5127 8380 5128 8380 5128 8381 5127 8381 5129 8381 5129 8382 5127 8382 5130 8382 5129 8383 5130 8383 5131 8383 5132 8384 5133 8384 5134 8384 5131 8385 5130 8385 5134 8385 5134 8386 5130 8386 5135 8386 5134 8387 5135 8387 5132 8387 5136 8388 5137 8388 5132 8388 5132 8389 5137 8389 5138 8389 5132 8390 5138 8390 5133 8390 5020 8391 5137 8391 5021 8391 5021 8392 5137 8392 5136 8392 5021 8393 5136 8393 5022 8393 5022 8394 5136 8394 5013 8394 5016 8395 5015 8395 5139 8395 5139 8396 5015 8396 5140 8396 5139 8397 5140 8397 5141 8397 5142 8398 5143 8398 5144 8398 5144 8399 5145 8399 5142 8399 5142 8400 5145 8400 5146 8400 5142 8401 5146 8401 5140 8401 5140 8402 5146 8402 5147 8402 5140 8403 5147 8403 5141 8403 5148 8404 5149 8404 5150 8404 5150 8405 5151 8405 5148 8405 5148 8406 5151 8406 5152 8406 5148 8407 5152 8407 5143 8407 5143 8408 5152 8408 5153 8408 5143 8409 5153 8409 5144 8409 5154 8410 5155 8410 5149 8410 5149 8411 5155 8411 5156 8411 5149 8412 5156 8412 5150 8412 5077 8413 5157 8413 5075 8413 5075 8414 5157 8414 5158 8414 5075 8415 5158 8415 5154 8415 5154 8416 5158 8416 5159 8416 5154 8417 5159 8417 5155 8417 5071 8418 5099 8418 5072 8418 5072 8419 5099 8419 5096 8419 5072 8420 5096 8420 5160 8420 5160 8421 5096 8421 5093 8421 5160 8422 5093 8422 5161 8422 5161 8423 5093 8423 5090 8423 5161 8424 5090 8424 5162 8424 5162 8425 5090 8425 5087 8425 5162 8426 5087 8426 5163 8426 5163 8427 5087 8427 5084 8427 5163 8428 5084 8428 5164 8428 5164 8429 5084 8429 5081 8429 5164 8430 5081 8430 5165 8430 5165 8431 5081 8431 5079 8431 5165 8432 5079 8432 5166 8432 5070 8433 5072 8433 5106 8433 5106 8434 5072 8434 5160 8434 5106 8435 5160 8435 5167 8435 5167 8436 5160 8436 5161 8436 5167 8437 5161 8437 5168 8437 5168 8438 5161 8438 5162 8438 5168 8439 5162 8439 5169 8439 5169 8440 5162 8440 5163 8440 5169 8441 5163 8441 5170 8441 5170 8442 5163 8442 5164 8442 5170 8443 5164 8443 5171 8443 5171 8444 5164 8444 5165 8444 5171 8445 5165 8445 5172 8445 5172 8446 5165 8446 5166 8446 5172 8447 5166 8447 5173 8447 5104 8448 5106 8448 5109 8448 5109 8449 5106 8449 5167 8449 5109 8450 5167 8450 5174 8450 5174 8451 5167 8451 5168 8451 5174 8452 5168 8452 5175 8452 5175 8453 5168 8453 5169 8453 5175 8454 5169 8454 5176 8454 5176 8455 5169 8455 5170 8455 5176 8456 5170 8456 5177 8456 5177 8457 5170 8457 5171 8457 5177 8458 5171 8458 5178 8458 5178 8459 5171 8459 5172 8459 5178 8460 5172 8460 5179 8460 5179 8461 5172 8461 5173 8461 5179 8462 5173 8462 5180 8462 5107 8463 5109 8463 5110 8463 5110 8464 5109 8464 5174 8464 5110 8465 5174 8465 5115 8465 5115 8466 5174 8466 5175 8466 5115 8467 5175 8467 5118 8467 5118 8468 5175 8468 5176 8468 5118 8469 5176 8469 5121 8469 5121 8470 5176 8470 5177 8470 5121 8471 5177 8471 5124 8471 5124 8472 5177 8472 5178 8472 5124 8473 5178 8473 5127 8473 5127 8474 5178 8474 5179 8474 5127 8475 5179 8475 5130 8475 5130 8476 5179 8476 5180 8476 5130 8477 5180 8477 5135 8477 5015 8478 5013 8478 5140 8478 5140 8479 5013 8479 5136 8479 5140 8480 5136 8480 5142 8480 5142 8481 5136 8481 5132 8481 5142 8482 5132 8482 5143 8482 5143 8483 5132 8483 5135 8483 5143 8484 5135 8484 5148 8484 5148 8485 5135 8485 5180 8485 5148 8486 5180 8486 5149 8486 5149 8487 5180 8487 5173 8487 5149 8488 5173 8488 5154 8488 5154 8489 5173 8489 5166 8489 5154 8490 5166 8490 5075 8490 5075 8491 5166 8491 5079 8491 5075 8492 5079 8492 5073 8492 5073 8493 5079 8493 5078 8493 5896 9714 5101 9714 5897 9714 5897 9715 5101 9715 5102 9715 5897 9716 5102 9716 5898 9716 5898 9717 5102 9717 5103 9717 5898 9718 5103 9718 5899 9718 5899 9719 5103 9719 5071 9719 5899 9720 5071 9720 5900 9720 5900 9721 5071 9721 5070 9721 5900 9722 5070 9722 5901 9722 5901 9723 5070 9723 5105 9723 5901 9724 5105 9724 5902 9724 5902 9725 5105 9725 5104 9725 5902 9726 5104 9726 5903 9726 5903 9727 5104 9727 5108 9727 5903 9728 5108 9728 5904 9728 5904 9729 5108 9729 5107 9729 5904 9730 5107 9730 5905 9730 5905 9731 5107 9731 5111 9731 5905 9732 5111 9732 5906 9732 5906 9733 5111 9733 5067 9733 5906 9734 5067 9734 5907 9734 5907 9735 5067 9735 5069 9735 5131 9736 5908 9736 5909 9736 5909 9737 5910 9737 5131 9737 5131 9738 5910 9738 5911 9738 5131 9739 5911 9739 5912 9739 5912 9740 5913 9740 5131 9740 5131 9741 5913 9741 5914 9741 5131 9742 5914 9742 5915 9742 5915 9743 5916 9743 5131 9743 5131 9744 5916 9744 5917 9744 5131 9745 5917 9745 5918 9745 5918 9746 5919 9746 5131 9746 5131 9747 5919 9747 5920 9747 5131 9748 5920 9748 5921 9748 5117 9749 5119 9749 5131 9749 5119 9750 5120 9750 5131 9750 5131 9751 5120 9751 5122 9751 5131 9752 5122 9752 5129 9752 5129 9753 5122 9753 5128 9753 5123 9754 5125 9754 5122 9754 5122 9755 5125 9755 5126 9755 5122 9756 5126 9756 5128 9756 5921 9757 5922 9757 5131 9757 5131 9758 5922 9758 5923 9758 5131 9759 5923 9759 5069 9759 5069 9760 5923 9760 5907 9760 5069 9761 5068 9761 5131 9761 5131 9762 5068 9762 5112 9762 5131 9763 5112 9763 5113 9763 5113 9764 5114 9764 5131 9764 5131 9765 5114 9765 5116 9765 5131 9766 5116 9766 5117 9766 5960 9801 5020 9801 5961 9801 5961 9802 5020 9802 4928 9802 5961 9803 4928 9803 5962 9803 5962 9804 4928 9804 4919 9804 5133 9805 5963 9805 5134 9805 5134 9806 5963 9806 5908 9806 5134 9807 5908 9807 5131 9807 5960 9808 5964 9808 5020 9808 5020 9809 5964 9809 5965 9809 5020 9810 5965 9810 5137 9810 5137 9811 5965 9811 5963 9811 5137 9812 5963 9812 5138 9812 5138 9813 5963 9813 5133 9813 4919 9814 4918 9814 5962 9814 5962 9815 4918 9815 4916 9815 5962 9816 4916 9816 5966 9816 5966 9817 4916 9817 5967 9817 4990 9818 5968 9818 4915 9818 4915 9819 5968 9819 5969 9819 4915 9820 5969 9820 4916 9820 4916 9821 5969 9821 5970 9821 4916 9822 5970 9822 5967 9822 4937 9823 4939 9823 5968 9823 4990 9824 4931 9824 5968 9824 5968 9825 4931 9825 4936 9825 5968 9826 4936 9826 4935 9826 4939 9827 4942 9827 5968 9827 5968 9828 4942 9828 4941 9828 5968 9829 4941 9829 4945 9829 5971 9830 5972 9830 5968 9830 4935 9831 4933 9831 5968 9831 5968 9832 4933 9832 4932 9832 5968 9833 4932 9833 4937 9833 4945 9834 4944 9834 5968 9834 5968 9835 4944 9835 4950 9835 5968 9836 4950 9836 4949 9836 5971 9837 5968 9837 5973 9837 5972 9838 5974 9838 5968 9838 5968 9839 5974 9839 5975 9839 5968 9840 5975 9840 5976 9840 5977 9841 5978 9841 5979 9841 5979 9842 5978 9842 5968 9842 5979 9843 5968 9843 5980 9843 4949 9844 4947 9844 5968 9844 5968 9845 4947 9845 4946 9845 5968 9846 4946 9846 5973 9846 5973 9847 4946 9847 4954 9847 5976 9848 5981 9848 5968 9848 5968 9849 5981 9849 5982 9849 5968 9850 5982 9850 5980 9850 5983 9851 5984 9851 5979 9851 5979 9852 5984 9852 5985 9852 5979 9853 5985 9853 5977 9853 4957 9854 5986 9854 4956 9854 4956 9855 5986 9855 5987 9855 4956 9856 5987 9856 4906 9856 4906 9857 5987 9857 5988 9857 4906 9858 5988 9858 4907 9858 4907 9859 5988 9859 5989 9859 4907 9860 5989 9860 4909 9860 4909 9861 5989 9861 5990 9861 4909 9862 5990 9862 4910 9862 4910 9863 5990 9863 5991 9863 4910 9864 5991 9864 4912 9864 4912 9865 5991 9865 5992 9865 4912 9866 5992 9866 4913 9866 4913 9867 5992 9867 5993 9867 4913 9868 5993 9868 4951 9868 4951 9869 5993 9869 5994 9869 4951 9870 5994 9870 4952 9870 4952 9871 5994 9871 5995 9871 4952 9872 5995 9872 4953 9872 4953 9873 5995 9873 5996 9873 4953 9874 5996 9874 4954 9874 4954 9875 5996 9875 5973 9875 5997 9876 5998 9876 3605 9876 5999 9877 3615 9877 6000 9877 6000 9878 3615 9878 3614 9878 6000 9879 3614 9879 6001 9879 6002 9880 6003 9880 6004 9880 6003 9881 6005 9881 6004 9881 6004 9882 6005 9882 6006 9882 6004 9883 6006 9883 6007 9883 6007 9884 6006 9884 6008 9884 6007 9885 6008 9885 6009 9885 6010 9886 6011 9886 6012 9886 6013 9887 3606 9887 6014 9887 6014 9888 3606 9888 3605 9888 6014 9889 3605 9889 6015 9889 6015 9890 3605 9890 5998 9890 6013 9891 6016 9891 3606 9891 3606 9892 6016 9892 6017 9892 3606 9893 6017 9893 3607 9893 3607 9894 6017 9894 6018 9894 3607 9895 6018 9895 3608 9895 3608 9896 6018 9896 6019 9896 3608 9897 6019 9897 3609 9897 3609 9898 6019 9898 6020 9898 3609 9899 6020 9899 3610 9899 3610 9900 6020 9900 6021 9900 3610 9901 6021 9901 3611 9901 3611 9902 6021 9902 6022 9902 3611 9903 6022 9903 3612 9903 3612 9904 6022 9904 6001 9904 3612 9905 6001 9905 3613 9905 3613 9906 6001 9906 3614 9906 3550 9907 3549 9907 6023 9907 6023 9908 3549 9908 3548 9908 6023 9909 3548 9909 6024 9909 6024 9910 3548 9910 3547 9910 6024 9911 3547 9911 6025 9911 6025 9912 3547 9912 3617 9912 6025 9913 3617 9913 5999 9913 5999 9914 3617 9914 3616 9914 5999 9915 3616 9915 3615 9915 6026 9916 3554 9916 3553 9916 6009 9917 6027 9917 6007 9917 6007 9918 6027 9918 6028 9918 6007 9919 6028 9919 6011 9919 6011 9920 6028 9920 6029 9920 6011 9921 6029 9921 6030 9921 6030 9922 6031 9922 6011 9922 6011 9923 6031 9923 6032 9923 6011 9924 6032 9924 6012 9924 6004 9925 6026 9925 6002 9925 6002 9926 6026 9926 3553 9926 6002 9927 3553 9927 6033 9927 6033 9928 3553 9928 3552 9928 6033 9929 3552 9929 6023 9929 6023 9930 3552 9930 3551 9930 6023 9931 3551 9931 3550 9931 3604 9932 6034 9932 3605 9932 3605 9933 6034 9933 6035 9933 3605 9934 6035 9934 5997 9934 3603 9935 3602 9935 6036 9935 6012 9936 6037 9936 6010 9936 6010 9937 6037 9937 6038 9937 6010 9938 6038 9938 6036 9938 6036 9939 6038 9939 6034 9939 6036 9940 6034 9940 3603 9940 3603 9941 6034 9941 3604 9941 6039 9942 6040 9942 3934 9942 3884 9943 3886 9943 6041 9943 3934 9944 3936 9944 6039 9944 6039 9945 3936 9945 3938 9945 6039 9946 3938 9946 3940 9946 6041 9947 3886 9947 6042 9947 3940 9948 3942 9948 6039 9948 6039 9949 3942 9949 3944 9949 6039 9950 3944 9950 6043 9950 6043 9951 3944 9951 3946 9951 6043 9952 3946 9952 3948 9952 3948 9953 3878 9953 6043 9953 6043 9954 3878 9954 3880 9954 6043 9955 3880 9955 6041 9955 6041 9956 3880 9956 3882 9956 6041 9957 3882 9957 3884 9957 3904 9958 2226 9958 3902 9958 3902 9959 2226 9959 2225 9959 3902 9960 2225 9960 3900 9960 3928 9961 3930 9961 6040 9961 6040 9962 3930 9962 3932 9962 6040 9963 3932 9963 3934 9963 3886 9964 3888 9964 6042 9964 6042 9965 3888 9965 3890 9965 6042 9966 3890 9966 2214 9966 2225 9967 2224 9967 3900 9967 3900 9968 2224 9968 2223 9968 3900 9969 2223 9969 3898 9969 3898 9970 2223 9970 2222 9970 3898 9971 2222 9971 3896 9971 3896 9972 2222 9972 2221 9972 3896 9973 2221 9973 3894 9973 3894 9974 2221 9974 2220 9974 3894 9975 2220 9975 3892 9975 3892 9976 2220 9976 2219 9976 3892 9977 2219 9977 3890 9977 3890 9978 2219 9978 2218 9978 3890 9979 2218 9979 2217 9979 2217 9980 2216 9980 3890 9980 3890 9981 2216 9981 2215 9981 3890 9982 2215 9982 2214 9982 3914 9983 2232 9983 3912 9983 3912 9984 2232 9984 2231 9984 3912 9985 2231 9985 3910 9985 3910 9986 2231 9986 2230 9986 3910 9987 2230 9987 3908 9987 3908 9988 2230 9988 2229 9988 3908 9989 2229 9989 3906 9989 3906 9990 2229 9990 2228 9990 3906 9991 2228 9991 3904 9991 3904 9992 2228 9992 2227 9992 3904 9993 2227 9993 2226 9993 2234 9994 3918 9994 3920 9994 2214 9995 2213 9995 6042 9995 6042 9996 2213 9996 2212 9996 6042 9997 2212 9997 6044 9997 6044 9998 2212 9998 3558 9998 6044 9999 3558 9999 6045 9999 6045 10000 3558 10000 6046 10000 6045 10001 6046 10001 6047 10001 6047 10002 6046 10002 3556 10002 6047 10003 3556 10003 6026 10003 6026 10004 3556 10004 3555 10004 6026 10005 3555 10005 3554 10005 3914 10006 3916 10006 2232 10006 2232 10007 3916 10007 3918 10007 2232 10008 3918 10008 2233 10008 2233 10009 3918 10009 2234 10009 3920 10010 3922 10010 2234 10010 2234 10011 3922 10011 3924 10011 2234 10012 3924 10012 2235 10012 2235 10013 3924 10013 3926 10013 3926 10014 3928 10014 2235 10014 2235 10015 3928 10015 6040 10015 2235 10016 6040 10016 2236 10016 2236 10017 6040 10017 6048 10017 2236 10018 6048 10018 2237 10018 4020 10019 3950 10019 2255 10019 4002 10020 4004 10020 6049 10020 6049 10021 4004 10021 4006 10021 6049 10022 4006 10022 6050 10022 3994 10023 3996 10023 6051 10023 6051 10024 3996 10024 3998 10024 6051 10025 3998 10025 6049 10025 6049 10026 3998 10026 4000 10026 6049 10027 4000 10027 4002 10027 2255 10028 3950 10028 2256 10028 2210 10029 2209 10029 6052 10029 6053 10030 3982 10030 6054 10030 6054 10031 3982 10031 3984 10031 6054 10032 3984 10032 3986 10032 3986 10033 3988 10033 6054 10033 6054 10034 3988 10034 3990 10034 6054 10035 3990 10035 6051 10035 6051 10036 3990 10036 3992 10036 6051 10037 3992 10037 3994 10037 2254 10038 2253 10038 6050 10038 4014 10039 4016 10039 2255 10039 2255 10040 4016 10040 4018 10040 2255 10041 4018 10041 4020 10041 3970 10042 2265 10042 3968 10042 3968 10043 2265 10043 2264 10043 3968 10044 2264 10044 3966 10044 3978 10045 2208 10045 3976 10045 3976 10046 2208 10046 2207 10046 3976 10047 2207 10047 2206 10047 2209 10048 2208 10048 6052 10048 6052 10049 2208 10049 3978 10049 6052 10050 3978 10050 6053 10050 6053 10051 3978 10051 3980 10051 6053 10052 3980 10052 3982 10052 2254 10053 6050 10053 2255 10053 2206 10054 2205 10054 3976 10054 3976 10055 2205 10055 2204 10055 3976 10056 2204 10056 3974 10056 3974 10057 2204 10057 2203 10057 3974 10058 2203 10058 3972 10058 3972 10059 2203 10059 2267 10059 3972 10060 2267 10060 3970 10060 3970 10061 2267 10061 2266 10061 3970 10062 2266 10062 2265 10062 4006 10063 4008 10063 6050 10063 6050 10064 4008 10064 4010 10064 6050 10065 4010 10065 2255 10065 2255 10066 4010 10066 4012 10066 2255 10067 4012 10067 4014 10067 3950 10068 3952 10068 2256 10068 2256 10069 3952 10069 3954 10069 2256 10070 3954 10070 2257 10070 2257 10071 3954 10071 3956 10071 2257 10072 3956 10072 2258 10072 2258 10073 3956 10073 3958 10073 2258 10074 3958 10074 2259 10074 2259 10075 3958 10075 3960 10075 2259 10076 3960 10076 2260 10076 2260 10077 3960 10077 3962 10077 2260 10078 3962 10078 2261 10078 2261 10079 3962 10079 3964 10079 2261 10080 3964 10080 2262 10080 2262 10081 3964 10081 3966 10081 2262 10082 3966 10082 2263 10082 2263 10083 3966 10083 2264 10083 2253 10084 2252 10084 6050 10084 6050 10085 2252 10085 2251 10085 6050 10086 2251 10086 6055 10086 6055 10087 2251 10087 2250 10087 6055 10088 2250 10088 6056 10088 6056 10089 2250 10089 2249 10089 6056 10090 2249 10090 6057 10090 6057 10091 2249 10091 2248 10091 6057 10092 2248 10092 6058 10092 6058 10093 2248 10093 2247 10093 6058 10094 2247 10094 6059 10094 6059 10095 2247 10095 2246 10095 6059 10096 2246 10096 6060 10096 6060 10097 2246 10097 2245 10097 6060 10098 2245 10098 6061 10098 6061 10099 2245 10099 2244 10099 6061 10100 2244 10100 6062 10100 6062 10101 2244 10101 2243 10101 6062 10102 2243 10102 6063 10102 6063 10103 2243 10103 2242 10103 6063 10104 2242 10104 6064 10104 6064 10105 2242 10105 2241 10105 6064 10106 2241 10106 6065 10106 6065 10107 2241 10107 2240 10107 6065 10108 2240 10108 6066 10108 6066 10109 2240 10109 2239 10109 6066 10110 2239 10110 6048 10110 6048 10111 2239 10111 2238 10111 6048 10112 2238 10112 2237 10112 6067 10113 3576 10113 6068 10113 6068 10114 3576 10114 3575 10114 6068 10115 3575 10115 6069 10115 6070 10116 6071 10116 3582 10116 3582 10117 6071 10117 6072 10117 3582 10118 6072 10118 3583 10118 3583 10119 6072 10119 6073 10119 3583 10120 6073 10120 6074 10120 6070 10121 3582 10121 6075 10121 6075 10122 3582 10122 3581 10122 6075 10123 3581 10123 6076 10123 6076 10124 3581 10124 3580 10124 6076 10125 3580 10125 6077 10125 6077 10126 3580 10126 3579 10126 6077 10127 3579 10127 6078 10127 6078 10128 3579 10128 3578 10128 6078 10129 3578 10129 6067 10129 6067 10130 3578 10130 3577 10130 6067 10131 3577 10131 3576 10131 3585 10132 3584 10132 6079 10132 6079 10133 3584 10133 3583 10133 6079 10134 3583 10134 6080 10134 6080 10135 3583 10135 6074 10135 6081 10136 6082 10136 6083 10136 6083 10137 6082 10137 6084 10137 6083 10138 6084 10138 6085 10138 6086 10139 6087 10139 6088 10139 6088 10140 6087 10140 6089 10140 6088 10141 6089 10141 6083 10141 6083 10142 6089 10142 6090 10142 6083 10143 6090 10143 6081 10143 3565 10144 3564 10144 6091 10144 6092 10145 3586 10145 3585 10145 6093 10146 6094 10146 6095 10146 6095 10147 6094 10147 6096 10147 6095 10148 6096 10148 6088 10148 6088 10149 6096 10149 6097 10149 6088 10150 6097 10150 6086 10150 6098 10151 3567 10151 3566 10151 6079 10152 6099 10152 3585 10152 3585 10153 6099 10153 6100 10153 3585 10154 6100 10154 6092 10154 6092 10155 6100 10155 6101 10155 6092 10156 6101 10156 6095 10156 6095 10157 6101 10157 6102 10157 6095 10158 6102 10158 6093 10158 3575 10159 3574 10159 6069 10159 6069 10160 3574 10160 3573 10160 6069 10161 3573 10161 6103 10161 6103 10162 3573 10162 3572 10162 6103 10163 3572 10163 6104 10163 6104 10164 3572 10164 3571 10164 6104 10165 3571 10165 6105 10165 6105 10166 3571 10166 3570 10166 6105 10167 3570 10167 6106 10167 6106 10168 3570 10168 3569 10168 6106 10169 3569 10169 6098 10169 6098 10170 3569 10170 3568 10170 6098 10171 3568 10171 3567 10171 3566 10172 3565 10172 6098 10172 6098 10173 3565 10173 6091 10173 6098 10174 6091 10174 6107 10174 6107 10175 6091 10175 6085 10175 6107 10176 6085 10176 6108 10176 6108 10177 6085 10177 6084 10177 3564 10178 3563 10178 6091 10178 6091 10179 3563 10179 3562 10179 6091 10180 3562 10180 6109 10180 6109 10181 3562 10181 3561 10181 6109 10182 3561 10182 6110 10182 6110 10183 3561 10183 6111 10183 6110 10184 6111 10184 6112 10184 6112 10185 6111 10185 3559 10185 6112 10186 3559 10186 6052 10186 6052 10187 3559 10187 2211 10187 6052 10188 2211 10188 2210 10188 3602 10189 3601 10189 6036 10189 6036 10190 3601 10190 3600 10190 6036 10191 3600 10191 6113 10191 6113 10192 3600 10192 3599 10192 6113 10193 3599 10193 6114 10193 6114 10194 3599 10194 3598 10194 6114 10195 3598 10195 6115 10195 6115 10196 3598 10196 3597 10196 6115 10197 3597 10197 6116 10197 6116 10198 3597 10198 3596 10198 6116 10199 3596 10199 6117 10199 6117 10200 3596 10200 3595 10200 6117 10201 3595 10201 6118 10201 6118 10202 3595 10202 3594 10202 6118 10203 3594 10203 6119 10203 6119 10204 3594 10204 3593 10204 6119 10205 3593 10205 6120 10205 6120 10206 3593 10206 3592 10206 6120 10207 3592 10207 6121 10207 6121 10208 3592 10208 3591 10208 6121 10209 3591 10209 6122 10209 6122 10210 3591 10210 3590 10210 6122 10211 3590 10211 6123 10211 6123 10212 3590 10212 3589 10212 6123 10213 3589 10213 6124 10213 6124 10214 3589 10214 3588 10214 6124 10215 3588 10215 6092 10215 6092 10216 3588 10216 3587 10216 6092 10217 3587 10217 3586 10217 6125 10218 6126 10218 6127 10218 6128 10219 6129 10219 6130 10219 6131 10220 6132 10220 6133 10220 6134 10221 6135 10221 6136 10221 6137 10222 6138 10222 6139 10222 6140 10223 6141 10223 6142 10223 6143 10224 6144 10224 6145 10224 6146 10225 6147 10225 6148 10225 6149 10226 6150 10226 6151 10226 6152 10227 6153 10227 6154 10227 6152 10228 6155 10228 6156 10228 6156 10229 6155 10229 6157 10229 6156 10230 6157 10230 6158 10230 6159 10231 6160 10231 6157 10231 6157 10232 6160 10232 6161 10232 6157 10233 6161 10233 6158 10233 6162 10234 6163 10234 6159 10234 6159 10235 6163 10235 6164 10235 6159 10236 6164 10236 6160 10236 6165 10237 6166 10237 6162 10237 6162 10238 6166 10238 6167 10238 6162 10239 6167 10239 6163 10239 6165 10240 6162 10240 6168 10240 6168 10241 6162 10241 6169 10241 6168 10242 6169 10242 6170 10242 6170 10243 6169 10243 6171 10243 6170 10244 6171 10244 6172 10244 6173 10245 6174 10245 6171 10245 6171 10246 6174 10246 6175 10246 6171 10247 6175 10247 6172 10247 6176 10248 6177 10248 6178 10248 6178 10249 6177 10249 6179 10249 6180 10250 6181 10250 6182 10250 6182 10251 6181 10251 6183 10251 6182 10252 6183 10252 6178 10252 6178 10253 6183 10253 6184 10253 6178 10254 6184 10254 6176 10254 6185 10255 6186 10255 6180 10255 6180 10256 6186 10256 6187 10256 6180 10257 6187 10257 6181 10257 6188 10258 6189 10258 6132 10258 6188 10259 6132 10259 6190 10259 6190 10260 6132 10260 6191 10260 6191 10261 6132 10261 6131 10261 6191 10262 6131 10262 6192 10262 6193 10263 6194 10263 6195 10263 6196 10264 6197 10264 6198 10264 6198 10265 6197 10265 6199 10265 6200 10266 6201 10266 6202 10266 6202 10267 6201 10267 6203 10267 6204 10268 6205 10268 6206 10268 6206 10269 6205 10269 6207 10269 6204 10270 6208 10270 6205 10270 6205 10271 6208 10271 6209 10271 6205 10272 6209 10272 6203 10272 6203 10273 6209 10273 6210 10273 6203 10274 6210 10274 6202 10274 6211 10275 6212 10275 6213 10275 6213 10276 6212 10276 6214 10276 6213 10277 6214 10277 6207 10277 6207 10278 6214 10278 6215 10278 6207 10279 6215 10279 6206 10279 6211 10280 6213 10280 6216 10280 6216 10281 6213 10281 6217 10281 6216 10282 6217 10282 6218 10282 6218 10283 6217 10283 6219 10283 6219 10284 6217 10284 6220 10284 6219 10285 6220 10285 6221 10285 6222 10286 6223 10286 6224 10286 6225 10287 6226 10287 6227 10287 6227 10288 6226 10288 6127 10288 6227 10289 6127 10289 6228 10289 6228 10290 6127 10290 6126 10290 6224 10291 6229 10291 6222 10291 6222 10292 6229 10292 6221 10292 6222 10293 6221 10293 6230 10293 6230 10294 6221 10294 6220 10294 6230 10295 6220 10295 6231 10295 6231 10296 6220 10296 6226 10296 6231 10297 6226 10297 6232 10297 6232 10298 6226 10298 6225 10298 6147 10299 6149 10299 6233 10299 6234 10300 6146 10300 6235 10300 6236 10301 6237 10301 6238 10301 6149 10302 6151 10302 6233 10302 6233 10303 6151 10303 6239 10303 6233 10304 6239 10304 6240 10304 6240 10305 6239 10305 6236 10305 6240 10306 6236 10306 6241 10306 6241 10307 6236 10307 6238 10307 6241 10308 6238 10308 6242 10308 6243 10309 6244 10309 6245 10309 6146 10310 6148 10310 6235 10310 6235 10311 6148 10311 6246 10311 6235 10312 6246 10312 6247 10312 6247 10313 6246 10313 6243 10313 6247 10314 6243 10314 6248 10314 6248 10315 6243 10315 6245 10315 6248 10316 6245 10316 6249 10316 6147 10317 6233 10317 6148 10317 6148 10318 6233 10318 6240 10318 6148 10319 6240 10319 6246 10319 6246 10320 6240 10320 6241 10320 6246 10321 6241 10321 6243 10321 6243 10322 6241 10322 6242 10322 6243 10323 6242 10323 6244 10323 6138 10324 6143 10324 6139 10324 6139 10325 6143 10325 6145 10325 6139 10326 6145 10326 6250 10326 6250 10327 6145 10327 6251 10327 6250 10328 6251 10328 6252 10328 6252 10329 6251 10329 6253 10329 6252 10330 6253 10330 6254 10330 6254 10331 6253 10331 6234 10331 6255 10332 6256 10332 6257 10332 6129 10333 6140 10333 6130 10333 6130 10334 6140 10334 6142 10334 6130 10335 6142 10335 6258 10335 6258 10336 6142 10336 6259 10336 6258 10337 6259 10337 6260 10337 6260 10338 6259 10338 6261 10338 6260 10339 6261 10339 6255 10339 6255 10340 6261 10340 6262 10340 6255 10341 6257 10341 6260 10341 6260 10342 6257 10342 6263 10342 6260 10343 6263 10343 6258 10343 6141 10344 6137 10344 6142 10344 6142 10345 6137 10345 6139 10345 6142 10346 6139 10346 6259 10346 6259 10347 6139 10347 6250 10347 6259 10348 6250 10348 6261 10348 6261 10349 6250 10349 6252 10349 6261 10350 6252 10350 6262 10350 6262 10351 6252 10351 6254 10351 6234 10352 6235 10352 6254 10352 6254 10353 6235 10353 6247 10353 6254 10354 6247 10354 6262 10354 6262 10355 6247 10355 6248 10355 6262 10356 6248 10356 6255 10356 6255 10357 6248 10357 6249 10357 6255 10358 6249 10358 6256 10358 6264 10359 6265 10359 6136 10359 6136 10360 6265 10360 6266 10360 6136 10361 6266 10361 6134 10361 6135 10362 6267 10362 6136 10362 6136 10363 6267 10363 6268 10363 6136 10364 6268 10364 6264 10364 6264 10365 6268 10365 6269 10365 6270 10366 6173 10366 6271 10366 6271 10367 6173 10367 6171 10367 6271 10368 6171 10368 6272 10368 6272 10369 6171 10369 6169 10369 6272 10370 6169 10370 6273 10370 6273 10371 6169 10371 6162 10371 6273 10372 6162 10372 6274 10372 6274 10373 6162 10373 6159 10373 6274 10374 6159 10374 6275 10374 6275 10375 6159 10375 6157 10375 6275 10376 6157 10376 6276 10376 6276 10377 6157 10377 6155 10377 6135 10378 6277 10378 6267 10378 6267 10379 6277 10379 6278 10379 6267 10380 6278 10380 6279 10380 6279 10381 6278 10381 6280 10381 6281 10382 6282 10382 6283 10382 6283 10383 6282 10383 6284 10383 6283 10384 6284 10384 6285 10384 6150 10385 6269 10385 6281 10385 6281 10386 6269 10386 6268 10386 6281 10387 6268 10387 6282 10387 6282 10388 6268 10388 6267 10388 6282 10389 6267 10389 6284 10389 6284 10390 6267 10390 6279 10390 6284 10391 6279 10391 6286 10391 6286 10392 6279 10392 6280 10392 6286 10393 6280 10393 6287 10393 6288 10394 6289 10394 6290 10394 6290 10395 6289 10395 6291 10395 6154 10396 6292 10396 6293 10396 6293 10397 6292 10397 6294 10397 6293 10398 6294 10398 6295 10398 6295 10399 6294 10399 6296 10399 6295 10400 6296 10400 6288 10400 6288 10401 6296 10401 6297 10401 6288 10402 6297 10402 6289 10402 6298 10403 6299 10403 6300 10403 6300 10404 6299 10404 6301 10404 6300 10405 6301 10405 6302 10405 6302 10406 6301 10406 6303 10406 6302 10407 6303 10407 6196 10407 6196 10408 6303 10408 6304 10408 6196 10409 6304 10409 6197 10409 6195 10410 6305 10410 6306 10410 6306 10411 6305 10411 6307 10411 6308 10412 6309 10412 6300 10412 6300 10413 6309 10413 6310 10413 6300 10414 6310 10414 6298 10414 6276 10415 6311 10415 6275 10415 6275 10416 6311 10416 6312 10416 6275 10417 6312 10417 6274 10417 6274 10418 6312 10418 6313 10418 6274 10419 6313 10419 6273 10419 6273 10420 6313 10420 6314 10420 6273 10421 6314 10421 6272 10421 6272 10422 6314 10422 6315 10422 6272 10423 6315 10423 6271 10423 6271 10424 6315 10424 6316 10424 6271 10425 6316 10425 6270 10425 6270 10426 6316 10426 6317 10426 6270 10427 6317 10427 6318 10427 6318 10428 6317 10428 6319 10428 6318 10429 6319 10429 6320 10429 6194 10430 6192 10430 6195 10430 6195 10431 6192 10431 6131 10431 6195 10432 6131 10432 6305 10432 6305 10433 6131 10433 6133 10433 6305 10434 6133 10434 6307 10434 6307 10435 6133 10435 6321 10435 6307 10436 6321 10436 6322 10436 6320 10437 6180 10437 6318 10437 6318 10438 6180 10438 6182 10438 6318 10439 6182 10439 6270 10439 6270 10440 6182 10440 6178 10440 6270 10441 6178 10441 6173 10441 6173 10442 6178 10442 6179 10442 6173 10443 6179 10443 6174 10443 6323 10444 6324 10444 6325 10444 6325 10445 6324 10445 6326 10445 6325 10446 6326 10446 6308 10446 6308 10447 6326 10447 6327 10447 6308 10448 6327 10448 6309 10448 6323 10449 6325 10449 6328 10449 6328 10450 6325 10450 6329 10450 6328 10451 6329 10451 6330 10451 6330 10452 6329 10452 6331 10452 6331 10453 6329 10453 6332 10453 6331 10454 6332 10454 6333 10454 6200 10455 6334 10455 6201 10455 6201 10456 6334 10456 6335 10456 6201 10457 6335 10457 6332 10457 6332 10458 6335 10458 6336 10458 6332 10459 6336 10459 6333 10459 6337 10460 6338 10460 6339 10460 6339 10461 6338 10461 6340 10461 6339 10462 6340 10462 6341 10462 6341 10463 6340 10463 6342 10463 6341 10464 6342 10464 6343 10464 6343 10465 6342 10465 6344 10465 6343 10466 6344 10466 6345 10466 6345 10467 6344 10467 6346 10467 6345 10468 6346 10468 6347 10468 6347 10469 6346 10469 6348 10469 6347 10470 6348 10470 6349 10470 6349 10471 6348 10471 6350 10471 6349 10472 6350 10472 6351 10472 6351 10473 6350 10473 6352 10473 6351 10474 6352 10474 6353 10474 6353 10475 6352 10475 6354 10475 6353 10476 6354 10476 6355 10476 6355 10477 6354 10477 6356 10477 6355 10478 6356 10478 6322 10478 6322 10479 6356 10479 6357 10479 6322 10480 6357 10480 6307 10480 6198 10481 6193 10481 6196 10481 6196 10482 6193 10482 6195 10482 6196 10483 6195 10483 6302 10483 6302 10484 6195 10484 6306 10484 6302 10485 6306 10485 6300 10485 6300 10486 6306 10486 6307 10486 6300 10487 6307 10487 6308 10487 6308 10488 6307 10488 6357 10488 6308 10489 6357 10489 6325 10489 6325 10490 6357 10490 6356 10490 6325 10491 6356 10491 6329 10491 6329 10492 6356 10492 6354 10492 6329 10493 6354 10493 6332 10493 6332 10494 6354 10494 6352 10494 6332 10495 6352 10495 6201 10495 6201 10496 6352 10496 6350 10496 6201 10497 6350 10497 6203 10497 6203 10498 6350 10498 6348 10498 6203 10499 6348 10499 6205 10499 6205 10500 6348 10500 6346 10500 6205 10501 6346 10501 6207 10501 6207 10502 6346 10502 6344 10502 6207 10503 6344 10503 6213 10503 6213 10504 6344 10504 6342 10504 6213 10505 6342 10505 6217 10505 6217 10506 6342 10506 6340 10506 6217 10507 6340 10507 6220 10507 6220 10508 6340 10508 6338 10508 6220 10509 6338 10509 6226 10509 6226 10510 6338 10510 6337 10510 6226 10511 6337 10511 6127 10511 6311 10512 6287 10512 6312 10512 6312 10513 6287 10513 6280 10513 6312 10514 6280 10514 6313 10514 6313 10515 6280 10515 6278 10515 6313 10516 6278 10516 6314 10516 6314 10517 6278 10517 6277 10517 6314 10518 6277 10518 6315 10518 6315 10519 6277 10519 6135 10519 6315 10520 6135 10520 6316 10520 6316 10521 6135 10521 6134 10521 6316 10522 6134 10522 6317 10522 6317 10523 6134 10523 6266 10523 6317 10524 6266 10524 6319 10524 6319 10525 6266 10525 6358 10525 6319 10526 6358 10526 6320 10526 6320 10527 6358 10527 6359 10527 6320 10528 6359 10528 6180 10528 6180 10529 6359 10529 6360 10529 6180 10530 6360 10530 6185 10530 6361 10531 6128 10531 6362 10531 6362 10532 6128 10532 6130 10532 6362 10533 6130 10533 6363 10533 6363 10534 6130 10534 6258 10534 6363 10535 6258 10535 6364 10535 6364 10536 6258 10536 6263 10536 6152 10537 6154 10537 6155 10537 6155 10538 6154 10538 6293 10538 6155 10539 6293 10539 6276 10539 6276 10540 6293 10540 6295 10540 6276 10541 6295 10541 6311 10541 6311 10542 6295 10542 6288 10542 6311 10543 6288 10543 6287 10543 6287 10544 6288 10544 6290 10544 6287 10545 6290 10545 6286 10545 6286 10546 6290 10546 6291 10546 6286 10547 6291 10547 6284 10547 6284 10548 6291 10548 6365 10548 6284 10549 6365 10549 6285 10549 6285 10550 6365 10550 6366 10550 6285 10551 6366 10551 6367 10551 6150 10552 6281 10552 6151 10552 6151 10553 6281 10553 6283 10553 6151 10554 6283 10554 6239 10554 6239 10555 6283 10555 6285 10555 6239 10556 6285 10556 6236 10556 6236 10557 6285 10557 6367 10557 6236 10558 6367 10558 6237 10558 6144 10559 6125 10559 6145 10559 6145 10560 6125 10560 6127 10560 6145 10561 6127 10561 6251 10561 6251 10562 6127 10562 6337 10562 6251 10563 6337 10563 6253 10563 6253 10564 6337 10564 6339 10564 6253 10565 6339 10565 6234 10565 6234 10566 6339 10566 6341 10566 6234 10567 6341 10567 6146 10567 6146 10568 6341 10568 6343 10568 6146 10569 6343 10569 6147 10569 6147 10570 6343 10570 6345 10570 6147 10571 6345 10571 6149 10571 6149 10572 6345 10572 6347 10572 6149 10573 6347 10573 6150 10573 6150 10574 6347 10574 6349 10574 6150 10575 6349 10575 6269 10575 6269 10576 6349 10576 6351 10576 6269 10577 6351 10577 6264 10577 6264 10578 6351 10578 6353 10578 6264 10579 6353 10579 6265 10579 6265 10580 6353 10580 6355 10580 6265 10581 6355 10581 6266 10581 6266 10582 6355 10582 6322 10582 6266 10583 6322 10583 6358 10583 6358 10584 6322 10584 6321 10584 6358 10585 6321 10585 6359 10585 6359 10586 6321 10586 6133 10586 6359 10587 6133 10587 6360 10587 6360 10588 6133 10588 6132 10588 6360 10589 6132 10589 6185 10589 6185 10590 6132 10590 6189 10590 6368 10591 4957 10591 6369 10591 6369 10592 4957 10592 4958 10592 6369 10593 4958 10593 4959 10593 4983 10594 6361 10594 4981 10594 4981 10595 6361 10595 6362 10595 4981 10596 6362 10596 4982 10596 4982 10597 6362 10597 6363 10597 4982 10598 6363 10598 4979 10598 4979 10599 6363 10599 6364 10599 4979 10600 6364 10600 4977 10600 4977 10601 6364 10601 6263 10601 6263 10602 6257 10602 4977 10602 4977 10603 6257 10603 6256 10603 4977 10604 6256 10604 4976 10604 4976 10605 6256 10605 6249 10605 4976 10606 6249 10606 4974 10606 4974 10607 6249 10607 6245 10607 4974 10608 6245 10608 4973 10608 4973 10609 6245 10609 6244 10609 4973 10610 6244 10610 4971 10610 6244 10611 6242 10611 4971 10611 4971 10612 6242 10612 6238 10612 4971 10613 6238 10613 4970 10613 4970 10614 6238 10614 6237 10614 4970 10615 6237 10615 4968 10615 6237 10616 6367 10616 4968 10616 4968 10617 6367 10617 6366 10617 4968 10618 6366 10618 4967 10618 4967 10619 6366 10619 6365 10619 4967 10620 6365 10620 4965 10620 4965 10621 6365 10621 6291 10621 4965 10622 6291 10622 4964 10622 4964 10623 6291 10623 6289 10623 4964 10624 6289 10624 4962 10624 6289 10625 6297 10625 4962 10625 4962 10626 6297 10626 6296 10626 4962 10627 6296 10627 4961 10627 4961 10628 6296 10628 6294 10628 4961 10629 6294 10629 4959 10629 4959 10630 6294 10630 6292 10630 4959 10631 6292 10631 6369 10631 6369 10632 6292 10632 6154 10632 6369 10633 6154 10633 6153 10633 6370 10634 6371 10634 6372 10634 6199 10635 6373 10635 6198 10635 6198 10636 6373 10636 6370 10636 6198 10637 6370 10637 6193 10637 6193 10638 6370 10638 6372 10638 6193 10639 6372 10639 6194 10639 6191 10640 6374 10640 6190 10640 6190 10641 6374 10641 6375 10641 6190 10642 6375 10642 6376 10642 6372 10643 6377 10643 6194 10643 6194 10644 6377 10644 6374 10644 6194 10645 6374 10645 6192 10645 6192 10646 6374 10646 6191 10646 6378 10647 6184 10647 6379 10647 6379 10648 6184 10648 6183 10648 6379 10649 6183 10649 6380 10649 6183 10650 6181 10650 6380 10650 6380 10651 6181 10651 6187 10651 6380 10652 6187 10652 6381 10652 6381 10653 6187 10653 6186 10653 6381 10654 6186 10654 6382 10654 6382 10655 6186 10655 6185 10655 6382 10656 6185 10656 6383 10656 6383 10657 6185 10657 6189 10657 6383 10658 6189 10658 6376 10658 6376 10659 6189 10659 6188 10659 6376 10660 6188 10660 6190 10660 6384 10661 6385 10661 6175 10661 6175 10662 6174 10662 6384 10662 6384 10663 6174 10663 6179 10663 6384 10664 6179 10664 6386 10664 6386 10665 6179 10665 6177 10665 6386 10666 6177 10666 6378 10666 6378 10667 6177 10667 6176 10667 6378 10668 6176 10668 6184 10668 6387 10669 6388 10669 6165 10669 6165 10670 6168 10670 6387 10670 6387 10671 6168 10671 6170 10671 6387 10672 6170 10672 6385 10672 6385 10673 6170 10673 6172 10673 6385 10674 6172 10674 6175 10674 6389 10675 6163 10675 6390 10675 6390 10676 6163 10676 6167 10676 6390 10677 6167 10677 6388 10677 6388 10678 6167 10678 6166 10678 6388 10679 6166 10679 6165 10679 6391 10680 6152 10680 6156 10680 6156 10681 6158 10681 6391 10681 6391 10682 6158 10682 6161 10682 6391 10683 6161 10683 6392 10683 6392 10684 6161 10684 6160 10684 6392 10685 6160 10685 6389 10685 6389 10686 6160 10686 6164 10686 6389 10687 6164 10687 6163 10687 3909 10832 6429 10832 3911 10832 3911 10833 6429 10833 6430 10833 3911 10834 6430 10834 3913 10834 3913 10835 6430 10835 6431 10835 3913 10836 6431 10836 3915 10836 3915 10837 6431 10837 6432 10837 3915 10838 6432 10838 3917 10838 3917 10839 6432 10839 6433 10839 3917 10840 6433 10840 3919 10840 3919 10841 6433 10841 6434 10841 3919 10842 6434 10842 3921 10842 3921 10843 6434 10843 6435 10843 3921 10844 6435 10844 3923 10844 3923 10845 6435 10845 6436 10845 3923 10846 6436 10846 3925 10846 3925 10847 6436 10847 6437 10847 3925 10848 6437 10848 3927 10848 3927 10849 6437 10849 6438 10849 3927 10850 6438 10850 3929 10850 3929 10851 6438 10851 6439 10851 3929 10852 6439 10852 3931 10852 3931 10853 6439 10853 6440 10853 3931 10854 6440 10854 3933 10854 3933 10855 6440 10855 6441 10855 3933 10856 6441 10856 3935 10856 3935 10857 6441 10857 6442 10857 3935 10858 6442 10858 3937 10858 3937 10859 6442 10859 6443 10859 3937 10860 6443 10860 3939 10860 3939 10861 6443 10861 6444 10861 3939 10862 6444 10862 3941 10862 3941 10863 6444 10863 6445 10863 3941 10864 6445 10864 3943 10864 3943 10865 6445 10865 6446 10865 3943 10866 6446 10866 3945 10866 3945 10867 6446 10867 6447 10867 3945 10868 6447 10868 3947 10868 3947 10869 6447 10869 6448 10869 3947 10870 6448 10870 3949 10870 3949 10871 6448 10871 6449 10871 3949 10872 6449 10872 3879 10872 3879 10873 6449 10873 6450 10873 3879 10874 6450 10874 3881 10874 3881 10875 6450 10875 6451 10875 3881 10876 6451 10876 3883 10876 3883 10877 6451 10877 6452 10877 3883 10878 6452 10878 3885 10878 3885 10879 6452 10879 6453 10879 3885 10880 6453 10880 3887 10880 3887 10881 6453 10881 6454 10881 3887 10882 6454 10882 3889 10882 3889 10883 6454 10883 6455 10883 3889 10884 6455 10884 3891 10884 3891 10885 6455 10885 6456 10885 3891 10886 6456 10886 3893 10886 3893 10887 6456 10887 6457 10887 3893 10888 6457 10888 3895 10888 3895 10889 6457 10889 6458 10889 3895 10890 6458 10890 3897 10890 3897 10891 6458 10891 6459 10891 3897 10892 6459 10892 3899 10892 3899 10893 6459 10893 6460 10893 3899 10894 6460 10894 3901 10894 3901 10895 6460 10895 6461 10895 3901 10896 6461 10896 3903 10896 3903 10897 6461 10897 6462 10897 3903 10898 6462 10898 3905 10898 3905 10899 6462 10899 6463 10899 3905 10900 6463 10900 3907 10900 3907 10901 6463 10901 6464 10901 3907 10902 6464 10902 3909 10902 3909 10903 6464 10903 6429 10903 6465 10904 6466 10904 6467 10904 6467 10905 6466 10905 6468 10905 6469 10906 6470 10906 6465 10906 6465 10907 6470 10907 6471 10907 6471 10908 6472 10908 6465 10908 6465 10909 6472 10909 6473 10909 6465 10910 6473 10910 6466 10910 6474 10911 6475 10911 6476 10911 6476 10912 6475 10912 6477 10912 6476 10913 6477 10913 6469 10913 6469 10914 6477 10914 6478 10914 6469 10915 6478 10915 6470 10915 6474 10916 6476 10916 6479 10916 6479 10917 6476 10917 6480 10917 6479 10918 6480 10918 6481 10918 6481 10919 6482 10919 6479 10919 6479 10920 6482 10920 6483 10920 6479 10921 6483 10921 6484 10921 6484 10922 6483 10922 6485 10922 6484 10923 6485 10923 6486 10923 6486 10924 6485 10924 6487 10924 6486 10925 6487 10925 6488 10925 6488 10926 6487 10926 6489 10926 6489 10927 6487 10927 6490 10927 6490 10928 6487 10928 6491 10928 6490 10929 6491 10929 6492 10929 6493 10930 6494 10930 6492 10930 6492 10931 6494 10931 6495 10931 6495 10932 6496 10932 6492 10932 6492 10933 6496 10933 6497 10933 6492 10934 6497 10934 6490 10934 6493 10935 6498 10935 6494 10935 6494 10936 6498 10936 6499 10936 6494 10937 6499 10937 6500 10937 6500 10938 6501 10938 6494 10938 6494 10939 6501 10939 6502 10939 6494 10940 6502 10940 6503 10940 6503 10941 6502 10941 6504 10941 6503 10942 6504 10942 6505 10942 6506 10943 6507 10943 6508 10943 6508 10944 6509 10944 6506 10944 6506 10945 6509 10945 6510 10945 6506 10946 6510 10946 6511 10946 6511 10947 6510 10947 6512 10947 6505 10948 6504 10948 6513 10948 6513 10949 6504 10949 6514 10949 6513 10950 6514 10950 6510 10950 6510 10951 6514 10951 6515 10951 6510 10952 6515 10952 6512 10952 6516 10953 6517 10953 6518 10953 6518 10954 6517 10954 6519 10954 6516 10955 6518 10955 6506 10955 6506 10956 6518 10956 6520 10956 6506 10957 6520 10957 6507 10957 6521 10958 6522 10958 6523 10958 6523 10959 6522 10959 6524 10959 6523 10960 6524 10960 6525 10960 6519 10961 6517 10961 6526 10961 6526 10962 6517 10962 6527 10962 6526 10963 6527 10963 6525 10963 6525 10964 6527 10964 6528 10964 6525 10965 6528 10965 6523 10965 6529 10966 6530 10966 6531 10966 6531 10967 6530 10967 6532 10967 6533 10968 6534 10968 6521 10968 6521 10969 6534 10969 6535 10969 6521 10970 6535 10970 6536 10970 6536 10971 6537 10971 6521 10971 6521 10972 6537 10972 6538 10972 6521 10973 6538 10973 6522 10973 6522 10974 6538 10974 6539 10974 6522 10975 6539 10975 6540 10975 6540 10976 6541 10976 6522 10976 6522 10977 6541 10977 6530 10977 6522 10978 6530 10978 6542 10978 6542 10979 6530 10979 6529 10979 6533 10980 6543 10980 6534 10980 6534 10981 6543 10981 6544 10981 6534 10982 6544 10982 6545 10982 3963 10983 6546 10983 3965 10983 3965 10984 6546 10984 6547 10984 3965 10985 6547 10985 3967 10985 3967 10986 6547 10986 6548 10986 3967 10987 6548 10987 3969 10987 3969 10988 6548 10988 6549 10988 3969 10989 6549 10989 3971 10989 3971 10990 6549 10990 6550 10990 3971 10991 6550 10991 3973 10991 3973 10992 6550 10992 6551 10992 3973 10993 6551 10993 3975 10993 3975 10994 6551 10994 6552 10994 3975 10995 6552 10995 3977 10995 3977 10996 6552 10996 6553 10996 3977 10997 6553 10997 3979 10997 3979 10998 6553 10998 6554 10998 3979 10999 6554 10999 3981 10999 3981 11000 6554 11000 6555 11000 3981 11001 6555 11001 3983 11001 3983 11002 6555 11002 6556 11002 3983 11003 6556 11003 3985 11003 3985 11004 6556 11004 6557 11004 3985 11005 6557 11005 3987 11005 3987 11006 6557 11006 6558 11006 3987 11007 6558 11007 3989 11007 3989 11008 6558 11008 6559 11008 3989 11009 6559 11009 3991 11009 3991 11010 6559 11010 6560 11010 3991 11011 6560 11011 3993 11011 3993 11012 6560 11012 6561 11012 3993 11013 6561 11013 3995 11013 3995 11014 6561 11014 6562 11014 3995 11015 6562 11015 3997 11015 3997 11016 6562 11016 6563 11016 3997 11017 6563 11017 3999 11017 3999 11018 6563 11018 6564 11018 3999 11019 6564 11019 4001 11019 4001 11020 6564 11020 6565 11020 4001 11021 6565 11021 4003 11021 4003 11022 6565 11022 6566 11022 4003 11023 6566 11023 4005 11023 4005 11024 6566 11024 6567 11024 4005 11025 6567 11025 4007 11025 4007 11026 6567 11026 6568 11026 4007 11027 6568 11027 4009 11027 4009 11028 6568 11028 6569 11028 4009 11029 6569 11029 4011 11029 4011 11030 6569 11030 6570 11030 4011 11031 6570 11031 4013 11031 4013 11032 6570 11032 6571 11032 4013 11033 6571 11033 4015 11033 4015 11034 6571 11034 6572 11034 4015 11035 6572 11035 4017 11035 4017 11036 6572 11036 6573 11036 4017 11037 6573 11037 4019 11037 4019 11038 6573 11038 6574 11038 4019 11039 6574 11039 4021 11039 4021 11040 6574 11040 6575 11040 4021 11041 6575 11041 3951 11041 3951 11042 6575 11042 6576 11042 3951 11043 6576 11043 3953 11043 3953 11044 6576 11044 6577 11044 3953 11045 6577 11045 3955 11045 3955 11046 6577 11046 6578 11046 3955 11047 6578 11047 3957 11047 3957 11048 6578 11048 6579 11048 3957 11049 6579 11049 3959 11049 3959 11050 6579 11050 6580 11050 3959 11051 6580 11051 3961 11051 3961 11052 6580 11052 6581 11052 3961 11053 6581 11053 3963 11053 3963 11054 6581 11054 6546 11054 6618 11199 6619 11199 6620 11199 6621 11200 6622 11200 4282 11200 4298 11201 4297 11201 4983 11201 4286 11202 4285 11202 6227 11202 6227 11203 4285 11203 4284 11203 6227 11204 4284 11204 6622 11204 6622 11205 4284 11205 4283 11205 6622 11206 4283 11206 4282 11206 4297 11207 4296 11207 4983 11207 4983 11208 4296 11208 4295 11208 4983 11209 4295 11209 6361 11209 6361 11210 4295 11210 4294 11210 6361 11211 4294 11211 4293 11211 4289 11212 4288 11212 6227 11212 6227 11213 4288 11213 4287 11213 6227 11214 4287 11214 4286 11214 4988 11215 4987 11215 4299 11215 4299 11216 4987 11216 4986 11216 4299 11217 4986 11217 4300 11217 4293 11218 4292 11218 6361 11218 6361 11219 4292 11219 4291 11219 6361 11220 4291 11220 6128 11220 6128 11221 4291 11221 4290 11221 6128 11222 4290 11222 6129 11222 6227 11223 6228 11223 4289 11223 4289 11224 6228 11224 6126 11224 4289 11225 6126 11225 6125 11225 4985 11226 4904 11226 4299 11226 4299 11227 4904 11227 4903 11227 4903 11228 4901 11228 4299 11228 4299 11229 4901 11229 4900 11229 4299 11230 4900 11230 4898 11230 4898 11231 4897 11231 4299 11231 4299 11232 4897 11232 4989 11232 4299 11233 4989 11233 4988 11233 6125 11234 6144 11234 4289 11234 4289 11235 6144 11235 6143 11235 4289 11236 6143 11236 6138 11236 6138 11237 6137 11237 4289 11237 4289 11238 6137 11238 6141 11238 4289 11239 6141 11239 4290 11239 4290 11240 6141 11240 6140 11240 4290 11241 6140 11241 6129 11241 4298 11242 4983 11242 4299 11242 4299 11243 4983 11243 4984 11243 4299 11244 4984 11244 4985 11244 4300 11245 4986 11245 4301 11245 4301 11246 4986 11246 4896 11246 4301 11247 4896 11247 4895 11247 4895 11248 4921 11248 4301 11248 4301 11249 4921 11249 4923 11249 4301 11250 4923 11250 4302 11250 4302 11251 4923 11251 5019 11251 4302 11252 5019 11252 4303 11252 4303 11253 5019 11253 5018 11253 4303 11254 5018 11254 4304 11254 4304 11255 5018 11255 4305 11255 4317 11256 4316 11256 6618 11256 6618 11257 4316 11257 4315 11257 5017 11258 4307 11258 5018 11258 5018 11259 4307 11259 4306 11259 5018 11260 4306 11260 4305 11260 5017 11261 4311 11261 4310 11261 4310 11262 4309 11262 5017 11262 5017 11263 4309 11263 4308 11263 5017 11264 4308 11264 4307 11264 4315 11265 4314 11265 6618 11265 6618 11266 4314 11266 4313 11266 6618 11267 4313 11267 4312 11267 4321 11268 4320 11268 6623 11268 6623 11269 4320 11269 4319 11269 6623 11270 4319 11270 4318 11270 4282 11271 4323 11271 6621 11271 6621 11272 4323 11272 4322 11272 6621 11273 4322 11273 4321 11273 4364 11274 6530 11274 4365 11274 4365 11275 6530 11275 6541 11275 4359 11276 4358 11276 6540 11276 6540 11277 4358 11277 4357 11277 4363 11278 4362 11278 6624 11278 4357 11279 4356 11279 6540 11279 6540 11280 4356 11280 4355 11280 6540 11281 4355 11281 4354 11281 4362 11282 4361 11282 6540 11282 6540 11283 4361 11283 4360 11283 6540 11284 4360 11284 4359 11284 4354 11285 4353 11285 6540 11285 6540 11286 4353 11286 4367 11286 6540 11287 4367 11287 6541 11287 6541 11288 4367 11288 4366 11288 6541 11289 4366 11289 4365 11289 4342 11290 4343 11290 6624 11290 6624 11291 4343 11291 4344 11291 6624 11292 4344 11292 4352 11292 4352 11293 4351 11293 6624 11293 6624 11294 4351 11294 4350 11294 6624 11295 4350 11295 4363 11295 4399 11296 4398 11296 6624 11296 4399 11297 6624 11297 4400 11297 4337 11298 4338 11298 4414 11298 4414 11299 4338 11299 4349 11299 4414 11300 4349 11300 4348 11300 4348 11301 4347 11301 4414 11301 4414 11302 4347 11302 4346 11302 4414 11303 4346 11303 4398 11303 4398 11304 4346 11304 4345 11304 4398 11305 4345 11305 6624 11305 6624 11306 4345 11306 4341 11306 6624 11307 4341 11307 4342 11307 4391 11308 4390 11308 6625 11308 4489 11309 4488 11309 4435 11309 4409 11310 4408 11310 6626 11310 6626 11311 4408 11311 4407 11311 4390 11312 4389 11312 6625 11312 6625 11313 4389 11313 4388 11313 6625 11314 4388 11314 4387 11314 4407 11315 4406 11315 6626 11315 6626 11316 4406 11316 4405 11316 6626 11317 4405 11317 4404 11317 4473 11318 4472 11318 6625 11318 6625 11319 4472 11319 4471 11319 6625 11320 4471 11320 4391 11320 4489 11321 4435 11321 4490 11321 4490 11322 4435 11322 4434 11322 4490 11323 4434 11323 4491 11323 4404 11324 4403 11324 6626 11324 6626 11325 4403 11325 4402 11325 6626 11326 4402 11326 4401 11326 4425 11327 4424 11327 4340 11327 4340 11328 4424 11328 4423 11328 4423 11329 4422 11329 4340 11329 4340 11330 4422 11330 4421 11330 4340 11331 4421 11331 4420 11331 4420 11332 4419 11332 4340 11332 4340 11333 4419 11333 4418 11333 4340 11334 4418 11334 4417 11334 4471 11335 4470 11335 4391 11335 4391 11336 4470 11336 4469 11336 4391 11337 4469 11337 4392 11337 4392 11338 4469 11338 4468 11338 4452 11339 4463 11339 6625 11339 6625 11340 4463 11340 4462 11340 6625 11341 4462 11341 4461 11341 4461 11342 4460 11342 6625 11342 6625 11343 4460 11343 4474 11343 6625 11344 4474 11344 4473 11344 4425 11345 4340 11345 4411 11345 4411 11346 4340 11346 4339 11346 4411 11347 4339 11347 4412 11347 4427 11348 4426 11348 4488 11348 4488 11349 4426 11349 4436 11349 4488 11350 4436 11350 4435 11350 4396 11351 4397 11351 6626 11351 6626 11352 4397 11352 4410 11352 6626 11353 4410 11353 4409 11353 4337 11354 4414 11354 4339 11354 4339 11355 4414 11355 4413 11355 4339 11356 4413 11356 4412 11356 4387 11357 4386 11357 6625 11357 6625 11358 4386 11358 4385 11358 6625 11359 4385 11359 4396 11359 4468 11360 4467 11360 4392 11360 4392 11361 4467 11361 4466 11361 4392 11362 4466 11362 4393 11362 4393 11363 4466 11363 4465 11363 4491 11364 4434 11364 4475 11364 4475 11365 4434 11365 4433 11365 4475 11366 4433 11366 4476 11366 4476 11367 4433 11367 4432 11367 4476 11368 4432 11368 4431 11368 4416 11369 4415 11369 4488 11369 4488 11370 4415 11370 4428 11370 4488 11371 4428 11371 4427 11371 4431 11372 4430 11372 4476 11372 4476 11373 4430 11373 4429 11373 4476 11374 4429 11374 4477 11374 4429 11375 4438 11375 4477 11375 4477 11376 4438 11376 4437 11376 4477 11377 4437 11377 4464 11377 4464 11378 4437 11378 4395 11378 4464 11379 4395 11379 4465 11379 4465 11380 4395 11380 4394 11380 4465 11381 4394 11381 4393 11381 4485 11382 4484 11382 4328 11382 4328 11383 4484 11383 4483 11383 4328 11384 4483 11384 4482 11384 4487 11385 4327 11385 4326 11385 4327 11386 4487 11386 4328 11386 4328 11387 4487 11387 4486 11387 4328 11388 4486 11388 4485 11388 4482 11389 4481 11389 4328 11389 4328 11390 4481 11390 4480 11390 4328 11391 4480 11391 6627 11391 4417 11392 4416 11392 4340 11392 4340 11393 4416 11393 4488 11393 4340 11394 4488 11394 4324 11394 4324 11395 4488 11395 4487 11395 4324 11396 4487 11396 4325 11396 4325 11397 4487 11397 4326 11397 4480 11398 4479 11398 6627 11398 6627 11399 4479 11399 4478 11399 6627 11400 4478 11400 4495 11400 4332 11401 4331 11401 6628 11401 6628 11402 4331 11402 4330 11402 6628 11403 4330 11403 6627 11403 6627 11404 4330 11404 4329 11404 6627 11405 4329 11405 4328 11405 6629 11406 4334 11406 6628 11406 6628 11407 4334 11407 4333 11407 6628 11408 4333 11408 4332 11408 4382 11409 4336 11409 6629 11409 6629 11410 4336 11410 4335 11410 6629 11411 4335 11411 4334 11411 4384 11412 4383 11412 6630 11412 6630 11413 4383 11413 4382 11413 4372 11414 4373 11414 6532 11414 4373 11415 4374 11415 6532 11415 6532 11416 4374 11416 4375 11416 6532 11417 4375 11417 4376 11417 4364 11418 4381 11418 6530 11418 6530 11419 4381 11419 4380 11419 6530 11420 4380 11420 4368 11420 4368 11421 4369 11421 6530 11421 6530 11422 4369 11422 4370 11422 6530 11423 4370 11423 6532 11423 6532 11424 4370 11424 4371 11424 6532 11425 4371 11425 4372 11425 4376 11426 4377 11426 6532 11426 6532 11427 4377 11427 4378 11427 6532 11428 4378 11428 6630 11428 6630 11429 4378 11429 4379 11429 6630 11430 4379 11430 4384 11430 4447 11431 4446 11431 6631 11431 6631 11432 4446 11432 4445 11432 6631 11433 4445 11433 4444 11433 4444 11434 4443 11434 6631 11434 6631 11435 4443 11435 4442 11435 6631 11436 4442 11436 4441 11436 4492 11437 4449 11437 6631 11437 6631 11438 4449 11438 4448 11438 6631 11439 4448 11439 4447 11439 6632 11440 4457 11440 4456 11440 4450 11441 4459 11441 6632 11441 6632 11442 4459 11442 4458 11442 6632 11443 4458 11443 4457 11443 4456 11444 4455 11444 6632 11444 6632 11445 4455 11445 4454 11445 6632 11446 4454 11446 4453 11446 4441 11447 4440 11447 6631 11447 6631 11448 4440 11448 4439 11448 6631 11449 4439 11449 6632 11449 6632 11450 4439 11450 4451 11450 6632 11451 4451 11451 4450 11451 4492 11452 6631 11452 4493 11452 4493 11453 6631 11453 6633 11453 4493 11454 6633 11454 4494 11454 4552 11455 4553 11455 6622 11455 6622 11456 4553 11456 4573 11456 6622 11457 4573 11457 4572 11457 6231 11458 6232 11458 6622 11458 6622 11459 6232 11459 6225 11459 6622 11460 6225 11460 6227 11460 4556 11461 4555 11461 6634 11461 6634 11462 4555 11462 4554 11462 4560 11463 4559 11463 6634 11463 4560 11464 6634 11464 4561 11464 4559 11465 4558 11465 6634 11465 6634 11466 4558 11466 4557 11466 6634 11467 4557 11467 4556 11467 6635 11468 4550 11468 4549 11468 4549 11469 4548 11469 6635 11469 6635 11470 4548 11470 4547 11470 6635 11471 4547 11471 4546 11471 4546 11472 4545 11472 6635 11472 6635 11473 4545 11473 4544 11473 6635 11474 4544 11474 4543 11474 4543 11475 4542 11475 6635 11475 6635 11476 4542 11476 4541 11476 6635 11477 4541 11477 6634 11477 6634 11478 4541 11478 4562 11478 6634 11479 4562 11479 4561 11479 4540 11480 4538 11480 4527 11480 4526 11481 4533 11481 4536 11481 4536 11482 4533 11482 4532 11482 4536 11483 4532 11483 4535 11483 4540 11484 4527 11484 4539 11484 4535 11485 4532 11485 4534 11485 4534 11486 4532 11486 4531 11486 4534 11487 4531 11487 4530 11487 4526 11488 4536 11488 4527 11488 4527 11489 4536 11489 4537 11489 4527 11490 4537 11490 4539 11490 6545 11491 6636 11491 6637 11491 6534 11492 6545 11492 4525 11492 4525 11493 6545 11493 4519 11493 4538 11494 4551 11494 4527 11494 4527 11495 4551 11495 6638 11495 4527 11496 6638 11496 4528 11496 6545 11497 6637 11497 6639 11497 6639 11498 6637 11498 6640 11498 6639 11499 6640 11499 6641 11499 4525 11500 4524 11500 6534 11500 6534 11501 4524 11501 4523 11501 6534 11502 4523 11502 4522 11502 4521 11503 4520 11503 6638 11503 6638 11504 4520 11504 4529 11504 6638 11505 4529 11505 4528 11505 6641 11506 6642 11506 6643 11506 6643 11507 6644 11507 6641 11507 6641 11508 6644 11508 6645 11508 6641 11509 6645 11509 6639 11509 6646 11510 4516 11510 6639 11510 6639 11511 4516 11511 4517 11511 6639 11512 4517 11512 6545 11512 6545 11513 4517 11513 4518 11513 6545 11514 4518 11514 4519 11514 6646 11515 4510 11515 4511 11515 4511 11516 4515 11516 6646 11516 6646 11517 4515 11517 4514 11517 6646 11518 4514 11518 4516 11518 4567 11519 4566 11519 6222 11519 6647 11520 6648 11520 4500 11520 4570 11521 4569 11521 6222 11521 6222 11522 4569 11522 4568 11522 6222 11523 4568 11523 4567 11523 4499 11524 4498 11524 6646 11524 6646 11525 4498 11525 4497 11525 4502 11526 4506 11526 4503 11526 4503 11527 4506 11527 4509 11527 6231 11528 6622 11528 6230 11528 6230 11529 6622 11529 4572 11529 6230 11530 4572 11530 6222 11530 6222 11531 4572 11531 4571 11531 6222 11532 4571 11532 4570 11532 4499 11533 6646 11533 4500 11533 4500 11534 6646 11534 6649 11534 4500 11535 6649 11535 6647 11535 4509 11536 4508 11536 4503 11536 4503 11537 4508 11537 4507 11537 4503 11538 4507 11538 4504 11538 4504 11539 4507 11539 4512 11539 4566 11540 4565 11540 6222 11540 6222 11541 4565 11541 4564 11541 6222 11542 4564 11542 6223 11542 6223 11543 4564 11543 6650 11543 6650 11544 4564 11544 6651 11544 6651 11545 4564 11545 4563 11545 6651 11546 4563 11546 6648 11546 6648 11547 4563 11547 4501 11547 6648 11548 4501 11548 4500 11548 4512 11549 4513 11549 4504 11549 4504 11550 4513 11550 4510 11550 4504 11551 4510 11551 4505 11551 4505 11552 4510 11552 6646 11552 4505 11553 6646 11553 4496 11553 4496 11554 6646 11554 4497 11554 4676 11555 6623 11555 6618 11555 6618 11556 6623 11556 4318 11556 6618 11557 4318 11557 4317 11557 4679 11558 4678 11558 6652 11558 6652 11559 4678 11559 4677 11559 6652 11560 4677 11560 4675 11560 4683 11561 4682 11561 6652 11561 6653 11562 4673 11562 4672 11562 4683 11563 6652 11563 4684 11563 4682 11564 4681 11564 6652 11564 6652 11565 4681 11565 4680 11565 6652 11566 4680 11566 4679 11566 4672 11567 4671 11567 6653 11567 6653 11568 4671 11568 4670 11568 6653 11569 4670 11569 4669 11569 4669 11570 4668 11570 6653 11570 6653 11571 4668 11571 4667 11571 6653 11572 4667 11572 4666 11572 4666 11573 4665 11573 6653 11573 6653 11574 4665 11574 4664 11574 6653 11575 4664 11575 6652 11575 6652 11576 4664 11576 4685 11576 6652 11577 4685 11577 4684 11577 4674 11578 6654 11578 4652 11578 4652 11579 6654 11579 6655 11579 4652 11580 6655 11580 4653 11580 4653 11581 6655 11581 4654 11581 4690 11582 4689 11582 6656 11582 4656 11583 4655 11583 6657 11583 4656 11584 6657 11584 4657 11584 4693 11585 4692 11585 6656 11585 6656 11586 4692 11586 4691 11586 6656 11587 4691 11587 4690 11587 4676 11588 4696 11588 6623 11588 6623 11589 4696 11589 4695 11589 6623 11590 4695 11590 6656 11590 6656 11591 4695 11591 4694 11591 6656 11592 4694 11592 4693 11592 4660 11593 4659 11593 6657 11593 6657 11594 4659 11594 4658 11594 6657 11595 4658 11595 4657 11595 4663 11596 4662 11596 6657 11596 6657 11597 4662 11597 4661 11597 6657 11598 4661 11598 4660 11598 4689 11599 4688 11599 6656 11599 6656 11600 4688 11600 4687 11600 6656 11601 4687 11601 4686 11601 4797 11602 4798 11602 6658 11602 6658 11603 4798 11603 6619 11603 4801 11604 4800 11604 6659 11604 6659 11605 4800 11605 4799 11605 4805 11606 4804 11606 6659 11606 6660 11607 4795 11607 4794 11607 4805 11608 6659 11608 4806 11608 4804 11609 4803 11609 6659 11609 6659 11610 4803 11610 4802 11610 6659 11611 4802 11611 4801 11611 4794 11612 4793 11612 6660 11612 6660 11613 4793 11613 4792 11613 6660 11614 4792 11614 4791 11614 4791 11615 4790 11615 6660 11615 6660 11616 4790 11616 4789 11616 6660 11617 4789 11617 4788 11617 4788 11618 4787 11618 6660 11618 6660 11619 4787 11619 4786 11619 6660 11620 4786 11620 6659 11620 6659 11621 4786 11621 4807 11621 6659 11622 4807 11622 4806 11622 4796 11623 6661 11623 4774 11623 4774 11624 6661 11624 6662 11624 4774 11625 6662 11625 4775 11625 4775 11626 6662 11626 4776 11626 4812 11627 4811 11627 6620 11627 6620 11628 4811 11628 4810 11628 6620 11629 4810 11629 4809 11629 4815 11630 4814 11630 6620 11630 6620 11631 4814 11631 4813 11631 6620 11632 4813 11632 4812 11632 4780 11633 4779 11633 6663 11633 6663 11634 4779 11634 4778 11634 6663 11635 4778 11635 4777 11635 4798 11636 4818 11636 6619 11636 6619 11637 4818 11637 4817 11637 6619 11638 4817 11638 6620 11638 6620 11639 4817 11639 4816 11639 6620 11640 4816 11640 4815 11640 4783 11641 4782 11641 6663 11641 6663 11642 4782 11642 4781 11642 6663 11643 4781 11643 4780 11643 4809 11644 4808 11644 6620 11644 6620 11645 4808 11645 4785 11645 6620 11646 4785 11646 6663 11646 6663 11647 4785 11647 4784 11647 6663 11648 4784 11648 4783 11648 6664 11649 6665 11649 6666 11649 6666 11650 6665 11650 6667 11650 6664 11651 6668 11651 6665 11651 6665 11652 6668 11652 6669 11652 6665 11653 6669 11653 6545 11653 6545 11654 6669 11654 6670 11654 6545 11655 6670 11655 6636 11655 4362 11656 6540 11656 6624 11656 6624 11657 6540 11657 6539 11657 6624 11658 6539 11658 6661 11658 6661 11659 6539 11659 6538 11659 6661 11660 6538 11660 6662 11660 6662 11661 6538 11661 6537 11661 6662 11662 6537 11662 6654 11662 6654 11663 6537 11663 6536 11663 6654 11664 6536 11664 6655 11664 6655 11665 6536 11665 6535 11665 6655 11666 6535 11666 6671 11666 6671 11667 6535 11667 6534 11667 6671 11668 6534 11668 6638 11668 6638 11669 6534 11669 4522 11669 6638 11670 4522 11670 4521 11670 6672 11671 6673 11671 6674 11671 6674 11672 6673 11672 6675 11672 6674 11673 6675 11673 6676 11673 6677 11674 6678 11674 6630 11674 6630 11675 6678 11675 6679 11675 6679 11676 6680 11676 6630 11676 6630 11677 6680 11677 6681 11677 6630 11678 6681 11678 6532 11678 6532 11679 6681 11679 6682 11679 6532 11680 6682 11680 6674 11680 6674 11681 6682 11681 6683 11681 6674 11682 6683 11682 6672 11682 6684 11683 6677 11683 6685 11683 6685 11684 6677 11684 6630 11684 6685 11685 6630 11685 6686 11685 6686 11686 6630 11686 6687 11686 4382 11687 6629 11687 6630 11687 6630 11688 6629 11688 6688 11688 6630 11689 6688 11689 6687 11689 6689 11690 6690 11690 6628 11690 6628 11691 6690 11691 6691 11691 6691 11692 6692 11692 6628 11692 6628 11693 6692 11693 6693 11693 6628 11694 6693 11694 6694 11694 6694 11695 6695 11695 6628 11695 6628 11696 6695 11696 6696 11696 6628 11697 6696 11697 6629 11697 6629 11698 6696 11698 6697 11698 6629 11699 6697 11699 6688 11699 6698 11700 6699 11700 6700 11700 6700 11701 6699 11701 6701 11701 6700 11702 6701 11702 6702 11702 6703 11703 6704 11703 6700 11703 6700 11704 6704 11704 6705 11704 6705 11705 6706 11705 6700 11705 6700 11706 6706 11706 6707 11706 6700 11707 6707 11707 6708 11707 6700 11708 6709 11708 6710 11708 6708 11709 6711 11709 6700 11709 6700 11710 6711 11710 6712 11710 6700 11711 6712 11711 6698 11711 6710 11712 6713 11712 6700 11712 6700 11713 6713 11713 6714 11713 6700 11714 6714 11714 6703 11714 6700 11715 6633 11715 5056 11715 5052 11716 5051 11716 6709 11716 6709 11717 5051 11717 6715 11717 5056 11718 5055 11718 6700 11718 6700 11719 5055 11719 5054 11719 6700 11720 5054 11720 6709 11720 6709 11721 5054 11721 5053 11721 6709 11722 5053 11722 5052 11722 5051 11723 5050 11723 6715 11723 6715 11724 5050 11724 5049 11724 6715 11725 5049 11725 5076 11725 5076 11726 5049 11726 5048 11726 5076 11727 5048 11727 5077 11727 5077 11728 5048 11728 5157 11728 5157 11729 5048 11729 5158 11729 5158 11730 5048 11730 5047 11730 5158 11731 5047 11731 5046 11731 5046 11732 5045 11732 5158 11732 5158 11733 5045 11733 5044 11733 5158 11734 5044 11734 5159 11734 5159 11735 5044 11735 5043 11735 5150 11736 5156 11736 5043 11736 5043 11737 5156 11737 5155 11737 5043 11738 5155 11738 5159 11738 5042 11739 5141 11739 5147 11739 5147 11740 5146 11740 5042 11740 5042 11741 5146 11741 5145 11741 5042 11742 5145 11742 5144 11742 5144 11743 5153 11743 5042 11743 5042 11744 5153 11744 5152 11744 5042 11745 5152 11745 5043 11745 5043 11746 5152 11746 5151 11746 5043 11747 5151 11747 5150 11747 5141 11748 5042 11748 5139 11748 5139 11749 5042 11749 5041 11749 5139 11750 5041 11750 5016 11750 5016 11751 5041 11751 5040 11751 5016 11752 5040 11752 5014 11752 5014 11753 5040 11753 5039 11753 5014 11754 5039 11754 5038 11754 6631 11755 5061 11755 5060 11755 6632 11756 5064 11756 5063 11756 6632 11757 5063 11757 6631 11757 6631 11758 5063 11758 5062 11758 6631 11759 5062 11759 5061 11759 5025 11760 5024 11760 6658 11760 5024 11761 5023 11761 6658 11761 6658 11762 5023 11762 5066 11762 6658 11763 5066 11763 6632 11763 6632 11764 5066 11764 5065 11764 6632 11765 5065 11765 5064 11765 5034 11766 5033 11766 5012 11766 5038 11767 5037 11767 5014 11767 5014 11768 5037 11768 5036 11768 5014 11769 5036 11769 5012 11769 5012 11770 5036 11770 5035 11770 5012 11771 5035 11771 5034 11771 5032 11772 5031 11772 6619 11772 6619 11773 5031 11773 5030 11773 6619 11774 5030 11774 5029 11774 5029 11775 5028 11775 6619 11775 6619 11776 5028 11776 5027 11776 6619 11777 5027 11777 6658 11777 6658 11778 5027 11778 5026 11778 6658 11779 5026 11779 5025 11779 5060 11780 5059 11780 6631 11780 6631 11781 5059 11781 5058 11781 6631 11782 5058 11782 6633 11782 6633 11783 5058 11783 5057 11783 6633 11784 5057 11784 5056 11784 5033 11785 5032 11785 5012 11785 5012 11786 5032 11786 6619 11786 5012 11787 6619 11787 5017 11787 5017 11788 6619 11788 6618 11788 5017 11789 6618 11789 4311 11789 4311 11790 6618 11790 4312 11790 6621 11791 6716 11791 6622 11791 6622 11792 6716 11792 6634 11792 6622 11793 6634 11793 4552 11793 4552 11794 6634 11794 4554 11794 4453 11795 4452 11795 6632 11795 6632 11796 4452 11796 6625 11796 6632 11797 6625 11797 6658 11797 6658 11798 6625 11798 6659 11798 6658 11799 6659 11799 4797 11799 4797 11800 6659 11800 4799 11800 6702 11801 6689 11801 6700 11801 6700 11802 6689 11802 6628 11802 6700 11803 6628 11803 6633 11803 6633 11804 6628 11804 6627 11804 6633 11805 6627 11805 4494 11805 4494 11806 6627 11806 4495 11806 6717 11807 6635 11807 4582 11807 6716 11808 4600 11808 4601 11808 4586 11809 4585 11809 6717 11809 6717 11810 4585 11810 6716 11810 6717 11811 6716 11811 4620 11811 6634 11812 4603 11812 4581 11812 4585 11813 4592 11813 6716 11813 6716 11814 4592 11814 4599 11814 6716 11815 4599 11815 4598 11815 6634 11816 4581 11816 6635 11816 6635 11817 4581 11817 4580 11817 6635 11818 4580 11818 4579 11818 4598 11819 4597 11819 6716 11819 6716 11820 4597 11820 4596 11820 6716 11821 4596 11821 4595 11821 6716 11822 4601 11822 6634 11822 6634 11823 4601 11823 4602 11823 6634 11824 4602 11824 4609 11824 4606 11825 4605 11825 6634 11825 6634 11826 4605 11826 4604 11826 6634 11827 4604 11827 4603 11827 4579 11828 4578 11828 6635 11828 6635 11829 4578 11829 4577 11829 6635 11830 4577 11830 4576 11830 4588 11831 4591 11831 4589 11831 4589 11832 4591 11832 4590 11832 4582 11833 4583 11833 6717 11833 6717 11834 4583 11834 4584 11834 6717 11835 4584 11835 4586 11835 4586 11836 4584 11836 4591 11836 4586 11837 4591 11837 4587 11837 4587 11838 4591 11838 4588 11838 4595 11839 4594 11839 6716 11839 6716 11840 4594 11840 4593 11840 6716 11841 4593 11841 4600 11841 4576 11842 4575 11842 6635 11842 6635 11843 4575 11843 4574 11843 6635 11844 4574 11844 4582 11844 4609 11845 4608 11845 6634 11845 6634 11846 4608 11846 4607 11846 6634 11847 4607 11847 4606 11847 4617 11848 4618 11848 6656 11848 6656 11849 4618 11849 4619 11849 4321 11850 6623 11850 6621 11850 6621 11851 6623 11851 6656 11851 6621 11852 6656 11852 6716 11852 6716 11853 6656 11853 4619 11853 6716 11854 4619 11854 4620 11854 4639 11855 4638 11855 4621 11855 4630 11856 4629 11856 4620 11856 4620 11857 4629 11857 6717 11857 6717 11858 4629 11858 4640 11858 6717 11859 4640 11859 6657 11859 4636 11860 4635 11860 4620 11860 4620 11861 4635 11861 4634 11861 4620 11862 4634 11862 4633 11862 4625 11863 4624 11863 4628 11863 4640 11864 4641 11864 6657 11864 6657 11865 4641 11865 4642 11865 6657 11866 4642 11866 4650 11866 4621 11867 4638 11867 4620 11867 4620 11868 4638 11868 4637 11868 4620 11869 4637 11869 4636 11869 4624 11870 4623 11870 4628 11870 4628 11871 4623 11871 4622 11871 4628 11872 4622 11872 4627 11872 4647 11873 4646 11873 6657 11873 6657 11874 4646 11874 4645 11874 6657 11875 4645 11875 4644 11875 4639 11876 4621 11876 4628 11876 4628 11877 4621 11877 4626 11877 4628 11878 4626 11878 4625 11878 4686 11879 4663 11879 6656 11879 6656 11880 4663 11880 6657 11880 6656 11881 6657 11881 4617 11881 4617 11882 6657 11882 4644 11882 4617 11883 4644 11883 4610 11883 4610 11884 4644 11884 4643 11884 4610 11885 4643 11885 4611 11885 4633 11886 4632 11886 4620 11886 4620 11887 4632 11887 4631 11887 4620 11888 4631 11888 4630 11888 4650 11889 4649 11889 6657 11889 6657 11890 4649 11890 4648 11890 6657 11891 4648 11891 4647 11891 4651 11892 4616 11892 4643 11892 4643 11893 4616 11893 4615 11893 4643 11894 4615 11894 4614 11894 4614 11895 4613 11895 4643 11895 4643 11896 4613 11896 4612 11896 4643 11897 4612 11897 4611 11897 4703 11898 4702 11898 6653 11898 4703 11899 6653 11899 4704 11899 6653 11900 4699 11900 4698 11900 4702 11901 4701 11901 6653 11901 6653 11902 4701 11902 4700 11902 6653 11903 4700 11903 4699 11903 4751 11904 4750 11904 6652 11904 4698 11905 4697 11905 6653 11905 6653 11906 4697 11906 4709 11906 6653 11907 4709 11907 4708 11907 4751 11908 6652 11908 4752 11908 4767 11909 4766 11909 6652 11909 6652 11910 4766 11910 4765 11910 6652 11911 4765 11911 6653 11911 6653 11912 4765 11912 4705 11912 6653 11913 4705 11913 4704 11913 4713 11914 4716 11914 6663 11914 6663 11915 4716 11915 4720 11915 6663 11916 4720 11916 4719 11916 6620 11917 4735 11917 4734 11917 4750 11918 4749 11918 6652 11918 6652 11919 4749 11919 4748 11919 6652 11920 4748 11920 4747 11920 6663 11921 4711 11921 4710 11921 4719 11922 4718 11922 6663 11922 6663 11923 4718 11923 4717 11923 6663 11924 4717 11924 6620 11924 6620 11925 4717 11925 4727 11925 6620 11926 4727 11926 4735 11926 4734 11927 4733 11927 6620 11927 6620 11928 4733 11928 4732 11928 6620 11929 4732 11929 4731 11929 4769 11930 4768 11930 4758 11930 4708 11931 4707 11931 6653 11931 6653 11932 4707 11932 4706 11932 6653 11933 4706 11933 6663 11933 6663 11934 4706 11934 4712 11934 6663 11935 4712 11935 4711 11935 4723 11936 4722 11936 4716 11936 4716 11937 4722 11937 4721 11937 4716 11938 4721 11938 4720 11938 4731 11939 4730 11939 6620 11939 6620 11940 4730 11940 4729 11940 6620 11941 4729 11941 4728 11941 4740 11942 4745 11942 6652 11942 6652 11943 4745 11943 4744 11943 6652 11944 4744 11944 4743 11944 4747 11945 4746 11945 6652 11945 6652 11946 4746 11946 4763 11946 6652 11947 4763 11947 4767 11947 4758 11948 4768 11948 4759 11948 4710 11949 4715 11949 6663 11949 6663 11950 4715 11950 4714 11950 6663 11951 4714 11951 4713 11951 4743 11952 4754 11952 6652 11952 6652 11953 4754 11953 4753 11953 6652 11954 4753 11954 4752 11954 4728 11955 4736 11955 6620 11955 6620 11956 4736 11956 4739 11956 6620 11957 4739 11957 4738 11957 4763 11958 4762 11958 4767 11958 4767 11959 4762 11959 4761 11959 4767 11960 4761 11960 4768 11960 4768 11961 4761 11961 4760 11961 4768 11962 4760 11962 4759 11962 4769 11963 4758 11963 4770 11963 4770 11964 4758 11964 4757 11964 4770 11965 4757 11965 4771 11965 4755 11966 4764 11966 4756 11966 4756 11967 4764 11967 4773 11967 4756 11968 4773 11968 4757 11968 4757 11969 4773 11969 4772 11969 4757 11970 4772 11970 4771 11970 4723 11971 4716 11971 4724 11971 4724 11972 4716 11972 4726 11972 4724 11973 4726 11973 4725 11973 4738 11974 4737 11974 6620 11974 6620 11975 4737 11975 4742 11975 6620 11976 4742 11976 4741 11976 4741 11977 4740 11977 6620 11977 6620 11978 4740 11978 6652 11978 6620 11979 6652 11979 6618 11979 6618 11980 6652 11980 4675 11980 6618 11981 4675 11981 4676 11981 6626 11982 6660 11982 4881 11982 4842 11983 4841 11983 6659 11983 4879 11984 4878 11984 4870 11984 4875 11985 4874 11985 4870 11985 4870 11986 4874 11986 4873 11986 4870 11987 4873 11987 4865 11987 4865 11988 4873 11988 4881 11988 4865 11989 4881 11989 4866 11989 4842 11990 6659 11990 4843 11990 4851 11991 4850 11991 4859 11991 4868 11992 4871 11992 4869 11992 4869 11993 4871 11993 4872 11993 4869 11994 4872 11994 4870 11994 4870 11995 4872 11995 4880 11995 4870 11996 4880 11996 4879 11996 4866 11997 4881 11997 4867 11997 4867 11998 4881 11998 6660 11998 4867 11999 6660 11999 4864 11999 4885 12000 4884 12000 6626 12000 4836 12001 4835 12001 6659 12001 4878 12002 4877 12002 4870 12002 4870 12003 4877 12003 4876 12003 4870 12004 4876 12004 4875 12004 4396 12005 6626 12005 6625 12005 6625 12006 6626 12006 4884 12006 6625 12007 4884 12007 4828 12007 6625 12008 4822 12008 4821 12008 4850 12009 4849 12009 4859 12009 4859 12010 4849 12010 4848 12010 4859 12011 4848 12011 4847 12011 4853 12012 4852 12012 4855 12012 4821 12013 4820 12013 6625 12013 6625 12014 4820 12014 4819 12014 6625 12015 4819 12015 4829 12015 4835 12016 4845 12016 6659 12016 6659 12017 4845 12017 4844 12017 6659 12018 4844 12018 4843 12018 4841 12019 4840 12019 6659 12019 6659 12020 4840 12020 4839 12020 6659 12021 4839 12021 4838 12021 4888 12022 4887 12022 6626 12022 6626 12023 4887 12023 4886 12023 6626 12024 4886 12024 4885 12024 4828 12025 4827 12025 6625 12025 6625 12026 4827 12026 4826 12026 6625 12027 4826 12027 4825 12027 4825 12028 4824 12028 6625 12028 6625 12029 4824 12029 4823 12029 6625 12030 4823 12030 4822 12030 4838 12031 4851 12031 6659 12031 6659 12032 4851 12032 4859 12032 6659 12033 4859 12033 6660 12033 6660 12034 4859 12034 4863 12034 6660 12035 4863 12035 4864 12035 4855 12036 4858 12036 4853 12036 4853 12037 4858 12037 4857 12037 4853 12038 4857 12038 4854 12038 4881 12039 4882 12039 6626 12039 6626 12040 4882 12040 4883 12040 6626 12041 4883 12041 4891 12041 4830 12042 4834 12042 6625 12042 6625 12043 4834 12043 4833 12043 6625 12044 4833 12044 6659 12044 6659 12045 4833 12045 4837 12045 6659 12046 4837 12046 4836 12046 4857 12047 4856 12047 4854 12047 4854 12048 4856 12048 4862 12048 4854 12049 4862 12049 4861 12049 4891 12050 4890 12050 6626 12050 6626 12051 4890 12051 4889 12051 6626 12052 4889 12052 4888 12052 4829 12053 4832 12053 6625 12053 6625 12054 4832 12054 4831 12054 6625 12055 4831 12055 4830 12055 4847 12056 4846 12056 4859 12056 4859 12057 4846 12057 4854 12057 4859 12058 4854 12058 4860 12058 4860 12059 4854 12059 4861 12059 4655 12060 4654 12060 6657 12060 6657 12061 4654 12061 6655 12061 6657 12062 6655 12062 6717 12062 6717 12063 6655 12063 6671 12063 6717 12064 6671 12064 6635 12064 6635 12065 6671 12065 6638 12065 6635 12066 6638 12066 4550 12066 4550 12067 6638 12067 4551 12067 4777 12068 4776 12068 6663 12068 6663 12069 4776 12069 6662 12069 6663 12070 6662 12070 6653 12070 6653 12071 6662 12071 6654 12071 6653 12072 6654 12072 4673 12072 4673 12073 6654 12073 4674 12073 4401 12074 4400 12074 6626 12074 6626 12075 4400 12075 6624 12075 6626 12076 6624 12076 6660 12076 6660 12077 6624 12077 6661 12077 6660 12078 6661 12078 4795 12078 4795 12079 6661 12079 4796 12079 6707 12080 6706 12080 6718 12080 6719 12081 6720 12081 6721 12081 6722 12082 6723 12082 6724 12082 6725 12083 6724 12083 6726 12083 6698 12084 6712 12084 6727 12084 6711 12085 6708 12085 6728 12085 6729 12086 6730 12086 6731 12086 6732 12087 6733 12087 6734 12087 6703 12088 6714 12088 6735 12088 6705 12089 6704 12089 6736 12089 6713 12090 6710 12090 6737 12090 6738 12091 6739 12091 6740 12091 6741 12092 6742 12092 6743 12092 6744 12093 6745 12093 6746 12093 6747 12094 6748 12094 6749 12094 6750 12095 6751 12095 6752 12095 6753 12096 6754 12096 6755 12096 6753 12097 6755 12097 6750 12097 6750 12098 6755 12098 6756 12098 6750 12099 6756 12099 6751 12099 6754 12100 6753 12100 6757 12100 6757 12101 6753 12101 6758 12101 6757 12102 6758 12102 6759 12102 6760 12103 6761 12103 6762 12103 6761 12104 6760 12104 6763 12104 6763 12105 6760 12105 6764 12105 6763 12106 6764 12106 6765 12106 6766 12107 6767 12107 6764 12107 6764 12108 6767 12108 6768 12108 6764 12109 6768 12109 6765 12109 6769 12110 6770 12110 6771 12110 6771 12111 6770 12111 6772 12111 6771 12112 6772 12112 6766 12112 6766 12113 6772 12113 6773 12113 6766 12114 6773 12114 6767 12114 6774 12115 6775 12115 6769 12115 6775 12116 6774 12116 6776 12116 6776 12117 6774 12117 6777 12117 6776 12118 6777 12118 6778 12118 6779 12119 6780 12119 6777 12119 6777 12120 6780 12120 6781 12120 6777 12121 6781 12121 6778 12121 6782 12122 6783 12122 6784 12122 6784 12123 6783 12123 6785 12123 6784 12124 6785 12124 6779 12124 6779 12125 6785 12125 6786 12125 6779 12126 6786 12126 6780 12126 6744 12127 6746 12127 6787 12127 6788 12128 6789 12128 6790 12128 6791 12129 6792 12129 6793 12129 6791 12130 6793 12130 6794 12130 6794 12131 6793 12131 6795 12131 6794 12132 6795 12132 6789 12132 6789 12133 6795 12133 6796 12133 6789 12134 6796 12134 6790 12134 6792 12135 6791 12135 6797 12135 6797 12136 6791 12136 6798 12136 6797 12137 6798 12137 6799 12137 6799 12138 6798 12138 6800 12138 6799 12139 6800 12139 6801 12139 6801 12140 6800 12140 6802 12140 6802 12141 6800 12141 6803 12141 6802 12142 6803 12142 6804 12142 6804 12143 6803 12143 6735 12143 6804 12144 6735 12144 6737 12144 6737 12145 6735 12145 6714 12145 6737 12146 6714 12146 6713 12146 6730 12147 6732 12147 6805 12147 6806 12148 6729 12148 6807 12148 6732 12149 6734 12149 6805 12149 6805 12150 6734 12150 6808 12150 6805 12151 6808 12151 6809 12151 6809 12152 6808 12152 6810 12152 6809 12153 6810 12153 6811 12153 6729 12154 6731 12154 6807 12154 6807 12155 6731 12155 6812 12155 6807 12156 6812 12156 6813 12156 6813 12157 6812 12157 6814 12157 6813 12158 6814 12158 6815 12158 6816 12159 6817 12159 6810 12159 6810 12160 6817 12160 6818 12160 6810 12161 6818 12161 6811 12161 6811 12162 6818 12162 6819 12162 6811 12163 6819 12163 6820 12163 6730 12164 6805 12164 6731 12164 6731 12165 6805 12165 6809 12165 6731 12166 6809 12166 6812 12166 6812 12167 6809 12167 6811 12167 6812 12168 6811 12168 6814 12168 6814 12169 6811 12169 6820 12169 6814 12170 6820 12170 6821 12170 6712 12171 6711 12171 6727 12171 6727 12172 6711 12172 6728 12172 6727 12173 6728 12173 6822 12173 6822 12174 6728 12174 6823 12174 6822 12175 6823 12175 6824 12175 6824 12176 6823 12176 6825 12176 6824 12177 6825 12177 6826 12177 6826 12178 6825 12178 6806 12178 6827 12179 6828 12179 6829 12179 6829 12180 6828 12180 6830 12180 6829 12181 6830 12181 6831 12181 6690 12182 6689 12182 6832 12182 6832 12183 6689 12183 6702 12183 6832 12184 6702 12184 6701 12184 6830 12185 6833 12185 6831 12185 6831 12186 6833 12186 6834 12186 6831 12187 6834 12187 6832 12187 6835 12188 6829 12188 6836 12188 6836 12189 6829 12189 6831 12189 6836 12190 6831 12190 6837 12190 6837 12191 6831 12191 6832 12191 6837 12192 6832 12192 6838 12192 6838 12193 6832 12193 6701 12193 6838 12194 6701 12194 6699 12194 6699 12195 6698 12195 6838 12195 6838 12196 6698 12196 6727 12196 6838 12197 6727 12197 6837 12197 6837 12198 6727 12198 6822 12198 6837 12199 6822 12199 6836 12199 6836 12200 6822 12200 6824 12200 6836 12201 6824 12201 6835 12201 6835 12202 6824 12202 6826 12202 6821 12203 6839 12203 6814 12203 6814 12204 6839 12204 6840 12204 6814 12205 6840 12205 6815 12205 6815 12206 6840 12206 6841 12206 6815 12207 6841 12207 6842 12207 6806 12208 6807 12208 6826 12208 6826 12209 6807 12209 6813 12209 6826 12210 6813 12210 6835 12210 6835 12211 6813 12211 6815 12211 6835 12212 6815 12212 6829 12212 6829 12213 6815 12213 6842 12213 6829 12214 6842 12214 6827 12214 6843 12215 6771 12215 6844 12215 6844 12216 6771 12216 6766 12216 6844 12217 6766 12217 6845 12217 6845 12218 6766 12218 6764 12218 6845 12219 6764 12219 6846 12219 6846 12220 6764 12220 6760 12220 6847 12221 6848 12221 6849 12221 6733 12222 6850 12222 6851 12222 6721 12223 6720 12223 6852 12223 6852 12224 6720 12224 6853 12224 6852 12225 6853 12225 6854 12225 6854 12226 6853 12226 6855 12226 6854 12227 6855 12227 6856 12227 6857 12228 6858 12228 6859 12228 6859 12229 6858 12229 6860 12229 6752 12230 6861 12230 6750 12230 6750 12231 6861 12231 6862 12231 6750 12232 6862 12232 6863 12232 6864 12233 6758 12233 6857 12233 6857 12234 6758 12234 6753 12234 6857 12235 6753 12235 6858 12235 6858 12236 6753 12236 6750 12236 6858 12237 6750 12237 6860 12237 6860 12238 6750 12238 6863 12238 6860 12239 6863 12239 6865 12239 6866 12240 6867 12240 6868 12240 6868 12241 6867 12241 6869 12241 6868 12242 6869 12242 6864 12242 6866 12243 6870 12243 6871 12243 6849 12244 6867 12244 6872 12244 6872 12245 6867 12245 6866 12245 6872 12246 6866 12246 6873 12246 6873 12247 6866 12247 6871 12247 6874 12248 6875 12248 6876 12248 6876 12249 6877 12249 6874 12249 6874 12250 6877 12250 6878 12250 6874 12251 6878 12251 6879 12251 6879 12252 6878 12252 6851 12252 6879 12253 6851 12253 6880 12253 6880 12254 6851 12254 6850 12254 6880 12255 6850 12255 6847 12255 6871 12256 6881 12256 6873 12256 6873 12257 6881 12257 6882 12257 6873 12258 6882 12258 6883 12258 6847 12259 6849 12259 6880 12259 6880 12260 6849 12260 6872 12260 6880 12261 6872 12261 6879 12261 6879 12262 6872 12262 6873 12262 6879 12263 6873 12263 6874 12263 6874 12264 6873 12264 6883 12264 6874 12265 6883 12265 6875 12265 6865 12266 6884 12266 6860 12266 6860 12267 6884 12267 6885 12267 6860 12268 6885 12268 6859 12268 6859 12269 6885 12269 6886 12269 6859 12270 6886 12270 6887 12270 6864 12271 6857 12271 6868 12271 6868 12272 6857 12272 6859 12272 6868 12273 6859 12273 6866 12273 6866 12274 6859 12274 6887 12274 6866 12275 6887 12275 6870 12275 6846 12276 6856 12276 6845 12276 6845 12277 6856 12277 6855 12277 6845 12278 6855 12278 6844 12278 6844 12279 6855 12279 6853 12279 6844 12280 6853 12280 6843 12280 6843 12281 6853 12281 6720 12281 6843 12282 6720 12282 6888 12282 6888 12283 6720 12283 6719 12283 6888 12284 6719 12284 6889 12284 6742 12285 6787 12285 6743 12285 6743 12286 6787 12286 6746 12286 6743 12287 6746 12287 6890 12287 6890 12288 6746 12288 6891 12288 6890 12289 6891 12289 6892 12289 6892 12290 6891 12290 6893 12290 6892 12291 6893 12291 6894 12291 6894 12292 6893 12292 6895 12292 6894 12293 6895 12293 6896 12293 6769 12294 6771 12294 6774 12294 6774 12295 6771 12295 6843 12295 6774 12296 6843 12296 6777 12296 6777 12297 6843 12297 6888 12297 6777 12298 6888 12298 6779 12298 6779 12299 6888 12299 6889 12299 6779 12300 6889 12300 6784 12300 6897 12301 6738 12301 6726 12301 6726 12302 6738 12302 6740 12302 6726 12303 6740 12303 6725 12303 6725 12304 6740 12304 6898 12304 6725 12305 6898 12305 6899 12305 6899 12306 6898 12306 6900 12306 6899 12307 6900 12307 6901 12307 6901 12308 6900 12308 6902 12308 6901 12309 6902 12309 6903 12309 6904 12310 6905 12310 6906 12310 6906 12311 6905 12311 6907 12311 6906 12312 6907 12312 6908 12312 6724 12313 6725 12313 6722 12313 6722 12314 6725 12314 6899 12314 6722 12315 6899 12315 6909 12315 6909 12316 6899 12316 6901 12316 6909 12317 6901 12317 6910 12317 6910 12318 6901 12318 6903 12318 6910 12319 6903 12319 6911 12319 6790 12320 6912 12320 6788 12320 6788 12321 6912 12321 6913 12321 6788 12322 6913 12322 6914 12322 6914 12323 6913 12323 6915 12323 6914 12324 6915 12324 6916 12324 6916 12325 6915 12325 6917 12325 6916 12326 6917 12326 6904 12326 6904 12327 6917 12327 6918 12327 6904 12328 6918 12328 6905 12328 6905 12329 6918 12329 6919 12329 6905 12330 6919 12330 6907 12330 6706 12331 6705 12331 6718 12331 6718 12332 6705 12332 6736 12332 6718 12333 6736 12333 6920 12333 6920 12334 6736 12334 6921 12334 6920 12335 6921 12335 6922 12335 6922 12336 6921 12336 6923 12336 6922 12337 6923 12337 6924 12337 6924 12338 6923 12338 6925 12338 6924 12339 6925 12339 6926 12339 6926 12340 6925 12340 6927 12340 6926 12341 6927 12341 6928 12341 6928 12342 6927 12342 6929 12342 6928 12343 6929 12343 6930 12343 6930 12344 6929 12344 6931 12344 6930 12345 6931 12345 6932 12345 6932 12346 6931 12346 6933 12346 6932 12347 6933 12347 6934 12347 6934 12348 6933 12348 6935 12348 6934 12349 6935 12349 6936 12349 6936 12350 6935 12350 6911 12350 6936 12351 6911 12351 6896 12351 6896 12352 6911 12352 6903 12352 6896 12353 6903 12353 6894 12353 6894 12354 6903 12354 6902 12354 6894 12355 6902 12355 6892 12355 6892 12356 6902 12356 6900 12356 6892 12357 6900 12357 6890 12357 6890 12358 6900 12358 6898 12358 6890 12359 6898 12359 6743 12359 6743 12360 6898 12360 6740 12360 6743 12361 6740 12361 6741 12361 6741 12362 6740 12362 6739 12362 6704 12363 6703 12363 6736 12363 6736 12364 6703 12364 6735 12364 6736 12365 6735 12365 6921 12365 6921 12366 6735 12366 6803 12366 6921 12367 6803 12367 6923 12367 6923 12368 6803 12368 6800 12368 6923 12369 6800 12369 6925 12369 6925 12370 6800 12370 6798 12370 6925 12371 6798 12371 6927 12371 6927 12372 6798 12372 6791 12372 6927 12373 6791 12373 6929 12373 6929 12374 6791 12374 6794 12374 6929 12375 6794 12375 6931 12375 6931 12376 6794 12376 6789 12376 6931 12377 6789 12377 6933 12377 6933 12378 6789 12378 6788 12378 6933 12379 6788 12379 6935 12379 6935 12380 6788 12380 6914 12380 6935 12381 6914 12381 6911 12381 6911 12382 6914 12382 6916 12382 6911 12383 6916 12383 6910 12383 6910 12384 6916 12384 6904 12384 6910 12385 6904 12385 6909 12385 6909 12386 6904 12386 6906 12386 6909 12387 6906 12387 6722 12387 6722 12388 6906 12388 6908 12388 6722 12389 6908 12389 6723 12389 6748 12390 6782 12390 6749 12390 6749 12391 6782 12391 6784 12391 6749 12392 6784 12392 6937 12392 6937 12393 6784 12393 6889 12393 6937 12394 6889 12394 6938 12394 6938 12395 6889 12395 6719 12395 6938 12396 6719 12396 6939 12396 6939 12397 6719 12397 6721 12397 6939 12398 6721 12398 6848 12398 6848 12399 6721 12399 6852 12399 6848 12400 6852 12400 6849 12400 6849 12401 6852 12401 6854 12401 6849 12402 6854 12402 6867 12402 6867 12403 6854 12403 6856 12403 6867 12404 6856 12404 6869 12404 6869 12405 6856 12405 6846 12405 6869 12406 6846 12406 6864 12406 6864 12407 6846 12407 6760 12407 6864 12408 6760 12408 6758 12408 6758 12409 6760 12409 6762 12409 6758 12410 6762 12410 6759 12410 6834 12411 6940 12411 6832 12411 6832 12412 6940 12412 6941 12412 6832 12413 6941 12413 6690 12413 6690 12414 6941 12414 6942 12414 6690 12415 6942 12415 6691 12415 6876 12416 6943 12416 6877 12416 6877 12417 6943 12417 6944 12417 6877 12418 6944 12418 6945 12418 6733 12419 6851 12419 6734 12419 6734 12420 6851 12420 6878 12420 6734 12421 6878 12421 6808 12421 6808 12422 6878 12422 6877 12422 6808 12423 6877 12423 6810 12423 6810 12424 6877 12424 6945 12424 6810 12425 6945 12425 6816 12425 6708 12426 6707 12426 6728 12426 6728 12427 6707 12427 6718 12427 6728 12428 6718 12428 6823 12428 6823 12429 6718 12429 6920 12429 6823 12430 6920 12430 6825 12430 6825 12431 6920 12431 6922 12431 6825 12432 6922 12432 6806 12432 6806 12433 6922 12433 6924 12433 6806 12434 6924 12434 6729 12434 6729 12435 6924 12435 6926 12435 6729 12436 6926 12436 6730 12436 6730 12437 6926 12437 6928 12437 6730 12438 6928 12438 6732 12438 6732 12439 6928 12439 6930 12439 6732 12440 6930 12440 6733 12440 6733 12441 6930 12441 6932 12441 6733 12442 6932 12442 6850 12442 6850 12443 6932 12443 6934 12443 6850 12444 6934 12444 6847 12444 6847 12445 6934 12445 6936 12445 6847 12446 6936 12446 6848 12446 6848 12447 6936 12447 6896 12447 6848 12448 6896 12448 6939 12448 6939 12449 6896 12449 6895 12449 6939 12450 6895 12450 6938 12450 6938 12451 6895 12451 6893 12451 6938 12452 6893 12452 6937 12452 6937 12453 6893 12453 6891 12453 6937 12454 6891 12454 6749 12454 6749 12455 6891 12455 6746 12455 6749 12456 6746 12456 6747 12456 6747 12457 6746 12457 6745 12457 6739 12458 6738 12458 6946 12458 6739 12459 6946 12459 6741 12459 6741 12460 6946 12460 6742 12460 6742 12461 6946 12461 6947 12461 6742 12462 6947 12462 6787 12462 6948 12463 6747 12463 6949 12463 6949 12464 6747 12464 6745 12464 6949 12465 6745 12465 6947 12465 6947 12466 6745 12466 6744 12466 6947 12467 6744 12467 6787 12467 6950 12468 6951 12468 6780 12468 6780 12469 6786 12469 6950 12469 6950 12470 6786 12470 6785 12470 6950 12471 6785 12471 6952 12471 6952 12472 6785 12472 6783 12472 6952 12473 6783 12473 6953 12473 6953 12474 6783 12474 6782 12474 6953 12475 6782 12475 6948 12475 6948 12476 6782 12476 6748 12476 6948 12477 6748 12477 6747 12477 6954 12478 6776 12478 6955 12478 6955 12479 6776 12479 6778 12479 6955 12480 6778 12480 6951 12480 6951 12481 6778 12481 6781 12481 6951 12482 6781 12482 6780 12482 6956 12483 6767 12483 6957 12483 6957 12484 6767 12484 6773 12484 6957 12485 6773 12485 6958 12485 6773 12486 6772 12486 6958 12486 6958 12487 6772 12487 6770 12487 6958 12488 6770 12488 6959 12488 6959 12489 6770 12489 6769 12489 6959 12490 6769 12490 6954 12490 6954 12491 6769 12491 6775 12491 6954 12492 6775 12492 6776 12492 6960 12493 6762 12493 6761 12493 6960 12494 6761 12494 6961 12494 6761 12495 6763 12495 6961 12495 6961 12496 6763 12496 6765 12496 6961 12497 6765 12497 6956 12497 6956 12498 6765 12498 6768 12498 6956 12499 6768 12499 6767 12499 6762 12500 6960 12500 6759 12500 6759 12501 6960 12501 6962 12501 6759 12502 6962 12502 6757 12502 6757 12503 6962 12503 6963 12503 6757 12504 6963 12504 6754 12504 6754 12505 6963 12505 6964 12505 6754 12506 6964 12506 6755 12506 6965 12507 6966 12507 6756 12507 6756 12508 6966 12508 6967 12508 6756 12509 6967 12509 6751 12509 6751 12510 6967 12510 6752 12510 6755 12511 6964 12511 6756 12511 6756 12512 6964 12512 6968 12512 6756 12513 6968 12513 6965 12513 6715 12514 5076 12514 5074 12514 6724 12515 6969 12515 6726 12515 6726 12516 6969 12516 6897 12516 5073 12517 6804 12517 5074 12517 5074 12518 6804 12518 6737 12518 6715 12519 5074 12519 6709 12519 6709 12520 5074 12520 6737 12520 6709 12521 6737 12521 6710 12521 5080 12522 6799 12522 5078 12522 5078 12523 6799 12523 6801 12523 5078 12524 6801 12524 5073 12524 5073 12525 6801 12525 6802 12525 5073 12526 6802 12526 6804 12526 5083 12527 6793 12527 5082 12527 5082 12528 6793 12528 6792 12528 5082 12529 6792 12529 5080 12529 5080 12530 6792 12530 6797 12530 5080 12531 6797 12531 6799 12531 5089 12532 6913 12532 5088 12532 5088 12533 6913 12533 6912 12533 5088 12534 6912 12534 5086 12534 5086 12535 6912 12535 6790 12535 5086 12536 6790 12536 5085 12536 5085 12537 6790 12537 6796 12537 5085 12538 6796 12538 5083 12538 5083 12539 6796 12539 6795 12539 5083 12540 6795 12540 6793 12540 5092 12541 6918 12541 5091 12541 5091 12542 6918 12542 6917 12542 5091 12543 6917 12543 5089 12543 5089 12544 6917 12544 6915 12544 5089 12545 6915 12545 6913 12545 5101 12546 6970 12546 5100 12546 5100 12547 6970 12547 6969 12547 5100 12548 6969 12548 5098 12548 5098 12549 6969 12549 6724 12549 5098 12550 6724 12550 5097 12550 5097 12551 6724 12551 6723 12551 5097 12552 6723 12552 5095 12552 5095 12553 6723 12553 6908 12553 5095 12554 6908 12554 5094 12554 5094 12555 6908 12555 6907 12555 5094 12556 6907 12556 5092 12556 5092 12557 6907 12557 6919 12557 5092 12558 6919 12558 6918 12558 5101 12559 5896 12559 6970 12559 6970 12560 5896 12560 6971 12560 6972 12561 6973 12561 6974 12561 6974 12562 6973 12562 6975 12562 6976 12563 6977 12563 6973 12563 6973 12564 6977 12564 6978 12564 6973 12565 6978 12565 6979 12565 6980 12566 6981 12566 6973 12566 6973 12567 6981 12567 6982 12567 6982 12568 6983 12568 6973 12568 6973 12569 6983 12569 6984 12569 6973 12570 6984 12570 6985 12570 6985 12571 6986 12571 6973 12571 6973 12572 6986 12572 6987 12572 6973 12573 6987 12573 6975 12573 6973 12574 6988 12574 6976 12574 6976 12575 6988 12575 6989 12575 6976 12576 6989 12576 6990 12576 6990 12577 6989 12577 6991 12577 6979 12578 6992 12578 6973 12578 6973 12579 6992 12579 6993 12579 6973 12580 6993 12580 6980 12580 6972 12581 6994 12581 6973 12581 6973 12582 6994 12582 6995 12582 6973 12583 6995 12583 6996 12583 6997 12584 6998 12584 6999 12584 7000 12585 7001 12585 7002 12585 7002 12586 7001 12586 7003 12586 7002 12587 7003 12587 6996 12587 6996 12588 7003 12588 7004 12588 6996 12589 7004 12589 6973 12589 6997 12590 6999 12590 7005 12590 7005 12591 6999 12591 7006 12591 7005 12592 7006 12592 6989 12592 6989 12593 7006 12593 7007 12593 6989 12594 7007 12594 6991 12594 7008 12595 7009 12595 7010 12595 7010 12596 7011 12596 7012 12596 7012 12597 7013 12597 7010 12597 7010 12598 7013 12598 7014 12598 7010 12599 7014 12599 7015 12599 7015 12600 7016 12600 7010 12600 7010 12601 7016 12601 7017 12601 7010 12602 7017 12602 7018 12602 7018 12603 7019 12603 7010 12603 7010 12604 7019 12604 7020 12604 7010 12605 7020 12605 7008 12605 7021 12606 7022 12606 7010 12606 7010 12607 7022 12607 7023 12607 7010 12608 7023 12608 7024 12608 7025 12609 7026 12609 7027 12609 7009 12610 7028 12610 7010 12610 7010 12611 7028 12611 7029 12611 7010 12612 7029 12612 7021 12612 7030 12613 7031 12613 7032 12613 7026 12614 7025 12614 7033 12614 7033 12615 7025 12615 7034 12615 7033 12616 7034 12616 7035 12616 7010 12617 7036 12617 7011 12617 7011 12618 7036 12618 7025 12618 7011 12619 7025 12619 7037 12619 7037 12620 7025 12620 7027 12620 7024 12621 7023 12621 7038 12621 7038 12622 7023 12622 7039 12622 7038 12623 7039 12623 7040 12623 7040 12624 7041 12624 7038 12624 7038 12625 7041 12625 7042 12625 7038 12626 7042 12626 7032 12626 7032 12627 7042 12627 7043 12627 7032 12628 7043 12628 7030 12628 7044 12629 7045 12629 7046 12629 7046 12630 7045 12630 7047 12630 6101 13121 7308 13121 6102 13121 6102 13122 7308 13122 7309 13122 6102 13123 7309 13123 6093 13123 6093 13124 7309 13124 7310 13124 6093 13125 7310 13125 6094 13125 6094 13126 7310 13126 7311 13126 6094 13127 7311 13127 6096 13127 6096 13128 7311 13128 7312 13128 6096 13129 7312 13129 6097 13129 6097 13130 7312 13130 7313 13130 6097 13131 7313 13131 6086 13131 6086 13132 7313 13132 7314 13132 6086 13133 7314 13133 6087 13133 6087 13134 7314 13134 7315 13134 6087 13135 7315 13135 6089 13135 6089 13136 7315 13136 7316 13136 6089 13137 7316 13137 6090 13137 6090 13138 7316 13138 7317 13138 6090 13139 7317 13139 6081 13139 6081 13140 7317 13140 7318 13140 6081 13141 7318 13141 6082 13141 6082 13142 7318 13142 7319 13142 6082 13143 7319 13143 6084 13143 6084 13144 7319 13144 7320 13144 6084 13145 7320 13145 6108 13145 6108 13146 7320 13146 7321 13146 6108 13147 7321 13147 6107 13147 6107 13148 7321 13148 7322 13148 6107 13149 7322 13149 6098 13149 6098 13150 7322 13150 7323 13150 6098 13151 7323 13151 6106 13151 6106 13152 7323 13152 7324 13152 6106 13153 7324 13153 6105 13153 6105 13154 7324 13154 7325 13154 6105 13155 7325 13155 6104 13155 6104 13156 7325 13156 7326 13156 6104 13157 7326 13157 6103 13157 6103 13158 7326 13158 7327 13158 6103 13159 7327 13159 6069 13159 6069 13160 7327 13160 7328 13160 6069 13161 7328 13161 6068 13161 6068 13162 7328 13162 7329 13162 6068 13163 7329 13163 6067 13163 6067 13164 7329 13164 7330 13164 6067 13165 7330 13165 6078 13165 6078 13166 7330 13166 7331 13166 6078 13167 7331 13167 6077 13167 6077 13168 7331 13168 7332 13168 6077 13169 7332 13169 6076 13169 6076 13170 7332 13170 7333 13170 6076 13171 7333 13171 6075 13171 6075 13172 7333 13172 7334 13172 6075 13173 7334 13173 6070 13173 6070 13174 7334 13174 7335 13174 6070 13175 7335 13175 6071 13175 6071 13176 7335 13176 7336 13176 6071 13177 7336 13177 6072 13177 6072 13178 7336 13178 7337 13178 6072 13179 7337 13179 6073 13179 6073 13180 7337 13180 7338 13180 6073 13181 7338 13181 6074 13181 6074 13182 7338 13182 7339 13182 6074 13183 7339 13183 6080 13183 6080 13184 7339 13184 7340 13184 6080 13185 7340 13185 6079 13185 6079 13186 7340 13186 7341 13186 6079 13187 7341 13187 6099 13187 6099 13188 7341 13188 7342 13188 6099 13189 7342 13189 6100 13189 6100 13190 7342 13190 7343 13190 6100 13191 7343 13191 6101 13191 6101 13192 7343 13192 7308 13192 6012 13193 7344 13193 6037 13193 6037 13194 7344 13194 7345 13194 6037 13195 7345 13195 6038 13195 6038 13196 7345 13196 7346 13196 6038 13197 7346 13197 6034 13197 6034 13198 7346 13198 7347 13198 6034 13199 7347 13199 6035 13199 6035 13200 7347 13200 7348 13200 6035 13201 7348 13201 5997 13201 5997 13202 7348 13202 7349 13202 5997 13203 7349 13203 5998 13203 5998 13204 7349 13204 7350 13204 5998 13205 7350 13205 6015 13205 6015 13206 7350 13206 7351 13206 6015 13207 7351 13207 6014 13207 6014 13208 7351 13208 7352 13208 6014 13209 7352 13209 6013 13209 6013 13210 7352 13210 7353 13210 6013 13211 7353 13211 6016 13211 6016 13212 7353 13212 7354 13212 6016 13213 7354 13213 6017 13213 6017 13214 7354 13214 7355 13214 6017 13215 7355 13215 6018 13215 6018 13216 7355 13216 7356 13216 6018 13217 7356 13217 6019 13217 6019 13218 7356 13218 7357 13218 6019 13219 7357 13219 6020 13219 6020 13220 7357 13220 7358 13220 6020 13221 7358 13221 6021 13221 6021 13222 7358 13222 7359 13222 6021 13223 7359 13223 6022 13223 6022 13224 7359 13224 7360 13224 6022 13225 7360 13225 6001 13225 6001 13226 7360 13226 7361 13226 6001 13227 7361 13227 6000 13227 6000 13228 7361 13228 7362 13228 6000 13229 7362 13229 5999 13229 5999 13230 7362 13230 7363 13230 5999 13231 7363 13231 6025 13231 6025 13232 7363 13232 7364 13232 6025 13233 7364 13233 6024 13233 6024 13234 7364 13234 7365 13234 6024 13235 7365 13235 6023 13235 6023 13236 7365 13236 7366 13236 6023 13237 7366 13237 6033 13237 6033 13238 7366 13238 7367 13238 6033 13239 7367 13239 6002 13239 6002 13240 7367 13240 7368 13240 6002 13241 7368 13241 6003 13241 6003 13242 7368 13242 7369 13242 6003 13243 7369 13243 6005 13243 6005 13244 7369 13244 7370 13244 6005 13245 7370 13245 6006 13245 6006 13246 7370 13246 7371 13246 6006 13247 7371 13247 6008 13247 6008 13248 7371 13248 7372 13248 6008 13249 7372 13249 6009 13249 6009 13250 7372 13250 7373 13250 6009 13251 7373 13251 6027 13251 6027 13252 7373 13252 7374 13252 6027 13253 7374 13253 6028 13253 6028 13254 7374 13254 7375 13254 6028 13255 7375 13255 6029 13255 6029 13256 7375 13256 7376 13256 6029 13257 7376 13257 6030 13257 6030 13258 7376 13258 7377 13258 6030 13259 7377 13259 6031 13259 6031 13260 7377 13260 7378 13260 6031 13261 7378 13261 6032 13261 6032 13262 7378 13262 7379 13262 6032 13263 7379 13263 6012 13263 6012 13264 7379 13264 7344 13264 7640 13755 5336 13755 5335 13755 7640 13756 7641 13756 5336 13756 5336 13757 7641 13757 7642 13757 5336 13758 7642 13758 5341 13758 5341 13759 7642 13759 7643 13759 5341 13760 7643 13760 5342 13760 5342 13761 7643 13761 7644 13761 5342 13762 7644 13762 5325 13762 5325 13763 7644 13763 7645 13763 5325 13764 7645 13764 5343 13764 5343 13765 7645 13765 7646 13765 5343 13766 7646 13766 5344 13766 5344 13767 7646 13767 7647 13767 5344 13768 7647 13768 5345 13768 7647 13769 7648 13769 5345 13769 5345 13770 7648 13770 7649 13770 5345 13771 7649 13771 5346 13771 5346 13772 7649 13772 7650 13772 5346 13773 7650 13773 5347 13773 5347 13774 7650 13774 7651 13774 5347 13775 7651 13775 5353 13775 5353 13776 7651 13776 7652 13776 5353 13777 7652 13777 5354 13777 7652 13778 7653 13778 5354 13778 5354 13779 7653 13779 7654 13779 5354 13780 7654 13780 5338 13780 5338 13781 7654 13781 7655 13781 5338 13782 7655 13782 5355 13782 5355 13783 7655 13783 7656 13783 5355 13784 7656 13784 5358 13784 5358 13785 7656 13785 7657 13785 5358 13786 7657 13786 5359 13786 5359 13787 7657 13787 7658 13787 5359 13788 7658 13788 5360 13788 5360 13789 7658 13789 7659 13789 5360 13790 7659 13790 5356 13790 5356 13791 7659 13791 7660 13791 5356 13792 7660 13792 5357 13792 5357 13793 7660 13793 7661 13793 5357 13794 7661 13794 5340 13794 5340 13795 7661 13795 7662 13795 5340 13796 7662 13796 5339 13796 7662 13797 7663 13797 5339 13797 5339 13798 7663 13798 7664 13798 5339 13799 7664 13799 5337 13799 5337 13800 7664 13800 7665 13800 5337 13801 7665 13801 5326 13801 5326 13802 7665 13802 7666 13802 5326 13803 7666 13803 5327 13803 5327 13804 7666 13804 7667 13804 5327 13805 7667 13805 5328 13805 7667 13806 7668 13806 5328 13806 5328 13807 7668 13807 7669 13807 5328 13808 7669 13808 5329 13808 5329 13809 7669 13809 7670 13809 5329 13810 7670 13810 5330 13810 5330 13811 7670 13811 7671 13811 5330 13812 7671 13812 5351 13812 5351 13813 7671 13813 7672 13813 5351 13814 7672 13814 5350 13814 5350 13815 7672 13815 7673 13815 5350 13816 7673 13816 5348 13816 5348 13817 7673 13817 7674 13817 5348 13818 7674 13818 5349 13818 7674 13819 7675 13819 5349 13819 5349 13820 7675 13820 7676 13820 5349 13821 7676 13821 5352 13821 7676 13822 7677 13822 5352 13822 5352 13823 7677 13823 7678 13823 5352 13824 7678 13824 5331 13824 5331 13825 7678 13825 7679 13825 5331 13826 7679 13826 5332 13826 5332 13827 7679 13827 7680 13827 5332 13828 7680 13828 5333 13828 5333 13829 7680 13829 7681 13829 5333 13830 7681 13830 5334 13830 5334 13831 7681 13831 7682 13831 5334 13832 7682 13832 5335 13832 5335 13833 7682 13833 7683 13833 5335 13834 7683 13834 7640 13834 5367 13835 7684 13835 7685 13835 5367 13836 7685 13836 5386 13836 5386 13837 7685 13837 7686 13837 5386 13838 7686 13838 5401 13838 5401 13839 7686 13839 7687 13839 5401 13840 7687 13840 5402 13840 5402 13841 7687 13841 7688 13841 5402 13842 7688 13842 5404 13842 5404 13843 7688 13843 7689 13843 5404 13844 7689 13844 5405 13844 7689 13845 7690 13845 5405 13845 5405 13846 7690 13846 7691 13846 5405 13847 7691 13847 5403 13847 5403 13848 7691 13848 7692 13848 5403 13849 7692 13849 5387 13849 5387 13850 7692 13850 7693 13850 7694 13851 5369 13851 7693 13851 7693 13852 5369 13852 5388 13852 7693 13853 5388 13853 5387 13853 7694 13854 7695 13854 5369 13854 5369 13855 7695 13855 7696 13855 5369 13856 7696 13856 5368 13856 5366 13857 5365 13857 7697 13857 7697 13858 5365 13858 7698 13858 7697 13859 7699 13859 5366 13859 5366 13860 7699 13860 7700 13860 5366 13861 7700 13861 5367 13861 5367 13862 7700 13862 7684 13862 7701 13863 5394 13863 7702 13863 7702 13864 5394 13864 5383 13864 7702 13865 5383 13865 7703 13865 7703 13866 5383 13866 5382 13866 7703 13867 5382 13867 7704 13867 7705 13868 5379 13868 7701 13868 7701 13869 5379 13869 5395 13869 7701 13870 5395 13870 5394 13870 7705 13871 7706 13871 5379 13871 5379 13872 7706 13872 7707 13872 5379 13873 7707 13873 5380 13873 5380 13874 7707 13874 7708 13874 5380 13875 7708 13875 5384 13875 5384 13876 7708 13876 7709 13876 5384 13877 7709 13877 5385 13877 5385 13878 7709 13878 7698 13878 5385 13879 7698 13879 5365 13879 5361 13880 7710 13880 7711 13880 5361 13881 7711 13881 5362 13881 5362 13882 7711 13882 7712 13882 5362 13883 7712 13883 5381 13883 5381 13884 7712 13884 7704 13884 5381 13885 7704 13885 5382 13885 5371 13886 7713 13886 7714 13886 5371 13887 7714 13887 5389 13887 5389 13888 7714 13888 7715 13888 5389 13889 7715 13889 5406 13889 5406 13890 7715 13890 7716 13890 5406 13891 7716 13891 5407 13891 5407 13892 7716 13892 7717 13892 5407 13893 7717 13893 5409 13893 5409 13894 7717 13894 7718 13894 5409 13895 7718 13895 5410 13895 5410 13896 7718 13896 7719 13896 5410 13897 7719 13897 5408 13897 5408 13898 7719 13898 7720 13898 5408 13899 7720 13899 5390 13899 5390 13900 7720 13900 7721 13900 5390 13901 7721 13901 5391 13901 5391 13902 7721 13902 7722 13902 5391 13903 7722 13903 5373 13903 5373 13904 7722 13904 7723 13904 5373 13905 7723 13905 5372 13905 5372 13906 7723 13906 7710 13906 5372 13907 7710 13907 5361 13907 7713 13908 5371 13908 5370 13908 5377 13909 7724 13909 7725 13909 5377 13910 7725 13910 5378 13910 5378 13911 7725 13911 7726 13911 5378 13912 7726 13912 5370 13912 5370 13913 7726 13913 7727 13913 5370 13914 7727 13914 7713 13914 7728 13915 5400 13915 7729 13915 7729 13916 5400 13916 5399 13916 7729 13917 5399 13917 7730 13917 7730 13918 5399 13918 5393 13918 7730 13919 5393 13919 7731 13919 7731 13920 5393 13920 5392 13920 7731 13921 5392 13921 7732 13921 7732 13922 5392 13922 5396 13922 7732 13923 5396 13923 7733 13923 7733 13924 5396 13924 5413 13924 7733 13925 5413 13925 7734 13925 7734 13926 5413 13926 5412 13926 7734 13927 5412 13927 7735 13927 7735 13928 5412 13928 5411 13928 7735 13929 5411 13929 7736 13929 7736 13930 5411 13930 5398 13930 7736 13931 5398 13931 7737 13931 7737 13932 5398 13932 5397 13932 7737 13933 5397 13933 7738 13933 7738 13934 5397 13934 5376 13934 7738 13935 5376 13935 7739 13935 7740 13936 5375 13936 7728 13936 7728 13937 5375 13937 5374 13937 7728 13938 5374 13938 5400 13938 7740 13939 7741 13939 5375 13939 5375 13940 7741 13940 7724 13940 5375 13941 7724 13941 5377 13941 7696 13942 7742 13942 5368 13942 5368 13943 7742 13943 7743 13943 5368 13944 7743 13944 5364 13944 5364 13945 7743 13945 7744 13945 5364 13946 7744 13946 5363 13946 5363 13947 7744 13947 7739 13947 5363 13948 7739 13948 5376 13948 5446 13949 7745 13949 7746 13949 5446 13950 7746 13950 5448 13950 5448 13951 7746 13951 7747 13951 5448 13952 7747 13952 5461 13952 5461 13953 7747 13953 7748 13953 5461 13954 7748 13954 5462 13954 5462 13955 7748 13955 7749 13955 5462 13956 7749 13956 5464 13956 5464 13957 7749 13957 7750 13957 5464 13958 7750 13958 5466 13958 5466 13959 7750 13959 7751 13959 5466 13960 7751 13960 5465 13960 5465 13961 7751 13961 7752 13961 5465 13962 7752 13962 5463 13962 5463 13963 7752 13963 7753 13963 5463 13964 7753 13964 5449 13964 5449 13965 7753 13965 7754 13965 5449 13966 7754 13966 5447 13966 5447 13967 7754 13967 7755 13967 5447 13968 7755 13968 5423 13968 5444 13969 5414 13969 7756 13969 7756 13970 5414 13970 7757 13970 5444 13971 7756 13971 5445 13971 5445 13972 7756 13972 7745 13972 5445 13973 7745 13973 5446 13973 5421 13974 7758 13974 7759 13974 5421 13975 7759 13975 5422 13975 5422 13976 7759 13976 7760 13976 5422 13977 7760 13977 5433 13977 7760 13978 7761 13978 5433 13978 5433 13979 7761 13979 7762 13979 5433 13980 7762 13980 5434 13980 5434 13981 7762 13981 7763 13981 5434 13982 7763 13982 5436 13982 5436 13983 7763 13983 7764 13983 5436 13984 7764 13984 5435 13984 5435 13985 7764 13985 7765 13985 5435 13986 7765 13986 5420 13986 5420 13987 7765 13987 7766 13987 5420 13988 7766 13988 5431 13988 5431 13989 7766 13989 7767 13989 5431 13990 7767 13990 5432 13990 5432 13991 7767 13991 7768 13991 5432 13992 7768 13992 5442 13992 5442 13993 7768 13993 7769 13993 5442 13994 7769 13994 5443 13994 5443 13995 7769 13995 7770 13995 5443 13996 7770 13996 5416 13996 5416 13997 7770 13997 7757 13997 5416 13998 7757 13998 5414 13998 5430 13999 7771 13999 7772 13999 7758 14000 5421 14000 5419 14000 5430 14001 7772 14001 5418 14001 5418 14002 7772 14002 7773 14002 5418 14003 7773 14003 5419 14003 5419 14004 7773 14004 7774 14004 5419 14005 7774 14005 7758 14005 5428 14006 7775 14006 7776 14006 5428 14007 7776 14007 5455 14007 5455 14008 7776 14008 7777 14008 5455 14009 7777 14009 5451 14009 5451 14010 7777 14010 7778 14010 5451 14011 7778 14011 5453 14011 5453 14012 7778 14012 7779 14012 5453 14013 7779 14013 5454 14013 5454 14014 7779 14014 7780 14014 5454 14015 7780 14015 5452 14015 5452 14016 7780 14016 7781 14016 5452 14017 7781 14017 5450 14017 5450 14018 7781 14018 7782 14018 5450 14019 7782 14019 5456 14019 5456 14020 7782 14020 7783 14020 5456 14021 7783 14021 5426 14021 5426 14022 7783 14022 7784 14022 5426 14023 7784 14023 5427 14023 5427 14024 7784 14024 7785 14024 5427 14025 7785 14025 5429 14025 5429 14026 7785 14026 7771 14026 5429 14027 7771 14027 5430 14027 5439 14028 7786 14028 7787 14028 5439 14029 7787 14029 5415 14029 5415 14030 7787 14030 7788 14030 5415 14031 7788 14031 5417 14031 5417 14032 7788 14032 7775 14032 5417 14033 7775 14033 5428 14033 5437 14034 7789 14034 7790 14034 5437 14035 7790 14035 5438 14035 5438 14036 7790 14036 7791 14036 5438 14037 7791 14037 5440 14037 5440 14038 7791 14038 7792 14038 5440 14039 7792 14039 5457 14039 5457 14040 7792 14040 7793 14040 5457 14041 7793 14041 5458 14041 5458 14042 7793 14042 7794 14042 5458 14043 7794 14043 5460 14043 5460 14044 7794 14044 7795 14044 5460 14045 7795 14045 5459 14045 5459 14046 7795 14046 7796 14046 5459 14047 7796 14047 5441 14047 5441 14048 7796 14048 7786 14048 5441 14049 7786 14049 5439 14049 5423 14050 7755 14050 7797 14050 5423 14051 7797 14051 5424 14051 5424 14052 7797 14052 7798 14052 5424 14053 7798 14053 5425 14053 5425 14054 7798 14054 7789 14054 5425 14055 7789 14055 5437 14055 5483 14056 7799 14056 7800 14056 5483 14057 7800 14057 5494 14057 5494 14058 7800 14058 7801 14058 5494 14059 7801 14059 5515 14059 5515 14060 7801 14060 7802 14060 5515 14061 7802 14061 5516 14061 5516 14062 7802 14062 7803 14062 5516 14063 7803 14063 5518 14063 5518 14064 7803 14064 7804 14064 5518 14065 7804 14065 5519 14065 5519 14066 7804 14066 7805 14066 5519 14067 7805 14067 5517 14067 5517 14068 7805 14068 7806 14068 5517 14069 7806 14069 5495 14069 5495 14070 7806 14070 7807 14070 5495 14071 7807 14071 5496 14071 5496 14072 7807 14072 7808 14072 5496 14073 7808 14073 5485 14073 5485 14074 7808 14074 7809 14074 5485 14075 7809 14075 5484 14075 5481 14076 7810 14076 7811 14076 5481 14077 7811 14077 5482 14077 5482 14078 7811 14078 7799 14078 5482 14079 7799 14079 5483 14079 5504 14080 7812 14080 7813 14080 5504 14081 7813 14081 5505 14081 5505 14082 7813 14082 7814 14082 5505 14083 7814 14083 5506 14083 5506 14084 7814 14084 7815 14084 5506 14085 7815 14085 5507 14085 5507 14086 7815 14086 7816 14086 5507 14087 7816 14087 5508 14087 5508 14088 7816 14088 7817 14088 5508 14089 7817 14089 5509 14089 5509 14090 7817 14090 7818 14090 5509 14091 7818 14091 5510 14091 5510 14092 7818 14092 7819 14092 5510 14093 7819 14093 5511 14093 5511 14094 7819 14094 7810 14094 5511 14095 7810 14095 5481 14095 5473 14096 7820 14096 7821 14096 5473 14097 7821 14097 5474 14097 7821 14098 7822 14098 5474 14098 5474 14099 7822 14099 7823 14099 5474 14100 7823 14100 5475 14100 5475 14101 7823 14101 7812 14101 5475 14102 7812 14102 5504 14102 5470 14103 7824 14103 7825 14103 5470 14104 7825 14104 5471 14104 5471 14105 7825 14105 7826 14105 5471 14106 7826 14106 5472 14106 5472 14107 7826 14107 7827 14107 5472 14108 7827 14108 5491 14108 5491 14109 7827 14109 7828 14109 5491 14110 7828 14110 5492 14110 5492 14111 7828 14111 7829 14111 5492 14112 7829 14112 5493 14112 5493 14113 7829 14113 7830 14113 5493 14114 7830 14114 5502 14114 5502 14115 7830 14115 7831 14115 5502 14116 7831 14116 5503 14116 5503 14117 7831 14117 7832 14117 5503 14118 7832 14118 5486 14118 5486 14119 7832 14119 7833 14119 5486 14120 7833 14120 5487 14120 5487 14121 7833 14121 7834 14121 5487 14122 7834 14122 5488 14122 5488 14123 7834 14123 7820 14123 5488 14124 7820 14124 5473 14124 5479 14125 7835 14125 7836 14125 5479 14126 7836 14126 5480 14126 5480 14127 7836 14127 7837 14127 5480 14128 7837 14128 5469 14128 5469 14129 7837 14129 7824 14129 5469 14130 7824 14130 5470 14130 5478 14131 7838 14131 7839 14131 5478 14132 7839 14132 5498 14132 5498 14133 7839 14133 7840 14133 5498 14134 7840 14134 5499 14134 5499 14135 7840 14135 7841 14135 5499 14136 7841 14136 5512 14136 5512 14137 7841 14137 7842 14137 5512 14138 7842 14138 5513 14138 5513 14139 7842 14139 7843 14139 5513 14140 7843 14140 5514 14140 5514 14141 7843 14141 7844 14141 5514 14142 7844 14142 5497 14142 5497 14143 7844 14143 7845 14143 5497 14144 7845 14144 5489 14144 5489 14145 7845 14145 7846 14145 5489 14146 7846 14146 5490 14146 5490 14147 7846 14147 7847 14147 5490 14148 7847 14148 5500 14148 5500 14149 7847 14149 7848 14149 5500 14150 7848 14150 5501 14150 7848 14151 7849 14151 5501 14151 5501 14152 7849 14152 7850 14152 5501 14153 7850 14153 5476 14153 5476 14154 7850 14154 7851 14154 5476 14155 7851 14155 5477 14155 5477 14156 7851 14156 7835 14156 5477 14157 7835 14157 5479 14157 5484 14158 7809 14158 7852 14158 7852 14159 7853 14159 5484 14159 5484 14160 7853 14160 7854 14160 5484 14161 7854 14161 5467 14161 5467 14162 7854 14162 7855 14162 5467 14163 7855 14163 5468 14163 5468 14164 7855 14164 7838 14164 5468 14165 7838 14165 5478 14165 5549 14166 7856 14166 7857 14166 5549 14167 7857 14167 5542 14167 5542 14168 7857 14168 7858 14168 5542 14169 7858 14169 5543 14169 5543 14170 7858 14170 7859 14170 5543 14171 7859 14171 5556 14171 5556 14172 7859 14172 7860 14172 5556 14173 7860 14173 5557 14173 5557 14174 7860 14174 7861 14174 5557 14175 7861 14175 5558 14175 5520 14176 7862 14176 7863 14176 5520 14177 7863 14177 5546 14177 5546 14178 7863 14178 7864 14178 5546 14179 7864 14179 5547 14179 5547 14180 7864 14180 7865 14180 5547 14181 7865 14181 5548 14181 5548 14182 7865 14182 7856 14182 5548 14183 7856 14183 5549 14183 5536 14184 7866 14184 5520 14184 5520 14185 7866 14185 7862 14185 5531 14186 7867 14186 7868 14186 5531 14187 7868 14187 5532 14187 5532 14188 7868 14188 7869 14188 5532 14189 7869 14189 5534 14189 5534 14190 7869 14190 7866 14190 5534 14191 7866 14191 5536 14191 5538 14192 5521 14192 7870 14192 7870 14193 5521 14193 7871 14193 7872 14194 7867 14194 5531 14194 7870 14195 7873 14195 5538 14195 5538 14196 7873 14196 7872 14196 5538 14197 7872 14197 5530 14197 5530 14198 7872 14198 5531 14198 5525 14199 7874 14199 7875 14199 5525 14200 7875 14200 5523 14200 5523 14201 7875 14201 7871 14201 5523 14202 7871 14202 5521 14202 5527 14203 7876 14203 5525 14203 5525 14204 7876 14204 7874 14204 7876 14205 5527 14205 5526 14205 7876 14206 5526 14206 7877 14206 7877 14207 5526 14207 5524 14207 7877 14208 5524 14208 7878 14208 7878 14209 5524 14209 5522 14209 7878 14210 5522 14210 7879 14210 5537 14211 7880 14211 7881 14211 5537 14212 7881 14212 5539 14212 5539 14213 7881 14213 7882 14213 5539 14214 7882 14214 5540 14214 5540 14215 7882 14215 7883 14215 5540 14216 7883 14216 5541 14216 5541 14217 7883 14217 7884 14217 5541 14218 7884 14218 5544 14218 5544 14219 7884 14219 7885 14219 5544 14220 7885 14220 5545 14220 5545 14221 7885 14221 7879 14221 5545 14222 7879 14222 5522 14222 7886 14223 7887 14223 5533 14223 5533 14224 7887 14224 7888 14224 5533 14225 7888 14225 5528 14225 5528 14226 7888 14226 7889 14226 5528 14227 7889 14227 5529 14227 5529 14228 7889 14228 7880 14228 5529 14229 7880 14229 5537 14229 5554 14230 7890 14230 7891 14230 5554 14231 7891 14231 5555 14231 5555 14232 7891 14232 7892 14232 5555 14233 7892 14233 5535 14233 5535 14234 7892 14234 7886 14234 5535 14235 7886 14235 5533 14235 5553 14236 5552 14236 7893 14236 7893 14237 5552 14237 7894 14237 7890 14238 5554 14238 7895 14238 7895 14239 5554 14239 5553 14239 7895 14240 5553 14240 7896 14240 7896 14241 5553 14241 7893 14241 5550 14242 5589 14242 7897 14242 7898 14243 7894 14243 5552 14243 7897 14244 7899 14244 5550 14244 5550 14245 7899 14245 7898 14245 5550 14246 7898 14246 5551 14246 5551 14247 7898 14247 5552 14247 7897 14248 5589 14248 5588 14248 5579 14249 7900 14249 7901 14249 5579 14250 7901 14250 5580 14250 5580 14251 7901 14251 7902 14251 5580 14252 7902 14252 5581 14252 5581 14253 7902 14253 7903 14253 5581 14254 7903 14254 5582 14254 5582 14255 7903 14255 7904 14255 5582 14256 7904 14256 5583 14256 5583 14257 7904 14257 7905 14257 5583 14258 7905 14258 5584 14258 5584 14259 7905 14259 7906 14259 5584 14260 7906 14260 5585 14260 5585 14261 7906 14261 7907 14261 5585 14262 7907 14262 5586 14262 5586 14263 7907 14263 7908 14263 5586 14264 7908 14264 5587 14264 5587 14265 7908 14265 7909 14265 5587 14266 7909 14266 5588 14266 5588 14267 7909 14267 7910 14267 5588 14268 7910 14268 7897 14268 5570 14269 5569 14269 7911 14269 7911 14270 5569 14270 7912 14270 7911 14271 7913 14271 5570 14271 5570 14272 7913 14272 7914 14272 5570 14273 7914 14273 5571 14273 5571 14274 7914 14274 7915 14274 5571 14275 7915 14275 5572 14275 5572 14276 7915 14276 7916 14276 5572 14277 7916 14277 5573 14277 5573 14278 7916 14278 7917 14278 5573 14279 7917 14279 5574 14279 5574 14280 7917 14280 7918 14280 5574 14281 7918 14281 5575 14281 5575 14282 7918 14282 7919 14282 5575 14283 7919 14283 5576 14283 5576 14284 7919 14284 7920 14284 5576 14285 7920 14285 5577 14285 5577 14286 7920 14286 7921 14286 5577 14287 7921 14287 5578 14287 5578 14288 7921 14288 7900 14288 5578 14289 7900 14289 5579 14289 7912 14290 5569 14290 5568 14290 5559 14291 7922 14291 7923 14291 5559 14292 7923 14292 5560 14292 5560 14293 7923 14293 7924 14293 5560 14294 7924 14294 5561 14294 5561 14295 7924 14295 7925 14295 5561 14296 7925 14296 5562 14296 5562 14297 7925 14297 7926 14297 5562 14298 7926 14298 5563 14298 5563 14299 7926 14299 7927 14299 5563 14300 7927 14300 5564 14300 5564 14301 7927 14301 7928 14301 5564 14302 7928 14302 5565 14302 5565 14303 7928 14303 7929 14303 5565 14304 7929 14304 5566 14304 5566 14305 7929 14305 7930 14305 5566 14306 7930 14306 5567 14306 5567 14307 7930 14307 7931 14307 5567 14308 7931 14308 5568 14308 5568 14309 7931 14309 7932 14309 5568 14310 7932 14310 7912 14310 5558 14311 7861 14311 5559 14311 5559 14312 7861 14312 7922 14312 5591 14313 7933 14313 7934 14313 5591 14314 7934 14314 5593 14314 5593 14315 7934 14315 7935 14315 5593 14316 7935 14316 5606 14316 5606 14317 7935 14317 7936 14317 5606 14318 7936 14318 5607 14318 5607 14319 7936 14319 7937 14319 5607 14320 7937 14320 5615 14320 5615 14321 7937 14321 7938 14321 5615 14322 7938 14322 5616 14322 5616 14323 7938 14323 7939 14323 5616 14324 7939 14324 5618 14324 5618 14325 7939 14325 7940 14325 5618 14326 7940 14326 5620 14326 5590 14327 7941 14327 5591 14327 5591 14328 7941 14328 7933 14328 5592 14329 7942 14329 5590 14329 5590 14330 7942 14330 7941 14330 5603 14331 7943 14331 5592 14331 5592 14332 7943 14332 7942 14332 5619 14333 7944 14333 7945 14333 5619 14334 7945 14334 5617 14334 5617 14335 7945 14335 7946 14335 5617 14336 7946 14336 5612 14336 5612 14337 7946 14337 7947 14337 5612 14338 7947 14338 5613 14338 5613 14339 7947 14339 7948 14339 5613 14340 7948 14340 5614 14340 5614 14341 7948 14341 7949 14341 5614 14342 7949 14342 5605 14342 5605 14343 7949 14343 7950 14343 5605 14344 7950 14344 5604 14344 5604 14345 7950 14345 7943 14345 5604 14346 7943 14346 5603 14346 5621 14347 7951 14347 5619 14347 5619 14348 7951 14348 7944 14348 5595 14349 7952 14349 7953 14349 5595 14350 7953 14350 5597 14350 5597 14351 7953 14351 7954 14351 5597 14352 7954 14352 5601 14352 5601 14353 7954 14353 7955 14353 5601 14354 7955 14354 5602 14354 5602 14355 7955 14355 7956 14355 5602 14356 7956 14356 5608 14356 5608 14357 7956 14357 7957 14357 5608 14358 7957 14358 5609 14358 5609 14359 7957 14359 7958 14359 5609 14360 7958 14360 5623 14360 5623 14361 7958 14361 7951 14361 5623 14362 7951 14362 5621 14362 5594 14363 7959 14363 5595 14363 5595 14364 7959 14364 7952 14364 5596 14365 7960 14365 5594 14365 5594 14366 7960 14366 7959 14366 5598 14367 7961 14367 5596 14367 5596 14368 7961 14368 7960 14368 5622 14369 7962 14369 7963 14369 5622 14370 7963 14370 5624 14370 5624 14371 7963 14371 7964 14371 5624 14372 7964 14372 5625 14372 5625 14373 7964 14373 7965 14373 5625 14374 7965 14374 5611 14374 5611 14375 7965 14375 7966 14375 5611 14376 7966 14376 5610 14376 5610 14377 7966 14377 7967 14377 5610 14378 7967 14378 5600 14378 5600 14379 7967 14379 7968 14379 5600 14380 7968 14380 5599 14380 5599 14381 7968 14381 7961 14381 5599 14382 7961 14382 5598 14382 5620 14383 7940 14383 5622 14383 5622 14384 7940 14384 7962 14384 5645 14385 7969 14385 7970 14385 5645 14386 7970 14386 5646 14386 5646 14387 7970 14387 7971 14387 5646 14388 7971 14388 5632 14388 5632 14389 7971 14389 7972 14389 5632 14390 7972 14390 5633 14390 5633 14391 7972 14391 7973 14391 5633 14392 7973 14392 5635 14392 5635 14393 7973 14393 7974 14393 5635 14394 7974 14394 5651 14394 5651 14395 7974 14395 7975 14395 5651 14396 7975 14396 5652 14396 5644 14397 7976 14397 5645 14397 5645 14398 7976 14398 7969 14398 5634 14399 7977 14399 5644 14399 5644 14400 7977 14400 7976 14400 5629 14401 7978 14401 5634 14401 5634 14402 7978 14402 7977 14402 5627 14403 7979 14403 5629 14403 5629 14404 7979 14404 7978 14404 5626 14405 7980 14405 5627 14405 5627 14406 7980 14406 7979 14406 5649 14407 7981 14407 7982 14407 5649 14408 7982 14408 5650 14408 5650 14409 7982 14409 7983 14409 5650 14410 7983 14410 5631 14410 5631 14411 7983 14411 7984 14411 5631 14412 7984 14412 5630 14412 5630 14413 7984 14413 7985 14413 5630 14414 7985 14414 5628 14414 5628 14415 7985 14415 7980 14415 5628 14416 7980 14416 5626 14416 5648 14417 7986 14417 5649 14417 5649 14418 7986 14418 7981 14418 5667 14419 7987 14419 5648 14419 5648 14420 7987 14420 7986 14420 5640 14421 7988 14421 7989 14421 5640 14422 7989 14422 5641 14422 5641 14423 7989 14423 7990 14423 5641 14424 7990 14424 5654 14424 5654 14425 7990 14425 7991 14425 5654 14426 7991 14426 5655 14426 5655 14427 7991 14427 7992 14427 5655 14428 7992 14428 5656 14428 5656 14429 7992 14429 7993 14429 5656 14430 7993 14430 5647 14430 5647 14431 7993 14431 7994 14431 5647 14432 7994 14432 5636 14432 5636 14433 7994 14433 7995 14433 5636 14434 7995 14434 5637 14434 5637 14435 7995 14435 7996 14435 5637 14436 7996 14436 5662 14436 5662 14437 7996 14437 7997 14437 5662 14438 7997 14438 5663 14438 5663 14439 7997 14439 7998 14439 5663 14440 7998 14440 5665 14440 5665 14441 7998 14441 7987 14441 5665 14442 7987 14442 5667 14442 5639 14443 7999 14443 5640 14443 5640 14444 7999 14444 7988 14444 5638 14445 8000 14445 5639 14445 5639 14446 8000 14446 7999 14446 5658 14447 8001 14447 5638 14447 5638 14448 8001 14448 8000 14448 5666 14449 8002 14449 8003 14449 5666 14450 8003 14450 5664 14450 5664 14451 8003 14451 8004 14451 5664 14452 8004 14452 5659 14452 5659 14453 8004 14453 8005 14453 5659 14454 8005 14454 5660 14454 5660 14455 8005 14455 8006 14455 5660 14456 8006 14456 5661 14456 5661 14457 8006 14457 8007 14457 5661 14458 8007 14458 5642 14458 5642 14459 8007 14459 8008 14459 5642 14460 8008 14460 5643 14460 5643 14461 8008 14461 8009 14461 5643 14462 8009 14462 5657 14462 5657 14463 8009 14463 8001 14463 5657 14464 8001 14464 5658 14464 5653 14465 8010 14465 5666 14465 5666 14466 8010 14466 8002 14466 5652 14467 7975 14467 5653 14467 5653 14468 7975 14468 8010 14468 5679 14469 8011 14469 8012 14469 5679 14470 8012 14470 5680 14470 5680 14471 8012 14471 8013 14471 5680 14472 8013 14472 5681 14472 8013 14473 8014 14473 5681 14473 5681 14474 8014 14474 8015 14474 5681 14475 8015 14475 5682 14475 5682 14476 8015 14476 8016 14476 5682 14477 8016 14477 5683 14477 5683 14478 8016 14478 8017 14478 5683 14479 8017 14479 5684 14479 5684 14480 8017 14480 8018 14480 5684 14481 8018 14481 5685 14481 5685 14482 8018 14482 8019 14482 5685 14483 8019 14483 5686 14483 5686 14484 8019 14484 8020 14484 5686 14485 8020 14485 5687 14485 5687 14486 8020 14486 8021 14486 5687 14487 8021 14487 5688 14487 5688 14488 8021 14488 8022 14488 5688 14489 8022 14489 5689 14489 8011 14490 5679 14490 5678 14490 5669 14491 8023 14491 8024 14491 5669 14492 8024 14492 5670 14492 5670 14493 8024 14493 8025 14493 5670 14494 8025 14494 5671 14494 5671 14495 8025 14495 8026 14495 5671 14496 8026 14496 5672 14496 5672 14497 8026 14497 8027 14497 5672 14498 8027 14498 5673 14498 5673 14499 8027 14499 8028 14499 5673 14500 8028 14500 5674 14500 5674 14501 8028 14501 8029 14501 5674 14502 8029 14502 5675 14502 5675 14503 8029 14503 8030 14503 5675 14504 8030 14504 5676 14504 5676 14505 8030 14505 8031 14505 5676 14506 8031 14506 5677 14506 5677 14507 8031 14507 8032 14507 5677 14508 8032 14508 5678 14508 5678 14509 8032 14509 8033 14509 5678 14510 8033 14510 8011 14510 5701 14511 5700 14511 8034 14511 8034 14512 5700 14512 8035 14512 8034 14513 8036 14513 5701 14513 5701 14514 8036 14514 8037 14514 5701 14515 8037 14515 5702 14515 5702 14516 8037 14516 8038 14516 5702 14517 8038 14517 5703 14517 5703 14518 8038 14518 8039 14518 5703 14519 8039 14519 5704 14519 5704 14520 8039 14520 8040 14520 5704 14521 8040 14521 5705 14521 5705 14522 8040 14522 8041 14522 5705 14523 8041 14523 5706 14523 5706 14524 8041 14524 8042 14524 5706 14525 8042 14525 5707 14525 5707 14526 8042 14526 8043 14526 5707 14527 8043 14527 5708 14527 5708 14528 8043 14528 8044 14528 5708 14529 8044 14529 5668 14529 5668 14530 8044 14530 8023 14530 5668 14531 8023 14531 5669 14531 8035 14532 5700 14532 5699 14532 5690 14533 8045 14533 8046 14533 5690 14534 8046 14534 5691 14534 5691 14535 8046 14535 8047 14535 5691 14536 8047 14536 5692 14536 5692 14537 8047 14537 8048 14537 5692 14538 8048 14538 5693 14538 5693 14539 8048 14539 8049 14539 5693 14540 8049 14540 5694 14540 5694 14541 8049 14541 8050 14541 5694 14542 8050 14542 5695 14542 5695 14543 8050 14543 8051 14543 5695 14544 8051 14544 5696 14544 5696 14545 8051 14545 8052 14545 5696 14546 8052 14546 5697 14546 5697 14547 8052 14547 8053 14547 5697 14548 8053 14548 5698 14548 5698 14549 8053 14549 8054 14549 5698 14550 8054 14550 5699 14550 5699 14551 8054 14551 8055 14551 5699 14552 8055 14552 8035 14552 5689 14553 8022 14553 5690 14553 5690 14554 8022 14554 8045 14554 5753 14555 8056 14555 8057 14555 5753 14556 8057 14556 5754 14556 5754 14557 8057 14557 8058 14557 5754 14558 8058 14558 5755 14558 5755 14559 8058 14559 8059 14559 5755 14560 8059 14560 5761 14560 5761 14561 8059 14561 8060 14561 5761 14562 8060 14562 5762 14562 5762 14563 8060 14563 8061 14563 5762 14564 8061 14564 5763 14564 5763 14565 8061 14565 8062 14565 5763 14566 8062 14566 5764 14566 5764 14567 8062 14567 8063 14567 5764 14568 8063 14568 5728 14568 5728 14569 8063 14569 8064 14569 5728 14570 8064 14570 5727 14570 5745 14571 8065 14571 8066 14571 5745 14572 8066 14572 5729 14572 5729 14573 8066 14573 8067 14573 5729 14574 8067 14574 5765 14574 5765 14575 8067 14575 8068 14575 5765 14576 8068 14576 5766 14576 5766 14577 8068 14577 8056 14577 5766 14578 8056 14578 5753 14578 5782 14579 8069 14579 8070 14579 5782 14580 8070 14580 5781 14580 5781 14581 8070 14581 8071 14581 5781 14582 8071 14582 5780 14582 5780 14583 8071 14583 8065 14583 5780 14584 8065 14584 5745 14584 8069 14585 5782 14585 5730 14585 5732 14586 8072 14586 8073 14586 5732 14587 8073 14587 5730 14587 5730 14588 8073 14588 8074 14588 5730 14589 8074 14589 8069 14589 5734 14590 8075 14590 5732 14590 5732 14591 8075 14591 8072 14591 5736 14592 8076 14592 8077 14592 5736 14593 8077 14593 5735 14593 5735 14594 8077 14594 8078 14594 5735 14595 8078 14595 5777 14595 5777 14596 8078 14596 8079 14596 5777 14597 8079 14597 5778 14597 5778 14598 8079 14598 8080 14598 5778 14599 8080 14599 5779 14599 5779 14600 8080 14600 8081 14600 5779 14601 8081 14601 5756 14601 5756 14602 8081 14602 8082 14602 5756 14603 8082 14603 5757 14603 5757 14604 8082 14604 8083 14604 5757 14605 8083 14605 5758 14605 5758 14606 8083 14606 8084 14606 5758 14607 8084 14607 5731 14607 5731 14608 8084 14608 8085 14608 5731 14609 8085 14609 5733 14609 5733 14610 8085 14610 8075 14610 5733 14611 8075 14611 5734 14611 5742 14612 8086 14612 5736 14612 5736 14613 8086 14613 8076 14613 5710 14614 8087 14614 8088 14614 5710 14615 8088 14615 5712 14615 5712 14616 8088 14616 8089 14616 5712 14617 8089 14617 5713 14617 5713 14618 8089 14618 8090 14618 5713 14619 8090 14619 5718 14619 5718 14620 8090 14620 8091 14620 5718 14621 8091 14621 5719 14621 5719 14622 8091 14622 8092 14622 5719 14623 8092 14623 5720 14623 5720 14624 8092 14624 8093 14624 5720 14625 8093 14625 5744 14625 5744 14626 8093 14626 8094 14626 5744 14627 8094 14627 5743 14627 5743 14628 8094 14628 8086 14628 5743 14629 8086 14629 5742 14629 5709 14630 8095 14630 5710 14630 5710 14631 8095 14631 8087 14631 8095 14632 5709 14632 5711 14632 5776 14633 8096 14633 8097 14633 5776 14634 8097 14634 5711 14634 5711 14635 8097 14635 8098 14635 5711 14636 8098 14636 8095 14636 8096 14637 5776 14637 5775 14637 5759 14638 8099 14638 8100 14638 5759 14639 8100 14639 5775 14639 5775 14640 8100 14640 8101 14640 5775 14641 8101 14641 8096 14641 5724 14642 8102 14642 8103 14642 5724 14643 8103 14643 5723 14643 5723 14644 8103 14644 8104 14644 5723 14645 8104 14645 5760 14645 5760 14646 8104 14646 8099 14646 5760 14647 8099 14647 5759 14647 5749 14648 8105 14648 8106 14648 5749 14649 8106 14649 5750 14649 5750 14650 8106 14650 8107 14650 5750 14651 8107 14651 5751 14651 5751 14652 8107 14652 8108 14652 5751 14653 8108 14653 5752 14653 5752 14654 8108 14654 8109 14654 5752 14655 8109 14655 5714 14655 5714 14656 8109 14656 8110 14656 5714 14657 8110 14657 5715 14657 5715 14658 8110 14658 8111 14658 5715 14659 8111 14659 5716 14659 5716 14660 8111 14660 8112 14660 5716 14661 8112 14661 5726 14661 5726 14662 8112 14662 8113 14662 5726 14663 8113 14663 5725 14663 5725 14664 8113 14664 8102 14664 5725 14665 8102 14665 5724 14665 5722 14666 8114 14666 8115 14666 5722 14667 8115 14667 5769 14667 5769 14668 8115 14668 8116 14668 5769 14669 8116 14669 5768 14669 5768 14670 8116 14670 8117 14670 5768 14671 8117 14671 5767 14671 5767 14672 8117 14672 8118 14672 5767 14673 8118 14673 5740 14673 5740 14674 8118 14674 8119 14674 5740 14675 8119 14675 5741 14675 5741 14676 8119 14676 8120 14676 5741 14677 8120 14677 5746 14677 5746 14678 8120 14678 8121 14678 5746 14679 8121 14679 5747 14679 5747 14680 8121 14680 8122 14680 5747 14681 8122 14681 5748 14681 5748 14682 8122 14682 8105 14682 5748 14683 8105 14683 5749 14683 5721 14684 8123 14684 5722 14684 5722 14685 8123 14685 8114 14685 5717 14686 8124 14686 8125 14686 5717 14687 8125 14687 5737 14687 5737 14688 8125 14688 8126 14688 5737 14689 8126 14689 5738 14689 5738 14690 8126 14690 8127 14690 5738 14691 8127 14691 5739 14691 5739 14692 8127 14692 8128 14692 5739 14693 8128 14693 5770 14693 5770 14694 8128 14694 8129 14694 5770 14695 8129 14695 5771 14695 5771 14696 8129 14696 8130 14696 5771 14697 8130 14697 5772 14697 5772 14698 8130 14698 8131 14698 5772 14699 8131 14699 5773 14699 5773 14700 8131 14700 8132 14700 5773 14701 8132 14701 5774 14701 5774 14702 8132 14702 8123 14702 5774 14703 8123 14703 5721 14703 5727 14704 8064 14704 5717 14704 5717 14705 8064 14705 8124 14705 5794 14706 8133 14706 8134 14706 5794 14707 8134 14707 5795 14707 5795 14708 8134 14708 8135 14708 5795 14709 8135 14709 5796 14709 8135 14710 8136 14710 5796 14710 5796 14711 8136 14711 8137 14711 5796 14712 8137 14712 5797 14712 5797 14713 8137 14713 8138 14713 5797 14714 8138 14714 5798 14714 5798 14715 8138 14715 8139 14715 5798 14716 8139 14716 5799 14716 5799 14717 8139 14717 8140 14717 5799 14718 8140 14718 5800 14718 5800 14719 8140 14719 8141 14719 5800 14720 8141 14720 5801 14720 5801 14721 8141 14721 8142 14721 5801 14722 8142 14722 5802 14722 5802 14723 8142 14723 8143 14723 5802 14724 8143 14724 5803 14724 5803 14725 8143 14725 8144 14725 5803 14726 8144 14726 5804 14726 8133 14727 5794 14727 5793 14727 5784 14728 8145 14728 8146 14728 5784 14729 8146 14729 5785 14729 5785 14730 8146 14730 8147 14730 5785 14731 8147 14731 5786 14731 5786 14732 8147 14732 8148 14732 5786 14733 8148 14733 5787 14733 5787 14734 8148 14734 8149 14734 5787 14735 8149 14735 5788 14735 5788 14736 8149 14736 8150 14736 5788 14737 8150 14737 5789 14737 5789 14738 8150 14738 8151 14738 5789 14739 8151 14739 5790 14739 5790 14740 8151 14740 8152 14740 5790 14741 8152 14741 5791 14741 5791 14742 8152 14742 8153 14742 5791 14743 8153 14743 5792 14743 5792 14744 8153 14744 8154 14744 5792 14745 8154 14745 5793 14745 5793 14746 8154 14746 8155 14746 5793 14747 8155 14747 8133 14747 5816 14748 5815 14748 8156 14748 8156 14749 5815 14749 8157 14749 8156 14750 8158 14750 5816 14750 5816 14751 8158 14751 8159 14751 5816 14752 8159 14752 5817 14752 5817 14753 8159 14753 8160 14753 5817 14754 8160 14754 5818 14754 5818 14755 8160 14755 8161 14755 5818 14756 8161 14756 5819 14756 5819 14757 8161 14757 8162 14757 5819 14758 8162 14758 5820 14758 5820 14759 8162 14759 8163 14759 5820 14760 8163 14760 5821 14760 5821 14761 8163 14761 8164 14761 5821 14762 8164 14762 5822 14762 5822 14763 8164 14763 8165 14763 5822 14764 8165 14764 5823 14764 5823 14765 8165 14765 8166 14765 5823 14766 8166 14766 5783 14766 5783 14767 8166 14767 8145 14767 5783 14768 8145 14768 5784 14768 8157 14769 5815 14769 5814 14769 5805 14770 8167 14770 8168 14770 5805 14771 8168 14771 5806 14771 5806 14772 8168 14772 8169 14772 5806 14773 8169 14773 5807 14773 5807 14774 8169 14774 8170 14774 5807 14775 8170 14775 5808 14775 5808 14776 8170 14776 8171 14776 5808 14777 8171 14777 5809 14777 5809 14778 8171 14778 8172 14778 5809 14779 8172 14779 5810 14779 5810 14780 8172 14780 8173 14780 5810 14781 8173 14781 5811 14781 5811 14782 8173 14782 8174 14782 5811 14783 8174 14783 5812 14783 5812 14784 8174 14784 8175 14784 5812 14785 8175 14785 5813 14785 5813 14786 8175 14786 8176 14786 5813 14787 8176 14787 5814 14787 5814 14788 8176 14788 8177 14788 5814 14789 8177 14789 8157 14789 5804 14790 8144 14790 5805 14790 5805 14791 8144 14791 8167 14791 5833 14792 8178 14792 8179 14792 5833 14793 8179 14793 5834 14793 5834 14794 8179 14794 8180 14794 5834 14795 8180 14795 5868 14795 5868 14796 8180 14796 8181 14796 5868 14797 8181 14797 5847 14797 5847 14798 8181 14798 8182 14798 5847 14799 8182 14799 5839 14799 5839 14800 8182 14800 8183 14800 5839 14801 8183 14801 5840 14801 5840 14802 8183 14802 8184 14802 5840 14803 8184 14803 5888 14803 5888 14804 8184 14804 8185 14804 5888 14805 8185 14805 5889 14805 5889 14806 8185 14806 8186 14806 5889 14807 8186 14807 5890 14807 5890 14808 8186 14808 8187 14808 5890 14809 8187 14809 5891 14809 5832 14810 8188 14810 5833 14810 5833 14811 8188 14811 8178 14811 5869 14812 8189 14812 5841 14812 5841 14813 8189 14813 8190 14813 8190 14814 8191 14814 5841 14814 5841 14815 8191 14815 8188 14815 5841 14816 8188 14816 5832 14816 5877 14817 8192 14817 8193 14817 5877 14818 8193 14818 5878 14818 5878 14819 8193 14819 8189 14819 5878 14820 8189 14820 5869 14820 5848 14821 8194 14821 8195 14821 5848 14822 8195 14822 5849 14822 5849 14823 8195 14823 8196 14823 5849 14824 8196 14824 5876 14824 5876 14825 8196 14825 8192 14825 5876 14826 8192 14826 5877 14826 5855 14827 8197 14827 8198 14827 5855 14828 8198 14828 5854 14828 5854 14829 8198 14829 8199 14829 5854 14830 8199 14830 5853 14830 5853 14831 8199 14831 8200 14831 5853 14832 8200 14832 5852 14832 5852 14833 8200 14833 8201 14833 5852 14834 8201 14834 5851 14834 5851 14835 8201 14835 8202 14835 5851 14836 8202 14836 5850 14836 5850 14837 8202 14837 8203 14837 5850 14838 8203 14838 5842 14838 5842 14839 8203 14839 8204 14839 5842 14840 8204 14840 5843 14840 5843 14841 8204 14841 8194 14841 5843 14842 8194 14842 5848 14842 5870 14843 8205 14843 8206 14843 5870 14844 8206 14844 5871 14844 5871 14845 8206 14845 8207 14845 5871 14846 8207 14846 5872 14846 5872 14847 8207 14847 8208 14847 5872 14848 8208 14848 5873 14848 5873 14849 8208 14849 8209 14849 5873 14850 8209 14850 5874 14850 5874 14851 8209 14851 8210 14851 5874 14852 8210 14852 5875 14852 5875 14853 8210 14853 8197 14853 5875 14854 8197 14854 5855 14854 5865 14855 8211 14855 8212 14855 5865 14856 8212 14856 5863 14856 5863 14857 8212 14857 8213 14857 5863 14858 8213 14858 5864 14858 5864 14859 8213 14859 8205 14859 5864 14860 8205 14860 5870 14860 5866 14861 8214 14861 5865 14861 5865 14862 8214 14862 8211 14862 5885 14863 8215 14863 8216 14863 5885 14864 8216 14864 5893 14864 5893 14865 8216 14865 8217 14865 5893 14866 8217 14866 5867 14866 5867 14867 8217 14867 8214 14867 5867 14868 8214 14868 5866 14868 5860 14869 8218 14869 8219 14869 5860 14870 8219 14870 5862 14870 5862 14871 8219 14871 8220 14871 5862 14872 8220 14872 5882 14872 5882 14873 8220 14873 8221 14873 5882 14874 8221 14874 5883 14874 5883 14875 8221 14875 8215 14875 5883 14876 8215 14876 5885 14876 5859 14877 8222 14877 5860 14877 5860 14878 8222 14878 8218 14878 5861 14879 8223 14879 5859 14879 5859 14880 8223 14880 8222 14880 5887 14881 8224 14881 8225 14881 5887 14882 8225 14882 5886 14882 5886 14883 8225 14883 8226 14883 5886 14884 8226 14884 5884 14884 5884 14885 8226 14885 8223 14885 5884 14886 8223 14886 5861 14886 5838 14887 8227 14887 8228 14887 5838 14888 8228 14888 5894 14888 5894 14889 8228 14889 8229 14889 5894 14890 8229 14890 5895 14890 5895 14891 8229 14891 8224 14891 5895 14892 8224 14892 5887 14892 5858 14893 8230 14893 5838 14893 5838 14894 8230 14894 8227 14894 5892 14895 8231 14895 5858 14895 5858 14896 8231 14896 8230 14896 5825 14897 8232 14897 8233 14897 5825 14898 8233 14898 5826 14898 5826 14899 8233 14899 8234 14899 5826 14900 8234 14900 5835 14900 5835 14901 8234 14901 8235 14901 5835 14902 8235 14902 5827 14902 5827 14903 8235 14903 8236 14903 5827 14904 8236 14904 5828 14904 5828 14905 8236 14905 8237 14905 5828 14906 8237 14906 5856 14906 5856 14907 8237 14907 8238 14907 5856 14908 8238 14908 5846 14908 5846 14909 8238 14909 8239 14909 5846 14910 8239 14910 5880 14910 5880 14911 8239 14911 8231 14911 5880 14912 8231 14912 5892 14912 5824 14913 8240 14913 5825 14913 5825 14914 8240 14914 8232 14914 5829 14915 8241 14915 5824 14915 5824 14916 8241 14916 8240 14916 5837 14917 8242 14917 5829 14917 5829 14918 8242 14918 8241 14918 5881 14919 8243 14919 8244 14919 5881 14920 8244 14920 5879 14920 5879 14921 8244 14921 8245 14921 5879 14922 8245 14922 5844 14922 5844 14923 8245 14923 8246 14923 5844 14924 8246 14924 5845 14924 5845 14925 8246 14925 8247 14925 5845 14926 8247 14926 5857 14926 5857 14927 8247 14927 8248 14927 5857 14928 8248 14928 5830 14928 5830 14929 8248 14929 8249 14929 5830 14930 8249 14930 5831 14930 5831 14931 8249 14931 8250 14931 5831 14932 8250 14932 5836 14932 5836 14933 8250 14933 8242 14933 5836 14934 8242 14934 5837 14934 5891 14935 8187 14935 5881 14935 5881 14936 8187 14936 8243 14936 8251 14937 8252 14937 8253 14937 8254 14938 8255 14938 8251 14938 8256 14939 8257 14939 8258 14939 8259 14940 8260 14940 8261 14940 8262 14941 8263 14941 8264 14941 5898 14942 5899 14942 8265 14942 5900 14943 5901 14943 8266 14943 5923 14944 5906 14944 5907 14944 5963 14945 5965 14945 8267 14945 5964 14946 5960 14946 8268 14946 8269 14947 8270 14947 8271 14947 8271 14948 8270 14948 8272 14948 8268 14949 8273 14949 8274 14949 8273 14950 8268 14950 8275 14950 8275 14951 8268 14951 5960 14951 8275 14952 5960 14952 5961 14952 8276 14953 8277 14953 5909 14953 5913 14954 5912 14954 8278 14954 8278 14955 5912 14955 5911 14955 8278 14956 5911 14956 8277 14956 8277 14957 5911 14957 5910 14957 8277 14958 5910 14958 5909 14958 5913 14959 8278 14959 5914 14959 5914 14960 8278 14960 8279 14960 5914 14961 8279 14961 5915 14961 8280 14962 5917 14962 8279 14962 8279 14963 5917 14963 5916 14963 8279 14964 5916 14964 5915 14964 8281 14965 5919 14965 8280 14965 8280 14966 5919 14966 5918 14966 8280 14967 5918 14967 5917 14967 5923 14968 5922 14968 8282 14968 8282 14969 5922 14969 5921 14969 8282 14970 5921 14970 8281 14970 8281 14971 5921 14971 5920 14971 8281 14972 5920 14972 5919 14972 5906 14973 5923 14973 5905 14973 5905 14974 5923 14974 8282 14974 5905 14975 8282 14975 5904 14975 5901 14976 5902 14976 8283 14976 8283 14977 5902 14977 5903 14977 8283 14978 5903 14978 5904 14978 5900 14979 8266 14979 5899 14979 8284 14980 5897 14980 5898 14980 5896 14981 5897 14981 8285 14981 8285 14982 5897 14982 8284 14982 8285 14983 8284 14983 8286 14983 8286 14984 8284 14984 8287 14984 8286 14985 8287 14985 8288 14985 8288 14986 8287 14986 8289 14986 8289 14987 8287 14987 8290 14987 8289 14988 8290 14988 8291 14988 8291 14989 8290 14989 8292 14989 8292 14990 8290 14990 8293 14990 8292 14991 8293 14991 8294 14991 8294 14992 8293 14992 8295 14992 8295 14993 8293 14993 8296 14993 8295 14994 8296 14994 8297 14994 8297 14995 8296 14995 8298 14995 8298 14996 8296 14996 8299 14996 8298 14997 8299 14997 8300 14997 8300 14998 8299 14998 8301 14998 8301 14999 8299 14999 8302 14999 8301 15000 8302 15000 8303 15000 8303 15001 8302 15001 8304 15001 8304 15002 8302 15002 8305 15002 8304 15003 8305 15003 8306 15003 8307 15004 8308 15004 8305 15004 8305 15005 8308 15005 8309 15005 8305 15006 8309 15006 8306 15006 8310 15007 8308 15007 8311 15007 8311 15008 8308 15008 8307 15008 8311 15009 8307 15009 8312 15009 8255 15010 8313 15010 8251 15010 8251 15011 8313 15011 8314 15011 8251 15012 8314 15012 8252 15012 8252 15013 8314 15013 8315 15013 8252 15014 8315 15014 8316 15014 5965 15015 5964 15015 8267 15015 8267 15016 5964 15016 8268 15016 8267 15017 8268 15017 8270 15017 8270 15018 8268 15018 8274 15018 8270 15019 8274 15019 8272 15019 8269 15020 8254 15020 8270 15020 8270 15021 8254 15021 8251 15021 8270 15022 8251 15022 8267 15022 8267 15023 8251 15023 8253 15023 8267 15024 8253 15024 5963 15024 5963 15025 8253 15025 8276 15025 5963 15026 8276 15026 5908 15026 5908 15027 8276 15027 5909 15027 5904 15028 8282 15028 8283 15028 8283 15029 8282 15029 8281 15029 8283 15030 8281 15030 8317 15030 8317 15031 8281 15031 8280 15031 8317 15032 8280 15032 8318 15032 8318 15033 8280 15033 8279 15033 8318 15034 8279 15034 8319 15034 8319 15035 8279 15035 8278 15035 8319 15036 8278 15036 8320 15036 8320 15037 8278 15037 8277 15037 8320 15038 8277 15038 8321 15038 8321 15039 8277 15039 8276 15039 8321 15040 8276 15040 8322 15040 8322 15041 8276 15041 8253 15041 8322 15042 8253 15042 8323 15042 8323 15043 8253 15043 8252 15043 8323 15044 8252 15044 8258 15044 8258 15045 8252 15045 8316 15045 8258 15046 8316 15046 8256 15046 5901 15047 8283 15047 8266 15047 8266 15048 8283 15048 8317 15048 8266 15049 8317 15049 8324 15049 8324 15050 8317 15050 8318 15050 8324 15051 8318 15051 8325 15051 8325 15052 8318 15052 8319 15052 8325 15053 8319 15053 8326 15053 8326 15054 8319 15054 8320 15054 8326 15055 8320 15055 8327 15055 8327 15056 8320 15056 8321 15056 8327 15057 8321 15057 8328 15057 8328 15058 8321 15058 8322 15058 8328 15059 8322 15059 8329 15059 8329 15060 8322 15060 8323 15060 8329 15061 8323 15061 8330 15061 8330 15062 8323 15062 8258 15062 8330 15063 8258 15063 8261 15063 8261 15064 8258 15064 8257 15064 8261 15065 8257 15065 8259 15065 5899 15066 8266 15066 8265 15066 8265 15067 8266 15067 8324 15067 8265 15068 8324 15068 8331 15068 8331 15069 8324 15069 8325 15069 8331 15070 8325 15070 8332 15070 8332 15071 8325 15071 8326 15071 8332 15072 8326 15072 8333 15072 8333 15073 8326 15073 8327 15073 8333 15074 8327 15074 8334 15074 8334 15075 8327 15075 8328 15075 8334 15076 8328 15076 8335 15076 8335 15077 8328 15077 8329 15077 8335 15078 8329 15078 8336 15078 8336 15079 8329 15079 8330 15079 8336 15080 8330 15080 8337 15080 8337 15081 8330 15081 8261 15081 8337 15082 8261 15082 8264 15082 8264 15083 8261 15083 8260 15083 8264 15084 8260 15084 8262 15084 5898 15085 8265 15085 8284 15085 8284 15086 8265 15086 8331 15086 8284 15087 8331 15087 8287 15087 8287 15088 8331 15088 8332 15088 8287 15089 8332 15089 8290 15089 8290 15090 8332 15090 8333 15090 8290 15091 8333 15091 8293 15091 8293 15092 8333 15092 8334 15092 8293 15093 8334 15093 8296 15093 8296 15094 8334 15094 8335 15094 8296 15095 8335 15095 8299 15095 8299 15096 8335 15096 8336 15096 8299 15097 8336 15097 8302 15097 8302 15098 8336 15098 8337 15098 8302 15099 8337 15099 8305 15099 8305 15100 8337 15100 8264 15100 8305 15101 8264 15101 8307 15101 8307 15102 8264 15102 8263 15102 8307 15103 8263 15103 8312 15103 8338 15104 8339 15104 8340 15104 8341 15105 8342 15105 8272 15105 8342 15106 8343 15106 8272 15106 8272 15107 8343 15107 8344 15107 8272 15108 8344 15108 8271 15108 8340 15109 8341 15109 8338 15109 8338 15110 8341 15110 8272 15110 8338 15111 8272 15111 8345 15111 8345 15112 8272 15112 8274 15112 8345 15113 8274 15113 8273 15113 5961 15114 5962 15114 8275 15114 8275 15115 5962 15115 8346 15115 8275 15116 8346 15116 8273 15116 8273 15117 8346 15117 8347 15117 8273 15118 8347 15118 8345 15118 5930 15119 8348 15119 5931 15119 5931 15120 8348 15120 8349 15120 5931 15121 8349 15121 5932 15121 5932 15122 8349 15122 8350 15122 5932 15123 8350 15123 5933 15123 8350 15124 8351 15124 5933 15124 5933 15125 8351 15125 8352 15125 5933 15126 8352 15126 5934 15126 5934 15127 8352 15127 8353 15127 5934 15128 8353 15128 5935 15128 8353 15129 8354 15129 5935 15129 5935 15130 8354 15130 8355 15130 5935 15131 8355 15131 5936 15131 5936 15132 8355 15132 8356 15132 5936 15133 8356 15133 5937 15133 5937 15134 8356 15134 8357 15134 5937 15135 8357 15135 5938 15135 5938 15136 8357 15136 8358 15136 5938 15137 8358 15137 5948 15137 5948 15138 8358 15138 8359 15138 5948 15139 8359 15139 5946 15139 5946 15140 8359 15140 8360 15140 5946 15141 8360 15141 5947 15141 5947 15142 8360 15142 8361 15142 5947 15143 8361 15143 5949 15143 5949 15144 8361 15144 8362 15144 5949 15145 8362 15145 5950 15145 5950 15146 8362 15146 8363 15146 5950 15147 8363 15147 5929 15147 5929 15148 8363 15148 8364 15148 5929 15149 8364 15149 5924 15149 5924 15150 8364 15150 8365 15150 5924 15151 8365 15151 5925 15151 5925 15152 8365 15152 8366 15152 5925 15153 8366 15153 5939 15153 5939 15154 8366 15154 8367 15154 5939 15155 8367 15155 5940 15155 5940 15156 8367 15156 8368 15156 5940 15157 8368 15157 5941 15157 5941 15158 8368 15158 8369 15158 5941 15159 8369 15159 5942 15159 8369 15160 8370 15160 5942 15160 5942 15161 8370 15161 8371 15161 5942 15162 8371 15162 5943 15162 5943 15163 8371 15163 8372 15163 5943 15164 8372 15164 5944 15164 8372 15165 8373 15165 5944 15165 5944 15166 8373 15166 8374 15166 5944 15167 8374 15167 5951 15167 5951 15168 8374 15168 8375 15168 5951 15169 8375 15169 5952 15169 5952 15170 8375 15170 8376 15170 5952 15171 8376 15171 5953 15171 8376 15172 8377 15172 5953 15172 5953 15173 8377 15173 8378 15173 5953 15174 8378 15174 5954 15174 5954 15175 8378 15175 8379 15175 5954 15176 8379 15176 5955 15176 5955 15177 8379 15177 8380 15177 5955 15178 8380 15178 5956 15178 5956 15179 8380 15179 8381 15179 5956 15180 8381 15180 5957 15180 5957 15181 8381 15181 8382 15181 5957 15182 8382 15182 5958 15182 5958 15183 8382 15183 8383 15183 5958 15184 8383 15184 5959 15184 5959 15185 8383 15185 8384 15185 5959 15186 8384 15186 5926 15186 5926 15187 8384 15187 8385 15187 5926 15188 8385 15188 5945 15188 5945 15189 8385 15189 8386 15189 5945 15190 8386 15190 5927 15190 5927 15191 8386 15191 8387 15191 5927 15192 8387 15192 5928 15192 5928 15193 8387 15193 8388 15193 5928 15194 8388 15194 5930 15194 5930 15195 8388 15195 8389 15195 5930 15196 8389 15196 8348 15196 8390 15197 8391 15197 8392 15197 8392 15198 8391 15198 8393 15198 8394 15199 8339 15199 8338 15199 5996 15200 5971 15200 5973 15200 5990 15201 5989 15201 8395 15201 8396 15202 8397 15202 8398 15202 8398 15203 8397 15203 8399 15203 8398 15204 8399 15204 8400 15204 8401 15205 8402 15205 8403 15205 8403 15206 8402 15206 8404 15206 8403 15207 8404 15207 8405 15207 8405 15208 8404 15208 8406 15208 8406 15209 8404 15209 8407 15209 8406 15210 8407 15210 8408 15210 8408 15211 8407 15211 8409 15211 8409 15212 8407 15212 8410 15212 8409 15213 8410 15213 8411 15213 8411 15214 8410 15214 8412 15214 8412 15215 8410 15215 8413 15215 8412 15216 8413 15216 8414 15216 8414 15217 8413 15217 8415 15217 8415 15218 8413 15218 8416 15218 8415 15219 8416 15219 8417 15219 8417 15220 8416 15220 8418 15220 8418 15221 8416 15221 8419 15221 8418 15222 8419 15222 8420 15222 8420 15223 8419 15223 8421 15223 8421 15224 8419 15224 8422 15224 8421 15225 8422 15225 8423 15225 5986 15226 8423 15226 5987 15226 5987 15227 8423 15227 8422 15227 5987 15228 8422 15228 5988 15228 5988 15229 8422 15229 5989 15229 5992 15230 5991 15230 8424 15230 8424 15231 5991 15231 5990 15231 5994 15232 5993 15232 8425 15232 8425 15233 5993 15233 5992 15233 8426 15234 5995 15234 5994 15234 5996 15235 5995 15235 5971 15235 5971 15236 5995 15236 8426 15236 5971 15237 8426 15237 5972 15237 5972 15238 8426 15238 5974 15238 5974 15239 8426 15239 5975 15239 5975 15240 8426 15240 8427 15240 5975 15241 8427 15241 5976 15241 5976 15242 8427 15242 5981 15242 5981 15243 8427 15243 8428 15243 5981 15244 8428 15244 5982 15244 5982 15245 8428 15245 5980 15245 5980 15246 8428 15246 8429 15246 5980 15247 8429 15247 5979 15247 5979 15248 8429 15248 5983 15248 5983 15249 8429 15249 8430 15249 5983 15250 8430 15250 5984 15250 5984 15251 8430 15251 5985 15251 5985 15252 8430 15252 8431 15252 5985 15253 8431 15253 5977 15253 5977 15254 8431 15254 5978 15254 5978 15255 8431 15255 8432 15255 5978 15256 8432 15256 5968 15256 8433 15257 5970 15257 5969 15257 5968 15258 8432 15258 5969 15258 5969 15259 8432 15259 8434 15259 5969 15260 8434 15260 8433 15260 8435 15261 5966 15261 8433 15261 8433 15262 5966 15262 5967 15262 8433 15263 5967 15263 5970 15263 5962 15264 5966 15264 8346 15264 8346 15265 5966 15265 8435 15265 8346 15266 8435 15266 8347 15266 8436 15267 8394 15267 8437 15267 8437 15268 8394 15268 8338 15268 8437 15269 8338 15269 8345 15269 8438 15270 8439 15270 8440 15270 8440 15271 8441 15271 8438 15271 8438 15272 8441 15272 8442 15272 8438 15273 8442 15273 8437 15273 8437 15274 8442 15274 8443 15274 8437 15275 8443 15275 8436 15275 8444 15276 8445 15276 8446 15276 8446 15277 8447 15277 8444 15277 8444 15278 8447 15278 8448 15278 8444 15279 8448 15279 8439 15279 8439 15280 8448 15280 8449 15280 8439 15281 8449 15281 8440 15281 8450 15282 8451 15282 8445 15282 8445 15283 8451 15283 8452 15283 8445 15284 8452 15284 8446 15284 8400 15285 8453 15285 8398 15285 8398 15286 8453 15286 8454 15286 8398 15287 8454 15287 8450 15287 8450 15288 8454 15288 8455 15288 8450 15289 8455 15289 8451 15289 5989 15290 8422 15290 8395 15290 8395 15291 8422 15291 8419 15291 8395 15292 8419 15292 8456 15292 8456 15293 8419 15293 8416 15293 8456 15294 8416 15294 8457 15294 8457 15295 8416 15295 8413 15295 8457 15296 8413 15296 8458 15296 8458 15297 8413 15297 8410 15297 8458 15298 8410 15298 8459 15298 8459 15299 8410 15299 8407 15299 8459 15300 8407 15300 8460 15300 8460 15301 8407 15301 8404 15301 8460 15302 8404 15302 8461 15302 8461 15303 8404 15303 8402 15303 8461 15304 8402 15304 8462 15304 5990 15305 8395 15305 8424 15305 8424 15306 8395 15306 8456 15306 8424 15307 8456 15307 8463 15307 8463 15308 8456 15308 8457 15308 8463 15309 8457 15309 8464 15309 8464 15310 8457 15310 8458 15310 8464 15311 8458 15311 8465 15311 8465 15312 8458 15312 8459 15312 8465 15313 8459 15313 8466 15313 8466 15314 8459 15314 8460 15314 8466 15315 8460 15315 8467 15315 8467 15316 8460 15316 8461 15316 8467 15317 8461 15317 8468 15317 8468 15318 8461 15318 8462 15318 8468 15319 8462 15319 8469 15319 5992 15320 8424 15320 8425 15320 8425 15321 8424 15321 8463 15321 8425 15322 8463 15322 8470 15322 8470 15323 8463 15323 8464 15323 8470 15324 8464 15324 8471 15324 8471 15325 8464 15325 8465 15325 8471 15326 8465 15326 8472 15326 8472 15327 8465 15327 8466 15327 8472 15328 8466 15328 8473 15328 8473 15329 8466 15329 8467 15329 8473 15330 8467 15330 8474 15330 8474 15331 8467 15331 8468 15331 8474 15332 8468 15332 8475 15332 8475 15333 8468 15333 8469 15333 8475 15334 8469 15334 8476 15334 5994 15335 8425 15335 8426 15335 8426 15336 8425 15336 8470 15336 8426 15337 8470 15337 8427 15337 8427 15338 8470 15338 8471 15338 8427 15339 8471 15339 8428 15339 8428 15340 8471 15340 8472 15340 8428 15341 8472 15341 8429 15341 8429 15342 8472 15342 8473 15342 8429 15343 8473 15343 8430 15343 8430 15344 8473 15344 8474 15344 8430 15345 8474 15345 8431 15345 8431 15346 8474 15346 8475 15346 8431 15347 8475 15347 8432 15347 8432 15348 8475 15348 8476 15348 8432 15349 8476 15349 8434 15349 8345 15350 8347 15350 8437 15350 8437 15351 8347 15351 8435 15351 8437 15352 8435 15352 8438 15352 8438 15353 8435 15353 8433 15353 8438 15354 8433 15354 8439 15354 8439 15355 8433 15355 8434 15355 8439 15356 8434 15356 8444 15356 8444 15357 8434 15357 8476 15357 8444 15358 8476 15358 8445 15358 8445 15359 8476 15359 8469 15359 8445 15360 8469 15360 8450 15360 8450 15361 8469 15361 8462 15361 8450 15362 8462 15362 8398 15362 8398 15363 8462 15363 8402 15363 8398 15364 8402 15364 8396 15364 8396 15365 8402 15365 8401 15365 5986 15366 4957 15366 8477 15366 8477 15367 4957 15367 6368 15367 8478 15368 8479 15368 8480 15368 8481 15369 8482 15369 8483 15369 8480 15370 8479 15370 8483 15370 8483 15371 8479 15371 8484 15371 8483 15372 8484 15372 8481 15372 8482 15373 8485 15373 8483 15373 8483 15374 8485 15374 8486 15374 8483 15375 8486 15375 8487 15375 8488 15376 8489 15376 8487 15376 8490 15377 8491 15377 8480 15377 8480 15378 8491 15378 8492 15378 8480 15379 8493 15379 8494 15379 8495 15380 8496 15380 8497 15380 8496 15381 8498 15381 8497 15381 8497 15382 8498 15382 8499 15382 8497 15383 8499 15383 8500 15383 8490 15384 8480 15384 8501 15384 8501 15385 8480 15385 8502 15385 8501 15386 8502 15386 8503 15386 8494 15387 8504 15387 8480 15387 8480 15388 8504 15388 8505 15388 8480 15389 8505 15389 8478 15389 8495 15390 8497 15390 8487 15390 8487 15391 8497 15391 8506 15391 8487 15392 8506 15392 8488 15392 8489 15393 8507 15393 8487 15393 8487 15394 8507 15394 8508 15394 8487 15395 8508 15395 8483 15395 8509 15396 8510 15396 8503 15396 8503 15397 8510 15397 8511 15397 8503 15398 8511 15398 8501 15398 8492 15399 8512 15399 8480 15399 8480 15400 8512 15400 8513 15400 8480 15401 8513 15401 8493 15401 8514 15402 8515 15402 8516 15402 8514 15403 8516 15403 8517 15403 8515 15404 8518 15404 8516 15404 8516 15405 8518 15405 8519 15405 8516 15406 8519 15406 8520 15406 8517 15407 8516 15407 8521 15407 8521 15408 8516 15408 8522 15408 8521 15409 8522 15409 8523 15409 8524 15410 8525 15410 8526 15410 8520 15411 8527 15411 8516 15411 8516 15412 8527 15412 8528 15412 8516 15413 8528 15413 8524 15413 8524 15414 8528 15414 8529 15414 8529 15415 8530 15415 8524 15415 8524 15416 8530 15416 8531 15416 8524 15417 8531 15417 8532 15417 8523 15418 8533 15418 8521 15418 8521 15419 8533 15419 8534 15419 8521 15420 8534 15420 8535 15420 8535 15421 8536 15421 8521 15421 8521 15422 8536 15422 8537 15422 8521 15423 8537 15423 8538 15423 8532 15424 8539 15424 8524 15424 8524 15425 8539 15425 8540 15425 8524 15426 8540 15426 8525 15426 8541 15427 8542 15427 8543 15427 8543 15428 8542 15428 8544 15428 8526 15429 8545 15429 8524 15429 8524 15430 8545 15430 8544 15430 8524 15431 8544 15431 8546 15431 8546 15432 8544 15432 8542 15432 8538 15433 8547 15433 8521 15433 8521 15434 8547 15434 8548 15434 8521 15435 8548 15435 8549 15435 6044 15436 6045 15436 8550 15436 8550 15437 8551 15437 6044 15437 6044 15438 8551 15438 8552 15438 6044 15439 8552 15439 6042 15439 8552 15440 8553 15440 6042 15440 6042 15441 8553 15441 8554 15441 6042 15442 8554 15442 6041 15442 8554 15443 8555 15443 6041 15443 6041 15444 8555 15444 8556 15444 6041 15445 8556 15445 6043 15445 6043 15446 8556 15446 8557 15446 6043 15447 8557 15447 6039 15447 8557 15448 8558 15448 6039 15448 6039 15449 8558 15449 8559 15449 6039 15450 8559 15450 6040 15450 6040 15451 8559 15451 8560 15451 8560 15452 8561 15452 6040 15452 6040 15453 8561 15453 8562 15453 6040 15454 8562 15454 6048 15454 8562 15455 8563 15455 6048 15455 6048 15456 8563 15456 8564 15456 6048 15457 8564 15457 6066 15457 6066 15458 8564 15458 8565 15458 6066 15459 8565 15459 6065 15459 8565 15460 8566 15460 6065 15460 6065 15461 8566 15461 8567 15461 6065 15462 8567 15462 6064 15462 8567 15463 8568 15463 6064 15463 6064 15464 8568 15464 8569 15464 6064 15465 8569 15465 6063 15465 6063 15466 8569 15466 8570 15466 8570 15467 8571 15467 6063 15467 6063 15468 8571 15468 8572 15468 6063 15469 8572 15469 6062 15469 6062 15470 8572 15470 8573 15470 6062 15471 8573 15471 6061 15471 6061 15472 8573 15472 8574 15472 6061 15473 8574 15473 6060 15473 8574 15474 8575 15474 6060 15474 6060 15475 8575 15475 8576 15475 6060 15476 8576 15476 6059 15476 6059 15477 8576 15477 8577 15477 6059 15478 8577 15478 6058 15478 6058 15479 8577 15479 8578 15479 8578 15480 8579 15480 6058 15480 6058 15481 8579 15481 8580 15481 6058 15482 8580 15482 6057 15482 8580 15483 8581 15483 6057 15483 6057 15484 8581 15484 8582 15484 6057 15485 8582 15485 6056 15485 6056 15486 8582 15486 8583 15486 6056 15487 8583 15487 6055 15487 6055 15488 8583 15488 8584 15488 8584 15489 8585 15489 6055 15489 6055 15490 8585 15490 8586 15490 6055 15491 8586 15491 6050 15491 6050 15492 8586 15492 8587 15492 6050 15493 8587 15493 6049 15493 6049 15494 8587 15494 8588 15494 8588 15495 8589 15495 6049 15495 6049 15496 8589 15496 8590 15496 6049 15497 8590 15497 6051 15497 8590 15498 8591 15498 6051 15498 6051 15499 8591 15499 8592 15499 6051 15500 8592 15500 6054 15500 6054 15501 8592 15501 8593 15501 6054 15502 8593 15502 6053 15502 6053 15503 8593 15503 8594 15503 8594 15504 8595 15504 6053 15504 6053 15505 8595 15505 8596 15505 6053 15506 8596 15506 6052 15506 8596 15507 8597 15507 6052 15507 6052 15508 8597 15508 8598 15508 6052 15509 8598 15509 6112 15509 6112 15510 8598 15510 8599 15510 6112 15511 8599 15511 6110 15511 6110 15512 8599 15512 8600 15512 6110 15513 8600 15513 6109 15513 8600 15514 8601 15514 6109 15514 6109 15515 8601 15515 8602 15515 6109 15516 8602 15516 6091 15516 6091 15517 8602 15517 8603 15517 6091 15518 8603 15518 6085 15518 8603 15519 8604 15519 6085 15519 6085 15520 8604 15520 8605 15520 6085 15521 8605 15521 6083 15521 8605 15522 8606 15522 6083 15522 6083 15523 8606 15523 8607 15523 6083 15524 8607 15524 6088 15524 8607 15525 8608 15525 6088 15525 6088 15526 8608 15526 8609 15526 6088 15527 8609 15527 6095 15527 8609 15528 8610 15528 6095 15528 6095 15529 8610 15529 8611 15529 6095 15530 8611 15530 6092 15530 8611 15531 8612 15531 6092 15531 6092 15532 8612 15532 8613 15532 6092 15533 8613 15533 6124 15533 8613 15534 8614 15534 6124 15534 6124 15535 8614 15535 8615 15535 6124 15536 8615 15536 6123 15536 8615 15537 8616 15537 6123 15537 6123 15538 8616 15538 8617 15538 6123 15539 8617 15539 6122 15539 8617 15540 8618 15540 6122 15540 6122 15541 8618 15541 8619 15541 6122 15542 8619 15542 6121 15542 8619 15543 8620 15543 6121 15543 6121 15544 8620 15544 8621 15544 6121 15545 8621 15545 6120 15545 8621 15546 8622 15546 6120 15546 6120 15547 8622 15547 8623 15547 6120 15548 8623 15548 6119 15548 8623 15549 8624 15549 6119 15549 6119 15550 8624 15550 8625 15550 6119 15551 8625 15551 6118 15551 6118 15552 8625 15552 8626 15552 6118 15553 8626 15553 6117 15553 6117 15554 8626 15554 8627 15554 6117 15555 8627 15555 6116 15555 8627 15556 8628 15556 6116 15556 6116 15557 8628 15557 8629 15557 6116 15558 8629 15558 6115 15558 8629 15559 8630 15559 6115 15559 6115 15560 8630 15560 8631 15560 6115 15561 8631 15561 6114 15561 8631 15562 8632 15562 6114 15562 6114 15563 8632 15563 8633 15563 6114 15564 8633 15564 6113 15564 8633 15565 8634 15565 6113 15565 6113 15566 8634 15566 8635 15566 6113 15567 8635 15567 6036 15567 8635 15568 8636 15568 6036 15568 6036 15569 8636 15569 8637 15569 6036 15570 8637 15570 6010 15570 6010 15571 8637 15571 8638 15571 8638 15572 8639 15572 6010 15572 6010 15573 8639 15573 8640 15573 6010 15574 8640 15574 6011 15574 6011 15575 8640 15575 8641 15575 6011 15576 8641 15576 6007 15576 8641 15577 8642 15577 6007 15577 6007 15578 8642 15578 8643 15578 6007 15579 8643 15579 6004 15579 8643 15580 8644 15580 6004 15580 6004 15581 8644 15581 8645 15581 6004 15582 8645 15582 6026 15582 8645 15583 8646 15583 6026 15583 6026 15584 8646 15584 8647 15584 6026 15585 8647 15585 6047 15585 6047 15586 8647 15586 8648 15586 8648 15587 8649 15587 6047 15587 6047 15588 8649 15588 8650 15588 6047 15589 8650 15589 6045 15589 6045 15590 8650 15590 8651 15590 6045 15591 8651 15591 8550 15591 8652 15592 8653 15592 8654 15592 6197 15593 6304 15593 8655 15593 8656 15594 8657 15594 8658 15594 8659 15595 8660 15595 8661 15595 8661 15596 8660 15596 8662 15596 8661 15597 8662 15597 8663 15597 8659 15598 8661 15598 8664 15598 8664 15599 8661 15599 8665 15599 8664 15600 8665 15600 8666 15600 8667 15601 8668 15601 8665 15601 8665 15602 8668 15602 8669 15602 8665 15603 8669 15603 8666 15603 8657 15604 8670 15604 8658 15604 8658 15605 8670 15605 8671 15605 8658 15606 8671 15606 8667 15606 8667 15607 8671 15607 8672 15607 8667 15608 8672 15608 8668 15608 6642 15609 8673 15609 6643 15609 6643 15610 8673 15610 8674 15610 6643 15611 8674 15611 6644 15611 6328 15612 6330 15612 8675 15612 8675 15613 6330 15613 8676 15613 6336 15614 8677 15614 6333 15614 6333 15615 8677 15615 8676 15615 6333 15616 8676 15616 6331 15616 6331 15617 8676 15617 6330 15617 8678 15618 6310 15618 8679 15618 8679 15619 6310 15619 6309 15619 8679 15620 6309 15620 6327 15620 6304 15621 6303 15621 8680 15621 8680 15622 6303 15622 6301 15622 8680 15623 6301 15623 6299 15623 6327 15624 6326 15624 8679 15624 8679 15625 6326 15625 6324 15625 8679 15626 6324 15626 8675 15626 8675 15627 6324 15627 6323 15627 8675 15628 6323 15628 6328 15628 6304 15629 8680 15629 8655 15629 8655 15630 8680 15630 8681 15630 8655 15631 8681 15631 8682 15631 8682 15632 8681 15632 8683 15632 8682 15633 8683 15633 8684 15633 8685 15634 8682 15634 8686 15634 8686 15635 8682 15635 8684 15635 8686 15636 8684 15636 8687 15636 6199 15637 6197 15637 8688 15637 8688 15638 6197 15638 8655 15638 8688 15639 8655 15639 8689 15639 8689 15640 8655 15640 8682 15640 8689 15641 8682 15641 8690 15641 8690 15642 8682 15642 8685 15642 8691 15643 8692 15643 8693 15643 8693 15644 8692 15644 8694 15644 8693 15645 8694 15645 8695 15645 8691 15646 8693 15646 8696 15646 8696 15647 8693 15647 8697 15647 8696 15648 8697 15648 8698 15648 8699 15649 8654 15649 8700 15649 8700 15650 8654 15650 8701 15650 8700 15651 8701 15651 8702 15651 8703 15652 8704 15652 8705 15652 8706 15653 8707 15653 8708 15653 8708 15654 8707 15654 8709 15654 8708 15655 8709 15655 8710 15655 8705 15656 8711 15656 8703 15656 8703 15657 8711 15657 8712 15657 8703 15658 8712 15658 8709 15658 8709 15659 8712 15659 8713 15659 8709 15660 8713 15660 8710 15660 8694 15661 8714 15661 8695 15661 8695 15662 8714 15662 8715 15662 8695 15663 8715 15663 8704 15663 8704 15664 8715 15664 8716 15664 8704 15665 8716 15665 8705 15665 6648 15666 6647 15666 8717 15666 8717 15667 6647 15667 6649 15667 6646 15668 6639 15668 8658 15668 8674 15669 8656 15669 6644 15669 6644 15670 8656 15670 8658 15670 6644 15671 8658 15671 6645 15671 6645 15672 8658 15672 6639 15672 8662 15673 8718 15673 8663 15673 8663 15674 8718 15674 8719 15674 8663 15675 8719 15675 8720 15675 8707 15676 8699 15676 8709 15676 8709 15677 8699 15677 8700 15677 8709 15678 8700 15678 8703 15678 8703 15679 8700 15679 8702 15679 8703 15680 8702 15680 8704 15680 8704 15681 8702 15681 8721 15681 8704 15682 8721 15682 8695 15682 8695 15683 8721 15683 8722 15683 8695 15684 8722 15684 8693 15684 8693 15685 8722 15685 8723 15685 8693 15686 8723 15686 8697 15686 8697 15687 8723 15687 8724 15687 8697 15688 8724 15688 8725 15688 8725 15689 8724 15689 8726 15689 8725 15690 8726 15690 8720 15690 8720 15691 8726 15691 8727 15691 8720 15692 8727 15692 8663 15692 8663 15693 8727 15693 8728 15693 8663 15694 8728 15694 8661 15694 8661 15695 8728 15695 8729 15695 8661 15696 8729 15696 8665 15696 8665 15697 8729 15697 8730 15697 8665 15698 8730 15698 8667 15698 8667 15699 8730 15699 8731 15699 8667 15700 8731 15700 8658 15700 8658 15701 8731 15701 8717 15701 8658 15702 8717 15702 6646 15702 6646 15703 8717 15703 6649 15703 8732 15704 6219 15704 6221 15704 8732 15705 6221 15705 8733 15705 8733 15706 6221 15706 6229 15706 8733 15707 6229 15707 6224 15707 6224 15708 6223 15708 8733 15708 8733 15709 6223 15709 6650 15709 8733 15710 6650 15710 6651 15710 6219 15711 8732 15711 6218 15711 6218 15712 8732 15712 8734 15712 6218 15713 8734 15713 6216 15713 6215 15714 6214 15714 8735 15714 8735 15715 6214 15715 6212 15715 8735 15716 6212 15716 8734 15716 8734 15717 6212 15717 6211 15717 8734 15718 6211 15718 6216 15718 6210 15719 6209 15719 8736 15719 8736 15720 6209 15720 6208 15720 8736 15721 6208 15721 8737 15721 8737 15722 6208 15722 6204 15722 8737 15723 6204 15723 8735 15723 8735 15724 6204 15724 6206 15724 8735 15725 6206 15725 6215 15725 6336 15726 6335 15726 8677 15726 8677 15727 6335 15727 6334 15727 8677 15728 6334 15728 8738 15728 8738 15729 6334 15729 6200 15729 8738 15730 6200 15730 8736 15730 8736 15731 6200 15731 6202 15731 8736 15732 6202 15732 6210 15732 8652 15733 8654 15733 8739 15733 8739 15734 8654 15734 8699 15734 8739 15735 8699 15735 8740 15735 8740 15736 8699 15736 8707 15736 8740 15737 8707 15737 8741 15737 8741 15738 8707 15738 8706 15738 8741 15739 8706 15739 8742 15739 8743 15740 8687 15740 8744 15740 8744 15741 8687 15741 8684 15741 8744 15742 8684 15742 8745 15742 8745 15743 8684 15743 8683 15743 8745 15744 8683 15744 8678 15744 8678 15745 8683 15745 8681 15745 8678 15746 8681 15746 6310 15746 6310 15747 8681 15747 8680 15747 6310 15748 8680 15748 6298 15748 6298 15749 8680 15749 6299 15749 8719 15750 8746 15750 8720 15750 8720 15751 8746 15751 8747 15751 8720 15752 8747 15752 8725 15752 8725 15753 8747 15753 8748 15753 8725 15754 8748 15754 8697 15754 8697 15755 8748 15755 8749 15755 8697 15756 8749 15756 8698 15756 8653 15757 8743 15757 8654 15757 8654 15758 8743 15758 8744 15758 8654 15759 8744 15759 8701 15759 8701 15760 8744 15760 8745 15760 8701 15761 8745 15761 8702 15761 8702 15762 8745 15762 8678 15762 8702 15763 8678 15763 8721 15763 8721 15764 8678 15764 8679 15764 8721 15765 8679 15765 8722 15765 8722 15766 8679 15766 8675 15766 8722 15767 8675 15767 8723 15767 8723 15768 8675 15768 8676 15768 8723 15769 8676 15769 8724 15769 8724 15770 8676 15770 8677 15770 8724 15771 8677 15771 8726 15771 8726 15772 8677 15772 8738 15772 8726 15773 8738 15773 8727 15773 8727 15774 8738 15774 8736 15774 8727 15775 8736 15775 8728 15775 8728 15776 8736 15776 8737 15776 8728 15777 8737 15777 8729 15777 8729 15778 8737 15778 8735 15778 8729 15779 8735 15779 8730 15779 8730 15780 8735 15780 8734 15780 8730 15781 8734 15781 8731 15781 8731 15782 8734 15782 8732 15782 8731 15783 8732 15783 8717 15783 8717 15784 8732 15784 8733 15784 8717 15785 8733 15785 6648 15785 6648 15786 8733 15786 6651 15786 6376 15787 6375 15787 8750 15787 8751 15788 6369 15788 6153 15788 8752 15789 8753 15789 6371 15789 6371 15790 8753 15790 8754 15790 6371 15791 8754 15791 6372 15791 6372 15792 8754 15792 6377 15792 8750 15793 6375 15793 8754 15793 8754 15794 6375 15794 6374 15794 8754 15795 6374 15795 6377 15795 6376 15796 8750 15796 6383 15796 6383 15797 8750 15797 8755 15797 6383 15798 8755 15798 6382 15798 6390 15799 8756 15799 6389 15799 6389 15800 8756 15800 8757 15800 6389 15801 8757 15801 6392 15801 6392 15802 8757 15802 6391 15802 8751 15803 6153 15803 8758 15803 6391 15804 8757 15804 6152 15804 6152 15805 8757 15805 8759 15805 6152 15806 8759 15806 6153 15806 8752 15807 8760 15807 8761 15807 8761 15808 8760 15808 8762 15808 8761 15809 8762 15809 8763 15809 6378 15810 6379 15810 8764 15810 8764 15811 6379 15811 6380 15811 8764 15812 6380 15812 8755 15812 8755 15813 6380 15813 6381 15813 8755 15814 6381 15814 6382 15814 8759 15815 8765 15815 6153 15815 6153 15816 8765 15816 8766 15816 6153 15817 8766 15817 8758 15817 8758 15818 8766 15818 8767 15818 8758 15819 8767 15819 8768 15819 8762 15820 8769 15820 8763 15820 8763 15821 8769 15821 8770 15821 8763 15822 8770 15822 8771 15822 8771 15823 8770 15823 8772 15823 8771 15824 8772 15824 8773 15824 6390 15825 6388 15825 8756 15825 8756 15826 6388 15826 6387 15826 8756 15827 6387 15827 8774 15827 8767 15828 8775 15828 8768 15828 8768 15829 8775 15829 8776 15829 8768 15830 8776 15830 8777 15830 8777 15831 8776 15831 8778 15831 8773 15832 8779 15832 8771 15832 8771 15833 8779 15833 8780 15833 8771 15834 8780 15834 8781 15834 8761 15835 8782 15835 8752 15835 8752 15836 8782 15836 8783 15836 8752 15837 8783 15837 8753 15837 8753 15838 8783 15838 8391 15838 8753 15839 8391 15839 8390 15839 6387 15840 6385 15840 8774 15840 8774 15841 6385 15841 6384 15841 8774 15842 6384 15842 8764 15842 8764 15843 6384 15843 6386 15843 8764 15844 6386 15844 6378 15844 8714 15845 8694 15845 8784 15845 8785 15846 8786 15846 8787 15846 8788 15847 8789 15847 8790 15847 8791 15848 8792 15848 8793 15848 8793 15849 8792 15849 8794 15849 8793 15850 8794 15850 8790 15850 8790 15851 8794 15851 8795 15851 8790 15852 8795 15852 8788 15852 8796 15853 8797 15853 8798 15853 8784 15854 8799 15854 8800 15854 8801 15855 8802 15855 8799 15855 8799 15856 8802 15856 8803 15856 8799 15857 8803 15857 8800 15857 8786 15858 8804 15858 8787 15858 8787 15859 8804 15859 8805 15859 8787 15860 8805 15860 8799 15860 8799 15861 8805 15861 8806 15861 8799 15862 8806 15862 8801 15862 8807 15863 8808 15863 8746 15863 8746 15864 8808 15864 8747 15864 8662 15865 8809 15865 8718 15865 8718 15866 8809 15866 8807 15866 8718 15867 8807 15867 8719 15867 8719 15868 8807 15868 8746 15868 8694 15869 8692 15869 8784 15869 8784 15870 8692 15870 8691 15870 8784 15871 8691 15871 8799 15871 8799 15872 8691 15872 8696 15872 8799 15873 8696 15873 8698 15873 8808 15874 8785 15874 8747 15874 8747 15875 8785 15875 8787 15875 8747 15876 8787 15876 8748 15876 8748 15877 8787 15877 8799 15877 8748 15878 8799 15878 8749 15878 8749 15879 8799 15879 8698 15879 8810 15880 8811 15880 8812 15880 8812 15881 8813 15881 8810 15881 8810 15882 8813 15882 8814 15882 8810 15883 8814 15883 8708 15883 8708 15884 8814 15884 8815 15884 8708 15885 8815 15885 8706 15885 8706 15886 8815 15886 8742 15886 8816 15887 8817 15887 8711 15887 8711 15888 8705 15888 8816 15888 8816 15889 8705 15889 8716 15889 8816 15890 8716 15890 8715 15890 8708 15891 8710 15891 8810 15891 8810 15892 8710 15892 8713 15892 8810 15893 8713 15893 8817 15893 8817 15894 8713 15894 8712 15894 8817 15895 8712 15895 8711 15895 8811 15896 8810 15896 8818 15896 8818 15897 8810 15897 8817 15897 8818 15898 8817 15898 8819 15898 8819 15899 8817 15899 8816 15899 8819 15900 8816 15900 8798 15900 8820 15901 8821 15901 8822 15901 8822 15902 8821 15902 8823 15902 8824 15903 8825 15903 8811 15903 8811 15904 8825 15904 8826 15904 8811 15905 8826 15905 8812 15905 8827 15906 8828 15906 8829 15906 8829 15907 8828 15907 8830 15907 8829 15908 8830 15908 8823 15908 8823 15909 8830 15909 8831 15909 8823 15910 8831 15910 8822 15910 8827 15911 8829 15911 8832 15911 8832 15912 8829 15912 8790 15912 8832 15913 8790 15913 8833 15913 8833 15914 8790 15914 8789 15914 8833 15915 8789 15915 8834 15915 8715 15916 8714 15916 8816 15916 8816 15917 8714 15917 8784 15917 8816 15918 8784 15918 8798 15918 8798 15919 8784 15919 8800 15919 8798 15920 8800 15920 8796 15920 8797 15921 8791 15921 8798 15921 8798 15922 8791 15922 8793 15922 8798 15923 8793 15923 8819 15923 8819 15924 8793 15924 8790 15924 8819 15925 8790 15925 8818 15925 8818 15926 8790 15926 8829 15926 8818 15927 8829 15927 8811 15927 8811 15928 8829 15928 8823 15928 8811 15929 8823 15929 8824 15929 8824 15930 8823 15930 8821 15930 8802 15931 8801 15931 6416 15931 8669 15932 8668 15932 6400 15932 8835 15933 8836 15933 6410 15933 8837 15934 8838 15934 6421 15934 8838 15935 8839 15935 6421 15935 6421 15936 8839 15936 8840 15936 6421 15937 8840 15937 8841 15937 8841 15938 8840 15938 8842 15938 8841 15939 8842 15939 8843 15939 8843 15940 8844 15940 8841 15940 8841 15941 8844 15941 8845 15941 8841 15942 8845 15942 8846 15942 8846 15943 8845 15943 8847 15943 8846 15944 8847 15944 8848 15944 8848 15945 8847 15945 8849 15945 8848 15946 8849 15946 8850 15946 8851 15947 8852 15947 6425 15947 8852 15948 8853 15948 6425 15948 6425 15949 8853 15949 8854 15949 6425 15950 8854 15950 6421 15950 6421 15951 8854 15951 8855 15951 6421 15952 8855 15952 8837 15952 8856 15953 8857 15953 6426 15953 6426 15954 8857 15954 8858 15954 6426 15955 8858 15955 6425 15955 6425 15956 8858 15956 8859 15956 6425 15957 8859 15957 8851 15957 8860 15958 8861 15958 6427 15958 6427 15959 8861 15959 8862 15959 6427 15960 8862 15960 6426 15960 6426 15961 8862 15961 8863 15961 6426 15962 8863 15962 8856 15962 8864 15963 8865 15963 6428 15963 6428 15964 8865 15964 8866 15964 6428 15965 8866 15965 6427 15965 6427 15966 8866 15966 8867 15966 6427 15967 8867 15967 8860 15967 8864 15968 6428 15968 8868 15968 8868 15969 6428 15969 6406 15969 8868 15970 6406 15970 8869 15970 8870 15971 8871 15971 6407 15971 6407 15972 8871 15972 8872 15972 6407 15973 8872 15973 6406 15973 6406 15974 8872 15974 8873 15974 6406 15975 8873 15975 8869 15975 8870 15976 6407 15976 8874 15976 8874 15977 6407 15977 6419 15977 8874 15978 6419 15978 8875 15978 6410 15979 8836 15979 6419 15979 6419 15980 8836 15980 8876 15980 6419 15981 8876 15981 8875 15981 6667 15982 8877 15982 6409 15982 6409 15983 8877 15983 8878 15983 6409 15984 8878 15984 6410 15984 6410 15985 8878 15985 8879 15985 6410 15986 8879 15986 8835 15986 6409 15987 6408 15987 6667 15987 6667 15988 6408 15988 6411 15988 6667 15989 6411 15989 6666 15989 6666 15990 6411 15990 6412 15990 6666 15991 6412 15991 6664 15991 6664 15992 6412 15992 6396 15992 6664 15993 6396 15993 6668 15993 6668 15994 6396 15994 6669 15994 6669 15995 6396 15995 6399 15995 6669 15996 6399 15996 6670 15996 6670 15997 6399 15997 6414 15997 6670 15998 6414 15998 6636 15998 6636 15999 6414 15999 6413 15999 6636 16000 6413 16000 6637 16000 6637 16001 6413 16001 6422 16001 6637 16002 6422 16002 6640 16002 6640 16003 6422 16003 6423 16003 6640 16004 6423 16004 6641 16004 6641 16005 6423 16005 6642 16005 6642 16006 6423 16006 6415 16006 6642 16007 6415 16007 8673 16007 8673 16008 6415 16008 8674 16008 8674 16009 6415 16009 6420 16009 8674 16010 6420 16010 8656 16010 8671 16011 8670 16011 6420 16011 6420 16012 8670 16012 8657 16012 6420 16013 8657 16013 8656 16013 6400 16014 8668 16014 6420 16014 6420 16015 8668 16015 8672 16015 6420 16016 8672 16016 8671 16016 8660 16017 6424 16017 8662 16017 8662 16018 6424 16018 6401 16018 8662 16019 6401 16019 8809 16019 8660 16020 8659 16020 6424 16020 6424 16021 8659 16021 8664 16021 6424 16022 8664 16022 6400 16022 6400 16023 8664 16023 8666 16023 6400 16024 8666 16024 8669 16024 6397 16025 8808 16025 6401 16025 6401 16026 8808 16026 8807 16026 6401 16027 8807 16027 8809 16027 8805 16028 8804 16028 6397 16028 6416 16029 8801 16029 6397 16029 6397 16030 8801 16030 8806 16030 6397 16031 8806 16031 8805 16031 8804 16032 8786 16032 6397 16032 6397 16033 8786 16033 8785 16033 6397 16034 8785 16034 8808 16034 6402 16035 8800 16035 6416 16035 6416 16036 8800 16036 8803 16036 6416 16037 8803 16037 8802 16037 8791 16038 6402 16038 8792 16038 8792 16039 6402 16039 8794 16039 8791 16040 8797 16040 6402 16040 6402 16041 8797 16041 8796 16041 6402 16042 8796 16042 8800 16042 8880 16043 8834 16043 6393 16043 6393 16044 8834 16044 8789 16044 6393 16045 8789 16045 6403 16045 6403 16046 8789 16046 8788 16046 6403 16047 8788 16047 6402 16047 6402 16048 8788 16048 8795 16048 6402 16049 8795 16049 8794 16049 8880 16050 6393 16050 8881 16050 8881 16051 6393 16051 6394 16051 8881 16052 6394 16052 8882 16052 8883 16053 8884 16053 6404 16053 6404 16054 8884 16054 8885 16054 8885 16055 8886 16055 6404 16055 6404 16056 8886 16056 8887 16056 6404 16057 8887 16057 6394 16057 6394 16058 8887 16058 8888 16058 6394 16059 8888 16059 8882 16059 8883 16060 6404 16060 8889 16060 8889 16061 6404 16061 6395 16061 8889 16062 6395 16062 8890 16062 8891 16063 8892 16063 6398 16063 6398 16064 8892 16064 8893 16064 6398 16065 8893 16065 6395 16065 6395 16066 8893 16066 8894 16066 6395 16067 8894 16067 8890 16067 8895 16068 8896 16068 6417 16068 8896 16069 8897 16069 6417 16069 6417 16070 8897 16070 8898 16070 6417 16071 8898 16071 6398 16071 6398 16072 8898 16072 8899 16072 6398 16073 8899 16073 8891 16073 8900 16074 8901 16074 6418 16074 6418 16075 8901 16075 8902 16075 6418 16076 8902 16076 6417 16076 6417 16077 8902 16077 8903 16077 6417 16078 8903 16078 8895 16078 8904 16079 8905 16079 6405 16079 6405 16080 8905 16080 8906 16080 6405 16081 8906 16081 6418 16081 6418 16082 8906 16082 8907 16082 6418 16083 8907 16083 8900 16083 8841 16084 8908 16084 6421 16084 6421 16085 8908 16085 8909 16085 6421 16086 8909 16086 6405 16086 6405 16087 8909 16087 8910 16087 6405 16088 8910 16088 8904 16088 8911 16089 8912 16089 6447 16089 8857 16090 8856 16090 6455 16090 8870 16091 8874 16091 6458 16091 8913 16092 8914 16092 6437 16092 6437 16093 8914 16093 8915 16093 6437 16094 8915 16094 6438 16094 6434 16095 8916 16095 6435 16095 6435 16096 8916 16096 8917 16096 6435 16097 8917 16097 6436 16097 6436 16098 8917 16098 8918 16098 6436 16099 8918 16099 6437 16099 6437 16100 8918 16100 8919 16100 6437 16101 8919 16101 8913 16101 6433 16102 6468 16102 6434 16102 6434 16103 6468 16103 8920 16103 6434 16104 8920 16104 8916 16104 6476 16105 6469 16105 6432 16105 6432 16106 6469 16106 6465 16106 6432 16107 6465 16107 6433 16107 6433 16108 6465 16108 6467 16108 6433 16109 6467 16109 6468 16109 6431 16110 6485 16110 6483 16110 6483 16111 6482 16111 6431 16111 6431 16112 6482 16112 6481 16112 6431 16113 6481 16113 6432 16113 6432 16114 6481 16114 6480 16114 6432 16115 6480 16115 6476 16115 6485 16116 6431 16116 6487 16116 6487 16117 6431 16117 6430 16117 6487 16118 6430 16118 6491 16118 6491 16119 6430 16119 6492 16119 6492 16120 6430 16120 6429 16120 6492 16121 6429 16121 6493 16121 6501 16122 6500 16122 6464 16122 6464 16123 6500 16123 6499 16123 6464 16124 6499 16124 6429 16124 6429 16125 6499 16125 6498 16125 6429 16126 6498 16126 6493 16126 6515 16127 6514 16127 6463 16127 6463 16128 6514 16128 6504 16128 6463 16129 6504 16129 6464 16129 6464 16130 6504 16130 6502 16130 6464 16131 6502 16131 6501 16131 6516 16132 6506 16132 6462 16132 6462 16133 6506 16133 6511 16133 6462 16134 6511 16134 6463 16134 6463 16135 6511 16135 6512 16135 6463 16136 6512 16136 6515 16136 6516 16137 6462 16137 6517 16137 6517 16138 6462 16138 6461 16138 6517 16139 6461 16139 6527 16139 6460 16140 6523 16140 6461 16140 6461 16141 6523 16141 6528 16141 6461 16142 6528 16142 6527 16142 6460 16143 6459 16143 6667 16143 6545 16144 6544 16144 6665 16144 6665 16145 6544 16145 6543 16145 6665 16146 6543 16146 6667 16146 6667 16147 6543 16147 6533 16147 6667 16148 6533 16148 6460 16148 6460 16149 6533 16149 6521 16149 6460 16150 6521 16150 6523 16150 6458 16151 8874 16151 6459 16151 6459 16152 8874 16152 8875 16152 6459 16153 8875 16153 8876 16153 8876 16154 8836 16154 6459 16154 6459 16155 8836 16155 8835 16155 6459 16156 8835 16156 8879 16156 8879 16157 8878 16157 6459 16157 6459 16158 8878 16158 8877 16158 6459 16159 8877 16159 6667 16159 6457 16160 8868 16160 6458 16160 6458 16161 8868 16161 8869 16161 6458 16162 8869 16162 8873 16162 8873 16163 8872 16163 6458 16163 6458 16164 8872 16164 8871 16164 6458 16165 8871 16165 8870 16165 8866 16166 8865 16166 6457 16166 6457 16167 8865 16167 8864 16167 6457 16168 8864 16168 8868 16168 8862 16169 8861 16169 6456 16169 6456 16170 8861 16170 8860 16170 6456 16171 8860 16171 6457 16171 6457 16172 8860 16172 8867 16172 6457 16173 8867 16173 8866 16173 6455 16174 8856 16174 6456 16174 6456 16175 8856 16175 8863 16175 6456 16176 8863 16176 8862 16176 8857 16177 6455 16177 8858 16177 8858 16178 6455 16178 6454 16178 8858 16179 6454 16179 8859 16179 6453 16180 8852 16180 6454 16180 6454 16181 8852 16181 8851 16181 6454 16182 8851 16182 8859 16182 8837 16183 8855 16183 6452 16183 6452 16184 8855 16184 8854 16184 6452 16185 8854 16185 6453 16185 6453 16186 8854 16186 8853 16186 6453 16187 8853 16187 8852 16187 8837 16188 6452 16188 8838 16188 8838 16189 6452 16189 6451 16189 8838 16190 6451 16190 8839 16190 6450 16191 8842 16191 6451 16191 6451 16192 8842 16192 8840 16192 6451 16193 8840 16193 8839 16193 8847 16194 8845 16194 6449 16194 6449 16195 8845 16195 8844 16195 6449 16196 8844 16196 6450 16196 6450 16197 8844 16197 8843 16197 6450 16198 8843 16198 8842 16198 8921 16199 8922 16199 6448 16199 6448 16200 8922 16200 8850 16200 6448 16201 8850 16201 6449 16201 6449 16202 8850 16202 8849 16202 6449 16203 8849 16203 8847 16203 6447 16204 8912 16204 6448 16204 6448 16205 8912 16205 8923 16205 6448 16206 8923 16206 8921 16206 8911 16207 6447 16207 8924 16207 8924 16208 6447 16208 6446 16208 8924 16209 6446 16209 8925 16209 8926 16210 8927 16210 6445 16210 6445 16211 8927 16211 8928 16211 6445 16212 8928 16212 6446 16212 6446 16213 8928 16213 8929 16213 6446 16214 8929 16214 8925 16214 6444 16215 8930 16215 6445 16215 6445 16216 8930 16216 8931 16216 6445 16217 8931 16217 8926 16217 8932 16218 8933 16218 6443 16218 6443 16219 8933 16219 8934 16219 6443 16220 8934 16220 6444 16220 6444 16221 8934 16221 8935 16221 6444 16222 8935 16222 8930 16222 8932 16223 6443 16223 8936 16223 8936 16224 6443 16224 6442 16224 8936 16225 6442 16225 8937 16225 6441 16226 8938 16226 8939 16226 8939 16227 8940 16227 6441 16227 6441 16228 8940 16228 8941 16228 6441 16229 8941 16229 6442 16229 6442 16230 8941 16230 8942 16230 6442 16231 8942 16231 8937 16231 8938 16232 6441 16232 8943 16232 8943 16233 6441 16233 6440 16233 8943 16234 6440 16234 8944 16234 8945 16235 8946 16235 6439 16235 6439 16236 8946 16236 8947 16236 6439 16237 8947 16237 6440 16237 6440 16238 8947 16238 8948 16238 6440 16239 8948 16239 8944 16239 8915 16240 8949 16240 6438 16240 6438 16241 8949 16241 8950 16241 6438 16242 8950 16242 6439 16242 6439 16243 8950 16243 8951 16243 6439 16244 8951 16244 8945 16244 8917 16245 8952 16245 8918 16245 8918 16246 8952 16246 8953 16246 8918 16247 8953 16247 8919 16247 8920 16248 8954 16248 8916 16248 8916 16249 8954 16249 8955 16249 8916 16250 8955 16250 8956 16250 8957 16251 8958 16251 8959 16251 8960 16252 8961 16252 8917 16252 8917 16253 8961 16253 8962 16253 8917 16254 8962 16254 8952 16254 8956 16255 8963 16255 8916 16255 8916 16256 8963 16256 8964 16256 8916 16257 8964 16257 8917 16257 8917 16258 8964 16258 8965 16258 8917 16259 8965 16259 8960 16259 8966 16260 8967 16260 8968 16260 8968 16261 8967 16261 8969 16261 8968 16262 8969 16262 8957 16262 8957 16263 8969 16263 8970 16263 8957 16264 8970 16264 8958 16264 8959 16265 8971 16265 8957 16265 8957 16266 8971 16266 8954 16266 8957 16267 8954 16267 8972 16267 8973 16268 8974 16268 8975 16268 8975 16269 8974 16269 8976 16269 8975 16270 8976 16270 8968 16270 8968 16271 8976 16271 8977 16271 8968 16272 8977 16272 8966 16272 8920 16273 6468 16273 8954 16273 8954 16274 6468 16274 6466 16274 8954 16275 6466 16275 8972 16275 6522 16276 6542 16276 6548 16276 6531 16277 6532 16277 6674 16277 8978 16278 8979 16278 6556 16278 8980 16279 8981 16279 6562 16279 8982 16280 8983 16280 6563 16280 6563 16281 8983 16281 6564 16281 6562 16282 8981 16282 6563 16282 6563 16283 8981 16283 8984 16283 6563 16284 8984 16284 8982 16284 6561 16285 8985 16285 8986 16285 6561 16286 8986 16286 6562 16286 6562 16287 8986 16287 8987 16287 6562 16288 8987 16288 8980 16288 8985 16289 6561 16289 8988 16289 8988 16290 6561 16290 6560 16290 8988 16291 6560 16291 8989 16291 8990 16292 8991 16292 6559 16292 6559 16293 8991 16293 8992 16293 6559 16294 8992 16294 6560 16294 6560 16295 8992 16295 8993 16295 6560 16296 8993 16296 8989 16296 6558 16297 8994 16297 6559 16297 6559 16298 8994 16298 8995 16298 6559 16299 8995 16299 8990 16299 8996 16300 8997 16300 6557 16300 6557 16301 8997 16301 8998 16301 6557 16302 8998 16302 6558 16302 6558 16303 8998 16303 8999 16303 6558 16304 8999 16304 8994 16304 6556 16305 8979 16305 6557 16305 6557 16306 8979 16306 9000 16306 6557 16307 9000 16307 8996 16307 8978 16308 6556 16308 9001 16308 9001 16309 6556 16309 6555 16309 9001 16310 6555 16310 9002 16310 6554 16311 9003 16311 9004 16311 6554 16312 9004 16312 6555 16312 6555 16313 9004 16313 9005 16313 6555 16314 9005 16314 9002 16314 9003 16315 6554 16315 9006 16315 9006 16316 6554 16316 6553 16316 9006 16317 6553 16317 9007 16317 9008 16318 9009 16318 6552 16318 6552 16319 9009 16319 9010 16319 6552 16320 9010 16320 6553 16320 6553 16321 9010 16321 9011 16321 6553 16322 9011 16322 9007 16322 6551 16323 9012 16323 9013 16323 9013 16324 9014 16324 6551 16324 6551 16325 9014 16325 9015 16325 6551 16326 9015 16326 6552 16326 6552 16327 9015 16327 9016 16327 6552 16328 9016 16328 9008 16328 9017 16329 9018 16329 6550 16329 6550 16330 9018 16330 9019 16330 9019 16331 9020 16331 6550 16331 6550 16332 9020 16332 9021 16332 6550 16333 9021 16333 6551 16333 6551 16334 9021 16334 9022 16334 6551 16335 9022 16335 9012 16335 6676 16336 9023 16336 6549 16336 6549 16337 9023 16337 9024 16337 9024 16338 9025 16338 6549 16338 6549 16339 9025 16339 9026 16339 6549 16340 9026 16340 9027 16340 9027 16341 9028 16341 6549 16341 6549 16342 9028 16342 9029 16342 6549 16343 9029 16343 6550 16343 6550 16344 9029 16344 9030 16344 6550 16345 9030 16345 9017 16345 6549 16346 6548 16346 6676 16346 6676 16347 6548 16347 6542 16347 6676 16348 6542 16348 6674 16348 6674 16349 6542 16349 6529 16349 6674 16350 6529 16350 6531 16350 6519 16351 6526 16351 6547 16351 6547 16352 6526 16352 6525 16352 6547 16353 6525 16353 6548 16353 6548 16354 6525 16354 6524 16354 6548 16355 6524 16355 6522 16355 6508 16356 6546 16356 6509 16356 6509 16357 6546 16357 6581 16357 6509 16358 6581 16358 6510 16358 6508 16359 6507 16359 6546 16359 6546 16360 6507 16360 6520 16360 6546 16361 6520 16361 6547 16361 6547 16362 6520 16362 6518 16362 6547 16363 6518 16363 6519 16363 6580 16364 6505 16364 6581 16364 6581 16365 6505 16365 6513 16365 6581 16366 6513 16366 6510 16366 6579 16367 6496 16367 6580 16367 6580 16368 6496 16368 6495 16368 6495 16369 6494 16369 6580 16369 6580 16370 6494 16370 6503 16370 6580 16371 6503 16371 6505 16371 6578 16372 6488 16372 6579 16372 6579 16373 6488 16373 6489 16373 6489 16374 6490 16374 6579 16374 6579 16375 6490 16375 6497 16375 6579 16376 6497 16376 6496 16376 6576 16377 6477 16377 6577 16377 6577 16378 6477 16378 6475 16378 6577 16379 6475 16379 6474 16379 6474 16380 6479 16380 6577 16380 6577 16381 6479 16381 6484 16381 6577 16382 6484 16382 6578 16382 6578 16383 6484 16383 6486 16383 6578 16384 6486 16384 6488 16384 6575 16385 6472 16385 6576 16385 6576 16386 6472 16386 6471 16386 6471 16387 6470 16387 6576 16387 6576 16388 6470 16388 6478 16388 6576 16389 6478 16389 6477 16389 8972 16390 6466 16390 6575 16390 6575 16391 6466 16391 6473 16391 6575 16392 6473 16392 6472 16392 8973 16393 8975 16393 6571 16393 6571 16394 8975 16394 8968 16394 6571 16395 8968 16395 6572 16395 6572 16396 8968 16396 8957 16396 6572 16397 8957 16397 6573 16397 6573 16398 8957 16398 8972 16398 6573 16399 8972 16399 6574 16399 6574 16400 8972 16400 6575 16400 9031 16401 9032 16401 6570 16401 6570 16402 9032 16402 9033 16402 6570 16403 9033 16403 6571 16403 6571 16404 9033 16404 9034 16404 6571 16405 9034 16405 8973 16405 9031 16406 6570 16406 9035 16406 9035 16407 6570 16407 6569 16407 9035 16408 6569 16408 9036 16408 9037 16409 9038 16409 6568 16409 6568 16410 9038 16410 9039 16410 6568 16411 9039 16411 6569 16411 6569 16412 9039 16412 9040 16412 6569 16413 9040 16413 9036 16413 9041 16414 9042 16414 6567 16414 6567 16415 9042 16415 9043 16415 6567 16416 9043 16416 6568 16416 6568 16417 9043 16417 9044 16417 6568 16418 9044 16418 9037 16418 6565 16419 9045 16419 6566 16419 6566 16420 9045 16420 9046 16420 6566 16421 9046 16421 6567 16421 6567 16422 9046 16422 9047 16422 6567 16423 9047 16423 9041 16423 9048 16424 9049 16424 6565 16424 6565 16425 9049 16425 9050 16425 6565 16426 9050 16426 9045 16426 8983 16427 9051 16427 6564 16427 6564 16428 9051 16428 9052 16428 6564 16429 9052 16429 6565 16429 6565 16430 9052 16430 9053 16430 6565 16431 9053 16431 9048 16431 9054 16432 9055 16432 6613 16432 9056 16433 9057 16433 6591 16433 9058 16434 9059 16434 6594 16434 9060 16435 8992 16435 8991 16435 8991 16436 8990 16436 9060 16436 9060 16437 8990 16437 8995 16437 9060 16438 8995 16438 9059 16438 9059 16439 8995 16439 8994 16439 9059 16440 8994 16440 8999 16440 8999 16441 8998 16441 9059 16441 9059 16442 8998 16442 8997 16442 9059 16443 8997 16443 6594 16443 6594 16444 8997 16444 8996 16444 6594 16445 8996 16445 9000 16445 9061 16446 9062 16446 6595 16446 6595 16447 9062 16447 9063 16447 6595 16448 9063 16448 6594 16448 6594 16449 9063 16449 9064 16449 6594 16450 9064 16450 9058 16450 9065 16451 9066 16451 6589 16451 6589 16452 9066 16452 9067 16452 6589 16453 9067 16453 6595 16453 6595 16454 9067 16454 9068 16454 6595 16455 9068 16455 9061 16455 9069 16456 9070 16456 6590 16456 6590 16457 9070 16457 9071 16457 6590 16458 9071 16458 6589 16458 6589 16459 9071 16459 9072 16459 6589 16460 9072 16460 9065 16460 9073 16461 9074 16461 6584 16461 6584 16462 9074 16462 9075 16462 6584 16463 9075 16463 6590 16463 6590 16464 9075 16464 9076 16464 6590 16465 9076 16465 9069 16465 6591 16466 9057 16466 6584 16466 6584 16467 9057 16467 9077 16467 6584 16468 9077 16468 9073 16468 9078 16469 9079 16469 6604 16469 6604 16470 9079 16470 9080 16470 6604 16471 9080 16471 6591 16471 6591 16472 9080 16472 9081 16472 6591 16473 9081 16473 9056 16473 6613 16474 9055 16474 6612 16474 6612 16475 9055 16475 9082 16475 6612 16476 9082 16476 9083 16476 9083 16477 9084 16477 6612 16477 6612 16478 9084 16478 9085 16478 6612 16479 9085 16479 6604 16479 6604 16480 9085 16480 9086 16480 6604 16481 9086 16481 9078 16481 9087 16482 6616 16482 9088 16482 9088 16483 6616 16483 6617 16483 9088 16484 6617 16484 9089 16484 9089 16485 6617 16485 9090 16485 9087 16486 9091 16486 6616 16486 6616 16487 9091 16487 9092 16487 6616 16488 9092 16488 6613 16488 6613 16489 9092 16489 9093 16489 6613 16490 9093 16490 9054 16490 9094 16491 9095 16491 6596 16491 6596 16492 9095 16492 9096 16492 6596 16493 9096 16493 6617 16493 6617 16494 9096 16494 9097 16494 6617 16495 9097 16495 9090 16495 9098 16496 9099 16496 6605 16496 6605 16497 9099 16497 9100 16497 9100 16498 9101 16498 6605 16498 6605 16499 9101 16499 9102 16499 6605 16500 9102 16500 6596 16500 6596 16501 9102 16501 9103 16501 6596 16502 9103 16502 9094 16502 9098 16503 6605 16503 9104 16503 9104 16504 6605 16504 6598 16504 9104 16505 6598 16505 9105 16505 9106 16506 9107 16506 6597 16506 6597 16507 9107 16507 9108 16507 6597 16508 9108 16508 6598 16508 6598 16509 9108 16509 9109 16509 6598 16510 9109 16510 9105 16510 9106 16511 6597 16511 9110 16511 9110 16512 6597 16512 6599 16512 9110 16513 6599 16513 9111 16513 6614 16514 9112 16514 9113 16514 9113 16515 9114 16515 6614 16515 6614 16516 9114 16516 9115 16516 6614 16517 9115 16517 6599 16517 6599 16518 9115 16518 9116 16518 6599 16519 9116 16519 9111 16519 9112 16520 6614 16520 9117 16520 9117 16521 6614 16521 6615 16521 9117 16522 6615 16522 9118 16522 6608 16523 6679 16523 6600 16523 6600 16524 6679 16524 6678 16524 6600 16525 6678 16525 6606 16525 6606 16526 6678 16526 6677 16526 6606 16527 6677 16527 6607 16527 6607 16528 6677 16528 6684 16528 6607 16529 6684 16529 6615 16529 6615 16530 6684 16530 9119 16530 6615 16531 9119 16531 9118 16531 6601 16532 6681 16532 6608 16532 6608 16533 6681 16533 6680 16533 6608 16534 6680 16534 6679 16534 6582 16535 6675 16535 6611 16535 6611 16536 6675 16536 6673 16536 6611 16537 6673 16537 6609 16537 6609 16538 6673 16538 6672 16538 6609 16539 6672 16539 6610 16539 6610 16540 6672 16540 6683 16540 6610 16541 6683 16541 6601 16541 6601 16542 6683 16542 6682 16542 6601 16543 6682 16543 6681 16543 6583 16544 9023 16544 6582 16544 6582 16545 9023 16545 6676 16545 6582 16546 6676 16546 6675 16546 9027 16547 9026 16547 6585 16547 6585 16548 9026 16548 9025 16548 6585 16549 9025 16549 6583 16549 6583 16550 9025 16550 9024 16550 6583 16551 9024 16551 9023 16551 9027 16552 6585 16552 9028 16552 9028 16553 6585 16553 6586 16553 9028 16554 6586 16554 9029 16554 6587 16555 9018 16555 9017 16555 6587 16556 9017 16556 6586 16556 6586 16557 9017 16557 9030 16557 6586 16558 9030 16558 9029 16558 6593 16559 9020 16559 6587 16559 6587 16560 9020 16560 9019 16560 6587 16561 9019 16561 9018 16561 9013 16562 9012 16562 6592 16562 6592 16563 9012 16563 9022 16563 6592 16564 9022 16564 6593 16564 6593 16565 9022 16565 9021 16565 6593 16566 9021 16566 9020 16566 9008 16567 9016 16567 6588 16567 6588 16568 9016 16568 9015 16568 6588 16569 9015 16569 6592 16569 6592 16570 9015 16570 9014 16570 6592 16571 9014 16571 9013 16571 9007 16572 9011 16572 6602 16572 6602 16573 9011 16573 9010 16573 6602 16574 9010 16574 6588 16574 6588 16575 9010 16575 9009 16575 6588 16576 9009 16576 9008 16576 9002 16577 9005 16577 6603 16577 9000 16578 8979 16578 6594 16578 6594 16579 8979 16579 8978 16579 6594 16580 8978 16580 6603 16580 6603 16581 8978 16581 9001 16581 6603 16582 9001 16582 9002 16582 9005 16583 9004 16583 6603 16583 6603 16584 9004 16584 9003 16584 6603 16585 9003 16585 6602 16585 6602 16586 9003 16586 9006 16586 6602 16587 9006 16587 9007 16587 6942 16588 6941 16588 9120 16588 6694 16589 6693 16589 9120 16589 9121 16590 9122 16590 9123 16590 9124 16591 9125 16591 9126 16591 9127 16592 9128 16592 9129 16592 9119 16593 6684 16593 6685 16593 9130 16594 9113 16594 9112 16594 9130 16595 9112 16595 6686 16595 6686 16596 9112 16596 9117 16596 6686 16597 9117 16597 6685 16597 6685 16598 9117 16598 9118 16598 6685 16599 9118 16599 9119 16599 9113 16600 9130 16600 9114 16600 9114 16601 9130 16601 9131 16601 9114 16602 9131 16602 9115 16602 9115 16603 9131 16603 9116 16603 9116 16604 9131 16604 9132 16604 9116 16605 9132 16605 9111 16605 9111 16606 9132 16606 9110 16606 9110 16607 9132 16607 9133 16607 9110 16608 9133 16608 9106 16608 9134 16609 9108 16609 9133 16609 9133 16610 9108 16610 9107 16610 9133 16611 9107 16611 9106 16611 9135 16612 9136 16612 9137 16612 9138 16613 9139 16613 9140 16613 9140 16614 9139 16614 9141 16614 9138 16615 9142 16615 9139 16615 9139 16616 9142 16616 9143 16616 9139 16617 9143 16617 9136 16617 9136 16618 9143 16618 9144 16618 9136 16619 9144 16619 9137 16619 9145 16620 9146 16620 9147 16620 9147 16621 9146 16621 9126 16621 9147 16622 9126 16622 9148 16622 9129 16623 9149 16623 9127 16623 9127 16624 9149 16624 9150 16624 9127 16625 9150 16625 9151 16625 9151 16626 9150 16626 9152 16626 9151 16627 9152 16627 9153 16627 9145 16628 9154 16628 9146 16628 9146 16629 9154 16629 9155 16629 9146 16630 9155 16630 9141 16630 9141 16631 9155 16631 9156 16631 9141 16632 9156 16632 9140 16632 9125 16633 9124 16633 9157 16633 9157 16634 9124 16634 9158 16634 9157 16635 9158 16635 9159 16635 9159 16636 9160 16636 9157 16636 9157 16637 9160 16637 9161 16637 9157 16638 9161 16638 9162 16638 9162 16639 9128 16639 9157 16639 9157 16640 9128 16640 9127 16640 9157 16641 9127 16641 9125 16641 9125 16642 9127 16642 9151 16642 9125 16643 9151 16643 9126 16643 9126 16644 9151 16644 9153 16644 9126 16645 9153 16645 9148 16645 6945 16646 9163 16646 6816 16646 6816 16647 9163 16647 9164 16647 6883 16648 9165 16648 6875 16648 6875 16649 9165 16649 9166 16649 6945 16650 6944 16650 9163 16650 9163 16651 6944 16651 6943 16651 9163 16652 6943 16652 9166 16652 9166 16653 6943 16653 6876 16653 9166 16654 6876 16654 6875 16654 9167 16655 9168 16655 9169 16655 9169 16656 9168 16656 9170 16656 9171 16657 9121 16657 9169 16657 9169 16658 9121 16658 9123 16658 9169 16659 9123 16659 9167 16659 9167 16660 9123 16660 9172 16660 6885 16661 6884 16661 9173 16661 6885 16662 9173 16662 6886 16662 6886 16663 9173 16663 9174 16663 6886 16664 9174 16664 6887 16664 6887 16665 9174 16665 9175 16665 6887 16666 9175 16666 6870 16666 9176 16667 9177 16667 9170 16667 9170 16668 9177 16668 9178 16668 9170 16669 9178 16669 9169 16669 9169 16670 9178 16670 9179 16670 9169 16671 9179 16671 9171 16671 6883 16672 6882 16672 9165 16672 9165 16673 6882 16673 6881 16673 9165 16674 6881 16674 9175 16674 9175 16675 6881 16675 6871 16675 9175 16676 6871 16676 6870 16676 9180 16677 6696 16677 6695 16677 9120 16678 6941 16678 9181 16678 9120 16679 6693 16679 6942 16679 6942 16680 6693 16680 6692 16680 6942 16681 6692 16681 6691 16681 6842 16682 9182 16682 6827 16682 6827 16683 9182 16683 9183 16683 6827 16684 9183 16684 6828 16684 6828 16685 9183 16685 6830 16685 6820 16686 9184 16686 6821 16686 6821 16687 9184 16687 9185 16687 6842 16688 6841 16688 9182 16688 9182 16689 6841 16689 6840 16689 9182 16690 6840 16690 9185 16690 9185 16691 6840 16691 6839 16691 9185 16692 6839 16692 6821 16692 6941 16693 6940 16693 9181 16693 9181 16694 6940 16694 6834 16694 9181 16695 6834 16695 9183 16695 9183 16696 6834 16696 6833 16696 9183 16697 6833 16697 6830 16697 9174 16698 9186 16698 9175 16698 9175 16699 9186 16699 9187 16699 9175 16700 9187 16700 9165 16700 9165 16701 9187 16701 9188 16701 9165 16702 9188 16702 9166 16702 9166 16703 9188 16703 9189 16703 9166 16704 9189 16704 9163 16704 9163 16705 9189 16705 9190 16705 9163 16706 9190 16706 9164 16706 9164 16707 9190 16707 9191 16707 9164 16708 9191 16708 9184 16708 9184 16709 9191 16709 9192 16709 9184 16710 9192 16710 9185 16710 9185 16711 9192 16711 9193 16711 9185 16712 9193 16712 9182 16712 9182 16713 9193 16713 9194 16713 9182 16714 9194 16714 9183 16714 9183 16715 9194 16715 9195 16715 9183 16716 9195 16716 9181 16716 9181 16717 9195 16717 9196 16717 9181 16718 9196 16718 9120 16718 9120 16719 9196 16719 9180 16719 9120 16720 9180 16720 6694 16720 6694 16721 9180 16721 6695 16721 6687 16722 6688 16722 9180 16722 9180 16723 6688 16723 6697 16723 9180 16724 6697 16724 6696 16724 9197 16725 9198 16725 9134 16725 9134 16726 9198 16726 9199 16726 9134 16727 9199 16727 9108 16727 9137 16728 9200 16728 9135 16728 9135 16729 9200 16729 9201 16729 9135 16730 9201 16730 9197 16730 9197 16731 9201 16731 9202 16731 9197 16732 9202 16732 9198 16732 6884 16733 6865 16733 9173 16733 9173 16734 6865 16734 6863 16734 9173 16735 6863 16735 9203 16735 9203 16736 6863 16736 6862 16736 9203 16737 6862 16737 6861 16737 9172 16738 9186 16738 9167 16738 9167 16739 9186 16739 9174 16739 9167 16740 9174 16740 9168 16740 9168 16741 9174 16741 9173 16741 9168 16742 9173 16742 9170 16742 9170 16743 9173 16743 9203 16743 9170 16744 9203 16744 9176 16744 9176 16745 9203 16745 6861 16745 9176 16746 6861 16746 6752 16746 6820 16747 6819 16747 9184 16747 9184 16748 6819 16748 6818 16748 9184 16749 6818 16749 9164 16749 9164 16750 6818 16750 6817 16750 9164 16751 6817 16751 6816 16751 9122 16752 9159 16752 9123 16752 9123 16753 9159 16753 9158 16753 9123 16754 9158 16754 9172 16754 9172 16755 9158 16755 9124 16755 9172 16756 9124 16756 9186 16756 9186 16757 9124 16757 9126 16757 9186 16758 9126 16758 9187 16758 9187 16759 9126 16759 9146 16759 9187 16760 9146 16760 9188 16760 9188 16761 9146 16761 9141 16761 9188 16762 9141 16762 9189 16762 9189 16763 9141 16763 9139 16763 9189 16764 9139 16764 9190 16764 9190 16765 9139 16765 9136 16765 9190 16766 9136 16766 9191 16766 9191 16767 9136 16767 9135 16767 9191 16768 9135 16768 9192 16768 9192 16769 9135 16769 9197 16769 9192 16770 9197 16770 9193 16770 9193 16771 9197 16771 9134 16771 9193 16772 9134 16772 9194 16772 9194 16773 9134 16773 9133 16773 9194 16774 9133 16774 9195 16774 9195 16775 9133 16775 9132 16775 9195 16776 9132 16776 9196 16776 9196 16777 9132 16777 9131 16777 9196 16778 9131 16778 9180 16778 9180 16779 9131 16779 9130 16779 9180 16780 9130 16780 6687 16780 6687 16781 9130 16781 6686 16781 9108 16782 9199 16782 9109 16782 9109 16783 9199 16783 9198 16783 9109 16784 9198 16784 9105 16784 9100 16785 9099 16785 9201 16785 9201 16786 9099 16786 9202 16786 9202 16787 9099 16787 9098 16787 9202 16788 9098 16788 9198 16788 9198 16789 9098 16789 9104 16789 9198 16790 9104 16790 9105 16790 9094 16791 9103 16791 9204 16791 9204 16792 9103 16792 9102 16792 9204 16793 9102 16793 9205 16793 9205 16794 9102 16794 9101 16794 9205 16795 9101 16795 9100 16795 9089 16796 9090 16796 9206 16796 9095 16797 9207 16797 9096 16797 9096 16798 9207 16798 9206 16798 9096 16799 9206 16799 9097 16799 9097 16800 9206 16800 9090 16800 9208 16801 9054 16801 9209 16801 9209 16802 9054 16802 9093 16802 9209 16803 9093 16803 9092 16803 9088 16804 9210 16804 9087 16804 9087 16805 9210 16805 9209 16805 9087 16806 9209 16806 9091 16806 9091 16807 9209 16807 9092 16807 9138 16808 9211 16808 9142 16808 9142 16809 9211 16809 9204 16809 9142 16810 9204 16810 9143 16810 9143 16811 9204 16811 9144 16811 9100 16812 9201 16812 9205 16812 9205 16813 9201 16813 9200 16813 9205 16814 9200 16814 9204 16814 9204 16815 9200 16815 9137 16815 9204 16816 9137 16816 9144 16816 9212 16817 9213 16817 9214 16817 9214 16818 9213 16818 9215 16818 9214 16819 9215 16819 9216 16819 9216 16820 9215 16820 9217 16820 9208 16821 9209 16821 9218 16821 9218 16822 9209 16822 9219 16822 9218 16823 9219 16823 9220 16823 9213 16824 9221 16824 9215 16824 9215 16825 9221 16825 9222 16825 9215 16826 9222 16826 9219 16826 9219 16827 9222 16827 9223 16827 9219 16828 9223 16828 9220 16828 9088 16829 9089 16829 9210 16829 9210 16830 9089 16830 9206 16830 9210 16831 9206 16831 9209 16831 9209 16832 9206 16832 9224 16832 9209 16833 9224 16833 9219 16833 9219 16834 9224 16834 9225 16834 9219 16835 9225 16835 9215 16835 9215 16836 9225 16836 9226 16836 9215 16837 9226 16837 9217 16837 9217 16838 9226 16838 9227 16838 9228 16839 9229 16839 9230 16839 9230 16840 9229 16840 9150 16840 9230 16841 9150 16841 9231 16841 9231 16842 9150 16842 9149 16842 9231 16843 9149 16843 9129 16843 9232 16844 9153 16844 9229 16844 9229 16845 9153 16845 9152 16845 9229 16846 9152 16846 9150 16846 9154 16847 9145 16847 9233 16847 9233 16848 9145 16848 9147 16848 9233 16849 9147 16849 9232 16849 9232 16850 9147 16850 9148 16850 9232 16851 9148 16851 9153 16851 9138 16852 9140 16852 9211 16852 9211 16853 9140 16853 9156 16853 9211 16854 9156 16854 9233 16854 9233 16855 9156 16855 9155 16855 9233 16856 9155 16856 9154 16856 9095 16857 9094 16857 9207 16857 9207 16858 9094 16858 9204 16858 9207 16859 9204 16859 9206 16859 9206 16860 9204 16860 9211 16860 9206 16861 9211 16861 9224 16861 9224 16862 9211 16862 9233 16862 9224 16863 9233 16863 9225 16863 9225 16864 9233 16864 9232 16864 9225 16865 9232 16865 9226 16865 9226 16866 9232 16866 9229 16866 9226 16867 9229 16867 9227 16867 9227 16868 9229 16868 9228 16868 6963 16869 6962 16869 9234 16869 9235 16870 7047 16870 7045 16870 9235 16871 7045 16871 9236 16871 6959 16872 6954 16872 9237 16872 9237 16873 6954 16873 6955 16873 9237 16874 6955 16874 9238 16874 6962 16875 6960 16875 9234 16875 9234 16876 6960 16876 6961 16876 9234 16877 6961 16877 9239 16877 9236 16878 9240 16878 9235 16878 9235 16879 9240 16879 6965 16879 9235 16880 6965 16880 9241 16880 9241 16881 6965 16881 6968 16881 9241 16882 6968 16882 9234 16882 9234 16883 6968 16883 6964 16883 9234 16884 6964 16884 6963 16884 9242 16885 9243 16885 9244 16885 9244 16886 9243 16886 9245 16886 9246 16887 9247 16887 9248 16887 9248 16888 9247 16888 9249 16888 9247 16889 9250 16889 9249 16889 9249 16890 9250 16890 9251 16890 9249 16891 9251 16891 9252 16891 6961 16892 6956 16892 9239 16892 9239 16893 6956 16893 6957 16893 9239 16894 6957 16894 9237 16894 9237 16895 6957 16895 6958 16895 9237 16896 6958 16896 6959 16896 9242 16897 9253 16897 9243 16897 9243 16898 9253 16898 9254 16898 9243 16899 9254 16899 9255 16899 6947 16900 9256 16900 6949 16900 6949 16901 9256 16901 9257 16901 6949 16902 9257 16902 6948 16902 6948 16903 9257 16903 6953 16903 7045 16904 9258 16904 9236 16904 9236 16905 9258 16905 9259 16905 9236 16906 9259 16906 9260 16906 9260 16907 9259 16907 9261 16907 9260 16908 9261 16908 9262 16908 9262 16909 9261 16909 9255 16909 9262 16910 9255 16910 9263 16910 9263 16911 9255 16911 9254 16911 6955 16912 6951 16912 9238 16912 9238 16913 6951 16913 6950 16913 9238 16914 6950 16914 9257 16914 9257 16915 6950 16915 6952 16915 9257 16916 6952 16916 6953 16916 6969 16917 9264 16917 6897 16917 6897 16918 9264 16918 9252 16918 6947 16919 6946 16919 9256 16919 9256 16920 6946 16920 6738 16920 9256 16921 6738 16921 9265 16921 9265 16922 6738 16922 6897 16922 9265 16923 6897 16923 9266 16923 9266 16924 6897 16924 9252 16924 9266 16925 9252 16925 9267 16925 9267 16926 9252 16926 9251 16926 9268 16927 9269 16927 9270 16927 9271 16928 9272 16928 9273 16928 9274 16929 9275 16929 9276 16929 9277 16930 9278 16930 9279 16930 9280 16931 9281 16931 9282 16931 9283 16932 9284 16932 9285 16932 9286 16933 9287 16933 9288 16933 9289 16934 9290 16934 9291 16934 9292 16935 9293 16935 9294 16935 9295 16936 9296 16936 9297 16936 9295 16937 9298 16937 9299 16937 9299 16938 9298 16938 9300 16938 9299 16939 9300 16939 9301 16939 9302 16940 9303 16940 9300 16940 9300 16941 9303 16941 9304 16941 9300 16942 9304 16942 9301 16942 9305 16943 9306 16943 9302 16943 9302 16944 9306 16944 9307 16944 9302 16945 9307 16945 9303 16945 9308 16946 9309 16946 9305 16946 9305 16947 9309 16947 9310 16947 9305 16948 9310 16948 9306 16948 9308 16949 9305 16949 9311 16949 9311 16950 9305 16950 9312 16950 9311 16951 9312 16951 9313 16951 9313 16952 9312 16952 9314 16952 9313 16953 9314 16953 9315 16953 9316 16954 9317 16954 9314 16954 9314 16955 9317 16955 9318 16955 9314 16956 9318 16956 9315 16956 9319 16957 9320 16957 9321 16957 9321 16958 9320 16958 9322 16958 9323 16959 9324 16959 9325 16959 9325 16960 9324 16960 9326 16960 9325 16961 9326 16961 9321 16961 9321 16962 9326 16962 9327 16962 9321 16963 9327 16963 9319 16963 9328 16964 9329 16964 9323 16964 9323 16965 9329 16965 9330 16965 9323 16966 9330 16966 9324 16966 9331 16967 9332 16967 9275 16967 9331 16968 9275 16968 9333 16968 9333 16969 9275 16969 9334 16969 9334 16970 9275 16970 9274 16970 9334 16971 9274 16971 9335 16971 9336 16972 9337 16972 9338 16972 9339 16973 9340 16973 9341 16973 9341 16974 9340 16974 9342 16974 9343 16975 9344 16975 9345 16975 9345 16976 9344 16976 9346 16976 9347 16977 9348 16977 9349 16977 9349 16978 9348 16978 9350 16978 9349 16979 9350 16979 9351 16979 9347 16980 9352 16980 9348 16980 9348 16981 9352 16981 9353 16981 9348 16982 9353 16982 9346 16982 9346 16983 9353 16983 9354 16983 9346 16984 9354 16984 9345 16984 9351 16985 9350 16985 9355 16985 9355 16986 9350 16986 9356 16986 9355 16987 9356 16987 9357 16987 9358 16988 9359 16988 9356 16988 9356 16989 9359 16989 9360 16989 9356 16990 9360 16990 9357 16990 9361 16991 9362 16991 9363 16991 9363 16992 9362 16992 9364 16992 9363 16993 9364 16993 9358 16993 9358 16994 9364 16994 9365 16994 9358 16995 9365 16995 9359 16995 9366 16996 9367 16996 9368 16996 9368 16997 9367 16997 9270 16997 9368 16998 9270 16998 9369 16998 9369 16999 9270 16999 9269 16999 9370 17000 9371 17000 9372 17000 9372 17001 9371 17001 9361 17001 9372 17002 9361 17002 9373 17002 9373 17003 9361 17003 9363 17003 9373 17004 9363 17004 9374 17004 9374 17005 9363 17005 9367 17005 9374 17006 9367 17006 9375 17006 9375 17007 9367 17007 9366 17007 9290 17008 9292 17008 9376 17008 9377 17009 9289 17009 9378 17009 9379 17010 9380 17010 9381 17010 9292 17011 9294 17011 9376 17011 9376 17012 9294 17012 9382 17012 9376 17013 9382 17013 9383 17013 9383 17014 9382 17014 9379 17014 9383 17015 9379 17015 9384 17015 9384 17016 9379 17016 9381 17016 9384 17017 9381 17017 9385 17017 9386 17018 9387 17018 9388 17018 9289 17019 9291 17019 9378 17019 9378 17020 9291 17020 9389 17020 9378 17021 9389 17021 9390 17021 9390 17022 9389 17022 9386 17022 9390 17023 9386 17023 9391 17023 9391 17024 9386 17024 9388 17024 9391 17025 9388 17025 9392 17025 9290 17026 9376 17026 9291 17026 9291 17027 9376 17027 9383 17027 9291 17028 9383 17028 9389 17028 9389 17029 9383 17029 9384 17029 9389 17030 9384 17030 9386 17030 9386 17031 9384 17031 9385 17031 9386 17032 9385 17032 9387 17032 9281 17033 9286 17033 9282 17033 9282 17034 9286 17034 9288 17034 9282 17035 9288 17035 9393 17035 9393 17036 9288 17036 9394 17036 9393 17037 9394 17037 9395 17037 9395 17038 9394 17038 9396 17038 9395 17039 9396 17039 9397 17039 9397 17040 9396 17040 9377 17040 9398 17041 9399 17041 9400 17041 9272 17042 9283 17042 9273 17042 9273 17043 9283 17043 9285 17043 9273 17044 9285 17044 9401 17044 9401 17045 9285 17045 9402 17045 9401 17046 9402 17046 9403 17046 9403 17047 9402 17047 9404 17047 9403 17048 9404 17048 9398 17048 9398 17049 9404 17049 9405 17049 9398 17050 9400 17050 9403 17050 9403 17051 9400 17051 9406 17051 9403 17052 9406 17052 9401 17052 9284 17053 9280 17053 9285 17053 9285 17054 9280 17054 9282 17054 9285 17055 9282 17055 9402 17055 9402 17056 9282 17056 9393 17056 9402 17057 9393 17057 9404 17057 9404 17058 9393 17058 9395 17058 9404 17059 9395 17059 9405 17059 9405 17060 9395 17060 9397 17060 9377 17061 9378 17061 9397 17061 9397 17062 9378 17062 9390 17062 9397 17063 9390 17063 9405 17063 9405 17064 9390 17064 9391 17064 9405 17065 9391 17065 9398 17065 9398 17066 9391 17066 9392 17066 9398 17067 9392 17067 9399 17067 9407 17068 9408 17068 9279 17068 9279 17069 9408 17069 9409 17069 9279 17070 9409 17070 9277 17070 9278 17071 9410 17071 9279 17071 9279 17072 9410 17072 9411 17072 9279 17073 9411 17073 9407 17073 9407 17074 9411 17074 9412 17074 9413 17075 9316 17075 9414 17075 9414 17076 9316 17076 9314 17076 9414 17077 9314 17077 9415 17077 9415 17078 9314 17078 9312 17078 9415 17079 9312 17079 9416 17079 9416 17080 9312 17080 9305 17080 9416 17081 9305 17081 9417 17081 9417 17082 9305 17082 9302 17082 9417 17083 9302 17083 9418 17083 9418 17084 9302 17084 9300 17084 9418 17085 9300 17085 9419 17085 9419 17086 9300 17086 9298 17086 9278 17087 9420 17087 9410 17087 9410 17088 9420 17088 9421 17088 9410 17089 9421 17089 9422 17089 9422 17090 9421 17090 9423 17090 9424 17091 9425 17091 9426 17091 9426 17092 9425 17092 9427 17092 9426 17093 9427 17093 9428 17093 9293 17094 9412 17094 9424 17094 9424 17095 9412 17095 9411 17095 9424 17096 9411 17096 9425 17096 9425 17097 9411 17097 9410 17097 9425 17098 9410 17098 9427 17098 9427 17099 9410 17099 9422 17099 9427 17100 9422 17100 9429 17100 9429 17101 9422 17101 9423 17101 9429 17102 9423 17102 9430 17102 9431 17103 9432 17103 9433 17103 9433 17104 9432 17104 9434 17104 9297 17105 9435 17105 9436 17105 9436 17106 9435 17106 9437 17106 9436 17107 9437 17107 9438 17107 9438 17108 9437 17108 9439 17108 9438 17109 9439 17109 9431 17109 9431 17110 9439 17110 9440 17110 9431 17111 9440 17111 9432 17111 9441 17112 9442 17112 9443 17112 9443 17113 9442 17113 9444 17113 9443 17114 9444 17114 9445 17114 9445 17115 9444 17115 9446 17115 9445 17116 9446 17116 9339 17116 9339 17117 9446 17117 9447 17117 9339 17118 9447 17118 9340 17118 9338 17119 9448 17119 9449 17119 9449 17120 9448 17120 9450 17120 9451 17121 9452 17121 9443 17121 9443 17122 9452 17122 9453 17122 9443 17123 9453 17123 9441 17123 9419 17124 9454 17124 9418 17124 9418 17125 9454 17125 9455 17125 9418 17126 9455 17126 9417 17126 9417 17127 9455 17127 9456 17127 9417 17128 9456 17128 9416 17128 9416 17129 9456 17129 9457 17129 9416 17130 9457 17130 9415 17130 9415 17131 9457 17131 9458 17131 9415 17132 9458 17132 9414 17132 9414 17133 9458 17133 9459 17133 9414 17134 9459 17134 9413 17134 9413 17135 9459 17135 9460 17135 9413 17136 9460 17136 9461 17136 9461 17137 9460 17137 9462 17137 9461 17138 9462 17138 9463 17138 9337 17139 9335 17139 9338 17139 9338 17140 9335 17140 9274 17140 9338 17141 9274 17141 9448 17141 9448 17142 9274 17142 9276 17142 9448 17143 9276 17143 9450 17143 9450 17144 9276 17144 9464 17144 9450 17145 9464 17145 9465 17145 9463 17146 9323 17146 9461 17146 9461 17147 9323 17147 9325 17147 9461 17148 9325 17148 9413 17148 9413 17149 9325 17149 9321 17149 9413 17150 9321 17150 9316 17150 9316 17151 9321 17151 9322 17151 9316 17152 9322 17152 9317 17152 9466 17153 9467 17153 9468 17153 9468 17154 9467 17154 9469 17154 9468 17155 9469 17155 9451 17155 9451 17156 9469 17156 9470 17156 9451 17157 9470 17157 9452 17157 9466 17158 9468 17158 9471 17158 9471 17159 9468 17159 9472 17159 9471 17160 9472 17160 9473 17160 9473 17161 9472 17161 9474 17161 9474 17162 9472 17162 9475 17162 9474 17163 9475 17163 9476 17163 9343 17164 9477 17164 9344 17164 9344 17165 9477 17165 9478 17165 9344 17166 9478 17166 9475 17166 9475 17167 9478 17167 9479 17167 9475 17168 9479 17168 9476 17168 9480 17169 9481 17169 9482 17169 9482 17170 9481 17170 9483 17170 9482 17171 9483 17171 9484 17171 9484 17172 9483 17172 9485 17172 9484 17173 9485 17173 9486 17173 9486 17174 9485 17174 9487 17174 9486 17175 9487 17175 9488 17175 9488 17176 9487 17176 9489 17176 9488 17177 9489 17177 9490 17177 9490 17178 9489 17178 9491 17178 9490 17179 9491 17179 9492 17179 9492 17180 9491 17180 9493 17180 9492 17181 9493 17181 9494 17181 9494 17182 9493 17182 9495 17182 9494 17183 9495 17183 9496 17183 9496 17184 9495 17184 9497 17184 9496 17185 9497 17185 9498 17185 9498 17186 9497 17186 9499 17186 9498 17187 9499 17187 9465 17187 9465 17188 9499 17188 9500 17188 9465 17189 9500 17189 9450 17189 9341 17190 9336 17190 9339 17190 9339 17191 9336 17191 9338 17191 9339 17192 9338 17192 9445 17192 9445 17193 9338 17193 9449 17193 9445 17194 9449 17194 9443 17194 9443 17195 9449 17195 9450 17195 9443 17196 9450 17196 9451 17196 9451 17197 9450 17197 9500 17197 9451 17198 9500 17198 9468 17198 9468 17199 9500 17199 9499 17199 9468 17200 9499 17200 9472 17200 9472 17201 9499 17201 9497 17201 9472 17202 9497 17202 9475 17202 9475 17203 9497 17203 9495 17203 9475 17204 9495 17204 9344 17204 9344 17205 9495 17205 9493 17205 9344 17206 9493 17206 9346 17206 9346 17207 9493 17207 9491 17207 9346 17208 9491 17208 9348 17208 9348 17209 9491 17209 9489 17209 9348 17210 9489 17210 9350 17210 9350 17211 9489 17211 9487 17211 9350 17212 9487 17212 9356 17212 9356 17213 9487 17213 9485 17213 9356 17214 9485 17214 9358 17214 9358 17215 9485 17215 9483 17215 9358 17216 9483 17216 9363 17216 9363 17217 9483 17217 9481 17217 9363 17218 9481 17218 9367 17218 9367 17219 9481 17219 9480 17219 9367 17220 9480 17220 9270 17220 9454 17221 9430 17221 9455 17221 9455 17222 9430 17222 9423 17222 9455 17223 9423 17223 9456 17223 9456 17224 9423 17224 9421 17224 9456 17225 9421 17225 9457 17225 9457 17226 9421 17226 9420 17226 9457 17227 9420 17227 9458 17227 9458 17228 9420 17228 9278 17228 9458 17229 9278 17229 9459 17229 9459 17230 9278 17230 9277 17230 9459 17231 9277 17231 9460 17231 9460 17232 9277 17232 9409 17232 9460 17233 9409 17233 9462 17233 9462 17234 9409 17234 9501 17234 9462 17235 9501 17235 9463 17235 9463 17236 9501 17236 9502 17236 9463 17237 9502 17237 9323 17237 9323 17238 9502 17238 9503 17238 9323 17239 9503 17239 9328 17239 9504 17240 9271 17240 9505 17240 9505 17241 9271 17241 9273 17241 9505 17242 9273 17242 9506 17242 9506 17243 9273 17243 9401 17243 9506 17244 9401 17244 9507 17244 9507 17245 9401 17245 9406 17245 9295 17246 9297 17246 9298 17246 9298 17247 9297 17247 9436 17247 9298 17248 9436 17248 9419 17248 9419 17249 9436 17249 9438 17249 9419 17250 9438 17250 9454 17250 9454 17251 9438 17251 9431 17251 9454 17252 9431 17252 9430 17252 9430 17253 9431 17253 9433 17253 9430 17254 9433 17254 9429 17254 9429 17255 9433 17255 9434 17255 9429 17256 9434 17256 9427 17256 9427 17257 9434 17257 9508 17257 9427 17258 9508 17258 9428 17258 9428 17259 9508 17259 9509 17259 9428 17260 9509 17260 9510 17260 9293 17261 9424 17261 9294 17261 9294 17262 9424 17262 9426 17262 9294 17263 9426 17263 9382 17263 9382 17264 9426 17264 9428 17264 9382 17265 9428 17265 9379 17265 9379 17266 9428 17266 9510 17266 9379 17267 9510 17267 9380 17267 9287 17268 9268 17268 9288 17268 9288 17269 9268 17269 9270 17269 9288 17270 9270 17270 9394 17270 9394 17271 9270 17271 9480 17271 9394 17272 9480 17272 9396 17272 9396 17273 9480 17273 9482 17273 9396 17274 9482 17274 9377 17274 9377 17275 9482 17275 9484 17275 9377 17276 9484 17276 9289 17276 9289 17277 9484 17277 9486 17277 9289 17278 9486 17278 9290 17278 9290 17279 9486 17279 9488 17279 9290 17280 9488 17280 9292 17280 9292 17281 9488 17281 9490 17281 9292 17282 9490 17282 9293 17282 9293 17283 9490 17283 9492 17283 9293 17284 9492 17284 9412 17284 9412 17285 9492 17285 9494 17285 9412 17286 9494 17286 9407 17286 9407 17287 9494 17287 9496 17287 9407 17288 9496 17288 9408 17288 9408 17289 9496 17289 9498 17289 9408 17290 9498 17290 9409 17290 9409 17291 9498 17291 9465 17291 9409 17292 9465 17292 9501 17292 9501 17293 9465 17293 9464 17293 9501 17294 9464 17294 9502 17294 9502 17295 9464 17295 9276 17295 9502 17296 9276 17296 9503 17296 9503 17297 9276 17297 9275 17297 9503 17298 9275 17298 9328 17298 9328 17299 9275 17299 9332 17299 9511 17300 9246 17300 9512 17300 9512 17301 9246 17301 9248 17301 6969 17302 6970 17302 6971 17302 6971 17303 9513 17303 6969 17303 6969 17304 9513 17304 9514 17304 6969 17305 9514 17305 9264 17305 9264 17306 9514 17306 9515 17306 9264 17307 9515 17307 9252 17307 9252 17308 9515 17308 9516 17308 9252 17309 9516 17309 9249 17309 9249 17310 9516 17310 9512 17310 9249 17311 9512 17311 9248 17311 6971 17312 5896 17312 9513 17312 9513 17313 5896 17313 8285 17313 9513 17314 8285 17314 8286 17314 8310 17315 9504 17315 8308 17315 8308 17316 9504 17316 9505 17316 8308 17317 9505 17317 8309 17317 8309 17318 9505 17318 9506 17318 8309 17319 9506 17319 8306 17319 8306 17320 9506 17320 9507 17320 8306 17321 9507 17321 8304 17321 8304 17322 9507 17322 9406 17322 9406 17323 9400 17323 8304 17323 8304 17324 9400 17324 9399 17324 8304 17325 9399 17325 8303 17325 8303 17326 9399 17326 9392 17326 8303 17327 9392 17327 8301 17327 8301 17328 9392 17328 9388 17328 8301 17329 9388 17329 8300 17329 8300 17330 9388 17330 9387 17330 8300 17331 9387 17331 8298 17331 9387 17332 9385 17332 8298 17332 8298 17333 9385 17333 9381 17333 8298 17334 9381 17334 8297 17334 8297 17335 9381 17335 9380 17335 8297 17336 9380 17336 8295 17336 9380 17337 9510 17337 8295 17337 8295 17338 9510 17338 9509 17338 8295 17339 9509 17339 8294 17339 8294 17340 9509 17340 9508 17340 8294 17341 9508 17341 8292 17341 8292 17342 9508 17342 9434 17342 8292 17343 9434 17343 8291 17343 8291 17344 9434 17344 9432 17344 8291 17345 9432 17345 8289 17345 9432 17346 9440 17346 8289 17346 8289 17347 9440 17347 9439 17347 8289 17348 9439 17348 8288 17348 8288 17349 9439 17349 9437 17349 8288 17350 9437 17350 8286 17350 8286 17351 9437 17351 9435 17351 8286 17352 9435 17352 9513 17352 9513 17353 9435 17353 9297 17353 9513 17354 9297 17354 9296 17354 9517 17355 9518 17355 9519 17355 9342 17356 9520 17356 9341 17356 9341 17357 9520 17357 9517 17357 9341 17358 9517 17358 9336 17358 9336 17359 9517 17359 9519 17359 9336 17360 9519 17360 9337 17360 9334 17361 9521 17361 9333 17361 9333 17362 9521 17362 9522 17362 9333 17363 9522 17363 9523 17363 9519 17364 9524 17364 9337 17364 9337 17365 9524 17365 9521 17365 9337 17366 9521 17366 9335 17366 9335 17367 9521 17367 9334 17367 9525 17368 9327 17368 9526 17368 9526 17369 9327 17369 9326 17369 9526 17370 9326 17370 9527 17370 9326 17371 9324 17371 9527 17371 9527 17372 9324 17372 9330 17372 9527 17373 9330 17373 9528 17373 9528 17374 9330 17374 9329 17374 9528 17375 9329 17375 9529 17375 9529 17376 9329 17376 9328 17376 9529 17377 9328 17377 9530 17377 9530 17378 9328 17378 9332 17378 9530 17379 9332 17379 9523 17379 9523 17380 9332 17380 9331 17380 9523 17381 9331 17381 9333 17381 9531 17382 9532 17382 9318 17382 9318 17383 9317 17383 9531 17383 9531 17384 9317 17384 9322 17384 9531 17385 9322 17385 9533 17385 9533 17386 9322 17386 9320 17386 9533 17387 9320 17387 9525 17387 9525 17388 9320 17388 9319 17388 9525 17389 9319 17389 9327 17389 9534 17390 9535 17390 9308 17390 9308 17391 9311 17391 9534 17391 9534 17392 9311 17392 9313 17392 9534 17393 9313 17393 9532 17393 9532 17394 9313 17394 9315 17394 9532 17395 9315 17395 9318 17395 9536 17396 9306 17396 9537 17396 9537 17397 9306 17397 9310 17397 9537 17398 9310 17398 9535 17398 9535 17399 9310 17399 9309 17399 9535 17400 9309 17400 9308 17400 9538 17401 9295 17401 9299 17401 9299 17402 9301 17402 9538 17402 9538 17403 9301 17403 9304 17403 9538 17404 9304 17404 9539 17404 9539 17405 9304 17405 9303 17405 9539 17406 9303 17406 9536 17406 9536 17407 9303 17407 9307 17407 9536 17408 9307 17408 9306 17408 9246 17409 9511 17409 6999 17409 9247 17410 9246 17410 7043 17410 6999 17411 9511 17411 7006 17411 7016 17412 7047 17412 7017 17412 7017 17413 7047 17413 9235 17413 7017 17414 9235 17414 7018 17414 7018 17415 9235 17415 9241 17415 7018 17416 9241 17416 7019 17416 7019 17417 9241 17417 9234 17417 7019 17418 9234 17418 7020 17418 7020 17419 9234 17419 9239 17419 7020 17420 9239 17420 7008 17420 7008 17421 9239 17421 9237 17421 7008 17422 9237 17422 7009 17422 7009 17423 9237 17423 9238 17423 7009 17424 9238 17424 7028 17424 7028 17425 9238 17425 9257 17425 7028 17426 9257 17426 7029 17426 7029 17427 9257 17427 9256 17427 7029 17428 9256 17428 7021 17428 7021 17429 9256 17429 9265 17429 7021 17430 9265 17430 7022 17430 7022 17431 9265 17431 9266 17431 7022 17432 9266 17432 7023 17432 7023 17433 9266 17433 9267 17433 7023 17434 9267 17434 7039 17434 7039 17435 9267 17435 9251 17435 7039 17436 9251 17436 7040 17436 7040 17437 9251 17437 9250 17437 7040 17438 9250 17438 7041 17438 7041 17439 9250 17439 9247 17439 7041 17440 9247 17440 7042 17440 7042 17441 9247 17441 7043 17441 9511 17442 9540 17442 7006 17442 7006 17443 9540 17443 9541 17443 7006 17444 9541 17444 7007 17444 7007 17445 9541 17445 9542 17445 7007 17446 9542 17446 6991 17446 6991 17447 9542 17447 9543 17447 6991 17448 9543 17448 6990 17448 6990 17449 9543 17449 9544 17449 6990 17450 9544 17450 6976 17450 6976 17451 9544 17451 9545 17451 6976 17452 9545 17452 6977 17452 6977 17453 9545 17453 9546 17453 6977 17454 9546 17454 6978 17454 6978 17455 9546 17455 9547 17455 6978 17456 9547 17456 6979 17456 6979 17457 9547 17457 9548 17457 6979 17458 9548 17458 6992 17458 6992 17459 9548 17459 9549 17459 6992 17460 9549 17460 6993 17460 6993 17461 9549 17461 9550 17461 6993 17462 9550 17462 6980 17462 6980 17463 9550 17463 9551 17463 6980 17464 9551 17464 6981 17464 6981 17465 9551 17465 9552 17465 6981 17466 9552 17466 6982 17466 6982 17467 9552 17467 9553 17467 6982 17468 9553 17468 6983 17468 6983 17469 9553 17469 7046 17469 6983 17470 7046 17470 6984 17470 6984 17471 7046 17471 6985 17471 9246 17472 6999 17472 7043 17472 7043 17473 6999 17473 6998 17473 7043 17474 6998 17474 7030 17474 7030 17475 6998 17475 6997 17475 7030 17476 6997 17476 7031 17476 7031 17477 6997 17477 7005 17477 7031 17478 7005 17478 7032 17478 7032 17479 7005 17479 6989 17479 7032 17480 6989 17480 7038 17480 7038 17481 6989 17481 6988 17481 7038 17482 6988 17482 7024 17482 7024 17483 6988 17483 6973 17483 7024 17484 6973 17484 7010 17484 7010 17485 6973 17485 7004 17485 7010 17486 7004 17486 7036 17486 7036 17487 7004 17487 7003 17487 7036 17488 7003 17488 7025 17488 7025 17489 7003 17489 7001 17489 7025 17490 7001 17490 7034 17490 7034 17491 7001 17491 7000 17491 7034 17492 7000 17492 7035 17492 7035 17493 7000 17493 7002 17493 7035 17494 7002 17494 7033 17494 7033 17495 7002 17495 6996 17495 7033 17496 6996 17496 7026 17496 7026 17497 6996 17497 6995 17497 7026 17498 6995 17498 7027 17498 7027 17499 6995 17499 6994 17499 7027 17500 6994 17500 7037 17500 7037 17501 6994 17501 6972 17501 7037 17502 6972 17502 7011 17502 7011 17503 6972 17503 6974 17503 7011 17504 6974 17504 7012 17504 7012 17505 6974 17505 6975 17505 7012 17506 6975 17506 7013 17506 7013 17507 6975 17507 6987 17507 7013 17508 6987 17508 7014 17508 7014 17509 6987 17509 6986 17509 7014 17510 6986 17510 7015 17510 7015 17511 6986 17511 6985 17511 7015 17512 6985 17512 7016 17512 7016 17513 6985 17513 7046 17513 7016 17514 7046 17514 7047 17514 9554 17515 9243 17515 9255 17515 9554 17516 9255 17516 9555 17516 9555 17517 9255 17517 9261 17517 9555 17518 9261 17518 9556 17518 9556 17519 9261 17519 9259 17519 9556 17520 9259 17520 9557 17520 9557 17521 9259 17521 9258 17521 9557 17522 9258 17522 9558 17522 9558 17523 9258 17523 7045 17523 9558 17524 7045 17524 7044 17524 7321 17669 9595 17669 7322 17669 7322 17670 9595 17670 9596 17670 7322 17671 9596 17671 7323 17671 7323 17672 9596 17672 9597 17672 7323 17673 9597 17673 7324 17673 7324 17674 9597 17674 9598 17674 7324 17675 9598 17675 7325 17675 7325 17676 9598 17676 9599 17676 7325 17677 9599 17677 7326 17677 7326 17678 9599 17678 9600 17678 7326 17679 9600 17679 7327 17679 7327 17680 9600 17680 9601 17680 7327 17681 9601 17681 7328 17681 7328 17682 9601 17682 9602 17682 7328 17683 9602 17683 7329 17683 7329 17684 9602 17684 9603 17684 7329 17685 9603 17685 7330 17685 7330 17686 9603 17686 9604 17686 7330 17687 9604 17687 7331 17687 7331 17688 9604 17688 9605 17688 7331 17689 9605 17689 7332 17689 7332 17690 9605 17690 9606 17690 7332 17691 9606 17691 7333 17691 7333 17692 9606 17692 9607 17692 7333 17693 9607 17693 7334 17693 7334 17694 9607 17694 9608 17694 7334 17695 9608 17695 7335 17695 7335 17696 9608 17696 9609 17696 7335 17697 9609 17697 7336 17697 7336 17698 9609 17698 9610 17698 7336 17699 9610 17699 7337 17699 7337 17700 9610 17700 9611 17700 7337 17701 9611 17701 7338 17701 7338 17702 9611 17702 9612 17702 7338 17703 9612 17703 7339 17703 7339 17704 9612 17704 9613 17704 7339 17705 9613 17705 7340 17705 7340 17706 9613 17706 9614 17706 7340 17707 9614 17707 7341 17707 7341 17708 9614 17708 9615 17708 7341 17709 9615 17709 7342 17709 7342 17710 9615 17710 9616 17710 7342 17711 9616 17711 7343 17711 7343 17712 9616 17712 9617 17712 7343 17713 9617 17713 7308 17713 7308 17714 9617 17714 9618 17714 7308 17715 9618 17715 7309 17715 7309 17716 9618 17716 9619 17716 7309 17717 9619 17717 7310 17717 7310 17718 9619 17718 9620 17718 7310 17719 9620 17719 7311 17719 7311 17720 9620 17720 9621 17720 7311 17721 9621 17721 7312 17721 7312 17722 9621 17722 9622 17722 7312 17723 9622 17723 7313 17723 7313 17724 9622 17724 9623 17724 7313 17725 9623 17725 7314 17725 7314 17726 9623 17726 9624 17726 7314 17727 9624 17727 7315 17727 7315 17728 9624 17728 9625 17728 7315 17729 9625 17729 7316 17729 7316 17730 9625 17730 9626 17730 7316 17731 9626 17731 7317 17731 7317 17732 9626 17732 9627 17732 7317 17733 9627 17733 7318 17733 7318 17734 9627 17734 9628 17734 7318 17735 9628 17735 7319 17735 7319 17736 9628 17736 9629 17736 7319 17737 9629 17737 7320 17737 7320 17738 9629 17738 9630 17738 7320 17739 9630 17739 7321 17739 7321 17740 9630 17740 9595 17740 9631 17741 9632 17741 9633 17741 9633 17742 9632 17742 9634 17742 9635 17743 9636 17743 9631 17743 9631 17744 9636 17744 9637 17744 9637 17745 9638 17745 9631 17745 9631 17746 9638 17746 9639 17746 9631 17747 9639 17747 9632 17747 9640 17748 9641 17748 9642 17748 9642 17749 9641 17749 9643 17749 9642 17750 9643 17750 9635 17750 9635 17751 9643 17751 9644 17751 9635 17752 9644 17752 9636 17752 9640 17753 9642 17753 9645 17753 9645 17754 9642 17754 9646 17754 9645 17755 9646 17755 9647 17755 9647 17756 9648 17756 9645 17756 9645 17757 9648 17757 9649 17757 9645 17758 9649 17758 9650 17758 9650 17759 9649 17759 9651 17759 9650 17760 9651 17760 9652 17760 9652 17761 9651 17761 9653 17761 9652 17762 9653 17762 9654 17762 9654 17763 9653 17763 9655 17763 9655 17764 9653 17764 9656 17764 9656 17765 9653 17765 9657 17765 9656 17766 9657 17766 9658 17766 9659 17767 9660 17767 9658 17767 9658 17768 9660 17768 9661 17768 9661 17769 9662 17769 9658 17769 9658 17770 9662 17770 9663 17770 9658 17771 9663 17771 9656 17771 9659 17772 9664 17772 9660 17772 9660 17773 9664 17773 9665 17773 9660 17774 9665 17774 9666 17774 9666 17775 9667 17775 9660 17775 9660 17776 9667 17776 9668 17776 9660 17777 9668 17777 9669 17777 9669 17778 9668 17778 9670 17778 9669 17779 9670 17779 9671 17779 9672 17780 9673 17780 9674 17780 9674 17781 9675 17781 9672 17781 9672 17782 9675 17782 9676 17782 9672 17783 9676 17783 9677 17783 9677 17784 9676 17784 9678 17784 9671 17785 9670 17785 9679 17785 9679 17786 9670 17786 9680 17786 9679 17787 9680 17787 9676 17787 9676 17788 9680 17788 9681 17788 9676 17789 9681 17789 9678 17789 9682 17790 9683 17790 9684 17790 9684 17791 9683 17791 9685 17791 9682 17792 9684 17792 9672 17792 9672 17793 9684 17793 9686 17793 9672 17794 9686 17794 9673 17794 9687 17795 9688 17795 9689 17795 9689 17796 9688 17796 9690 17796 9689 17797 9690 17797 9691 17797 9685 17798 9683 17798 9692 17798 9692 17799 9683 17799 9693 17799 9692 17800 9693 17800 9691 17800 9691 17801 9693 17801 9694 17801 9691 17802 9694 17802 9689 17802 9695 17803 9696 17803 9697 17803 9697 17804 9696 17804 9698 17804 9699 17805 9700 17805 9687 17805 9687 17806 9700 17806 9701 17806 9687 17807 9701 17807 9702 17807 9702 17808 9703 17808 9687 17808 9687 17809 9703 17809 9704 17809 9687 17810 9704 17810 9688 17810 9688 17811 9704 17811 9705 17811 9688 17812 9705 17812 9706 17812 9706 17813 9707 17813 9688 17813 9688 17814 9707 17814 9696 17814 9688 17815 9696 17815 9708 17815 9708 17816 9696 17816 9695 17816 9699 17817 9709 17817 9700 17817 9700 17818 9709 17818 9710 17818 9700 17819 9710 17819 9711 17819 7357 17820 9712 17820 7358 17820 7358 17821 9712 17821 9713 17821 7358 17822 9713 17822 7359 17822 7359 17823 9713 17823 9714 17823 7359 17824 9714 17824 7360 17824 7360 17825 9714 17825 9715 17825 7360 17826 9715 17826 7361 17826 7361 17827 9715 17827 9716 17827 7361 17828 9716 17828 7362 17828 7362 17829 9716 17829 9717 17829 7362 17830 9717 17830 7363 17830 7363 17831 9717 17831 9718 17831 7363 17832 9718 17832 7364 17832 7364 17833 9718 17833 9719 17833 7364 17834 9719 17834 7365 17834 7365 17835 9719 17835 9720 17835 7365 17836 9720 17836 7366 17836 7366 17837 9720 17837 9721 17837 7366 17838 9721 17838 7367 17838 7367 17839 9721 17839 9722 17839 7367 17840 9722 17840 7368 17840 7368 17841 9722 17841 9723 17841 7368 17842 9723 17842 7369 17842 7369 17843 9723 17843 9724 17843 7369 17844 9724 17844 7370 17844 7370 17845 9724 17845 9725 17845 7370 17846 9725 17846 7371 17846 7371 17847 9725 17847 9726 17847 7371 17848 9726 17848 7372 17848 7372 17849 9726 17849 9727 17849 7372 17850 9727 17850 7373 17850 7373 17851 9727 17851 9728 17851 7373 17852 9728 17852 7374 17852 7374 17853 9728 17853 9729 17853 7374 17854 9729 17854 7375 17854 7375 17855 9729 17855 9730 17855 7375 17856 9730 17856 7376 17856 7376 17857 9730 17857 9731 17857 7376 17858 9731 17858 7377 17858 7377 17859 9731 17859 9732 17859 7377 17860 9732 17860 7378 17860 7378 17861 9732 17861 9733 17861 7378 17862 9733 17862 7379 17862 7379 17863 9733 17863 9734 17863 7379 17864 9734 17864 7344 17864 7344 17865 9734 17865 9735 17865 7344 17866 9735 17866 7345 17866 7345 17867 9735 17867 9736 17867 7345 17868 9736 17868 7346 17868 7346 17869 9736 17869 9737 17869 7346 17870 9737 17870 7347 17870 7347 17871 9737 17871 9738 17871 7347 17872 9738 17872 7348 17872 7348 17873 9738 17873 9739 17873 7348 17874 9739 17874 7349 17874 7349 17875 9739 17875 9740 17875 7349 17876 9740 17876 7350 17876 7350 17877 9740 17877 9741 17877 7350 17878 9741 17878 7351 17878 7351 17879 9741 17879 9742 17879 7351 17880 9742 17880 7352 17880 7352 17881 9742 17881 9743 17881 7352 17882 9743 17882 7353 17882 7353 17883 9743 17883 9744 17883 7353 17884 9744 17884 7354 17884 7354 17885 9744 17885 9745 17885 7354 17886 9745 17886 7355 17886 7355 17887 9745 17887 9746 17887 7355 17888 9746 17888 7356 17888 7356 17889 9746 17889 9747 17889 7356 17890 9747 17890 7357 17890 7357 17891 9747 17891 9712 17891 9784 18036 9785 18036 9786 18036 8354 18037 8353 18037 9787 18037 8370 18038 8369 18038 8313 18038 7895 18039 7891 18039 7890 18039 9788 18040 9789 18040 7677 18040 9790 18041 7682 18041 9791 18041 9791 18042 7682 18042 7681 18042 9791 18043 7681 18043 7680 18043 7680 18044 7679 18044 9789 18044 9789 18045 7679 18045 7678 18045 9789 18046 7678 18046 7677 18046 7643 18047 7642 18047 9792 18047 7643 18048 9792 18048 7644 18048 7642 18049 7641 18049 9792 18049 9792 18050 7641 18050 7640 18050 9792 18051 7640 18051 9790 18051 9790 18052 7640 18052 7683 18052 9790 18053 7683 18053 7682 18053 7644 18054 9792 18054 7645 18054 7645 18055 9792 18055 9793 18055 7645 18056 9793 18056 7646 18056 7653 18057 7652 18057 9794 18057 9794 18058 7652 18058 7651 18058 9794 18059 7651 18059 7650 18059 7650 18060 7649 18060 9794 18060 9794 18061 7649 18061 7648 18061 9794 18062 7648 18062 9793 18062 9793 18063 7648 18063 7647 18063 9793 18064 7647 18064 7646 18064 8341 18065 8340 18065 7662 18065 7662 18066 7661 18066 8341 18066 8341 18067 7661 18067 7660 18067 8341 18068 7660 18068 7659 18068 7658 18069 7657 18069 9785 18069 7657 18070 7656 18070 9785 18070 9785 18071 7656 18071 7655 18071 9785 18072 7655 18072 7654 18072 7665 18073 7664 18073 8340 18073 8340 18074 7664 18074 7663 18074 8340 18075 7663 18075 7662 18075 7665 18076 8340 18076 7666 18076 7666 18077 8340 18077 8339 18077 7666 18078 8339 18078 7667 18078 7667 18079 8339 18079 8394 18079 7667 18080 8394 18080 7668 18080 7668 18081 8394 18081 8436 18081 7668 18082 8436 18082 8443 18082 8443 18083 8442 18083 7668 18083 7668 18084 8442 18084 8441 18084 7668 18085 8441 18085 8440 18085 8440 18086 8449 18086 7668 18086 7668 18087 8449 18087 8448 18087 7668 18088 8448 18088 7669 18088 7669 18089 8448 18089 8447 18089 7669 18090 8447 18090 8446 18090 7672 18091 7671 18091 8454 18091 8454 18092 7671 18092 7670 18092 8454 18093 7670 18093 8455 18093 8455 18094 7670 18094 7669 18094 8446 18095 8452 18095 7669 18095 7669 18096 8452 18096 8451 18096 7669 18097 8451 18097 8455 18097 8453 18098 7674 18098 8454 18098 8454 18099 7674 18099 7673 18099 8454 18100 7673 18100 7672 18100 7677 18101 7676 18101 9788 18101 9788 18102 7676 18102 7675 18102 9788 18103 7675 18103 8399 18103 8399 18104 7675 18104 7674 18104 8399 18105 7674 18105 8400 18105 8400 18106 7674 18106 8453 18106 7724 18107 9696 18107 7725 18107 7725 18108 9696 18108 9707 18108 7719 18109 7718 18109 9706 18109 9706 18110 7718 18110 7717 18110 7723 18111 7722 18111 9795 18111 7717 18112 7716 18112 9706 18112 9706 18113 7716 18113 7715 18113 9706 18114 7715 18114 7714 18114 7722 18115 7721 18115 9706 18115 9706 18116 7721 18116 7720 18116 9706 18117 7720 18117 7719 18117 7714 18118 7713 18118 9706 18118 9706 18119 7713 18119 7727 18119 9706 18120 7727 18120 9707 18120 9707 18121 7727 18121 7726 18121 9707 18122 7726 18122 7725 18122 7702 18123 7703 18123 9795 18123 9795 18124 7703 18124 7704 18124 9795 18125 7704 18125 7712 18125 7712 18126 7711 18126 9795 18126 9795 18127 7711 18127 7710 18127 9795 18128 7710 18128 7723 18128 7759 18129 7758 18129 9795 18129 7759 18130 9795 18130 7760 18130 7697 18131 7698 18131 7774 18131 7774 18132 7698 18132 7709 18132 7774 18133 7709 18133 7708 18133 7708 18134 7707 18134 7774 18134 7774 18135 7707 18135 7706 18135 7774 18136 7706 18136 7758 18136 7758 18137 7706 18137 7705 18137 7758 18138 7705 18138 9795 18138 9795 18139 7705 18139 7701 18139 9795 18140 7701 18140 7702 18140 7751 18141 7750 18141 9796 18141 7849 18142 7848 18142 7795 18142 7769 18143 7768 18143 9797 18143 9797 18144 7768 18144 7767 18144 7750 18145 7749 18145 9796 18145 9796 18146 7749 18146 7748 18146 9796 18147 7748 18147 7747 18147 7767 18148 7766 18148 9797 18148 9797 18149 7766 18149 7765 18149 9797 18150 7765 18150 7764 18150 7833 18151 7832 18151 9796 18151 9796 18152 7832 18152 7831 18152 9796 18153 7831 18153 7751 18153 7849 18154 7795 18154 7850 18154 7850 18155 7795 18155 7794 18155 7850 18156 7794 18156 7851 18156 7764 18157 7763 18157 9797 18157 9797 18158 7763 18158 7762 18158 9797 18159 7762 18159 7761 18159 7785 18160 7784 18160 7700 18160 7700 18161 7784 18161 7783 18161 7783 18162 7782 18162 7700 18162 7700 18163 7782 18163 7781 18163 7700 18164 7781 18164 7780 18164 7780 18165 7779 18165 7700 18165 7700 18166 7779 18166 7778 18166 7700 18167 7778 18167 7777 18167 7831 18168 7830 18168 7751 18168 7751 18169 7830 18169 7829 18169 7751 18170 7829 18170 7752 18170 7752 18171 7829 18171 7828 18171 7812 18172 7823 18172 9796 18172 9796 18173 7823 18173 7822 18173 9796 18174 7822 18174 7821 18174 7821 18175 7820 18175 9796 18175 9796 18176 7820 18176 7834 18176 9796 18177 7834 18177 7833 18177 7785 18178 7700 18178 7771 18178 7771 18179 7700 18179 7699 18179 7771 18180 7699 18180 7772 18180 7787 18181 7786 18181 7848 18181 7848 18182 7786 18182 7796 18182 7848 18183 7796 18183 7795 18183 7756 18184 7757 18184 9797 18184 9797 18185 7757 18185 7770 18185 9797 18186 7770 18186 7769 18186 7697 18187 7774 18187 7699 18187 7699 18188 7774 18188 7773 18188 7699 18189 7773 18189 7772 18189 7747 18190 7746 18190 9796 18190 9796 18191 7746 18191 7745 18191 9796 18192 7745 18192 7756 18192 7828 18193 7827 18193 7752 18193 7752 18194 7827 18194 7826 18194 7752 18195 7826 18195 7753 18195 7753 18196 7826 18196 7825 18196 7851 18197 7794 18197 7835 18197 7835 18198 7794 18198 7793 18198 7835 18199 7793 18199 7836 18199 7836 18200 7793 18200 7792 18200 7836 18201 7792 18201 7791 18201 7776 18202 7775 18202 7848 18202 7848 18203 7775 18203 7788 18203 7848 18204 7788 18204 7787 18204 7791 18205 7790 18205 7836 18205 7836 18206 7790 18206 7789 18206 7836 18207 7789 18207 7837 18207 7789 18208 7798 18208 7837 18208 7837 18209 7798 18209 7797 18209 7837 18210 7797 18210 7824 18210 7824 18211 7797 18211 7755 18211 7824 18212 7755 18212 7825 18212 7825 18213 7755 18213 7754 18213 7825 18214 7754 18214 7753 18214 7845 18215 7844 18215 7688 18215 7688 18216 7844 18216 7843 18216 7688 18217 7843 18217 7842 18217 7847 18218 7687 18218 7686 18218 7687 18219 7847 18219 7688 18219 7688 18220 7847 18220 7846 18220 7688 18221 7846 18221 7845 18221 7842 18222 7841 18222 7688 18222 7688 18223 7841 18223 7840 18223 7688 18224 7840 18224 9798 18224 7777 18225 7776 18225 7700 18225 7700 18226 7776 18226 7848 18226 7700 18227 7848 18227 7684 18227 7684 18228 7848 18228 7847 18228 7684 18229 7847 18229 7685 18229 7685 18230 7847 18230 7686 18230 7840 18231 7839 18231 9798 18231 9798 18232 7839 18232 7838 18232 9798 18233 7838 18233 7855 18233 7692 18234 7691 18234 9799 18234 9799 18235 7691 18235 7690 18235 9799 18236 7690 18236 9798 18236 9798 18237 7690 18237 7689 18237 9798 18238 7689 18238 7688 18238 9800 18239 7694 18239 9799 18239 9799 18240 7694 18240 7693 18240 9799 18241 7693 18241 7692 18241 7742 18242 7696 18242 9800 18242 9800 18243 7696 18243 7695 18243 9800 18244 7695 18244 7694 18244 7744 18245 7743 18245 9801 18245 9801 18246 7743 18246 7742 18246 7732 18247 7733 18247 9698 18247 7733 18248 7734 18248 9698 18248 9698 18249 7734 18249 7735 18249 9698 18250 7735 18250 7736 18250 7724 18251 7741 18251 9696 18251 9696 18252 7741 18252 7740 18252 9696 18253 7740 18253 7728 18253 7728 18254 7729 18254 9696 18254 9696 18255 7729 18255 7730 18255 9696 18256 7730 18256 9698 18256 9698 18257 7730 18257 7731 18257 9698 18258 7731 18258 7732 18258 7736 18259 7737 18259 9698 18259 9698 18260 7737 18260 7738 18260 9698 18261 7738 18261 9801 18261 9801 18262 7738 18262 7739 18262 9801 18263 7739 18263 7744 18263 7807 18264 7806 18264 9792 18264 9792 18265 7806 18265 7805 18265 9792 18266 7805 18266 7804 18266 7804 18267 7803 18267 9792 18267 9792 18268 7803 18268 7802 18268 9792 18269 7802 18269 7801 18269 7852 18270 7809 18270 9792 18270 9792 18271 7809 18271 7808 18271 9792 18272 7808 18272 7807 18272 9793 18273 7817 18273 7816 18273 7810 18274 7819 18274 9793 18274 9793 18275 7819 18275 7818 18275 9793 18276 7818 18276 7817 18276 7816 18277 7815 18277 9793 18277 9793 18278 7815 18278 7814 18278 9793 18279 7814 18279 7813 18279 7801 18280 7800 18280 9792 18280 9792 18281 7800 18281 7799 18281 9792 18282 7799 18282 9793 18282 9793 18283 7799 18283 7811 18283 9793 18284 7811 18284 7810 18284 7852 18285 9792 18285 7853 18285 7853 18286 9792 18286 9790 18286 7853 18287 9790 18287 7854 18287 7911 18288 7912 18288 9787 18288 9787 18289 7912 18289 7932 18289 9787 18290 7932 18290 7931 18290 9787 18291 9374 18291 9375 18291 7915 18292 7914 18292 9802 18292 9802 18293 7914 18293 7913 18293 7919 18294 7918 18294 9802 18294 7919 18295 9802 18295 7920 18295 7918 18296 7917 18296 9802 18296 9802 18297 7917 18297 7916 18297 9802 18298 7916 18298 7915 18298 9803 18299 7909 18299 7908 18299 7908 18300 7907 18300 9803 18300 9803 18301 7907 18301 7906 18301 9803 18302 7906 18302 7905 18302 7905 18303 7904 18303 9803 18303 9803 18304 7904 18304 7903 18304 9803 18305 7903 18305 7902 18305 7902 18306 7901 18306 9803 18306 9803 18307 7901 18307 7900 18307 9803 18308 7900 18308 9802 18308 9802 18309 7900 18309 7921 18309 9802 18310 7921 18310 7920 18310 7887 18311 7893 18311 7894 18311 7893 18312 7887 18312 7896 18312 7896 18313 7887 18313 7886 18313 7896 18314 7886 18314 7895 18314 7895 18315 7886 18315 7892 18315 7895 18316 7892 18316 7891 18316 7894 18317 7898 18317 7887 18317 7887 18318 7898 18318 7899 18318 7887 18319 7899 18319 7897 18319 9804 18320 9805 18320 9711 18320 9711 18321 9805 18321 9806 18321 9700 18322 9711 18322 7885 18322 7885 18323 9711 18323 7879 18323 7897 18324 7910 18324 7887 18324 7887 18325 7910 18325 9807 18325 7887 18326 9807 18326 7888 18326 9806 18327 9808 18327 9711 18327 9711 18328 9808 18328 9809 18328 9711 18329 9809 18329 9810 18329 9810 18330 9809 18330 9811 18330 9810 18331 9811 18331 9812 18331 7885 18332 7884 18332 9700 18332 9700 18333 7884 18333 7883 18333 9700 18334 7883 18334 7882 18334 7881 18335 7880 18335 9807 18335 9807 18336 7880 18336 7889 18336 9807 18337 7889 18337 7888 18337 9812 18338 9813 18338 9814 18338 9814 18339 9815 18339 9812 18339 9812 18340 9815 18340 9816 18340 9812 18341 9816 18341 9810 18341 9817 18342 7876 18342 9810 18342 9810 18343 7876 18343 7877 18343 9810 18344 7877 18344 9711 18344 9711 18345 7877 18345 7878 18345 9711 18346 7878 18346 7879 18346 9817 18347 7870 18347 7871 18347 7871 18348 7875 18348 9817 18348 9817 18349 7875 18349 7874 18349 9817 18350 7874 18350 7876 18350 7926 18351 7925 18351 9372 18351 9818 18352 9819 18352 7860 18352 7929 18353 7928 18353 9372 18353 9372 18354 7928 18354 7927 18354 9372 18355 7927 18355 7926 18355 7859 18356 7858 18356 9817 18356 9817 18357 7858 18357 7857 18357 7862 18358 7866 18358 7863 18358 7863 18359 7866 18359 7869 18359 9374 18360 9787 18360 9373 18360 9373 18361 9787 18361 7931 18361 9373 18362 7931 18362 9372 18362 9372 18363 7931 18363 7930 18363 9372 18364 7930 18364 7929 18364 7859 18365 9817 18365 7860 18365 7860 18366 9817 18366 9820 18366 7860 18367 9820 18367 9818 18367 7869 18368 7868 18368 7863 18368 7863 18369 7868 18369 7867 18369 7863 18370 7867 18370 7864 18370 7864 18371 7867 18371 7872 18371 7925 18372 7924 18372 9372 18372 9372 18373 7924 18373 7923 18373 9372 18374 7923 18374 9370 18374 9370 18375 7923 18375 9821 18375 9821 18376 7923 18376 9822 18376 9822 18377 7923 18377 7922 18377 9822 18378 7922 18378 9819 18378 9819 18379 7922 18379 7861 18379 9819 18380 7861 18380 7860 18380 7872 18381 7873 18381 7864 18381 7864 18382 7873 18382 7870 18382 7864 18383 7870 18383 7865 18383 7865 18384 7870 18384 9817 18384 7865 18385 9817 18385 7856 18385 7856 18386 9817 18386 7857 18386 9823 18387 8055 18387 8054 18387 8038 18388 8037 18388 9824 18388 9824 18389 8037 18389 8036 18389 9824 18390 8036 18390 8034 18390 8042 18391 8041 18391 9824 18391 9825 18392 8032 18392 8031 18392 8042 18393 9824 18393 8043 18393 8041 18394 8040 18394 9824 18394 9824 18395 8040 18395 8039 18395 9824 18396 8039 18396 8038 18396 8031 18397 8030 18397 9825 18397 9825 18398 8030 18398 8029 18398 9825 18399 8029 18399 8028 18399 8028 18400 8027 18400 9825 18400 9825 18401 8027 18401 8026 18401 9825 18402 8026 18402 8025 18402 8025 18403 8024 18403 9825 18403 9825 18404 8024 18404 8023 18404 9825 18405 8023 18405 9824 18405 9824 18406 8023 18406 8044 18406 9824 18407 8044 18407 8043 18407 8033 18408 9826 18408 8011 18408 8011 18409 9826 18409 9827 18409 8011 18410 9827 18410 8012 18410 8012 18411 9827 18411 8013 18411 8015 18412 8014 18412 9828 18412 8051 18413 8050 18413 9829 18413 9829 18414 8050 18414 8049 18414 9829 18415 8049 18415 8048 18415 8015 18416 9828 18416 8016 18416 8054 18417 8053 18417 9829 18417 9829 18418 8053 18418 8052 18418 9829 18419 8052 18419 8051 18419 8019 18420 8018 18420 9828 18420 9828 18421 8018 18421 8017 18421 9828 18422 8017 18422 8016 18422 8022 18423 8021 18423 9828 18423 9828 18424 8021 18424 8020 18424 9828 18425 8020 18425 8019 18425 8048 18426 8047 18426 9829 18426 9829 18427 8047 18427 8046 18427 9829 18428 8046 18428 8045 18428 8156 18429 8157 18429 9794 18429 9794 18430 8157 18430 9785 18430 9794 18431 9785 18431 7653 18431 7653 18432 9785 18432 7654 18432 8160 18433 8159 18433 9830 18433 9830 18434 8159 18434 8158 18434 8164 18435 8163 18435 9830 18435 9831 18436 8154 18436 8153 18436 8164 18437 9830 18437 8165 18437 8163 18438 8162 18438 9830 18438 9830 18439 8162 18439 8161 18439 9830 18440 8161 18440 8160 18440 8153 18441 8152 18441 9831 18441 9831 18442 8152 18442 8151 18442 9831 18443 8151 18443 8150 18443 8150 18444 8149 18444 9831 18444 9831 18445 8149 18445 8148 18445 9831 18446 8148 18446 8147 18446 8147 18447 8146 18447 9831 18447 9831 18448 8146 18448 8145 18448 9831 18449 8145 18449 9830 18449 9830 18450 8145 18450 8166 18450 9830 18451 8166 18451 8165 18451 8155 18452 9832 18452 8133 18452 8133 18453 9832 18453 9833 18453 8133 18454 9833 18454 8134 18454 8134 18455 9833 18455 8135 18455 8171 18456 8170 18456 9786 18456 9786 18457 8170 18457 8169 18457 9786 18458 8169 18458 8168 18458 8174 18459 8173 18459 9786 18459 9786 18460 8173 18460 8172 18460 9786 18461 8172 18461 8171 18461 8139 18462 8138 18462 9834 18462 9834 18463 8138 18463 8137 18463 9834 18464 8137 18464 8136 18464 8157 18465 8177 18465 9785 18465 9785 18466 8177 18466 8176 18466 9785 18467 8176 18467 9786 18467 9786 18468 8176 18468 8175 18468 9786 18469 8175 18469 8174 18469 8142 18470 8141 18470 9834 18470 9834 18471 8141 18471 8140 18471 9834 18472 8140 18472 8139 18472 8168 18473 8167 18473 9786 18473 9786 18474 8167 18474 8144 18474 9786 18475 8144 18475 9834 18475 9834 18476 8144 18476 8143 18476 9834 18477 8143 18477 8142 18477 9804 18478 9835 18478 9836 18478 9836 18479 9837 18479 9804 18479 9804 18480 9837 18480 9838 18480 9804 18481 9838 18481 9805 18481 7722 18482 9706 18482 9795 18482 9795 18483 9706 18483 9705 18483 9795 18484 9705 18484 9832 18484 9832 18485 9705 18485 9704 18485 9832 18486 9704 18486 9833 18486 9833 18487 9704 18487 9703 18487 9833 18488 9703 18488 9826 18488 9826 18489 9703 18489 9702 18489 9826 18490 9702 18490 9827 18490 9827 18491 9702 18491 9701 18491 9827 18492 9701 18492 9839 18492 9839 18493 9701 18493 9700 18493 9839 18494 9700 18494 9807 18494 9807 18495 9700 18495 7882 18495 9807 18496 7882 18496 7881 18496 9801 18497 9840 18497 9698 18497 9698 18498 9840 18498 9841 18498 9698 18499 9841 18499 9842 18499 9842 18500 9841 18500 9843 18500 9842 18501 9843 18501 9844 18501 9844 18502 9845 18502 9842 18502 9842 18503 9845 18503 9846 18503 9842 18504 9846 18504 9847 18504 9848 18505 9849 18505 9801 18505 9849 18506 9850 18506 9801 18506 9801 18507 9850 18507 9851 18507 9801 18508 9851 18508 9840 18508 9852 18509 9848 18509 9853 18509 9853 18510 9848 18510 9801 18510 9853 18511 9801 18511 9854 18511 9854 18512 9801 18512 9855 18512 7742 18513 9800 18513 9801 18513 9801 18514 9800 18514 9856 18514 9801 18515 9856 18515 9855 18515 9857 18516 9858 18516 9799 18516 9799 18517 9858 18517 9859 18517 9859 18518 9860 18518 9799 18518 9799 18519 9860 18519 9861 18519 9799 18520 9861 18520 9862 18520 9862 18521 9863 18521 9799 18521 9799 18522 9863 18522 9864 18522 9799 18523 9864 18523 9800 18523 9800 18524 9864 18524 9865 18524 9800 18525 9865 18525 9856 18525 9866 18526 9867 18526 9791 18526 9791 18527 9867 18527 9868 18527 9791 18528 9868 18528 9869 18528 9870 18529 9871 18529 9791 18529 9872 18530 9873 18530 9791 18530 9791 18531 9873 18531 9874 18531 9791 18532 9874 18532 9875 18532 9871 18533 9876 18533 9791 18533 9791 18534 9876 18534 9877 18534 9791 18535 9877 18535 9872 18535 9875 18536 9878 18536 9791 18536 9791 18537 9878 18537 9879 18537 9791 18538 9879 18538 9866 18538 7680 18539 9789 18539 9791 18539 9791 18540 9789 18540 9880 18540 9791 18541 9880 18541 9870 18541 8370 18542 8313 18542 8371 18542 8371 18543 8313 18543 8255 18543 8371 18544 8255 18544 8254 18544 8355 18545 8354 18545 9368 18545 9368 18546 8354 18546 9787 18546 9368 18547 9787 18547 9366 18547 9366 18548 9787 18548 9375 18548 8312 18549 8263 18549 8369 18549 8310 18550 8368 18550 8367 18550 8368 18551 8310 18551 8369 18551 8369 18552 8310 18552 8311 18552 8369 18553 8311 18553 8312 18553 8367 18554 8366 18554 8310 18554 8310 18555 8366 18555 8365 18555 8310 18556 8365 18556 9504 18556 9504 18557 8365 18557 8364 18557 9504 18558 8364 18558 8363 18558 8263 18559 8262 18559 8369 18559 8369 18560 8262 18560 8260 18560 8369 18561 8260 18561 8259 18561 8358 18562 9368 18562 8359 18562 8359 18563 9368 18563 9369 18563 8358 18564 8357 18564 9368 18564 9368 18565 8357 18565 8356 18565 9368 18566 8356 18566 8355 18566 8259 18567 8257 18567 8369 18567 8369 18568 8257 18568 8256 18568 8369 18569 8256 18569 8316 18569 9283 18570 8360 18570 9284 18570 9284 18571 8360 18571 8359 18571 9284 18572 8359 18572 9280 18572 8316 18573 8315 18573 8369 18573 8369 18574 8315 18574 8314 18574 8369 18575 8314 18575 8313 18575 8363 18576 8362 18576 9504 18576 9504 18577 8362 18577 8361 18577 9504 18578 8361 18578 9271 18578 9271 18579 8361 18579 8360 18579 9271 18580 8360 18580 9272 18580 9272 18581 8360 18581 9283 18581 9369 18582 9269 18582 8359 18582 8359 18583 9269 18583 9268 18583 8359 18584 9268 18584 9287 18584 9287 18585 9286 18585 8359 18585 8359 18586 9286 18586 9281 18586 8359 18587 9281 18587 9280 18587 8388 18588 9784 18588 9823 18588 9823 18589 9784 18589 8035 18589 9823 18590 8035 18590 8055 18590 8388 18591 8387 18591 9784 18591 9784 18592 8387 18592 8386 18592 9784 18593 8386 18593 8385 18593 8379 18594 8342 18594 8380 18594 8380 18595 8342 18595 8381 18595 8385 18596 8384 18596 9784 18596 9784 18597 8384 18597 8383 18597 9784 18598 8383 18598 8382 18598 8349 18599 8348 18599 9823 18599 9823 18600 8348 18600 8389 18600 9823 18601 8389 18601 8388 18601 8054 18602 9829 18602 9823 18602 9823 18603 9829 18603 9881 18603 9823 18604 9881 18604 8349 18604 8352 18605 8351 18605 9881 18605 9881 18606 8351 18606 8350 18606 9881 18607 8350 18607 8349 18607 8379 18608 8378 18608 8342 18608 8342 18609 8378 18609 8377 18609 8342 18610 8377 18610 8343 18610 8343 18611 8377 18611 8376 18611 8343 18612 8376 18612 8375 18612 8254 18613 8269 18613 8371 18613 8371 18614 8269 18614 8271 18614 8371 18615 8271 18615 8372 18615 8372 18616 8271 18616 8344 18616 8372 18617 8344 18617 8373 18617 8373 18618 8344 18618 8343 18618 8373 18619 8343 18619 8374 18619 8374 18620 8343 18620 8375 18620 7659 18621 7658 18621 8341 18621 8341 18622 7658 18622 9785 18622 8341 18623 9785 18623 8342 18623 8342 18624 9785 18624 9784 18624 8342 18625 9784 18625 8381 18625 8381 18626 9784 18626 8382 18626 7913 18627 7911 18627 9802 18627 9802 18628 7911 18628 9787 18628 9802 18629 9787 18629 9882 18629 7813 18630 7812 18630 9793 18630 9793 18631 7812 18631 9796 18631 9793 18632 9796 18632 9794 18632 9794 18633 9796 18633 9830 18633 9794 18634 9830 18634 8156 18634 8156 18635 9830 18635 8158 18635 9869 18636 9857 18636 9791 18636 9791 18637 9857 18637 9799 18637 9791 18638 9799 18638 9790 18638 9790 18639 9799 18639 9798 18639 9790 18640 9798 18640 7854 18640 7854 18641 9798 18641 7855 18641 9883 18642 9803 18642 7941 18642 9882 18643 7959 18643 7960 18643 9802 18644 7962 18644 7940 18644 7944 18645 7951 18645 9882 18645 9882 18646 7951 18646 7958 18646 9882 18647 7958 18647 7957 18647 9802 18648 7940 18648 9803 18648 9803 18649 7940 18649 7939 18649 9803 18650 7939 18650 7938 18650 7957 18651 7956 18651 9882 18651 9882 18652 7956 18652 7955 18652 9882 18653 7955 18653 7954 18653 9882 18654 7960 18654 9802 18654 9802 18655 7960 18655 7961 18655 9802 18656 7961 18656 7968 18656 7965 18657 7964 18657 9802 18657 9802 18658 7964 18658 7963 18658 9802 18659 7963 18659 7962 18659 7938 18660 7937 18660 9803 18660 9803 18661 7937 18661 7936 18661 9803 18662 7936 18662 7935 18662 7947 18663 7950 18663 7948 18663 7948 18664 7950 18664 7949 18664 7941 18665 7942 18665 9883 18665 9883 18666 7942 18666 7943 18666 9883 18667 7943 18667 7945 18667 7945 18668 7943 18668 7950 18668 7945 18669 7950 18669 7946 18669 7946 18670 7950 18670 7947 18670 7954 18671 7953 18671 9882 18671 9882 18672 7953 18672 7952 18672 9882 18673 7952 18673 7959 18673 7935 18674 7934 18674 9803 18674 9803 18675 7934 18675 7933 18675 9803 18676 7933 18676 7941 18676 7968 18677 7967 18677 9802 18677 9802 18678 7967 18678 7966 18678 9802 18679 7966 18679 7965 18679 7976 18680 7977 18680 9829 18680 7945 18681 7944 18681 9883 18681 9883 18682 7944 18682 9882 18682 9883 18683 9882 18683 7979 18683 7979 18684 9882 18684 7978 18684 8353 18685 8352 18685 9787 18685 9787 18686 8352 18686 9881 18686 9787 18687 9881 18687 9882 18687 9882 18688 9881 18688 9829 18688 9882 18689 9829 18689 7978 18689 7978 18690 9829 18690 7977 18690 7998 18691 7997 18691 7980 18691 7989 18692 7988 18692 7979 18692 7979 18693 7988 18693 9883 18693 9883 18694 7988 18694 7999 18694 9883 18695 7999 18695 9828 18695 7995 18696 7994 18696 7979 18696 7979 18697 7994 18697 7993 18697 7979 18698 7993 18698 7992 18698 7984 18699 7983 18699 7987 18699 7999 18700 8000 18700 9828 18700 9828 18701 8000 18701 8001 18701 9828 18702 8001 18702 8009 18702 7980 18703 7997 18703 7979 18703 7979 18704 7997 18704 7996 18704 7979 18705 7996 18705 7995 18705 7983 18706 7982 18706 7987 18706 7987 18707 7982 18707 7981 18707 7987 18708 7981 18708 7986 18708 8006 18709 8005 18709 9828 18709 9828 18710 8005 18710 8004 18710 9828 18711 8004 18711 8003 18711 7998 18712 7980 18712 7987 18712 7987 18713 7980 18713 7985 18713 7987 18714 7985 18714 7984 18714 8045 18715 8022 18715 9829 18715 9829 18716 8022 18716 9828 18716 9829 18717 9828 18717 7976 18717 7976 18718 9828 18718 8003 18718 7976 18719 8003 18719 7969 18719 7969 18720 8003 18720 8002 18720 7969 18721 8002 18721 7970 18721 7992 18722 7991 18722 7979 18722 7979 18723 7991 18723 7990 18723 7979 18724 7990 18724 7989 18724 8009 18725 8008 18725 9828 18725 9828 18726 8008 18726 8007 18726 9828 18727 8007 18727 8006 18727 8010 18728 7975 18728 8002 18728 8002 18729 7975 18729 7974 18729 8002 18730 7974 18730 7973 18730 7973 18731 7972 18731 8002 18731 8002 18732 7972 18732 7971 18732 8002 18733 7971 18733 7970 18733 8062 18734 8061 18734 9825 18734 8062 18735 9825 18735 8063 18735 9825 18736 8058 18736 8057 18736 8061 18737 8060 18737 9825 18737 9825 18738 8060 18738 8059 18738 9825 18739 8059 18739 8058 18739 8110 18740 8109 18740 9824 18740 8126 18741 8125 18741 9824 18741 9824 18742 8125 18742 8124 18742 9824 18743 8124 18743 9825 18743 9825 18744 8124 18744 8064 18744 9825 18745 8064 18745 8063 18745 8057 18746 8056 18746 9825 18746 9825 18747 8056 18747 8068 18747 9825 18748 8068 18748 8067 18748 8110 18749 9824 18749 8111 18749 8072 18750 8075 18750 9834 18750 9834 18751 8075 18751 8079 18751 9834 18752 8079 18752 8078 18752 9786 18753 8094 18753 8093 18753 8109 18754 8108 18754 9824 18754 9824 18755 8108 18755 8107 18755 9824 18756 8107 18756 8106 18756 9834 18757 8070 18757 8069 18757 8078 18758 8077 18758 9834 18758 9834 18759 8077 18759 8076 18759 9834 18760 8076 18760 9786 18760 9786 18761 8076 18761 8086 18761 9786 18762 8086 18762 8094 18762 8093 18763 8092 18763 9786 18763 9786 18764 8092 18764 8091 18764 9786 18765 8091 18765 8090 18765 8128 18766 8127 18766 8117 18766 8067 18767 8066 18767 9825 18767 9825 18768 8066 18768 8065 18768 9825 18769 8065 18769 9834 18769 9834 18770 8065 18770 8071 18770 9834 18771 8071 18771 8070 18771 8082 18772 8081 18772 8075 18772 8075 18773 8081 18773 8080 18773 8075 18774 8080 18774 8079 18774 8090 18775 8089 18775 9786 18775 9786 18776 8089 18776 8088 18776 9786 18777 8088 18777 8087 18777 8099 18778 8104 18778 9824 18778 9824 18779 8104 18779 8103 18779 9824 18780 8103 18780 8102 18780 8106 18781 8105 18781 9824 18781 9824 18782 8105 18782 8122 18782 9824 18783 8122 18783 8126 18783 8117 18784 8127 18784 8118 18784 8069 18785 8074 18785 9834 18785 9834 18786 8074 18786 8073 18786 9834 18787 8073 18787 8072 18787 8102 18788 8113 18788 9824 18788 9824 18789 8113 18789 8112 18789 9824 18790 8112 18790 8111 18790 8087 18791 8095 18791 9786 18791 9786 18792 8095 18792 8098 18792 9786 18793 8098 18793 8097 18793 8122 18794 8121 18794 8126 18794 8126 18795 8121 18795 8120 18795 8126 18796 8120 18796 8127 18796 8127 18797 8120 18797 8119 18797 8127 18798 8119 18798 8118 18798 8128 18799 8117 18799 8129 18799 8129 18800 8117 18800 8116 18800 8129 18801 8116 18801 8130 18801 8114 18802 8123 18802 8115 18802 8115 18803 8123 18803 8132 18803 8115 18804 8132 18804 8116 18804 8116 18805 8132 18805 8131 18805 8116 18806 8131 18806 8130 18806 8082 18807 8075 18807 8083 18807 8083 18808 8075 18808 8085 18808 8083 18809 8085 18809 8084 18809 8097 18810 8096 18810 9786 18810 9786 18811 8096 18811 8101 18811 9786 18812 8101 18812 8100 18812 8100 18813 8099 18813 9786 18813 9786 18814 8099 18814 9824 18814 9786 18815 9824 18815 9784 18815 9784 18816 9824 18816 8034 18816 9784 18817 8034 18817 8035 18817 9797 18818 9831 18818 8240 18818 8201 18819 8200 18819 9830 18819 8201 18820 9830 18820 8202 18820 8210 18821 8209 18821 8218 18821 8238 18822 8237 18822 8229 18822 8234 18823 8233 18823 8229 18823 8229 18824 8233 18824 8232 18824 8229 18825 8232 18825 8224 18825 8224 18826 8232 18826 8240 18826 8224 18827 8240 18827 8225 18827 8195 18828 8194 18828 9830 18828 8227 18829 8230 18829 8228 18829 8228 18830 8230 18830 8231 18830 8228 18831 8231 18831 8229 18831 8229 18832 8231 18832 8239 18832 8229 18833 8239 18833 8238 18833 8225 18834 8240 18834 8226 18834 8226 18835 8240 18835 9831 18835 8226 18836 9831 18836 8223 18836 8244 18837 8243 18837 9797 18837 8237 18838 8236 18838 8229 18838 8229 18839 8236 18839 8235 18839 8229 18840 8235 18840 8234 18840 7756 18841 9797 18841 9796 18841 9796 18842 9797 18842 8243 18842 9796 18843 8243 18843 8187 18843 8209 18844 8208 18844 8218 18844 8218 18845 8208 18845 8207 18845 8218 18846 8207 18846 8206 18846 8212 18847 8211 18847 8214 18847 9796 18848 8181 18848 8180 18848 8194 18849 8204 18849 9830 18849 9830 18850 8204 18850 8203 18850 9830 18851 8203 18851 8202 18851 8200 18852 8199 18852 9830 18852 9830 18853 8199 18853 8198 18853 9830 18854 8198 18854 8197 18854 8180 18855 8179 18855 9796 18855 9796 18856 8179 18856 8178 18856 9796 18857 8178 18857 8188 18857 8197 18858 8210 18858 9830 18858 9830 18859 8210 18859 8218 18859 9830 18860 8218 18860 9831 18860 9831 18861 8218 18861 8222 18861 9831 18862 8222 18862 8223 18862 8214 18863 8217 18863 8212 18863 8212 18864 8217 18864 8216 18864 8212 18865 8216 18865 8213 18865 8247 18866 8246 18866 9797 18866 9797 18867 8246 18867 8245 18867 9797 18868 8245 18868 8244 18868 8187 18869 8186 18869 9796 18869 9796 18870 8186 18870 8185 18870 9796 18871 8185 18871 8184 18871 8184 18872 8183 18872 9796 18872 9796 18873 8183 18873 8182 18873 9796 18874 8182 18874 8181 18874 8189 18875 8193 18875 9796 18875 9796 18876 8193 18876 8192 18876 9796 18877 8192 18877 9830 18877 9830 18878 8192 18878 8196 18878 9830 18879 8196 18879 8195 18879 8216 18880 8215 18880 8213 18880 8213 18881 8215 18881 8221 18881 8213 18882 8221 18882 8220 18882 8240 18883 8241 18883 9797 18883 9797 18884 8241 18884 8242 18884 9797 18885 8242 18885 8250 18885 8188 18886 8191 18886 9796 18886 9796 18887 8191 18887 8190 18887 9796 18888 8190 18888 8189 18888 8206 18889 8205 18889 8218 18889 8218 18890 8205 18890 8213 18890 8218 18891 8213 18891 8219 18891 8219 18892 8213 18892 8220 18892 8250 18893 8249 18893 9797 18893 9797 18894 8249 18894 8248 18894 9797 18895 8248 18895 8247 18895 8014 18896 8013 18896 9828 18896 9828 18897 8013 18897 9827 18897 9828 18898 9827 18898 9883 18898 9883 18899 9827 18899 9839 18899 9883 18900 9839 18900 9803 18900 9803 18901 9839 18901 9807 18901 9803 18902 9807 18902 7909 18902 7909 18903 9807 18903 7910 18903 8136 18904 8135 18904 9834 18904 9834 18905 8135 18905 9833 18905 9834 18906 9833 18906 9825 18906 9825 18907 9833 18907 9826 18907 9825 18908 9826 18908 8032 18908 8032 18909 9826 18909 8033 18909 7761 18910 7760 18910 9797 18910 9797 18911 7760 18911 9795 18911 9797 18912 9795 18912 9831 18912 9831 18913 9795 18913 9832 18913 9831 18914 9832 18914 8154 18914 8154 18915 9832 18915 8155 18915 9874 18916 9873 18916 9884 18916 9885 18917 9886 18917 9887 18917 9888 18918 9889 18918 9890 18918 9891 18919 9890 18919 9892 18919 9866 18920 9879 18920 9893 18920 9878 18921 9875 18921 9894 18921 9895 18922 9896 18922 9897 18922 9898 18923 9899 18923 9900 18923 9876 18924 9871 18924 9901 18924 9872 18925 9877 18925 9902 18925 9870 18926 9880 18926 9903 18926 9904 18927 9905 18927 9906 18927 9907 18928 9908 18928 9909 18928 9910 18929 9911 18929 9912 18929 9913 18930 9914 18930 9915 18930 9916 18931 9917 18931 9918 18931 9919 18932 9920 18932 9921 18932 9919 18933 9921 18933 9916 18933 9916 18934 9921 18934 9922 18934 9916 18935 9922 18935 9917 18935 9920 18936 9919 18936 9923 18936 9923 18937 9919 18937 9924 18937 9923 18938 9924 18938 9925 18938 9926 18939 9927 18939 9928 18939 9927 18940 9926 18940 9929 18940 9929 18941 9926 18941 9930 18941 9929 18942 9930 18942 9931 18942 9932 18943 9933 18943 9930 18943 9930 18944 9933 18944 9934 18944 9930 18945 9934 18945 9931 18945 9935 18946 9936 18946 9937 18946 9937 18947 9936 18947 9938 18947 9937 18948 9938 18948 9932 18948 9932 18949 9938 18949 9939 18949 9932 18950 9939 18950 9933 18950 9940 18951 9941 18951 9935 18951 9941 18952 9940 18952 9942 18952 9942 18953 9940 18953 9943 18953 9942 18954 9943 18954 9944 18954 9945 18955 9946 18955 9943 18955 9943 18956 9946 18956 9947 18956 9943 18957 9947 18957 9944 18957 9948 18958 9949 18958 9950 18958 9950 18959 9949 18959 9951 18959 9950 18960 9951 18960 9945 18960 9945 18961 9951 18961 9952 18961 9945 18962 9952 18962 9946 18962 9910 18963 9912 18963 9953 18963 9954 18964 9955 18964 9956 18964 9957 18965 9958 18965 9959 18965 9957 18966 9959 18966 9960 18966 9960 18967 9959 18967 9961 18967 9960 18968 9961 18968 9955 18968 9955 18969 9961 18969 9962 18969 9955 18970 9962 18970 9956 18970 9958 18971 9957 18971 9963 18971 9963 18972 9957 18972 9964 18972 9963 18973 9964 18973 9965 18973 9965 18974 9964 18974 9966 18974 9965 18975 9966 18975 9967 18975 9967 18976 9966 18976 9968 18976 9968 18977 9966 18977 9969 18977 9968 18978 9969 18978 9970 18978 9970 18979 9969 18979 9901 18979 9970 18980 9901 18980 9903 18980 9903 18981 9901 18981 9871 18981 9903 18982 9871 18982 9870 18982 9896 18983 9898 18983 9971 18983 9972 18984 9895 18984 9973 18984 9898 18985 9900 18985 9971 18985 9971 18986 9900 18986 9974 18986 9971 18987 9974 18987 9975 18987 9975 18988 9974 18988 9976 18988 9975 18989 9976 18989 9977 18989 9895 18990 9897 18990 9973 18990 9973 18991 9897 18991 9978 18991 9973 18992 9978 18992 9979 18992 9979 18993 9978 18993 9980 18993 9979 18994 9980 18994 9981 18994 9982 18995 9983 18995 9976 18995 9976 18996 9983 18996 9984 18996 9976 18997 9984 18997 9977 18997 9977 18998 9984 18998 9985 18998 9977 18999 9985 18999 9986 18999 9896 19000 9971 19000 9897 19000 9897 19001 9971 19001 9975 19001 9897 19002 9975 19002 9978 19002 9978 19003 9975 19003 9977 19003 9978 19004 9977 19004 9980 19004 9980 19005 9977 19005 9986 19005 9980 19006 9986 19006 9987 19006 9879 19007 9878 19007 9893 19007 9893 19008 9878 19008 9894 19008 9893 19009 9894 19009 9988 19009 9988 19010 9894 19010 9989 19010 9988 19011 9989 19011 9990 19011 9990 19012 9989 19012 9991 19012 9990 19013 9991 19013 9992 19013 9992 19014 9991 19014 9972 19014 9993 19015 9994 19015 9995 19015 9995 19016 9994 19016 9996 19016 9995 19017 9996 19017 9997 19017 9858 19018 9857 19018 9998 19018 9998 19019 9857 19019 9869 19019 9998 19020 9869 19020 9868 19020 9996 19021 9999 19021 9997 19021 9997 19022 9999 19022 10000 19022 9997 19023 10000 19023 9998 19023 10001 19024 9995 19024 10002 19024 10002 19025 9995 19025 9997 19025 10002 19026 9997 19026 10003 19026 10003 19027 9997 19027 9998 19027 10003 19028 9998 19028 10004 19028 10004 19029 9998 19029 9868 19029 10004 19030 9868 19030 9867 19030 9867 19031 9866 19031 10004 19031 10004 19032 9866 19032 9893 19032 10004 19033 9893 19033 10003 19033 10003 19034 9893 19034 9988 19034 10003 19035 9988 19035 10002 19035 10002 19036 9988 19036 9990 19036 10002 19037 9990 19037 10001 19037 10001 19038 9990 19038 9992 19038 9987 19039 10005 19039 9980 19039 9980 19040 10005 19040 10006 19040 9980 19041 10006 19041 9981 19041 9981 19042 10006 19042 10007 19042 9981 19043 10007 19043 10008 19043 9972 19044 9973 19044 9992 19044 9992 19045 9973 19045 9979 19045 9992 19046 9979 19046 10001 19046 10001 19047 9979 19047 9981 19047 10001 19048 9981 19048 9995 19048 9995 19049 9981 19049 10008 19049 9995 19050 10008 19050 9993 19050 10009 19051 9937 19051 10010 19051 10010 19052 9937 19052 9932 19052 10010 19053 9932 19053 10011 19053 10011 19054 9932 19054 9930 19054 10011 19055 9930 19055 10012 19055 10012 19056 9930 19056 9926 19056 10013 19057 10014 19057 10015 19057 9899 19058 10016 19058 10017 19058 9887 19059 9886 19059 10018 19059 10018 19060 9886 19060 10019 19060 10018 19061 10019 19061 10020 19061 10020 19062 10019 19062 10021 19062 10020 19063 10021 19063 10022 19063 10023 19064 10024 19064 10025 19064 10025 19065 10024 19065 10026 19065 9918 19066 10027 19066 9916 19066 9916 19067 10027 19067 10028 19067 9916 19068 10028 19068 10029 19068 10030 19069 9924 19069 10023 19069 10023 19070 9924 19070 9919 19070 10023 19071 9919 19071 10024 19071 10024 19072 9919 19072 9916 19072 10024 19073 9916 19073 10026 19073 10026 19074 9916 19074 10029 19074 10026 19075 10029 19075 10031 19075 10032 19076 10033 19076 10034 19076 10034 19077 10033 19077 10035 19077 10034 19078 10035 19078 10030 19078 10032 19079 10036 19079 10037 19079 10015 19080 10033 19080 10038 19080 10038 19081 10033 19081 10032 19081 10038 19082 10032 19082 10039 19082 10039 19083 10032 19083 10037 19083 10040 19084 10041 19084 10042 19084 10042 19085 10043 19085 10040 19085 10040 19086 10043 19086 10044 19086 10040 19087 10044 19087 10045 19087 10045 19088 10044 19088 10017 19088 10045 19089 10017 19089 10046 19089 10046 19090 10017 19090 10016 19090 10046 19091 10016 19091 10013 19091 10037 19092 10047 19092 10039 19092 10039 19093 10047 19093 10048 19093 10039 19094 10048 19094 10049 19094 10013 19095 10015 19095 10046 19095 10046 19096 10015 19096 10038 19096 10046 19097 10038 19097 10045 19097 10045 19098 10038 19098 10039 19098 10045 19099 10039 19099 10040 19099 10040 19100 10039 19100 10049 19100 10040 19101 10049 19101 10041 19101 10031 19102 10050 19102 10026 19102 10026 19103 10050 19103 10051 19103 10026 19104 10051 19104 10025 19104 10025 19105 10051 19105 10052 19105 10025 19106 10052 19106 10053 19106 10030 19107 10023 19107 10034 19107 10034 19108 10023 19108 10025 19108 10034 19109 10025 19109 10032 19109 10032 19110 10025 19110 10053 19110 10032 19111 10053 19111 10036 19111 10012 19112 10022 19112 10011 19112 10011 19113 10022 19113 10021 19113 10011 19114 10021 19114 10010 19114 10010 19115 10021 19115 10019 19115 10010 19116 10019 19116 10009 19116 10009 19117 10019 19117 9886 19117 10009 19118 9886 19118 10054 19118 10054 19119 9886 19119 9885 19119 10054 19120 9885 19120 10055 19120 9908 19121 9953 19121 9909 19121 9909 19122 9953 19122 9912 19122 9909 19123 9912 19123 10056 19123 10056 19124 9912 19124 10057 19124 10056 19125 10057 19125 10058 19125 10058 19126 10057 19126 10059 19126 10058 19127 10059 19127 10060 19127 10060 19128 10059 19128 10061 19128 10060 19129 10061 19129 10062 19129 9935 19130 9937 19130 9940 19130 9940 19131 9937 19131 10009 19131 9940 19132 10009 19132 9943 19132 9943 19133 10009 19133 10054 19133 9943 19134 10054 19134 9945 19134 9945 19135 10054 19135 10055 19135 9945 19136 10055 19136 9950 19136 10063 19137 9904 19137 9892 19137 9892 19138 9904 19138 9906 19138 9892 19139 9906 19139 9891 19139 9891 19140 9906 19140 10064 19140 9891 19141 10064 19141 10065 19141 10065 19142 10064 19142 10066 19142 10065 19143 10066 19143 10067 19143 10067 19144 10066 19144 10068 19144 10067 19145 10068 19145 10069 19145 10070 19146 10071 19146 10072 19146 10072 19147 10071 19147 10073 19147 10072 19148 10073 19148 10074 19148 9890 19149 9891 19149 9888 19149 9888 19150 9891 19150 10065 19150 9888 19151 10065 19151 10075 19151 10075 19152 10065 19152 10067 19152 10075 19153 10067 19153 10076 19153 10076 19154 10067 19154 10069 19154 10076 19155 10069 19155 10077 19155 9956 19156 10078 19156 9954 19156 9954 19157 10078 19157 10079 19157 9954 19158 10079 19158 10080 19158 10080 19159 10079 19159 10081 19159 10080 19160 10081 19160 10082 19160 10082 19161 10081 19161 10083 19161 10082 19162 10083 19162 10070 19162 10070 19163 10083 19163 10084 19163 10070 19164 10084 19164 10071 19164 10071 19165 10084 19165 10085 19165 10071 19166 10085 19166 10073 19166 9873 19167 9872 19167 9884 19167 9884 19168 9872 19168 9902 19168 9884 19169 9902 19169 10086 19169 10086 19170 9902 19170 10087 19170 10086 19171 10087 19171 10088 19171 10088 19172 10087 19172 10089 19172 10088 19173 10089 19173 10090 19173 10090 19174 10089 19174 10091 19174 10090 19175 10091 19175 10092 19175 10092 19176 10091 19176 10093 19176 10092 19177 10093 19177 10094 19177 10094 19178 10093 19178 10095 19178 10094 19179 10095 19179 10096 19179 10096 19180 10095 19180 10097 19180 10096 19181 10097 19181 10098 19181 10098 19182 10097 19182 10099 19182 10098 19183 10099 19183 10100 19183 10100 19184 10099 19184 10101 19184 10100 19185 10101 19185 10102 19185 10102 19186 10101 19186 10077 19186 10102 19187 10077 19187 10062 19187 10062 19188 10077 19188 10069 19188 10062 19189 10069 19189 10060 19189 10060 19190 10069 19190 10068 19190 10060 19191 10068 19191 10058 19191 10058 19192 10068 19192 10066 19192 10058 19193 10066 19193 10056 19193 10056 19194 10066 19194 10064 19194 10056 19195 10064 19195 9909 19195 9909 19196 10064 19196 9906 19196 9909 19197 9906 19197 9907 19197 9907 19198 9906 19198 9905 19198 9877 19199 9876 19199 9902 19199 9902 19200 9876 19200 9901 19200 9902 19201 9901 19201 10087 19201 10087 19202 9901 19202 9969 19202 10087 19203 9969 19203 10089 19203 10089 19204 9969 19204 9966 19204 10089 19205 9966 19205 10091 19205 10091 19206 9966 19206 9964 19206 10091 19207 9964 19207 10093 19207 10093 19208 9964 19208 9957 19208 10093 19209 9957 19209 10095 19209 10095 19210 9957 19210 9960 19210 10095 19211 9960 19211 10097 19211 10097 19212 9960 19212 9955 19212 10097 19213 9955 19213 10099 19213 10099 19214 9955 19214 9954 19214 10099 19215 9954 19215 10101 19215 10101 19216 9954 19216 10080 19216 10101 19217 10080 19217 10077 19217 10077 19218 10080 19218 10082 19218 10077 19219 10082 19219 10076 19219 10076 19220 10082 19220 10070 19220 10076 19221 10070 19221 10075 19221 10075 19222 10070 19222 10072 19222 10075 19223 10072 19223 9888 19223 9888 19224 10072 19224 10074 19224 9888 19225 10074 19225 9889 19225 9914 19226 9948 19226 9915 19226 9915 19227 9948 19227 9950 19227 9915 19228 9950 19228 10103 19228 10103 19229 9950 19229 10055 19229 10103 19230 10055 19230 10104 19230 10104 19231 10055 19231 9885 19231 10104 19232 9885 19232 10105 19232 10105 19233 9885 19233 9887 19233 10105 19234 9887 19234 10014 19234 10014 19235 9887 19235 10018 19235 10014 19236 10018 19236 10015 19236 10015 19237 10018 19237 10020 19237 10015 19238 10020 19238 10033 19238 10033 19239 10020 19239 10022 19239 10033 19240 10022 19240 10035 19240 10035 19241 10022 19241 10012 19241 10035 19242 10012 19242 10030 19242 10030 19243 10012 19243 9926 19243 10030 19244 9926 19244 9924 19244 9924 19245 9926 19245 9928 19245 9924 19246 9928 19246 9925 19246 10000 19247 10106 19247 9998 19247 9998 19248 10106 19248 10107 19248 9998 19249 10107 19249 9858 19249 9858 19250 10107 19250 10108 19250 9858 19251 10108 19251 9859 19251 10042 19252 10109 19252 10043 19252 10043 19253 10109 19253 10110 19253 10043 19254 10110 19254 10111 19254 9899 19255 10017 19255 9900 19255 9900 19256 10017 19256 10044 19256 9900 19257 10044 19257 9974 19257 9974 19258 10044 19258 10043 19258 9974 19259 10043 19259 9976 19259 9976 19260 10043 19260 10111 19260 9976 19261 10111 19261 9982 19261 9875 19262 9874 19262 9894 19262 9894 19263 9874 19263 9884 19263 9894 19264 9884 19264 9989 19264 9989 19265 9884 19265 10086 19265 9989 19266 10086 19266 9991 19266 9991 19267 10086 19267 10088 19267 9991 19268 10088 19268 9972 19268 9972 19269 10088 19269 10090 19269 9972 19270 10090 19270 9895 19270 9895 19271 10090 19271 10092 19271 9895 19272 10092 19272 9896 19272 9896 19273 10092 19273 10094 19273 9896 19274 10094 19274 9898 19274 9898 19275 10094 19275 10096 19275 9898 19276 10096 19276 9899 19276 9899 19277 10096 19277 10098 19277 9899 19278 10098 19278 10016 19278 10016 19279 10098 19279 10100 19279 10016 19280 10100 19280 10013 19280 10013 19281 10100 19281 10102 19281 10013 19282 10102 19282 10014 19282 10014 19283 10102 19283 10062 19283 10014 19284 10062 19284 10105 19284 10105 19285 10062 19285 10061 19285 10105 19286 10061 19286 10104 19286 10104 19287 10061 19287 10059 19287 10104 19288 10059 19288 10103 19288 10103 19289 10059 19289 10057 19289 10103 19290 10057 19290 9915 19290 9915 19291 10057 19291 9912 19291 9915 19292 9912 19292 9913 19292 9913 19293 9912 19293 9911 19293 8393 19294 8391 19294 8783 19294 8393 19295 8783 19295 10112 19295 10112 19296 8783 19296 8782 19296 10112 19297 8782 19297 10113 19297 10113 19298 8782 19298 8761 19298 10113 19299 8761 19299 10114 19299 10114 19300 8761 19300 8763 19300 10114 19301 8763 19301 10115 19301 10115 19302 8763 19302 8771 19302 10115 19303 8771 19303 10116 19303 9905 19304 9904 19304 10117 19304 9905 19305 10117 19305 9907 19305 9907 19306 10117 19306 9908 19306 9908 19307 10117 19307 10118 19307 9908 19308 10118 19308 9953 19308 10119 19309 9913 19309 10120 19309 10120 19310 9913 19310 9911 19310 10120 19311 9911 19311 10118 19311 10118 19312 9911 19312 9910 19312 10118 19313 9910 19313 9953 19313 10121 19314 10122 19314 9946 19314 9946 19315 9952 19315 10121 19315 10121 19316 9952 19316 9951 19316 10121 19317 9951 19317 10123 19317 10123 19318 9951 19318 9949 19318 10123 19319 9949 19319 10124 19319 10124 19320 9949 19320 9948 19320 10124 19321 9948 19321 10119 19321 10119 19322 9948 19322 9914 19322 10119 19323 9914 19323 9913 19323 10125 19324 9942 19324 10126 19324 10126 19325 9942 19325 9944 19325 10126 19326 9944 19326 10122 19326 10122 19327 9944 19327 9947 19327 10122 19328 9947 19328 9946 19328 10127 19329 9933 19329 10128 19329 10128 19330 9933 19330 9939 19330 10128 19331 9939 19331 10129 19331 9939 19332 9938 19332 10129 19332 10129 19333 9938 19333 9936 19333 10129 19334 9936 19334 10130 19334 10130 19335 9936 19335 9935 19335 10130 19336 9935 19336 10125 19336 10125 19337 9935 19337 9941 19337 10125 19338 9941 19338 9942 19338 10131 19339 9928 19339 9927 19339 10131 19340 9927 19340 10132 19340 9927 19341 9929 19341 10132 19341 10132 19342 9929 19342 9931 19342 10132 19343 9931 19343 10127 19343 10127 19344 9931 19344 9934 19344 10127 19345 9934 19345 9933 19345 9928 19346 10131 19346 9925 19346 9925 19347 10131 19347 10133 19347 9925 19348 10133 19348 9923 19348 9923 19349 10133 19349 10134 19349 9923 19350 10134 19350 9920 19350 9920 19351 10134 19351 10135 19351 9920 19352 10135 19352 9921 19352 10136 19353 10137 19353 9922 19353 9922 19354 10137 19354 10138 19354 9922 19355 10138 19355 9917 19355 9917 19356 10138 19356 9918 19356 9921 19357 10135 19357 9922 19357 9922 19358 10135 19358 10139 19358 9922 19359 10139 19359 10136 19359 9788 19360 8399 19360 8397 19360 9890 19361 10140 19361 9892 19361 9892 19362 10140 19362 10063 19362 8396 19363 9970 19363 8397 19363 8397 19364 9970 19364 9903 19364 9788 19365 8397 19365 9789 19365 9789 19366 8397 19366 9903 19366 9789 19367 9903 19367 9880 19367 8403 19368 9965 19368 8401 19368 8401 19369 9965 19369 9967 19369 8401 19370 9967 19370 8396 19370 8396 19371 9967 19371 9968 19371 8396 19372 9968 19372 9970 19372 8406 19373 9959 19373 8405 19373 8405 19374 9959 19374 9958 19374 8405 19375 9958 19375 8403 19375 8403 19376 9958 19376 9963 19376 8403 19377 9963 19377 9965 19377 8412 19378 10079 19378 8411 19378 8411 19379 10079 19379 10078 19379 8411 19380 10078 19380 8409 19380 8409 19381 10078 19381 9956 19381 8409 19382 9956 19382 8408 19382 8408 19383 9956 19383 9962 19383 8408 19384 9962 19384 8406 19384 8406 19385 9962 19385 9961 19385 8406 19386 9961 19386 9959 19386 8415 19387 10084 19387 8414 19387 8414 19388 10084 19388 10083 19388 8414 19389 10083 19389 8412 19389 8412 19390 10083 19390 10081 19390 8412 19391 10081 19391 10079 19391 5986 19392 8477 19392 8423 19392 8423 19393 8477 19393 10140 19393 8423 19394 10140 19394 8421 19394 8421 19395 10140 19395 9890 19395 8421 19396 9890 19396 8420 19396 8420 19397 9890 19397 9889 19397 8420 19398 9889 19398 8418 19398 8418 19399 9889 19399 10074 19399 8418 19400 10074 19400 8417 19400 8417 19401 10074 19401 10073 19401 8417 19402 10073 19402 8415 19402 8415 19403 10073 19403 10085 19403 8415 19404 10085 19404 10084 19404 10140 19405 8477 19405 6368 19405 6368 19406 6369 19406 10140 19406 10140 19407 6369 19407 8751 19407 10140 19408 8751 19408 10141 19408 10141 19409 8751 19409 8758 19409 10141 19410 8758 19410 10142 19410 10142 19411 8758 19411 8768 19411 10142 19412 8768 19412 10143 19412 10143 19413 8768 19413 8777 19413 10143 19414 8777 19414 10144 19414 8778 19415 10145 19415 8777 19415 8777 19416 10145 19416 10144 19416 10146 19417 10145 19417 8497 19417 8537 19418 8536 19418 8778 19418 8497 19419 8500 19419 10146 19419 10146 19420 8500 19420 8499 19420 10146 19421 8499 19421 10147 19421 10147 19422 8499 19422 8498 19422 10147 19423 8498 19423 10148 19423 10148 19424 8498 19424 8496 19424 10148 19425 8496 19425 10149 19425 10149 19426 8496 19426 8495 19426 10149 19427 8495 19427 10150 19427 10150 19428 8495 19428 8487 19428 10150 19429 8487 19429 10151 19429 10151 19430 8487 19430 8486 19430 10151 19431 8486 19431 10152 19431 10152 19432 8486 19432 8485 19432 10152 19433 8485 19433 10153 19433 10153 19434 8485 19434 8482 19434 10153 19435 8482 19435 10154 19435 10154 19436 8482 19436 8481 19436 10154 19437 8481 19437 10155 19437 10155 19438 8481 19438 8484 19438 10155 19439 8484 19439 10156 19439 10156 19440 8484 19440 8479 19440 10156 19441 8479 19441 10157 19441 10157 19442 8479 19442 8478 19442 10157 19443 8478 19443 10158 19443 10158 19444 8478 19444 8505 19444 10158 19445 8505 19445 10159 19445 10159 19446 8505 19446 8504 19446 10159 19447 8504 19447 8392 19447 8392 19448 8504 19448 8494 19448 8392 19449 8494 19449 8390 19449 8778 19450 8776 19450 8537 19450 8537 19451 8776 19451 8775 19451 8537 19452 8775 19452 8538 19452 8538 19453 8775 19453 8767 19453 8538 19454 8767 19454 8547 19454 8547 19455 8767 19455 8766 19455 8547 19456 8766 19456 8548 19456 8548 19457 8766 19457 8765 19457 8548 19458 8765 19458 8549 19458 8549 19459 8765 19459 8759 19459 8549 19460 8759 19460 8521 19460 8521 19461 8759 19461 8757 19461 8521 19462 8757 19462 8517 19462 8517 19463 8757 19463 8756 19463 8517 19464 8756 19464 8514 19464 8514 19465 8756 19465 8774 19465 8514 19466 8774 19466 8515 19466 8515 19467 8774 19467 8764 19467 8515 19468 8764 19468 8518 19468 8518 19469 8764 19469 8755 19469 8518 19470 8755 19470 8519 19470 8519 19471 8755 19471 8750 19471 8519 19472 8750 19472 8520 19472 8520 19473 8750 19473 8754 19473 8520 19474 8754 19474 8527 19474 8527 19475 8754 19475 8753 19475 8527 19476 8753 19476 8528 19476 8528 19477 8753 19477 8390 19477 8528 19478 8390 19478 8529 19478 8529 19479 8390 19479 8530 19479 8390 19480 8494 19480 8530 19480 8530 19481 8494 19481 8493 19481 8530 19482 8493 19482 8531 19482 8531 19483 8493 19483 8513 19483 8531 19484 8513 19484 8532 19484 8532 19485 8513 19485 8512 19485 8532 19486 8512 19486 8539 19486 8539 19487 8512 19487 8492 19487 8539 19488 8492 19488 8540 19488 8540 19489 8492 19489 8491 19489 8540 19490 8491 19490 8525 19490 8525 19491 8491 19491 8490 19491 8525 19492 8490 19492 8526 19492 8526 19493 8490 19493 8501 19493 8526 19494 8501 19494 8545 19494 8545 19495 8501 19495 8511 19495 8545 19496 8511 19496 8544 19496 8544 19497 8511 19497 8510 19497 8544 19498 8510 19498 8543 19498 8543 19499 8510 19499 8509 19499 8543 19500 8509 19500 8541 19500 8541 19501 8509 19501 8503 19501 8541 19502 8503 19502 8542 19502 8542 19503 8503 19503 8502 19503 8542 19504 8502 19504 8546 19504 8546 19505 8502 19505 8480 19505 8546 19506 8480 19506 8524 19506 8524 19507 8480 19507 8483 19507 8524 19508 8483 19508 8516 19508 8516 19509 8483 19509 8508 19509 8516 19510 8508 19510 8522 19510 8522 19511 8508 19511 8507 19511 8522 19512 8507 19512 8523 19512 8523 19513 8507 19513 8489 19513 8523 19514 8489 19514 8533 19514 8533 19515 8489 19515 8488 19515 8533 19516 8488 19516 8534 19516 8534 19517 8488 19517 8506 19517 8534 19518 8506 19518 8535 19518 8535 19519 8506 19519 8497 19519 8535 19520 8497 19520 8536 19520 8536 19521 8497 19521 10145 19521 8536 19522 10145 19522 8778 19522 10160 19523 10161 19523 8600 19523 8600 19524 8599 19524 10160 19524 10160 19525 8599 19525 8598 19525 10160 19526 8598 19526 10162 19526 8598 19527 8597 19527 10162 19527 10162 19528 8597 19528 8596 19528 10162 19529 8596 19529 10163 19529 8596 19530 8595 19530 10163 19530 10163 19531 8595 19531 8594 19531 10163 19532 8594 19532 10164 19532 8594 19533 8593 19533 10164 19533 10164 19534 8593 19534 8592 19534 10164 19535 8592 19535 10165 19535 8592 19536 8591 19536 10165 19536 10165 19537 8591 19537 8590 19537 10165 19538 8590 19538 10166 19538 8590 19539 8589 19539 10166 19539 10166 19540 8589 19540 8588 19540 10166 19541 8588 19541 10167 19541 8588 19542 8587 19542 10167 19542 10167 19543 8587 19543 8586 19543 10167 19544 8586 19544 10168 19544 8586 19545 8585 19545 10168 19545 10168 19546 8585 19546 8584 19546 10168 19547 8584 19547 10169 19547 8584 19548 8583 19548 10169 19548 10169 19549 8583 19549 8582 19549 10169 19550 8582 19550 10170 19550 8582 19551 8581 19551 10170 19551 10170 19552 8581 19552 8580 19552 10170 19553 8580 19553 10171 19553 8580 19554 8579 19554 10171 19554 10171 19555 8579 19555 8578 19555 10171 19556 8578 19556 10172 19556 10172 19557 8578 19557 8577 19557 8577 19558 8576 19558 10172 19558 10172 19559 8576 19559 8575 19559 10172 19560 8575 19560 10173 19560 8575 19561 8574 19561 10173 19561 10173 19562 8574 19562 8573 19562 10173 19563 8573 19563 10174 19563 8573 19564 8572 19564 10174 19564 10174 19565 8572 19565 8571 19565 10174 19566 8571 19566 10175 19566 8571 19567 8570 19567 10175 19567 10175 19568 8570 19568 8569 19568 10175 19569 8569 19569 10176 19569 8569 19570 8568 19570 10176 19570 10176 19571 8568 19571 8567 19571 10176 19572 8567 19572 10177 19572 8567 19573 8566 19573 10177 19573 10177 19574 8566 19574 8565 19574 10177 19575 8565 19575 10178 19575 8565 19576 8564 19576 10178 19576 10178 19577 8564 19577 8563 19577 10178 19578 8563 19578 10179 19578 8563 19579 8562 19579 10179 19579 10179 19580 8562 19580 8561 19580 10179 19581 8561 19581 10180 19581 8561 19582 8560 19582 10180 19582 10180 19583 8560 19583 8559 19583 10180 19584 8559 19584 10181 19584 8559 19585 8558 19585 10181 19585 10181 19586 8558 19586 8557 19586 10181 19587 8557 19587 10182 19587 8557 19588 8556 19588 10182 19588 10182 19589 8556 19589 8555 19589 10182 19590 8555 19590 10183 19590 8555 19591 8554 19591 10183 19591 10183 19592 8554 19592 8553 19592 10183 19593 8553 19593 10184 19593 8553 19594 8552 19594 10184 19594 10184 19595 8552 19595 8551 19595 10184 19596 8551 19596 10185 19596 10185 19597 8551 19597 8550 19597 10185 19598 8550 19598 10186 19598 8550 19599 10187 19599 10186 19599 10186 19600 10187 19600 8650 19600 10186 19601 8650 19601 10188 19601 8650 19602 8649 19602 10188 19602 10188 19603 8649 19603 8648 19603 10188 19604 8648 19604 10189 19604 8648 19605 8647 19605 10189 19605 10189 19606 8647 19606 8646 19606 10189 19607 8646 19607 10190 19607 8646 19608 8645 19608 10190 19608 10190 19609 8645 19609 8644 19609 10190 19610 8644 19610 10191 19610 8644 19611 8643 19611 10191 19611 10191 19612 8643 19612 8642 19612 10191 19613 8642 19613 10192 19613 8642 19614 8641 19614 10192 19614 10192 19615 8641 19615 8640 19615 10192 19616 8640 19616 10193 19616 8640 19617 8639 19617 10193 19617 10193 19618 8639 19618 8638 19618 10193 19619 8638 19619 10194 19619 8638 19620 8637 19620 10194 19620 10194 19621 8637 19621 8636 19621 10194 19622 8636 19622 10195 19622 8636 19623 8635 19623 10195 19623 10195 19624 8635 19624 8634 19624 10195 19625 8634 19625 10196 19625 8634 19626 8633 19626 10196 19626 10196 19627 8633 19627 8632 19627 10196 19628 8632 19628 10197 19628 8632 19629 8631 19629 10197 19629 10197 19630 8631 19630 8630 19630 10197 19631 8630 19631 10198 19631 8630 19632 8629 19632 10198 19632 10198 19633 8629 19633 8628 19633 10198 19634 8628 19634 10199 19634 8628 19635 8627 19635 10199 19635 10199 19636 8627 19636 8626 19636 10199 19637 8626 19637 10200 19637 8626 19638 8625 19638 10200 19638 10200 19639 8625 19639 8624 19639 10200 19640 8624 19640 10201 19640 8624 19641 8623 19641 10201 19641 10201 19642 8623 19642 8622 19642 10201 19643 8622 19643 10202 19643 8622 19644 8621 19644 10202 19644 10202 19645 8621 19645 8620 19645 10202 19646 8620 19646 10203 19646 8620 19647 8619 19647 10203 19647 10203 19648 8619 19648 8618 19648 10203 19649 8618 19649 10204 19649 8618 19650 8617 19650 10204 19650 10204 19651 8617 19651 8616 19651 10204 19652 8616 19652 10205 19652 8616 19653 8615 19653 10205 19653 10205 19654 8615 19654 8614 19654 10205 19655 8614 19655 10206 19655 8614 19656 8613 19656 10206 19656 10206 19657 8613 19657 8612 19657 10206 19658 8612 19658 10207 19658 8612 19659 8611 19659 10207 19659 10207 19660 8611 19660 8610 19660 10207 19661 8610 19661 10208 19661 8610 19662 8609 19662 10208 19662 10208 19663 8609 19663 8608 19663 10208 19664 8608 19664 10209 19664 8608 19665 8607 19665 10209 19665 10209 19666 8607 19666 8606 19666 10209 19667 8606 19667 10210 19667 8606 19668 8605 19668 10210 19668 10210 19669 8605 19669 8604 19669 10210 19670 8604 19670 10211 19670 8604 19671 8603 19671 10211 19671 10211 19672 8603 19672 8602 19672 10211 19673 8602 19673 10161 19673 10161 19674 8602 19674 8601 19674 10161 19675 8601 19675 8600 19675 8760 19676 8752 19676 10212 19676 8821 19677 8820 19677 10213 19677 10214 19678 10215 19678 10216 19678 10214 19679 10217 19679 10218 19679 10218 19680 10217 19680 10219 19680 10218 19681 10219 19681 10213 19681 10220 19682 8815 19682 8814 19682 10220 19683 8814 19683 10219 19683 10219 19684 8814 19684 8813 19684 10219 19685 8813 19685 8812 19685 8812 19686 8826 19686 10219 19686 10219 19687 8826 19687 8825 19687 10219 19688 8825 19688 10213 19688 10213 19689 8825 19689 8824 19689 10213 19690 8824 19690 8821 19690 8652 19691 8739 19691 10221 19691 10221 19692 8739 19692 8740 19692 8740 19693 8741 19693 10220 19693 10220 19694 8741 19694 8742 19694 10220 19695 8742 19695 8815 19695 10222 19696 8687 19696 8743 19696 10222 19697 8743 19697 10221 19697 10221 19698 8743 19698 8653 19698 10221 19699 8653 19699 8652 19699 10212 19700 8689 19700 8690 19700 8690 19701 8685 19701 10222 19701 10222 19702 8685 19702 8686 19702 10222 19703 8686 19703 8687 19703 6373 19704 6199 19704 10212 19704 10212 19705 6199 19705 8688 19705 10212 19706 8688 19706 8689 19706 6373 19707 10212 19707 6370 19707 6370 19708 10212 19708 8752 19708 6370 19709 8752 19709 6371 19709 8690 19710 10222 19710 10212 19710 10212 19711 10222 19711 8762 19711 10212 19712 8762 19712 8760 19712 8773 19713 8772 19713 10221 19713 10221 19714 8772 19714 8770 19714 10221 19715 8770 19715 10222 19715 10222 19716 8770 19716 8769 19716 10222 19717 8769 19717 8762 19717 8740 19718 10220 19718 10221 19718 10221 19719 10220 19719 8779 19719 10221 19720 8779 19720 8773 19720 10214 19721 10216 19721 10217 19721 10217 19722 10216 19722 10223 19722 10217 19723 10223 19723 10219 19723 10219 19724 10223 19724 8781 19724 10219 19725 8781 19725 10220 19725 10220 19726 8781 19726 8780 19726 10220 19727 8780 19727 8779 19727 10224 19728 10225 19728 10226 19728 10227 19729 10228 19729 10229 19729 10230 19730 10231 19730 10232 19730 8831 19731 8830 19731 10233 19731 8929 19732 8928 19732 10224 19732 8924 19733 8925 19733 10234 19733 10234 19734 8925 19734 8929 19734 8928 19735 8927 19735 10224 19735 10224 19736 8927 19736 8926 19736 10224 19737 8926 19737 10235 19737 10235 19738 8926 19738 8931 19738 10235 19739 8931 19739 8930 19739 10236 19740 8846 19740 8848 19740 8848 19741 8850 19741 10236 19741 10236 19742 8850 19742 8922 19742 10236 19743 8922 19743 8921 19743 8923 19744 8912 19744 10234 19744 10234 19745 8912 19745 8911 19745 10234 19746 8911 19746 8924 19746 8910 19747 8909 19747 10230 19747 10230 19748 8909 19748 8908 19748 10230 19749 8908 19749 10236 19749 10236 19750 8908 19750 8841 19750 10236 19751 8841 19751 8846 19751 8907 19752 8906 19752 10237 19752 10237 19753 8906 19753 8905 19753 10237 19754 8905 19754 8904 19754 8903 19755 8902 19755 10238 19755 10238 19756 8902 19756 8901 19756 10238 19757 8901 19757 10239 19757 10239 19758 8901 19758 8900 19758 10239 19759 8900 19759 10232 19759 8898 19760 8897 19760 10240 19760 10240 19761 8897 19761 8896 19761 10240 19762 8896 19762 10238 19762 10238 19763 8896 19763 8895 19763 10238 19764 8895 19764 8903 19764 10241 19765 8891 19765 10242 19765 10242 19766 8891 19766 8899 19766 10243 19767 8889 19767 8890 19767 10243 19768 8890 19768 10244 19768 8890 19769 8894 19769 10244 19769 10244 19770 8894 19770 8893 19770 10244 19771 8893 19771 10241 19771 10241 19772 8893 19772 8892 19772 10241 19773 8892 19773 8891 19773 10245 19774 8884 19774 10243 19774 10243 19775 8884 19775 8883 19775 10243 19776 8883 19776 8889 19776 8888 19777 8887 19777 10246 19777 10246 19778 8887 19778 8886 19778 10246 19779 8886 19779 10245 19779 10245 19780 8886 19780 8885 19780 10245 19781 8885 19781 8884 19781 8880 19782 8881 19782 10246 19782 10246 19783 8881 19783 8882 19783 10246 19784 8882 19784 8888 19784 8828 19785 8827 19785 10246 19785 10246 19786 8827 19786 8832 19786 10246 19787 8832 19787 8880 19787 8880 19788 8832 19788 8833 19788 8880 19789 8833 19789 8834 19789 8831 19790 10233 19790 8822 19790 10247 19791 10248 19791 10249 19791 10249 19792 10248 19792 10250 19792 8820 19793 8822 19793 10251 19793 10251 19794 8822 19794 10233 19794 10251 19795 10233 19795 10252 19795 10252 19796 10233 19796 10250 19796 10252 19797 10250 19797 10253 19797 10253 19798 10250 19798 10248 19798 10254 19799 10255 19799 10256 19799 10257 19800 10258 19800 10255 19800 10255 19801 10258 19801 10259 19801 10255 19802 10259 19802 10256 19802 10256 19803 10260 19803 10254 19803 10254 19804 10260 19804 10261 19804 10254 19805 10261 19805 10249 19805 10249 19806 10261 19806 10262 19806 10249 19807 10262 19807 10247 19807 8830 19808 8828 19808 10233 19808 10233 19809 8828 19809 10246 19809 10233 19810 10246 19810 10250 19810 10250 19811 10246 19811 10245 19811 10250 19812 10245 19812 10249 19812 10249 19813 10245 19813 10243 19813 10249 19814 10243 19814 10254 19814 10254 19815 10243 19815 10244 19815 10254 19816 10244 19816 10255 19816 10255 19817 10244 19817 10241 19817 10255 19818 10241 19818 10257 19818 10257 19819 10241 19819 10242 19819 10257 19820 10242 19820 10263 19820 10263 19821 10242 19821 10264 19821 10263 19822 10264 19822 10265 19822 10265 19823 10264 19823 10266 19823 10265 19824 10266 19824 10267 19824 10267 19825 10266 19825 10268 19825 10267 19826 10269 19826 10265 19826 10265 19827 10269 19827 10270 19827 10265 19828 10270 19828 10271 19828 10272 19829 10273 19829 10274 19829 10275 19830 10276 19830 10277 19830 10278 19831 10279 19831 10280 19831 10280 19832 10279 19832 10281 19832 10280 19833 10281 19833 10282 19833 10283 19834 10278 19834 10284 19834 10284 19835 10278 19835 10280 19835 10284 19836 10280 19836 10285 19836 10285 19837 10280 19837 10286 19837 10285 19838 10286 19838 10287 19838 10288 19839 10289 19839 10290 19839 10290 19840 10289 19840 10291 19840 10290 19841 10291 19841 10272 19841 10272 19842 10291 19842 10292 19842 10272 19843 10292 19843 10273 19843 8900 19844 8907 19844 10232 19844 10232 19845 8907 19845 10237 19845 10232 19846 10237 19846 10230 19846 10230 19847 10237 19847 8904 19847 10230 19848 8904 19848 8910 19848 10228 19849 10227 19849 10293 19849 10293 19850 10227 19850 10294 19850 10293 19851 10294 19851 10268 19851 10268 19852 10294 19852 10275 19852 10268 19853 10275 19853 10267 19853 10267 19854 10275 19854 10277 19854 10267 19855 10277 19855 10269 19855 10225 19856 10295 19856 10226 19856 10226 19857 10295 19857 10296 19857 10226 19858 10296 19858 10288 19858 8929 19859 10224 19859 10234 19859 10234 19860 10224 19860 10226 19860 10234 19861 10226 19861 10229 19861 10229 19862 10226 19862 10288 19862 10229 19863 10288 19863 10227 19863 10227 19864 10288 19864 10290 19864 10227 19865 10290 19865 10294 19865 10294 19866 10290 19866 10272 19866 10294 19867 10272 19867 10275 19867 10275 19868 10272 19868 10274 19868 10275 19869 10274 19869 10276 19869 10297 19870 10298 19870 10287 19870 10287 19871 10298 19871 10299 19871 10287 19872 10299 19872 10285 19872 10285 19873 10299 19873 10300 19873 10285 19874 10300 19874 10284 19874 10284 19875 10300 19875 10301 19875 10284 19876 10301 19876 10283 19876 10283 19877 10301 19877 10302 19877 10283 19878 10302 19878 10303 19878 10303 19879 10302 19879 10304 19879 10271 19880 10305 19880 10265 19880 10265 19881 10305 19881 10306 19881 10265 19882 10306 19882 10263 19882 10263 19883 10306 19883 10307 19883 10263 19884 10307 19884 10257 19884 10257 19885 10307 19885 10308 19885 10257 19886 10308 19886 10258 19886 10295 19887 10297 19887 10296 19887 10296 19888 10297 19888 10287 19888 10296 19889 10287 19889 10288 19889 10288 19890 10287 19890 10286 19890 10288 19891 10286 19891 10289 19891 10289 19892 10286 19892 10280 19892 10289 19893 10280 19893 10291 19893 10291 19894 10280 19894 10282 19894 10291 19895 10282 19895 10292 19895 8899 19896 8898 19896 10242 19896 10242 19897 8898 19897 10240 19897 10242 19898 10240 19898 10264 19898 10264 19899 10240 19899 10238 19899 10264 19900 10238 19900 10266 19900 10266 19901 10238 19901 10239 19901 10266 19902 10239 19902 10268 19902 10268 19903 10239 19903 10232 19903 10268 19904 10232 19904 10293 19904 10293 19905 10232 19905 10231 19905 10293 19906 10231 19906 10228 19906 10228 19907 10231 19907 10230 19907 10228 19908 10230 19908 10229 19908 10229 19909 10230 19909 10236 19909 10229 19910 10236 19910 10234 19910 10234 19911 10236 19911 8921 19911 10234 19912 8921 19912 8923 19912 10309 19913 10310 19913 10311 19913 10312 19914 10304 19914 10302 19914 8934 19915 8933 19915 10313 19915 8942 19916 8941 19916 10314 19916 8938 19917 8943 19917 10315 19917 8974 19918 10316 19918 10317 19918 8949 19919 8915 19919 10318 19919 10318 19920 8915 19920 8914 19920 10318 19921 8914 19921 8913 19921 8974 19922 10317 19922 8976 19922 8976 19923 10317 19923 10319 19923 8976 19924 10319 19924 8977 19924 8977 19925 10319 19925 10320 19925 8977 19926 10320 19926 8966 19926 8966 19927 10320 19927 10321 19927 8966 19928 10321 19928 8967 19928 8967 19929 10321 19929 10322 19929 8967 19930 10322 19930 8969 19930 8969 19931 10322 19931 10323 19931 8969 19932 10323 19932 8970 19932 8970 19933 10323 19933 10324 19933 8970 19934 10324 19934 8958 19934 8958 19935 10324 19935 10325 19935 8958 19936 10325 19936 8959 19936 8959 19937 10325 19937 10326 19937 8959 19938 10326 19938 8971 19938 8971 19939 10326 19939 10327 19939 8971 19940 10327 19940 8954 19940 8954 19941 10327 19941 10328 19941 8954 19942 10328 19942 8955 19942 8955 19943 10328 19943 10329 19943 8955 19944 10329 19944 8956 19944 8956 19945 10329 19945 10330 19945 8956 19946 10330 19946 8963 19946 8963 19947 10330 19947 10331 19947 8963 19948 10331 19948 8964 19948 8964 19949 10331 19949 10332 19949 8964 19950 10332 19950 8965 19950 8965 19951 10332 19951 10333 19951 8965 19952 10333 19952 8960 19952 8960 19953 10333 19953 10334 19953 8960 19954 10334 19954 8961 19954 8961 19955 10334 19955 10335 19955 8961 19956 10335 19956 8962 19956 8962 19957 10335 19957 10336 19957 8962 19958 10336 19958 8952 19958 8952 19959 10336 19959 10318 19959 8952 19960 10318 19960 8953 19960 8953 19961 10318 19961 8913 19961 8953 19962 8913 19962 8919 19962 8946 19963 8945 19963 10337 19963 10337 19964 8945 19964 8951 19964 10337 19965 8951 19965 8950 19965 8943 19966 8944 19966 10315 19966 10315 19967 8944 19967 8948 19967 10315 19968 8948 19968 8947 19968 8941 19969 8940 19969 10314 19969 10314 19970 8940 19970 8939 19970 10314 19971 8939 19971 10338 19971 8933 19972 8932 19972 10313 19972 10313 19973 8932 19973 8936 19973 10313 19974 8936 19974 8937 19974 10224 19975 10235 19975 10339 19975 10339 19976 10235 19976 8930 19976 10339 19977 8930 19977 8935 19977 10297 19978 10295 19978 10340 19978 10340 19979 10295 19979 10225 19979 10300 19980 10299 19980 10341 19980 10341 19981 10299 19981 10298 19981 10342 19982 10302 19982 10301 19982 10312 19983 10302 19983 10343 19983 10343 19984 10302 19984 10342 19984 10343 19985 10342 19985 10344 19985 10344 19986 10342 19986 10345 19986 10344 19987 10345 19987 10346 19987 10346 19988 10345 19988 10347 19988 10346 19989 10347 19989 10348 19989 10349 19990 10350 19990 10351 19990 10351 19991 10350 19991 10352 19991 10351 19992 10352 19992 10353 19992 10353 19993 10352 19993 10354 19993 10353 19994 10354 19994 10355 19994 10355 19995 10354 19995 10356 19995 10355 19996 10356 19996 10347 19996 10347 19997 10356 19997 10357 19997 10347 19998 10357 19998 10348 19998 10349 19999 10351 19999 10358 19999 10358 20000 10351 20000 10359 20000 10358 20001 10359 20001 10360 20001 10360 20002 10359 20002 10361 20002 10360 20003 10361 20003 10362 20003 10362 20004 10361 20004 10363 20004 10362 20005 10363 20005 10364 20005 10364 20006 10363 20006 10365 20006 10365 20007 10363 20007 10366 20007 10365 20008 10366 20008 10367 20008 10367 20009 10366 20009 10368 20009 10368 20010 10366 20010 10369 20010 10368 20011 10369 20011 10370 20011 10370 20012 10369 20012 10371 20012 10370 20013 10371 20013 10372 20013 10372 20014 10371 20014 10373 20014 10372 20015 10373 20015 10374 20015 10375 20016 10376 20016 10377 20016 10377 20017 10376 20017 10378 20017 10377 20018 10378 20018 10379 20018 10379 20019 10378 20019 10380 20019 10379 20020 10380 20020 10381 20020 10381 20021 10380 20021 10382 20021 10381 20022 10382 20022 10373 20022 10373 20023 10382 20023 10383 20023 10373 20024 10383 20024 10374 20024 10375 20025 10377 20025 10384 20025 10384 20026 10377 20026 10385 20026 10384 20027 10385 20027 10386 20027 10386 20028 10385 20028 10387 20028 10386 20029 10387 20029 10388 20029 10388 20030 10387 20030 10389 20030 10388 20031 10389 20031 10390 20031 10391 20032 10392 20032 10393 20032 10393 20033 10392 20033 10394 20033 10393 20034 10394 20034 10395 20034 10395 20035 10394 20035 10396 20035 10395 20036 10396 20036 10397 20036 10397 20037 10396 20037 10398 20037 10397 20038 10398 20038 10389 20038 10389 20039 10398 20039 10399 20039 10389 20040 10399 20040 10390 20040 10391 20041 10393 20041 10400 20041 10400 20042 10393 20042 10311 20042 10400 20043 10311 20043 10401 20043 10401 20044 10311 20044 10310 20044 10401 20045 10310 20045 10402 20045 10403 20046 10404 20046 10405 20046 10405 20047 10404 20047 10406 20047 10407 20048 10408 20048 10409 20048 10409 20049 10408 20049 10410 20049 10411 20050 10412 20050 10413 20050 9051 20051 10412 20051 9052 20051 9052 20052 10412 20052 10411 20052 9052 20053 10411 20053 9053 20053 9053 20054 10411 20054 9048 20054 9047 20055 9046 20055 10414 20055 9046 20056 9045 20056 10414 20056 10414 20057 9045 20057 9050 20057 10414 20058 9050 20058 9049 20058 10415 20059 9042 20059 9041 20059 9042 20060 10415 20060 9043 20060 9043 20061 10415 20061 10416 20061 9043 20062 10416 20062 9044 20062 9040 20063 9039 20063 10417 20063 10417 20064 9039 20064 9038 20064 10417 20065 9038 20065 9037 20065 8974 20066 8973 20066 10316 20066 10316 20067 8973 20067 9034 20067 10316 20068 9034 20068 9033 20068 9032 20069 9031 20069 10418 20069 10418 20070 9031 20070 9035 20070 10418 20071 9035 20071 9036 20071 10406 20072 10309 20072 10405 20072 10405 20073 10309 20073 10311 20073 10405 20074 10311 20074 10419 20074 10419 20075 10311 20075 10393 20075 10419 20076 10393 20076 10420 20076 10420 20077 10393 20077 10395 20077 10420 20078 10395 20078 10421 20078 10421 20079 10395 20079 10397 20079 10421 20080 10397 20080 10422 20080 10422 20081 10397 20081 10389 20081 10422 20082 10389 20082 10423 20082 10423 20083 10389 20083 10387 20083 10423 20084 10387 20084 10424 20084 10424 20085 10387 20085 10385 20085 10424 20086 10385 20086 10425 20086 10425 20087 10385 20087 10377 20087 10425 20088 10377 20088 10426 20088 10426 20089 10377 20089 10379 20089 10426 20090 10379 20090 10427 20090 10427 20091 10379 20091 10381 20091 10427 20092 10381 20092 10428 20092 10428 20093 10381 20093 10373 20093 10428 20094 10373 20094 10429 20094 10429 20095 10373 20095 10371 20095 10429 20096 10371 20096 10430 20096 10430 20097 10371 20097 10369 20097 10430 20098 10369 20098 10431 20098 10431 20099 10369 20099 10366 20099 10431 20100 10366 20100 10432 20100 10432 20101 10366 20101 10363 20101 10432 20102 10363 20102 10433 20102 10433 20103 10363 20103 10361 20103 10433 20104 10361 20104 10434 20104 10434 20105 10361 20105 10359 20105 10434 20106 10359 20106 10435 20106 10435 20107 10359 20107 10351 20107 10435 20108 10351 20108 10436 20108 10436 20109 10351 20109 10353 20109 10436 20110 10353 20110 10437 20110 10437 20111 10353 20111 10355 20111 10437 20112 10355 20112 10438 20112 10438 20113 10355 20113 10347 20113 10438 20114 10347 20114 10439 20114 10439 20115 10347 20115 10345 20115 10439 20116 10345 20116 10341 20116 10341 20117 10345 20117 10342 20117 10341 20118 10342 20118 10300 20118 10300 20119 10342 20119 10301 20119 10410 20120 10403 20120 10409 20120 10409 20121 10403 20121 10405 20121 10409 20122 10405 20122 10440 20122 10440 20123 10405 20123 10419 20123 10440 20124 10419 20124 10441 20124 10441 20125 10419 20125 10420 20125 10441 20126 10420 20126 10442 20126 10442 20127 10420 20127 10421 20127 10442 20128 10421 20128 10443 20128 10443 20129 10421 20129 10422 20129 10443 20130 10422 20130 10444 20130 10444 20131 10422 20131 10423 20131 10444 20132 10423 20132 10445 20132 10445 20133 10423 20133 10424 20133 10445 20134 10424 20134 10446 20134 10446 20135 10424 20135 10425 20135 10446 20136 10425 20136 10447 20136 10447 20137 10425 20137 10426 20137 10447 20138 10426 20138 10448 20138 10448 20139 10426 20139 10427 20139 10448 20140 10427 20140 10449 20140 10449 20141 10427 20141 10428 20141 10449 20142 10428 20142 10450 20142 10450 20143 10428 20143 10429 20143 10450 20144 10429 20144 10451 20144 10451 20145 10429 20145 10430 20145 10451 20146 10430 20146 10452 20146 10452 20147 10430 20147 10431 20147 10452 20148 10431 20148 10453 20148 10453 20149 10431 20149 10432 20149 10453 20150 10432 20150 10454 20150 10454 20151 10432 20151 10433 20151 10454 20152 10433 20152 10455 20152 10455 20153 10433 20153 10434 20153 10455 20154 10434 20154 10456 20154 10456 20155 10434 20155 10435 20155 10456 20156 10435 20156 10457 20156 10457 20157 10435 20157 10436 20157 10457 20158 10436 20158 10458 20158 10458 20159 10436 20159 10437 20159 10458 20160 10437 20160 10459 20160 10459 20161 10437 20161 10438 20161 10459 20162 10438 20162 10460 20162 10460 20163 10438 20163 10439 20163 10460 20164 10439 20164 10340 20164 10340 20165 10439 20165 10341 20165 10340 20166 10341 20166 10297 20166 10297 20167 10341 20167 10298 20167 10413 20168 10407 20168 10411 20168 10411 20169 10407 20169 10409 20169 10411 20170 10409 20170 10461 20170 10461 20171 10409 20171 10440 20171 10461 20172 10440 20172 10462 20172 10462 20173 10440 20173 10441 20173 10462 20174 10441 20174 10463 20174 10463 20175 10441 20175 10442 20175 10463 20176 10442 20176 10464 20176 10464 20177 10442 20177 10443 20177 10464 20178 10443 20178 10465 20178 10465 20179 10443 20179 10444 20179 10465 20180 10444 20180 10466 20180 10466 20181 10444 20181 10445 20181 10466 20182 10445 20182 10467 20182 10467 20183 10445 20183 10446 20183 10467 20184 10446 20184 10468 20184 10468 20185 10446 20185 10447 20185 10468 20186 10447 20186 10469 20186 10469 20187 10447 20187 10448 20187 10469 20188 10448 20188 10470 20188 10470 20189 10448 20189 10449 20189 10470 20190 10449 20190 10471 20190 10471 20191 10449 20191 10450 20191 10471 20192 10450 20192 10472 20192 10472 20193 10450 20193 10451 20193 10472 20194 10451 20194 10473 20194 10473 20195 10451 20195 10452 20195 10473 20196 10452 20196 10474 20196 10474 20197 10452 20197 10453 20197 10474 20198 10453 20198 10475 20198 10475 20199 10453 20199 10454 20199 10475 20200 10454 20200 10476 20200 10476 20201 10454 20201 10455 20201 10476 20202 10455 20202 10477 20202 10477 20203 10455 20203 10456 20203 10477 20204 10456 20204 10478 20204 10478 20205 10456 20205 10457 20205 10478 20206 10457 20206 10479 20206 10479 20207 10457 20207 10458 20207 10479 20208 10458 20208 10480 20208 10480 20209 10458 20209 10459 20209 10480 20210 10459 20210 10481 20210 10481 20211 10459 20211 10460 20211 10481 20212 10460 20212 10339 20212 10339 20213 10460 20213 10340 20213 10339 20214 10340 20214 10224 20214 10224 20215 10340 20215 10225 20215 9049 20216 9048 20216 10414 20216 10414 20217 9048 20217 10411 20217 10414 20218 10411 20218 10482 20218 10482 20219 10411 20219 10461 20219 10482 20220 10461 20220 10483 20220 10483 20221 10461 20221 10462 20221 10483 20222 10462 20222 10484 20222 10484 20223 10462 20223 10463 20223 10484 20224 10463 20224 10485 20224 10485 20225 10463 20225 10464 20225 10485 20226 10464 20226 10486 20226 10486 20227 10464 20227 10465 20227 10486 20228 10465 20228 10487 20228 10487 20229 10465 20229 10466 20229 10487 20230 10466 20230 10488 20230 10488 20231 10466 20231 10467 20231 10488 20232 10467 20232 10489 20232 10489 20233 10467 20233 10468 20233 10489 20234 10468 20234 10490 20234 10490 20235 10468 20235 10469 20235 10490 20236 10469 20236 10491 20236 10491 20237 10469 20237 10470 20237 10491 20238 10470 20238 10492 20238 10492 20239 10470 20239 10471 20239 10492 20240 10471 20240 10493 20240 10493 20241 10471 20241 10472 20241 10493 20242 10472 20242 10494 20242 10494 20243 10472 20243 10473 20243 10494 20244 10473 20244 10495 20244 10495 20245 10473 20245 10474 20245 10495 20246 10474 20246 10496 20246 10496 20247 10474 20247 10475 20247 10496 20248 10475 20248 10497 20248 10497 20249 10475 20249 10476 20249 10497 20250 10476 20250 10498 20250 10498 20251 10476 20251 10477 20251 10498 20252 10477 20252 10499 20252 10499 20253 10477 20253 10478 20253 10499 20254 10478 20254 10500 20254 10500 20255 10478 20255 10479 20255 10500 20256 10479 20256 10501 20256 10501 20257 10479 20257 10480 20257 10501 20258 10480 20258 10502 20258 10502 20259 10480 20259 10481 20259 10502 20260 10481 20260 10313 20260 10313 20261 10481 20261 10339 20261 10313 20262 10339 20262 8934 20262 8934 20263 10339 20263 8935 20263 9041 20264 9047 20264 10415 20264 10415 20265 9047 20265 10414 20265 10415 20266 10414 20266 10416 20266 10416 20267 10414 20267 10482 20267 10416 20268 10482 20268 10503 20268 10503 20269 10482 20269 10483 20269 10503 20270 10483 20270 10504 20270 10504 20271 10483 20271 10484 20271 10504 20272 10484 20272 10505 20272 10505 20273 10484 20273 10485 20273 10505 20274 10485 20274 10506 20274 10506 20275 10485 20275 10486 20275 10506 20276 10486 20276 10507 20276 10507 20277 10486 20277 10487 20277 10507 20278 10487 20278 10508 20278 10508 20279 10487 20279 10488 20279 10508 20280 10488 20280 10509 20280 10509 20281 10488 20281 10489 20281 10509 20282 10489 20282 10510 20282 10510 20283 10489 20283 10490 20283 10510 20284 10490 20284 10511 20284 10511 20285 10490 20285 10491 20285 10511 20286 10491 20286 10512 20286 10512 20287 10491 20287 10492 20287 10512 20288 10492 20288 10513 20288 10513 20289 10492 20289 10493 20289 10513 20290 10493 20290 10514 20290 10514 20291 10493 20291 10494 20291 10514 20292 10494 20292 10515 20292 10515 20293 10494 20293 10495 20293 10515 20294 10495 20294 10516 20294 10516 20295 10495 20295 10496 20295 10516 20296 10496 20296 10517 20296 10517 20297 10496 20297 10497 20297 10517 20298 10497 20298 10518 20298 10518 20299 10497 20299 10498 20299 10518 20300 10498 20300 10519 20300 10519 20301 10498 20301 10499 20301 10519 20302 10499 20302 10520 20302 10520 20303 10499 20303 10500 20303 10520 20304 10500 20304 10521 20304 10521 20305 10500 20305 10501 20305 10521 20306 10501 20306 10338 20306 10338 20307 10501 20307 10502 20307 10338 20308 10502 20308 10314 20308 10314 20309 10502 20309 10313 20309 10314 20310 10313 20310 8942 20310 8942 20311 10313 20311 8937 20311 9037 20312 9044 20312 10417 20312 10417 20313 9044 20313 10416 20313 10417 20314 10416 20314 10522 20314 10522 20315 10416 20315 10503 20315 10522 20316 10503 20316 10523 20316 10523 20317 10503 20317 10504 20317 10523 20318 10504 20318 10524 20318 10524 20319 10504 20319 10505 20319 10524 20320 10505 20320 10525 20320 10525 20321 10505 20321 10506 20321 10525 20322 10506 20322 10526 20322 10526 20323 10506 20323 10507 20323 10526 20324 10507 20324 10527 20324 10527 20325 10507 20325 10508 20325 10527 20326 10508 20326 10528 20326 10528 20327 10508 20327 10509 20327 10528 20328 10509 20328 10529 20328 10529 20329 10509 20329 10510 20329 10529 20330 10510 20330 10530 20330 10530 20331 10510 20331 10511 20331 10530 20332 10511 20332 10531 20332 10531 20333 10511 20333 10512 20333 10531 20334 10512 20334 10532 20334 10532 20335 10512 20335 10513 20335 10532 20336 10513 20336 10533 20336 10533 20337 10513 20337 10514 20337 10533 20338 10514 20338 10534 20338 10534 20339 10514 20339 10515 20339 10534 20340 10515 20340 10535 20340 10535 20341 10515 20341 10516 20341 10535 20342 10516 20342 10536 20342 10536 20343 10516 20343 10517 20343 10536 20344 10517 20344 10537 20344 10537 20345 10517 20345 10518 20345 10537 20346 10518 20346 10538 20346 10538 20347 10518 20347 10519 20347 10538 20348 10519 20348 10539 20348 10539 20349 10519 20349 10520 20349 10539 20350 10520 20350 10540 20350 10540 20351 10520 20351 10521 20351 10540 20352 10521 20352 10315 20352 10315 20353 10521 20353 10338 20353 10315 20354 10338 20354 8938 20354 8938 20355 10338 20355 8939 20355 9036 20356 9040 20356 10418 20356 10418 20357 9040 20357 10417 20357 10418 20358 10417 20358 10541 20358 10541 20359 10417 20359 10522 20359 10541 20360 10522 20360 10542 20360 10542 20361 10522 20361 10523 20361 10542 20362 10523 20362 10543 20362 10543 20363 10523 20363 10524 20363 10543 20364 10524 20364 10544 20364 10544 20365 10524 20365 10525 20365 10544 20366 10525 20366 10545 20366 10545 20367 10525 20367 10526 20367 10545 20368 10526 20368 10546 20368 10546 20369 10526 20369 10527 20369 10546 20370 10527 20370 10547 20370 10547 20371 10527 20371 10528 20371 10547 20372 10528 20372 10548 20372 10548 20373 10528 20373 10529 20373 10548 20374 10529 20374 10549 20374 10549 20375 10529 20375 10530 20375 10549 20376 10530 20376 10550 20376 10550 20377 10530 20377 10531 20377 10550 20378 10531 20378 10551 20378 10551 20379 10531 20379 10532 20379 10551 20380 10532 20380 10552 20380 10552 20381 10532 20381 10533 20381 10552 20382 10533 20382 10553 20382 10553 20383 10533 20383 10534 20383 10553 20384 10534 20384 10554 20384 10554 20385 10534 20385 10535 20385 10554 20386 10535 20386 10555 20386 10555 20387 10535 20387 10536 20387 10555 20388 10536 20388 10556 20388 10556 20389 10536 20389 10537 20389 10556 20390 10537 20390 10557 20390 10557 20391 10537 20391 10538 20391 10557 20392 10538 20392 10558 20392 10558 20393 10538 20393 10539 20393 10558 20394 10539 20394 10559 20394 10559 20395 10539 20395 10540 20395 10559 20396 10540 20396 10337 20396 10337 20397 10540 20397 10315 20397 10337 20398 10315 20398 8946 20398 8946 20399 10315 20399 8947 20399 9033 20400 9032 20400 10316 20400 10316 20401 9032 20401 10418 20401 10316 20402 10418 20402 10317 20402 10317 20403 10418 20403 10541 20403 10317 20404 10541 20404 10319 20404 10319 20405 10541 20405 10542 20405 10319 20406 10542 20406 10320 20406 10320 20407 10542 20407 10543 20407 10320 20408 10543 20408 10321 20408 10321 20409 10543 20409 10544 20409 10321 20410 10544 20410 10322 20410 10322 20411 10544 20411 10545 20411 10322 20412 10545 20412 10323 20412 10323 20413 10545 20413 10546 20413 10323 20414 10546 20414 10324 20414 10324 20415 10546 20415 10547 20415 10324 20416 10547 20416 10325 20416 10325 20417 10547 20417 10548 20417 10325 20418 10548 20418 10326 20418 10326 20419 10548 20419 10549 20419 10326 20420 10549 20420 10327 20420 10327 20421 10549 20421 10550 20421 10327 20422 10550 20422 10328 20422 10328 20423 10550 20423 10551 20423 10328 20424 10551 20424 10329 20424 10329 20425 10551 20425 10552 20425 10329 20426 10552 20426 10330 20426 10330 20427 10552 20427 10553 20427 10330 20428 10553 20428 10331 20428 10331 20429 10553 20429 10554 20429 10331 20430 10554 20430 10332 20430 10332 20431 10554 20431 10555 20431 10332 20432 10555 20432 10333 20432 10333 20433 10555 20433 10556 20433 10333 20434 10556 20434 10334 20434 10334 20435 10556 20435 10557 20435 10334 20436 10557 20436 10335 20436 10335 20437 10557 20437 10558 20437 10335 20438 10558 20438 10336 20438 10336 20439 10558 20439 10559 20439 10336 20440 10559 20440 10318 20440 10318 20441 10559 20441 10337 20441 10318 20442 10337 20442 8949 20442 8949 20443 10337 20443 8950 20443 10560 20444 10561 20444 10562 20444 10563 20445 10407 20445 10413 20445 10564 20446 10565 20446 10566 20446 10567 20447 10568 20447 10569 20447 10310 20448 10309 20448 10570 20448 10570 20449 10309 20449 10571 20449 10570 20450 10571 20450 10572 20450 9062 20451 9061 20451 10573 20451 9067 20452 9066 20452 10574 20452 9065 20453 9072 20453 10575 20453 9218 20454 10576 20454 9083 20454 9083 20455 9082 20455 9218 20455 9218 20456 9082 20456 9055 20456 9218 20457 9055 20457 9208 20457 9208 20458 9055 20458 9054 20458 9086 20459 9085 20459 10576 20459 10576 20460 9085 20460 9084 20460 10576 20461 9084 20461 9083 20461 9080 20462 9079 20462 10577 20462 10577 20463 9079 20463 9078 20463 10577 20464 9078 20464 9086 20464 9057 20465 9056 20465 10578 20465 10578 20466 9056 20466 9081 20466 10578 20467 9081 20467 9080 20467 10579 20468 9077 20468 9057 20468 9074 20469 9073 20469 10580 20469 10580 20470 9073 20470 9077 20470 10575 20471 10581 20471 10582 20471 10582 20472 10581 20472 9076 20472 10582 20473 9076 20473 9075 20473 9072 20474 9071 20474 10575 20474 10575 20475 9071 20475 9070 20475 10575 20476 9070 20476 10581 20476 10581 20477 9070 20477 9069 20477 10581 20478 9069 20478 9076 20478 9062 20479 10573 20479 9063 20479 9060 20480 9059 20480 10561 20480 10561 20481 9059 20481 9058 20481 10561 20482 9058 20482 10573 20482 10573 20483 9058 20483 9064 20483 10573 20484 9064 20484 9063 20484 8980 20485 8987 20485 10560 20485 10560 20486 8987 20486 8986 20486 10560 20487 8986 20487 8985 20487 8992 20488 9060 20488 8993 20488 8993 20489 9060 20489 10561 20489 8993 20490 10561 20490 8989 20490 8989 20491 10561 20491 10560 20491 8989 20492 10560 20492 8988 20492 8988 20493 10560 20493 8985 20493 9051 20494 8983 20494 10412 20494 10412 20495 8983 20495 8982 20495 10412 20496 8982 20496 10413 20496 10413 20497 8982 20497 8984 20497 10413 20498 8984 20498 8981 20498 10309 20499 10406 20499 10571 20499 10571 20500 10406 20500 10404 20500 10571 20501 10404 20501 10583 20501 10583 20502 10404 20502 10403 20502 10583 20503 10403 20503 10410 20503 10584 20504 10585 20504 10572 20504 10572 20505 10585 20505 10586 20505 10572 20506 10586 20506 10570 20506 10570 20507 10586 20507 10587 20507 10570 20508 10587 20508 10310 20508 10310 20509 10587 20509 10588 20509 10310 20510 10588 20510 10402 20510 10589 20511 10590 20511 10591 20511 10591 20512 10590 20512 10592 20512 10593 20513 10594 20513 10595 20513 10595 20514 10596 20514 10593 20514 10593 20515 10596 20515 10597 20515 10593 20516 10597 20516 10592 20516 10592 20517 10597 20517 10598 20517 10592 20518 10598 20518 10591 20518 10590 20519 10567 20519 10592 20519 10592 20520 10567 20520 10569 20520 10592 20521 10569 20521 10593 20521 10593 20522 10569 20522 10599 20522 10593 20523 10599 20523 10594 20523 10594 20524 10599 20524 10600 20524 10594 20525 10600 20525 10566 20525 10601 20526 10582 20526 10580 20526 10580 20527 10582 20527 9075 20527 10580 20528 9075 20528 9074 20528 10602 20529 10603 20529 10604 20529 10604 20530 10603 20530 10605 20530 10604 20531 10605 20531 10606 20531 10606 20532 10605 20532 10607 20532 10606 20533 10607 20533 10574 20533 10574 20534 10607 20534 10608 20534 10574 20535 10608 20535 9067 20535 9057 20536 10578 20536 10579 20536 10579 20537 10578 20537 10609 20537 10579 20538 10609 20538 10610 20538 9086 20539 10576 20539 10577 20539 10577 20540 10576 20540 10611 20540 10577 20541 10611 20541 10612 20541 10612 20542 10613 20542 10614 20542 9080 20543 10577 20543 10578 20543 10578 20544 10577 20544 10612 20544 10578 20545 10612 20545 10609 20545 10609 20546 10612 20546 10614 20546 10609 20547 10614 20547 10615 20547 10615 20548 10616 20548 10609 20548 10609 20549 10616 20549 10617 20549 10609 20550 10617 20550 10610 20550 10610 20551 10617 20551 10618 20551 10610 20552 10618 20552 10619 20552 9077 20553 10579 20553 10580 20553 10580 20554 10579 20554 10610 20554 10580 20555 10610 20555 10601 20555 10601 20556 10610 20556 10619 20556 10601 20557 10619 20557 10620 20557 9066 20558 9065 20558 10574 20558 10574 20559 9065 20559 10575 20559 10574 20560 10575 20560 10606 20560 10606 20561 10575 20561 10582 20561 10606 20562 10582 20562 10604 20562 10604 20563 10582 20563 10601 20563 10604 20564 10601 20564 10602 20564 10602 20565 10601 20565 10620 20565 10562 20566 10561 20566 10621 20566 10621 20567 10561 20567 10573 20567 10621 20568 10573 20568 10622 20568 10622 20569 10573 20569 9061 20569 10622 20570 9061 20570 10608 20570 10608 20571 9061 20571 9068 20571 10608 20572 9068 20572 9067 20572 10608 20573 10623 20573 10622 20573 10622 20574 10623 20574 10624 20574 10622 20575 10624 20575 10621 20575 10621 20576 10624 20576 10625 20576 10621 20577 10625 20577 10562 20577 10562 20578 10625 20578 10563 20578 10562 20579 10563 20579 10560 20579 10560 20580 10563 20580 10413 20580 10560 20581 10413 20581 8980 20581 8980 20582 10413 20582 8981 20582 10589 20583 10584 20583 10590 20583 10590 20584 10584 20584 10572 20584 10590 20585 10572 20585 10567 20585 10567 20586 10572 20586 10571 20586 10567 20587 10571 20587 10568 20587 10568 20588 10571 20588 10583 20588 10568 20589 10583 20589 10626 20589 10626 20590 10583 20590 10410 20590 10626 20591 10410 20591 10408 20591 9221 20592 9213 20592 10611 20592 9218 20593 9220 20593 10576 20593 10576 20594 9220 20594 9223 20594 10576 20595 9223 20595 10611 20595 10611 20596 9223 20596 9222 20596 10611 20597 9222 20597 9221 20597 10613 20598 10612 20598 10627 20598 10627 20599 10612 20599 10611 20599 10627 20600 10611 20600 10628 20600 10628 20601 10611 20601 9213 20601 10628 20602 9213 20602 9212 20602 10565 20603 10629 20603 10566 20603 10566 20604 10629 20604 10630 20604 10566 20605 10630 20605 10594 20605 10594 20606 10630 20606 10631 20606 10594 20607 10631 20607 10595 20607 10603 20608 10564 20608 10605 20608 10605 20609 10564 20609 10566 20609 10605 20610 10566 20610 10607 20610 10607 20611 10566 20611 10600 20611 10607 20612 10600 20612 10608 20612 10608 20613 10600 20613 10599 20613 10608 20614 10599 20614 10623 20614 10623 20615 10599 20615 10569 20615 10623 20616 10569 20616 10624 20616 10624 20617 10569 20617 10568 20617 10624 20618 10568 20618 10625 20618 10625 20619 10568 20619 10626 20619 10625 20620 10626 20620 10563 20620 10563 20621 10626 20621 10408 20621 10563 20622 10408 20622 10407 20622 10632 20623 10633 20623 10634 20623 9216 20624 9217 20624 10635 20624 10636 20625 9244 20625 9245 20625 9244 20626 10636 20626 9242 20626 9242 20627 10636 20627 10637 20627 9242 20628 10637 20628 9253 20628 9253 20629 10637 20629 9254 20629 9254 20630 10637 20630 10638 20630 9254 20631 10638 20631 9263 20631 9240 20632 9236 20632 10639 20632 10639 20633 9236 20633 9260 20633 10639 20634 9260 20634 10638 20634 10638 20635 9260 20635 9262 20635 10638 20636 9262 20636 9263 20636 10639 20637 9177 20637 9176 20637 6965 20638 9240 20638 6966 20638 6966 20639 9240 20639 10639 20639 6966 20640 10639 20640 6967 20640 6967 20641 10639 20641 9176 20641 6967 20642 9176 20642 6752 20642 9121 20643 9171 20643 10638 20643 10638 20644 9171 20644 9179 20644 10638 20645 9179 20645 10639 20645 10639 20646 9179 20646 9178 20646 10639 20647 9178 20647 9177 20647 9161 20648 9160 20648 10637 20648 10637 20649 9160 20649 9159 20649 10637 20650 9159 20650 10638 20650 10638 20651 9159 20651 9122 20651 10638 20652 9122 20652 9121 20652 9231 20653 9129 20653 10636 20653 10636 20654 9129 20654 9128 20654 10636 20655 9128 20655 10637 20655 10637 20656 9128 20656 9162 20656 10637 20657 9162 20657 9161 20657 9217 20658 9227 20658 10635 20658 10635 20659 9227 20659 9228 20659 10635 20660 9228 20660 9230 20660 10634 20661 10633 20661 9245 20661 9245 20662 10633 20662 10635 20662 9245 20663 10635 20663 10636 20663 10636 20664 10635 20664 9230 20664 10636 20665 9230 20665 9231 20665 10640 20666 9212 20666 9214 20666 9214 20667 9216 20667 10640 20667 10640 20668 9216 20668 10635 20668 10640 20669 10635 20669 10641 20669 10641 20670 10635 20670 10633 20670 10641 20671 10633 20671 10642 20671 10642 20672 10633 20672 10632 20672 10642 20673 10632 20673 10643 20673 10644 20674 10645 20674 10646 20674 9340 20675 9447 20675 10647 20675 10648 20676 10649 20676 10650 20676 10651 20677 10652 20677 10653 20677 10653 20678 10652 20678 10654 20678 10653 20679 10654 20679 10655 20679 10651 20680 10653 20680 10656 20680 10656 20681 10653 20681 10657 20681 10656 20682 10657 20682 10658 20682 10659 20683 10660 20683 10657 20683 10657 20684 10660 20684 10661 20684 10657 20685 10661 20685 10658 20685 10649 20686 10662 20686 10650 20686 10650 20687 10662 20687 10663 20687 10650 20688 10663 20688 10659 20688 10659 20689 10663 20689 10664 20689 10659 20690 10664 20690 10660 20690 9813 20691 10665 20691 9814 20691 9814 20692 10665 20692 10666 20692 9814 20693 10666 20693 9815 20693 9471 20694 9473 20694 10667 20694 10667 20695 9473 20695 10668 20695 9479 20696 10669 20696 9476 20696 9476 20697 10669 20697 10668 20697 9476 20698 10668 20698 9474 20698 9474 20699 10668 20699 9473 20699 10670 20700 9453 20700 10671 20700 10671 20701 9453 20701 9452 20701 10671 20702 9452 20702 9470 20702 9447 20703 9446 20703 10672 20703 10672 20704 9446 20704 9444 20704 10672 20705 9444 20705 9442 20705 9470 20706 9469 20706 10671 20706 10671 20707 9469 20707 9467 20707 10671 20708 9467 20708 10667 20708 10667 20709 9467 20709 9466 20709 10667 20710 9466 20710 9471 20710 9447 20711 10672 20711 10647 20711 10647 20712 10672 20712 10673 20712 10647 20713 10673 20713 10674 20713 10674 20714 10673 20714 10675 20714 10674 20715 10675 20715 10676 20715 10677 20716 10674 20716 10678 20716 10678 20717 10674 20717 10676 20717 10678 20718 10676 20718 10679 20718 9342 20719 9340 20719 10680 20719 10680 20720 9340 20720 10647 20720 10680 20721 10647 20721 10681 20721 10681 20722 10647 20722 10674 20722 10681 20723 10674 20723 10682 20723 10682 20724 10674 20724 10677 20724 10683 20725 10684 20725 10685 20725 10685 20726 10684 20726 10686 20726 10685 20727 10686 20727 10687 20727 10683 20728 10685 20728 10688 20728 10688 20729 10685 20729 10689 20729 10688 20730 10689 20730 10690 20730 10691 20731 10646 20731 10692 20731 10692 20732 10646 20732 10693 20732 10692 20733 10693 20733 10694 20733 10695 20734 10696 20734 10697 20734 10698 20735 10699 20735 10700 20735 10700 20736 10699 20736 10701 20736 10700 20737 10701 20737 10702 20737 10697 20738 10703 20738 10695 20738 10695 20739 10703 20739 10704 20739 10695 20740 10704 20740 10701 20740 10701 20741 10704 20741 10705 20741 10701 20742 10705 20742 10702 20742 10686 20743 10706 20743 10687 20743 10687 20744 10706 20744 10707 20744 10687 20745 10707 20745 10696 20745 10696 20746 10707 20746 10708 20746 10696 20747 10708 20747 10697 20747 9819 20748 9818 20748 10709 20748 10709 20749 9818 20749 9820 20749 9817 20750 9810 20750 10650 20750 10666 20751 10648 20751 9815 20751 9815 20752 10648 20752 10650 20752 9815 20753 10650 20753 9816 20753 9816 20754 10650 20754 9810 20754 10654 20755 10710 20755 10655 20755 10655 20756 10710 20756 10711 20756 10655 20757 10711 20757 10712 20757 10699 20758 10691 20758 10701 20758 10701 20759 10691 20759 10692 20759 10701 20760 10692 20760 10695 20760 10695 20761 10692 20761 10694 20761 10695 20762 10694 20762 10696 20762 10696 20763 10694 20763 10713 20763 10696 20764 10713 20764 10687 20764 10687 20765 10713 20765 10714 20765 10687 20766 10714 20766 10685 20766 10685 20767 10714 20767 10715 20767 10685 20768 10715 20768 10689 20768 10689 20769 10715 20769 10716 20769 10689 20770 10716 20770 10717 20770 10717 20771 10716 20771 10718 20771 10717 20772 10718 20772 10712 20772 10712 20773 10718 20773 10719 20773 10712 20774 10719 20774 10655 20774 10655 20775 10719 20775 10720 20775 10655 20776 10720 20776 10653 20776 10653 20777 10720 20777 10721 20777 10653 20778 10721 20778 10657 20778 10657 20779 10721 20779 10722 20779 10657 20780 10722 20780 10659 20780 10659 20781 10722 20781 10723 20781 10659 20782 10723 20782 10650 20782 10650 20783 10723 20783 10709 20783 10650 20784 10709 20784 9817 20784 9817 20785 10709 20785 9820 20785 10724 20786 9364 20786 9362 20786 10724 20787 9362 20787 10725 20787 10725 20788 9362 20788 9361 20788 10725 20789 9361 20789 9371 20789 9371 20790 9370 20790 10725 20790 10725 20791 9370 20791 9821 20791 10725 20792 9821 20792 9822 20792 9364 20793 10724 20793 9365 20793 9365 20794 10724 20794 10726 20794 9365 20795 10726 20795 9359 20795 9351 20796 9355 20796 10727 20796 10727 20797 9355 20797 9357 20797 10727 20798 9357 20798 10726 20798 10726 20799 9357 20799 9360 20799 10726 20800 9360 20800 9359 20800 9354 20801 9353 20801 10728 20801 10728 20802 9353 20802 9352 20802 10728 20803 9352 20803 10729 20803 10729 20804 9352 20804 9347 20804 10729 20805 9347 20805 10727 20805 10727 20806 9347 20806 9349 20806 10727 20807 9349 20807 9351 20807 9479 20808 9478 20808 10669 20808 10669 20809 9478 20809 9477 20809 10669 20810 9477 20810 10730 20810 10730 20811 9477 20811 9343 20811 10730 20812 9343 20812 10728 20812 10728 20813 9343 20813 9345 20813 10728 20814 9345 20814 9354 20814 10644 20815 10646 20815 10731 20815 10731 20816 10646 20816 10691 20816 10731 20817 10691 20817 10732 20817 10732 20818 10691 20818 10699 20818 10732 20819 10699 20819 10733 20819 10733 20820 10699 20820 10698 20820 10733 20821 10698 20821 10734 20821 10735 20822 10679 20822 10736 20822 10736 20823 10679 20823 10676 20823 10736 20824 10676 20824 10737 20824 10737 20825 10676 20825 10675 20825 10737 20826 10675 20826 10670 20826 10670 20827 10675 20827 10673 20827 10670 20828 10673 20828 9453 20828 9453 20829 10673 20829 10672 20829 9453 20830 10672 20830 9441 20830 9441 20831 10672 20831 9442 20831 10711 20832 10738 20832 10712 20832 10712 20833 10738 20833 10739 20833 10712 20834 10739 20834 10717 20834 10717 20835 10739 20835 10740 20835 10717 20836 10740 20836 10689 20836 10689 20837 10740 20837 10741 20837 10689 20838 10741 20838 10690 20838 10645 20839 10735 20839 10646 20839 10646 20840 10735 20840 10736 20840 10646 20841 10736 20841 10693 20841 10693 20842 10736 20842 10737 20842 10693 20843 10737 20843 10694 20843 10694 20844 10737 20844 10670 20844 10694 20845 10670 20845 10713 20845 10713 20846 10670 20846 10671 20846 10713 20847 10671 20847 10714 20847 10714 20848 10671 20848 10667 20848 10714 20849 10667 20849 10715 20849 10715 20850 10667 20850 10668 20850 10715 20851 10668 20851 10716 20851 10716 20852 10668 20852 10669 20852 10716 20853 10669 20853 10718 20853 10718 20854 10669 20854 10730 20854 10718 20855 10730 20855 10719 20855 10719 20856 10730 20856 10728 20856 10719 20857 10728 20857 10720 20857 10720 20858 10728 20858 10729 20858 10720 20859 10729 20859 10721 20859 10721 20860 10729 20860 10727 20860 10721 20861 10727 20861 10722 20861 10722 20862 10727 20862 10726 20862 10722 20863 10726 20863 10723 20863 10723 20864 10726 20864 10724 20864 10723 20865 10724 20865 10709 20865 10709 20866 10724 20866 10725 20866 10709 20867 10725 20867 9819 20867 9819 20868 10725 20868 9822 20868 7044 20869 7046 20869 9553 20869 9556 20870 9557 20870 10742 20870 9523 20871 9522 20871 9551 20871 7044 20872 9553 20872 9558 20872 9557 20873 9558 20873 10742 20873 10742 20874 9558 20874 9553 20874 10742 20875 9553 20875 9518 20875 9518 20876 9553 20876 9552 20876 9518 20877 9552 20877 9519 20877 9519 20878 9552 20878 9524 20878 9533 20879 9525 20879 9549 20879 10742 20880 10743 20880 9556 20880 9556 20881 10743 20881 10744 20881 9556 20882 10744 20882 9555 20882 9551 20883 9522 20883 9552 20883 9552 20884 9522 20884 9521 20884 9552 20885 9521 20885 9524 20885 9523 20886 9551 20886 9530 20886 9530 20887 9551 20887 9550 20887 9530 20888 9550 20888 9529 20888 9525 20889 9526 20889 9549 20889 9549 20890 9526 20890 9527 20890 9549 20891 9527 20891 9550 20891 9550 20892 9527 20892 9528 20892 9550 20893 9528 20893 9529 20893 9514 20894 9513 20894 9296 20894 9516 20895 9540 20895 9512 20895 9512 20896 9540 20896 9511 20896 10744 20897 10745 20897 9555 20897 9555 20898 10745 20898 10746 20898 9555 20899 10746 20899 9554 20899 9554 20900 10746 20900 10747 20900 9554 20901 10747 20901 10748 20901 9533 20902 9549 20902 9531 20902 9531 20903 9549 20903 9548 20903 9531 20904 9548 20904 9532 20904 9532 20905 9548 20905 9534 20905 9534 20906 9548 20906 9547 20906 9534 20907 9547 20907 9535 20907 9538 20908 9539 20908 9546 20908 9546 20909 9539 20909 9536 20909 9546 20910 9536 20910 9547 20910 9547 20911 9536 20911 9537 20911 9547 20912 9537 20912 9535 20912 9538 20913 9546 20913 9295 20913 9295 20914 9546 20914 9545 20914 9295 20915 9545 20915 9296 20915 10748 20916 10749 20916 9554 20916 9554 20917 10749 20917 10750 20917 9554 20918 10750 20918 10751 20918 9514 20919 9296 20919 9515 20919 9545 20920 9544 20920 9296 20920 9296 20921 9544 20921 9543 20921 9296 20922 9543 20922 9515 20922 9515 20923 9543 20923 9542 20923 9515 20924 9542 20924 9516 20924 9516 20925 9542 20925 9541 20925 9516 20926 9541 20926 9540 20926 9245 20927 9243 20927 10634 20927 10634 20928 9243 20928 9554 20928 10634 20929 9554 20929 10751 20929 10751 20930 10752 20930 10634 20930 10634 20931 10752 20931 10753 20931 10634 20932 10753 20932 10632 20932 10632 20933 10753 20933 10643 20933 10706 20934 10686 20934 10754 20934 10755 20935 10756 20935 10757 20935 10758 20936 10759 20936 10760 20936 10761 20937 10762 20937 10763 20937 10763 20938 10762 20938 10764 20938 10763 20939 10764 20939 10760 20939 10760 20940 10764 20940 10765 20940 10760 20941 10765 20941 10758 20941 10766 20942 10767 20942 10768 20942 10754 20943 10769 20943 10770 20943 10771 20944 10772 20944 10769 20944 10769 20945 10772 20945 10773 20945 10769 20946 10773 20946 10770 20946 10756 20947 10774 20947 10757 20947 10757 20948 10774 20948 10775 20948 10757 20949 10775 20949 10769 20949 10769 20950 10775 20950 10776 20950 10769 20951 10776 20951 10771 20951 10739 20952 10738 20952 10777 20952 10777 20953 10738 20953 10778 20953 10778 20954 10738 20954 10711 20954 10778 20955 10711 20955 10779 20955 10779 20956 10711 20956 10710 20956 10779 20957 10710 20957 10654 20957 10686 20958 10684 20958 10754 20958 10754 20959 10684 20959 10683 20959 10754 20960 10683 20960 10769 20960 10769 20961 10683 20961 10688 20961 10769 20962 10688 20962 10690 20962 10777 20963 10755 20963 10739 20963 10739 20964 10755 20964 10757 20964 10739 20965 10757 20965 10740 20965 10740 20966 10757 20966 10769 20966 10740 20967 10769 20967 10741 20967 10741 20968 10769 20968 10690 20968 10780 20969 10781 20969 10782 20969 10782 20970 10783 20970 10780 20970 10780 20971 10783 20971 10784 20971 10780 20972 10784 20972 10700 20972 10700 20973 10784 20973 10785 20973 10700 20974 10785 20974 10698 20974 10698 20975 10785 20975 10734 20975 10786 20976 10787 20976 10703 20976 10703 20977 10697 20977 10786 20977 10786 20978 10697 20978 10708 20978 10786 20979 10708 20979 10707 20979 10700 20980 10702 20980 10780 20980 10780 20981 10702 20981 10705 20981 10780 20982 10705 20982 10787 20982 10787 20983 10705 20983 10704 20983 10787 20984 10704 20984 10703 20984 10781 20985 10780 20985 10788 20985 10788 20986 10780 20986 10787 20986 10788 20987 10787 20987 10789 20987 10789 20988 10787 20988 10786 20988 10789 20989 10786 20989 10768 20989 10790 20990 10791 20990 10792 20990 10792 20991 10791 20991 10793 20991 10794 20992 10795 20992 10781 20992 10781 20993 10795 20993 10796 20993 10781 20994 10796 20994 10782 20994 10797 20995 10798 20995 10799 20995 10799 20996 10798 20996 10800 20996 10799 20997 10800 20997 10793 20997 10793 20998 10800 20998 10801 20998 10793 20999 10801 20999 10792 20999 10797 21000 10799 21000 10802 21000 10802 21001 10799 21001 10760 21001 10802 21002 10760 21002 10803 21002 10803 21003 10760 21003 10759 21003 10803 21004 10759 21004 10804 21004 10707 21005 10706 21005 10786 21005 10786 21006 10706 21006 10754 21006 10786 21007 10754 21007 10768 21007 10768 21008 10754 21008 10770 21008 10768 21009 10770 21009 10766 21009 10767 21010 10761 21010 10768 21010 10768 21011 10761 21011 10763 21011 10768 21012 10763 21012 10789 21012 10789 21013 10763 21013 10760 21013 10789 21014 10760 21014 10788 21014 10788 21015 10760 21015 10799 21015 10788 21016 10799 21016 10781 21016 10781 21017 10799 21017 10793 21017 10781 21018 10793 21018 10794 21018 10794 21019 10793 21019 10791 21019 10772 21020 10771 21020 9561 21020 10661 21021 10660 21021 9566 21021 10805 21022 10806 21022 9587 21022 10807 21023 10808 21023 9576 21023 10808 21024 10809 21024 9576 21024 9576 21025 10809 21025 10810 21025 9576 21026 10810 21026 10811 21026 10811 21027 10810 21027 10812 21027 10811 21028 10812 21028 10813 21028 10813 21029 10814 21029 10811 21029 10811 21030 10814 21030 10815 21030 10811 21031 10815 21031 10816 21031 10816 21032 10815 21032 10817 21032 10816 21033 10817 21033 10818 21033 10818 21034 10817 21034 10819 21034 10818 21035 10819 21035 10820 21035 10821 21036 10822 21036 9580 21036 10822 21037 10823 21037 9580 21037 9580 21038 10823 21038 10824 21038 9580 21039 10824 21039 9576 21039 9576 21040 10824 21040 10825 21040 9576 21041 10825 21041 10807 21041 10826 21042 10827 21042 9581 21042 9581 21043 10827 21043 10828 21043 9581 21044 10828 21044 9580 21044 9580 21045 10828 21045 10829 21045 9580 21046 10829 21046 10821 21046 10830 21047 10831 21047 9562 21047 9562 21048 10831 21048 10832 21048 9562 21049 10832 21049 9581 21049 9581 21050 10832 21050 10833 21050 9581 21051 10833 21051 10826 21051 10834 21052 10835 21052 9563 21052 9563 21053 10835 21053 10836 21053 9563 21054 10836 21054 9562 21054 9562 21055 10836 21055 10837 21055 9562 21056 10837 21056 10830 21056 10834 21057 9563 21057 10838 21057 10838 21058 9563 21058 9564 21058 10838 21059 9564 21059 10839 21059 10840 21060 10841 21060 9565 21060 9565 21061 10841 21061 10842 21061 9565 21062 10842 21062 9564 21062 9564 21063 10842 21063 10843 21063 9564 21064 10843 21064 10839 21064 10840 21065 9565 21065 10844 21065 10844 21066 9565 21066 9577 21066 10844 21067 9577 21067 10845 21067 9587 21068 10806 21068 9577 21068 9577 21069 10806 21069 10846 21069 9577 21070 10846 21070 10845 21070 9835 21071 10847 21071 9588 21071 9588 21072 10847 21072 10848 21072 9588 21073 10848 21073 9587 21073 9587 21074 10848 21074 10849 21074 9587 21075 10849 21075 10805 21075 9588 21076 9583 21076 9835 21076 9835 21077 9583 21077 9582 21077 9835 21078 9582 21078 9836 21078 9836 21079 9582 21079 9589 21079 9836 21080 9589 21080 9837 21080 9837 21081 9589 21081 9590 21081 9837 21082 9590 21082 9838 21082 9838 21083 9590 21083 9805 21083 9805 21084 9590 21084 9593 21084 9805 21085 9593 21085 9806 21085 9806 21086 9593 21086 9594 21086 9806 21087 9594 21087 9808 21087 9808 21088 9594 21088 9591 21088 9808 21089 9591 21089 9809 21089 9809 21090 9591 21090 9584 21090 9809 21091 9584 21091 9811 21091 9811 21092 9584 21092 9585 21092 9811 21093 9585 21093 9812 21093 9812 21094 9585 21094 9813 21094 9813 21095 9585 21095 9586 21095 9813 21096 9586 21096 10665 21096 10665 21097 9586 21097 10666 21097 10666 21098 9586 21098 9592 21098 10666 21099 9592 21099 10648 21099 10663 21100 10662 21100 9592 21100 9592 21101 10662 21101 10649 21101 9592 21102 10649 21102 10648 21102 9566 21103 10660 21103 9592 21103 9592 21104 10660 21104 10664 21104 9592 21105 10664 21105 10663 21105 10652 21106 9567 21106 10654 21106 10654 21107 9567 21107 9578 21107 10654 21108 9578 21108 10779 21108 10652 21109 10651 21109 9567 21109 9567 21110 10651 21110 10656 21110 9567 21111 10656 21111 9566 21111 9566 21112 10656 21112 10658 21112 9566 21113 10658 21113 10661 21113 9559 21114 10777 21114 9578 21114 9578 21115 10777 21115 10778 21115 9578 21116 10778 21116 10779 21116 10775 21117 10774 21117 9559 21117 9561 21118 10771 21118 9559 21118 9559 21119 10771 21119 10776 21119 9559 21120 10776 21120 10775 21120 10774 21121 10756 21121 9559 21121 9559 21122 10756 21122 10755 21122 9559 21123 10755 21123 10777 21123 9568 21124 10770 21124 9561 21124 9561 21125 10770 21125 10773 21125 9561 21126 10773 21126 10772 21126 10761 21127 9568 21127 10762 21127 10762 21128 9568 21128 10764 21128 10761 21129 10767 21129 9568 21129 9568 21130 10767 21130 10766 21130 9568 21131 10766 21131 10770 21131 10850 21132 10804 21132 9570 21132 9570 21133 10804 21133 10759 21133 9570 21134 10759 21134 9569 21134 9569 21135 10759 21135 10758 21135 9569 21136 10758 21136 9568 21136 9568 21137 10758 21137 10765 21137 9568 21138 10765 21138 10764 21138 10850 21139 9570 21139 10851 21139 10851 21140 9570 21140 9571 21140 10851 21141 9571 21141 10852 21141 10853 21142 10854 21142 9573 21142 9573 21143 10854 21143 10855 21143 10855 21144 10856 21144 9573 21144 9573 21145 10856 21145 10857 21145 9573 21146 10857 21146 9571 21146 9571 21147 10857 21147 10858 21147 9571 21148 10858 21148 10852 21148 10853 21149 9573 21149 10859 21149 10859 21150 9573 21150 9572 21150 10859 21151 9572 21151 10860 21151 10861 21152 10862 21152 9579 21152 9579 21153 10862 21153 10863 21153 9579 21154 10863 21154 9572 21154 9572 21155 10863 21155 10864 21155 9572 21156 10864 21156 10860 21156 10865 21157 10866 21157 9560 21157 10866 21158 10867 21158 9560 21158 9560 21159 10867 21159 10868 21159 9560 21160 10868 21160 9579 21160 9579 21161 10868 21161 10869 21161 9579 21162 10869 21162 10861 21162 10870 21163 10871 21163 9574 21163 9574 21164 10871 21164 10872 21164 9574 21165 10872 21165 9560 21165 9560 21166 10872 21166 10873 21166 9560 21167 10873 21167 10865 21167 10874 21168 10875 21168 9575 21168 9575 21169 10875 21169 10876 21169 9575 21170 10876 21170 9574 21170 9574 21171 10876 21171 10877 21171 9574 21172 10877 21172 10870 21172 10811 21173 10878 21173 9576 21173 9576 21174 10878 21174 10879 21174 9576 21175 10879 21175 9575 21175 9575 21176 10879 21176 10880 21176 9575 21177 10880 21177 10874 21177 10881 21178 10882 21178 9624 21178 10827 21179 10826 21179 9596 21179 10840 21180 10844 21180 9599 21180 10883 21181 10884 21181 9614 21181 9614 21182 10884 21182 10885 21182 9614 21183 10885 21183 9615 21183 9611 21184 10886 21184 9612 21184 9612 21185 10886 21185 10887 21185 9612 21186 10887 21186 9613 21186 9613 21187 10887 21187 10888 21187 9613 21188 10888 21188 9614 21188 9614 21189 10888 21189 10889 21189 9614 21190 10889 21190 10883 21190 9610 21191 9634 21191 9611 21191 9611 21192 9634 21192 10890 21192 9611 21193 10890 21193 10886 21193 9642 21194 9635 21194 9609 21194 9609 21195 9635 21195 9631 21195 9609 21196 9631 21196 9610 21196 9610 21197 9631 21197 9633 21197 9610 21198 9633 21198 9634 21198 9608 21199 9651 21199 9649 21199 9649 21200 9648 21200 9608 21200 9608 21201 9648 21201 9647 21201 9608 21202 9647 21202 9609 21202 9609 21203 9647 21203 9646 21203 9609 21204 9646 21204 9642 21204 9651 21205 9608 21205 9653 21205 9653 21206 9608 21206 9607 21206 9653 21207 9607 21207 9657 21207 9657 21208 9607 21208 9658 21208 9658 21209 9607 21209 9606 21209 9658 21210 9606 21210 9659 21210 9667 21211 9666 21211 9605 21211 9605 21212 9666 21212 9665 21212 9605 21213 9665 21213 9606 21213 9606 21214 9665 21214 9664 21214 9606 21215 9664 21215 9659 21215 9681 21216 9680 21216 9604 21216 9604 21217 9680 21217 9670 21217 9604 21218 9670 21218 9605 21218 9605 21219 9670 21219 9668 21219 9605 21220 9668 21220 9667 21220 9682 21221 9672 21221 9603 21221 9603 21222 9672 21222 9677 21222 9603 21223 9677 21223 9604 21223 9604 21224 9677 21224 9678 21224 9604 21225 9678 21225 9681 21225 9682 21226 9603 21226 9683 21226 9683 21227 9603 21227 9602 21227 9683 21228 9602 21228 9693 21228 9601 21229 9689 21229 9602 21229 9602 21230 9689 21230 9694 21230 9602 21231 9694 21231 9693 21231 9601 21232 9600 21232 9835 21232 9711 21233 9710 21233 9804 21233 9804 21234 9710 21234 9709 21234 9804 21235 9709 21235 9835 21235 9835 21236 9709 21236 9699 21236 9835 21237 9699 21237 9601 21237 9601 21238 9699 21238 9687 21238 9601 21239 9687 21239 9689 21239 9599 21240 10844 21240 9600 21240 9600 21241 10844 21241 10845 21241 9600 21242 10845 21242 10846 21242 10846 21243 10806 21243 9600 21243 9600 21244 10806 21244 10805 21244 9600 21245 10805 21245 10849 21245 10849 21246 10848 21246 9600 21246 9600 21247 10848 21247 10847 21247 9600 21248 10847 21248 9835 21248 9598 21249 10838 21249 9599 21249 9599 21250 10838 21250 10839 21250 9599 21251 10839 21251 10843 21251 10843 21252 10842 21252 9599 21252 9599 21253 10842 21253 10841 21253 9599 21254 10841 21254 10840 21254 10836 21255 10835 21255 9598 21255 9598 21256 10835 21256 10834 21256 9598 21257 10834 21257 10838 21257 10832 21258 10831 21258 9597 21258 9597 21259 10831 21259 10830 21259 9597 21260 10830 21260 9598 21260 9598 21261 10830 21261 10837 21261 9598 21262 10837 21262 10836 21262 9596 21263 10826 21263 9597 21263 9597 21264 10826 21264 10833 21264 9597 21265 10833 21265 10832 21265 10827 21266 9596 21266 10828 21266 10828 21267 9596 21267 9595 21267 10828 21268 9595 21268 10829 21268 9630 21269 10822 21269 9595 21269 9595 21270 10822 21270 10821 21270 9595 21271 10821 21271 10829 21271 10807 21272 10825 21272 9629 21272 9629 21273 10825 21273 10824 21273 9629 21274 10824 21274 9630 21274 9630 21275 10824 21275 10823 21275 9630 21276 10823 21276 10822 21276 10807 21277 9629 21277 10808 21277 10808 21278 9629 21278 9628 21278 10808 21279 9628 21279 10809 21279 9627 21280 10812 21280 9628 21280 9628 21281 10812 21281 10810 21281 9628 21282 10810 21282 10809 21282 10817 21283 10815 21283 9626 21283 9626 21284 10815 21284 10814 21284 9626 21285 10814 21285 9627 21285 9627 21286 10814 21286 10813 21286 9627 21287 10813 21287 10812 21287 10891 21288 10892 21288 9625 21288 9625 21289 10892 21289 10820 21289 9625 21290 10820 21290 9626 21290 9626 21291 10820 21291 10819 21291 9626 21292 10819 21292 10817 21292 9624 21293 10882 21293 9625 21293 9625 21294 10882 21294 10893 21294 9625 21295 10893 21295 10891 21295 10881 21296 9624 21296 10894 21296 10894 21297 9624 21297 9623 21297 10894 21298 9623 21298 10895 21298 10896 21299 10897 21299 9622 21299 9622 21300 10897 21300 10898 21300 9622 21301 10898 21301 9623 21301 9623 21302 10898 21302 10899 21302 9623 21303 10899 21303 10895 21303 9621 21304 10900 21304 9622 21304 9622 21305 10900 21305 10901 21305 9622 21306 10901 21306 10896 21306 10902 21307 10903 21307 9620 21307 9620 21308 10903 21308 10904 21308 9620 21309 10904 21309 9621 21309 9621 21310 10904 21310 10905 21310 9621 21311 10905 21311 10900 21311 10902 21312 9620 21312 10906 21312 10906 21313 9620 21313 9619 21313 10906 21314 9619 21314 10907 21314 9618 21315 10908 21315 10909 21315 10909 21316 10910 21316 9618 21316 9618 21317 10910 21317 10911 21317 9618 21318 10911 21318 9619 21318 9619 21319 10911 21319 10912 21319 9619 21320 10912 21320 10907 21320 10908 21321 9618 21321 10913 21321 10913 21322 9618 21322 9617 21322 10913 21323 9617 21323 10914 21323 10915 21324 10916 21324 9616 21324 9616 21325 10916 21325 10917 21325 9616 21326 10917 21326 9617 21326 9617 21327 10917 21327 10918 21327 9617 21328 10918 21328 10914 21328 10885 21329 10919 21329 9615 21329 9615 21330 10919 21330 10920 21330 9615 21331 10920 21331 9616 21331 9616 21332 10920 21332 10921 21332 9616 21333 10921 21333 10915 21333 10922 21334 10923 21334 10924 21334 10887 21335 10925 21335 10888 21335 10888 21336 10925 21336 10926 21336 10888 21337 10926 21337 10889 21337 10890 21338 10924 21338 10886 21338 10886 21339 10924 21339 10927 21339 10886 21340 10927 21340 10928 21340 10929 21341 10930 21341 10887 21341 10887 21342 10930 21342 10931 21342 10887 21343 10931 21343 10925 21343 10928 21344 10932 21344 10886 21344 10886 21345 10932 21345 10933 21345 10886 21346 10933 21346 10887 21346 10887 21347 10933 21347 10934 21347 10887 21348 10934 21348 10929 21348 10890 21349 9634 21349 10924 21349 10924 21350 9634 21350 9632 21350 10924 21351 9632 21351 10922 21351 10935 21352 10936 21352 10923 21352 10923 21353 10936 21353 10937 21353 10923 21354 10937 21354 10924 21354 10938 21355 10939 21355 10940 21355 10940 21356 10939 21356 10941 21356 10940 21357 10941 21357 10923 21357 10923 21358 10941 21358 10942 21358 10923 21359 10942 21359 10935 21359 10943 21360 10944 21360 10945 21360 10945 21361 10944 21361 10946 21361 10945 21362 10946 21362 10940 21362 10940 21363 10946 21363 10947 21363 10940 21364 10947 21364 10938 21364 9688 21365 9708 21365 9716 21365 9697 21366 9698 21366 9842 21366 10948 21367 10949 21367 9724 21367 10950 21368 10951 21368 9730 21368 10952 21369 10953 21369 9731 21369 9731 21370 10953 21370 9732 21370 9730 21371 10951 21371 9731 21371 9731 21372 10951 21372 10954 21372 9731 21373 10954 21373 10952 21373 9729 21374 10955 21374 10956 21374 9729 21375 10956 21375 9730 21375 9730 21376 10956 21376 10957 21376 9730 21377 10957 21377 10950 21377 10955 21378 9729 21378 10958 21378 10958 21379 9729 21379 9728 21379 10958 21380 9728 21380 10959 21380 10960 21381 10961 21381 9727 21381 9727 21382 10961 21382 10962 21382 9727 21383 10962 21383 9728 21383 9728 21384 10962 21384 10963 21384 9728 21385 10963 21385 10959 21385 9726 21386 10964 21386 9727 21386 9727 21387 10964 21387 10965 21387 9727 21388 10965 21388 10960 21388 10966 21389 10967 21389 9725 21389 9725 21390 10967 21390 10968 21390 9725 21391 10968 21391 9726 21391 9726 21392 10968 21392 10969 21392 9726 21393 10969 21393 10964 21393 9724 21394 10949 21394 9725 21394 9725 21395 10949 21395 10970 21395 9725 21396 10970 21396 10966 21396 10948 21397 9724 21397 10971 21397 10971 21398 9724 21398 9723 21398 10971 21399 9723 21399 10972 21399 9722 21400 10973 21400 10974 21400 9722 21401 10974 21401 9723 21401 9723 21402 10974 21402 10975 21402 9723 21403 10975 21403 10972 21403 10973 21404 9722 21404 10976 21404 10976 21405 9722 21405 9721 21405 10976 21406 9721 21406 10977 21406 10978 21407 10979 21407 9720 21407 9720 21408 10979 21408 10980 21408 9720 21409 10980 21409 9721 21409 9721 21410 10980 21410 10981 21410 9721 21411 10981 21411 10977 21411 9719 21412 10982 21412 10983 21412 10983 21413 10984 21413 9719 21413 9719 21414 10984 21414 10985 21414 9719 21415 10985 21415 9720 21415 9720 21416 10985 21416 10986 21416 9720 21417 10986 21417 10978 21417 10987 21418 10988 21418 9718 21418 9718 21419 10988 21419 10989 21419 10989 21420 10990 21420 9718 21420 9718 21421 10990 21421 10991 21421 9718 21422 10991 21422 9719 21422 9719 21423 10991 21423 10992 21423 9719 21424 10992 21424 10982 21424 9847 21425 10993 21425 9717 21425 9717 21426 10993 21426 10994 21426 10994 21427 10995 21427 9717 21427 9717 21428 10995 21428 10996 21428 9717 21429 10996 21429 10997 21429 10997 21430 10998 21430 9717 21430 9717 21431 10998 21431 10999 21431 9717 21432 10999 21432 9718 21432 9718 21433 10999 21433 11000 21433 9718 21434 11000 21434 10987 21434 9717 21435 9716 21435 9847 21435 9847 21436 9716 21436 9708 21436 9847 21437 9708 21437 9842 21437 9842 21438 9708 21438 9695 21438 9842 21439 9695 21439 9697 21439 9685 21440 9692 21440 9715 21440 9715 21441 9692 21441 9691 21441 9715 21442 9691 21442 9716 21442 9716 21443 9691 21443 9690 21443 9716 21444 9690 21444 9688 21444 9674 21445 9714 21445 9675 21445 9675 21446 9714 21446 9713 21446 9675 21447 9713 21447 9676 21447 9674 21448 9673 21448 9714 21448 9714 21449 9673 21449 9686 21449 9714 21450 9686 21450 9715 21450 9715 21451 9686 21451 9684 21451 9715 21452 9684 21452 9685 21452 9712 21453 9671 21453 9713 21453 9713 21454 9671 21454 9679 21454 9713 21455 9679 21455 9676 21455 9747 21456 9662 21456 9712 21456 9712 21457 9662 21457 9661 21457 9661 21458 9660 21458 9712 21458 9712 21459 9660 21459 9669 21459 9712 21460 9669 21460 9671 21460 9746 21461 9654 21461 9747 21461 9747 21462 9654 21462 9655 21462 9655 21463 9656 21463 9747 21463 9747 21464 9656 21464 9663 21464 9747 21465 9663 21465 9662 21465 9744 21466 9643 21466 9745 21466 9745 21467 9643 21467 9641 21467 9745 21468 9641 21468 9640 21468 9640 21469 9645 21469 9745 21469 9745 21470 9645 21470 9650 21470 9745 21471 9650 21471 9746 21471 9746 21472 9650 21472 9652 21472 9746 21473 9652 21473 9654 21473 9743 21474 9638 21474 9744 21474 9744 21475 9638 21475 9637 21475 9637 21476 9636 21476 9744 21476 9744 21477 9636 21477 9644 21477 9744 21478 9644 21478 9643 21478 10922 21479 9632 21479 9743 21479 9743 21480 9632 21480 9639 21480 9743 21481 9639 21481 9638 21481 10943 21482 10945 21482 9739 21482 9739 21483 10945 21483 10940 21483 9739 21484 10940 21484 9740 21484 9740 21485 10940 21485 10923 21485 9740 21486 10923 21486 9741 21486 9741 21487 10923 21487 10922 21487 9741 21488 10922 21488 9742 21488 9742 21489 10922 21489 9743 21489 11001 21490 11002 21490 9738 21490 9738 21491 11002 21491 11003 21491 9738 21492 11003 21492 9739 21492 9739 21493 11003 21493 11004 21493 9739 21494 11004 21494 10943 21494 11001 21495 9738 21495 11005 21495 11005 21496 9738 21496 9737 21496 11005 21497 9737 21497 11006 21497 11007 21498 11008 21498 9736 21498 9736 21499 11008 21499 11009 21499 9736 21500 11009 21500 9737 21500 9737 21501 11009 21501 11010 21501 9737 21502 11010 21502 11006 21502 11011 21503 11012 21503 9735 21503 9735 21504 11012 21504 11013 21504 9735 21505 11013 21505 9736 21505 9736 21506 11013 21506 11014 21506 9736 21507 11014 21507 11007 21507 9733 21508 11015 21508 9734 21508 9734 21509 11015 21509 11016 21509 9734 21510 11016 21510 9735 21510 9735 21511 11016 21511 11017 21511 9735 21512 11017 21512 11011 21512 11018 21513 11019 21513 9733 21513 9733 21514 11019 21514 11020 21514 9733 21515 11020 21515 11015 21515 10953 21516 11021 21516 9732 21516 9732 21517 11021 21517 11022 21517 9732 21518 11022 21518 9733 21518 9733 21519 11022 21519 11023 21519 9733 21520 11023 21520 11018 21520 11024 21521 11025 21521 9767 21521 11026 21522 11027 21522 9770 21522 11028 21523 11029 21523 9769 21523 11030 21524 10962 21524 10961 21524 10961 21525 10960 21525 11030 21525 11030 21526 10960 21526 10965 21526 11030 21527 10965 21527 11029 21527 11029 21528 10965 21528 10964 21528 11029 21529 10964 21529 10969 21529 10969 21530 10968 21530 11029 21530 11029 21531 10968 21531 10967 21531 11029 21532 10967 21532 9769 21532 9769 21533 10967 21533 10966 21533 9769 21534 10966 21534 10970 21534 11031 21535 11032 21535 9756 21535 9756 21536 11032 21536 11033 21536 9756 21537 11033 21537 9769 21537 9769 21538 11033 21538 11034 21538 9769 21539 11034 21539 11028 21539 11035 21540 11036 21540 9757 21540 9757 21541 11036 21541 11037 21541 9757 21542 11037 21542 9756 21542 9756 21543 11037 21543 11038 21543 9756 21544 11038 21544 11031 21544 11039 21545 11040 21545 9782 21545 9782 21546 11040 21546 11041 21546 9782 21547 11041 21547 9757 21547 9757 21548 11041 21548 11042 21548 9757 21549 11042 21549 11035 21549 11043 21550 11044 21550 9765 21550 9765 21551 11044 21551 11045 21551 9765 21552 11045 21552 9782 21552 9782 21553 11045 21553 11046 21553 9782 21554 11046 21554 11039 21554 9770 21555 11027 21555 9765 21555 9765 21556 11027 21556 11047 21556 9765 21557 11047 21557 11043 21557 11048 21558 11049 21558 9777 21558 9777 21559 11049 21559 11050 21559 9777 21560 11050 21560 9770 21560 9770 21561 11050 21561 11051 21561 9770 21562 11051 21562 11026 21562 9767 21563 11025 21563 9778 21563 9778 21564 11025 21564 11052 21564 9778 21565 11052 21565 11053 21565 11053 21566 11054 21566 9778 21566 9778 21567 11054 21567 11055 21567 9778 21568 11055 21568 9777 21568 9777 21569 11055 21569 11056 21569 9777 21570 11056 21570 11048 21570 11057 21571 9766 21571 11058 21571 11058 21572 9766 21572 9759 21572 11058 21573 9759 21573 11059 21573 11059 21574 9759 21574 11060 21574 11057 21575 11061 21575 9766 21575 9766 21576 11061 21576 11062 21576 9766 21577 11062 21577 9767 21577 9767 21578 11062 21578 11063 21578 9767 21579 11063 21579 11024 21579 11064 21580 11065 21580 9758 21580 9758 21581 11065 21581 11066 21581 9758 21582 11066 21582 9759 21582 9759 21583 11066 21583 11067 21583 9759 21584 11067 21584 11060 21584 11068 21585 11069 21585 9768 21585 9768 21586 11069 21586 11070 21586 11070 21587 11071 21587 9768 21587 9768 21588 11071 21588 11072 21588 9768 21589 11072 21589 9758 21589 9758 21590 11072 21590 11073 21590 9758 21591 11073 21591 11064 21591 11068 21592 9768 21592 11074 21592 11074 21593 9768 21593 9771 21593 11074 21594 9771 21594 11075 21594 11076 21595 11077 21595 9772 21595 9772 21596 11077 21596 11078 21596 9772 21597 11078 21597 9771 21597 9771 21598 11078 21598 11079 21598 9771 21599 11079 21599 11075 21599 11076 21600 9772 21600 11080 21600 11080 21601 9772 21601 9779 21601 11080 21602 9779 21602 11081 21602 9780 21603 11082 21603 11083 21603 11083 21604 11084 21604 9780 21604 9780 21605 11084 21605 11085 21605 9780 21606 11085 21606 9779 21606 9779 21607 11085 21607 11086 21607 9779 21608 11086 21608 11081 21608 11082 21609 9780 21609 11087 21609 11087 21610 9780 21610 9781 21610 11087 21611 9781 21611 11088 21611 9775 21612 9850 21612 9774 21612 9774 21613 9850 21613 9849 21613 9774 21614 9849 21614 9773 21614 9773 21615 9849 21615 9848 21615 9773 21616 9848 21616 9783 21616 9783 21617 9848 21617 9852 21617 9783 21618 9852 21618 9781 21618 9781 21619 9852 21619 11089 21619 9781 21620 11089 21620 11088 21620 9776 21621 9840 21621 9775 21621 9775 21622 9840 21622 9851 21622 9775 21623 9851 21623 9850 21623 9749 21624 9846 21624 9752 21624 9752 21625 9846 21625 9845 21625 9752 21626 9845 21626 9751 21626 9751 21627 9845 21627 9844 21627 9751 21628 9844 21628 9754 21628 9754 21629 9844 21629 9843 21629 9754 21630 9843 21630 9776 21630 9776 21631 9843 21631 9841 21631 9776 21632 9841 21632 9840 21632 9748 21633 10993 21633 9749 21633 9749 21634 10993 21634 9847 21634 9749 21635 9847 21635 9846 21635 10997 21636 10996 21636 9750 21636 9750 21637 10996 21637 10995 21637 9750 21638 10995 21638 9748 21638 9748 21639 10995 21639 10994 21639 9748 21640 10994 21640 10993 21640 10997 21641 9750 21641 10998 21641 10998 21642 9750 21642 9753 21642 10998 21643 9753 21643 10999 21643 9760 21644 10988 21644 10987 21644 9760 21645 10987 21645 9753 21645 9753 21646 10987 21646 11000 21646 9753 21647 11000 21647 10999 21647 9755 21648 10990 21648 9760 21648 9760 21649 10990 21649 10989 21649 9760 21650 10989 21650 10988 21650 10983 21651 10982 21651 9761 21651 9761 21652 10982 21652 10992 21652 9761 21653 10992 21653 9755 21653 9755 21654 10992 21654 10991 21654 9755 21655 10991 21655 10990 21655 10978 21656 10986 21656 9762 21656 9762 21657 10986 21657 10985 21657 9762 21658 10985 21658 9761 21658 9761 21659 10985 21659 10984 21659 9761 21660 10984 21660 10983 21660 10977 21661 10981 21661 9763 21661 9763 21662 10981 21662 10980 21662 9763 21663 10980 21663 9762 21663 9762 21664 10980 21664 10979 21664 9762 21665 10979 21665 10978 21665 10972 21666 10975 21666 9764 21666 10970 21667 10949 21667 9769 21667 9769 21668 10949 21668 10948 21668 9769 21669 10948 21669 9764 21669 9764 21670 10948 21670 10971 21670 9764 21671 10971 21671 10972 21671 10975 21672 10974 21672 9764 21672 9764 21673 10974 21673 10973 21673 9764 21674 10973 21674 9763 21674 9763 21675 10973 21675 10976 21675 9763 21676 10976 21676 10977 21676 10108 21677 10107 21677 11090 21677 9862 21678 9861 21678 11090 21678 11091 21679 11092 21679 11093 21679 11094 21680 11095 21680 11096 21680 11097 21681 11098 21681 11099 21681 11089 21682 9852 21682 9853 21682 11100 21683 11083 21683 11082 21683 11100 21684 11082 21684 9854 21684 9854 21685 11082 21685 11087 21685 9854 21686 11087 21686 9853 21686 9853 21687 11087 21687 11088 21687 9853 21688 11088 21688 11089 21688 11083 21689 11100 21689 11084 21689 11084 21690 11100 21690 11101 21690 11084 21691 11101 21691 11085 21691 11085 21692 11101 21692 11086 21692 11086 21693 11101 21693 11102 21693 11086 21694 11102 21694 11081 21694 11081 21695 11102 21695 11080 21695 11080 21696 11102 21696 11103 21696 11080 21697 11103 21697 11076 21697 11104 21698 11078 21698 11103 21698 11103 21699 11078 21699 11077 21699 11103 21700 11077 21700 11076 21700 11105 21701 11106 21701 11107 21701 11108 21702 11109 21702 11110 21702 11110 21703 11109 21703 11111 21703 11108 21704 11112 21704 11109 21704 11109 21705 11112 21705 11113 21705 11109 21706 11113 21706 11106 21706 11106 21707 11113 21707 11114 21707 11106 21708 11114 21708 11107 21708 11115 21709 11116 21709 11117 21709 11117 21710 11116 21710 11096 21710 11117 21711 11096 21711 11118 21711 11099 21712 11119 21712 11097 21712 11097 21713 11119 21713 11120 21713 11097 21714 11120 21714 11121 21714 11121 21715 11120 21715 11122 21715 11121 21716 11122 21716 11123 21716 11115 21717 11124 21717 11116 21717 11116 21718 11124 21718 11125 21718 11116 21719 11125 21719 11111 21719 11111 21720 11125 21720 11126 21720 11111 21721 11126 21721 11110 21721 11095 21722 11094 21722 11127 21722 11127 21723 11094 21723 11128 21723 11127 21724 11128 21724 11129 21724 11129 21725 11130 21725 11127 21725 11127 21726 11130 21726 11131 21726 11127 21727 11131 21727 11132 21727 11132 21728 11098 21728 11127 21728 11127 21729 11098 21729 11097 21729 11127 21730 11097 21730 11095 21730 11095 21731 11097 21731 11121 21731 11095 21732 11121 21732 11096 21732 11096 21733 11121 21733 11123 21733 11096 21734 11123 21734 11118 21734 10111 21735 11133 21735 9982 21735 9982 21736 11133 21736 11134 21736 10049 21737 11135 21737 10041 21737 10041 21738 11135 21738 11136 21738 10111 21739 10110 21739 11133 21739 11133 21740 10110 21740 10109 21740 11133 21741 10109 21741 11136 21741 11136 21742 10109 21742 10042 21742 11136 21743 10042 21743 10041 21743 11137 21744 11138 21744 11139 21744 11139 21745 11138 21745 11140 21745 11141 21746 11091 21746 11139 21746 11139 21747 11091 21747 11093 21747 11139 21748 11093 21748 11137 21748 11137 21749 11093 21749 11142 21749 10051 21750 10050 21750 11143 21750 10051 21751 11143 21751 10052 21751 10052 21752 11143 21752 11144 21752 10052 21753 11144 21753 10053 21753 10053 21754 11144 21754 11145 21754 10053 21755 11145 21755 10036 21755 11146 21756 11147 21756 11140 21756 11140 21757 11147 21757 11148 21757 11140 21758 11148 21758 11139 21758 11139 21759 11148 21759 11149 21759 11139 21760 11149 21760 11141 21760 10049 21761 10048 21761 11135 21761 11135 21762 10048 21762 10047 21762 11135 21763 10047 21763 11145 21763 11145 21764 10047 21764 10037 21764 11145 21765 10037 21765 10036 21765 11150 21766 9864 21766 9863 21766 11090 21767 10107 21767 11151 21767 11090 21768 9861 21768 10108 21768 10108 21769 9861 21769 9860 21769 10108 21770 9860 21770 9859 21770 10008 21771 11152 21771 9993 21771 9993 21772 11152 21772 11153 21772 9993 21773 11153 21773 9994 21773 9994 21774 11153 21774 9996 21774 9986 21775 11154 21775 9987 21775 9987 21776 11154 21776 11155 21776 10008 21777 10007 21777 11152 21777 11152 21778 10007 21778 10006 21778 11152 21779 10006 21779 11155 21779 11155 21780 10006 21780 10005 21780 11155 21781 10005 21781 9987 21781 10107 21782 10106 21782 11151 21782 11151 21783 10106 21783 10000 21783 11151 21784 10000 21784 11153 21784 11153 21785 10000 21785 9999 21785 11153 21786 9999 21786 9996 21786 11144 21787 11156 21787 11145 21787 11145 21788 11156 21788 11157 21788 11145 21789 11157 21789 11135 21789 11135 21790 11157 21790 11158 21790 11135 21791 11158 21791 11136 21791 11136 21792 11158 21792 11159 21792 11136 21793 11159 21793 11133 21793 11133 21794 11159 21794 11160 21794 11133 21795 11160 21795 11134 21795 11134 21796 11160 21796 11161 21796 11134 21797 11161 21797 11154 21797 11154 21798 11161 21798 11162 21798 11154 21799 11162 21799 11155 21799 11155 21800 11162 21800 11163 21800 11155 21801 11163 21801 11152 21801 11152 21802 11163 21802 11164 21802 11152 21803 11164 21803 11153 21803 11153 21804 11164 21804 11165 21804 11153 21805 11165 21805 11151 21805 11151 21806 11165 21806 11166 21806 11151 21807 11166 21807 11090 21807 11090 21808 11166 21808 11150 21808 11090 21809 11150 21809 9862 21809 9862 21810 11150 21810 9863 21810 9855 21811 9856 21811 11150 21811 11150 21812 9856 21812 9865 21812 11150 21813 9865 21813 9864 21813 11167 21814 11168 21814 11104 21814 11104 21815 11168 21815 11169 21815 11104 21816 11169 21816 11078 21816 11107 21817 11170 21817 11105 21817 11105 21818 11170 21818 11171 21818 11105 21819 11171 21819 11167 21819 11167 21820 11171 21820 11172 21820 11167 21821 11172 21821 11168 21821 10050 21822 10031 21822 11143 21822 11143 21823 10031 21823 10029 21823 11143 21824 10029 21824 11173 21824 11173 21825 10029 21825 10028 21825 11173 21826 10028 21826 10027 21826 11142 21827 11156 21827 11137 21827 11137 21828 11156 21828 11144 21828 11137 21829 11144 21829 11138 21829 11138 21830 11144 21830 11143 21830 11138 21831 11143 21831 11140 21831 11140 21832 11143 21832 11173 21832 11140 21833 11173 21833 11146 21833 11146 21834 11173 21834 10027 21834 11146 21835 10027 21835 9918 21835 9986 21836 9985 21836 11154 21836 11154 21837 9985 21837 9984 21837 11154 21838 9984 21838 11134 21838 11134 21839 9984 21839 9983 21839 11134 21840 9983 21840 9982 21840 11092 21841 11129 21841 11093 21841 11093 21842 11129 21842 11128 21842 11093 21843 11128 21843 11142 21843 11142 21844 11128 21844 11094 21844 11142 21845 11094 21845 11156 21845 11156 21846 11094 21846 11096 21846 11156 21847 11096 21847 11157 21847 11157 21848 11096 21848 11116 21848 11157 21849 11116 21849 11158 21849 11158 21850 11116 21850 11111 21850 11158 21851 11111 21851 11159 21851 11159 21852 11111 21852 11109 21852 11159 21853 11109 21853 11160 21853 11160 21854 11109 21854 11106 21854 11160 21855 11106 21855 11161 21855 11161 21856 11106 21856 11105 21856 11161 21857 11105 21857 11162 21857 11162 21858 11105 21858 11167 21858 11162 21859 11167 21859 11163 21859 11163 21860 11167 21860 11104 21860 11163 21861 11104 21861 11164 21861 11164 21862 11104 21862 11103 21862 11164 21863 11103 21863 11165 21863 11165 21864 11103 21864 11102 21864 11165 21865 11102 21865 11166 21865 11166 21866 11102 21866 11101 21866 11166 21867 11101 21867 11150 21867 11150 21868 11101 21868 11100 21868 11150 21869 11100 21869 9855 21869 9855 21870 11100 21870 9854 21870 11078 21871 11169 21871 11079 21871 11079 21872 11169 21872 11168 21872 11079 21873 11168 21873 11075 21873 11070 21874 11069 21874 11171 21874 11171 21875 11069 21875 11172 21875 11172 21876 11069 21876 11068 21876 11172 21877 11068 21877 11168 21877 11168 21878 11068 21878 11074 21878 11168 21879 11074 21879 11075 21879 11064 21880 11073 21880 11174 21880 11174 21881 11073 21881 11072 21881 11174 21882 11072 21882 11175 21882 11175 21883 11072 21883 11071 21883 11175 21884 11071 21884 11070 21884 11059 21885 11060 21885 11176 21885 11065 21886 11177 21886 11066 21886 11066 21887 11177 21887 11176 21887 11066 21888 11176 21888 11067 21888 11067 21889 11176 21889 11060 21889 11178 21890 11024 21890 11179 21890 11179 21891 11024 21891 11063 21891 11179 21892 11063 21892 11062 21892 11058 21893 11180 21893 11057 21893 11057 21894 11180 21894 11179 21894 11057 21895 11179 21895 11061 21895 11061 21896 11179 21896 11062 21896 11108 21897 11181 21897 11112 21897 11112 21898 11181 21898 11174 21898 11112 21899 11174 21899 11113 21899 11113 21900 11174 21900 11114 21900 11070 21901 11171 21901 11175 21901 11175 21902 11171 21902 11170 21902 11175 21903 11170 21903 11174 21903 11174 21904 11170 21904 11107 21904 11174 21905 11107 21905 11114 21905 11182 21906 11183 21906 11184 21906 11184 21907 11183 21907 11185 21907 11184 21908 11185 21908 11186 21908 11186 21909 11185 21909 11187 21909 11178 21910 11179 21910 11188 21910 11188 21911 11179 21911 11189 21911 11188 21912 11189 21912 11190 21912 11183 21913 11191 21913 11185 21913 11185 21914 11191 21914 11192 21914 11185 21915 11192 21915 11189 21915 11189 21916 11192 21916 11193 21916 11189 21917 11193 21917 11190 21917 11058 21918 11059 21918 11180 21918 11180 21919 11059 21919 11176 21919 11180 21920 11176 21920 11179 21920 11179 21921 11176 21921 11194 21921 11179 21922 11194 21922 11189 21922 11189 21923 11194 21923 11195 21923 11189 21924 11195 21924 11185 21924 11185 21925 11195 21925 11196 21925 11185 21926 11196 21926 11187 21926 11187 21927 11196 21927 11197 21927 11198 21928 11120 21928 11119 21928 11199 21929 11198 21929 11200 21929 11200 21930 11198 21930 11119 21930 11200 21931 11119 21931 11201 21931 11201 21932 11119 21932 11099 21932 11202 21933 11123 21933 11198 21933 11198 21934 11123 21934 11122 21934 11198 21935 11122 21935 11120 21935 11124 21936 11115 21936 11203 21936 11203 21937 11115 21937 11117 21937 11203 21938 11117 21938 11202 21938 11202 21939 11117 21939 11118 21939 11202 21940 11118 21940 11123 21940 11108 21941 11110 21941 11181 21941 11181 21942 11110 21942 11126 21942 11181 21943 11126 21943 11203 21943 11203 21944 11126 21944 11125 21944 11203 21945 11125 21945 11124 21945 11065 21946 11064 21946 11177 21946 11177 21947 11064 21947 11174 21947 11177 21948 11174 21948 11176 21948 11176 21949 11174 21949 11181 21949 11176 21950 11181 21950 11194 21950 11194 21951 11181 21951 11203 21951 11194 21952 11203 21952 11195 21952 11195 21953 11203 21953 11202 21953 11195 21954 11202 21954 11196 21954 11196 21955 11202 21955 11198 21955 11196 21956 11198 21956 11197 21956 11197 21957 11198 21957 11199 21957 8771 21958 8781 21958 10116 21958 10116 21959 8781 21959 10223 21959 11204 21960 10116 21960 11205 21960 11205 21961 10116 21961 10223 21961 11205 21962 10223 21962 11206 21962 11206 21963 10223 21963 10216 21963 11206 21964 10216 21964 10215 21964 10134 21965 10133 21965 10157 21965 10118 21966 10152 21966 10120 21966 10120 21967 10152 21967 10153 21967 10120 21968 10153 21968 10119 21968 10119 21969 10153 21969 10124 21969 10133 21970 10131 21970 10157 21970 10157 21971 10131 21971 10132 21971 10157 21972 10132 21972 10156 21972 10159 21973 10136 21973 10158 21973 10158 21974 10136 21974 10139 21974 10158 21975 10139 21975 10157 21975 10157 21976 10139 21976 10135 21976 10157 21977 10135 21977 10134 21977 10140 21978 10141 21978 10063 21978 10063 21979 10141 21979 10142 21979 10145 21980 10146 21980 10144 21980 10144 21981 10146 21981 10143 21981 10146 21982 10147 21982 10143 21982 10143 21983 10147 21983 10148 21983 10143 21984 10148 21984 10142 21984 10118 21985 10117 21985 10152 21985 10152 21986 10117 21986 9904 21986 10152 21987 9904 21987 10151 21987 10151 21988 9904 21988 10063 21988 10151 21989 10063 21989 10150 21989 10150 21990 10063 21990 10142 21990 10150 21991 10142 21991 10149 21991 10149 21992 10142 21992 10148 21992 10130 21993 10125 21993 10155 21993 10155 21994 10125 21994 10126 21994 10155 21995 10126 21995 10154 21995 10132 21996 10127 21996 10156 21996 10156 21997 10127 21997 10128 21997 10156 21998 10128 21998 10155 21998 10155 21999 10128 21999 10129 21999 10155 22000 10129 22000 10130 22000 10159 22001 8392 22001 8393 22001 11207 22002 10116 22002 11208 22002 11208 22003 10116 22003 11204 22003 8393 22004 11209 22004 10159 22004 10159 22005 11209 22005 11210 22005 10159 22006 11210 22006 10136 22006 11207 22007 11211 22007 10116 22007 10116 22008 11211 22008 11212 22008 10116 22009 11212 22009 10115 22009 10126 22010 10122 22010 10154 22010 10154 22011 10122 22011 10121 22011 10154 22012 10121 22012 10153 22012 10153 22013 10121 22013 10123 22013 10153 22014 10123 22014 10124 22014 8393 22015 10112 22015 11209 22015 11209 22016 10112 22016 10113 22016 11209 22017 10113 22017 11213 22017 11213 22018 10113 22018 10114 22018 11213 22019 10114 22019 11214 22019 11214 22020 10114 22020 10115 22020 11214 22021 10115 22021 11215 22021 11215 22022 10115 22022 11212 22022 11216 22023 11217 22023 10186 22023 10186 22024 11217 22024 11218 22024 10186 22025 11218 22025 10185 22025 10185 22026 11218 22026 11219 22026 10185 22027 11219 22027 10184 22027 10184 22028 11219 22028 11220 22028 10184 22029 11220 22029 10183 22029 10183 22030 11220 22030 11221 22030 10183 22031 11221 22031 10182 22031 10182 22032 11221 22032 11222 22032 10182 22033 11222 22033 10181 22033 10181 22034 11222 22034 11223 22034 10181 22035 11223 22035 10180 22035 10180 22036 11223 22036 11224 22036 10180 22037 11224 22037 10179 22037 10179 22038 11224 22038 11225 22038 10179 22039 11225 22039 10178 22039 10178 22040 11225 22040 11226 22040 10178 22041 11226 22041 10177 22041 10177 22042 11226 22042 11227 22042 10177 22043 11227 22043 10176 22043 10176 22044 11227 22044 11228 22044 10176 22045 11228 22045 10175 22045 10175 22046 11228 22046 11229 22046 10175 22047 11229 22047 10174 22047 10174 22048 11229 22048 11230 22048 10174 22049 11230 22049 10173 22049 10173 22050 11230 22050 11231 22050 10173 22051 11231 22051 10172 22051 10172 22052 11231 22052 11232 22052 10172 22053 11232 22053 10171 22053 10171 22054 11232 22054 11233 22054 10171 22055 11233 22055 10170 22055 10170 22056 11233 22056 11234 22056 10170 22057 11234 22057 10169 22057 10169 22058 11234 22058 11235 22058 10169 22059 11235 22059 10168 22059 10168 22060 11235 22060 11236 22060 10168 22061 11236 22061 10167 22061 10167 22062 11236 22062 11237 22062 10167 22063 11237 22063 10166 22063 10166 22064 11237 22064 11238 22064 10166 22065 11238 22065 10165 22065 10165 22066 11238 22066 11239 22066 10165 22067 11239 22067 10164 22067 10164 22068 11239 22068 11240 22068 10164 22069 11240 22069 10163 22069 10163 22070 11240 22070 11241 22070 10163 22071 11241 22071 10162 22071 10162 22072 11241 22072 11242 22072 10162 22073 11242 22073 10160 22073 10160 22074 11242 22074 11243 22074 10160 22075 11243 22075 10161 22075 10161 22076 11243 22076 11244 22076 10161 22077 11244 22077 10211 22077 10211 22078 11244 22078 11245 22078 10211 22079 11245 22079 10210 22079 10210 22080 11245 22080 11246 22080 10210 22081 11246 22081 10209 22081 10209 22082 11246 22082 11247 22082 10209 22083 11247 22083 10208 22083 10208 22084 11247 22084 11248 22084 10208 22085 11248 22085 10207 22085 10207 22086 11248 22086 11249 22086 10207 22087 11249 22087 10206 22087 10206 22088 11249 22088 11250 22088 10206 22089 11250 22089 10205 22089 10205 22090 11250 22090 11251 22090 10205 22091 11251 22091 10204 22091 10204 22092 11251 22092 11252 22092 10204 22093 11252 22093 10203 22093 10203 22094 11252 22094 11253 22094 10203 22095 11253 22095 10202 22095 10202 22096 11253 22096 11254 22096 10202 22097 11254 22097 10201 22097 10201 22098 11254 22098 11255 22098 10201 22099 11255 22099 10200 22099 10200 22100 11255 22100 11256 22100 10200 22101 11256 22101 10199 22101 10199 22102 11256 22102 11257 22102 10199 22103 11257 22103 10198 22103 10198 22104 11257 22104 11258 22104 10198 22105 11258 22105 10197 22105 10197 22106 11258 22106 11259 22106 10197 22107 11259 22107 10196 22107 10196 22108 11259 22108 11260 22108 10196 22109 11260 22109 10195 22109 10195 22110 11260 22110 11261 22110 10195 22111 11261 22111 10194 22111 10194 22112 11261 22112 11262 22112 10194 22113 11262 22113 10193 22113 10193 22114 11262 22114 11263 22114 10193 22115 11263 22115 10192 22115 10192 22116 11263 22116 11264 22116 10192 22117 11264 22117 10191 22117 10191 22118 11264 22118 11265 22118 10191 22119 11265 22119 10190 22119 10190 22120 11265 22120 11266 22120 10190 22121 11266 22121 10189 22121 10189 22122 11266 22122 11267 22122 10189 22123 11267 22123 10188 22123 10188 22124 11267 22124 11216 22124 10188 22125 11216 22125 10186 22125 10743 22126 10742 22126 11268 22126 10791 22127 10790 22127 11269 22127 11270 22128 10643 22128 10753 22128 11270 22129 11271 22129 11272 22129 11272 22130 11271 22130 11273 22130 11272 22131 11273 22131 11269 22131 11274 22132 10785 22132 10784 22132 11274 22133 10784 22133 11273 22133 11273 22134 10784 22134 10783 22134 11273 22135 10783 22135 10782 22135 10782 22136 10796 22136 11273 22136 11273 22137 10796 22137 10795 22137 11273 22138 10795 22138 11269 22138 11269 22139 10795 22139 10794 22139 11269 22140 10794 22140 10791 22140 10732 22141 10733 22141 11274 22141 11274 22142 10733 22142 10734 22142 11274 22143 10734 22143 10785 22143 10644 22144 10731 22144 11275 22144 11275 22145 10731 22145 10732 22145 11276 22146 10679 22146 10735 22146 11276 22147 10735 22147 11275 22147 11275 22148 10735 22148 10645 22148 11275 22149 10645 22149 10644 22149 11268 22150 10681 22150 10682 22150 10682 22151 10677 22151 11276 22151 11276 22152 10677 22152 10678 22152 11276 22153 10678 22153 10679 22153 9520 22154 9342 22154 11268 22154 11268 22155 9342 22155 10680 22155 11268 22156 10680 22156 10681 22156 9520 22157 11268 22157 9517 22157 9517 22158 11268 22158 10742 22158 9517 22159 10742 22159 9518 22159 10682 22160 11276 22160 11268 22160 11268 22161 11276 22161 10744 22161 11268 22162 10744 22162 10743 22162 10748 22163 10747 22163 11275 22163 11275 22164 10747 22164 10746 22164 11275 22165 10746 22165 11276 22165 11276 22166 10746 22166 10745 22166 11276 22167 10745 22167 10744 22167 10732 22168 11274 22168 11275 22168 11275 22169 11274 22169 10749 22169 11275 22170 10749 22170 10748 22170 11270 22171 10753 22171 11271 22171 11271 22172 10753 22172 10752 22172 11271 22173 10752 22173 11273 22173 11273 22174 10752 22174 10751 22174 11273 22175 10751 22175 11274 22175 11274 22176 10751 22176 10750 22176 11274 22177 10750 22177 10749 22177 11277 22178 11278 22178 11279 22178 11280 22179 11281 22179 11282 22179 11283 22180 11284 22180 11285 22180 10801 22181 10800 22181 11286 22181 10899 22182 10898 22182 11277 22182 10894 22183 10895 22183 11287 22183 11287 22184 10895 22184 10899 22184 10898 22185 10897 22185 11277 22185 11277 22186 10897 22186 10896 22186 11277 22187 10896 22187 11288 22187 11288 22188 10896 22188 10901 22188 11288 22189 10901 22189 10900 22189 11289 22190 10816 22190 10818 22190 10818 22191 10820 22191 11289 22191 11289 22192 10820 22192 10892 22192 11289 22193 10892 22193 10891 22193 10893 22194 10882 22194 11287 22194 11287 22195 10882 22195 10881 22195 11287 22196 10881 22196 10894 22196 10880 22197 10879 22197 11283 22197 11283 22198 10879 22198 10878 22198 11283 22199 10878 22199 11289 22199 11289 22200 10878 22200 10811 22200 11289 22201 10811 22201 10816 22201 10877 22202 10876 22202 11290 22202 11290 22203 10876 22203 10875 22203 11290 22204 10875 22204 10874 22204 10873 22205 10872 22205 11291 22205 11291 22206 10872 22206 10871 22206 11291 22207 10871 22207 11292 22207 11292 22208 10871 22208 10870 22208 11292 22209 10870 22209 11285 22209 10868 22210 10867 22210 11293 22210 11293 22211 10867 22211 10866 22211 11293 22212 10866 22212 11291 22212 11291 22213 10866 22213 10865 22213 11291 22214 10865 22214 10873 22214 11294 22215 10861 22215 11295 22215 11295 22216 10861 22216 10869 22216 11296 22217 10859 22217 10860 22217 11296 22218 10860 22218 11297 22218 10860 22219 10864 22219 11297 22219 11297 22220 10864 22220 10863 22220 11297 22221 10863 22221 11294 22221 11294 22222 10863 22222 10862 22222 11294 22223 10862 22223 10861 22223 11298 22224 10854 22224 11296 22224 11296 22225 10854 22225 10853 22225 11296 22226 10853 22226 10859 22226 10858 22227 10857 22227 11299 22227 11299 22228 10857 22228 10856 22228 11299 22229 10856 22229 11298 22229 11298 22230 10856 22230 10855 22230 11298 22231 10855 22231 10854 22231 10850 22232 10851 22232 11299 22232 11299 22233 10851 22233 10852 22233 11299 22234 10852 22234 10858 22234 10798 22235 10797 22235 11299 22235 11299 22236 10797 22236 10802 22236 11299 22237 10802 22237 10850 22237 10850 22238 10802 22238 10803 22238 10850 22239 10803 22239 10804 22239 10801 22240 11286 22240 10792 22240 11300 22241 11301 22241 11302 22241 11302 22242 11301 22242 11303 22242 10790 22243 10792 22243 11304 22243 11304 22244 10792 22244 11286 22244 11304 22245 11286 22245 11305 22245 11305 22246 11286 22246 11303 22246 11305 22247 11303 22247 11306 22247 11306 22248 11303 22248 11301 22248 11307 22249 11308 22249 11309 22249 11310 22250 11311 22250 11308 22250 11308 22251 11311 22251 11312 22251 11308 22252 11312 22252 11309 22252 11309 22253 11313 22253 11307 22253 11307 22254 11313 22254 11314 22254 11307 22255 11314 22255 11302 22255 11302 22256 11314 22256 11315 22256 11302 22257 11315 22257 11300 22257 10800 22258 10798 22258 11286 22258 11286 22259 10798 22259 11299 22259 11286 22260 11299 22260 11303 22260 11303 22261 11299 22261 11298 22261 11303 22262 11298 22262 11302 22262 11302 22263 11298 22263 11296 22263 11302 22264 11296 22264 11307 22264 11307 22265 11296 22265 11297 22265 11307 22266 11297 22266 11308 22266 11308 22267 11297 22267 11294 22267 11308 22268 11294 22268 11310 22268 11310 22269 11294 22269 11295 22269 11310 22270 11295 22270 11316 22270 11316 22271 11295 22271 11317 22271 11316 22272 11317 22272 11318 22272 11318 22273 11317 22273 11319 22273 11318 22274 11319 22274 11320 22274 11320 22275 11319 22275 11321 22275 11320 22276 11322 22276 11318 22276 11318 22277 11322 22277 11323 22277 11318 22278 11323 22278 11324 22278 11325 22279 11326 22279 11327 22279 11328 22280 11329 22280 11330 22280 11331 22281 11332 22281 11333 22281 11333 22282 11332 22282 11334 22282 11333 22283 11334 22283 11335 22283 11336 22284 11331 22284 11337 22284 11337 22285 11331 22285 11333 22285 11337 22286 11333 22286 11338 22286 11338 22287 11333 22287 11339 22287 11338 22288 11339 22288 11340 22288 11341 22289 11342 22289 11343 22289 11343 22290 11342 22290 11344 22290 11343 22291 11344 22291 11325 22291 11325 22292 11344 22292 11345 22292 11325 22293 11345 22293 11326 22293 10870 22294 10877 22294 11285 22294 11285 22295 10877 22295 11290 22295 11285 22296 11290 22296 11283 22296 11283 22297 11290 22297 10874 22297 11283 22298 10874 22298 10880 22298 11281 22299 11280 22299 11346 22299 11346 22300 11280 22300 11347 22300 11346 22301 11347 22301 11321 22301 11321 22302 11347 22302 11328 22302 11321 22303 11328 22303 11320 22303 11320 22304 11328 22304 11330 22304 11320 22305 11330 22305 11322 22305 11278 22306 11348 22306 11279 22306 11279 22307 11348 22307 11349 22307 11279 22308 11349 22308 11341 22308 10899 22309 11277 22309 11287 22309 11287 22310 11277 22310 11279 22310 11287 22311 11279 22311 11282 22311 11282 22312 11279 22312 11341 22312 11282 22313 11341 22313 11280 22313 11280 22314 11341 22314 11343 22314 11280 22315 11343 22315 11347 22315 11347 22316 11343 22316 11325 22316 11347 22317 11325 22317 11328 22317 11328 22318 11325 22318 11327 22318 11328 22319 11327 22319 11329 22319 11350 22320 11351 22320 11340 22320 11340 22321 11351 22321 11352 22321 11340 22322 11352 22322 11338 22322 11338 22323 11352 22323 11353 22323 11338 22324 11353 22324 11337 22324 11337 22325 11353 22325 11354 22325 11337 22326 11354 22326 11336 22326 11336 22327 11354 22327 11355 22327 11336 22328 11355 22328 11356 22328 11356 22329 11355 22329 11357 22329 11324 22330 11358 22330 11318 22330 11318 22331 11358 22331 11359 22331 11318 22332 11359 22332 11316 22332 11316 22333 11359 22333 11360 22333 11316 22334 11360 22334 11310 22334 11310 22335 11360 22335 11361 22335 11310 22336 11361 22336 11311 22336 11348 22337 11350 22337 11349 22337 11349 22338 11350 22338 11340 22338 11349 22339 11340 22339 11341 22339 11341 22340 11340 22340 11339 22340 11341 22341 11339 22341 11342 22341 11342 22342 11339 22342 11333 22342 11342 22343 11333 22343 11344 22343 11344 22344 11333 22344 11335 22344 11344 22345 11335 22345 11345 22345 10869 22346 10868 22346 11295 22346 11295 22347 10868 22347 11293 22347 11295 22348 11293 22348 11317 22348 11317 22349 11293 22349 11291 22349 11317 22350 11291 22350 11319 22350 11319 22351 11291 22351 11292 22351 11319 22352 11292 22352 11321 22352 11321 22353 11292 22353 11285 22353 11321 22354 11285 22354 11346 22354 11346 22355 11285 22355 11284 22355 11346 22356 11284 22356 11281 22356 11281 22357 11284 22357 11283 22357 11281 22358 11283 22358 11282 22358 11282 22359 11283 22359 11289 22359 11282 22360 11289 22360 11287 22360 11287 22361 11289 22361 10891 22361 11287 22362 10891 22362 10893 22362 11362 22363 11363 22363 11364 22363 11365 22364 11357 22364 11355 22364 10904 22365 10903 22365 11366 22365 10912 22366 10911 22366 11367 22366 10908 22367 10913 22367 11368 22367 10944 22368 11369 22368 11370 22368 10919 22369 10885 22369 11371 22369 11371 22370 10885 22370 10884 22370 11371 22371 10884 22371 10883 22371 10944 22372 11370 22372 10946 22372 10946 22373 11370 22373 11372 22373 10946 22374 11372 22374 10947 22374 10947 22375 11372 22375 11373 22375 10947 22376 11373 22376 10938 22376 10938 22377 11373 22377 11374 22377 10938 22378 11374 22378 10939 22378 10939 22379 11374 22379 11375 22379 10939 22380 11375 22380 10941 22380 10941 22381 11375 22381 11376 22381 10941 22382 11376 22382 10942 22382 10942 22383 11376 22383 11377 22383 10942 22384 11377 22384 10935 22384 10935 22385 11377 22385 11378 22385 10935 22386 11378 22386 10936 22386 10936 22387 11378 22387 11379 22387 10936 22388 11379 22388 10937 22388 10937 22389 11379 22389 11380 22389 10937 22390 11380 22390 10924 22390 10924 22391 11380 22391 11381 22391 10924 22392 11381 22392 10927 22392 10927 22393 11381 22393 11382 22393 10927 22394 11382 22394 10928 22394 10928 22395 11382 22395 11383 22395 10928 22396 11383 22396 10932 22396 10932 22397 11383 22397 11384 22397 10932 22398 11384 22398 10933 22398 10933 22399 11384 22399 11385 22399 10933 22400 11385 22400 10934 22400 10934 22401 11385 22401 11386 22401 10934 22402 11386 22402 10929 22402 10929 22403 11386 22403 11387 22403 10929 22404 11387 22404 10930 22404 10930 22405 11387 22405 11388 22405 10930 22406 11388 22406 10931 22406 10931 22407 11388 22407 11389 22407 10931 22408 11389 22408 10925 22408 10925 22409 11389 22409 11371 22409 10925 22410 11371 22410 10926 22410 10926 22411 11371 22411 10883 22411 10926 22412 10883 22412 10889 22412 10916 22413 10915 22413 11390 22413 11390 22414 10915 22414 10921 22414 11390 22415 10921 22415 10920 22415 10913 22416 10914 22416 11368 22416 11368 22417 10914 22417 10918 22417 11368 22418 10918 22418 10917 22418 10911 22419 10910 22419 11367 22419 11367 22420 10910 22420 10909 22420 11367 22421 10909 22421 11391 22421 10903 22422 10902 22422 11366 22422 11366 22423 10902 22423 10906 22423 11366 22424 10906 22424 10907 22424 11277 22425 11288 22425 11392 22425 11392 22426 11288 22426 10900 22426 11392 22427 10900 22427 10905 22427 11350 22428 11348 22428 11393 22428 11393 22429 11348 22429 11278 22429 11353 22430 11352 22430 11394 22430 11394 22431 11352 22431 11351 22431 11395 22432 11355 22432 11354 22432 11365 22433 11355 22433 11396 22433 11396 22434 11355 22434 11395 22434 11396 22435 11395 22435 11397 22435 11397 22436 11395 22436 11398 22436 11397 22437 11398 22437 11399 22437 11399 22438 11398 22438 11400 22438 11399 22439 11400 22439 11401 22439 11402 22440 11403 22440 11404 22440 11404 22441 11403 22441 11405 22441 11404 22442 11405 22442 11406 22442 11406 22443 11405 22443 11407 22443 11406 22444 11407 22444 11408 22444 11408 22445 11407 22445 11409 22445 11408 22446 11409 22446 11400 22446 11400 22447 11409 22447 11410 22447 11400 22448 11410 22448 11401 22448 11402 22449 11404 22449 11411 22449 11411 22450 11404 22450 11412 22450 11411 22451 11412 22451 11413 22451 11413 22452 11412 22452 11414 22452 11413 22453 11414 22453 11415 22453 11415 22454 11414 22454 11416 22454 11415 22455 11416 22455 11417 22455 11417 22456 11416 22456 11418 22456 11418 22457 11416 22457 11419 22457 11418 22458 11419 22458 11420 22458 11420 22459 11419 22459 11421 22459 11421 22460 11419 22460 11422 22460 11421 22461 11422 22461 11423 22461 11423 22462 11422 22462 11424 22462 11423 22463 11424 22463 11425 22463 11425 22464 11424 22464 11426 22464 11425 22465 11426 22465 11427 22465 11428 22466 11429 22466 11430 22466 11430 22467 11429 22467 11431 22467 11430 22468 11431 22468 11432 22468 11432 22469 11431 22469 11433 22469 11432 22470 11433 22470 11434 22470 11434 22471 11433 22471 11435 22471 11434 22472 11435 22472 11426 22472 11426 22473 11435 22473 11436 22473 11426 22474 11436 22474 11427 22474 11428 22475 11430 22475 11437 22475 11437 22476 11430 22476 11438 22476 11437 22477 11438 22477 11439 22477 11439 22478 11438 22478 11440 22478 11439 22479 11440 22479 11441 22479 11441 22480 11440 22480 11442 22480 11441 22481 11442 22481 11443 22481 11444 22482 11445 22482 11446 22482 11446 22483 11445 22483 11447 22483 11446 22484 11447 22484 11448 22484 11448 22485 11447 22485 11449 22485 11448 22486 11449 22486 11450 22486 11450 22487 11449 22487 11451 22487 11450 22488 11451 22488 11442 22488 11442 22489 11451 22489 11452 22489 11442 22490 11452 22490 11443 22490 11444 22491 11446 22491 11453 22491 11453 22492 11446 22492 11364 22492 11453 22493 11364 22493 11454 22493 11454 22494 11364 22494 11363 22494 11454 22495 11363 22495 11455 22495 11456 22496 11457 22496 11458 22496 11458 22497 11457 22497 11459 22497 11460 22498 11461 22498 11462 22498 11462 22499 11461 22499 11463 22499 11464 22500 11465 22500 11466 22500 11021 22501 11465 22501 11022 22501 11022 22502 11465 22502 11464 22502 11022 22503 11464 22503 11023 22503 11023 22504 11464 22504 11018 22504 11017 22505 11016 22505 11467 22505 11016 22506 11015 22506 11467 22506 11467 22507 11015 22507 11020 22507 11467 22508 11020 22508 11019 22508 11468 22509 11012 22509 11011 22509 11012 22510 11468 22510 11013 22510 11013 22511 11468 22511 11469 22511 11013 22512 11469 22512 11014 22512 11010 22513 11009 22513 11470 22513 11470 22514 11009 22514 11008 22514 11470 22515 11008 22515 11007 22515 10944 22516 10943 22516 11369 22516 11369 22517 10943 22517 11004 22517 11369 22518 11004 22518 11003 22518 11002 22519 11001 22519 11471 22519 11471 22520 11001 22520 11005 22520 11471 22521 11005 22521 11006 22521 11459 22522 11362 22522 11458 22522 11458 22523 11362 22523 11364 22523 11458 22524 11364 22524 11472 22524 11472 22525 11364 22525 11446 22525 11472 22526 11446 22526 11473 22526 11473 22527 11446 22527 11448 22527 11473 22528 11448 22528 11474 22528 11474 22529 11448 22529 11450 22529 11474 22530 11450 22530 11475 22530 11475 22531 11450 22531 11442 22531 11475 22532 11442 22532 11476 22532 11476 22533 11442 22533 11440 22533 11476 22534 11440 22534 11477 22534 11477 22535 11440 22535 11438 22535 11477 22536 11438 22536 11478 22536 11478 22537 11438 22537 11430 22537 11478 22538 11430 22538 11479 22538 11479 22539 11430 22539 11432 22539 11479 22540 11432 22540 11480 22540 11480 22541 11432 22541 11434 22541 11480 22542 11434 22542 11481 22542 11481 22543 11434 22543 11426 22543 11481 22544 11426 22544 11482 22544 11482 22545 11426 22545 11424 22545 11482 22546 11424 22546 11483 22546 11483 22547 11424 22547 11422 22547 11483 22548 11422 22548 11484 22548 11484 22549 11422 22549 11419 22549 11484 22550 11419 22550 11485 22550 11485 22551 11419 22551 11416 22551 11485 22552 11416 22552 11486 22552 11486 22553 11416 22553 11414 22553 11486 22554 11414 22554 11487 22554 11487 22555 11414 22555 11412 22555 11487 22556 11412 22556 11488 22556 11488 22557 11412 22557 11404 22557 11488 22558 11404 22558 11489 22558 11489 22559 11404 22559 11406 22559 11489 22560 11406 22560 11490 22560 11490 22561 11406 22561 11408 22561 11490 22562 11408 22562 11491 22562 11491 22563 11408 22563 11400 22563 11491 22564 11400 22564 11492 22564 11492 22565 11400 22565 11398 22565 11492 22566 11398 22566 11394 22566 11394 22567 11398 22567 11395 22567 11394 22568 11395 22568 11353 22568 11353 22569 11395 22569 11354 22569 11463 22570 11456 22570 11462 22570 11462 22571 11456 22571 11458 22571 11462 22572 11458 22572 11493 22572 11493 22573 11458 22573 11472 22573 11493 22574 11472 22574 11494 22574 11494 22575 11472 22575 11473 22575 11494 22576 11473 22576 11495 22576 11495 22577 11473 22577 11474 22577 11495 22578 11474 22578 11496 22578 11496 22579 11474 22579 11475 22579 11496 22580 11475 22580 11497 22580 11497 22581 11475 22581 11476 22581 11497 22582 11476 22582 11498 22582 11498 22583 11476 22583 11477 22583 11498 22584 11477 22584 11499 22584 11499 22585 11477 22585 11478 22585 11499 22586 11478 22586 11500 22586 11500 22587 11478 22587 11479 22587 11500 22588 11479 22588 11501 22588 11501 22589 11479 22589 11480 22589 11501 22590 11480 22590 11502 22590 11502 22591 11480 22591 11481 22591 11502 22592 11481 22592 11503 22592 11503 22593 11481 22593 11482 22593 11503 22594 11482 22594 11504 22594 11504 22595 11482 22595 11483 22595 11504 22596 11483 22596 11505 22596 11505 22597 11483 22597 11484 22597 11505 22598 11484 22598 11506 22598 11506 22599 11484 22599 11485 22599 11506 22600 11485 22600 11507 22600 11507 22601 11485 22601 11486 22601 11507 22602 11486 22602 11508 22602 11508 22603 11486 22603 11487 22603 11508 22604 11487 22604 11509 22604 11509 22605 11487 22605 11488 22605 11509 22606 11488 22606 11510 22606 11510 22607 11488 22607 11489 22607 11510 22608 11489 22608 11511 22608 11511 22609 11489 22609 11490 22609 11511 22610 11490 22610 11512 22610 11512 22611 11490 22611 11491 22611 11512 22612 11491 22612 11513 22612 11513 22613 11491 22613 11492 22613 11513 22614 11492 22614 11393 22614 11393 22615 11492 22615 11394 22615 11393 22616 11394 22616 11350 22616 11350 22617 11394 22617 11351 22617 11466 22618 11460 22618 11464 22618 11464 22619 11460 22619 11462 22619 11464 22620 11462 22620 11514 22620 11514 22621 11462 22621 11493 22621 11514 22622 11493 22622 11515 22622 11515 22623 11493 22623 11494 22623 11515 22624 11494 22624 11516 22624 11516 22625 11494 22625 11495 22625 11516 22626 11495 22626 11517 22626 11517 22627 11495 22627 11496 22627 11517 22628 11496 22628 11518 22628 11518 22629 11496 22629 11497 22629 11518 22630 11497 22630 11519 22630 11519 22631 11497 22631 11498 22631 11519 22632 11498 22632 11520 22632 11520 22633 11498 22633 11499 22633 11520 22634 11499 22634 11521 22634 11521 22635 11499 22635 11500 22635 11521 22636 11500 22636 11522 22636 11522 22637 11500 22637 11501 22637 11522 22638 11501 22638 11523 22638 11523 22639 11501 22639 11502 22639 11523 22640 11502 22640 11524 22640 11524 22641 11502 22641 11503 22641 11524 22642 11503 22642 11525 22642 11525 22643 11503 22643 11504 22643 11525 22644 11504 22644 11526 22644 11526 22645 11504 22645 11505 22645 11526 22646 11505 22646 11527 22646 11527 22647 11505 22647 11506 22647 11527 22648 11506 22648 11528 22648 11528 22649 11506 22649 11507 22649 11528 22650 11507 22650 11529 22650 11529 22651 11507 22651 11508 22651 11529 22652 11508 22652 11530 22652 11530 22653 11508 22653 11509 22653 11530 22654 11509 22654 11531 22654 11531 22655 11509 22655 11510 22655 11531 22656 11510 22656 11532 22656 11532 22657 11510 22657 11511 22657 11532 22658 11511 22658 11533 22658 11533 22659 11511 22659 11512 22659 11533 22660 11512 22660 11534 22660 11534 22661 11512 22661 11513 22661 11534 22662 11513 22662 11392 22662 11392 22663 11513 22663 11393 22663 11392 22664 11393 22664 11277 22664 11277 22665 11393 22665 11278 22665 11019 22666 11018 22666 11467 22666 11467 22667 11018 22667 11464 22667 11467 22668 11464 22668 11535 22668 11535 22669 11464 22669 11514 22669 11535 22670 11514 22670 11536 22670 11536 22671 11514 22671 11515 22671 11536 22672 11515 22672 11537 22672 11537 22673 11515 22673 11516 22673 11537 22674 11516 22674 11538 22674 11538 22675 11516 22675 11517 22675 11538 22676 11517 22676 11539 22676 11539 22677 11517 22677 11518 22677 11539 22678 11518 22678 11540 22678 11540 22679 11518 22679 11519 22679 11540 22680 11519 22680 11541 22680 11541 22681 11519 22681 11520 22681 11541 22682 11520 22682 11542 22682 11542 22683 11520 22683 11521 22683 11542 22684 11521 22684 11543 22684 11543 22685 11521 22685 11522 22685 11543 22686 11522 22686 11544 22686 11544 22687 11522 22687 11523 22687 11544 22688 11523 22688 11545 22688 11545 22689 11523 22689 11524 22689 11545 22690 11524 22690 11546 22690 11546 22691 11524 22691 11525 22691 11546 22692 11525 22692 11547 22692 11547 22693 11525 22693 11526 22693 11547 22694 11526 22694 11548 22694 11548 22695 11526 22695 11527 22695 11548 22696 11527 22696 11549 22696 11549 22697 11527 22697 11528 22697 11549 22698 11528 22698 11550 22698 11550 22699 11528 22699 11529 22699 11550 22700 11529 22700 11551 22700 11551 22701 11529 22701 11530 22701 11551 22702 11530 22702 11552 22702 11552 22703 11530 22703 11531 22703 11552 22704 11531 22704 11553 22704 11553 22705 11531 22705 11532 22705 11553 22706 11532 22706 11554 22706 11554 22707 11532 22707 11533 22707 11554 22708 11533 22708 11555 22708 11555 22709 11533 22709 11534 22709 11555 22710 11534 22710 11366 22710 11366 22711 11534 22711 11392 22711 11366 22712 11392 22712 10904 22712 10904 22713 11392 22713 10905 22713 11011 22714 11017 22714 11468 22714 11468 22715 11017 22715 11467 22715 11468 22716 11467 22716 11469 22716 11469 22717 11467 22717 11535 22717 11469 22718 11535 22718 11556 22718 11556 22719 11535 22719 11536 22719 11556 22720 11536 22720 11557 22720 11557 22721 11536 22721 11537 22721 11557 22722 11537 22722 11558 22722 11558 22723 11537 22723 11538 22723 11558 22724 11538 22724 11559 22724 11559 22725 11538 22725 11539 22725 11559 22726 11539 22726 11560 22726 11560 22727 11539 22727 11540 22727 11560 22728 11540 22728 11561 22728 11561 22729 11540 22729 11541 22729 11561 22730 11541 22730 11562 22730 11562 22731 11541 22731 11542 22731 11562 22732 11542 22732 11563 22732 11563 22733 11542 22733 11543 22733 11563 22734 11543 22734 11564 22734 11564 22735 11543 22735 11544 22735 11564 22736 11544 22736 11565 22736 11565 22737 11544 22737 11545 22737 11565 22738 11545 22738 11566 22738 11566 22739 11545 22739 11546 22739 11566 22740 11546 22740 11567 22740 11567 22741 11546 22741 11547 22741 11567 22742 11547 22742 11568 22742 11568 22743 11547 22743 11548 22743 11568 22744 11548 22744 11569 22744 11569 22745 11548 22745 11549 22745 11569 22746 11549 22746 11570 22746 11570 22747 11549 22747 11550 22747 11570 22748 11550 22748 11571 22748 11571 22749 11550 22749 11551 22749 11571 22750 11551 22750 11572 22750 11572 22751 11551 22751 11552 22751 11572 22752 11552 22752 11573 22752 11573 22753 11552 22753 11553 22753 11573 22754 11553 22754 11574 22754 11574 22755 11553 22755 11554 22755 11574 22756 11554 22756 11391 22756 11391 22757 11554 22757 11555 22757 11391 22758 11555 22758 11367 22758 11367 22759 11555 22759 11366 22759 11367 22760 11366 22760 10912 22760 10912 22761 11366 22761 10907 22761 11007 22762 11014 22762 11470 22762 11470 22763 11014 22763 11469 22763 11470 22764 11469 22764 11575 22764 11575 22765 11469 22765 11556 22765 11575 22766 11556 22766 11576 22766 11576 22767 11556 22767 11557 22767 11576 22768 11557 22768 11577 22768 11577 22769 11557 22769 11558 22769 11577 22770 11558 22770 11578 22770 11578 22771 11558 22771 11559 22771 11578 22772 11559 22772 11579 22772 11579 22773 11559 22773 11560 22773 11579 22774 11560 22774 11580 22774 11580 22775 11560 22775 11561 22775 11580 22776 11561 22776 11581 22776 11581 22777 11561 22777 11562 22777 11581 22778 11562 22778 11582 22778 11582 22779 11562 22779 11563 22779 11582 22780 11563 22780 11583 22780 11583 22781 11563 22781 11564 22781 11583 22782 11564 22782 11584 22782 11584 22783 11564 22783 11565 22783 11584 22784 11565 22784 11585 22784 11585 22785 11565 22785 11566 22785 11585 22786 11566 22786 11586 22786 11586 22787 11566 22787 11567 22787 11586 22788 11567 22788 11587 22788 11587 22789 11567 22789 11568 22789 11587 22790 11568 22790 11588 22790 11588 22791 11568 22791 11569 22791 11588 22792 11569 22792 11589 22792 11589 22793 11569 22793 11570 22793 11589 22794 11570 22794 11590 22794 11590 22795 11570 22795 11571 22795 11590 22796 11571 22796 11591 22796 11591 22797 11571 22797 11572 22797 11591 22798 11572 22798 11592 22798 11592 22799 11572 22799 11573 22799 11592 22800 11573 22800 11593 22800 11593 22801 11573 22801 11574 22801 11593 22802 11574 22802 11368 22802 11368 22803 11574 22803 11391 22803 11368 22804 11391 22804 10908 22804 10908 22805 11391 22805 10909 22805 11006 22806 11010 22806 11471 22806 11471 22807 11010 22807 11470 22807 11471 22808 11470 22808 11594 22808 11594 22809 11470 22809 11575 22809 11594 22810 11575 22810 11595 22810 11595 22811 11575 22811 11576 22811 11595 22812 11576 22812 11596 22812 11596 22813 11576 22813 11577 22813 11596 22814 11577 22814 11597 22814 11597 22815 11577 22815 11578 22815 11597 22816 11578 22816 11598 22816 11598 22817 11578 22817 11579 22817 11598 22818 11579 22818 11599 22818 11599 22819 11579 22819 11580 22819 11599 22820 11580 22820 11600 22820 11600 22821 11580 22821 11581 22821 11600 22822 11581 22822 11601 22822 11601 22823 11581 22823 11582 22823 11601 22824 11582 22824 11602 22824 11602 22825 11582 22825 11583 22825 11602 22826 11583 22826 11603 22826 11603 22827 11583 22827 11584 22827 11603 22828 11584 22828 11604 22828 11604 22829 11584 22829 11585 22829 11604 22830 11585 22830 11605 22830 11605 22831 11585 22831 11586 22831 11605 22832 11586 22832 11606 22832 11606 22833 11586 22833 11587 22833 11606 22834 11587 22834 11607 22834 11607 22835 11587 22835 11588 22835 11607 22836 11588 22836 11608 22836 11608 22837 11588 22837 11589 22837 11608 22838 11589 22838 11609 22838 11609 22839 11589 22839 11590 22839 11609 22840 11590 22840 11610 22840 11610 22841 11590 22841 11591 22841 11610 22842 11591 22842 11611 22842 11611 22843 11591 22843 11592 22843 11611 22844 11592 22844 11612 22844 11612 22845 11592 22845 11593 22845 11612 22846 11593 22846 11390 22846 11390 22847 11593 22847 11368 22847 11390 22848 11368 22848 10916 22848 10916 22849 11368 22849 10917 22849 11003 22850 11002 22850 11369 22850 11369 22851 11002 22851 11471 22851 11369 22852 11471 22852 11370 22852 11370 22853 11471 22853 11594 22853 11370 22854 11594 22854 11372 22854 11372 22855 11594 22855 11595 22855 11372 22856 11595 22856 11373 22856 11373 22857 11595 22857 11596 22857 11373 22858 11596 22858 11374 22858 11374 22859 11596 22859 11597 22859 11374 22860 11597 22860 11375 22860 11375 22861 11597 22861 11598 22861 11375 22862 11598 22862 11376 22862 11376 22863 11598 22863 11599 22863 11376 22864 11599 22864 11377 22864 11377 22865 11599 22865 11600 22865 11377 22866 11600 22866 11378 22866 11378 22867 11600 22867 11601 22867 11378 22868 11601 22868 11379 22868 11379 22869 11601 22869 11602 22869 11379 22870 11602 22870 11380 22870 11380 22871 11602 22871 11603 22871 11380 22872 11603 22872 11381 22872 11381 22873 11603 22873 11604 22873 11381 22874 11604 22874 11382 22874 11382 22875 11604 22875 11605 22875 11382 22876 11605 22876 11383 22876 11383 22877 11605 22877 11606 22877 11383 22878 11606 22878 11384 22878 11384 22879 11606 22879 11607 22879 11384 22880 11607 22880 11385 22880 11385 22881 11607 22881 11608 22881 11385 22882 11608 22882 11386 22882 11386 22883 11608 22883 11609 22883 11386 22884 11609 22884 11387 22884 11387 22885 11609 22885 11610 22885 11387 22886 11610 22886 11388 22886 11388 22887 11610 22887 11611 22887 11388 22888 11611 22888 11389 22888 11389 22889 11611 22889 11612 22889 11389 22890 11612 22890 11371 22890 11371 22891 11612 22891 11390 22891 11371 22892 11390 22892 10919 22892 10919 22893 11390 22893 10920 22893 11613 22894 11614 22894 11615 22894 11616 22895 11460 22895 11466 22895 11617 22896 11618 22896 11619 22896 11620 22897 11621 22897 11622 22897 11363 22898 11362 22898 11623 22898 11623 22899 11362 22899 11624 22899 11623 22900 11624 22900 11625 22900 11032 22901 11031 22901 11626 22901 11037 22902 11036 22902 11627 22902 11035 22903 11042 22903 11628 22903 11188 22904 11629 22904 11053 22904 11053 22905 11052 22905 11188 22905 11188 22906 11052 22906 11025 22906 11188 22907 11025 22907 11178 22907 11178 22908 11025 22908 11024 22908 11056 22909 11055 22909 11629 22909 11629 22910 11055 22910 11054 22910 11629 22911 11054 22911 11053 22911 11050 22912 11049 22912 11630 22912 11630 22913 11049 22913 11048 22913 11630 22914 11048 22914 11056 22914 11027 22915 11026 22915 11631 22915 11631 22916 11026 22916 11051 22916 11631 22917 11051 22917 11050 22917 11632 22918 11047 22918 11027 22918 11044 22919 11043 22919 11633 22919 11633 22920 11043 22920 11047 22920 11628 22921 11634 22921 11635 22921 11635 22922 11634 22922 11046 22922 11635 22923 11046 22923 11045 22923 11042 22924 11041 22924 11628 22924 11628 22925 11041 22925 11040 22925 11628 22926 11040 22926 11634 22926 11634 22927 11040 22927 11039 22927 11634 22928 11039 22928 11046 22928 11032 22929 11626 22929 11033 22929 11030 22930 11029 22930 11614 22930 11614 22931 11029 22931 11028 22931 11614 22932 11028 22932 11626 22932 11626 22933 11028 22933 11034 22933 11626 22934 11034 22934 11033 22934 10950 22935 10957 22935 11613 22935 11613 22936 10957 22936 10956 22936 11613 22937 10956 22937 10955 22937 10962 22938 11030 22938 10963 22938 10963 22939 11030 22939 11614 22939 10963 22940 11614 22940 10959 22940 10959 22941 11614 22941 11613 22941 10959 22942 11613 22942 10958 22942 10958 22943 11613 22943 10955 22943 11021 22944 10953 22944 11465 22944 11465 22945 10953 22945 10952 22945 11465 22946 10952 22946 11466 22946 11466 22947 10952 22947 10954 22947 11466 22948 10954 22948 10951 22948 11362 22949 11459 22949 11624 22949 11624 22950 11459 22950 11457 22950 11624 22951 11457 22951 11636 22951 11636 22952 11457 22952 11456 22952 11636 22953 11456 22953 11463 22953 11637 22954 11638 22954 11625 22954 11625 22955 11638 22955 11639 22955 11625 22956 11639 22956 11623 22956 11623 22957 11639 22957 11640 22957 11623 22958 11640 22958 11363 22958 11363 22959 11640 22959 11641 22959 11363 22960 11641 22960 11455 22960 11642 22961 11643 22961 11644 22961 11644 22962 11643 22962 11645 22962 11646 22963 11647 22963 11648 22963 11648 22964 11649 22964 11646 22964 11646 22965 11649 22965 11650 22965 11646 22966 11650 22966 11645 22966 11645 22967 11650 22967 11651 22967 11645 22968 11651 22968 11644 22968 11643 22969 11620 22969 11645 22969 11645 22970 11620 22970 11622 22970 11645 22971 11622 22971 11646 22971 11646 22972 11622 22972 11652 22972 11646 22973 11652 22973 11647 22973 11647 22974 11652 22974 11653 22974 11647 22975 11653 22975 11619 22975 11654 22976 11635 22976 11633 22976 11633 22977 11635 22977 11045 22977 11633 22978 11045 22978 11044 22978 11655 22979 11656 22979 11657 22979 11657 22980 11656 22980 11658 22980 11657 22981 11658 22981 11659 22981 11659 22982 11658 22982 11660 22982 11659 22983 11660 22983 11627 22983 11627 22984 11660 22984 11661 22984 11627 22985 11661 22985 11037 22985 11027 22986 11631 22986 11632 22986 11632 22987 11631 22987 11662 22987 11632 22988 11662 22988 11663 22988 11056 22989 11629 22989 11630 22989 11630 22990 11629 22990 11664 22990 11630 22991 11664 22991 11665 22991 11665 22992 11666 22992 11667 22992 11050 22993 11630 22993 11631 22993 11631 22994 11630 22994 11665 22994 11631 22995 11665 22995 11662 22995 11662 22996 11665 22996 11667 22996 11662 22997 11667 22997 11668 22997 11668 22998 11669 22998 11662 22998 11662 22999 11669 22999 11670 22999 11662 23000 11670 23000 11663 23000 11663 23001 11670 23001 11671 23001 11663 23002 11671 23002 11672 23002 11047 23003 11632 23003 11633 23003 11633 23004 11632 23004 11663 23004 11633 23005 11663 23005 11654 23005 11654 23006 11663 23006 11672 23006 11654 23007 11672 23007 11673 23007 11036 23008 11035 23008 11627 23008 11627 23009 11035 23009 11628 23009 11627 23010 11628 23010 11659 23010 11659 23011 11628 23011 11635 23011 11659 23012 11635 23012 11657 23012 11657 23013 11635 23013 11654 23013 11657 23014 11654 23014 11655 23014 11655 23015 11654 23015 11673 23015 11615 23016 11614 23016 11674 23016 11674 23017 11614 23017 11626 23017 11674 23018 11626 23018 11675 23018 11675 23019 11626 23019 11031 23019 11675 23020 11031 23020 11661 23020 11661 23021 11031 23021 11038 23021 11661 23022 11038 23022 11037 23022 11661 23023 11676 23023 11675 23023 11675 23024 11676 23024 11677 23024 11675 23025 11677 23025 11674 23025 11674 23026 11677 23026 11678 23026 11674 23027 11678 23027 11615 23027 11615 23028 11678 23028 11616 23028 11615 23029 11616 23029 11613 23029 11613 23030 11616 23030 11466 23030 11613 23031 11466 23031 10950 23031 10950 23032 11466 23032 10951 23032 11642 23033 11637 23033 11643 23033 11643 23034 11637 23034 11625 23034 11643 23035 11625 23035 11620 23035 11620 23036 11625 23036 11624 23036 11620 23037 11624 23037 11621 23037 11621 23038 11624 23038 11636 23038 11621 23039 11636 23039 11679 23039 11679 23040 11636 23040 11463 23040 11679 23041 11463 23041 11461 23041 11191 23042 11183 23042 11664 23042 11188 23043 11190 23043 11629 23043 11629 23044 11190 23044 11193 23044 11629 23045 11193 23045 11664 23045 11664 23046 11193 23046 11192 23046 11664 23047 11192 23047 11191 23047 11666 23048 11665 23048 11680 23048 11680 23049 11665 23049 11664 23049 11680 23050 11664 23050 11681 23050 11681 23051 11664 23051 11183 23051 11681 23052 11183 23052 11182 23052 11618 23053 11682 23053 11619 23053 11619 23054 11682 23054 11683 23054 11619 23055 11683 23055 11647 23055 11647 23056 11683 23056 11684 23056 11647 23057 11684 23057 11648 23057 11656 23058 11617 23058 11658 23058 11658 23059 11617 23059 11619 23059 11658 23060 11619 23060 11660 23060 11660 23061 11619 23061 11653 23061 11660 23062 11653 23062 11661 23062 11661 23063 11653 23063 11652 23063 11661 23064 11652 23064 11676 23064 11676 23065 11652 23065 11622 23065 11676 23066 11622 23066 11677 23066 11677 23067 11622 23067 11621 23067 11677 23068 11621 23068 11678 23068 11678 23069 11621 23069 11679 23069 11678 23070 11679 23070 11616 23070 11616 23071 11679 23071 11461 23071 11616 23072 11461 23072 11460 23072 11206 23073 11685 23073 11205 23073 11186 23074 11187 23074 11686 23074 11687 23075 11208 23075 11204 23075 11208 23076 11687 23076 11207 23076 11207 23077 11687 23077 11688 23077 11207 23078 11688 23078 11211 23078 11211 23079 11688 23079 11212 23079 11212 23080 11688 23080 11689 23080 11212 23081 11689 23081 11215 23081 11210 23082 11209 23082 11690 23082 11690 23083 11209 23083 11213 23083 11690 23084 11213 23084 11689 23084 11689 23085 11213 23085 11214 23085 11689 23086 11214 23086 11215 23086 11690 23087 11147 23087 11146 23087 10136 23088 11210 23088 10137 23088 10137 23089 11210 23089 11690 23089 10137 23090 11690 23090 10138 23090 10138 23091 11690 23091 11146 23091 10138 23092 11146 23092 9918 23092 11091 23093 11141 23093 11689 23093 11689 23094 11141 23094 11149 23094 11689 23095 11149 23095 11690 23095 11690 23096 11149 23096 11148 23096 11690 23097 11148 23097 11147 23097 11131 23098 11130 23098 11688 23098 11688 23099 11130 23099 11129 23099 11688 23100 11129 23100 11689 23100 11689 23101 11129 23101 11092 23101 11689 23102 11092 23102 11091 23102 11201 23103 11099 23103 11687 23103 11687 23104 11099 23104 11098 23104 11687 23105 11098 23105 11688 23105 11688 23106 11098 23106 11132 23106 11688 23107 11132 23107 11131 23107 11187 23108 11197 23108 11686 23108 11686 23109 11197 23109 11199 23109 11686 23110 11199 23110 11200 23110 11205 23111 11685 23111 11204 23111 11204 23112 11685 23112 11686 23112 11204 23113 11686 23113 11687 23113 11687 23114 11686 23114 11200 23114 11687 23115 11200 23115 11201 23115 11691 23116 11182 23116 11184 23116 11184 23117 11186 23117 11691 23117 11691 23118 11186 23118 11686 23118 11691 23119 11686 23119 11692 23119 11692 23120 11686 23120 11685 23120 11692 23121 11685 23121 11693 23121 11693 23122 11685 23122 11206 23122 11693 23123 11206 23123 10215 23123 11641 23124 11266 23124 11455 23124 11455 23125 11266 23125 11265 23125 11455 23126 11265 23126 11454 23126 11641 23127 11640 23127 11266 23127 11266 23128 11640 23128 11639 23128 11266 23129 11639 23129 11638 23129 11454 23130 11265 23130 11453 23130 11453 23131 11265 23131 11264 23131 11453 23132 11264 23132 11444 23132 11444 23133 11264 23133 11445 23133 11445 23134 11264 23134 11263 23134 11445 23135 11263 23135 11447 23135 11262 23136 11451 23136 11263 23136 11263 23137 11451 23137 11449 23137 11263 23138 11449 23138 11447 23138 11439 23139 11441 23139 11261 23139 11261 23140 11441 23140 11443 23140 11261 23141 11443 23141 11262 23141 11262 23142 11443 23142 11452 23142 11262 23143 11452 23143 11451 23143 11439 23144 11261 23144 11437 23144 11437 23145 11261 23145 11260 23145 11437 23146 11260 23146 11428 23146 11428 23147 11260 23147 11429 23147 11429 23148 11260 23148 11259 23148 11429 23149 11259 23149 11431 23149 11258 23150 11435 23150 11259 23150 11259 23151 11435 23151 11433 23151 11259 23152 11433 23152 11431 23152 11694 23153 11427 23153 11258 23153 11258 23154 11427 23154 11436 23154 11258 23155 11436 23155 11435 23155 11256 23156 11423 23156 11694 23156 11694 23157 11423 23157 11695 23157 11694 23158 11695 23158 11427 23158 11255 23159 11420 23159 11256 23159 11256 23160 11420 23160 11421 23160 11256 23161 11421 23161 11423 23161 11413 23162 11415 23162 11254 23162 11254 23163 11415 23163 11417 23163 11254 23164 11417 23164 11255 23164 11255 23165 11417 23165 11418 23165 11255 23166 11418 23166 11420 23166 11413 23167 11254 23167 11411 23167 11411 23168 11254 23168 11253 23168 11411 23169 11253 23169 11402 23169 11402 23170 11253 23170 11403 23170 11403 23171 11253 23171 11252 23171 11403 23172 11252 23172 11405 23172 11251 23173 11409 23173 11252 23173 11252 23174 11409 23174 11407 23174 11252 23175 11407 23175 11405 23175 11397 23176 11399 23176 11250 23176 11250 23177 11399 23177 11401 23177 11250 23178 11401 23178 11251 23178 11251 23179 11401 23179 11410 23179 11251 23180 11410 23180 11409 23180 11397 23181 11250 23181 11396 23181 11396 23182 11250 23182 11249 23182 11396 23183 11249 23183 11365 23183 11332 23184 11331 23184 11248 23184 11331 23185 11336 23185 11248 23185 11248 23186 11336 23186 11356 23186 11248 23187 11356 23187 11249 23187 11249 23188 11356 23188 11357 23188 11249 23189 11357 23189 11365 23189 11330 23190 11247 23190 11322 23190 11322 23191 11247 23191 11323 23191 11330 23192 11329 23192 11247 23192 11247 23193 11329 23193 11327 23193 11247 23194 11327 23194 11326 23194 11326 23195 11345 23195 11247 23195 11247 23196 11345 23196 11335 23196 11247 23197 11335 23197 11248 23197 11248 23198 11335 23198 11334 23198 11248 23199 11334 23199 11332 23199 11313 23200 11309 23200 11247 23200 11247 23201 11309 23201 11312 23201 11247 23202 11312 23202 11311 23202 11311 23203 11361 23203 11247 23203 11247 23204 11361 23204 11360 23204 11247 23205 11360 23205 11359 23205 11359 23206 11358 23206 11247 23206 11247 23207 11358 23207 11324 23207 11247 23208 11324 23208 11323 23208 11269 23209 10790 23209 11304 23209 11269 23210 11304 23210 11245 23210 11245 23211 11304 23211 11305 23211 11245 23212 11305 23212 11306 23212 11306 23213 11301 23213 11245 23213 11245 23214 11301 23214 11300 23214 11245 23215 11300 23215 11246 23215 11246 23216 11300 23216 11315 23216 11246 23217 11315 23217 11247 23217 11247 23218 11315 23218 11314 23218 11247 23219 11314 23219 11313 23219 10615 23220 10614 23220 11243 23220 11243 23221 10614 23221 10613 23221 11243 23222 10613 23222 10627 23222 9212 23223 10640 23223 10628 23223 10628 23224 10640 23224 10641 23224 10628 23225 10641 23225 10627 23225 10565 23226 10564 23226 11242 23226 11242 23227 10564 23227 10603 23227 10603 23228 10602 23228 11242 23228 11242 23229 10602 23229 10620 23229 11242 23230 10620 23230 10619 23230 10619 23231 10618 23231 11242 23231 11242 23232 10618 23232 10617 23232 11242 23233 10617 23233 11243 23233 11243 23234 10617 23234 10616 23234 11243 23235 10616 23235 10615 23235 11240 23236 10589 23236 11241 23236 11241 23237 10589 23237 10591 23237 11241 23238 10591 23238 10598 23238 10598 23239 10597 23239 11241 23239 11241 23240 10597 23240 10596 23240 11241 23241 10596 23241 10595 23241 10595 23242 10631 23242 11241 23242 11241 23243 10631 23243 10630 23243 11241 23244 10630 23244 11242 23244 11242 23245 10630 23245 10629 23245 11242 23246 10629 23246 10565 23246 10587 23247 10586 23247 11240 23247 11239 23248 10401 23248 10402 23248 11239 23249 10402 23249 11240 23249 11240 23250 10402 23250 10588 23250 11240 23251 10588 23251 10587 23251 10586 23252 10585 23252 11240 23252 11240 23253 10585 23253 10584 23253 11240 23254 10584 23254 10589 23254 10401 23255 11239 23255 10400 23255 10400 23256 11239 23256 11238 23256 10400 23257 11238 23257 10391 23257 10391 23258 11238 23258 10392 23258 10392 23259 11238 23259 11237 23259 10392 23260 11237 23260 10394 23260 10390 23261 10399 23261 11236 23261 11236 23262 10399 23262 10398 23262 11236 23263 10398 23263 11237 23263 11237 23264 10398 23264 10396 23264 11237 23265 10396 23265 10394 23265 10390 23266 11236 23266 10388 23266 10388 23267 11236 23267 11235 23267 10388 23268 11235 23268 10386 23268 10386 23269 11235 23269 10384 23269 10384 23270 11235 23270 11234 23270 10384 23271 11234 23271 10375 23271 10375 23272 11234 23272 10376 23272 10376 23273 11234 23273 11233 23273 10376 23274 11233 23274 10378 23274 11232 23275 10382 23275 11233 23275 11233 23276 10382 23276 10380 23276 11233 23277 10380 23277 10378 23277 11696 23278 10374 23278 11232 23278 11232 23279 10374 23279 10383 23279 11232 23280 10383 23280 10382 23280 11230 23281 10370 23281 11696 23281 11696 23282 10370 23282 11697 23282 11696 23283 11697 23283 10374 23283 11229 23284 10367 23284 11230 23284 11230 23285 10367 23285 10368 23285 11230 23286 10368 23286 10370 23286 10360 23287 10362 23287 11228 23287 11228 23288 10362 23288 10364 23288 11228 23289 10364 23289 11229 23289 11229 23290 10364 23290 10365 23290 11229 23291 10365 23291 10367 23291 10360 23292 11228 23292 10358 23292 10358 23293 11228 23293 11227 23293 10358 23294 11227 23294 10349 23294 11226 23295 10352 23295 11227 23295 11227 23296 10352 23296 10350 23296 11227 23297 10350 23297 10349 23297 11225 23298 10356 23298 11226 23298 11226 23299 10356 23299 10354 23299 11226 23300 10354 23300 10352 23300 10344 23301 10346 23301 11224 23301 11224 23302 10346 23302 10348 23302 11224 23303 10348 23303 11225 23303 11225 23304 10348 23304 10357 23304 11225 23305 10357 23305 10356 23305 10344 23306 11224 23306 10343 23306 10343 23307 11224 23307 11223 23307 10343 23308 11223 23308 10312 23308 10279 23309 10278 23309 11222 23309 10278 23310 10283 23310 11222 23310 11222 23311 10283 23311 10303 23311 11222 23312 10303 23312 11223 23312 11223 23313 10303 23313 10304 23313 11223 23314 10304 23314 10312 23314 10277 23315 11221 23315 10269 23315 10269 23316 11221 23316 10270 23316 10277 23317 10276 23317 11221 23317 11221 23318 10276 23318 10274 23318 11221 23319 10274 23319 10273 23319 10273 23320 10292 23320 11221 23320 11221 23321 10292 23321 10282 23321 11221 23322 10282 23322 11222 23322 11222 23323 10282 23323 10281 23323 11222 23324 10281 23324 10279 23324 10260 23325 10256 23325 11221 23325 11221 23326 10256 23326 10259 23326 11221 23327 10259 23327 10258 23327 10258 23328 10308 23328 11221 23328 11221 23329 10308 23329 10307 23329 11221 23330 10307 23330 10306 23330 10306 23331 10305 23331 11221 23331 11221 23332 10305 23332 10271 23332 11221 23333 10271 23333 10270 23333 11219 23334 10218 23334 10213 23334 10213 23335 8820 23335 10251 23335 10213 23336 10251 23336 11219 23336 11219 23337 10251 23337 10252 23337 11219 23338 10252 23338 10253 23338 10253 23339 10248 23339 11219 23339 11219 23340 10248 23340 10247 23340 11219 23341 10247 23341 11220 23341 11220 23342 10247 23342 10262 23342 11220 23343 10262 23343 11221 23343 11221 23344 10262 23344 10261 23344 11221 23345 10261 23345 10260 23345 11668 23346 11667 23346 11217 23346 11666 23347 11680 23347 11692 23347 11692 23348 11680 23348 11681 23348 11692 23349 11681 23349 11691 23349 11691 23350 11681 23350 11182 23350 11618 23351 11617 23351 11216 23351 11216 23352 11617 23352 11656 23352 11656 23353 11655 23353 11216 23353 11216 23354 11655 23354 11673 23354 11216 23355 11673 23355 11672 23355 11672 23356 11671 23356 11216 23356 11216 23357 11671 23357 11670 23357 11216 23358 11670 23358 11217 23358 11217 23359 11670 23359 11669 23359 11217 23360 11669 23360 11668 23360 11638 23361 11637 23361 11266 23361 11266 23362 11637 23362 11642 23362 11266 23363 11642 23363 11267 23363 11267 23364 11642 23364 11644 23364 11267 23365 11644 23365 11651 23365 11651 23366 11650 23366 11267 23366 11267 23367 11650 23367 11649 23367 11267 23368 11649 23368 11648 23368 11648 23369 11684 23369 11267 23369 11267 23370 11684 23370 11683 23370 11267 23371 11683 23371 11216 23371 11216 23372 11683 23372 11682 23372 11216 23373 11682 23373 11618 23373 10627 23374 10641 23374 11243 23374 11243 23375 10641 23375 10642 23375 11243 23376 10642 23376 11244 23376 10218 23377 11219 23377 10214 23377 10214 23378 11219 23378 11218 23378 10214 23379 11218 23379 10215 23379 10215 23380 11218 23380 11693 23380 11693 23381 11218 23381 11217 23381 11693 23382 11217 23382 11692 23382 11692 23383 11217 23383 11667 23383 11692 23384 11667 23384 11666 23384 10642 23385 10643 23385 11244 23385 11244 23386 10643 23386 11270 23386 11244 23387 11270 23387 11245 23387 11245 23388 11270 23388 11272 23388 11245 23389 11272 23389 11269 23389 12554 25054 12555 25054 12556 25054 12555 25055 12557 25055 12558 25055 12559 25056 12560 25056 12561 25056 12555 25057 12562 25057 12557 25057 12557 25058 12562 25058 12563 25058 12557 25059 12563 25059 12564 25059 12564 25060 12565 25060 12557 25060 12557 25061 12565 25061 12566 25061 12557 25062 12566 25062 12567 25062 12558 25063 12568 25063 12555 25063 12555 25064 12568 25064 12569 25064 12555 25065 12569 25065 12570 25065 12567 25066 12571 25066 12557 25066 12557 25067 12571 25067 12572 25067 12557 25068 12572 25068 12573 25068 12570 25069 12574 25069 12555 25069 12555 25070 12574 25070 12575 25070 12555 25071 12575 25071 12556 25071 12554 25072 12556 25072 12560 25072 12560 25073 12556 25073 12576 25073 12560 25074 12576 25074 12561 25074 12573 25075 12577 25075 12557 25075 12557 25076 12577 25076 12578 25076 12557 25077 12578 25077 12579 25077 12580 25078 12581 25078 12582 25078 12582 25079 12581 25079 12583 25079 12582 25080 12583 25080 12578 25080 12578 25081 12583 25081 12584 25081 12578 25082 12584 25082 12579 25082 12585 25083 12586 25083 12587 25083 12587 25084 12586 25084 12588 25084 12588 25085 12586 25085 12561 25085 12561 25086 12586 25086 12589 25086 12561 25087 12589 25087 12559 25087 12710 25254 12569 25254 12711 25254 12711 25255 12569 25255 12568 25255 12711 25256 12568 25256 12712 25256 12712 25257 12568 25257 12558 25257 12712 25258 12558 25258 12713 25258 12713 25259 12558 25259 12557 25259 12713 25260 12557 25260 12714 25260 12714 25261 12557 25261 12579 25261 12714 25262 12579 25262 12715 25262 12715 25263 12579 25263 12584 25263 12715 25264 12584 25264 12716 25264 12716 25265 12584 25265 12583 25265 12716 25266 12583 25266 12717 25266 12717 25267 12583 25267 12581 25267 12717 25268 12581 25268 12718 25268 12718 25269 12581 25269 12580 25269 12718 25270 12580 25270 12719 25270 12719 25271 12580 25271 12582 25271 12719 25272 12582 25272 12720 25272 12720 25273 12582 25273 12578 25273 12720 25274 12578 25274 12721 25274 12721 25275 12578 25275 12577 25275 12721 25276 12577 25276 12722 25276 12722 25277 12577 25277 12573 25277 12722 25278 12573 25278 12723 25278 12723 25279 12573 25279 12572 25279 12723 25280 12572 25280 12724 25280 12724 25281 12572 25281 12571 25281 12724 25282 12571 25282 12725 25282 12725 25283 12571 25283 12567 25283 12725 25284 12567 25284 12726 25284 12726 25285 12567 25285 12566 25285 12726 25286 12566 25286 12727 25286 12727 25287 12566 25287 12565 25287 12727 25288 12565 25288 12728 25288 12728 25289 12565 25289 12564 25289 12728 25290 12564 25290 12729 25290 12729 25291 12564 25291 12563 25291 12729 25292 12563 25292 12730 25292 12730 25293 12563 25293 12562 25293 12730 25294 12562 25294 12731 25294 12731 25295 12562 25295 12555 25295 12731 25296 12555 25296 12732 25296 12732 25297 12555 25297 12554 25297 12732 25298 12554 25298 12733 25298 12733 25299 12554 25299 12560 25299 12733 25300 12560 25300 12734 25300 12734 25301 12560 25301 12559 25301 12734 25302 12559 25302 12735 25302 12735 25303 12559 25303 12589 25303 12735 25304 12589 25304 12736 25304 12736 25305 12589 25305 12586 25305 12736 25306 12586 25306 12737 25306 12737 25307 12586 25307 12585 25307 12737 25308 12585 25308 12738 25308 12738 25309 12585 25309 12587 25309 12738 25310 12587 25310 12739 25310 12739 25311 12587 25311 12588 25311 12739 25312 12588 25312 12740 25312 12740 25313 12588 25313 12561 25313 12740 25314 12561 25314 12741 25314 12741 25315 12561 25315 12576 25315 12741 25316 12576 25316 12742 25316 12742 25317 12576 25317 12556 25317 12742 25318 12556 25318 12743 25318 12743 25319 12556 25319 12575 25319 12743 25320 12575 25320 12744 25320 12744 25321 12575 25321 12574 25321 12744 25322 12574 25322 12745 25322 12745 25323 12574 25323 12570 25323 12745 25324 12570 25324 12710 25324 12710 25325 12570 25325 12569 25325 12795 25495 12796 25495 12797 25495 12797 25496 12796 25496 12798 25496 12797 25497 12798 25497 12799 25497 12800 25498 12801 25498 12795 25498 12795 25499 12801 25499 12802 25499 12795 25500 12802 25500 12796 25500 12803 25501 12804 25501 12800 25501 12800 25502 12804 25502 12805 25502 12800 25503 12805 25503 12801 25503 12806 25504 12807 25504 12808 25504 12808 25505 12807 25505 12809 25505 12808 25506 12809 25506 12803 25506 12803 25507 12809 25507 12810 25507 12803 25508 12810 25508 12804 25508 12811 25509 12812 25509 12806 25509 12806 25510 12812 25510 12813 25510 12806 25511 12813 25511 12807 25511 12814 25512 12815 25512 12816 25512 12816 25513 12815 25513 12817 25513 12816 25514 12817 25514 12811 25514 12811 25515 12817 25515 12818 25515 12811 25516 12818 25516 12812 25516 12819 25517 12820 25517 12814 25517 12814 25518 12820 25518 12821 25518 12814 25519 12821 25519 12815 25519 12822 25520 12823 25520 12819 25520 12819 25521 12823 25521 12824 25521 12819 25522 12824 25522 12820 25522 12825 25523 12826 25523 12827 25523 12827 25524 12826 25524 12828 25524 12827 25525 12828 25525 12829 25525 12829 25526 12828 25526 12830 25526 12829 25527 12830 25527 12822 25527 12822 25528 12830 25528 12831 25528 12822 25529 12831 25529 12823 25529 12825 25530 12827 25530 12832 25530 12832 25531 12827 25531 12833 25531 12832 25532 12833 25532 12834 25532 12834 25533 12833 25533 12835 25533 12834 25534 12835 25534 12836 25534 12836 25535 12835 25535 12837 25535 12837 25536 12835 25536 12838 25536 12837 25537 12838 25537 12839 25537 12839 25538 12838 25538 12840 25538 12839 25539 12840 25539 12841 25539 12841 25540 12840 25540 12842 25540 12842 25541 12840 25541 12843 25541 12842 25542 12843 25542 12844 25542 12844 25543 12843 25543 12845 25543 12845 25544 12843 25544 12846 25544 12845 25545 12846 25545 12847 25545 12847 25546 12846 25546 12848 25546 12848 25547 12846 25547 12849 25547 12848 25548 12849 25548 12850 25548 12850 25549 12849 25549 12851 25549 12850 25550 12851 25550 12852 25550 12852 25551 12851 25551 12853 25551 12853 25552 12851 25552 12854 25552 12853 25553 12854 25553 12855 25553 12855 25554 12854 25554 12856 25554 12856 25555 12854 25555 12857 25555 12856 25556 12857 25556 12858 25556 12858 25557 12857 25557 12859 25557 12858 25558 12859 25558 12860 25558 12860 25559 12859 25559 12861 25559 12860 25560 12861 25560 12862 25560 12862 25561 12861 25561 12863 25561 12863 25562 12861 25562 12864 25562 12863 25563 12864 25563 12865 25563 12865 25564 12864 25564 12866 25564 12866 25565 12864 25565 12867 25565 12866 25566 12867 25566 12868 25566 12868 25567 12867 25567 12869 25567 12868 25568 12869 25568 12870 25568 12871 25569 12872 25569 12873 25569 12873 25570 12872 25570 12874 25570 12873 25571 12874 25571 12869 25571 12869 25572 12874 25572 12875 25572 12869 25573 12875 25573 12870 25573 12876 25574 12877 25574 12878 25574 12878 25575 12877 25575 12879 25575 12878 25576 12879 25576 12871 25576 12871 25577 12879 25577 12880 25577 12871 25578 12880 25578 12872 25578 12881 25579 12882 25579 12876 25579 12876 25580 12882 25580 12883 25580 12876 25581 12883 25581 12877 25581 12884 25582 12885 25582 12881 25582 12881 25583 12885 25583 12886 25583 12881 25584 12886 25584 12882 25584 12887 25585 12888 25585 12889 25585 12889 25586 12888 25586 12890 25586 12889 25587 12890 25587 12884 25587 12884 25588 12890 25588 12891 25588 12884 25589 12891 25589 12885 25589 12892 25590 12893 25590 12887 25590 12887 25591 12893 25591 12894 25591 12887 25592 12894 25592 12888 25592 12895 25593 12896 25593 12892 25593 12892 25594 12896 25594 12897 25594 12892 25595 12897 25595 12893 25595 12898 25596 12899 25596 12900 25596 12900 25597 12899 25597 12901 25597 12900 25598 12901 25598 12895 25598 12895 25599 12901 25599 12902 25599 12895 25600 12902 25600 12896 25600 12903 25601 12904 25601 12898 25601 12898 25602 12904 25602 12905 25602 12898 25603 12905 25603 12899 25603 12906 25604 12907 25604 12908 25604 12908 25605 12907 25605 12909 25605 12908 25606 12909 25606 12910 25606 12910 25607 12909 25607 12911 25607 12910 25608 12911 25608 12903 25608 12903 25609 12911 25609 12912 25609 12903 25610 12912 25610 12904 25610 12906 25611 12908 25611 12913 25611 12913 25612 12908 25612 12914 25612 12913 25613 12914 25613 12915 25613 12915 25614 12914 25614 12916 25614 12915 25615 12916 25615 12917 25615 12917 25616 12916 25616 12918 25616 12918 25617 12916 25617 12919 25617 12918 25618 12919 25618 12920 25618 12920 25619 12919 25619 12921 25619 12920 25620 12921 25620 12922 25620 12798 25621 12923 25621 12799 25621 12799 25622 12923 25622 12924 25622 12799 25623 12924 25623 12925 25623 12925 25624 12924 25624 12926 25624 12925 25625 12926 25625 12921 25625 12921 25626 12926 25626 12927 25626 12921 25627 12927 25627 12922 25627 12977 25726 12928 25726 12978 25726 12978 25727 12928 25727 12929 25727 12978 25728 12929 25728 12979 25728 12979 25729 12929 25729 12930 25729 12979 25730 12930 25730 12980 25730 12980 25731 12930 25731 12931 25731 12980 25732 12931 25732 12981 25732 12981 25733 12931 25733 12932 25733 12981 25734 12932 25734 12982 25734 12982 25735 12932 25735 12933 25735 12982 25736 12933 25736 12983 25736 12983 25737 12933 25737 12934 25737 12983 25738 12934 25738 12984 25738 12984 25739 12934 25739 12935 25739 12984 25740 12935 25740 12985 25740 12985 25741 12935 25741 12936 25741 12985 25742 12936 25742 12986 25742 12986 25743 12936 25743 12937 25743 12986 25744 12937 25744 12987 25744 12987 25745 12937 25745 12938 25745 12987 25746 12938 25746 12988 25746 12988 25747 12938 25747 12939 25747 12988 25748 12939 25748 12989 25748 12989 25749 12939 25749 12940 25749 12989 25750 12940 25750 12990 25750 12990 25751 12940 25751 12941 25751 12990 25752 12941 25752 12991 25752 12991 25753 12941 25753 12942 25753 12991 25754 12942 25754 12992 25754 12992 25755 12942 25755 12943 25755 12992 25756 12943 25756 12993 25756 12993 25757 12943 25757 12944 25757 12993 25758 12944 25758 12994 25758 12994 25759 12944 25759 12945 25759 12994 25760 12945 25760 12995 25760 12995 25761 12945 25761 12946 25761 12995 25762 12946 25762 12996 25762 12996 25763 12946 25763 12947 25763 12996 25764 12947 25764 12997 25764 12997 25765 12947 25765 12948 25765 12997 25766 12948 25766 12998 25766 12998 25767 12948 25767 12949 25767 12998 25768 12949 25768 12999 25768 12999 25769 12949 25769 12950 25769 12999 25770 12950 25770 13000 25770 13000 25771 12950 25771 12951 25771 13000 25772 12951 25772 13001 25772 13001 25773 12951 25773 12952 25773 13001 25774 12952 25774 13002 25774 13002 25775 12952 25775 12953 25775 13002 25776 12953 25776 13003 25776 13003 25777 12953 25777 12954 25777 13003 25778 12954 25778 13004 25778 13004 25779 12954 25779 12955 25779 13004 25780 12955 25780 13005 25780 13005 25781 12955 25781 12956 25781 13005 25782 12956 25782 13006 25782 13006 25783 12956 25783 12957 25783 13006 25784 12957 25784 13007 25784 13007 25785 12957 25785 12958 25785 13007 25786 12958 25786 13008 25786 13008 25787 12958 25787 12959 25787 13008 25788 12959 25788 13009 25788 13009 25789 12959 25789 12960 25789 13009 25790 12960 25790 13010 25790 13010 25791 12960 25791 12961 25791 13010 25792 12961 25792 13011 25792 13011 25793 12961 25793 12962 25793 13011 25794 12962 25794 13012 25794 13012 25795 12962 25795 12963 25795 13012 25796 12963 25796 13013 25796 13013 25797 12963 25797 12964 25797 13013 25798 12964 25798 13014 25798 13014 25799 12964 25799 12965 25799 13014 25800 12965 25800 13015 25800 13015 25801 12965 25801 12966 25801 13015 25802 12966 25802 13016 25802 13016 25803 12966 25803 12967 25803 13016 25804 12967 25804 13017 25804 13017 25805 12967 25805 12968 25805 13017 25806 12968 25806 13018 25806 13018 25807 12968 25807 12969 25807 13018 25808 12969 25808 13019 25808 13019 25809 12969 25809 12970 25809 13019 25810 12970 25810 13020 25810 13020 25811 12970 25811 12971 25811 13020 25812 12971 25812 13021 25812 13021 25813 12971 25813 12972 25813 13021 25814 12972 25814 13022 25814 13022 25815 12972 25815 12973 25815 13022 25816 12973 25816 13023 25816 13023 25817 12973 25817 12974 25817 13023 25818 12974 25818 13024 25818 13024 25819 12974 25819 12975 25819 13024 25820 12975 25820 13025 25820 13025 25821 12975 25821 12976 25821 13025 25822 12976 25822 12977 25822 12977 25823 12976 25823 12928 25823 13026 25824 12977 25824 13027 25824 13027 25825 12977 25825 12978 25825 13027 25826 12978 25826 13028 25826 13028 25827 12978 25827 12979 25827 13028 25828 12979 25828 13029 25828 13029 25829 12979 25829 12980 25829 13029 25830 12980 25830 13030 25830 13030 25831 12980 25831 12981 25831 13030 25832 12981 25832 13031 25832 13031 25833 12981 25833 12982 25833 13031 25834 12982 25834 13032 25834 13032 25835 12982 25835 12983 25835 13032 25836 12983 25836 13033 25836 13033 25837 12983 25837 12984 25837 13033 25838 12984 25838 13034 25838 13034 25839 12984 25839 12985 25839 13034 25840 12985 25840 13035 25840 13035 25841 12985 25841 12986 25841 13035 25842 12986 25842 13036 25842 13036 25843 12986 25843 12987 25843 13036 25844 12987 25844 13037 25844 13037 25845 12987 25845 12988 25845 13037 25846 12988 25846 13038 25846 13038 25847 12988 25847 12989 25847 13038 25848 12989 25848 13039 25848 13039 25849 12989 25849 12990 25849 13039 25850 12990 25850 13040 25850 13040 25851 12990 25851 12991 25851 13040 25852 12991 25852 13041 25852 13041 25853 12991 25853 12992 25853 13041 25854 12992 25854 13042 25854 13042 25855 12992 25855 12993 25855 13042 25856 12993 25856 13043 25856 13043 25857 12993 25857 12994 25857 13043 25858 12994 25858 13044 25858 13044 25859 12994 25859 12995 25859 13044 25860 12995 25860 13045 25860 13045 25861 12995 25861 12996 25861 13045 25862 12996 25862 13046 25862 13046 25863 12996 25863 12997 25863 13046 25864 12997 25864 13047 25864 13047 25865 12997 25865 12998 25865 13047 25866 12998 25866 13048 25866 13048 25867 12998 25867 12999 25867 13048 25868 12999 25868 13049 25868 13049 25869 12999 25869 13000 25869 13049 25870 13000 25870 13050 25870 13050 25871 13000 25871 13001 25871 13050 25872 13001 25872 13051 25872 13051 25873 13001 25873 13002 25873 13051 25874 13002 25874 13052 25874 13052 25875 13002 25875 13003 25875 13052 25876 13003 25876 13053 25876 13053 25877 13003 25877 13004 25877 13053 25878 13004 25878 13054 25878 13054 25879 13004 25879 13005 25879 13054 25880 13005 25880 13055 25880 13055 25881 13005 25881 13006 25881 13055 25882 13006 25882 13056 25882 13056 25883 13006 25883 13007 25883 13056 25884 13007 25884 13057 25884 13057 25885 13007 25885 13008 25885 13057 25886 13008 25886 13058 25886 13058 25887 13008 25887 13009 25887 13058 25888 13009 25888 13059 25888 13059 25889 13009 25889 13010 25889 13059 25890 13010 25890 13060 25890 13060 25891 13010 25891 13011 25891 13060 25892 13011 25892 13061 25892 13061 25893 13011 25893 13012 25893 13061 25894 13012 25894 13062 25894 13062 25895 13012 25895 13013 25895 13062 25896 13013 25896 13063 25896 13063 25897 13013 25897 13014 25897 13063 25898 13014 25898 13064 25898 13064 25899 13014 25899 13015 25899 13064 25900 13015 25900 13065 25900 13065 25901 13015 25901 13016 25901 13065 25902 13016 25902 13066 25902 13066 25903 13016 25903 13017 25903 13066 25904 13017 25904 13067 25904 13067 25905 13017 25905 13018 25905 13067 25906 13018 25906 13068 25906 13068 25907 13018 25907 13019 25907 13068 25908 13019 25908 13069 25908 13069 25909 13019 25909 13020 25909 13069 25910 13020 25910 13070 25910 13070 25911 13020 25911 13021 25911 13070 25912 13021 25912 13071 25912 13071 25913 13021 25913 13022 25913 13071 25914 13022 25914 13072 25914 13072 25915 13022 25915 13023 25915 13072 25916 13023 25916 13073 25916 13073 25917 13023 25917 13024 25917 13073 25918 13024 25918 13074 25918 13074 25919 13024 25919 13025 25919 13074 25920 13025 25920 13026 25920 13026 25921 13025 25921 12977 25921 13075 25922 13026 25922 13076 25922 13076 25923 13026 25923 13027 25923 13076 25924 13027 25924 13077 25924 13077 25925 13027 25925 13028 25925 13077 25926 13028 25926 13078 25926 13078 25927 13028 25927 13029 25927 13078 25928 13029 25928 13079 25928 13079 25929 13029 25929 13030 25929 13079 25930 13030 25930 13080 25930 13080 25931 13030 25931 13031 25931 13080 25932 13031 25932 13081 25932 13081 25933 13031 25933 13032 25933 13081 25934 13032 25934 13082 25934 13082 25935 13032 25935 13033 25935 13082 25936 13033 25936 13083 25936 13083 25937 13033 25937 13034 25937 13083 25938 13034 25938 13084 25938 13084 25939 13034 25939 13035 25939 13084 25940 13035 25940 13085 25940 13085 25941 13035 25941 13036 25941 13085 25942 13036 25942 13086 25942 13086 25943 13036 25943 13037 25943 13086 25944 13037 25944 13087 25944 13087 25945 13037 25945 13038 25945 13087 25946 13038 25946 13088 25946 13088 25947 13038 25947 13039 25947 13088 25948 13039 25948 13089 25948 13089 25949 13039 25949 13040 25949 13089 25950 13040 25950 13090 25950 13090 25951 13040 25951 13041 25951 13090 25952 13041 25952 13091 25952 13091 25953 13041 25953 13042 25953 13091 25954 13042 25954 13092 25954 13092 25955 13042 25955 13043 25955 13092 25956 13043 25956 13093 25956 13093 25957 13043 25957 13044 25957 13093 25958 13044 25958 13094 25958 13094 25959 13044 25959 13045 25959 13094 25960 13045 25960 13095 25960 13095 25961 13045 25961 13046 25961 13095 25962 13046 25962 13096 25962 13096 25963 13046 25963 13047 25963 13096 25964 13047 25964 13097 25964 13097 25965 13047 25965 13048 25965 13097 25966 13048 25966 13098 25966 13098 25967 13048 25967 13049 25967 13098 25968 13049 25968 13099 25968 13099 25969 13049 25969 13050 25969 13099 25970 13050 25970 13100 25970 13100 25971 13050 25971 13051 25971 13100 25972 13051 25972 13101 25972 13101 25973 13051 25973 13052 25973 13101 25974 13052 25974 13102 25974 13102 25975 13052 25975 13053 25975 13102 25976 13053 25976 13103 25976 13103 25977 13053 25977 13054 25977 13103 25978 13054 25978 13104 25978 13104 25979 13054 25979 13055 25979 13104 25980 13055 25980 13105 25980 13105 25981 13055 25981 13056 25981 13105 25982 13056 25982 13106 25982 13106 25983 13056 25983 13057 25983 13106 25984 13057 25984 13107 25984 13107 25985 13057 25985 13058 25985 13107 25986 13058 25986 13108 25986 13108 25987 13058 25987 13059 25987 13108 25988 13059 25988 13109 25988 13109 25989 13059 25989 13060 25989 13109 25990 13060 25990 13110 25990 13110 25991 13060 25991 13061 25991 13110 25992 13061 25992 13111 25992 13111 25993 13061 25993 13062 25993 13111 25994 13062 25994 13112 25994 13112 25995 13062 25995 13063 25995 13112 25996 13063 25996 13113 25996 13113 25997 13063 25997 13064 25997 13113 25998 13064 25998 13114 25998 13114 25999 13064 25999 13065 25999 13114 26000 13065 26000 13115 26000 13115 26001 13065 26001 13066 26001 13115 26002 13066 26002 13116 26002 13116 26003 13066 26003 13067 26003 13116 26004 13067 26004 13117 26004 13117 26005 13067 26005 13068 26005 13117 26006 13068 26006 13118 26006 13118 26007 13068 26007 13069 26007 13118 26008 13069 26008 13119 26008 13119 26009 13069 26009 13070 26009 13119 26010 13070 26010 13120 26010 13120 26011 13070 26011 13071 26011 13120 26012 13071 26012 13121 26012 13121 26013 13071 26013 13072 26013 13121 26014 13072 26014 13122 26014 13122 26015 13072 26015 13073 26015 13122 26016 13073 26016 13123 26016 13123 26017 13073 26017 13074 26017 13123 26018 13074 26018 13075 26018 13075 26019 13074 26019 13026 26019 13124 26020 13075 26020 13125 26020 13125 26021 13075 26021 13076 26021 13125 26022 13076 26022 13126 26022 13126 26023 13076 26023 13077 26023 13126 26024 13077 26024 13127 26024 13127 26025 13077 26025 13078 26025 13127 26026 13078 26026 13128 26026 13128 26027 13078 26027 13079 26027 13128 26028 13079 26028 13129 26028 13129 26029 13079 26029 13080 26029 13129 26030 13080 26030 13130 26030 13130 26031 13080 26031 13081 26031 13130 26032 13081 26032 13131 26032 13131 26033 13081 26033 13082 26033 13131 26034 13082 26034 13132 26034 13132 26035 13082 26035 13083 26035 13132 26036 13083 26036 13133 26036 13133 26037 13083 26037 13084 26037 13133 26038 13084 26038 13134 26038 13134 26039 13084 26039 13085 26039 13134 26040 13085 26040 13135 26040 13135 26041 13085 26041 13086 26041 13135 26042 13086 26042 13136 26042 13136 26043 13086 26043 13087 26043 13136 26044 13087 26044 13137 26044 13137 26045 13087 26045 13088 26045 13137 26046 13088 26046 13138 26046 13138 26047 13088 26047 13089 26047 13138 26048 13089 26048 13139 26048 13139 26049 13089 26049 13090 26049 13139 26050 13090 26050 13140 26050 13140 26051 13090 26051 13091 26051 13140 26052 13091 26052 13141 26052 13141 26053 13091 26053 13092 26053 13141 26054 13092 26054 13142 26054 13142 26055 13092 26055 13093 26055 13142 26056 13093 26056 13143 26056 13143 26057 13093 26057 13094 26057 13143 26058 13094 26058 13144 26058 13144 26059 13094 26059 13095 26059 13144 26060 13095 26060 13145 26060 13145 26061 13095 26061 13096 26061 13145 26062 13096 26062 13146 26062 13146 26063 13096 26063 13097 26063 13146 26064 13097 26064 13147 26064 13147 26065 13097 26065 13098 26065 13147 26066 13098 26066 13148 26066 13148 26067 13098 26067 13099 26067 13148 26068 13099 26068 13149 26068 13149 26069 13099 26069 13100 26069 13149 26070 13100 26070 13150 26070 13150 26071 13100 26071 13101 26071 13150 26072 13101 26072 13151 26072 13151 26073 13101 26073 13102 26073 13151 26074 13102 26074 13152 26074 13152 26075 13102 26075 13103 26075 13152 26076 13103 26076 13153 26076 13153 26077 13103 26077 13104 26077 13153 26078 13104 26078 13154 26078 13154 26079 13104 26079 13105 26079 13154 26080 13105 26080 13155 26080 13155 26081 13105 26081 13106 26081 13155 26082 13106 26082 13156 26082 13156 26083 13106 26083 13107 26083 13156 26084 13107 26084 13157 26084 13157 26085 13107 26085 13108 26085 13157 26086 13108 26086 13158 26086 13158 26087 13108 26087 13109 26087 13158 26088 13109 26088 13159 26088 13159 26089 13109 26089 13110 26089 13159 26090 13110 26090 13160 26090 13160 26091 13110 26091 13111 26091 13160 26092 13111 26092 13161 26092 13161 26093 13111 26093 13112 26093 13161 26094 13112 26094 13162 26094 13162 26095 13112 26095 13113 26095 13162 26096 13113 26096 13163 26096 13163 26097 13113 26097 13114 26097 13163 26098 13114 26098 13164 26098 13164 26099 13114 26099 13115 26099 13164 26100 13115 26100 13165 26100 13165 26101 13115 26101 13116 26101 13165 26102 13116 26102 13166 26102 13166 26103 13116 26103 13117 26103 13166 26104 13117 26104 13167 26104 13167 26105 13117 26105 13118 26105 13167 26106 13118 26106 13168 26106 13168 26107 13118 26107 13119 26107 13168 26108 13119 26108 13169 26108 13169 26109 13119 26109 13120 26109 13169 26110 13120 26110 13170 26110 13170 26111 13120 26111 13121 26111 13170 26112 13121 26112 13171 26112 13171 26113 13121 26113 13122 26113 13171 26114 13122 26114 13172 26114 13172 26115 13122 26115 13123 26115 13172 26116 13123 26116 13124 26116 13124 26117 13123 26117 13075 26117 13173 26118 13124 26118 13174 26118 13174 26119 13124 26119 13125 26119 13174 26120 13125 26120 13175 26120 13175 26121 13125 26121 13126 26121 13175 26122 13126 26122 13176 26122 13176 26123 13126 26123 13127 26123 13176 26124 13127 26124 13177 26124 13177 26125 13127 26125 13128 26125 13177 26126 13128 26126 13178 26126 13178 26127 13128 26127 13129 26127 13178 26128 13129 26128 13179 26128 13179 26129 13129 26129 13130 26129 13179 26130 13130 26130 13180 26130 13180 26131 13130 26131 13131 26131 13180 26132 13131 26132 13181 26132 13181 26133 13131 26133 13132 26133 13181 26134 13132 26134 13182 26134 13182 26135 13132 26135 13133 26135 13182 26136 13133 26136 13183 26136 13183 26137 13133 26137 13134 26137 13183 26138 13134 26138 13184 26138 13184 26139 13134 26139 13135 26139 13184 26140 13135 26140 13185 26140 13185 26141 13135 26141 13136 26141 13185 26142 13136 26142 13186 26142 13186 26143 13136 26143 13137 26143 13186 26144 13137 26144 13187 26144 13187 26145 13137 26145 13138 26145 13187 26146 13138 26146 13188 26146 13188 26147 13138 26147 13139 26147 13188 26148 13139 26148 13189 26148 13189 26149 13139 26149 13140 26149 13189 26150 13140 26150 13190 26150 13190 26151 13140 26151 13141 26151 13190 26152 13141 26152 13191 26152 13191 26153 13141 26153 13142 26153 13191 26154 13142 26154 13192 26154 13192 26155 13142 26155 13143 26155 13192 26156 13143 26156 13193 26156 13193 26157 13143 26157 13144 26157 13193 26158 13144 26158 13194 26158 13194 26159 13144 26159 13145 26159 13194 26160 13145 26160 13195 26160 13195 26161 13145 26161 13146 26161 13195 26162 13146 26162 13196 26162 13196 26163 13146 26163 13147 26163 13196 26164 13147 26164 13197 26164 13197 26165 13147 26165 13148 26165 13197 26166 13148 26166 13198 26166 13198 26167 13148 26167 13149 26167 13198 26168 13149 26168 13199 26168 13199 26169 13149 26169 13150 26169 13199 26170 13150 26170 13200 26170 13200 26171 13150 26171 13151 26171 13200 26172 13151 26172 13201 26172 13201 26173 13151 26173 13152 26173 13201 26174 13152 26174 13202 26174 13202 26175 13152 26175 13153 26175 13202 26176 13153 26176 13203 26176 13203 26177 13153 26177 13154 26177 13203 26178 13154 26178 13204 26178 13204 26179 13154 26179 13155 26179 13204 26180 13155 26180 13205 26180 13205 26181 13155 26181 13156 26181 13205 26182 13156 26182 13206 26182 13206 26183 13156 26183 13157 26183 13206 26184 13157 26184 13207 26184 13207 26185 13157 26185 13158 26185 13207 26186 13158 26186 13208 26186 13208 26187 13158 26187 13159 26187 13208 26188 13159 26188 13209 26188 13209 26189 13159 26189 13160 26189 13209 26190 13160 26190 13210 26190 13210 26191 13160 26191 13161 26191 13210 26192 13161 26192 13211 26192 13211 26193 13161 26193 13162 26193 13211 26194 13162 26194 13212 26194 13212 26195 13162 26195 13163 26195 13212 26196 13163 26196 13213 26196 13213 26197 13163 26197 13164 26197 13213 26198 13164 26198 13214 26198 13214 26199 13164 26199 13165 26199 13214 26200 13165 26200 13215 26200 13215 26201 13165 26201 13166 26201 13215 26202 13166 26202 13216 26202 13216 26203 13166 26203 13167 26203 13216 26204 13167 26204 13217 26204 13217 26205 13167 26205 13168 26205 13217 26206 13168 26206 13218 26206 13218 26207 13168 26207 13169 26207 13218 26208 13169 26208 13219 26208 13219 26209 13169 26209 13170 26209 13219 26210 13170 26210 13220 26210 13220 26211 13170 26211 13171 26211 13220 26212 13171 26212 13221 26212 13221 26213 13171 26213 13172 26213 13221 26214 13172 26214 13173 26214 13173 26215 13172 26215 13124 26215 13222 26216 13173 26216 13223 26216 13223 26217 13173 26217 13174 26217 13223 26218 13174 26218 13224 26218 13224 26219 13174 26219 13175 26219 13224 26220 13175 26220 13225 26220 13225 26221 13175 26221 13176 26221 13225 26222 13176 26222 13226 26222 13226 26223 13176 26223 13177 26223 13226 26224 13177 26224 13227 26224 13227 26225 13177 26225 13178 26225 13227 26226 13178 26226 13228 26226 13228 26227 13178 26227 13179 26227 13228 26228 13179 26228 13229 26228 13229 26229 13179 26229 13180 26229 13229 26230 13180 26230 13230 26230 13230 26231 13180 26231 13181 26231 13230 26232 13181 26232 13231 26232 13231 26233 13181 26233 13182 26233 13231 26234 13182 26234 13232 26234 13232 26235 13182 26235 13183 26235 13232 26236 13183 26236 13233 26236 13233 26237 13183 26237 13184 26237 13233 26238 13184 26238 13234 26238 13234 26239 13184 26239 13185 26239 13234 26240 13185 26240 13235 26240 13235 26241 13185 26241 13186 26241 13235 26242 13186 26242 13236 26242 13236 26243 13186 26243 13187 26243 13236 26244 13187 26244 13237 26244 13237 26245 13187 26245 13188 26245 13237 26246 13188 26246 13238 26246 13238 26247 13188 26247 13189 26247 13238 26248 13189 26248 13239 26248 13239 26249 13189 26249 13190 26249 13239 26250 13190 26250 13240 26250 13240 26251 13190 26251 13191 26251 13240 26252 13191 26252 13241 26252 13241 26253 13191 26253 13192 26253 13241 26254 13192 26254 13242 26254 13242 26255 13192 26255 13193 26255 13242 26256 13193 26256 13243 26256 13243 26257 13193 26257 13194 26257 13243 26258 13194 26258 13244 26258 13244 26259 13194 26259 13195 26259 13244 26260 13195 26260 13245 26260 13245 26261 13195 26261 13196 26261 13245 26262 13196 26262 13246 26262 13246 26263 13196 26263 13197 26263 13246 26264 13197 26264 13247 26264 13247 26265 13197 26265 13198 26265 13247 26266 13198 26266 13248 26266 13248 26267 13198 26267 13199 26267 13248 26268 13199 26268 13249 26268 13249 26269 13199 26269 13200 26269 13249 26270 13200 26270 13250 26270 13250 26271 13200 26271 13201 26271 13250 26272 13201 26272 13251 26272 13251 26273 13201 26273 13202 26273 13251 26274 13202 26274 13252 26274 13252 26275 13202 26275 13203 26275 13252 26276 13203 26276 13253 26276 13253 26277 13203 26277 13204 26277 13253 26278 13204 26278 13254 26278 13254 26279 13204 26279 13205 26279 13254 26280 13205 26280 13255 26280 13255 26281 13205 26281 13206 26281 13255 26282 13206 26282 13256 26282 13256 26283 13206 26283 13207 26283 13256 26284 13207 26284 13257 26284 13257 26285 13207 26285 13208 26285 13257 26286 13208 26286 13258 26286 13258 26287 13208 26287 13209 26287 13258 26288 13209 26288 13259 26288 13259 26289 13209 26289 13210 26289 13259 26290 13210 26290 13260 26290 13260 26291 13210 26291 13211 26291 13260 26292 13211 26292 13261 26292 13261 26293 13211 26293 13212 26293 13261 26294 13212 26294 13262 26294 13262 26295 13212 26295 13213 26295 13262 26296 13213 26296 13263 26296 13263 26297 13213 26297 13214 26297 13263 26298 13214 26298 13264 26298 13264 26299 13214 26299 13215 26299 13264 26300 13215 26300 13265 26300 13265 26301 13215 26301 13216 26301 13265 26302 13216 26302 13266 26302 13266 26303 13216 26303 13217 26303 13266 26304 13217 26304 13267 26304 13267 26305 13217 26305 13218 26305 13267 26306 13218 26306 13268 26306 13268 26307 13218 26307 13219 26307 13268 26308 13219 26308 13269 26308 13269 26309 13219 26309 13220 26309 13269 26310 13220 26310 13270 26310 13270 26311 13220 26311 13221 26311 13270 26312 13221 26312 13222 26312 13222 26313 13221 26313 13173 26313 12861 26314 13222 26314 12864 26314 12864 26315 13222 26315 13223 26315 12864 26316 13223 26316 12867 26316 12867 26317 13223 26317 13224 26317 12867 26318 13224 26318 12869 26318 12869 26319 13224 26319 13225 26319 12869 26320 13225 26320 12873 26320 12873 26321 13225 26321 13226 26321 12873 26322 13226 26322 12871 26322 12871 26323 13226 26323 13227 26323 12871 26324 13227 26324 12878 26324 12878 26325 13227 26325 13228 26325 12878 26326 13228 26326 12876 26326 12876 26327 13228 26327 13229 26327 12876 26328 13229 26328 12881 26328 12881 26329 13229 26329 13230 26329 12881 26330 13230 26330 12884 26330 12884 26331 13230 26331 13231 26331 12884 26332 13231 26332 12889 26332 12889 26333 13231 26333 13232 26333 12889 26334 13232 26334 12887 26334 12887 26335 13232 26335 13233 26335 12887 26336 13233 26336 12892 26336 12892 26337 13233 26337 13234 26337 12892 26338 13234 26338 12895 26338 12895 26339 13234 26339 13235 26339 12895 26340 13235 26340 12900 26340 12900 26341 13235 26341 13236 26341 12900 26342 13236 26342 12898 26342 12898 26343 13236 26343 13237 26343 12898 26344 13237 26344 12903 26344 12903 26345 13237 26345 13238 26345 12903 26346 13238 26346 12910 26346 12910 26347 13238 26347 13239 26347 12910 26348 13239 26348 12908 26348 12908 26349 13239 26349 13240 26349 12908 26350 13240 26350 12914 26350 12914 26351 13240 26351 13241 26351 12914 26352 13241 26352 12916 26352 12916 26353 13241 26353 13242 26353 12916 26354 13242 26354 12919 26354 12919 26355 13242 26355 13243 26355 12919 26356 13243 26356 12921 26356 12921 26357 13243 26357 13244 26357 12921 26358 13244 26358 12925 26358 12925 26359 13244 26359 13245 26359 12925 26360 13245 26360 12799 26360 12799 26361 13245 26361 13246 26361 12799 26362 13246 26362 12797 26362 12797 26363 13246 26363 13247 26363 12797 26364 13247 26364 12795 26364 12795 26365 13247 26365 13248 26365 12795 26366 13248 26366 12800 26366 12800 26367 13248 26367 13249 26367 12800 26368 13249 26368 12803 26368 12803 26369 13249 26369 13250 26369 12803 26370 13250 26370 12808 26370 12808 26371 13250 26371 13251 26371 12808 26372 13251 26372 12806 26372 12806 26373 13251 26373 13252 26373 12806 26374 13252 26374 12811 26374 12811 26375 13252 26375 13253 26375 12811 26376 13253 26376 12816 26376 12816 26377 13253 26377 13254 26377 12816 26378 13254 26378 12814 26378 12814 26379 13254 26379 13255 26379 12814 26380 13255 26380 12819 26380 12819 26381 13255 26381 13256 26381 12819 26382 13256 26382 12822 26382 12822 26383 13256 26383 13257 26383 12822 26384 13257 26384 12829 26384 12829 26385 13257 26385 13258 26385 12829 26386 13258 26386 12827 26386 12827 26387 13258 26387 13259 26387 12827 26388 13259 26388 12833 26388 12833 26389 13259 26389 13260 26389 12833 26390 13260 26390 12835 26390 12835 26391 13260 26391 13261 26391 12835 26392 13261 26392 12838 26392 12838 26393 13261 26393 13262 26393 12838 26394 13262 26394 12840 26394 12840 26395 13262 26395 13263 26395 12840 26396 13263 26396 12843 26396 12843 26397 13263 26397 13264 26397 12843 26398 13264 26398 12846 26398 12846 26399 13264 26399 13265 26399 12846 26400 13265 26400 12849 26400 12849 26401 13265 26401 13266 26401 12849 26402 13266 26402 12851 26402 12851 26403 13266 26403 13267 26403 12851 26404 13267 26404 12854 26404 12854 26405 13267 26405 13268 26405 12854 26406 13268 26406 12857 26406 12857 26407 13268 26407 13269 26407 12857 26408 13269 26408 12859 26408 12859 26409 13269 26409 13270 26409 12859 26410 13270 26410 12861 26410 12861 26411 13270 26411 13222 26411 12718 26412 12923 26412 12717 26412 12717 26413 12923 26413 12798 26413 12717 26414 12798 26414 12716 26414 12716 26415 12798 26415 12796 26415 12716 26416 12796 26416 12802 26416 12802 26417 12801 26417 12716 26417 12716 26418 12801 26418 12805 26418 12716 26419 12805 26419 12715 26419 12805 26420 12804 26420 12715 26420 12715 26421 12804 26421 12810 26421 12715 26422 12810 26422 12714 26422 12714 26423 12810 26423 12809 26423 12714 26424 12809 26424 12713 26424 12713 26425 12809 26425 12807 26425 12713 26426 12807 26426 12813 26426 12817 26427 12712 26427 12818 26427 12818 26428 12712 26428 12713 26428 12818 26429 12713 26429 12812 26429 12812 26430 12713 26430 12813 26430 12817 26431 12815 26431 12712 26431 12712 26432 12815 26432 12821 26432 12712 26433 12821 26433 12711 26433 12821 26434 12820 26434 12711 26434 12711 26435 12820 26435 12824 26435 12711 26436 12824 26436 12710 26436 12824 26437 12823 26437 12710 26437 12710 26438 12823 26438 12831 26438 12710 26439 12831 26439 12745 26439 12745 26440 12831 26440 12830 26440 12745 26441 12830 26441 12744 26441 12744 26442 12830 26442 12828 26442 12744 26443 12828 26443 12826 26443 12826 26444 12825 26444 12744 26444 12744 26445 12825 26445 12832 26445 12744 26446 12832 26446 12743 26446 12832 26447 12834 26447 12743 26447 12743 26448 12834 26448 12836 26448 12743 26449 12836 26449 12742 26449 12742 26450 12836 26450 12837 26450 12742 26451 12837 26451 12741 26451 12741 26452 12837 26452 12839 26452 12741 26453 12839 26453 12841 26453 12841 26454 12842 26454 12741 26454 12741 26455 12842 26455 12844 26455 12741 26456 12844 26456 12740 26456 12844 26457 12845 26457 12740 26457 12740 26458 12845 26458 12847 26458 12740 26459 12847 26459 12739 26459 12739 26460 12847 26460 12848 26460 12739 26461 12848 26461 12738 26461 12738 26462 12848 26462 12850 26462 12738 26463 12850 26463 12852 26463 12852 26464 12853 26464 12738 26464 12738 26465 12853 26465 12855 26465 12738 26466 12855 26466 12737 26466 12855 26467 12856 26467 12737 26467 12737 26468 12856 26468 12858 26468 12737 26469 12858 26469 12736 26469 12858 26470 12860 26470 12736 26470 12736 26471 12860 26471 12862 26471 12736 26472 12862 26472 12735 26472 12866 26473 12734 26473 12865 26473 12865 26474 12734 26474 12735 26474 12865 26475 12735 26475 12863 26475 12863 26476 12735 26476 12862 26476 12866 26477 12868 26477 12734 26477 12734 26478 12868 26478 12870 26478 12734 26479 12870 26479 12733 26479 12870 26480 12875 26480 12733 26480 12733 26481 12875 26481 12874 26481 12733 26482 12874 26482 12732 26482 12874 26483 12872 26483 12732 26483 12732 26484 12872 26484 12880 26484 12732 26485 12880 26485 12731 26485 12731 26486 12880 26486 12879 26486 12731 26487 12879 26487 12730 26487 12730 26488 12879 26488 12877 26488 12730 26489 12877 26489 12883 26489 12883 26490 12882 26490 12730 26490 12730 26491 12882 26491 12886 26491 12730 26492 12886 26492 12729 26492 12886 26493 12885 26493 12729 26493 12729 26494 12885 26494 12891 26494 12729 26495 12891 26495 12728 26495 12728 26496 12891 26496 12890 26496 12728 26497 12890 26497 12727 26497 12727 26498 12890 26498 12888 26498 12727 26499 12888 26499 12894 26499 12894 26500 12893 26500 12727 26500 12727 26501 12893 26501 12897 26501 12727 26502 12897 26502 12726 26502 12897 26503 12896 26503 12726 26503 12726 26504 12896 26504 12902 26504 12726 26505 12902 26505 12725 26505 12725 26506 12902 26506 12901 26506 12725 26507 12901 26507 12724 26507 12724 26508 12901 26508 12899 26508 12724 26509 12899 26509 12905 26509 12911 26510 12723 26510 12912 26510 12912 26511 12723 26511 12724 26511 12912 26512 12724 26512 12904 26512 12904 26513 12724 26513 12905 26513 12911 26514 12909 26514 12723 26514 12723 26515 12909 26515 12907 26515 12723 26516 12907 26516 12722 26516 12907 26517 12906 26517 12722 26517 12722 26518 12906 26518 12913 26518 12722 26519 12913 26519 12721 26519 12913 26520 12915 26520 12721 26520 12721 26521 12915 26521 12917 26521 12721 26522 12917 26522 12720 26522 12720 26523 12917 26523 12918 26523 12720 26524 12918 26524 12719 26524 12719 26525 12918 26525 12920 26525 12719 26526 12920 26526 12922 26526 12922 26527 12927 26527 12719 26527 12719 26528 12927 26528 12926 26528 12719 26529 12926 26529 12718 26529 12718 26530 12926 26530 12924 26530 12718 26531 12924 26531 12923 26531 14134 28210 14135 28210 14136 28210 14134 28211 14137 28211 14138 28211 14138 28212 14139 28212 14134 28212 14134 28213 14139 28213 14140 28213 14134 28214 14140 28214 14141 28214 14142 28215 14134 28215 14143 28215 14143 28216 14134 28216 14144 28216 14134 28217 14145 28217 14146 28217 14146 28218 14147 28218 14134 28218 14134 28219 14147 28219 14148 28219 14134 28220 14148 28220 14149 28220 14149 28221 14150 28221 14134 28221 14134 28222 14150 28222 14151 28222 14134 28223 14151 28223 14135 28223 14152 28224 14153 28224 14154 28224 14141 28225 14155 28225 14134 28225 14134 28226 14155 28226 14156 28226 14134 28227 14156 28227 14144 28227 14142 28228 14157 28228 14134 28228 14134 28229 14157 28229 14158 28229 14134 28230 14158 28230 14145 28230 14154 28231 14159 28231 14160 28231 14153 28232 14161 28232 14154 28232 14154 28233 14161 28233 14162 28233 14154 28234 14162 28234 14163 28234 14136 28235 14164 28235 14134 28235 14134 28236 14164 28236 14165 28236 14134 28237 14165 28237 14166 28237 14160 28238 14167 28238 14154 28238 14154 28239 14167 28239 14168 28239 14154 28240 14168 28240 14152 28240 14166 28241 14169 28241 14134 28241 14134 28242 14169 28242 14154 28242 14134 28243 14154 28243 14170 28243 14170 28244 14154 28244 14163 28244 14137 28411 14291 28411 14292 28411 14137 28412 14292 28412 14138 28412 14292 28413 14293 28413 14138 28413 14138 28414 14293 28414 14294 28414 14138 28415 14294 28415 14139 28415 14294 28416 14295 28416 14139 28416 14139 28417 14295 28417 14296 28417 14139 28418 14296 28418 14140 28418 14296 28419 14297 28419 14140 28419 14140 28420 14297 28420 14298 28420 14140 28421 14298 28421 14141 28421 14298 28422 14299 28422 14141 28422 14141 28423 14299 28423 14300 28423 14141 28424 14300 28424 14155 28424 14155 28425 14300 28425 14301 28425 14155 28426 14301 28426 14156 28426 14301 28427 14302 28427 14156 28427 14156 28428 14302 28428 14303 28428 14156 28429 14303 28429 14144 28429 14303 28430 14304 28430 14144 28430 14144 28431 14304 28431 14305 28431 14144 28432 14305 28432 14143 28432 14305 28433 14306 28433 14143 28433 14143 28434 14306 28434 14307 28434 14143 28435 14307 28435 14142 28435 14307 28436 14308 28436 14142 28436 14142 28437 14308 28437 14309 28437 14142 28438 14309 28438 14157 28438 14309 28439 14310 28439 14157 28439 14157 28440 14310 28440 14311 28440 14157 28441 14311 28441 14158 28441 14311 28442 14312 28442 14158 28442 14158 28443 14312 28443 14313 28443 14158 28444 14313 28444 14145 28444 14313 28445 14314 28445 14145 28445 14145 28446 14314 28446 14315 28446 14145 28447 14315 28447 14146 28447 14315 28448 14316 28448 14146 28448 14146 28449 14316 28449 14317 28449 14146 28450 14317 28450 14147 28450 14317 28451 14318 28451 14147 28451 14147 28452 14318 28452 14319 28452 14147 28453 14319 28453 14148 28453 14319 28454 14320 28454 14148 28454 14148 28455 14320 28455 14321 28455 14148 28456 14321 28456 14149 28456 14321 28457 14322 28457 14149 28457 14149 28458 14322 28458 14323 28458 14149 28459 14323 28459 14150 28459 14323 28460 14324 28460 14150 28460 14150 28461 14324 28461 14325 28461 14150 28462 14325 28462 14151 28462 14326 28463 14135 28463 14327 28463 14327 28464 14135 28464 14151 28464 14327 28465 14151 28465 14328 28465 14328 28466 14151 28466 14325 28466 14135 28467 14326 28467 14329 28467 14135 28468 14329 28468 14136 28468 14329 28469 14330 28469 14136 28469 14136 28470 14330 28470 14331 28470 14136 28471 14331 28471 14164 28471 14331 28472 14332 28472 14164 28472 14164 28473 14332 28473 14333 28473 14164 28474 14333 28474 14165 28474 14333 28475 14334 28475 14165 28475 14165 28476 14334 28476 14335 28476 14165 28477 14335 28477 14166 28477 14335 28478 14336 28478 14166 28478 14166 28479 14336 28479 14337 28479 14166 28480 14337 28480 14169 28480 14337 28481 14338 28481 14169 28481 14169 28482 14338 28482 14339 28482 14169 28483 14339 28483 14154 28483 14339 28484 14340 28484 14154 28484 14154 28485 14340 28485 14341 28485 14154 28486 14341 28486 14159 28486 14341 28487 14342 28487 14159 28487 14159 28488 14342 28488 14343 28488 14159 28489 14343 28489 14160 28489 14343 28490 14344 28490 14160 28490 14160 28491 14344 28491 14345 28491 14160 28492 14345 28492 14167 28492 14345 28493 14346 28493 14167 28493 14167 28494 14346 28494 14347 28494 14167 28495 14347 28495 14168 28495 14347 28496 14348 28496 14168 28496 14168 28497 14348 28497 14349 28497 14168 28498 14349 28498 14152 28498 14349 28499 14350 28499 14152 28499 14152 28500 14350 28500 14351 28500 14152 28501 14351 28501 14153 28501 14351 28502 14352 28502 14153 28502 14153 28503 14352 28503 14353 28503 14153 28504 14353 28504 14161 28504 14353 28505 14354 28505 14161 28505 14161 28506 14354 28506 14355 28506 14161 28507 14355 28507 14162 28507 14355 28508 14356 28508 14162 28508 14162 28509 14356 28509 14357 28509 14162 28510 14357 28510 14163 28510 14357 28511 14358 28511 14163 28511 14163 28512 14358 28512 14359 28512 14163 28513 14359 28513 14170 28513 14359 28514 14360 28514 14170 28514 14170 28515 14360 28515 14361 28515 14170 28516 14361 28516 14134 28516 14291 28517 14137 28517 14362 28517 14362 28518 14137 28518 14134 28518 14362 28519 14134 28519 14363 28519 14363 28520 14134 28520 14361 28520 14413 28690 14414 28690 14415 28690 14416 28691 14417 28691 14418 28691 14418 28692 14417 28692 14419 28692 14418 28693 14419 28693 14415 28693 14415 28694 14419 28694 14420 28694 14415 28695 14420 28695 14413 28695 14421 28696 14422 28696 14416 28696 14416 28697 14422 28697 14423 28697 14416 28698 14423 28698 14417 28698 14424 28699 14425 28699 14421 28699 14421 28700 14425 28700 14426 28700 14421 28701 14426 28701 14422 28701 14427 28702 14428 28702 14429 28702 14429 28703 14428 28703 14430 28703 14429 28704 14430 28704 14431 28704 14431 28705 14430 28705 14432 28705 14431 28706 14432 28706 14424 28706 14424 28707 14432 28707 14433 28707 14424 28708 14433 28708 14425 28708 14427 28709 14429 28709 14434 28709 14434 28710 14429 28710 14435 28710 14434 28711 14435 28711 14436 28711 14436 28712 14435 28712 14437 28712 14436 28713 14437 28713 14438 28713 14438 28714 14437 28714 14439 28714 14439 28715 14437 28715 14440 28715 14439 28716 14440 28716 14441 28716 14441 28717 14440 28717 14442 28717 14441 28718 14442 28718 14443 28718 14443 28719 14442 28719 14444 28719 14444 28720 14442 28720 14445 28720 14444 28721 14445 28721 14446 28721 14446 28722 14445 28722 14447 28722 14447 28723 14445 28723 14448 28723 14447 28724 14448 28724 14449 28724 14449 28725 14448 28725 14450 28725 14450 28726 14448 28726 14451 28726 14450 28727 14451 28727 14452 28727 14452 28728 14451 28728 14453 28728 14452 28729 14453 28729 14454 28729 14454 28730 14453 28730 14455 28730 14455 28731 14453 28731 14456 28731 14455 28732 14456 28732 14457 28732 14457 28733 14456 28733 14458 28733 14458 28734 14456 28734 14459 28734 14458 28735 14459 28735 14460 28735 14460 28736 14459 28736 14461 28736 14461 28737 14459 28737 14462 28737 14461 28738 14462 28738 14463 28738 14463 28739 14462 28739 14464 28739 14463 28740 14464 28740 14465 28740 14465 28741 14464 28741 14466 28741 14466 28742 14464 28742 14467 28742 14466 28743 14467 28743 14468 28743 14468 28744 14467 28744 14469 28744 14469 28745 14467 28745 14470 28745 14469 28746 14470 28746 14471 28746 14471 28747 14470 28747 14472 28747 14471 28748 14472 28748 14473 28748 14474 28749 14475 28749 14476 28749 14476 28750 14475 28750 14477 28750 14476 28751 14477 28751 14472 28751 14472 28752 14477 28752 14478 28752 14472 28753 14478 28753 14473 28753 14479 28754 14480 28754 14481 28754 14481 28755 14480 28755 14482 28755 14481 28756 14482 28756 14474 28756 14474 28757 14482 28757 14483 28757 14474 28758 14483 28758 14475 28758 14484 28759 14485 28759 14479 28759 14479 28760 14485 28760 14486 28760 14479 28761 14486 28761 14480 28761 14487 28762 14488 28762 14484 28762 14484 28763 14488 28763 14489 28763 14484 28764 14489 28764 14485 28764 14490 28765 14491 28765 14492 28765 14492 28766 14491 28766 14493 28766 14492 28767 14493 28767 14487 28767 14487 28768 14493 28768 14494 28768 14487 28769 14494 28769 14488 28769 14495 28770 14496 28770 14490 28770 14490 28771 14496 28771 14497 28771 14490 28772 14497 28772 14491 28772 14498 28773 14499 28773 14495 28773 14495 28774 14499 28774 14500 28774 14495 28775 14500 28775 14496 28775 14501 28776 14502 28776 14503 28776 14503 28777 14502 28777 14504 28777 14503 28778 14504 28778 14498 28778 14498 28779 14504 28779 14505 28779 14498 28780 14505 28780 14499 28780 14506 28781 14507 28781 14501 28781 14501 28782 14507 28782 14508 28782 14501 28783 14508 28783 14502 28783 14509 28784 14510 28784 14511 28784 14511 28785 14510 28785 14512 28785 14511 28786 14512 28786 14513 28786 14513 28787 14512 28787 14514 28787 14513 28788 14514 28788 14506 28788 14506 28789 14514 28789 14515 28789 14506 28790 14515 28790 14507 28790 14509 28791 14511 28791 14516 28791 14516 28792 14511 28792 14517 28792 14516 28793 14517 28793 14518 28793 14518 28794 14517 28794 14519 28794 14518 28795 14519 28795 14520 28795 14520 28796 14519 28796 14521 28796 14521 28797 14519 28797 14522 28797 14521 28798 14522 28798 14523 28798 14523 28799 14522 28799 14524 28799 14523 28800 14524 28800 14525 28800 14526 28801 14527 28801 14528 28801 14528 28802 14527 28802 14529 28802 14528 28803 14529 28803 14524 28803 14524 28804 14529 28804 14530 28804 14524 28805 14530 28805 14525 28805 14531 28806 14532 28806 14533 28806 14533 28807 14532 28807 14534 28807 14533 28808 14534 28808 14526 28808 14526 28809 14534 28809 14535 28809 14526 28810 14535 28810 14527 28810 14536 28811 14537 28811 14531 28811 14531 28812 14537 28812 14538 28812 14531 28813 14538 28813 14532 28813 14539 28814 14540 28814 14536 28814 14536 28815 14540 28815 14541 28815 14536 28816 14541 28816 14537 28816 14413 28817 14542 28817 14414 28817 14414 28818 14542 28818 14543 28818 14414 28819 14543 28819 14544 28819 14544 28820 14543 28820 14545 28820 14544 28821 14545 28821 14539 28821 14539 28822 14545 28822 14546 28822 14539 28823 14546 28823 14540 28823 14596 28922 14547 28922 14597 28922 14597 28923 14547 28923 14548 28923 14597 28924 14548 28924 14598 28924 14598 28925 14548 28925 14549 28925 14598 28926 14549 28926 14599 28926 14599 28927 14549 28927 14550 28927 14599 28928 14550 28928 14600 28928 14600 28929 14550 28929 14551 28929 14600 28930 14551 28930 14601 28930 14601 28931 14551 28931 14552 28931 14601 28932 14552 28932 14602 28932 14602 28933 14552 28933 14553 28933 14602 28934 14553 28934 14603 28934 14603 28935 14553 28935 14554 28935 14603 28936 14554 28936 14604 28936 14604 28937 14554 28937 14555 28937 14604 28938 14555 28938 14605 28938 14605 28939 14555 28939 14556 28939 14605 28940 14556 28940 14606 28940 14606 28941 14556 28941 14557 28941 14606 28942 14557 28942 14607 28942 14607 28943 14557 28943 14558 28943 14607 28944 14558 28944 14608 28944 14608 28945 14558 28945 14559 28945 14608 28946 14559 28946 14609 28946 14609 28947 14559 28947 14560 28947 14609 28948 14560 28948 14610 28948 14610 28949 14560 28949 14561 28949 14610 28950 14561 28950 14611 28950 14611 28951 14561 28951 14562 28951 14611 28952 14562 28952 14612 28952 14612 28953 14562 28953 14563 28953 14612 28954 14563 28954 14613 28954 14613 28955 14563 28955 14564 28955 14613 28956 14564 28956 14614 28956 14614 28957 14564 28957 14565 28957 14614 28958 14565 28958 14615 28958 14615 28959 14565 28959 14566 28959 14615 28960 14566 28960 14616 28960 14616 28961 14566 28961 14567 28961 14616 28962 14567 28962 14617 28962 14617 28963 14567 28963 14568 28963 14617 28964 14568 28964 14618 28964 14618 28965 14568 28965 14569 28965 14618 28966 14569 28966 14619 28966 14619 28967 14569 28967 14570 28967 14619 28968 14570 28968 14620 28968 14620 28969 14570 28969 14571 28969 14620 28970 14571 28970 14621 28970 14621 28971 14571 28971 14572 28971 14621 28972 14572 28972 14622 28972 14622 28973 14572 28973 14573 28973 14622 28974 14573 28974 14623 28974 14623 28975 14573 28975 14574 28975 14623 28976 14574 28976 14624 28976 14624 28977 14574 28977 14575 28977 14624 28978 14575 28978 14625 28978 14625 28979 14575 28979 14576 28979 14625 28980 14576 28980 14626 28980 14626 28981 14576 28981 14577 28981 14626 28982 14577 28982 14627 28982 14627 28983 14577 28983 14578 28983 14627 28984 14578 28984 14628 28984 14628 28985 14578 28985 14579 28985 14628 28986 14579 28986 14629 28986 14629 28987 14579 28987 14580 28987 14629 28988 14580 28988 14630 28988 14630 28989 14580 28989 14581 28989 14630 28990 14581 28990 14631 28990 14631 28991 14581 28991 14582 28991 14631 28992 14582 28992 14632 28992 14632 28993 14582 28993 14583 28993 14632 28994 14583 28994 14633 28994 14633 28995 14583 28995 14584 28995 14633 28996 14584 28996 14634 28996 14634 28997 14584 28997 14585 28997 14634 28998 14585 28998 14635 28998 14635 28999 14585 28999 14586 28999 14635 29000 14586 29000 14636 29000 14636 29001 14586 29001 14587 29001 14636 29002 14587 29002 14637 29002 14637 29003 14587 29003 14588 29003 14637 29004 14588 29004 14638 29004 14638 29005 14588 29005 14589 29005 14638 29006 14589 29006 14639 29006 14639 29007 14589 29007 14590 29007 14639 29008 14590 29008 14640 29008 14640 29009 14590 29009 14591 29009 14640 29010 14591 29010 14641 29010 14641 29011 14591 29011 14592 29011 14641 29012 14592 29012 14642 29012 14642 29013 14592 29013 14593 29013 14642 29014 14593 29014 14643 29014 14643 29015 14593 29015 14594 29015 14643 29016 14594 29016 14644 29016 14644 29017 14594 29017 14595 29017 14644 29018 14595 29018 14596 29018 14596 29019 14595 29019 14547 29019 14645 29020 14596 29020 14646 29020 14646 29021 14596 29021 14597 29021 14646 29022 14597 29022 14647 29022 14647 29023 14597 29023 14598 29023 14647 29024 14598 29024 14648 29024 14648 29025 14598 29025 14599 29025 14648 29026 14599 29026 14649 29026 14649 29027 14599 29027 14600 29027 14649 29028 14600 29028 14650 29028 14650 29029 14600 29029 14601 29029 14650 29030 14601 29030 14651 29030 14651 29031 14601 29031 14602 29031 14651 29032 14602 29032 14652 29032 14652 29033 14602 29033 14603 29033 14652 29034 14603 29034 14653 29034 14653 29035 14603 29035 14604 29035 14653 29036 14604 29036 14654 29036 14654 29037 14604 29037 14605 29037 14654 29038 14605 29038 14655 29038 14655 29039 14605 29039 14606 29039 14655 29040 14606 29040 14656 29040 14656 29041 14606 29041 14607 29041 14656 29042 14607 29042 14657 29042 14657 29043 14607 29043 14608 29043 14657 29044 14608 29044 14658 29044 14658 29045 14608 29045 14609 29045 14658 29046 14609 29046 14659 29046 14659 29047 14609 29047 14610 29047 14659 29048 14610 29048 14660 29048 14660 29049 14610 29049 14611 29049 14660 29050 14611 29050 14661 29050 14661 29051 14611 29051 14612 29051 14661 29052 14612 29052 14662 29052 14662 29053 14612 29053 14613 29053 14662 29054 14613 29054 14663 29054 14663 29055 14613 29055 14614 29055 14663 29056 14614 29056 14664 29056 14664 29057 14614 29057 14615 29057 14664 29058 14615 29058 14665 29058 14665 29059 14615 29059 14616 29059 14665 29060 14616 29060 14666 29060 14666 29061 14616 29061 14617 29061 14666 29062 14617 29062 14667 29062 14667 29063 14617 29063 14618 29063 14667 29064 14618 29064 14668 29064 14668 29065 14618 29065 14619 29065 14668 29066 14619 29066 14669 29066 14669 29067 14619 29067 14620 29067 14669 29068 14620 29068 14670 29068 14670 29069 14620 29069 14621 29069 14670 29070 14621 29070 14671 29070 14671 29071 14621 29071 14622 29071 14671 29072 14622 29072 14672 29072 14672 29073 14622 29073 14623 29073 14672 29074 14623 29074 14673 29074 14673 29075 14623 29075 14624 29075 14673 29076 14624 29076 14674 29076 14674 29077 14624 29077 14625 29077 14674 29078 14625 29078 14675 29078 14675 29079 14625 29079 14626 29079 14675 29080 14626 29080 14676 29080 14676 29081 14626 29081 14627 29081 14676 29082 14627 29082 14677 29082 14677 29083 14627 29083 14628 29083 14677 29084 14628 29084 14678 29084 14678 29085 14628 29085 14629 29085 14678 29086 14629 29086 14679 29086 14679 29087 14629 29087 14630 29087 14679 29088 14630 29088 14680 29088 14680 29089 14630 29089 14631 29089 14680 29090 14631 29090 14681 29090 14681 29091 14631 29091 14632 29091 14681 29092 14632 29092 14682 29092 14682 29093 14632 29093 14633 29093 14682 29094 14633 29094 14683 29094 14683 29095 14633 29095 14634 29095 14683 29096 14634 29096 14684 29096 14684 29097 14634 29097 14635 29097 14684 29098 14635 29098 14685 29098 14685 29099 14635 29099 14636 29099 14685 29100 14636 29100 14686 29100 14686 29101 14636 29101 14637 29101 14686 29102 14637 29102 14687 29102 14687 29103 14637 29103 14638 29103 14687 29104 14638 29104 14688 29104 14688 29105 14638 29105 14639 29105 14688 29106 14639 29106 14689 29106 14689 29107 14639 29107 14640 29107 14689 29108 14640 29108 14690 29108 14690 29109 14640 29109 14641 29109 14690 29110 14641 29110 14691 29110 14691 29111 14641 29111 14642 29111 14691 29112 14642 29112 14692 29112 14692 29113 14642 29113 14643 29113 14692 29114 14643 29114 14693 29114 14693 29115 14643 29115 14644 29115 14693 29116 14644 29116 14645 29116 14645 29117 14644 29117 14596 29117 14694 29118 14645 29118 14695 29118 14695 29119 14645 29119 14646 29119 14695 29120 14646 29120 14696 29120 14696 29121 14646 29121 14647 29121 14696 29122 14647 29122 14697 29122 14697 29123 14647 29123 14648 29123 14697 29124 14648 29124 14698 29124 14698 29125 14648 29125 14649 29125 14698 29126 14649 29126 14699 29126 14699 29127 14649 29127 14650 29127 14699 29128 14650 29128 14700 29128 14700 29129 14650 29129 14651 29129 14700 29130 14651 29130 14701 29130 14701 29131 14651 29131 14652 29131 14701 29132 14652 29132 14702 29132 14702 29133 14652 29133 14653 29133 14702 29134 14653 29134 14703 29134 14703 29135 14653 29135 14654 29135 14703 29136 14654 29136 14704 29136 14704 29137 14654 29137 14655 29137 14704 29138 14655 29138 14705 29138 14705 29139 14655 29139 14656 29139 14705 29140 14656 29140 14706 29140 14706 29141 14656 29141 14657 29141 14706 29142 14657 29142 14707 29142 14707 29143 14657 29143 14658 29143 14707 29144 14658 29144 14708 29144 14708 29145 14658 29145 14659 29145 14708 29146 14659 29146 14709 29146 14709 29147 14659 29147 14660 29147 14709 29148 14660 29148 14710 29148 14710 29149 14660 29149 14661 29149 14710 29150 14661 29150 14711 29150 14711 29151 14661 29151 14662 29151 14711 29152 14662 29152 14712 29152 14712 29153 14662 29153 14663 29153 14712 29154 14663 29154 14713 29154 14713 29155 14663 29155 14664 29155 14713 29156 14664 29156 14714 29156 14714 29157 14664 29157 14665 29157 14714 29158 14665 29158 14715 29158 14715 29159 14665 29159 14666 29159 14715 29160 14666 29160 14716 29160 14716 29161 14666 29161 14667 29161 14716 29162 14667 29162 14717 29162 14717 29163 14667 29163 14668 29163 14717 29164 14668 29164 14718 29164 14718 29165 14668 29165 14669 29165 14718 29166 14669 29166 14719 29166 14719 29167 14669 29167 14670 29167 14719 29168 14670 29168 14720 29168 14720 29169 14670 29169 14671 29169 14720 29170 14671 29170 14721 29170 14721 29171 14671 29171 14672 29171 14721 29172 14672 29172 14722 29172 14722 29173 14672 29173 14673 29173 14722 29174 14673 29174 14723 29174 14723 29175 14673 29175 14674 29175 14723 29176 14674 29176 14724 29176 14724 29177 14674 29177 14675 29177 14724 29178 14675 29178 14725 29178 14725 29179 14675 29179 14676 29179 14725 29180 14676 29180 14726 29180 14726 29181 14676 29181 14677 29181 14726 29182 14677 29182 14727 29182 14727 29183 14677 29183 14678 29183 14727 29184 14678 29184 14728 29184 14728 29185 14678 29185 14679 29185 14728 29186 14679 29186 14729 29186 14729 29187 14679 29187 14680 29187 14729 29188 14680 29188 14730 29188 14730 29189 14680 29189 14681 29189 14730 29190 14681 29190 14731 29190 14731 29191 14681 29191 14682 29191 14731 29192 14682 29192 14732 29192 14732 29193 14682 29193 14683 29193 14732 29194 14683 29194 14733 29194 14733 29195 14683 29195 14684 29195 14733 29196 14684 29196 14734 29196 14734 29197 14684 29197 14685 29197 14734 29198 14685 29198 14735 29198 14735 29199 14685 29199 14686 29199 14735 29200 14686 29200 14736 29200 14736 29201 14686 29201 14687 29201 14736 29202 14687 29202 14737 29202 14737 29203 14687 29203 14688 29203 14737 29204 14688 29204 14738 29204 14738 29205 14688 29205 14689 29205 14738 29206 14689 29206 14739 29206 14739 29207 14689 29207 14690 29207 14739 29208 14690 29208 14740 29208 14740 29209 14690 29209 14691 29209 14740 29210 14691 29210 14741 29210 14741 29211 14691 29211 14692 29211 14741 29212 14692 29212 14742 29212 14742 29213 14692 29213 14693 29213 14742 29214 14693 29214 14694 29214 14694 29215 14693 29215 14645 29215 14743 29216 14694 29216 14744 29216 14744 29217 14694 29217 14695 29217 14744 29218 14695 29218 14745 29218 14745 29219 14695 29219 14696 29219 14745 29220 14696 29220 14746 29220 14746 29221 14696 29221 14697 29221 14746 29222 14697 29222 14747 29222 14747 29223 14697 29223 14698 29223 14747 29224 14698 29224 14748 29224 14748 29225 14698 29225 14699 29225 14748 29226 14699 29226 14749 29226 14749 29227 14699 29227 14700 29227 14749 29228 14700 29228 14750 29228 14750 29229 14700 29229 14701 29229 14750 29230 14701 29230 14751 29230 14751 29231 14701 29231 14702 29231 14751 29232 14702 29232 14752 29232 14752 29233 14702 29233 14703 29233 14752 29234 14703 29234 14753 29234 14753 29235 14703 29235 14704 29235 14753 29236 14704 29236 14754 29236 14754 29237 14704 29237 14705 29237 14754 29238 14705 29238 14755 29238 14755 29239 14705 29239 14706 29239 14755 29240 14706 29240 14756 29240 14756 29241 14706 29241 14707 29241 14756 29242 14707 29242 14757 29242 14757 29243 14707 29243 14708 29243 14757 29244 14708 29244 14758 29244 14758 29245 14708 29245 14709 29245 14758 29246 14709 29246 14759 29246 14759 29247 14709 29247 14710 29247 14759 29248 14710 29248 14760 29248 14760 29249 14710 29249 14711 29249 14760 29250 14711 29250 14761 29250 14761 29251 14711 29251 14712 29251 14761 29252 14712 29252 14762 29252 14762 29253 14712 29253 14713 29253 14762 29254 14713 29254 14763 29254 14763 29255 14713 29255 14714 29255 14763 29256 14714 29256 14764 29256 14764 29257 14714 29257 14715 29257 14764 29258 14715 29258 14765 29258 14765 29259 14715 29259 14716 29259 14765 29260 14716 29260 14766 29260 14766 29261 14716 29261 14717 29261 14766 29262 14717 29262 14767 29262 14767 29263 14717 29263 14718 29263 14767 29264 14718 29264 14768 29264 14768 29265 14718 29265 14719 29265 14768 29266 14719 29266 14769 29266 14769 29267 14719 29267 14720 29267 14769 29268 14720 29268 14770 29268 14770 29269 14720 29269 14721 29269 14770 29270 14721 29270 14771 29270 14771 29271 14721 29271 14722 29271 14771 29272 14722 29272 14772 29272 14772 29273 14722 29273 14723 29273 14772 29274 14723 29274 14773 29274 14773 29275 14723 29275 14724 29275 14773 29276 14724 29276 14774 29276 14774 29277 14724 29277 14725 29277 14774 29278 14725 29278 14775 29278 14775 29279 14725 29279 14726 29279 14775 29280 14726 29280 14776 29280 14776 29281 14726 29281 14727 29281 14776 29282 14727 29282 14777 29282 14777 29283 14727 29283 14728 29283 14777 29284 14728 29284 14778 29284 14778 29285 14728 29285 14729 29285 14778 29286 14729 29286 14779 29286 14779 29287 14729 29287 14730 29287 14779 29288 14730 29288 14780 29288 14780 29289 14730 29289 14731 29289 14780 29290 14731 29290 14781 29290 14781 29291 14731 29291 14732 29291 14781 29292 14732 29292 14782 29292 14782 29293 14732 29293 14733 29293 14782 29294 14733 29294 14783 29294 14783 29295 14733 29295 14734 29295 14783 29296 14734 29296 14784 29296 14784 29297 14734 29297 14735 29297 14784 29298 14735 29298 14785 29298 14785 29299 14735 29299 14736 29299 14785 29300 14736 29300 14786 29300 14786 29301 14736 29301 14737 29301 14786 29302 14737 29302 14787 29302 14787 29303 14737 29303 14738 29303 14787 29304 14738 29304 14788 29304 14788 29305 14738 29305 14739 29305 14788 29306 14739 29306 14789 29306 14789 29307 14739 29307 14740 29307 14789 29308 14740 29308 14790 29308 14790 29309 14740 29309 14741 29309 14790 29310 14741 29310 14791 29310 14791 29311 14741 29311 14742 29311 14791 29312 14742 29312 14743 29312 14743 29313 14742 29313 14694 29313 14792 29314 14743 29314 14793 29314 14793 29315 14743 29315 14744 29315 14793 29316 14744 29316 14794 29316 14794 29317 14744 29317 14745 29317 14794 29318 14745 29318 14795 29318 14795 29319 14745 29319 14746 29319 14795 29320 14746 29320 14796 29320 14796 29321 14746 29321 14747 29321 14796 29322 14747 29322 14797 29322 14797 29323 14747 29323 14748 29323 14797 29324 14748 29324 14798 29324 14798 29325 14748 29325 14749 29325 14798 29326 14749 29326 14799 29326 14799 29327 14749 29327 14750 29327 14799 29328 14750 29328 14800 29328 14800 29329 14750 29329 14751 29329 14800 29330 14751 29330 14801 29330 14801 29331 14751 29331 14752 29331 14801 29332 14752 29332 14802 29332 14802 29333 14752 29333 14753 29333 14802 29334 14753 29334 14803 29334 14803 29335 14753 29335 14754 29335 14803 29336 14754 29336 14804 29336 14804 29337 14754 29337 14755 29337 14804 29338 14755 29338 14805 29338 14805 29339 14755 29339 14756 29339 14805 29340 14756 29340 14806 29340 14806 29341 14756 29341 14757 29341 14806 29342 14757 29342 14807 29342 14807 29343 14757 29343 14758 29343 14807 29344 14758 29344 14808 29344 14808 29345 14758 29345 14759 29345 14808 29346 14759 29346 14809 29346 14809 29347 14759 29347 14760 29347 14809 29348 14760 29348 14810 29348 14810 29349 14760 29349 14761 29349 14810 29350 14761 29350 14811 29350 14811 29351 14761 29351 14762 29351 14811 29352 14762 29352 14812 29352 14812 29353 14762 29353 14763 29353 14812 29354 14763 29354 14813 29354 14813 29355 14763 29355 14764 29355 14813 29356 14764 29356 14814 29356 14814 29357 14764 29357 14765 29357 14814 29358 14765 29358 14815 29358 14815 29359 14765 29359 14766 29359 14815 29360 14766 29360 14816 29360 14816 29361 14766 29361 14767 29361 14816 29362 14767 29362 14817 29362 14817 29363 14767 29363 14768 29363 14817 29364 14768 29364 14818 29364 14818 29365 14768 29365 14769 29365 14818 29366 14769 29366 14819 29366 14819 29367 14769 29367 14770 29367 14819 29368 14770 29368 14820 29368 14820 29369 14770 29369 14771 29369 14820 29370 14771 29370 14821 29370 14821 29371 14771 29371 14772 29371 14821 29372 14772 29372 14822 29372 14822 29373 14772 29373 14773 29373 14822 29374 14773 29374 14823 29374 14823 29375 14773 29375 14774 29375 14823 29376 14774 29376 14824 29376 14824 29377 14774 29377 14775 29377 14824 29378 14775 29378 14825 29378 14825 29379 14775 29379 14776 29379 14825 29380 14776 29380 14826 29380 14826 29381 14776 29381 14777 29381 14826 29382 14777 29382 14827 29382 14827 29383 14777 29383 14778 29383 14827 29384 14778 29384 14828 29384 14828 29385 14778 29385 14779 29385 14828 29386 14779 29386 14829 29386 14829 29387 14779 29387 14780 29387 14829 29388 14780 29388 14830 29388 14830 29389 14780 29389 14781 29389 14830 29390 14781 29390 14831 29390 14831 29391 14781 29391 14782 29391 14831 29392 14782 29392 14832 29392 14832 29393 14782 29393 14783 29393 14832 29394 14783 29394 14833 29394 14833 29395 14783 29395 14784 29395 14833 29396 14784 29396 14834 29396 14834 29397 14784 29397 14785 29397 14834 29398 14785 29398 14835 29398 14835 29399 14785 29399 14786 29399 14835 29400 14786 29400 14836 29400 14836 29401 14786 29401 14787 29401 14836 29402 14787 29402 14837 29402 14837 29403 14787 29403 14788 29403 14837 29404 14788 29404 14838 29404 14838 29405 14788 29405 14789 29405 14838 29406 14789 29406 14839 29406 14839 29407 14789 29407 14790 29407 14839 29408 14790 29408 14840 29408 14840 29409 14790 29409 14791 29409 14840 29410 14791 29410 14792 29410 14792 29411 14791 29411 14743 29411 14841 29412 14792 29412 14842 29412 14842 29413 14792 29413 14793 29413 14842 29414 14793 29414 14843 29414 14843 29415 14793 29415 14794 29415 14843 29416 14794 29416 14844 29416 14844 29417 14794 29417 14795 29417 14844 29418 14795 29418 14845 29418 14845 29419 14795 29419 14796 29419 14845 29420 14796 29420 14846 29420 14846 29421 14796 29421 14797 29421 14846 29422 14797 29422 14847 29422 14847 29423 14797 29423 14798 29423 14847 29424 14798 29424 14848 29424 14848 29425 14798 29425 14799 29425 14848 29426 14799 29426 14849 29426 14849 29427 14799 29427 14800 29427 14849 29428 14800 29428 14850 29428 14850 29429 14800 29429 14801 29429 14850 29430 14801 29430 14851 29430 14851 29431 14801 29431 14802 29431 14851 29432 14802 29432 14852 29432 14852 29433 14802 29433 14803 29433 14852 29434 14803 29434 14853 29434 14853 29435 14803 29435 14804 29435 14853 29436 14804 29436 14854 29436 14854 29437 14804 29437 14805 29437 14854 29438 14805 29438 14855 29438 14855 29439 14805 29439 14806 29439 14855 29440 14806 29440 14856 29440 14856 29441 14806 29441 14807 29441 14856 29442 14807 29442 14857 29442 14857 29443 14807 29443 14808 29443 14857 29444 14808 29444 14858 29444 14858 29445 14808 29445 14809 29445 14858 29446 14809 29446 14859 29446 14859 29447 14809 29447 14810 29447 14859 29448 14810 29448 14860 29448 14860 29449 14810 29449 14811 29449 14860 29450 14811 29450 14861 29450 14861 29451 14811 29451 14812 29451 14861 29452 14812 29452 14862 29452 14862 29453 14812 29453 14813 29453 14862 29454 14813 29454 14863 29454 14863 29455 14813 29455 14814 29455 14863 29456 14814 29456 14864 29456 14864 29457 14814 29457 14815 29457 14864 29458 14815 29458 14865 29458 14865 29459 14815 29459 14816 29459 14865 29460 14816 29460 14866 29460 14866 29461 14816 29461 14817 29461 14866 29462 14817 29462 14867 29462 14867 29463 14817 29463 14818 29463 14867 29464 14818 29464 14868 29464 14868 29465 14818 29465 14819 29465 14868 29466 14819 29466 14869 29466 14869 29467 14819 29467 14820 29467 14869 29468 14820 29468 14870 29468 14870 29469 14820 29469 14821 29469 14870 29470 14821 29470 14871 29470 14871 29471 14821 29471 14822 29471 14871 29472 14822 29472 14872 29472 14872 29473 14822 29473 14823 29473 14872 29474 14823 29474 14873 29474 14873 29475 14823 29475 14824 29475 14873 29476 14824 29476 14874 29476 14874 29477 14824 29477 14825 29477 14874 29478 14825 29478 14875 29478 14875 29479 14825 29479 14826 29479 14875 29480 14826 29480 14876 29480 14876 29481 14826 29481 14827 29481 14876 29482 14827 29482 14877 29482 14877 29483 14827 29483 14828 29483 14877 29484 14828 29484 14878 29484 14878 29485 14828 29485 14829 29485 14878 29486 14829 29486 14879 29486 14879 29487 14829 29487 14830 29487 14879 29488 14830 29488 14880 29488 14880 29489 14830 29489 14831 29489 14880 29490 14831 29490 14881 29490 14881 29491 14831 29491 14832 29491 14881 29492 14832 29492 14882 29492 14882 29493 14832 29493 14833 29493 14882 29494 14833 29494 14883 29494 14883 29495 14833 29495 14834 29495 14883 29496 14834 29496 14884 29496 14884 29497 14834 29497 14835 29497 14884 29498 14835 29498 14885 29498 14885 29499 14835 29499 14836 29499 14885 29500 14836 29500 14886 29500 14886 29501 14836 29501 14837 29501 14886 29502 14837 29502 14887 29502 14887 29503 14837 29503 14838 29503 14887 29504 14838 29504 14888 29504 14888 29505 14838 29505 14839 29505 14888 29506 14839 29506 14889 29506 14889 29507 14839 29507 14840 29507 14889 29508 14840 29508 14841 29508 14841 29509 14840 29509 14792 29509 14506 29510 14841 29510 14513 29510 14513 29511 14841 29511 14842 29511 14513 29512 14842 29512 14511 29512 14511 29513 14842 29513 14843 29513 14511 29514 14843 29514 14517 29514 14517 29515 14843 29515 14844 29515 14517 29516 14844 29516 14519 29516 14519 29517 14844 29517 14845 29517 14519 29518 14845 29518 14522 29518 14522 29519 14845 29519 14846 29519 14522 29520 14846 29520 14524 29520 14524 29521 14846 29521 14847 29521 14524 29522 14847 29522 14528 29522 14528 29523 14847 29523 14848 29523 14528 29524 14848 29524 14526 29524 14526 29525 14848 29525 14849 29525 14526 29526 14849 29526 14533 29526 14533 29527 14849 29527 14850 29527 14533 29528 14850 29528 14531 29528 14531 29529 14850 29529 14851 29529 14531 29530 14851 29530 14536 29530 14536 29531 14851 29531 14852 29531 14536 29532 14852 29532 14539 29532 14539 29533 14852 29533 14853 29533 14539 29534 14853 29534 14544 29534 14544 29535 14853 29535 14854 29535 14544 29536 14854 29536 14414 29536 14414 29537 14854 29537 14855 29537 14414 29538 14855 29538 14415 29538 14415 29539 14855 29539 14856 29539 14415 29540 14856 29540 14418 29540 14418 29541 14856 29541 14857 29541 14418 29542 14857 29542 14416 29542 14416 29543 14857 29543 14858 29543 14416 29544 14858 29544 14421 29544 14421 29545 14858 29545 14859 29545 14421 29546 14859 29546 14424 29546 14424 29547 14859 29547 14860 29547 14424 29548 14860 29548 14431 29548 14431 29549 14860 29549 14861 29549 14431 29550 14861 29550 14429 29550 14429 29551 14861 29551 14862 29551 14429 29552 14862 29552 14435 29552 14435 29553 14862 29553 14863 29553 14435 29554 14863 29554 14437 29554 14437 29555 14863 29555 14864 29555 14437 29556 14864 29556 14440 29556 14440 29557 14864 29557 14865 29557 14440 29558 14865 29558 14442 29558 14442 29559 14865 29559 14866 29559 14442 29560 14866 29560 14445 29560 14445 29561 14866 29561 14867 29561 14445 29562 14867 29562 14448 29562 14448 29563 14867 29563 14868 29563 14448 29564 14868 29564 14451 29564 14451 29565 14868 29565 14869 29565 14451 29566 14869 29566 14453 29566 14453 29567 14869 29567 14870 29567 14453 29568 14870 29568 14456 29568 14456 29569 14870 29569 14871 29569 14456 29570 14871 29570 14459 29570 14459 29571 14871 29571 14872 29571 14459 29572 14872 29572 14462 29572 14462 29573 14872 29573 14873 29573 14462 29574 14873 29574 14464 29574 14464 29575 14873 29575 14874 29575 14464 29576 14874 29576 14467 29576 14467 29577 14874 29577 14875 29577 14467 29578 14875 29578 14470 29578 14470 29579 14875 29579 14876 29579 14470 29580 14876 29580 14472 29580 14472 29581 14876 29581 14877 29581 14472 29582 14877 29582 14476 29582 14476 29583 14877 29583 14878 29583 14476 29584 14878 29584 14474 29584 14474 29585 14878 29585 14879 29585 14474 29586 14879 29586 14481 29586 14481 29587 14879 29587 14880 29587 14481 29588 14880 29588 14479 29588 14479 29589 14880 29589 14881 29589 14479 29590 14881 29590 14484 29590 14484 29591 14881 29591 14882 29591 14484 29592 14882 29592 14487 29592 14487 29593 14882 29593 14883 29593 14487 29594 14883 29594 14492 29594 14492 29595 14883 29595 14884 29595 14492 29596 14884 29596 14490 29596 14490 29597 14884 29597 14885 29597 14490 29598 14885 29598 14495 29598 14495 29599 14885 29599 14886 29599 14495 29600 14886 29600 14498 29600 14498 29601 14886 29601 14887 29601 14498 29602 14887 29602 14503 29602 14503 29603 14887 29603 14888 29603 14503 29604 14888 29604 14501 29604 14501 29605 14888 29605 14889 29605 14501 29606 14889 29606 14506 29606 14506 29607 14889 29607 14841 29607 14351 29608 14420 29608 14352 29608 14352 29609 14420 29609 14419 29609 14352 29610 14419 29610 14353 29610 14353 29611 14419 29611 14417 29611 14353 29612 14417 29612 14354 29612 14354 29613 14417 29613 14423 29613 14354 29614 14423 29614 14355 29614 14355 29615 14423 29615 14422 29615 14355 29616 14422 29616 14356 29616 14356 29617 14422 29617 14426 29617 14356 29618 14426 29618 14357 29618 14426 29619 14425 29619 14357 29619 14357 29620 14425 29620 14433 29620 14357 29621 14433 29621 14358 29621 14358 29622 14433 29622 14432 29622 14358 29623 14432 29623 14359 29623 14359 29624 14432 29624 14360 29624 14432 29625 14430 29625 14360 29625 14360 29626 14430 29626 14428 29626 14360 29627 14428 29627 14361 29627 14361 29628 14428 29628 14427 29628 14361 29629 14427 29629 14363 29629 14363 29630 14427 29630 14434 29630 14363 29631 14434 29631 14362 29631 14362 29632 14434 29632 14436 29632 14362 29633 14436 29633 14291 29633 14291 29634 14436 29634 14438 29634 14291 29635 14438 29635 14292 29635 14292 29636 14438 29636 14439 29636 14292 29637 14439 29637 14293 29637 14439 29638 14441 29638 14293 29638 14293 29639 14441 29639 14443 29639 14293 29640 14443 29640 14294 29640 14294 29641 14443 29641 14444 29641 14294 29642 14444 29642 14295 29642 14295 29643 14444 29643 14446 29643 14295 29644 14446 29644 14296 29644 14296 29645 14446 29645 14447 29645 14296 29646 14447 29646 14297 29646 14297 29647 14447 29647 14449 29647 14297 29648 14449 29648 14298 29648 14298 29649 14449 29649 14450 29649 14298 29650 14450 29650 14299 29650 14450 29651 14452 29651 14299 29651 14299 29652 14452 29652 14454 29652 14299 29653 14454 29653 14300 29653 14300 29654 14454 29654 14455 29654 14300 29655 14455 29655 14301 29655 14301 29656 14455 29656 14457 29656 14301 29657 14457 29657 14302 29657 14302 29658 14457 29658 14458 29658 14302 29659 14458 29659 14303 29659 14303 29660 14458 29660 14460 29660 14303 29661 14460 29661 14304 29661 14304 29662 14460 29662 14461 29662 14304 29663 14461 29663 14305 29663 14461 29664 14463 29664 14305 29664 14305 29665 14463 29665 14465 29665 14305 29666 14465 29666 14306 29666 14306 29667 14465 29667 14466 29667 14306 29668 14466 29668 14307 29668 14307 29669 14466 29669 14468 29669 14307 29670 14468 29670 14308 29670 14308 29671 14468 29671 14469 29671 14308 29672 14469 29672 14309 29672 14469 29673 14471 29673 14309 29673 14309 29674 14471 29674 14473 29674 14309 29675 14473 29675 14310 29675 14310 29676 14473 29676 14478 29676 14310 29677 14478 29677 14311 29677 14311 29678 14478 29678 14477 29678 14311 29679 14477 29679 14312 29679 14312 29680 14477 29680 14475 29680 14312 29681 14475 29681 14313 29681 14313 29682 14475 29682 14483 29682 14313 29683 14483 29683 14314 29683 14314 29684 14483 29684 14482 29684 14314 29685 14482 29685 14315 29685 14493 29686 14321 29686 14494 29686 14494 29687 14321 29687 14320 29687 14494 29688 14320 29688 14488 29688 14482 29689 14480 29689 14315 29689 14315 29690 14480 29690 14486 29690 14315 29691 14486 29691 14316 29691 14316 29692 14486 29692 14485 29692 14316 29693 14485 29693 14317 29693 14317 29694 14485 29694 14489 29694 14317 29695 14489 29695 14318 29695 14318 29696 14489 29696 14488 29696 14318 29697 14488 29697 14319 29697 14319 29698 14488 29698 14320 29698 14491 29699 14323 29699 14493 29699 14493 29700 14323 29700 14322 29700 14493 29701 14322 29701 14321 29701 14491 29702 14497 29702 14323 29702 14323 29703 14497 29703 14496 29703 14323 29704 14496 29704 14324 29704 14324 29705 14496 29705 14500 29705 14324 29706 14500 29706 14325 29706 14500 29707 14499 29707 14325 29707 14325 29708 14499 29708 14505 29708 14325 29709 14505 29709 14328 29709 14328 29710 14505 29710 14504 29710 14328 29711 14504 29711 14327 29711 14327 29712 14504 29712 14326 29712 14504 29713 14502 29713 14326 29713 14326 29714 14502 29714 14508 29714 14326 29715 14508 29715 14329 29715 14329 29716 14508 29716 14507 29716 14329 29717 14507 29717 14330 29717 14330 29718 14507 29718 14515 29718 14330 29719 14515 29719 14331 29719 14515 29720 14514 29720 14331 29720 14331 29721 14514 29721 14512 29721 14331 29722 14512 29722 14332 29722 14332 29723 14512 29723 14510 29723 14332 29724 14510 29724 14333 29724 14333 29725 14510 29725 14509 29725 14333 29726 14509 29726 14334 29726 14334 29727 14509 29727 14516 29727 14334 29728 14516 29728 14335 29728 14516 29729 14518 29729 14335 29729 14335 29730 14518 29730 14520 29730 14335 29731 14520 29731 14336 29731 14336 29732 14520 29732 14521 29732 14336 29733 14521 29733 14337 29733 14337 29734 14521 29734 14338 29734 14521 29735 14523 29735 14338 29735 14338 29736 14523 29736 14525 29736 14338 29737 14525 29737 14339 29737 14339 29738 14525 29738 14530 29738 14339 29739 14530 29739 14340 29739 14340 29740 14530 29740 14529 29740 14340 29741 14529 29741 14341 29741 14529 29742 14527 29742 14341 29742 14341 29743 14527 29743 14535 29743 14341 29744 14535 29744 14342 29744 14342 29745 14535 29745 14534 29745 14342 29746 14534 29746 14343 29746 14343 29747 14534 29747 14344 29747 14534 29748 14532 29748 14344 29748 14344 29749 14532 29749 14538 29749 14344 29750 14538 29750 14345 29750 14345 29751 14538 29751 14537 29751 14345 29752 14537 29752 14346 29752 14346 29753 14537 29753 14541 29753 14346 29754 14541 29754 14347 29754 14541 29755 14540 29755 14347 29755 14347 29756 14540 29756 14546 29756 14347 29757 14546 29757 14348 29757 14348 29758 14546 29758 14545 29758 14348 29759 14545 29759 14349 29759 14349 29760 14545 29760 14350 29760 14545 29761 14543 29761 14350 29761 14350 29762 14543 29762 14542 29762 14350 29763 14542 29763 14351 29763 14351 29764 14542 29764 14413 29764 14351 29765 14413 29765 14420 29765 15747 31432 15748 31432 15749 31432 15750 31433 15751 31433 15752 31433 15753 31434 15754 31434 15755 31434 15752 31435 15751 31435 15749 31435 15749 31436 15751 31436 15756 31436 15749 31437 15756 31437 15747 31437 15748 31438 15757 31438 15749 31438 15749 31439 15757 31439 15758 31439 15749 31440 15758 31440 15759 31440 15759 31441 15760 31441 15749 31441 15749 31442 15760 31442 15761 31442 15749 31443 15761 31443 15762 31443 15762 31444 15763 31444 15749 31444 15749 31445 15763 31445 15764 31445 15749 31446 15764 31446 15765 31446 15766 31447 15767 31447 15768 31447 15768 31448 15767 31448 15769 31448 15768 31449 15769 31449 15770 31449 15771 31450 15772 31450 15773 31450 15765 31451 15764 31451 15768 31451 15768 31452 15764 31452 15774 31452 15768 31453 15774 31453 15766 31453 15771 31454 15773 31454 15775 31454 15770 31455 15776 31455 15768 31455 15768 31456 15776 31456 15773 31456 15768 31457 15773 31457 15777 31457 15777 31458 15773 31458 15772 31458 15750 31459 15752 31459 15755 31459 15755 31460 15752 31460 15778 31460 15755 31461 15778 31461 15753 31461 15779 31462 15780 31462 15781 31462 15775 31463 15773 31463 15781 31463 15781 31464 15773 31464 15782 31464 15781 31465 15782 31465 15779 31465 15903 31632 15782 31632 15904 31632 15904 31633 15782 31633 15773 31633 15904 31634 15773 31634 15905 31634 15905 31635 15773 31635 15776 31635 15905 31636 15776 31636 15906 31636 15906 31637 15776 31637 15770 31637 15906 31638 15770 31638 15907 31638 15907 31639 15770 31639 15769 31639 15907 31640 15769 31640 15908 31640 15908 31641 15769 31641 15767 31641 15908 31642 15767 31642 15909 31642 15909 31643 15767 31643 15766 31643 15909 31644 15766 31644 15910 31644 15910 31645 15766 31645 15774 31645 15910 31646 15774 31646 15911 31646 15911 31647 15774 31647 15764 31647 15911 31648 15764 31648 15912 31648 15912 31649 15764 31649 15763 31649 15912 31650 15763 31650 15913 31650 15913 31651 15763 31651 15762 31651 15913 31652 15762 31652 15914 31652 15914 31653 15762 31653 15761 31653 15914 31654 15761 31654 15915 31654 15915 31655 15761 31655 15760 31655 15915 31656 15760 31656 15916 31656 15916 31657 15760 31657 15759 31657 15916 31658 15759 31658 15917 31658 15917 31659 15759 31659 15758 31659 15917 31660 15758 31660 15918 31660 15918 31661 15758 31661 15757 31661 15918 31662 15757 31662 15919 31662 15919 31663 15757 31663 15748 31663 15919 31664 15748 31664 15920 31664 15920 31665 15748 31665 15747 31665 15920 31666 15747 31666 15921 31666 15921 31667 15747 31667 15756 31667 15921 31668 15756 31668 15922 31668 15922 31669 15756 31669 15751 31669 15922 31670 15751 31670 15923 31670 15923 31671 15751 31671 15750 31671 15923 31672 15750 31672 15924 31672 15924 31673 15750 31673 15755 31673 15924 31674 15755 31674 15925 31674 15925 31675 15755 31675 15754 31675 15925 31676 15754 31676 15926 31676 15926 31677 15754 31677 15753 31677 15926 31678 15753 31678 15927 31678 15927 31679 15753 31679 15778 31679 15927 31680 15778 31680 15928 31680 15928 31681 15778 31681 15752 31681 15928 31682 15752 31682 15929 31682 15929 31683 15752 31683 15749 31683 15929 31684 15749 31684 15930 31684 15930 31685 15749 31685 15765 31685 15930 31686 15765 31686 15931 31686 15931 31687 15765 31687 15768 31687 15931 31688 15768 31688 15932 31688 15932 31689 15768 31689 15777 31689 15932 31690 15777 31690 15933 31690 15933 31691 15777 31691 15772 31691 15933 31692 15772 31692 15934 31692 15934 31693 15772 31693 15771 31693 15934 31694 15771 31694 15935 31694 15935 31695 15771 31695 15775 31695 15935 31696 15775 31696 15936 31696 15936 31697 15775 31697 15781 31697 15936 31698 15781 31698 15937 31698 15937 31699 15781 31699 15780 31699 15937 31700 15780 31700 15938 31700 15938 31701 15780 31701 15779 31701 15938 31702 15779 31702 15903 31702 15903 31703 15779 31703 15782 31703 15988 31873 15989 31873 15990 31873 15990 31874 15989 31874 15991 31874 15990 31875 15991 31875 15992 31875 15992 31876 15991 31876 15993 31876 15992 31877 15993 31877 15994 31877 15994 31878 15993 31878 15995 31878 15995 31879 15993 31879 15996 31879 15995 31880 15996 31880 15997 31880 15997 31881 15996 31881 15998 31881 15997 31882 15998 31882 15999 31882 15999 31883 15998 31883 16000 31883 16000 31884 15998 31884 16001 31884 16000 31885 16001 31885 16002 31885 16002 31886 16001 31886 16003 31886 16003 31887 16001 31887 16004 31887 16003 31888 16004 31888 16005 31888 16005 31889 16004 31889 16006 31889 16006 31890 16004 31890 16007 31890 16006 31891 16007 31891 16008 31891 16008 31892 16007 31892 16009 31892 16008 31893 16009 31893 16010 31893 16010 31894 16009 31894 16011 31894 16011 31895 16009 31895 16012 31895 16011 31896 16012 31896 16013 31896 16013 31897 16012 31897 16014 31897 16014 31898 16012 31898 16015 31898 16014 31899 16015 31899 16016 31899 16016 31900 16015 31900 16017 31900 16016 31901 16017 31901 16018 31901 16018 31902 16017 31902 16019 31902 16018 31903 16019 31903 16020 31903 16020 31904 16019 31904 16021 31904 16021 31905 16019 31905 16022 31905 16021 31906 16022 31906 16023 31906 16023 31907 16022 31907 16024 31907 16024 31908 16022 31908 16025 31908 16024 31909 16025 31909 16026 31909 16026 31910 16025 31910 16027 31910 16026 31911 16027 31911 16028 31911 16029 31912 16030 31912 16031 31912 16031 31913 16030 31913 16032 31913 16031 31914 16032 31914 16027 31914 16027 31915 16032 31915 16033 31915 16027 31916 16033 31916 16028 31916 16034 31917 16035 31917 16036 31917 16036 31918 16035 31918 16037 31918 16036 31919 16037 31919 16029 31919 16029 31920 16037 31920 16038 31920 16029 31921 16038 31921 16030 31921 16039 31922 16040 31922 16034 31922 16034 31923 16040 31923 16041 31923 16034 31924 16041 31924 16035 31924 16042 31925 16043 31925 16039 31925 16039 31926 16043 31926 16044 31926 16039 31927 16044 31927 16040 31927 16045 31928 16046 31928 16047 31928 16047 31929 16046 31929 16048 31929 16047 31930 16048 31930 16042 31930 16042 31931 16048 31931 16049 31931 16042 31932 16049 31932 16043 31932 16050 31933 16051 31933 16045 31933 16045 31934 16051 31934 16052 31934 16045 31935 16052 31935 16046 31935 16053 31936 16054 31936 16050 31936 16050 31937 16054 31937 16055 31937 16050 31938 16055 31938 16051 31938 16056 31939 16057 31939 16058 31939 16058 31940 16057 31940 16059 31940 16058 31941 16059 31941 16053 31941 16053 31942 16059 31942 16060 31942 16053 31943 16060 31943 16054 31943 16061 31944 16062 31944 16056 31944 16056 31945 16062 31945 16063 31945 16056 31946 16063 31946 16057 31946 16064 31947 16065 31947 16066 31947 16066 31948 16065 31948 16067 31948 16066 31949 16067 31949 16068 31949 16068 31950 16067 31950 16069 31950 16068 31951 16069 31951 16061 31951 16061 31952 16069 31952 16070 31952 16061 31953 16070 31953 16062 31953 16064 31954 16066 31954 16071 31954 16071 31955 16066 31955 16072 31955 16071 31956 16072 31956 16073 31956 16073 31957 16072 31957 16074 31957 16073 31958 16074 31958 16075 31958 16075 31959 16074 31959 16076 31959 16076 31960 16074 31960 16077 31960 16076 31961 16077 31961 16078 31961 16078 31962 16077 31962 16079 31962 16078 31963 16079 31963 16080 31963 16081 31964 16082 31964 16083 31964 16083 31965 16082 31965 16084 31965 16083 31966 16084 31966 16079 31966 16079 31967 16084 31967 16085 31967 16079 31968 16085 31968 16080 31968 16086 31969 16087 31969 16088 31969 16088 31970 16087 31970 16089 31970 16088 31971 16089 31971 16081 31971 16081 31972 16089 31972 16090 31972 16081 31973 16090 31973 16082 31973 16091 31974 16092 31974 16086 31974 16086 31975 16092 31975 16093 31975 16086 31976 16093 31976 16087 31976 16094 31977 16095 31977 16091 31977 16091 31978 16095 31978 16096 31978 16091 31979 16096 31979 16092 31979 16097 31980 16098 31980 16099 31980 16099 31981 16098 31981 16100 31981 16099 31982 16100 31982 16094 31982 16094 31983 16100 31983 16101 31983 16094 31984 16101 31984 16095 31984 16102 31985 16103 31985 16097 31985 16097 31986 16103 31986 16104 31986 16097 31987 16104 31987 16098 31987 16105 31988 16106 31988 16107 31988 16107 31989 16106 31989 16108 31989 16107 31990 16108 31990 16102 31990 16102 31991 16108 31991 16109 31991 16102 31992 16109 31992 16103 31992 16110 31993 16111 31993 16105 31993 16105 31994 16111 31994 16112 31994 16105 31995 16112 31995 16106 31995 16113 31996 16114 31996 16110 31996 16110 31997 16114 31997 16115 31997 16110 31998 16115 31998 16111 31998 15988 31999 16116 31999 15989 31999 15989 32000 16116 32000 16117 32000 15989 32001 16117 32001 16118 32001 16118 32002 16117 32002 16119 32002 16118 32003 16119 32003 16113 32003 16113 32004 16119 32004 16120 32004 16113 32005 16120 32005 16114 32005 16219 32202 16170 32202 16220 32202 16220 32203 16170 32203 16171 32203 16220 32204 16171 32204 16221 32204 16221 32205 16171 32205 16172 32205 16221 32206 16172 32206 16222 32206 16222 32207 16172 32207 16173 32207 16222 32208 16173 32208 16223 32208 16223 32209 16173 32209 16174 32209 16223 32210 16174 32210 16224 32210 16224 32211 16174 32211 16175 32211 16224 32212 16175 32212 16225 32212 16225 32213 16175 32213 16176 32213 16225 32214 16176 32214 16226 32214 16226 32215 16176 32215 16177 32215 16226 32216 16177 32216 16227 32216 16227 32217 16177 32217 16178 32217 16227 32218 16178 32218 16228 32218 16228 32219 16178 32219 16179 32219 16228 32220 16179 32220 16229 32220 16229 32221 16179 32221 16180 32221 16229 32222 16180 32222 16230 32222 16230 32223 16180 32223 16181 32223 16230 32224 16181 32224 16231 32224 16231 32225 16181 32225 16182 32225 16231 32226 16182 32226 16232 32226 16232 32227 16182 32227 16183 32227 16232 32228 16183 32228 16233 32228 16233 32229 16183 32229 16184 32229 16233 32230 16184 32230 16234 32230 16234 32231 16184 32231 16185 32231 16234 32232 16185 32232 16235 32232 16235 32233 16185 32233 16186 32233 16235 32234 16186 32234 16236 32234 16236 32235 16186 32235 16187 32235 16236 32236 16187 32236 16237 32236 16237 32237 16187 32237 16188 32237 16237 32238 16188 32238 16238 32238 16238 32239 16188 32239 16189 32239 16238 32240 16189 32240 16239 32240 16239 32241 16189 32241 16190 32241 16239 32242 16190 32242 16240 32242 16240 32243 16190 32243 16191 32243 16240 32244 16191 32244 16241 32244 16241 32245 16191 32245 16192 32245 16241 32246 16192 32246 16242 32246 16242 32247 16192 32247 16193 32247 16242 32248 16193 32248 16243 32248 16243 32249 16193 32249 16194 32249 16243 32250 16194 32250 16244 32250 16244 32251 16194 32251 16195 32251 16244 32252 16195 32252 16245 32252 16245 32253 16195 32253 16196 32253 16245 32254 16196 32254 16246 32254 16246 32255 16196 32255 16197 32255 16246 32256 16197 32256 16247 32256 16247 32257 16197 32257 16198 32257 16247 32258 16198 32258 16248 32258 16248 32259 16198 32259 16199 32259 16248 32260 16199 32260 16249 32260 16249 32261 16199 32261 16200 32261 16249 32262 16200 32262 16250 32262 16250 32263 16200 32263 16201 32263 16250 32264 16201 32264 16251 32264 16251 32265 16201 32265 16202 32265 16251 32266 16202 32266 16252 32266 16252 32267 16202 32267 16203 32267 16252 32268 16203 32268 16253 32268 16253 32269 16203 32269 16204 32269 16253 32270 16204 32270 16254 32270 16254 32271 16204 32271 16205 32271 16254 32272 16205 32272 16255 32272 16255 32273 16205 32273 16206 32273 16255 32274 16206 32274 16256 32274 16256 32275 16206 32275 16207 32275 16256 32276 16207 32276 16257 32276 16257 32277 16207 32277 16208 32277 16257 32278 16208 32278 16258 32278 16258 32279 16208 32279 16209 32279 16258 32280 16209 32280 16259 32280 16259 32281 16209 32281 16210 32281 16259 32282 16210 32282 16260 32282 16260 32283 16210 32283 16211 32283 16260 32284 16211 32284 16261 32284 16261 32285 16211 32285 16212 32285 16261 32286 16212 32286 16262 32286 16262 32287 16212 32287 16213 32287 16262 32288 16213 32288 16263 32288 16263 32289 16213 32289 16214 32289 16263 32290 16214 32290 16264 32290 16264 32291 16214 32291 16215 32291 16264 32292 16215 32292 16265 32292 16265 32293 16215 32293 16216 32293 16265 32294 16216 32294 16266 32294 16266 32295 16216 32295 16217 32295 16266 32296 16217 32296 16267 32296 16267 32297 16217 32297 16218 32297 16267 32298 16218 32298 16219 32298 16219 32299 16218 32299 16170 32299 16268 32300 16219 32300 16269 32300 16269 32301 16219 32301 16220 32301 16269 32302 16220 32302 16270 32302 16270 32303 16220 32303 16221 32303 16270 32304 16221 32304 16271 32304 16271 32305 16221 32305 16222 32305 16271 32306 16222 32306 16272 32306 16272 32307 16222 32307 16223 32307 16272 32308 16223 32308 16273 32308 16273 32309 16223 32309 16224 32309 16273 32310 16224 32310 16274 32310 16274 32311 16224 32311 16225 32311 16274 32312 16225 32312 16275 32312 16275 32313 16225 32313 16226 32313 16275 32314 16226 32314 16276 32314 16276 32315 16226 32315 16227 32315 16276 32316 16227 32316 16277 32316 16277 32317 16227 32317 16228 32317 16277 32318 16228 32318 16278 32318 16278 32319 16228 32319 16229 32319 16278 32320 16229 32320 16279 32320 16279 32321 16229 32321 16230 32321 16279 32322 16230 32322 16280 32322 16280 32323 16230 32323 16231 32323 16280 32324 16231 32324 16281 32324 16281 32325 16231 32325 16232 32325 16281 32326 16232 32326 16282 32326 16282 32327 16232 32327 16233 32327 16282 32328 16233 32328 16283 32328 16283 32329 16233 32329 16234 32329 16283 32330 16234 32330 16284 32330 16284 32331 16234 32331 16235 32331 16284 32332 16235 32332 16285 32332 16285 32333 16235 32333 16236 32333 16285 32334 16236 32334 16286 32334 16286 32335 16236 32335 16237 32335 16286 32336 16237 32336 16287 32336 16287 32337 16237 32337 16238 32337 16287 32338 16238 32338 16288 32338 16288 32339 16238 32339 16239 32339 16288 32340 16239 32340 16289 32340 16289 32341 16239 32341 16240 32341 16289 32342 16240 32342 16290 32342 16290 32343 16240 32343 16241 32343 16290 32344 16241 32344 16291 32344 16291 32345 16241 32345 16242 32345 16291 32346 16242 32346 16292 32346 16292 32347 16242 32347 16243 32347 16292 32348 16243 32348 16293 32348 16293 32349 16243 32349 16244 32349 16293 32350 16244 32350 16294 32350 16294 32351 16244 32351 16245 32351 16294 32352 16245 32352 16295 32352 16295 32353 16245 32353 16246 32353 16295 32354 16246 32354 16296 32354 16296 32355 16246 32355 16247 32355 16296 32356 16247 32356 16297 32356 16297 32357 16247 32357 16248 32357 16297 32358 16248 32358 16298 32358 16298 32359 16248 32359 16249 32359 16298 32360 16249 32360 16299 32360 16299 32361 16249 32361 16250 32361 16299 32362 16250 32362 16300 32362 16300 32363 16250 32363 16251 32363 16300 32364 16251 32364 16301 32364 16301 32365 16251 32365 16252 32365 16301 32366 16252 32366 16302 32366 16302 32367 16252 32367 16253 32367 16302 32368 16253 32368 16303 32368 16303 32369 16253 32369 16254 32369 16303 32370 16254 32370 16304 32370 16304 32371 16254 32371 16255 32371 16304 32372 16255 32372 16305 32372 16305 32373 16255 32373 16256 32373 16305 32374 16256 32374 16306 32374 16306 32375 16256 32375 16257 32375 16306 32376 16257 32376 16307 32376 16307 32377 16257 32377 16258 32377 16307 32378 16258 32378 16308 32378 16308 32379 16258 32379 16259 32379 16308 32380 16259 32380 16309 32380 16309 32381 16259 32381 16260 32381 16309 32382 16260 32382 16310 32382 16310 32383 16260 32383 16261 32383 16310 32384 16261 32384 16311 32384 16311 32385 16261 32385 16262 32385 16311 32386 16262 32386 16312 32386 16312 32387 16262 32387 16263 32387 16312 32388 16263 32388 16313 32388 16313 32389 16263 32389 16264 32389 16313 32390 16264 32390 16314 32390 16314 32391 16264 32391 16265 32391 16314 32392 16265 32392 16315 32392 16315 32393 16265 32393 16266 32393 16315 32394 16266 32394 16316 32394 16316 32395 16266 32395 16267 32395 16316 32396 16267 32396 16268 32396 16268 32397 16267 32397 16219 32397 16317 32398 16268 32398 16318 32398 16318 32399 16268 32399 16269 32399 16318 32400 16269 32400 16319 32400 16319 32401 16269 32401 16270 32401 16319 32402 16270 32402 16320 32402 16320 32403 16270 32403 16271 32403 16320 32404 16271 32404 16321 32404 16321 32405 16271 32405 16272 32405 16321 32406 16272 32406 16322 32406 16322 32407 16272 32407 16273 32407 16322 32408 16273 32408 16323 32408 16323 32409 16273 32409 16274 32409 16323 32410 16274 32410 16324 32410 16324 32411 16274 32411 16275 32411 16324 32412 16275 32412 16325 32412 16325 32413 16275 32413 16276 32413 16325 32414 16276 32414 16326 32414 16326 32415 16276 32415 16277 32415 16326 32416 16277 32416 16327 32416 16327 32417 16277 32417 16278 32417 16327 32418 16278 32418 16328 32418 16328 32419 16278 32419 16279 32419 16328 32420 16279 32420 16329 32420 16329 32421 16279 32421 16280 32421 16329 32422 16280 32422 16330 32422 16330 32423 16280 32423 16281 32423 16330 32424 16281 32424 16331 32424 16331 32425 16281 32425 16282 32425 16331 32426 16282 32426 16332 32426 16332 32427 16282 32427 16283 32427 16332 32428 16283 32428 16333 32428 16333 32429 16283 32429 16284 32429 16333 32430 16284 32430 16334 32430 16334 32431 16284 32431 16285 32431 16334 32432 16285 32432 16335 32432 16335 32433 16285 32433 16286 32433 16335 32434 16286 32434 16336 32434 16336 32435 16286 32435 16287 32435 16336 32436 16287 32436 16337 32436 16337 32437 16287 32437 16288 32437 16337 32438 16288 32438 16338 32438 16338 32439 16288 32439 16289 32439 16338 32440 16289 32440 16339 32440 16339 32441 16289 32441 16290 32441 16339 32442 16290 32442 16340 32442 16340 32443 16290 32443 16291 32443 16340 32444 16291 32444 16341 32444 16341 32445 16291 32445 16292 32445 16341 32446 16292 32446 16342 32446 16342 32447 16292 32447 16293 32447 16342 32448 16293 32448 16343 32448 16343 32449 16293 32449 16294 32449 16343 32450 16294 32450 16344 32450 16344 32451 16294 32451 16295 32451 16344 32452 16295 32452 16345 32452 16345 32453 16295 32453 16296 32453 16345 32454 16296 32454 16346 32454 16346 32455 16296 32455 16297 32455 16346 32456 16297 32456 16347 32456 16347 32457 16297 32457 16298 32457 16347 32458 16298 32458 16348 32458 16348 32459 16298 32459 16299 32459 16348 32460 16299 32460 16349 32460 16349 32461 16299 32461 16300 32461 16349 32462 16300 32462 16350 32462 16350 32463 16300 32463 16301 32463 16350 32464 16301 32464 16351 32464 16351 32465 16301 32465 16302 32465 16351 32466 16302 32466 16352 32466 16352 32467 16302 32467 16303 32467 16352 32468 16303 32468 16353 32468 16353 32469 16303 32469 16304 32469 16353 32470 16304 32470 16354 32470 16354 32471 16304 32471 16305 32471 16354 32472 16305 32472 16355 32472 16355 32473 16305 32473 16306 32473 16355 32474 16306 32474 16356 32474 16356 32475 16306 32475 16307 32475 16356 32476 16307 32476 16357 32476 16357 32477 16307 32477 16308 32477 16357 32478 16308 32478 16358 32478 16358 32479 16308 32479 16309 32479 16358 32480 16309 32480 16359 32480 16359 32481 16309 32481 16310 32481 16359 32482 16310 32482 16360 32482 16360 32483 16310 32483 16311 32483 16360 32484 16311 32484 16361 32484 16361 32485 16311 32485 16312 32485 16361 32486 16312 32486 16362 32486 16362 32487 16312 32487 16313 32487 16362 32488 16313 32488 16363 32488 16363 32489 16313 32489 16314 32489 16363 32490 16314 32490 16364 32490 16364 32491 16314 32491 16315 32491 16364 32492 16315 32492 16365 32492 16365 32493 16315 32493 16316 32493 16365 32494 16316 32494 16317 32494 16317 32495 16316 32495 16268 32495 16366 32496 16317 32496 16367 32496 16367 32497 16317 32497 16318 32497 16367 32498 16318 32498 16368 32498 16368 32499 16318 32499 16319 32499 16368 32500 16319 32500 16369 32500 16369 32501 16319 32501 16320 32501 16369 32502 16320 32502 16370 32502 16370 32503 16320 32503 16321 32503 16370 32504 16321 32504 16371 32504 16371 32505 16321 32505 16322 32505 16371 32506 16322 32506 16372 32506 16372 32507 16322 32507 16323 32507 16372 32508 16323 32508 16373 32508 16373 32509 16323 32509 16324 32509 16373 32510 16324 32510 16374 32510 16374 32511 16324 32511 16325 32511 16374 32512 16325 32512 16375 32512 16375 32513 16325 32513 16326 32513 16375 32514 16326 32514 16376 32514 16376 32515 16326 32515 16327 32515 16376 32516 16327 32516 16377 32516 16377 32517 16327 32517 16328 32517 16377 32518 16328 32518 16378 32518 16378 32519 16328 32519 16329 32519 16378 32520 16329 32520 16379 32520 16379 32521 16329 32521 16330 32521 16379 32522 16330 32522 16380 32522 16380 32523 16330 32523 16331 32523 16380 32524 16331 32524 16381 32524 16381 32525 16331 32525 16332 32525 16381 32526 16332 32526 16382 32526 16382 32527 16332 32527 16333 32527 16382 32528 16333 32528 16383 32528 16383 32529 16333 32529 16334 32529 16383 32530 16334 32530 16384 32530 16384 32531 16334 32531 16335 32531 16384 32532 16335 32532 16385 32532 16385 32533 16335 32533 16336 32533 16385 32534 16336 32534 16386 32534 16386 32535 16336 32535 16337 32535 16386 32536 16337 32536 16387 32536 16387 32537 16337 32537 16338 32537 16387 32538 16338 32538 16388 32538 16388 32539 16338 32539 16339 32539 16388 32540 16339 32540 16389 32540 16389 32541 16339 32541 16340 32541 16389 32542 16340 32542 16390 32542 16390 32543 16340 32543 16341 32543 16390 32544 16341 32544 16391 32544 16391 32545 16341 32545 16342 32545 16391 32546 16342 32546 16392 32546 16392 32547 16342 32547 16343 32547 16392 32548 16343 32548 16393 32548 16393 32549 16343 32549 16344 32549 16393 32550 16344 32550 16394 32550 16394 32551 16344 32551 16345 32551 16394 32552 16345 32552 16395 32552 16395 32553 16345 32553 16346 32553 16395 32554 16346 32554 16396 32554 16396 32555 16346 32555 16347 32555 16396 32556 16347 32556 16397 32556 16397 32557 16347 32557 16348 32557 16397 32558 16348 32558 16398 32558 16398 32559 16348 32559 16349 32559 16398 32560 16349 32560 16399 32560 16399 32561 16349 32561 16350 32561 16399 32562 16350 32562 16400 32562 16400 32563 16350 32563 16351 32563 16400 32564 16351 32564 16401 32564 16401 32565 16351 32565 16352 32565 16401 32566 16352 32566 16402 32566 16402 32567 16352 32567 16353 32567 16402 32568 16353 32568 16403 32568 16403 32569 16353 32569 16354 32569 16403 32570 16354 32570 16404 32570 16404 32571 16354 32571 16355 32571 16404 32572 16355 32572 16405 32572 16405 32573 16355 32573 16356 32573 16405 32574 16356 32574 16406 32574 16406 32575 16356 32575 16357 32575 16406 32576 16357 32576 16407 32576 16407 32577 16357 32577 16358 32577 16407 32578 16358 32578 16408 32578 16408 32579 16358 32579 16359 32579 16408 32580 16359 32580 16409 32580 16409 32581 16359 32581 16360 32581 16409 32582 16360 32582 16410 32582 16410 32583 16360 32583 16361 32583 16410 32584 16361 32584 16411 32584 16411 32585 16361 32585 16362 32585 16411 32586 16362 32586 16412 32586 16412 32587 16362 32587 16363 32587 16412 32588 16363 32588 16413 32588 16413 32589 16363 32589 16364 32589 16413 32590 16364 32590 16414 32590 16414 32591 16364 32591 16365 32591 16414 32592 16365 32592 16366 32592 16366 32593 16365 32593 16317 32593 16415 32594 16366 32594 16416 32594 16416 32595 16366 32595 16367 32595 16416 32596 16367 32596 16417 32596 16417 32597 16367 32597 16368 32597 16417 32598 16368 32598 16418 32598 16418 32599 16368 32599 16369 32599 16418 32600 16369 32600 16419 32600 16419 32601 16369 32601 16370 32601 16419 32602 16370 32602 16420 32602 16420 32603 16370 32603 16371 32603 16420 32604 16371 32604 16421 32604 16421 32605 16371 32605 16372 32605 16421 32606 16372 32606 16422 32606 16422 32607 16372 32607 16373 32607 16422 32608 16373 32608 16423 32608 16423 32609 16373 32609 16374 32609 16423 32610 16374 32610 16424 32610 16424 32611 16374 32611 16375 32611 16424 32612 16375 32612 16425 32612 16425 32613 16375 32613 16376 32613 16425 32614 16376 32614 16426 32614 16426 32615 16376 32615 16377 32615 16426 32616 16377 32616 16427 32616 16427 32617 16377 32617 16378 32617 16427 32618 16378 32618 16428 32618 16428 32619 16378 32619 16379 32619 16428 32620 16379 32620 16429 32620 16429 32621 16379 32621 16380 32621 16429 32622 16380 32622 16430 32622 16430 32623 16380 32623 16381 32623 16430 32624 16381 32624 16431 32624 16431 32625 16381 32625 16382 32625 16431 32626 16382 32626 16432 32626 16432 32627 16382 32627 16383 32627 16432 32628 16383 32628 16433 32628 16433 32629 16383 32629 16384 32629 16433 32630 16384 32630 16434 32630 16434 32631 16384 32631 16385 32631 16434 32632 16385 32632 16435 32632 16435 32633 16385 32633 16386 32633 16435 32634 16386 32634 16436 32634 16436 32635 16386 32635 16387 32635 16436 32636 16387 32636 16437 32636 16437 32637 16387 32637 16388 32637 16437 32638 16388 32638 16438 32638 16438 32639 16388 32639 16389 32639 16438 32640 16389 32640 16439 32640 16439 32641 16389 32641 16390 32641 16439 32642 16390 32642 16440 32642 16440 32643 16390 32643 16391 32643 16440 32644 16391 32644 16441 32644 16441 32645 16391 32645 16392 32645 16441 32646 16392 32646 16442 32646 16442 32647 16392 32647 16393 32647 16442 32648 16393 32648 16443 32648 16443 32649 16393 32649 16394 32649 16443 32650 16394 32650 16444 32650 16444 32651 16394 32651 16395 32651 16444 32652 16395 32652 16445 32652 16445 32653 16395 32653 16396 32653 16445 32654 16396 32654 16446 32654 16446 32655 16396 32655 16397 32655 16446 32656 16397 32656 16447 32656 16447 32657 16397 32657 16398 32657 16447 32658 16398 32658 16448 32658 16448 32659 16398 32659 16399 32659 16448 32660 16399 32660 16449 32660 16449 32661 16399 32661 16400 32661 16449 32662 16400 32662 16450 32662 16450 32663 16400 32663 16401 32663 16450 32664 16401 32664 16451 32664 16451 32665 16401 32665 16402 32665 16451 32666 16402 32666 16452 32666 16452 32667 16402 32667 16403 32667 16452 32668 16403 32668 16453 32668 16453 32669 16403 32669 16404 32669 16453 32670 16404 32670 16454 32670 16454 32671 16404 32671 16405 32671 16454 32672 16405 32672 16455 32672 16455 32673 16405 32673 16406 32673 16455 32674 16406 32674 16456 32674 16456 32675 16406 32675 16407 32675 16456 32676 16407 32676 16457 32676 16457 32677 16407 32677 16408 32677 16457 32678 16408 32678 16458 32678 16458 32679 16408 32679 16409 32679 16458 32680 16409 32680 16459 32680 16459 32681 16409 32681 16410 32681 16459 32682 16410 32682 16460 32682 16460 32683 16410 32683 16411 32683 16460 32684 16411 32684 16461 32684 16461 32685 16411 32685 16412 32685 16461 32686 16412 32686 16462 32686 16462 32687 16412 32687 16413 32687 16462 32688 16413 32688 16463 32688 16463 32689 16413 32689 16414 32689 16463 32690 16414 32690 16415 32690 16415 32691 16414 32691 16366 32691 16019 32692 16415 32692 16022 32692 16022 32693 16415 32693 16416 32693 16022 32694 16416 32694 16025 32694 16025 32695 16416 32695 16417 32695 16025 32696 16417 32696 16027 32696 16027 32697 16417 32697 16418 32697 16027 32698 16418 32698 16031 32698 16031 32699 16418 32699 16419 32699 16031 32700 16419 32700 16029 32700 16029 32701 16419 32701 16420 32701 16029 32702 16420 32702 16036 32702 16036 32703 16420 32703 16421 32703 16036 32704 16421 32704 16034 32704 16034 32705 16421 32705 16422 32705 16034 32706 16422 32706 16039 32706 16039 32707 16422 32707 16423 32707 16039 32708 16423 32708 16042 32708 16042 32709 16423 32709 16424 32709 16042 32710 16424 32710 16047 32710 16047 32711 16424 32711 16425 32711 16047 32712 16425 32712 16045 32712 16045 32713 16425 32713 16426 32713 16045 32714 16426 32714 16050 32714 16050 32715 16426 32715 16427 32715 16050 32716 16427 32716 16053 32716 16053 32717 16427 32717 16428 32717 16053 32718 16428 32718 16058 32718 16058 32719 16428 32719 16429 32719 16058 32720 16429 32720 16056 32720 16056 32721 16429 32721 16430 32721 16056 32722 16430 32722 16061 32722 16061 32723 16430 32723 16431 32723 16061 32724 16431 32724 16068 32724 16068 32725 16431 32725 16432 32725 16068 32726 16432 32726 16066 32726 16066 32727 16432 32727 16433 32727 16066 32728 16433 32728 16072 32728 16072 32729 16433 32729 16434 32729 16072 32730 16434 32730 16074 32730 16074 32731 16434 32731 16435 32731 16074 32732 16435 32732 16077 32732 16077 32733 16435 32733 16436 32733 16077 32734 16436 32734 16079 32734 16079 32735 16436 32735 16437 32735 16079 32736 16437 32736 16083 32736 16083 32737 16437 32737 16438 32737 16083 32738 16438 32738 16081 32738 16081 32739 16438 32739 16439 32739 16081 32740 16439 32740 16088 32740 16088 32741 16439 32741 16440 32741 16088 32742 16440 32742 16086 32742 16086 32743 16440 32743 16441 32743 16086 32744 16441 32744 16091 32744 16091 32745 16441 32745 16442 32745 16091 32746 16442 32746 16094 32746 16094 32747 16442 32747 16443 32747 16094 32748 16443 32748 16099 32748 16099 32749 16443 32749 16444 32749 16099 32750 16444 32750 16097 32750 16097 32751 16444 32751 16445 32751 16097 32752 16445 32752 16102 32752 16102 32753 16445 32753 16446 32753 16102 32754 16446 32754 16107 32754 16107 32755 16446 32755 16447 32755 16107 32756 16447 32756 16105 32756 16105 32757 16447 32757 16448 32757 16105 32758 16448 32758 16110 32758 16110 32759 16448 32759 16449 32759 16110 32760 16449 32760 16113 32760 16113 32761 16449 32761 16450 32761 16113 32762 16450 32762 16118 32762 16118 32763 16450 32763 16451 32763 16118 32764 16451 32764 15989 32764 15989 32765 16451 32765 16452 32765 15989 32766 16452 32766 15991 32766 15991 32767 16452 32767 16453 32767 15991 32768 16453 32768 15993 32768 15993 32769 16453 32769 16454 32769 15993 32770 16454 32770 15996 32770 15996 32771 16454 32771 16455 32771 15996 32772 16455 32772 15998 32772 15998 32773 16455 32773 16456 32773 15998 32774 16456 32774 16001 32774 16001 32775 16456 32775 16457 32775 16001 32776 16457 32776 16004 32776 16004 32777 16457 32777 16458 32777 16004 32778 16458 32778 16007 32778 16007 32779 16458 32779 16459 32779 16007 32780 16459 32780 16009 32780 16009 32781 16459 32781 16460 32781 16009 32782 16460 32782 16012 32782 16012 32783 16460 32783 16461 32783 16012 32784 16461 32784 16015 32784 16015 32785 16461 32785 16462 32785 16015 32786 16462 32786 16017 32786 16017 32787 16462 32787 16463 32787 16017 32788 16463 32788 16019 32788 16019 32789 16463 32789 16415 32789 16116 32790 15988 32790 15928 32790 15928 32791 15988 32791 15990 32791 15928 32792 15990 32792 15927 32792 15990 32793 15992 32793 15927 32793 15927 32794 15992 32794 15994 32794 15927 32795 15994 32795 15926 32795 15926 32796 15994 32796 15995 32796 15926 32797 15995 32797 15925 32797 15925 32798 15995 32798 15997 32798 15925 32799 15997 32799 15999 32799 15999 32800 16000 32800 15925 32800 15925 32801 16000 32801 16002 32801 15925 32802 16002 32802 15924 32802 16002 32803 16003 32803 15924 32803 15924 32804 16003 32804 16005 32804 15924 32805 16005 32805 15923 32805 15923 32806 16005 32806 16006 32806 15923 32807 16006 32807 15922 32807 15922 32808 16006 32808 16008 32808 15922 32809 16008 32809 16010 32809 16010 32810 16011 32810 15922 32810 15922 32811 16011 32811 16013 32811 15922 32812 16013 32812 15921 32812 16013 32813 16014 32813 15921 32813 15921 32814 16014 32814 16016 32814 15921 32815 16016 32815 15920 32815 16016 32816 16018 32816 15920 32816 15920 32817 16018 32817 16020 32817 15920 32818 16020 32818 15919 32818 16024 32819 15918 32819 16023 32819 16023 32820 15918 32820 15919 32820 16023 32821 15919 32821 16021 32821 16021 32822 15919 32822 16020 32822 16024 32823 16026 32823 15918 32823 15918 32824 16026 32824 16028 32824 15918 32825 16028 32825 15917 32825 16028 32826 16033 32826 15917 32826 15917 32827 16033 32827 16032 32827 15917 32828 16032 32828 15916 32828 16032 32829 16030 32829 15916 32829 15916 32830 16030 32830 16038 32830 15916 32831 16038 32831 15915 32831 15915 32832 16038 32832 16037 32832 15915 32833 16037 32833 15914 32833 15914 32834 16037 32834 16035 32834 15914 32835 16035 32835 16041 32835 16041 32836 16040 32836 15914 32836 15914 32837 16040 32837 16044 32837 15914 32838 16044 32838 15913 32838 16044 32839 16043 32839 15913 32839 15913 32840 16043 32840 16049 32840 15913 32841 16049 32841 15912 32841 15912 32842 16049 32842 16048 32842 15912 32843 16048 32843 15911 32843 15911 32844 16048 32844 16046 32844 15911 32845 16046 32845 16052 32845 16052 32846 16051 32846 15911 32846 15911 32847 16051 32847 16055 32847 15911 32848 16055 32848 15910 32848 16055 32849 16054 32849 15910 32849 15910 32850 16054 32850 16060 32850 15910 32851 16060 32851 15909 32851 15909 32852 16060 32852 16059 32852 15909 32853 16059 32853 15908 32853 15908 32854 16059 32854 16057 32854 15908 32855 16057 32855 16063 32855 16069 32856 15907 32856 16070 32856 16070 32857 15907 32857 15908 32857 16070 32858 15908 32858 16062 32858 16062 32859 15908 32859 16063 32859 16069 32860 16067 32860 15907 32860 15907 32861 16067 32861 16065 32861 15907 32862 16065 32862 15906 32862 16065 32863 16064 32863 15906 32863 15906 32864 16064 32864 16071 32864 15906 32865 16071 32865 15905 32865 16071 32866 16073 32866 15905 32866 15905 32867 16073 32867 16075 32867 15905 32868 16075 32868 15904 32868 15904 32869 16075 32869 16076 32869 15904 32870 16076 32870 15903 32870 15903 32871 16076 32871 16078 32871 15903 32872 16078 32872 16080 32872 16080 32873 16085 32873 15903 32873 15903 32874 16085 32874 16084 32874 15903 32875 16084 32875 15938 32875 16084 32876 16082 32876 15938 32876 15938 32877 16082 32877 16090 32877 15938 32878 16090 32878 15937 32878 15937 32879 16090 32879 16089 32879 15937 32880 16089 32880 15936 32880 15936 32881 16089 32881 16087 32881 15936 32882 16087 32882 16093 32882 16093 32883 16092 32883 15936 32883 15936 32884 16092 32884 16096 32884 15936 32885 16096 32885 15935 32885 16096 32886 16095 32886 15935 32886 15935 32887 16095 32887 16101 32887 15935 32888 16101 32888 15934 32888 15934 32889 16101 32889 16100 32889 15934 32890 16100 32890 15933 32890 15933 32891 16100 32891 16098 32891 15933 32892 16098 32892 16104 32892 16108 32893 15932 32893 16109 32893 16109 32894 15932 32894 15933 32894 16109 32895 15933 32895 16103 32895 16103 32896 15933 32896 16104 32896 16108 32897 16106 32897 15932 32897 15932 32898 16106 32898 16112 32898 15932 32899 16112 32899 15931 32899 16112 32900 16111 32900 15931 32900 15931 32901 16111 32901 16115 32901 15931 32902 16115 32902 15930 32902 16115 32903 16114 32903 15930 32903 15930 32904 16114 32904 16120 32904 15930 32905 16120 32905 15929 32905 15929 32906 16120 32906 16119 32906 15929 32907 16119 32907 15928 32907 15928 32908 16119 32908 16117 32908 15928 32909 16117 32909 16116 32909 17321 34576 17322 34576 17323 34576 17324 34577 17325 34577 17322 34577 17322 34578 17325 34578 17326 34578 17322 34579 17326 34579 17323 34579 17327 34580 17328 34580 17329 34580 17322 34581 17330 34581 17324 34581 17324 34582 17330 34582 17331 34582 17324 34583 17331 34583 17332 34583 17333 34584 17334 34584 17335 34584 17328 34585 17336 34585 17329 34585 17329 34586 17336 34586 17337 34586 17329 34587 17337 34587 17338 34587 17338 34588 17339 34588 17329 34588 17329 34589 17339 34589 17340 34589 17329 34590 17340 34590 17341 34590 17342 34591 17343 34591 17344 34591 17344 34592 17343 34592 17324 34592 17344 34593 17324 34593 17345 34593 17345 34594 17324 34594 17332 34594 17321 34595 17323 34595 17329 34595 17329 34596 17323 34596 17346 34596 17329 34597 17346 34597 17327 34597 17341 34598 17347 34598 17329 34598 17329 34599 17347 34599 17348 34599 17329 34600 17348 34600 17349 34600 17335 34601 17334 34601 17350 34601 17350 34602 17334 34602 17351 34602 17350 34603 17351 34603 17352 34603 17333 34604 17335 34604 17344 34604 17344 34605 17335 34605 17353 34605 17344 34606 17353 34606 17342 34606 17349 34607 17354 34607 17329 34607 17329 34608 17354 34608 17355 34608 17329 34609 17355 34609 17356 34609 17477 34776 17334 34776 17478 34776 17478 34777 17334 34777 17333 34777 17478 34778 17333 34778 17479 34778 17479 34779 17333 34779 17344 34779 17479 34780 17344 34780 17480 34780 17480 34781 17344 34781 17345 34781 17480 34782 17345 34782 17481 34782 17481 34783 17345 34783 17332 34783 17481 34784 17332 34784 17482 34784 17482 34785 17332 34785 17331 34785 17482 34786 17331 34786 17483 34786 17483 34787 17331 34787 17330 34787 17483 34788 17330 34788 17484 34788 17484 34789 17330 34789 17322 34789 17484 34790 17322 34790 17485 34790 17485 34791 17322 34791 17321 34791 17485 34792 17321 34792 17486 34792 17486 34793 17321 34793 17329 34793 17486 34794 17329 34794 17487 34794 17487 34795 17329 34795 17356 34795 17487 34796 17356 34796 17488 34796 17488 34797 17356 34797 17355 34797 17488 34798 17355 34798 17489 34798 17489 34799 17355 34799 17354 34799 17489 34800 17354 34800 17490 34800 17490 34801 17354 34801 17349 34801 17490 34802 17349 34802 17491 34802 17491 34803 17349 34803 17348 34803 17491 34804 17348 34804 17492 34804 17492 34805 17348 34805 17347 34805 17492 34806 17347 34806 17493 34806 17493 34807 17347 34807 17341 34807 17493 34808 17341 34808 17494 34808 17494 34809 17341 34809 17340 34809 17494 34810 17340 34810 17495 34810 17495 34811 17340 34811 17339 34811 17495 34812 17339 34812 17496 34812 17496 34813 17339 34813 17338 34813 17496 34814 17338 34814 17497 34814 17497 34815 17338 34815 17337 34815 17497 34816 17337 34816 17498 34816 17498 34817 17337 34817 17336 34817 17498 34818 17336 34818 17499 34818 17499 34819 17336 34819 17328 34819 17499 34820 17328 34820 17500 34820 17500 34821 17328 34821 17327 34821 17500 34822 17327 34822 17501 34822 17501 34823 17327 34823 17346 34823 17501 34824 17346 34824 17502 34824 17502 34825 17346 34825 17323 34825 17502 34826 17323 34826 17503 34826 17503 34827 17323 34827 17326 34827 17503 34828 17326 34828 17504 34828 17504 34829 17326 34829 17325 34829 17504 34830 17325 34830 17505 34830 17505 34831 17325 34831 17324 34831 17505 34832 17324 34832 17506 34832 17506 34833 17324 34833 17343 34833 17506 34834 17343 34834 17507 34834 17507 34835 17343 34835 17342 34835 17507 34836 17342 34836 17508 34836 17508 34837 17342 34837 17353 34837 17508 34838 17353 34838 17509 34838 17509 34839 17353 34839 17335 34839 17509 34840 17335 34840 17510 34840 17510 34841 17335 34841 17350 34841 17510 34842 17350 34842 17511 34842 17511 34843 17350 34843 17352 34843 17511 34844 17352 34844 17512 34844 17512 34845 17352 34845 17351 34845 17512 34846 17351 34846 17477 34846 17477 34847 17351 34847 17334 34847 17562 35017 17563 35017 17564 35017 17564 35018 17563 35018 17565 35018 17564 35019 17565 35019 17566 35019 17566 35020 17565 35020 17567 35020 17566 35021 17567 35021 17568 35021 17568 35022 17567 35022 17569 35022 17569 35023 17567 35023 17570 35023 17569 35024 17570 35024 17571 35024 17571 35025 17570 35025 17572 35025 17571 35026 17572 35026 17573 35026 17573 35027 17572 35027 17574 35027 17574 35028 17572 35028 17575 35028 17574 35029 17575 35029 17576 35029 17576 35030 17575 35030 17577 35030 17577 35031 17575 35031 17578 35031 17577 35032 17578 35032 17579 35032 17579 35033 17578 35033 17580 35033 17580 35034 17578 35034 17581 35034 17580 35035 17581 35035 17582 35035 17582 35036 17581 35036 17583 35036 17582 35037 17583 35037 17584 35037 17584 35038 17583 35038 17585 35038 17585 35039 17583 35039 17586 35039 17585 35040 17586 35040 17587 35040 17587 35041 17586 35041 17588 35041 17588 35042 17586 35042 17589 35042 17588 35043 17589 35043 17590 35043 17590 35044 17589 35044 17591 35044 17590 35045 17591 35045 17592 35045 17592 35046 17591 35046 17593 35046 17592 35047 17593 35047 17594 35047 17594 35048 17593 35048 17595 35048 17595 35049 17593 35049 17596 35049 17595 35050 17596 35050 17597 35050 17597 35051 17596 35051 17598 35051 17598 35052 17596 35052 17599 35052 17598 35053 17599 35053 17600 35053 17600 35054 17599 35054 17601 35054 17600 35055 17601 35055 17602 35055 17603 35056 17604 35056 17605 35056 17605 35057 17604 35057 17606 35057 17605 35058 17606 35058 17601 35058 17601 35059 17606 35059 17607 35059 17601 35060 17607 35060 17602 35060 17608 35061 17609 35061 17610 35061 17610 35062 17609 35062 17611 35062 17610 35063 17611 35063 17603 35063 17603 35064 17611 35064 17612 35064 17603 35065 17612 35065 17604 35065 17613 35066 17614 35066 17608 35066 17608 35067 17614 35067 17615 35067 17608 35068 17615 35068 17609 35068 17616 35069 17617 35069 17613 35069 17613 35070 17617 35070 17618 35070 17613 35071 17618 35071 17614 35071 17619 35072 17620 35072 17621 35072 17621 35073 17620 35073 17622 35073 17621 35074 17622 35074 17616 35074 17616 35075 17622 35075 17623 35075 17616 35076 17623 35076 17617 35076 17624 35077 17625 35077 17619 35077 17619 35078 17625 35078 17626 35078 17619 35079 17626 35079 17620 35079 17627 35080 17628 35080 17624 35080 17624 35081 17628 35081 17629 35081 17624 35082 17629 35082 17625 35082 17630 35083 17631 35083 17632 35083 17632 35084 17631 35084 17633 35084 17632 35085 17633 35085 17627 35085 17627 35086 17633 35086 17634 35086 17627 35087 17634 35087 17628 35087 17635 35088 17636 35088 17630 35088 17630 35089 17636 35089 17637 35089 17630 35090 17637 35090 17631 35090 17638 35091 17639 35091 17640 35091 17640 35092 17639 35092 17641 35092 17640 35093 17641 35093 17642 35093 17642 35094 17641 35094 17643 35094 17642 35095 17643 35095 17635 35095 17635 35096 17643 35096 17644 35096 17635 35097 17644 35097 17636 35097 17638 35098 17640 35098 17645 35098 17645 35099 17640 35099 17646 35099 17645 35100 17646 35100 17647 35100 17647 35101 17646 35101 17648 35101 17647 35102 17648 35102 17649 35102 17649 35103 17648 35103 17650 35103 17650 35104 17648 35104 17651 35104 17650 35105 17651 35105 17652 35105 17652 35106 17651 35106 17653 35106 17652 35107 17653 35107 17654 35107 17655 35108 17656 35108 17657 35108 17657 35109 17656 35109 17658 35109 17657 35110 17658 35110 17653 35110 17653 35111 17658 35111 17659 35111 17653 35112 17659 35112 17654 35112 17660 35113 17661 35113 17662 35113 17662 35114 17661 35114 17663 35114 17662 35115 17663 35115 17655 35115 17655 35116 17663 35116 17664 35116 17655 35117 17664 35117 17656 35117 17665 35118 17666 35118 17660 35118 17660 35119 17666 35119 17667 35119 17660 35120 17667 35120 17661 35120 17668 35121 17669 35121 17665 35121 17665 35122 17669 35122 17670 35122 17665 35123 17670 35123 17666 35123 17671 35124 17672 35124 17673 35124 17673 35125 17672 35125 17674 35125 17673 35126 17674 35126 17668 35126 17668 35127 17674 35127 17675 35127 17668 35128 17675 35128 17669 35128 17676 35129 17677 35129 17671 35129 17671 35130 17677 35130 17678 35130 17671 35131 17678 35131 17672 35131 17679 35132 17680 35132 17681 35132 17681 35133 17680 35133 17682 35133 17681 35134 17682 35134 17676 35134 17676 35135 17682 35135 17683 35135 17676 35136 17683 35136 17677 35136 17684 35137 17685 35137 17679 35137 17679 35138 17685 35138 17686 35138 17679 35139 17686 35139 17680 35139 17687 35140 17688 35140 17684 35140 17684 35141 17688 35141 17689 35141 17684 35142 17689 35142 17685 35142 17562 35143 17690 35143 17563 35143 17563 35144 17690 35144 17691 35144 17563 35145 17691 35145 17692 35145 17692 35146 17691 35146 17693 35146 17692 35147 17693 35147 17687 35147 17687 35148 17693 35148 17694 35148 17687 35149 17694 35149 17688 35149 17793 35346 17744 35346 17794 35346 17794 35347 17744 35347 17745 35347 17794 35348 17745 35348 17795 35348 17795 35349 17745 35349 17746 35349 17795 35350 17746 35350 17796 35350 17796 35351 17746 35351 17747 35351 17796 35352 17747 35352 17797 35352 17797 35353 17747 35353 17748 35353 17797 35354 17748 35354 17798 35354 17798 35355 17748 35355 17749 35355 17798 35356 17749 35356 17799 35356 17799 35357 17749 35357 17750 35357 17799 35358 17750 35358 17800 35358 17800 35359 17750 35359 17751 35359 17800 35360 17751 35360 17801 35360 17801 35361 17751 35361 17752 35361 17801 35362 17752 35362 17802 35362 17802 35363 17752 35363 17753 35363 17802 35364 17753 35364 17803 35364 17803 35365 17753 35365 17754 35365 17803 35366 17754 35366 17804 35366 17804 35367 17754 35367 17755 35367 17804 35368 17755 35368 17805 35368 17805 35369 17755 35369 17756 35369 17805 35370 17756 35370 17806 35370 17806 35371 17756 35371 17757 35371 17806 35372 17757 35372 17807 35372 17807 35373 17757 35373 17758 35373 17807 35374 17758 35374 17808 35374 17808 35375 17758 35375 17759 35375 17808 35376 17759 35376 17809 35376 17809 35377 17759 35377 17760 35377 17809 35378 17760 35378 17810 35378 17810 35379 17760 35379 17761 35379 17810 35380 17761 35380 17811 35380 17811 35381 17761 35381 17762 35381 17811 35382 17762 35382 17812 35382 17812 35383 17762 35383 17763 35383 17812 35384 17763 35384 17813 35384 17813 35385 17763 35385 17764 35385 17813 35386 17764 35386 17814 35386 17814 35387 17764 35387 17765 35387 17814 35388 17765 35388 17815 35388 17815 35389 17765 35389 17766 35389 17815 35390 17766 35390 17816 35390 17816 35391 17766 35391 17767 35391 17816 35392 17767 35392 17817 35392 17817 35393 17767 35393 17768 35393 17817 35394 17768 35394 17818 35394 17818 35395 17768 35395 17769 35395 17818 35396 17769 35396 17819 35396 17819 35397 17769 35397 17770 35397 17819 35398 17770 35398 17820 35398 17820 35399 17770 35399 17771 35399 17820 35400 17771 35400 17821 35400 17821 35401 17771 35401 17772 35401 17821 35402 17772 35402 17822 35402 17822 35403 17772 35403 17773 35403 17822 35404 17773 35404 17823 35404 17823 35405 17773 35405 17774 35405 17823 35406 17774 35406 17824 35406 17824 35407 17774 35407 17775 35407 17824 35408 17775 35408 17825 35408 17825 35409 17775 35409 17776 35409 17825 35410 17776 35410 17826 35410 17826 35411 17776 35411 17777 35411 17826 35412 17777 35412 17827 35412 17827 35413 17777 35413 17778 35413 17827 35414 17778 35414 17828 35414 17828 35415 17778 35415 17779 35415 17828 35416 17779 35416 17829 35416 17829 35417 17779 35417 17780 35417 17829 35418 17780 35418 17830 35418 17830 35419 17780 35419 17781 35419 17830 35420 17781 35420 17831 35420 17831 35421 17781 35421 17782 35421 17831 35422 17782 35422 17832 35422 17832 35423 17782 35423 17783 35423 17832 35424 17783 35424 17833 35424 17833 35425 17783 35425 17784 35425 17833 35426 17784 35426 17834 35426 17834 35427 17784 35427 17785 35427 17834 35428 17785 35428 17835 35428 17835 35429 17785 35429 17786 35429 17835 35430 17786 35430 17836 35430 17836 35431 17786 35431 17787 35431 17836 35432 17787 35432 17837 35432 17837 35433 17787 35433 17788 35433 17837 35434 17788 35434 17838 35434 17838 35435 17788 35435 17789 35435 17838 35436 17789 35436 17839 35436 17839 35437 17789 35437 17790 35437 17839 35438 17790 35438 17840 35438 17840 35439 17790 35439 17791 35439 17840 35440 17791 35440 17841 35440 17841 35441 17791 35441 17792 35441 17841 35442 17792 35442 17793 35442 17793 35443 17792 35443 17744 35443 17842 35444 17793 35444 17843 35444 17843 35445 17793 35445 17794 35445 17843 35446 17794 35446 17844 35446 17844 35447 17794 35447 17795 35447 17844 35448 17795 35448 17845 35448 17845 35449 17795 35449 17796 35449 17845 35450 17796 35450 17846 35450 17846 35451 17796 35451 17797 35451 17846 35452 17797 35452 17847 35452 17847 35453 17797 35453 17798 35453 17847 35454 17798 35454 17848 35454 17848 35455 17798 35455 17799 35455 17848 35456 17799 35456 17849 35456 17849 35457 17799 35457 17800 35457 17849 35458 17800 35458 17850 35458 17850 35459 17800 35459 17801 35459 17850 35460 17801 35460 17851 35460 17851 35461 17801 35461 17802 35461 17851 35462 17802 35462 17852 35462 17852 35463 17802 35463 17803 35463 17852 35464 17803 35464 17853 35464 17853 35465 17803 35465 17804 35465 17853 35466 17804 35466 17854 35466 17854 35467 17804 35467 17805 35467 17854 35468 17805 35468 17855 35468 17855 35469 17805 35469 17806 35469 17855 35470 17806 35470 17856 35470 17856 35471 17806 35471 17807 35471 17856 35472 17807 35472 17857 35472 17857 35473 17807 35473 17808 35473 17857 35474 17808 35474 17858 35474 17858 35475 17808 35475 17809 35475 17858 35476 17809 35476 17859 35476 17859 35477 17809 35477 17810 35477 17859 35478 17810 35478 17860 35478 17860 35479 17810 35479 17811 35479 17860 35480 17811 35480 17861 35480 17861 35481 17811 35481 17812 35481 17861 35482 17812 35482 17862 35482 17862 35483 17812 35483 17813 35483 17862 35484 17813 35484 17863 35484 17863 35485 17813 35485 17814 35485 17863 35486 17814 35486 17864 35486 17864 35487 17814 35487 17815 35487 17864 35488 17815 35488 17865 35488 17865 35489 17815 35489 17816 35489 17865 35490 17816 35490 17866 35490 17866 35491 17816 35491 17817 35491 17866 35492 17817 35492 17867 35492 17867 35493 17817 35493 17818 35493 17867 35494 17818 35494 17868 35494 17868 35495 17818 35495 17819 35495 17868 35496 17819 35496 17869 35496 17869 35497 17819 35497 17820 35497 17869 35498 17820 35498 17870 35498 17870 35499 17820 35499 17821 35499 17870 35500 17821 35500 17871 35500 17871 35501 17821 35501 17822 35501 17871 35502 17822 35502 17872 35502 17872 35503 17822 35503 17823 35503 17872 35504 17823 35504 17873 35504 17873 35505 17823 35505 17824 35505 17873 35506 17824 35506 17874 35506 17874 35507 17824 35507 17825 35507 17874 35508 17825 35508 17875 35508 17875 35509 17825 35509 17826 35509 17875 35510 17826 35510 17876 35510 17876 35511 17826 35511 17827 35511 17876 35512 17827 35512 17877 35512 17877 35513 17827 35513 17828 35513 17877 35514 17828 35514 17878 35514 17878 35515 17828 35515 17829 35515 17878 35516 17829 35516 17879 35516 17879 35517 17829 35517 17830 35517 17879 35518 17830 35518 17880 35518 17880 35519 17830 35519 17831 35519 17880 35520 17831 35520 17881 35520 17881 35521 17831 35521 17832 35521 17881 35522 17832 35522 17882 35522 17882 35523 17832 35523 17833 35523 17882 35524 17833 35524 17883 35524 17883 35525 17833 35525 17834 35525 17883 35526 17834 35526 17884 35526 17884 35527 17834 35527 17835 35527 17884 35528 17835 35528 17885 35528 17885 35529 17835 35529 17836 35529 17885 35530 17836 35530 17886 35530 17886 35531 17836 35531 17837 35531 17886 35532 17837 35532 17887 35532 17887 35533 17837 35533 17838 35533 17887 35534 17838 35534 17888 35534 17888 35535 17838 35535 17839 35535 17888 35536 17839 35536 17889 35536 17889 35537 17839 35537 17840 35537 17889 35538 17840 35538 17890 35538 17890 35539 17840 35539 17841 35539 17890 35540 17841 35540 17842 35540 17842 35541 17841 35541 17793 35541 17891 35542 17842 35542 17892 35542 17892 35543 17842 35543 17843 35543 17892 35544 17843 35544 17893 35544 17893 35545 17843 35545 17844 35545 17893 35546 17844 35546 17894 35546 17894 35547 17844 35547 17845 35547 17894 35548 17845 35548 17895 35548 17895 35549 17845 35549 17846 35549 17895 35550 17846 35550 17896 35550 17896 35551 17846 35551 17847 35551 17896 35552 17847 35552 17897 35552 17897 35553 17847 35553 17848 35553 17897 35554 17848 35554 17898 35554 17898 35555 17848 35555 17849 35555 17898 35556 17849 35556 17899 35556 17899 35557 17849 35557 17850 35557 17899 35558 17850 35558 17900 35558 17900 35559 17850 35559 17851 35559 17900 35560 17851 35560 17901 35560 17901 35561 17851 35561 17852 35561 17901 35562 17852 35562 17902 35562 17902 35563 17852 35563 17853 35563 17902 35564 17853 35564 17903 35564 17903 35565 17853 35565 17854 35565 17903 35566 17854 35566 17904 35566 17904 35567 17854 35567 17855 35567 17904 35568 17855 35568 17905 35568 17905 35569 17855 35569 17856 35569 17905 35570 17856 35570 17906 35570 17906 35571 17856 35571 17857 35571 17906 35572 17857 35572 17907 35572 17907 35573 17857 35573 17858 35573 17907 35574 17858 35574 17908 35574 17908 35575 17858 35575 17859 35575 17908 35576 17859 35576 17909 35576 17909 35577 17859 35577 17860 35577 17909 35578 17860 35578 17910 35578 17910 35579 17860 35579 17861 35579 17910 35580 17861 35580 17911 35580 17911 35581 17861 35581 17862 35581 17911 35582 17862 35582 17912 35582 17912 35583 17862 35583 17863 35583 17912 35584 17863 35584 17913 35584 17913 35585 17863 35585 17864 35585 17913 35586 17864 35586 17914 35586 17914 35587 17864 35587 17865 35587 17914 35588 17865 35588 17915 35588 17915 35589 17865 35589 17866 35589 17915 35590 17866 35590 17916 35590 17916 35591 17866 35591 17867 35591 17916 35592 17867 35592 17917 35592 17917 35593 17867 35593 17868 35593 17917 35594 17868 35594 17918 35594 17918 35595 17868 35595 17869 35595 17918 35596 17869 35596 17919 35596 17919 35597 17869 35597 17870 35597 17919 35598 17870 35598 17920 35598 17920 35599 17870 35599 17871 35599 17920 35600 17871 35600 17921 35600 17921 35601 17871 35601 17872 35601 17921 35602 17872 35602 17922 35602 17922 35603 17872 35603 17873 35603 17922 35604 17873 35604 17923 35604 17923 35605 17873 35605 17874 35605 17923 35606 17874 35606 17924 35606 17924 35607 17874 35607 17875 35607 17924 35608 17875 35608 17925 35608 17925 35609 17875 35609 17876 35609 17925 35610 17876 35610 17926 35610 17926 35611 17876 35611 17877 35611 17926 35612 17877 35612 17927 35612 17927 35613 17877 35613 17878 35613 17927 35614 17878 35614 17928 35614 17928 35615 17878 35615 17879 35615 17928 35616 17879 35616 17929 35616 17929 35617 17879 35617 17880 35617 17929 35618 17880 35618 17930 35618 17930 35619 17880 35619 17881 35619 17930 35620 17881 35620 17931 35620 17931 35621 17881 35621 17882 35621 17931 35622 17882 35622 17932 35622 17932 35623 17882 35623 17883 35623 17932 35624 17883 35624 17933 35624 17933 35625 17883 35625 17884 35625 17933 35626 17884 35626 17934 35626 17934 35627 17884 35627 17885 35627 17934 35628 17885 35628 17935 35628 17935 35629 17885 35629 17886 35629 17935 35630 17886 35630 17936 35630 17936 35631 17886 35631 17887 35631 17936 35632 17887 35632 17937 35632 17937 35633 17887 35633 17888 35633 17937 35634 17888 35634 17938 35634 17938 35635 17888 35635 17889 35635 17938 35636 17889 35636 17939 35636 17939 35637 17889 35637 17890 35637 17939 35638 17890 35638 17891 35638 17891 35639 17890 35639 17842 35639 17940 35640 17891 35640 17941 35640 17941 35641 17891 35641 17892 35641 17941 35642 17892 35642 17942 35642 17942 35643 17892 35643 17893 35643 17942 35644 17893 35644 17943 35644 17943 35645 17893 35645 17894 35645 17943 35646 17894 35646 17944 35646 17944 35647 17894 35647 17895 35647 17944 35648 17895 35648 17945 35648 17945 35649 17895 35649 17896 35649 17945 35650 17896 35650 17946 35650 17946 35651 17896 35651 17897 35651 17946 35652 17897 35652 17947 35652 17947 35653 17897 35653 17898 35653 17947 35654 17898 35654 17948 35654 17948 35655 17898 35655 17899 35655 17948 35656 17899 35656 17949 35656 17949 35657 17899 35657 17900 35657 17949 35658 17900 35658 17950 35658 17950 35659 17900 35659 17901 35659 17950 35660 17901 35660 17951 35660 17951 35661 17901 35661 17902 35661 17951 35662 17902 35662 17952 35662 17952 35663 17902 35663 17903 35663 17952 35664 17903 35664 17953 35664 17953 35665 17903 35665 17904 35665 17953 35666 17904 35666 17954 35666 17954 35667 17904 35667 17905 35667 17954 35668 17905 35668 17955 35668 17955 35669 17905 35669 17906 35669 17955 35670 17906 35670 17956 35670 17956 35671 17906 35671 17907 35671 17956 35672 17907 35672 17957 35672 17957 35673 17907 35673 17908 35673 17957 35674 17908 35674 17958 35674 17958 35675 17908 35675 17909 35675 17958 35676 17909 35676 17959 35676 17959 35677 17909 35677 17910 35677 17959 35678 17910 35678 17960 35678 17960 35679 17910 35679 17911 35679 17960 35680 17911 35680 17961 35680 17961 35681 17911 35681 17912 35681 17961 35682 17912 35682 17962 35682 17962 35683 17912 35683 17913 35683 17962 35684 17913 35684 17963 35684 17963 35685 17913 35685 17914 35685 17963 35686 17914 35686 17964 35686 17964 35687 17914 35687 17915 35687 17964 35688 17915 35688 17965 35688 17965 35689 17915 35689 17916 35689 17965 35690 17916 35690 17966 35690 17966 35691 17916 35691 17917 35691 17966 35692 17917 35692 17967 35692 17967 35693 17917 35693 17918 35693 17967 35694 17918 35694 17968 35694 17968 35695 17918 35695 17919 35695 17968 35696 17919 35696 17969 35696 17969 35697 17919 35697 17920 35697 17969 35698 17920 35698 17970 35698 17970 35699 17920 35699 17921 35699 17970 35700 17921 35700 17971 35700 17971 35701 17921 35701 17922 35701 17971 35702 17922 35702 17972 35702 17972 35703 17922 35703 17923 35703 17972 35704 17923 35704 17973 35704 17973 35705 17923 35705 17924 35705 17973 35706 17924 35706 17974 35706 17974 35707 17924 35707 17925 35707 17974 35708 17925 35708 17975 35708 17975 35709 17925 35709 17926 35709 17975 35710 17926 35710 17976 35710 17976 35711 17926 35711 17927 35711 17976 35712 17927 35712 17977 35712 17977 35713 17927 35713 17928 35713 17977 35714 17928 35714 17978 35714 17978 35715 17928 35715 17929 35715 17978 35716 17929 35716 17979 35716 17979 35717 17929 35717 17930 35717 17979 35718 17930 35718 17980 35718 17980 35719 17930 35719 17931 35719 17980 35720 17931 35720 17981 35720 17981 35721 17931 35721 17932 35721 17981 35722 17932 35722 17982 35722 17982 35723 17932 35723 17933 35723 17982 35724 17933 35724 17983 35724 17983 35725 17933 35725 17934 35725 17983 35726 17934 35726 17984 35726 17984 35727 17934 35727 17935 35727 17984 35728 17935 35728 17985 35728 17985 35729 17935 35729 17936 35729 17985 35730 17936 35730 17986 35730 17986 35731 17936 35731 17937 35731 17986 35732 17937 35732 17987 35732 17987 35733 17937 35733 17938 35733 17987 35734 17938 35734 17988 35734 17988 35735 17938 35735 17939 35735 17988 35736 17939 35736 17940 35736 17940 35737 17939 35737 17891 35737 17989 35738 17940 35738 17990 35738 17990 35739 17940 35739 17941 35739 17990 35740 17941 35740 17991 35740 17991 35741 17941 35741 17942 35741 17991 35742 17942 35742 17992 35742 17992 35743 17942 35743 17943 35743 17992 35744 17943 35744 17993 35744 17993 35745 17943 35745 17944 35745 17993 35746 17944 35746 17994 35746 17994 35747 17944 35747 17945 35747 17994 35748 17945 35748 17995 35748 17995 35749 17945 35749 17946 35749 17995 35750 17946 35750 17996 35750 17996 35751 17946 35751 17947 35751 17996 35752 17947 35752 17997 35752 17997 35753 17947 35753 17948 35753 17997 35754 17948 35754 17998 35754 17998 35755 17948 35755 17949 35755 17998 35756 17949 35756 17999 35756 17999 35757 17949 35757 17950 35757 17999 35758 17950 35758 18000 35758 18000 35759 17950 35759 17951 35759 18000 35760 17951 35760 18001 35760 18001 35761 17951 35761 17952 35761 18001 35762 17952 35762 18002 35762 18002 35763 17952 35763 17953 35763 18002 35764 17953 35764 18003 35764 18003 35765 17953 35765 17954 35765 18003 35766 17954 35766 18004 35766 18004 35767 17954 35767 17955 35767 18004 35768 17955 35768 18005 35768 18005 35769 17955 35769 17956 35769 18005 35770 17956 35770 18006 35770 18006 35771 17956 35771 17957 35771 18006 35772 17957 35772 18007 35772 18007 35773 17957 35773 17958 35773 18007 35774 17958 35774 18008 35774 18008 35775 17958 35775 17959 35775 18008 35776 17959 35776 18009 35776 18009 35777 17959 35777 17960 35777 18009 35778 17960 35778 18010 35778 18010 35779 17960 35779 17961 35779 18010 35780 17961 35780 18011 35780 18011 35781 17961 35781 17962 35781 18011 35782 17962 35782 18012 35782 18012 35783 17962 35783 17963 35783 18012 35784 17963 35784 18013 35784 18013 35785 17963 35785 17964 35785 18013 35786 17964 35786 18014 35786 18014 35787 17964 35787 17965 35787 18014 35788 17965 35788 18015 35788 18015 35789 17965 35789 17966 35789 18015 35790 17966 35790 18016 35790 18016 35791 17966 35791 17967 35791 18016 35792 17967 35792 18017 35792 18017 35793 17967 35793 17968 35793 18017 35794 17968 35794 18018 35794 18018 35795 17968 35795 17969 35795 18018 35796 17969 35796 18019 35796 18019 35797 17969 35797 17970 35797 18019 35798 17970 35798 18020 35798 18020 35799 17970 35799 17971 35799 18020 35800 17971 35800 18021 35800 18021 35801 17971 35801 17972 35801 18021 35802 17972 35802 18022 35802 18022 35803 17972 35803 17973 35803 18022 35804 17973 35804 18023 35804 18023 35805 17973 35805 17974 35805 18023 35806 17974 35806 18024 35806 18024 35807 17974 35807 17975 35807 18024 35808 17975 35808 18025 35808 18025 35809 17975 35809 17976 35809 18025 35810 17976 35810 18026 35810 18026 35811 17976 35811 17977 35811 18026 35812 17977 35812 18027 35812 18027 35813 17977 35813 17978 35813 18027 35814 17978 35814 18028 35814 18028 35815 17978 35815 17979 35815 18028 35816 17979 35816 18029 35816 18029 35817 17979 35817 17980 35817 18029 35818 17980 35818 18030 35818 18030 35819 17980 35819 17981 35819 18030 35820 17981 35820 18031 35820 18031 35821 17981 35821 17982 35821 18031 35822 17982 35822 18032 35822 18032 35823 17982 35823 17983 35823 18032 35824 17983 35824 18033 35824 18033 35825 17983 35825 17984 35825 18033 35826 17984 35826 18034 35826 18034 35827 17984 35827 17985 35827 18034 35828 17985 35828 18035 35828 18035 35829 17985 35829 17986 35829 18035 35830 17986 35830 18036 35830 18036 35831 17986 35831 17987 35831 18036 35832 17987 35832 18037 35832 18037 35833 17987 35833 17988 35833 18037 35834 17988 35834 17989 35834 17989 35835 17988 35835 17940 35835 17593 35836 17989 35836 17596 35836 17596 35837 17989 35837 17990 35837 17596 35838 17990 35838 17599 35838 17599 35839 17990 35839 17991 35839 17599 35840 17991 35840 17601 35840 17601 35841 17991 35841 17992 35841 17601 35842 17992 35842 17605 35842 17605 35843 17992 35843 17993 35843 17605 35844 17993 35844 17603 35844 17603 35845 17993 35845 17994 35845 17603 35846 17994 35846 17610 35846 17610 35847 17994 35847 17995 35847 17610 35848 17995 35848 17608 35848 17608 35849 17995 35849 17996 35849 17608 35850 17996 35850 17613 35850 17613 35851 17996 35851 17997 35851 17613 35852 17997 35852 17616 35852 17616 35853 17997 35853 17998 35853 17616 35854 17998 35854 17621 35854 17621 35855 17998 35855 17999 35855 17621 35856 17999 35856 17619 35856 17619 35857 17999 35857 18000 35857 17619 35858 18000 35858 17624 35858 17624 35859 18000 35859 18001 35859 17624 35860 18001 35860 17627 35860 17627 35861 18001 35861 18002 35861 17627 35862 18002 35862 17632 35862 17632 35863 18002 35863 18003 35863 17632 35864 18003 35864 17630 35864 17630 35865 18003 35865 18004 35865 17630 35866 18004 35866 17635 35866 17635 35867 18004 35867 18005 35867 17635 35868 18005 35868 17642 35868 17642 35869 18005 35869 18006 35869 17642 35870 18006 35870 17640 35870 17640 35871 18006 35871 18007 35871 17640 35872 18007 35872 17646 35872 17646 35873 18007 35873 18008 35873 17646 35874 18008 35874 17648 35874 17648 35875 18008 35875 18009 35875 17648 35876 18009 35876 17651 35876 17651 35877 18009 35877 18010 35877 17651 35878 18010 35878 17653 35878 17653 35879 18010 35879 18011 35879 17653 35880 18011 35880 17657 35880 17657 35881 18011 35881 18012 35881 17657 35882 18012 35882 17655 35882 17655 35883 18012 35883 18013 35883 17655 35884 18013 35884 17662 35884 17662 35885 18013 35885 18014 35885 17662 35886 18014 35886 17660 35886 17660 35887 18014 35887 18015 35887 17660 35888 18015 35888 17665 35888 17665 35889 18015 35889 18016 35889 17665 35890 18016 35890 17668 35890 17668 35891 18016 35891 18017 35891 17668 35892 18017 35892 17673 35892 17673 35893 18017 35893 18018 35893 17673 35894 18018 35894 17671 35894 17671 35895 18018 35895 18019 35895 17671 35896 18019 35896 17676 35896 17676 35897 18019 35897 18020 35897 17676 35898 18020 35898 17681 35898 17681 35899 18020 35899 18021 35899 17681 35900 18021 35900 17679 35900 17679 35901 18021 35901 18022 35901 17679 35902 18022 35902 17684 35902 17684 35903 18022 35903 18023 35903 17684 35904 18023 35904 17687 35904 17687 35905 18023 35905 18024 35905 17687 35906 18024 35906 17692 35906 17692 35907 18024 35907 18025 35907 17692 35908 18025 35908 17563 35908 17563 35909 18025 35909 18026 35909 17563 35910 18026 35910 17565 35910 17565 35911 18026 35911 18027 35911 17565 35912 18027 35912 17567 35912 17567 35913 18027 35913 18028 35913 17567 35914 18028 35914 17570 35914 17570 35915 18028 35915 18029 35915 17570 35916 18029 35916 17572 35916 17572 35917 18029 35917 18030 35917 17572 35918 18030 35918 17575 35918 17575 35919 18030 35919 18031 35919 17575 35920 18031 35920 17578 35920 17578 35921 18031 35921 18032 35921 17578 35922 18032 35922 17581 35922 17581 35923 18032 35923 18033 35923 17581 35924 18033 35924 17583 35924 17583 35925 18033 35925 18034 35925 17583 35926 18034 35926 17586 35926 17586 35927 18034 35927 18035 35927 17586 35928 18035 35928 17589 35928 17589 35929 18035 35929 18036 35929 17589 35930 18036 35930 17591 35930 17591 35931 18036 35931 18037 35931 17591 35932 18037 35932 17593 35932 17593 35933 18037 35933 17989 35933 17690 35934 17562 35934 17502 35934 17502 35935 17562 35935 17564 35935 17502 35936 17564 35936 17501 35936 17564 35937 17566 35937 17501 35937 17501 35938 17566 35938 17568 35938 17501 35939 17568 35939 17500 35939 17500 35940 17568 35940 17569 35940 17500 35941 17569 35941 17499 35941 17499 35942 17569 35942 17571 35942 17499 35943 17571 35943 17573 35943 17573 35944 17574 35944 17499 35944 17499 35945 17574 35945 17576 35945 17499 35946 17576 35946 17498 35946 17576 35947 17577 35947 17498 35947 17498 35948 17577 35948 17579 35948 17498 35949 17579 35949 17497 35949 17497 35950 17579 35950 17580 35950 17497 35951 17580 35951 17496 35951 17496 35952 17580 35952 17582 35952 17496 35953 17582 35953 17584 35953 17584 35954 17585 35954 17496 35954 17496 35955 17585 35955 17587 35955 17496 35956 17587 35956 17495 35956 17587 35957 17588 35957 17495 35957 17495 35958 17588 35958 17590 35958 17495 35959 17590 35959 17494 35959 17590 35960 17592 35960 17494 35960 17494 35961 17592 35961 17594 35961 17494 35962 17594 35962 17493 35962 17598 35963 17492 35963 17597 35963 17597 35964 17492 35964 17493 35964 17597 35965 17493 35965 17595 35965 17595 35966 17493 35966 17594 35966 17598 35967 17600 35967 17492 35967 17492 35968 17600 35968 17602 35968 17492 35969 17602 35969 17491 35969 17602 35970 17607 35970 17491 35970 17491 35971 17607 35971 17606 35971 17491 35972 17606 35972 17490 35972 17606 35973 17604 35973 17490 35973 17490 35974 17604 35974 17612 35974 17490 35975 17612 35975 17489 35975 17489 35976 17612 35976 17611 35976 17489 35977 17611 35977 17488 35977 17488 35978 17611 35978 17609 35978 17488 35979 17609 35979 17615 35979 17615 35980 17614 35980 17488 35980 17488 35981 17614 35981 17618 35981 17488 35982 17618 35982 17487 35982 17618 35983 17617 35983 17487 35983 17487 35984 17617 35984 17623 35984 17487 35985 17623 35985 17486 35985 17486 35986 17623 35986 17622 35986 17486 35987 17622 35987 17485 35987 17485 35988 17622 35988 17620 35988 17485 35989 17620 35989 17626 35989 17626 35990 17625 35990 17485 35990 17485 35991 17625 35991 17629 35991 17485 35992 17629 35992 17484 35992 17629 35993 17628 35993 17484 35993 17484 35994 17628 35994 17634 35994 17484 35995 17634 35995 17483 35995 17483 35996 17634 35996 17633 35996 17483 35997 17633 35997 17482 35997 17482 35998 17633 35998 17631 35998 17482 35999 17631 35999 17637 35999 17643 36000 17481 36000 17644 36000 17644 36001 17481 36001 17482 36001 17644 36002 17482 36002 17636 36002 17636 36003 17482 36003 17637 36003 17643 36004 17641 36004 17481 36004 17481 36005 17641 36005 17639 36005 17481 36006 17639 36006 17480 36006 17639 36007 17638 36007 17480 36007 17480 36008 17638 36008 17645 36008 17480 36009 17645 36009 17479 36009 17645 36010 17647 36010 17479 36010 17479 36011 17647 36011 17649 36011 17479 36012 17649 36012 17478 36012 17478 36013 17649 36013 17650 36013 17478 36014 17650 36014 17477 36014 17477 36015 17650 36015 17652 36015 17477 36016 17652 36016 17654 36016 17654 36017 17659 36017 17477 36017 17477 36018 17659 36018 17658 36018 17477 36019 17658 36019 17512 36019 17658 36020 17656 36020 17512 36020 17512 36021 17656 36021 17664 36021 17512 36022 17664 36022 17511 36022 17511 36023 17664 36023 17663 36023 17511 36024 17663 36024 17510 36024 17510 36025 17663 36025 17661 36025 17510 36026 17661 36026 17667 36026 17667 36027 17666 36027 17510 36027 17510 36028 17666 36028 17670 36028 17510 36029 17670 36029 17509 36029 17670 36030 17669 36030 17509 36030 17509 36031 17669 36031 17675 36031 17509 36032 17675 36032 17508 36032 17508 36033 17675 36033 17674 36033 17508 36034 17674 36034 17507 36034 17507 36035 17674 36035 17672 36035 17507 36036 17672 36036 17678 36036 17682 36037 17506 36037 17683 36037 17683 36038 17506 36038 17507 36038 17683 36039 17507 36039 17677 36039 17677 36040 17507 36040 17678 36040 17682 36041 17680 36041 17506 36041 17506 36042 17680 36042 17686 36042 17506 36043 17686 36043 17505 36043 17686 36044 17685 36044 17505 36044 17505 36045 17685 36045 17689 36045 17505 36046 17689 36046 17504 36046 17689 36047 17688 36047 17504 36047 17504 36048 17688 36048 17694 36048 17504 36049 17694 36049 17503 36049 17503 36050 17694 36050 17693 36050 17503 36051 17693 36051 17502 36051 17502 36052 17693 36052 17691 36052 17502 36053 17691 36053 17690 36053

+
+ + + + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +

2448 3784 2449 3784 2450 3784 2450 3785 2449 3785 2451 3785 2452 3786 2453 3786 2451 3786 2451 3787 2453 3787 2454 3787 2451 3788 2454 3788 2455 3788 2455 3789 2454 3789 2456 3789 2450 3790 2457 3790 2448 3790 2448 3791 2457 3791 2458 3791 2448 3792 2458 3792 2459 3792 2459 3793 2458 3793 2460 3793 2461 3794 2462 3794 2463 3794 2463 3795 2462 3795 2464 3795 2463 3796 2464 3796 2450 3796 2450 3797 2464 3797 2465 3797 2450 3798 2465 3798 2457 3798 2451 3799 2466 3799 2467 3799 2449 3800 2468 3800 2451 3800 2451 3801 2468 3801 2469 3801 2451 3802 2469 3802 2470 3802 2467 3803 2471 3803 2451 3803 2451 3804 2471 3804 2472 3804 2451 3805 2472 3805 2452 3805 2473 3806 2474 3806 2454 3806 2454 3807 2474 3807 2475 3807 2454 3808 2475 3808 2456 3808 2476 3809 2477 3809 2458 3809 2458 3810 2477 3810 2478 3810 2458 3811 2478 3811 2460 3811 2463 3812 2479 3812 2480 3812 2470 3813 2481 3813 2451 3813 2451 3814 2481 3814 2482 3814 2451 3815 2482 3815 2466 3815 2479 3816 2463 3816 2483 3816 2483 3817 2463 3817 2484 3817 2483 3818 2484 3818 2485 3818 2480 3819 2486 3819 2463 3819 2463 3820 2486 3820 2487 3820 2463 3821 2487 3821 2461 3821 2473 3822 2488 3822 2474 3822 2474 3823 2488 3823 2489 3823 2474 3824 2489 3824 2490 3824 2490 3825 2489 3825 2491 3825 2490 3826 2491 3826 2492 3826 2476 3827 2493 3827 2477 3827 2477 3828 2493 3828 2494 3828 2477 3829 2494 3829 2495 3829 2495 3830 2494 3830 2496 3830 2495 3831 2496 3831 2497 3831 2485 3832 2498 3832 2483 3832 2483 3833 2498 3833 2499 3833 2483 3834 2499 3834 2500 3834 2501 3835 2502 3835 2503 3835 2503 3836 2502 3836 2504 3836 2505 3837 2506 3837 2507 3837 2507 3838 2506 3838 2508 3838 2507 3839 2508 3839 2509 3839 2510 3840 2511 3840 2502 3840 2502 3841 2511 3841 2512 3841 2513 3842 2514 3842 2515 3842 2515 3843 2514 3843 2516 3843 2515 3844 2516 3844 2517 3844 2517 3845 2505 3845 2515 3845 2515 3846 2505 3846 2507 3846 2515 3847 2507 3847 2504 3847 2504 3848 2507 3848 2518 3848 2504 3849 2518 3849 2519 3849 2509 3850 2520 3850 2507 3850 2507 3851 2520 3851 2521 3851 2507 3852 2521 3852 2522 3852 2522 3853 2521 3853 2523 3853 2512 3854 2524 3854 2502 3854 2502 3855 2524 3855 2525 3855 2502 3856 2525 3856 2526 3856 2526 3857 2525 3857 2527 3857 2526 3858 2527 3858 2528 3858 2519 3859 2529 3859 2504 3859 2504 3860 2529 3860 2530 3860 2504 3861 2530 3861 2503 3861 2501 3862 2531 3862 2502 3862 2502 3863 2531 3863 2532 3863 2502 3864 2532 3864 2510 3864 2510 3865 2532 3865 2533 3865 2510 3866 2533 3866 2534 3866 2534 3867 2533 3867 2535 3867 2534 3868 2535 3868 2536 3868 2537 3869 2538 3869 2539 3869 2539 3870 2538 3870 2540 3870 2539 3871 2540 3871 2541 3871 2515 3872 2542 3872 2513 3872 2513 3873 2542 3873 2538 3873 2513 3874 2538 3874 2543 3874 2543 3875 2538 3875 2537 3875 2527 3876 2544 3876 2528 3876 2528 3877 2544 3877 2545 3877 2528 3878 2545 3878 2546 3878 2546 3879 2545 3879 2547 3879 2535 3880 2548 3880 2536 3880 2536 3881 2548 3881 2549 3881 2536 3882 2549 3882 2550 3882 2550 3883 2549 3883 2551 3883 2550 3884 2551 3884 2552 3884 2552 3885 2551 3885 2553 3885 2554 3886 2555 3886 2556 3886 2556 3887 2557 3887 2554 3887 2554 3888 2557 3888 2558 3888 2554 3889 2558 3889 2559 3889 2560 3890 2561 3890 2554 3890 2554 3891 2561 3891 2562 3891 2563 3892 2564 3892 2565 3892 2565 3893 2564 3893 2566 3893 2565 3894 2566 3894 2555 3894 2555 3895 2566 3895 2567 3895 2555 3896 2567 3896 2556 3896 2568 3897 2569 3897 2554 3897 2554 3898 2569 3898 2570 3898 2554 3899 2570 3899 2571 3899 2571 3900 2570 3900 2572 3900 2573 3901 2574 3901 2554 3901 2554 3902 2574 3902 2575 3902 2554 3903 2575 3903 2560 3903 2565 3904 2576 3904 2577 3904 2559 3905 2578 3905 2554 3905 2554 3906 2578 3906 2579 3906 2554 3907 2579 3907 2580 3907 2581 3908 2582 3908 2570 3908 2570 3909 2582 3909 2583 3909 2570 3910 2583 3910 2572 3910 2576 3911 2565 3911 2584 3911 2584 3912 2565 3912 2585 3912 2584 3913 2585 3913 2586 3913 2577 3914 2587 3914 2565 3914 2565 3915 2587 3915 2588 3915 2565 3916 2588 3916 2563 3916 2580 3917 2589 3917 2554 3917 2554 3918 2589 3918 2590 3918 2554 3919 2590 3919 2573 3919 2562 3920 2591 3920 2554 3920 2554 3921 2591 3921 2592 3921 2554 3922 2592 3922 2593 3922 2593 3923 2594 3923 2554 3923 2554 3924 2594 3924 2595 3924 2554 3925 2595 3925 2596 3925 2596 3926 2597 3926 2554 3926 2554 3927 2597 3927 2598 3927 2554 3928 2598 3928 2568 3928 2586 3929 2599 3929 2584 3929 2584 3930 2599 3930 2600 3930 2584 3931 2600 3931 2601 3931 2581 3932 2602 3932 2582 3932 2582 3933 2602 3933 2603 3933 2582 3934 2603 3934 2604 3934 2604 3935 2603 3935 2605 3935 2604 3936 2605 3936 2606 3936 1335 3937 1336 3937 2607 3937 1335 3938 2607 3938 1334 3938 2608 3939 2609 3939 2610 3939 2610 3940 2609 3940 2611 3940 2610 3941 2611 3941 2612 3941 2612 3942 2611 3942 2613 3942 2612 3943 2613 3943 2614 3943 2615 3944 2616 3944 2617 3944 2617 3945 2618 3945 2615 3945 2615 3946 2618 3946 2619 3946 2615 3947 2619 3947 2620 3947 2620 3948 2619 3948 2621 3948 2620 3949 2621 3949 2622 3949 2622 3950 2621 3950 2623 3950 2624 3951 2608 3951 2616 3951 2616 3952 2608 3952 2625 3952 2616 3953 2625 3953 2617 3953 2624 3954 2626 3954 2608 3954 2608 3955 2626 3955 2627 3955 2608 3956 2627 3956 2628 3956 1330 3957 2629 3957 1329 3957 1329 3958 2629 3958 2630 3958 1329 3959 2630 3959 1328 3959 2628 3960 2631 3960 2608 3960 2608 3961 2631 3961 2632 3961 2608 3962 2632 3962 2609 3962 1337 3963 2633 3963 2634 3963 1334 3964 2607 3964 1333 3964 1333 3965 2607 3965 2635 3965 1333 3966 2635 3966 1332 3966 1332 3967 2635 3967 2636 3967 1332 3968 2636 3968 1331 3968 1331 3969 2636 3969 2637 3969 1331 3970 2637 3970 1330 3970 1330 3971 2637 3971 2638 3971 1330 3972 2638 3972 2629 3972 2639 3973 2640 3973 1338 3973 1338 3974 2640 3974 2641 3974 1338 3975 2641 3975 1337 3975 1337 3976 2641 3976 2642 3976 1337 3977 2642 3977 2633 3977 1336 3978 1337 3978 2607 3978 2607 3979 1337 3979 2634 3979 2607 3980 2634 3980 2623 3980 2623 3981 2634 3981 2643 3981 2623 3982 2643 3982 2622 3982 2630 3983 2644 3983 1328 3983 1328 3984 2644 3984 2645 3984 1328 3985 2645 3985 1327 3985 1327 3986 2645 3986 2646 3986 1327 3987 2646 3987 1326 3987 1326 3988 2646 3988 2647 3988 1326 3989 2647 3989 1367 3989 1367 3990 2647 3990 2648 3990 1367 3991 2648 3991 1366 3991 1366 3992 2648 3992 2649 3992 1366 3993 2649 3993 1365 3993 1365 3994 2649 3994 2650 3994 1365 3995 2650 3995 1364 3995 1364 3996 2650 3996 2651 3996 1364 3997 2651 3997 1363 3997 1363 3998 2651 3998 2652 3998 1363 3999 2652 3999 1362 3999 1362 4000 2652 4000 2653 4000 1362 4001 2653 4001 1361 4001 1361 4002 2653 4002 2654 4002 1361 4003 2654 4003 1360 4003 1360 4004 2654 4004 2655 4004 1360 4005 2655 4005 1359 4005 1359 4006 2655 4006 2656 4006 1359 4007 2656 4007 1358 4007 1358 4008 2656 4008 2657 4008 1358 4009 2657 4009 1357 4009 1357 4010 2657 4010 2658 4010 1357 4011 2658 4011 1356 4011 1356 4012 2658 4012 2659 4012 1356 4013 2659 4013 1355 4013 1355 4014 2659 4014 2660 4014 1355 4015 2660 4015 1354 4015 1354 4016 2660 4016 2661 4016 1354 4017 2661 4017 1353 4017 1353 4018 2661 4018 2662 4018 1353 4019 2662 4019 1352 4019 1352 4020 2662 4020 2663 4020 1352 4021 2663 4021 1351 4021 1351 4022 2663 4022 2664 4022 1351 4023 2664 4023 1350 4023 1350 4024 2664 4024 2665 4024 1350 4025 2665 4025 1349 4025 1349 4026 2665 4026 2666 4026 1349 4027 2666 4027 1348 4027 1348 4028 2666 4028 2667 4028 1348 4029 2667 4029 1347 4029 1347 4030 2667 4030 2668 4030 1347 4031 2668 4031 1346 4031 1346 4032 2668 4032 2669 4032 1346 4033 2669 4033 1345 4033 1345 4034 2669 4034 2670 4034 1345 4035 2670 4035 1344 4035 1344 4036 2670 4036 2671 4036 1344 4037 2671 4037 1343 4037 1343 4038 2671 4038 2672 4038 1343 4039 2672 4039 1342 4039 1342 4040 2672 4040 2673 4040 1342 4041 2673 4041 1341 4041 1341 4042 2673 4042 2674 4042 1341 4043 2674 4043 1340 4043 1340 4044 2674 4044 2675 4044 1340 4045 2675 4045 1339 4045 1339 4046 2675 4046 2676 4046 1339 4047 2676 4047 1338 4047 1338 4048 2676 4048 2677 4048 1338 4049 2677 4049 2639 4049 2678 4050 2679 4050 2680 4050 2680 4051 2679 4051 2681 4051 2682 4052 2683 4052 2684 4052 2684 4053 2683 4053 2685 4053 2686 4054 2684 4054 2687 4054 2687 4055 2684 4055 2685 4055 2687 4056 2685 4056 2688 4056 2688 4057 2685 4057 2689 4057 2688 4058 2689 4058 2690 4058 2691 4059 2680 4059 2692 4059 2692 4060 2680 4060 2681 4060 2692 4061 2681 4061 2693 4061 2693 4062 2681 4062 2694 4062 2693 4063 2694 4063 2695 4063 2690 4064 2696 4064 2688 4064 2688 4065 2696 4065 2697 4065 2688 4066 2697 4066 2698 4066 2698 4067 2697 4067 2699 4067 2700 4068 2701 4068 2695 4068 2695 4069 2701 4069 2702 4069 2695 4070 2702 4070 2693 4070 2695 4071 2703 4071 2700 4071 2700 4072 2703 4072 2704 4072 2700 4073 2704 4073 2705 4073 2705 4074 2704 4074 2706 4074 2705 4075 2706 4075 2707 4075 2707 4076 2706 4076 2708 4076 2707 4077 2708 4077 2709 4077 2709 4078 2708 4078 2710 4078 2709 4079 2710 4079 2711 4079 2711 4080 2710 4080 2712 4080 2711 4081 2712 4081 2697 4081 2697 4082 2712 4082 2713 4082 2697 4083 2713 4083 2699 4083 2714 4084 2715 4084 2716 4084 2716 4085 2715 4085 2717 4085 2718 4086 2719 4086 2720 4086 2721 4087 2722 4087 2723 4087 2723 4088 2722 4088 2724 4088 2725 4089 2726 4089 2716 4089 2716 4090 2726 4090 2727 4090 2716 4091 2727 4091 2714 4091 2728 4092 2729 4092 2730 4092 2731 4093 2732 4093 2719 4093 2733 4094 2724 4094 2734 4094 2734 4095 2724 4095 2716 4095 2734 4096 2716 4096 2735 4096 2735 4097 2716 4097 2717 4097 2718 4098 2720 4098 2736 4098 2737 4099 2738 4099 2724 4099 2724 4100 2738 4100 2739 4100 2724 4101 2739 4101 2723 4101 2730 4102 2740 4102 2728 4102 2728 4103 2740 4103 2741 4103 2728 4104 2741 4104 2720 4104 2720 4105 2741 4105 2742 4105 2720 4106 2742 4106 2736 4106 2719 4107 2732 4107 2720 4107 2720 4108 2732 4108 2743 4108 2720 4109 2743 4109 2744 4109 2745 4110 2746 4110 2719 4110 2719 4111 2746 4111 2747 4111 2719 4112 2747 4112 2731 4112 2719 4113 2748 4113 2745 4113 2745 4114 2748 4114 2749 4114 2745 4115 2749 4115 2750 4115 2750 4116 2749 4116 2751 4116 2750 4117 2751 4117 2752 4117 2752 4118 2751 4118 2753 4118 2752 4119 2753 4119 2733 4119 2733 4120 2753 4120 2754 4120 2733 4121 2754 4121 2724 4121 2724 4122 2754 4122 2755 4122 2724 4123 2755 4123 2737 4123 1390 4124 2756 4124 1389 4124 1389 4125 2756 4125 2757 4125 1389 4126 2757 4126 1388 4126 1388 4127 2757 4127 2758 4127 1388 4128 2758 4128 1387 4128 1387 4129 2758 4129 2759 4129 1387 4130 2759 4130 1386 4130 1386 4131 2759 4131 2760 4131 1386 4132 2760 4132 1385 4132 1385 4133 2760 4133 2761 4133 1385 4134 2761 4134 1384 4134 1384 4135 2761 4135 2762 4135 1384 4136 2762 4136 1383 4136 1383 4137 2762 4137 2763 4137 1383 4138 2763 4138 1382 4138 1382 4139 2763 4139 2764 4139 1382 4140 2764 4140 1381 4140 1381 4141 2764 4141 2765 4141 1381 4142 2765 4142 1380 4142 1380 4143 2765 4143 2766 4143 1380 4144 2766 4144 1379 4144 1379 4145 2766 4145 2767 4145 1379 4146 2767 4146 1378 4146 1378 4147 2767 4147 2768 4147 1378 4148 2768 4148 1377 4148 1377 4149 2768 4149 2769 4149 1377 4150 2769 4150 1376 4150 1376 4151 2769 4151 2770 4151 1376 4152 2770 4152 1375 4152 1375 4153 2770 4153 2771 4153 1375 4154 2771 4154 1374 4154 1374 4155 2771 4155 2772 4155 1374 4156 2772 4156 1373 4156 1373 4157 2772 4157 2773 4157 1373 4158 2773 4158 1372 4158 1372 4159 2773 4159 2774 4159 1372 4160 2774 4160 1371 4160 1371 4161 2774 4161 2775 4161 1371 4162 2775 4162 1370 4162 1370 4163 2775 4163 2776 4163 1370 4164 2776 4164 1369 4164 1369 4165 2776 4165 2777 4165 1369 4166 2777 4166 1368 4166 1368 4167 2777 4167 2778 4167 1368 4168 2778 4168 1408 4168 1408 4169 2778 4169 2779 4169 1408 4170 2779 4170 1407 4170 1407 4171 2779 4171 2780 4171 1407 4172 2780 4172 1406 4172 1406 4173 2780 4173 2781 4173 1406 4174 2781 4174 1405 4174 1405 4175 2781 4175 2782 4175 1405 4176 2782 4176 1404 4176 1404 4177 2782 4177 2783 4177 1404 4178 2783 4178 1403 4178 1403 4179 2783 4179 2784 4179 1403 4180 2784 4180 1402 4180 1402 4181 2784 4181 2785 4181 1402 4182 2785 4182 1401 4182 1401 4183 2785 4183 2786 4183 1401 4184 2786 4184 1400 4184 1400 4185 2786 4185 2787 4185 1400 4186 2787 4186 1399 4186 1399 4187 2787 4187 2788 4187 1399 4188 2788 4188 1398 4188 1398 4189 2788 4189 2789 4189 1398 4190 2789 4190 1397 4190 1397 4191 2789 4191 2790 4191 1397 4192 2790 4192 1396 4192 1396 4193 2790 4193 2791 4193 1396 4194 2791 4194 1395 4194 1395 4195 2791 4195 2792 4195 1395 4196 2792 4196 1394 4196 1394 4197 2792 4197 2793 4197 1394 4198 2793 4198 1393 4198 1393 4199 2793 4199 2794 4199 1393 4200 2794 4200 1392 4200 1392 4201 2794 4201 2795 4201 1392 4202 2795 4202 1391 4202 1391 4203 2795 4203 2796 4203 1391 4204 2796 4204 1390 4204 1390 4205 2796 4205 2756 4205 1430 4206 1431 4206 2797 4206 2798 4207 2799 4207 2800 4207 2800 4208 2799 4208 2801 4208 2800 4209 2801 4209 2802 4209 2797 4210 1431 4210 2803 4210 2803 4211 1431 4211 1432 4211 2803 4212 1432 4212 2804 4212 2804 4213 1432 4213 1433 4213 2804 4214 1433 4214 2805 4214 2806 4215 1437 4215 1438 4215 2802 4216 2807 4216 2800 4216 2800 4217 2807 4217 2808 4217 2800 4218 2808 4218 2809 4218 1463 4219 2810 4219 2811 4219 2812 4220 1428 4220 2813 4220 2813 4221 1428 4221 1429 4221 2813 4222 1429 4222 2814 4222 2814 4223 1429 4223 1430 4223 2814 4224 1430 4224 2815 4224 2815 4225 1430 4225 2797 4225 2806 4226 1438 4226 2816 4226 2816 4227 1438 4227 1439 4227 2816 4228 1439 4228 2817 4228 1446 4229 1447 4229 2818 4229 2819 4230 2820 4230 2821 4230 2821 4231 2820 4231 2822 4231 2821 4232 2822 4232 2823 4232 2824 4233 1456 4233 2825 4233 2825 4234 1456 4234 1457 4234 2805 4235 1433 4235 2826 4235 2826 4236 1433 4236 1434 4236 2826 4237 1434 4237 2827 4237 2827 4238 1434 4238 1435 4238 2827 4239 1435 4239 2828 4239 2828 4240 1435 4240 1409 4240 2828 4241 1409 4241 2829 4241 2829 4242 1409 4242 1410 4242 2829 4243 1410 4243 2830 4243 2830 4244 1410 4244 1411 4244 2830 4245 1411 4245 2831 4245 2831 4246 1411 4246 1412 4246 2831 4247 1412 4247 2832 4247 2832 4248 1412 4248 1413 4248 2832 4249 1413 4249 2833 4249 2834 4250 1422 4250 2835 4250 2835 4251 1422 4251 1423 4251 2835 4252 1423 4252 2836 4252 2818 4253 1447 4253 2837 4253 1457 4254 1458 4254 2825 4254 2825 4255 1458 4255 1459 4255 2825 4256 1459 4256 1460 4256 1437 4257 2806 4257 1436 4257 1436 4258 2806 4258 2838 4258 1436 4259 2838 4259 1471 4259 1471 4260 2838 4260 2839 4260 1471 4261 2839 4261 1470 4261 1470 4262 2839 4262 2840 4262 1470 4263 2840 4263 1469 4263 1444 4264 2841 4264 1443 4264 1443 4265 2841 4265 2842 4265 1443 4266 2842 4266 1442 4266 1442 4267 2842 4267 2843 4267 1442 4268 2843 4268 1441 4268 2844 4269 2845 4269 2819 4269 2819 4270 2845 4270 2846 4270 2819 4271 2846 4271 2820 4271 2834 4272 2825 4272 1422 4272 1422 4273 2825 4273 1460 4273 1422 4274 1460 4274 1421 4274 1421 4275 1460 4275 1461 4275 1421 4276 1461 4276 1420 4276 1420 4277 1461 4277 1462 4277 1420 4278 1462 4278 1419 4278 1419 4279 1462 4279 1463 4279 1419 4280 1463 4280 1418 4280 1418 4281 1463 4281 2811 4281 1418 4282 2811 4282 1417 4282 2847 4283 1425 4283 2848 4283 2848 4284 1425 4284 1424 4284 2848 4285 1424 4285 2812 4285 2812 4286 1424 4286 1427 4286 2812 4287 1427 4287 1428 4287 2843 4288 2849 4288 1441 4288 1441 4289 2849 4289 2850 4289 1441 4290 2850 4290 1440 4290 1440 4291 2850 4291 2851 4291 1440 4292 2851 4292 1439 4292 1439 4293 2851 4293 2852 4293 1439 4294 2852 4294 2817 4294 1446 4295 2818 4295 1445 4295 1445 4296 2818 4296 2853 4296 1445 4297 2853 4297 1444 4297 1444 4298 2853 4298 2854 4298 1444 4299 2854 4299 2841 4299 2833 4300 1413 4300 2855 4300 2855 4301 1413 4301 1414 4301 2855 4302 1414 4302 2856 4302 2856 4303 1414 4303 1415 4303 2856 4304 1415 4304 2857 4304 2840 4305 2858 4305 1469 4305 1469 4306 2858 4306 2859 4306 1469 4307 2859 4307 1468 4307 1468 4308 2859 4308 2860 4308 1468 4309 2860 4309 1467 4309 1467 4310 2860 4310 2861 4310 1467 4311 2861 4311 1466 4311 1466 4312 2861 4312 2862 4312 1466 4313 2862 4313 1465 4313 1465 4314 2862 4314 2810 4314 1465 4315 2810 4315 1464 4315 1464 4316 2810 4316 1463 4316 2857 4317 1415 4317 2811 4317 2811 4318 1415 4318 1416 4318 2811 4319 1416 4319 1417 4319 2863 4320 1423 4320 2847 4320 2847 4321 1423 4321 1426 4321 2847 4322 1426 4322 1425 4322 2809 4323 2836 4323 2800 4323 2800 4324 2836 4324 1423 4324 2800 4325 1423 4325 2864 4325 2864 4326 1423 4326 2863 4326 2865 4327 2866 4327 2819 4327 2819 4328 2866 4328 2867 4328 2819 4329 2867 4329 2844 4329 1447 4330 1448 4330 2837 4330 2837 4331 1448 4331 1449 4331 2837 4332 1449 4332 2868 4332 2868 4333 1449 4333 1450 4333 2868 4334 1450 4334 2869 4334 2869 4335 1450 4335 1451 4335 2869 4336 1451 4336 2870 4336 2870 4337 1451 4337 1452 4337 2870 4338 1452 4338 2819 4338 2819 4339 1452 4339 1453 4339 2819 4340 1453 4340 2865 4340 2865 4341 1453 4341 1454 4341 2865 4342 1454 4342 2824 4342 2824 4343 1454 4343 1455 4343 2824 4344 1455 4344 1456 4344 1494 4345 2871 4345 1493 4345 1493 4346 2871 4346 2872 4346 1493 4347 2872 4347 1492 4347 1492 4348 2872 4348 2873 4348 1492 4349 2873 4349 1491 4349 1491 4350 2873 4350 2874 4350 1491 4351 2874 4351 1490 4351 1490 4352 2874 4352 2875 4352 1490 4353 2875 4353 1489 4353 1489 4354 2875 4354 2876 4354 1489 4355 2876 4355 1488 4355 1488 4356 2876 4356 2877 4356 1488 4357 2877 4357 1487 4357 1487 4358 2877 4358 2878 4358 1487 4359 2878 4359 1486 4359 1486 4360 2878 4360 2879 4360 1486 4361 2879 4361 1485 4361 1485 4362 2879 4362 2880 4362 1485 4363 2880 4363 1484 4363 1484 4364 2880 4364 2881 4364 1484 4365 2881 4365 1483 4365 1483 4366 2881 4366 2882 4366 1483 4367 2882 4367 1482 4367 1482 4368 2882 4368 2883 4368 1482 4369 2883 4369 1481 4369 1481 4370 2883 4370 2884 4370 1481 4371 2884 4371 1480 4371 1480 4372 2884 4372 2885 4372 1480 4373 2885 4373 1479 4373 1479 4374 2885 4374 2886 4374 1479 4375 2886 4375 1478 4375 1478 4376 2886 4376 2887 4376 1478 4377 2887 4377 1477 4377 1477 4378 2887 4378 2888 4378 1477 4379 2888 4379 1476 4379 1476 4380 2888 4380 2889 4380 1476 4381 2889 4381 1475 4381 1475 4382 2889 4382 2890 4382 1475 4383 2890 4383 1474 4383 1474 4384 2890 4384 2891 4384 1474 4385 2891 4385 1473 4385 1473 4386 2891 4386 2892 4386 1473 4387 2892 4387 1472 4387 1472 4388 2892 4388 2893 4388 1472 4389 2893 4389 1512 4389 1512 4390 2893 4390 2894 4390 1512 4391 2894 4391 1511 4391 1511 4392 2894 4392 2895 4392 1511 4393 2895 4393 1510 4393 1510 4394 2895 4394 2896 4394 1510 4395 2896 4395 1509 4395 1509 4396 2896 4396 2897 4396 1509 4397 2897 4397 1508 4397 1508 4398 2897 4398 2898 4398 1508 4399 2898 4399 1507 4399 1507 4400 2898 4400 2899 4400 1507 4401 2899 4401 1506 4401 1506 4402 2899 4402 2900 4402 1506 4403 2900 4403 1505 4403 1505 4404 2900 4404 2901 4404 1505 4405 2901 4405 1504 4405 1504 4406 2901 4406 2902 4406 1504 4407 2902 4407 1503 4407 1503 4408 2902 4408 2903 4408 1503 4409 2903 4409 1502 4409 1502 4410 2903 4410 2904 4410 1502 4411 2904 4411 1501 4411 1501 4412 2904 4412 2905 4412 1501 4413 2905 4413 1500 4413 1500 4414 2905 4414 2906 4414 1500 4415 2906 4415 1499 4415 1499 4416 2906 4416 2907 4416 1499 4417 2907 4417 1498 4417 1498 4418 2907 4418 2908 4418 1498 4419 2908 4419 1497 4419 1497 4420 2908 4420 2909 4420 1497 4421 2909 4421 1496 4421 1496 4422 2909 4422 2910 4422 1496 4423 2910 4423 1495 4423 1495 4424 2910 4424 2911 4424 1495 4425 2911 4425 1494 4425 1494 4426 2911 4426 2871 4426 2912 4427 2913 4427 2914 4427 2915 4428 2916 4428 2917 4428 2918 4429 2919 4429 2916 4429 2920 4430 2921 4430 2922 4430 2912 4431 2914 4431 2917 4431 2917 4432 2914 4432 2923 4432 2917 4433 2923 4433 2915 4433 2916 4434 2919 4434 2917 4434 2917 4435 2919 4435 2924 4435 2917 4436 2924 4436 2925 4436 2926 4437 1522 4437 1517 4437 2927 4438 2928 4438 2929 4438 2930 4439 2931 4439 1534 4439 2932 4440 2933 4440 2934 4440 2927 4441 2929 4441 2935 4441 1534 4442 2931 4442 1533 4442 1533 4443 2931 4443 2936 4443 1533 4444 2936 4444 1532 4444 1532 4445 2936 4445 2937 4445 1532 4446 2937 4446 1531 4446 1534 4447 1535 4447 2930 4447 2930 4448 1535 4448 1536 4448 2930 4449 1536 4449 2938 4449 2938 4450 1536 4450 1537 4450 2938 4451 1537 4451 2939 4451 2939 4452 1537 4452 2940 4452 2940 4453 1537 4453 1538 4453 2940 4454 1538 4454 2941 4454 2941 4455 1538 4455 1539 4455 2941 4456 1539 4456 2942 4456 2942 4457 1539 4457 1540 4457 2942 4458 1540 4458 2943 4458 2916 4459 2944 4459 2918 4459 2918 4460 2944 4460 2934 4460 2918 4461 2934 4461 2945 4461 2945 4462 2934 4462 2933 4462 2926 4463 1517 4463 2946 4463 2946 4464 1517 4464 1518 4464 2946 4465 1518 4465 1516 4465 2947 4466 2948 4466 2949 4466 2949 4467 2948 4467 2950 4467 2951 4468 2952 4468 1529 4468 1529 4469 2952 4469 1528 4469 1520 4470 1521 4470 2953 4470 2953 4471 1521 4471 1522 4471 2953 4472 1522 4472 2954 4472 2954 4473 1522 4473 2926 4473 2954 4474 2926 4474 2955 4474 2920 4475 2922 4475 2929 4475 2929 4476 2922 4476 2956 4476 2929 4477 2956 4477 2935 4477 2952 4478 2957 4478 1528 4478 1528 4479 2957 4479 2958 4479 1528 4480 2958 4480 1527 4480 1527 4481 2958 4481 2959 4481 1527 4482 2959 4482 1526 4482 1526 4483 2959 4483 2960 4483 1526 4484 2960 4484 1525 4484 1525 4485 2960 4485 2961 4485 1525 4486 2961 4486 1524 4486 1524 4487 2961 4487 2962 4487 1524 4488 2962 4488 1523 4488 1523 4489 2962 4489 2943 4489 1523 4490 2943 4490 1530 4490 1530 4491 2943 4491 1540 4491 2963 4492 2929 4492 1515 4492 2951 4493 1529 4493 2953 4493 2953 4494 1529 4494 1519 4494 2953 4495 1519 4495 1520 4495 1531 4496 2937 4496 1513 4496 1513 4497 2937 4497 2964 4497 1513 4498 2964 4498 1514 4498 1514 4499 2964 4499 2965 4499 1514 4500 2965 4500 1515 4500 1515 4501 2965 4501 2966 4501 1515 4502 2966 4502 2963 4502 2932 4503 2934 4503 2967 4503 2967 4504 2934 4504 2968 4504 2967 4505 2968 4505 2969 4505 2950 4506 2970 4506 2949 4506 2949 4507 2970 4507 2971 4507 2949 4508 2971 4508 2972 4508 2972 4509 2971 4509 2973 4509 2972 4510 2973 4510 2974 4510 2974 4511 2973 4511 2975 4511 2928 4512 2976 4512 2929 4512 2929 4513 2976 4513 2977 4513 2929 4514 2977 4514 1515 4514 1515 4515 2977 4515 2978 4515 1515 4516 2978 4516 1516 4516 1516 4517 2978 4517 2979 4517 1516 4518 2979 4518 2946 4518 2946 4519 2979 4519 2969 4519 2946 4520 2969 4520 2980 4520 2980 4521 2969 4521 2968 4521 2955 4522 2926 4522 2981 4522 2981 4523 2926 4523 2982 4523 2981 4524 2982 4524 2973 4524 2973 4525 2982 4525 2983 4525 2973 4526 2983 4526 2975 4526 5361 8972 5362 8972 5363 8972 5363 8973 5362 8973 5364 8973 5365 8974 5366 8974 5364 8974 5364 8975 5366 8975 5367 8975 5364 8976 5367 8976 5368 8976 5368 8977 5367 8977 5369 8977 5363 8978 5370 8978 5361 8978 5361 8979 5370 8979 5371 8979 5361 8980 5371 8980 5372 8980 5372 8981 5371 8981 5373 8981 5374 8982 5375 8982 5376 8982 5376 8983 5375 8983 5377 8983 5376 8984 5377 8984 5363 8984 5363 8985 5377 8985 5378 8985 5363 8986 5378 8986 5370 8986 5364 8987 5379 8987 5380 8987 5362 8988 5381 8988 5364 8988 5364 8989 5381 8989 5382 8989 5364 8990 5382 8990 5383 8990 5380 8991 5384 8991 5364 8991 5364 8992 5384 8992 5385 8992 5364 8993 5385 8993 5365 8993 5386 8994 5387 8994 5367 8994 5367 8995 5387 8995 5388 8995 5367 8996 5388 8996 5369 8996 5389 8997 5390 8997 5371 8997 5371 8998 5390 8998 5391 8998 5371 8999 5391 8999 5373 8999 5376 9000 5392 9000 5393 9000 5383 9001 5394 9001 5364 9001 5364 9002 5394 9002 5395 9002 5364 9003 5395 9003 5379 9003 5392 9004 5376 9004 5396 9004 5396 9005 5376 9005 5397 9005 5396 9006 5397 9006 5398 9006 5393 9007 5399 9007 5376 9007 5376 9008 5399 9008 5400 9008 5376 9009 5400 9009 5374 9009 5386 9010 5401 9010 5387 9010 5387 9011 5401 9011 5402 9011 5387 9012 5402 9012 5403 9012 5403 9013 5402 9013 5404 9013 5403 9014 5404 9014 5405 9014 5389 9015 5406 9015 5390 9015 5390 9016 5406 9016 5407 9016 5390 9017 5407 9017 5408 9017 5408 9018 5407 9018 5409 9018 5408 9019 5409 9019 5410 9019 5398 9020 5411 9020 5396 9020 5396 9021 5411 9021 5412 9021 5396 9022 5412 9022 5413 9022 5414 9023 5415 9023 5416 9023 5416 9024 5415 9024 5417 9024 5418 9025 5419 9025 5420 9025 5420 9026 5419 9026 5421 9026 5420 9027 5421 9027 5422 9027 5423 9028 5424 9028 5415 9028 5415 9029 5424 9029 5425 9029 5426 9030 5427 9030 5428 9030 5428 9031 5427 9031 5429 9031 5428 9032 5429 9032 5430 9032 5430 9033 5418 9033 5428 9033 5428 9034 5418 9034 5420 9034 5428 9035 5420 9035 5417 9035 5417 9036 5420 9036 5431 9036 5417 9037 5431 9037 5432 9037 5422 9038 5433 9038 5420 9038 5420 9039 5433 9039 5434 9039 5420 9040 5434 9040 5435 9040 5435 9041 5434 9041 5436 9041 5425 9042 5437 9042 5415 9042 5415 9043 5437 9043 5438 9043 5415 9044 5438 9044 5439 9044 5439 9045 5438 9045 5440 9045 5439 9046 5440 9046 5441 9046 5432 9047 5442 9047 5417 9047 5417 9048 5442 9048 5443 9048 5417 9049 5443 9049 5416 9049 5414 9050 5444 9050 5415 9050 5415 9051 5444 9051 5445 9051 5415 9052 5445 9052 5423 9052 5423 9053 5445 9053 5446 9053 5423 9054 5446 9054 5447 9054 5447 9055 5446 9055 5448 9055 5447 9056 5448 9056 5449 9056 5450 9057 5451 9057 5452 9057 5452 9058 5451 9058 5453 9058 5452 9059 5453 9059 5454 9059 5428 9060 5455 9060 5426 9060 5426 9061 5455 9061 5451 9061 5426 9062 5451 9062 5456 9062 5456 9063 5451 9063 5450 9063 5440 9064 5457 9064 5441 9064 5441 9065 5457 9065 5458 9065 5441 9066 5458 9066 5459 9066 5459 9067 5458 9067 5460 9067 5448 9068 5461 9068 5449 9068 5449 9069 5461 9069 5462 9069 5449 9070 5462 9070 5463 9070 5463 9071 5462 9071 5464 9071 5463 9072 5464 9072 5465 9072 5465 9073 5464 9073 5466 9073 5467 9074 5468 9074 5469 9074 5469 9075 5470 9075 5467 9075 5467 9076 5470 9076 5471 9076 5467 9077 5471 9077 5472 9077 5473 9078 5474 9078 5467 9078 5467 9079 5474 9079 5475 9079 5476 9080 5477 9080 5478 9080 5478 9081 5477 9081 5479 9081 5478 9082 5479 9082 5468 9082 5468 9083 5479 9083 5480 9083 5468 9084 5480 9084 5469 9084 5481 9085 5482 9085 5467 9085 5467 9086 5482 9086 5483 9086 5467 9087 5483 9087 5484 9087 5484 9088 5483 9088 5485 9088 5486 9089 5487 9089 5467 9089 5467 9090 5487 9090 5488 9090 5467 9091 5488 9091 5473 9091 5478 9092 5489 9092 5490 9092 5472 9093 5491 9093 5467 9093 5467 9094 5491 9094 5492 9094 5467 9095 5492 9095 5493 9095 5494 9096 5495 9096 5483 9096 5483 9097 5495 9097 5496 9097 5483 9098 5496 9098 5485 9098 5489 9099 5478 9099 5497 9099 5497 9100 5478 9100 5498 9100 5497 9101 5498 9101 5499 9101 5490 9102 5500 9102 5478 9102 5478 9103 5500 9103 5501 9103 5478 9104 5501 9104 5476 9104 5493 9105 5502 9105 5467 9105 5467 9106 5502 9106 5503 9106 5467 9107 5503 9107 5486 9107 5475 9108 5504 9108 5467 9108 5467 9109 5504 9109 5505 9109 5467 9110 5505 9110 5506 9110 5506 9111 5507 9111 5467 9111 5467 9112 5507 9112 5508 9112 5467 9113 5508 9113 5509 9113 5509 9114 5510 9114 5467 9114 5467 9115 5510 9115 5511 9115 5467 9116 5511 9116 5481 9116 5499 9117 5512 9117 5497 9117 5497 9118 5512 9118 5513 9118 5497 9119 5513 9119 5514 9119 5494 9120 5515 9120 5495 9120 5495 9121 5515 9121 5516 9121 5495 9122 5516 9122 5517 9122 5517 9123 5516 9123 5518 9123 5517 9124 5518 9124 5519 9124 3341 9125 3342 9125 5520 9125 3341 9126 5520 9126 3340 9126 5521 9127 5522 9127 5523 9127 5523 9128 5522 9128 5524 9128 5523 9129 5524 9129 5525 9129 5525 9130 5524 9130 5526 9130 5525 9131 5526 9131 5527 9131 5528 9132 5529 9132 5530 9132 5530 9133 5531 9133 5528 9133 5528 9134 5531 9134 5532 9134 5528 9135 5532 9135 5533 9135 5533 9136 5532 9136 5534 9136 5533 9137 5534 9137 5535 9137 5535 9138 5534 9138 5536 9138 5537 9139 5521 9139 5529 9139 5529 9140 5521 9140 5538 9140 5529 9141 5538 9141 5530 9141 5537 9142 5539 9142 5521 9142 5521 9143 5539 9143 5540 9143 5521 9144 5540 9144 5541 9144 3336 9145 5542 9145 3335 9145 3335 9146 5542 9146 5543 9146 3335 9147 5543 9147 3334 9147 5541 9148 5544 9148 5521 9148 5521 9149 5544 9149 5545 9149 5521 9150 5545 9150 5522 9150 3340 9151 5520 9151 3339 9151 3339 9152 5520 9152 5546 9152 3339 9153 5546 9153 3338 9153 3338 9154 5546 9154 5547 9154 3338 9155 5547 9155 3337 9155 3337 9156 5547 9156 5548 9156 3337 9157 5548 9157 3336 9157 3336 9158 5548 9158 5549 9158 3336 9159 5549 9159 5542 9159 5550 9160 5551 9160 3344 9160 3344 9161 5551 9161 5552 9161 3344 9162 5552 9162 3343 9162 3343 9163 5552 9163 5553 9163 3343 9164 5553 9164 5554 9164 3342 9165 3343 9165 5520 9165 5520 9166 3343 9166 5554 9166 5520 9167 5554 9167 5536 9167 5536 9168 5554 9168 5555 9168 5536 9169 5555 9169 5535 9169 5543 9170 5556 9170 3334 9170 3334 9171 5556 9171 5557 9171 3334 9172 5557 9172 3333 9172 3333 9173 5557 9173 5558 9173 3333 9174 5558 9174 3332 9174 3332 9175 5558 9175 5559 9175 3332 9176 5559 9176 3373 9176 3373 9177 5559 9177 5560 9177 3373 9178 5560 9178 3372 9178 3372 9179 5560 9179 5561 9179 3372 9180 5561 9180 3371 9180 3371 9181 5561 9181 5562 9181 3371 9182 5562 9182 3370 9182 3370 9183 5562 9183 5563 9183 3370 9184 5563 9184 3369 9184 3369 9185 5563 9185 5564 9185 3369 9186 5564 9186 3368 9186 3368 9187 5564 9187 5565 9187 3368 9188 5565 9188 3367 9188 3367 9189 5565 9189 5566 9189 3367 9190 5566 9190 3366 9190 3366 9191 5566 9191 5567 9191 3366 9192 5567 9192 3365 9192 3365 9193 5567 9193 5568 9193 3365 9194 5568 9194 3364 9194 3364 9195 5568 9195 5569 9195 3364 9196 5569 9196 3363 9196 3363 9197 5569 9197 5570 9197 3363 9198 5570 9198 3362 9198 3362 9199 5570 9199 5571 9199 3362 9200 5571 9200 3361 9200 3361 9201 5571 9201 5572 9201 3361 9202 5572 9202 3360 9202 3360 9203 5572 9203 5573 9203 3360 9204 5573 9204 3359 9204 3359 9205 5573 9205 5574 9205 3359 9206 5574 9206 3358 9206 3358 9207 5574 9207 5575 9207 3358 9208 5575 9208 3357 9208 3357 9209 5575 9209 5576 9209 3357 9210 5576 9210 3356 9210 3356 9211 5576 9211 5577 9211 3356 9212 5577 9212 3355 9212 3355 9213 5577 9213 5578 9213 3355 9214 5578 9214 3354 9214 3354 9215 5578 9215 5579 9215 3354 9216 5579 9216 3353 9216 3353 9217 5579 9217 5580 9217 3353 9218 5580 9218 3352 9218 3352 9219 5580 9219 5581 9219 3352 9220 5581 9220 3351 9220 3351 9221 5581 9221 5582 9221 3351 9222 5582 9222 3350 9222 3350 9223 5582 9223 5583 9223 3350 9224 5583 9224 3349 9224 3349 9225 5583 9225 5584 9225 3349 9226 5584 9226 3348 9226 3348 9227 5584 9227 5585 9227 3348 9228 5585 9228 3347 9228 3347 9229 5585 9229 5586 9229 3347 9230 5586 9230 3346 9230 3346 9231 5586 9231 5587 9231 3346 9232 5587 9232 3345 9232 3345 9233 5587 9233 5588 9233 3345 9234 5588 9234 3344 9234 3344 9235 5588 9235 5589 9235 3344 9236 5589 9236 5550 9236 5590 9237 5591 9237 5592 9237 5592 9238 5591 9238 5593 9238 5594 9239 5595 9239 5596 9239 5596 9240 5595 9240 5597 9240 5598 9241 5596 9241 5599 9241 5599 9242 5596 9242 5597 9242 5599 9243 5597 9243 5600 9243 5600 9244 5597 9244 5601 9244 5600 9245 5601 9245 5602 9245 5603 9246 5592 9246 5604 9246 5604 9247 5592 9247 5593 9247 5604 9248 5593 9248 5605 9248 5605 9249 5593 9249 5606 9249 5605 9250 5606 9250 5607 9250 5602 9251 5608 9251 5600 9251 5600 9252 5608 9252 5609 9252 5600 9253 5609 9253 5610 9253 5610 9254 5609 9254 5611 9254 5612 9255 5613 9255 5607 9255 5607 9256 5613 9256 5614 9256 5607 9257 5614 9257 5605 9257 5607 9258 5615 9258 5612 9258 5612 9259 5615 9259 5616 9259 5612 9260 5616 9260 5617 9260 5617 9261 5616 9261 5618 9261 5617 9262 5618 9262 5619 9262 5619 9263 5618 9263 5620 9263 5619 9264 5620 9264 5621 9264 5621 9265 5620 9265 5622 9265 5621 9266 5622 9266 5623 9266 5623 9267 5622 9267 5624 9267 5623 9268 5624 9268 5609 9268 5609 9269 5624 9269 5625 9269 5609 9270 5625 9270 5611 9270 5626 9271 5627 9271 5628 9271 5628 9272 5627 9272 5629 9272 5628 9273 5629 9273 5630 9273 5630 9274 5629 9274 5631 9274 5632 9275 5633 9275 5634 9275 5634 9276 5633 9276 5635 9276 5636 9277 5637 9277 5638 9277 5639 9278 5640 9278 5641 9278 5642 9279 5643 9279 5637 9279 5644 9280 5645 9280 5634 9280 5634 9281 5645 9281 5646 9281 5634 9282 5646 9282 5632 9282 5636 9283 5638 9283 5647 9283 5648 9284 5649 9284 5629 9284 5629 9285 5649 9285 5650 9285 5629 9286 5650 9286 5631 9286 5635 9287 5651 9287 5634 9287 5634 9288 5651 9288 5652 9288 5634 9289 5652 9289 5653 9289 5641 9290 5654 9290 5639 9290 5639 9291 5654 9291 5655 9291 5639 9292 5655 9292 5638 9292 5638 9293 5655 9293 5656 9293 5638 9294 5656 9294 5647 9294 5637 9295 5643 9295 5638 9295 5638 9296 5643 9296 5657 9296 5638 9297 5657 9297 5658 9297 5659 9298 5660 9298 5637 9298 5637 9299 5660 9299 5661 9299 5637 9300 5661 9300 5642 9300 5637 9301 5662 9301 5659 9301 5659 9302 5662 9302 5663 9302 5659 9303 5663 9303 5664 9303 5664 9304 5663 9304 5665 9304 5664 9305 5665 9305 5666 9305 5666 9306 5665 9306 5667 9306 5666 9307 5667 9307 5653 9307 5653 9308 5667 9308 5648 9308 5653 9309 5648 9309 5634 9309 5634 9310 5648 9310 5629 9310 3396 9311 5668 9311 3395 9311 3395 9312 5668 9312 5669 9312 3395 9313 5669 9313 3394 9313 3394 9314 5669 9314 5670 9314 3394 9315 5670 9315 3393 9315 3393 9316 5670 9316 5671 9316 3393 9317 5671 9317 3392 9317 3392 9318 5671 9318 5672 9318 3392 9319 5672 9319 3391 9319 3391 9320 5672 9320 5673 9320 3391 9321 5673 9321 3390 9321 3390 9322 5673 9322 5674 9322 3390 9323 5674 9323 3389 9323 3389 9324 5674 9324 5675 9324 3389 9325 5675 9325 3388 9325 3388 9326 5675 9326 5676 9326 3388 9327 5676 9327 3387 9327 3387 9328 5676 9328 5677 9328 3387 9329 5677 9329 3386 9329 3386 9330 5677 9330 5678 9330 3386 9331 5678 9331 3385 9331 3385 9332 5678 9332 5679 9332 3385 9333 5679 9333 3384 9333 3384 9334 5679 9334 5680 9334 3384 9335 5680 9335 3383 9335 3383 9336 5680 9336 5681 9336 3383 9337 5681 9337 3382 9337 3382 9338 5681 9338 5682 9338 3382 9339 5682 9339 3381 9339 3381 9340 5682 9340 5683 9340 3381 9341 5683 9341 3380 9341 3380 9342 5683 9342 5684 9342 3380 9343 5684 9343 3379 9343 3379 9344 5684 9344 5685 9344 3379 9345 5685 9345 3378 9345 3378 9346 5685 9346 5686 9346 3378 9347 5686 9347 3377 9347 3377 9348 5686 9348 5687 9348 3377 9349 5687 9349 3376 9349 3376 9350 5687 9350 5688 9350 3376 9351 5688 9351 3375 9351 3375 9352 5688 9352 5689 9352 3375 9353 5689 9353 3374 9353 3374 9354 5689 9354 5690 9354 3374 9355 5690 9355 3414 9355 3414 9356 5690 9356 5691 9356 3414 9357 5691 9357 3413 9357 3413 9358 5691 9358 5692 9358 3413 9359 5692 9359 3412 9359 3412 9360 5692 9360 5693 9360 3412 9361 5693 9361 3411 9361 3411 9362 5693 9362 5694 9362 3411 9363 5694 9363 3410 9363 3410 9364 5694 9364 5695 9364 3410 9365 5695 9365 3409 9365 3409 9366 5695 9366 5696 9366 3409 9367 5696 9367 3408 9367 3408 9368 5696 9368 5697 9368 3408 9369 5697 9369 3407 9369 3407 9370 5697 9370 5698 9370 3407 9371 5698 9371 3406 9371 3406 9372 5698 9372 5699 9372 3406 9373 5699 9373 3405 9373 3405 9374 5699 9374 5700 9374 3405 9375 5700 9375 3404 9375 3404 9376 5700 9376 5701 9376 3404 9377 5701 9377 3403 9377 3403 9378 5701 9378 5702 9378 3403 9379 5702 9379 3402 9379 3402 9380 5702 9380 5703 9380 3402 9381 5703 9381 3401 9381 3401 9382 5703 9382 5704 9382 3401 9383 5704 9383 3400 9383 3400 9384 5704 9384 5705 9384 3400 9385 5705 9385 3399 9385 3399 9386 5705 9386 5706 9386 3399 9387 5706 9387 3398 9387 3398 9388 5706 9388 5707 9388 3398 9389 5707 9389 3397 9389 3397 9390 5707 9390 5708 9390 3397 9391 5708 9391 3396 9391 3396 9392 5708 9392 5668 9392 5709 9393 5710 9393 5711 9393 5711 9394 5710 9394 5712 9394 5711 9395 5712 9395 5713 9395 3439 9396 5714 9396 3438 9396 3438 9397 5714 9397 5715 9397 3438 9398 5715 9398 3437 9398 3437 9399 5715 9399 5716 9399 3437 9400 5716 9400 3436 9400 3443 9401 3444 9401 5717 9401 5713 9402 5718 9402 5711 9402 5711 9403 5718 9403 5719 9403 5711 9404 5719 9404 5720 9404 3469 9405 5721 9405 5722 9405 5723 9406 3434 9406 5724 9406 5724 9407 3434 9407 3435 9407 5724 9408 3435 9408 5725 9408 5725 9409 3435 9409 3436 9409 5725 9410 3436 9410 5726 9410 5726 9411 3436 9411 5716 9411 5717 9412 3444 9412 5727 9412 5727 9413 3444 9413 3445 9413 5727 9414 3445 9414 5728 9414 3452 9415 3453 9415 5729 9415 5730 9416 5731 9416 5732 9416 5732 9417 5731 9417 5733 9417 5732 9418 5733 9418 5734 9418 5735 9419 3462 9419 5736 9419 5736 9420 3462 9420 3463 9420 3443 9421 5717 9421 3442 9421 3442 9422 5717 9422 5737 9422 3442 9423 5737 9423 3477 9423 3477 9424 5737 9424 5738 9424 3477 9425 5738 9425 3476 9425 3476 9426 5738 9426 5739 9426 3476 9427 5739 9427 3475 9427 3419 9428 5740 9428 5741 9428 5742 9429 3428 9429 5743 9429 5743 9430 3428 9430 3429 9430 5743 9431 3429 9431 5744 9431 5729 9432 3453 9432 5745 9432 3463 9433 3464 9433 5736 9433 5736 9434 3464 9434 3465 9434 5736 9435 3465 9435 3466 9435 3419 9436 5741 9436 3418 9436 3418 9437 5741 9437 5746 9437 3418 9438 5746 9438 3417 9438 3417 9439 5746 9439 5747 9439 3417 9440 5747 9440 3416 9440 3416 9441 5747 9441 5748 9441 3416 9442 5748 9442 3415 9442 3415 9443 5748 9443 5749 9443 3415 9444 5749 9444 3441 9444 3441 9445 5749 9445 5750 9445 3441 9446 5750 9446 3440 9446 3440 9447 5750 9447 5751 9447 3440 9448 5751 9448 3439 9448 3439 9449 5751 9449 5752 9449 3439 9450 5752 9450 5714 9450 3450 9451 5753 9451 3449 9451 3449 9452 5753 9452 5754 9452 3449 9453 5754 9453 3448 9453 3448 9454 5754 9454 5755 9454 3448 9455 5755 9455 3447 9455 5756 9456 5757 9456 5730 9456 5730 9457 5757 9457 5758 9457 5730 9458 5758 9458 5731 9458 5742 9459 5736 9459 3428 9459 3428 9460 5736 9460 3466 9460 3428 9461 3466 9461 3427 9461 3427 9462 3466 9462 3467 9462 3427 9463 3467 9463 3426 9463 3426 9464 3467 9464 3468 9464 3426 9465 3468 9465 3425 9465 3425 9466 3468 9466 3469 9466 3425 9467 3469 9467 3424 9467 3424 9468 3469 9468 5722 9468 3424 9469 5722 9469 3423 9469 5759 9470 3431 9470 5760 9470 5760 9471 3431 9471 3430 9471 5760 9472 3430 9472 5723 9472 5723 9473 3430 9473 3433 9473 5723 9474 3433 9474 3434 9474 5755 9475 5761 9475 3447 9475 3447 9476 5761 9476 5762 9476 3447 9477 5762 9477 3446 9477 3446 9478 5762 9478 5763 9478 3446 9479 5763 9479 3445 9479 3445 9480 5763 9480 5764 9480 3445 9481 5764 9481 5728 9481 3452 9482 5729 9482 3451 9482 3451 9483 5729 9483 5765 9483 3451 9484 5765 9484 3450 9484 3450 9485 5765 9485 5766 9485 3450 9486 5766 9486 5753 9486 5740 9487 3419 9487 5767 9487 5767 9488 3419 9488 3420 9488 5767 9489 3420 9489 5768 9489 5768 9490 3420 9490 3421 9490 5768 9491 3421 9491 5769 9491 5739 9492 5770 9492 3475 9492 3475 9493 5770 9493 5771 9493 3475 9494 5771 9494 3474 9494 3474 9495 5771 9495 5772 9495 3474 9496 5772 9496 3473 9496 3473 9497 5772 9497 5773 9497 3473 9498 5773 9498 3472 9498 3472 9499 5773 9499 5774 9499 3472 9500 5774 9500 3471 9500 3471 9501 5774 9501 5721 9501 3471 9502 5721 9502 3470 9502 3470 9503 5721 9503 3469 9503 5769 9504 3421 9504 5722 9504 5722 9505 3421 9505 3422 9505 5722 9506 3422 9506 3423 9506 5775 9507 3429 9507 5759 9507 5759 9508 3429 9508 3432 9508 5759 9509 3432 9509 3431 9509 5720 9510 5744 9510 5711 9510 5711 9511 5744 9511 3429 9511 5711 9512 3429 9512 5776 9512 5776 9513 3429 9513 5775 9513 5777 9514 5778 9514 5730 9514 5730 9515 5778 9515 5779 9515 5730 9516 5779 9516 5756 9516 3453 9517 3454 9517 5745 9517 5745 9518 3454 9518 3455 9518 5745 9519 3455 9519 5780 9519 5780 9520 3455 9520 3456 9520 5780 9521 3456 9521 5781 9521 5781 9522 3456 9522 3457 9522 5781 9523 3457 9523 5782 9523 5782 9524 3457 9524 3458 9524 5782 9525 3458 9525 5730 9525 5730 9526 3458 9526 3459 9526 5730 9527 3459 9527 5777 9527 5777 9528 3459 9528 3460 9528 5777 9529 3460 9529 5735 9529 5735 9530 3460 9530 3461 9530 5735 9531 3461 9531 3462 9531 3500 9532 5783 9532 3499 9532 3499 9533 5783 9533 5784 9533 3499 9534 5784 9534 3498 9534 3498 9535 5784 9535 5785 9535 3498 9536 5785 9536 3497 9536 3497 9537 5785 9537 5786 9537 3497 9538 5786 9538 3496 9538 3496 9539 5786 9539 5787 9539 3496 9540 5787 9540 3495 9540 3495 9541 5787 9541 5788 9541 3495 9542 5788 9542 3494 9542 3494 9543 5788 9543 5789 9543 3494 9544 5789 9544 3493 9544 3493 9545 5789 9545 5790 9545 3493 9546 5790 9546 3492 9546 3492 9547 5790 9547 5791 9547 3492 9548 5791 9548 3491 9548 3491 9549 5791 9549 5792 9549 3491 9550 5792 9550 3490 9550 3490 9551 5792 9551 5793 9551 3490 9552 5793 9552 3489 9552 3489 9553 5793 9553 5794 9553 3489 9554 5794 9554 3488 9554 3488 9555 5794 9555 5795 9555 3488 9556 5795 9556 3487 9556 3487 9557 5795 9557 5796 9557 3487 9558 5796 9558 3486 9558 3486 9559 5796 9559 5797 9559 3486 9560 5797 9560 3485 9560 3485 9561 5797 9561 5798 9561 3485 9562 5798 9562 3484 9562 3484 9563 5798 9563 5799 9563 3484 9564 5799 9564 3483 9564 3483 9565 5799 9565 5800 9565 3483 9566 5800 9566 3482 9566 3482 9567 5800 9567 5801 9567 3482 9568 5801 9568 3481 9568 3481 9569 5801 9569 5802 9569 3481 9570 5802 9570 3480 9570 3480 9571 5802 9571 5803 9571 3480 9572 5803 9572 3479 9572 3479 9573 5803 9573 5804 9573 3479 9574 5804 9574 3478 9574 3478 9575 5804 9575 5805 9575 3478 9576 5805 9576 3518 9576 3518 9577 5805 9577 5806 9577 3518 9578 5806 9578 3517 9578 3517 9579 5806 9579 5807 9579 3517 9580 5807 9580 3516 9580 3516 9581 5807 9581 5808 9581 3516 9582 5808 9582 3515 9582 3515 9583 5808 9583 5809 9583 3515 9584 5809 9584 3514 9584 3514 9585 5809 9585 5810 9585 3514 9586 5810 9586 3513 9586 3513 9587 5810 9587 5811 9587 3513 9588 5811 9588 3512 9588 3512 9589 5811 9589 5812 9589 3512 9590 5812 9590 3511 9590 3511 9591 5812 9591 5813 9591 3511 9592 5813 9592 3510 9592 3510 9593 5813 9593 5814 9593 3510 9594 5814 9594 3509 9594 3509 9595 5814 9595 5815 9595 3509 9596 5815 9596 3508 9596 3508 9597 5815 9597 5816 9597 3508 9598 5816 9598 3507 9598 3507 9599 5816 9599 5817 9599 3507 9600 5817 9600 3506 9600 3506 9601 5817 9601 5818 9601 3506 9602 5818 9602 3505 9602 3505 9603 5818 9603 5819 9603 3505 9604 5819 9604 3504 9604 3504 9605 5819 9605 5820 9605 3504 9606 5820 9606 3503 9606 3503 9607 5820 9607 5821 9607 3503 9608 5821 9608 3502 9608 3502 9609 5821 9609 5822 9609 3502 9610 5822 9610 3501 9610 3501 9611 5822 9611 5823 9611 3501 9612 5823 9612 3500 9612 3500 9613 5823 9613 5783 9613 5824 9614 5825 9614 5826 9614 5827 9615 5828 9615 5829 9615 5830 9616 5831 9616 5828 9616 5832 9617 5833 9617 5834 9617 5824 9618 5826 9618 5829 9618 5829 9619 5826 9619 5835 9619 5829 9620 5835 9620 5827 9620 5828 9621 5831 9621 5829 9621 5829 9622 5831 9622 5836 9622 5829 9623 5836 9623 5837 9623 5838 9624 3528 9624 3523 9624 5839 9625 5840 9625 5841 9625 5842 9626 5843 9626 3540 9626 5844 9627 5845 9627 5846 9627 5839 9628 5841 9628 5847 9628 3540 9629 5843 9629 3539 9629 3539 9630 5843 9630 5848 9630 3539 9631 5848 9631 3538 9631 3538 9632 5848 9632 5849 9632 3538 9633 5849 9633 3537 9633 3540 9634 3541 9634 5842 9634 5842 9635 3541 9635 3542 9635 5842 9636 3542 9636 5850 9636 5850 9637 3542 9637 3543 9637 5850 9638 3543 9638 5851 9638 5851 9639 3543 9639 5852 9639 5852 9640 3543 9640 3544 9640 5852 9641 3544 9641 5853 9641 5853 9642 3544 9642 3545 9642 5853 9643 3545 9643 5854 9643 5854 9644 3545 9644 3546 9644 5854 9645 3546 9645 5855 9645 5828 9646 5856 9646 5830 9646 5830 9647 5856 9647 5846 9647 5830 9648 5846 9648 5857 9648 5857 9649 5846 9649 5845 9649 5838 9650 3523 9650 5858 9650 5858 9651 3523 9651 3524 9651 5858 9652 3524 9652 3522 9652 5859 9653 5860 9653 5861 9653 5861 9654 5860 9654 5862 9654 5863 9655 5864 9655 3535 9655 3535 9656 5864 9656 3534 9656 3526 9657 3527 9657 5865 9657 5865 9658 3527 9658 3528 9658 5865 9659 3528 9659 5866 9659 5866 9660 3528 9660 5838 9660 5866 9661 5838 9661 5867 9661 5832 9662 5834 9662 5841 9662 5841 9663 5834 9663 5868 9663 5841 9664 5868 9664 5847 9664 5869 9665 5841 9665 3521 9665 5864 9666 5870 9666 3534 9666 3534 9667 5870 9667 5871 9667 3534 9668 5871 9668 3533 9668 3533 9669 5871 9669 5872 9669 3533 9670 5872 9670 3532 9670 3532 9671 5872 9671 5873 9671 3532 9672 5873 9672 3531 9672 3531 9673 5873 9673 5874 9673 3531 9674 5874 9674 3530 9674 3530 9675 5874 9675 5875 9675 3530 9676 5875 9676 3529 9676 3529 9677 5875 9677 5855 9677 3529 9678 5855 9678 3536 9678 3536 9679 5855 9679 3546 9679 5863 9680 3535 9680 5865 9680 5865 9681 3535 9681 3525 9681 5865 9682 3525 9682 3526 9682 3537 9683 5849 9683 3519 9683 3519 9684 5849 9684 5876 9684 3519 9685 5876 9685 3520 9685 3520 9686 5876 9686 5877 9686 3520 9687 5877 9687 3521 9687 3521 9688 5877 9688 5878 9688 3521 9689 5878 9689 5869 9689 5844 9690 5846 9690 5879 9690 5879 9691 5846 9691 5880 9691 5879 9692 5880 9692 5881 9692 5862 9693 5882 9693 5861 9693 5861 9694 5882 9694 5883 9694 5861 9695 5883 9695 5884 9695 5884 9696 5883 9696 5885 9696 5884 9697 5885 9697 5886 9697 5886 9698 5885 9698 5887 9698 5840 9699 5888 9699 5841 9699 5841 9700 5888 9700 5889 9700 5841 9701 5889 9701 3521 9701 3521 9702 5889 9702 5890 9702 3521 9703 5890 9703 3522 9703 3522 9704 5890 9704 5891 9704 3522 9705 5891 9705 5858 9705 5858 9706 5891 9706 5881 9706 5858 9707 5881 9707 5892 9707 5892 9708 5881 9708 5880 9708 5867 9709 5838 9709 5893 9709 5893 9710 5838 9710 5894 9710 5893 9711 5894 9711 5885 9711 5885 9712 5894 9712 5895 9712 5885 9713 5895 9713 5887 9713 18038 36054 18039 36054 18040 36054 18040 36055 18039 36055 18041 36055 18040 36056 18041 36056 18042 36056 18042 36057 18041 36057 18043 36057 18042 36058 18043 36058 18044 36058 18044 36059 18043 36059 18045 36059 18044 36060 18045 36060 18046 36060 18046 36061 18045 36061 18047 36061 18046 36062 18047 36062 18048 36062 18048 36063 18047 36063 18049 36063 18048 36064 18049 36064 18050 36064 18050 36065 18049 36065 18051 36065 18050 36066 18051 36066 18052 36066 18052 36067 18051 36067 18053 36067 18052 36068 18053 36068 18054 36068 18054 36069 18053 36069 18055 36069 18054 36070 18055 36070 18056 36070 18056 36071 18055 36071 18057 36071 18056 36072 18057 36072 18058 36072 18058 36073 18057 36073 18059 36073 18058 36074 18059 36074 18060 36074 18060 36075 18059 36075 18061 36075 18060 36076 18061 36076 18062 36076 18062 36077 18061 36077 18063 36077 18062 36078 18063 36078 18064 36078 18064 36079 18063 36079 18065 36079 18064 36080 18065 36080 18066 36080 18066 36081 18065 36081 18067 36081 18066 36082 18067 36082 18068 36082 18068 36083 18067 36083 18069 36083 18068 36084 18069 36084 18070 36084 18070 36085 18069 36085 18071 36085 18070 36086 18071 36086 18072 36086 18072 36087 18071 36087 18073 36087 18072 36088 18073 36088 18074 36088 18074 36089 18073 36089 18075 36089 18074 36090 18075 36090 18076 36090 18076 36091 18075 36091 18077 36091 18076 36092 18077 36092 18078 36092 18078 36093 18077 36093 18079 36093 18078 36094 18079 36094 18080 36094 18080 36095 18079 36095 18081 36095 18080 36096 18081 36096 18082 36096 18082 36097 18081 36097 18083 36097 18082 36098 18083 36098 18084 36098 18084 36099 18083 36099 18085 36099 18084 36100 18085 36100 18086 36100 18086 36101 18085 36101 18087 36101 18086 36102 18087 36102 18088 36102 18088 36103 18087 36103 18089 36103 18088 36104 18089 36104 18090 36104 18090 36105 18089 36105 18091 36105 18090 36106 18091 36106 18092 36106 18092 36107 18091 36107 18093 36107 18092 36108 18093 36108 18094 36108 18094 36109 18093 36109 18095 36109 18094 36110 18095 36110 18096 36110 18096 36111 18095 36111 18097 36111 18096 36112 18097 36112 18098 36112 18098 36113 18097 36113 18099 36113 18098 36114 18099 36114 18100 36114 18100 36115 18099 36115 18101 36115 18100 36116 18101 36116 18102 36116 18102 36117 18101 36117 18103 36117 18102 36118 18103 36118 18104 36118 18104 36119 18103 36119 18105 36119 18104 36120 18105 36120 18106 36120 18106 36121 18105 36121 18107 36121 18106 36122 18107 36122 18108 36122 18108 36123 18107 36123 18109 36123 18108 36124 18109 36124 18038 36124 18038 36125 18109 36125 18039 36125 18110 36126 18111 36126 18112 36126 18112 36127 18111 36127 18113 36127 18112 36128 18113 36128 18114 36128 18114 36129 18113 36129 18115 36129 18114 36130 18115 36130 18116 36130 18116 36131 18115 36131 18117 36131 18116 36132 18117 36132 18118 36132 18118 36133 18117 36133 18119 36133 18118 36134 18119 36134 18120 36134 18120 36135 18119 36135 18121 36135 18120 36136 18121 36136 18122 36136 18122 36137 18121 36137 18123 36137 18122 36138 18123 36138 18124 36138 18124 36139 18123 36139 18125 36139 18124 36140 18125 36140 18126 36140 18126 36141 18125 36141 18127 36141 18126 36142 18127 36142 18128 36142 18128 36143 18127 36143 18129 36143 18128 36144 18129 36144 18130 36144 18130 36145 18129 36145 18131 36145 18130 36146 18131 36146 18132 36146 18132 36147 18131 36147 18133 36147 18132 36148 18133 36148 18134 36148 18134 36149 18133 36149 18135 36149 18134 36150 18135 36150 18136 36150 18136 36151 18135 36151 18137 36151 18136 36152 18137 36152 18138 36152 18138 36153 18137 36153 18139 36153 18138 36154 18139 36154 18140 36154 18140 36155 18139 36155 18141 36155 18140 36156 18141 36156 18142 36156 18142 36157 18141 36157 18143 36157 18142 36158 18143 36158 18144 36158 18144 36159 18143 36159 18145 36159 18144 36160 18145 36160 18146 36160 18146 36161 18145 36161 18147 36161 18146 36162 18147 36162 18148 36162 18148 36163 18147 36163 18149 36163 18148 36164 18149 36164 18150 36164 18150 36165 18149 36165 18151 36165 18150 36166 18151 36166 18152 36166 18152 36167 18151 36167 18153 36167 18152 36168 18153 36168 18154 36168 18154 36169 18153 36169 18155 36169 18154 36170 18155 36170 18156 36170 18156 36171 18155 36171 18157 36171 18156 36172 18157 36172 18158 36172 18158 36173 18157 36173 18159 36173 18158 36174 18159 36174 18160 36174 18160 36175 18159 36175 18161 36175 18160 36176 18161 36176 18162 36176 18162 36177 18161 36177 18163 36177 18162 36178 18163 36178 18164 36178 18164 36179 18163 36179 18165 36179 18164 36180 18165 36180 18166 36180 18166 36181 18165 36181 18167 36181 18166 36182 18167 36182 18168 36182 18168 36183 18167 36183 18169 36183 18168 36184 18169 36184 18170 36184 18170 36185 18169 36185 18171 36185 18170 36186 18171 36186 18172 36186 18172 36187 18171 36187 18173 36187 18172 36188 18173 36188 18174 36188 18174 36189 18173 36189 18175 36189 18174 36190 18175 36190 18176 36190 18176 36191 18175 36191 18177 36191 18176 36192 18177 36192 18178 36192 18178 36193 18177 36193 18179 36193 18178 36194 18179 36194 18180 36194 18180 36195 18179 36195 18181 36195 18180 36196 18181 36196 18110 36196 18110 36197 18181 36197 18111 36197 18182 36198 18183 36198 18184 36198 18182 36199 18184 36199 18185 36199 18185 36200 18184 36200 18186 36200 18185 36201 18186 36201 18187 36201 18187 36202 18186 36202 18188 36202 18187 36203 18188 36203 18189 36203 18190 36204 18191 36204 18192 36204 18192 36205 18191 36205 18193 36205 18192 36206 18193 36206 18194 36206 18194 36207 18193 36207 18195 36207 18194 36208 18195 36208 18196 36208 18196 36209 18195 36209 18197 36209 18196 36210 18197 36210 18198 36210 18198 36211 18197 36211 18199 36211 18198 36212 18199 36212 18200 36212 18200 36213 18199 36213 18201 36213 18200 36214 18201 36214 18202 36214 18202 36215 18201 36215 18203 36215 18202 36216 18203 36216 18204 36216 18204 36217 18203 36217 18205 36217 18204 36218 18205 36218 18206 36218 18206 36219 18205 36219 18207 36219 18206 36220 18207 36220 18208 36220 18208 36221 18207 36221 18209 36221 18208 36222 18209 36222 18210 36222 18210 36223 18209 36223 18211 36223 18210 36224 18211 36224 18212 36224 18212 36225 18211 36225 18213 36225 18212 36226 18213 36226 18214 36226 18214 36227 18213 36227 18215 36227 18214 36228 18215 36228 18216 36228 18216 36229 18215 36229 18217 36229 18216 36230 18217 36230 18218 36230 18218 36231 18217 36231 18219 36231 18218 36232 18219 36232 18220 36232 18220 36233 18219 36233 18221 36233 18220 36234 18221 36234 18222 36234 18222 36235 18221 36235 18223 36235 18222 36236 18223 36236 18224 36236 18224 36237 18223 36237 18225 36237 18224 36238 18225 36238 18226 36238 18226 36239 18225 36239 18227 36239 18226 36240 18227 36240 18228 36240 18228 36241 18227 36241 18229 36241 18228 36242 18229 36242 18230 36242 18230 36243 18229 36243 18231 36243 18230 36244 18231 36244 18232 36244 18232 36245 18231 36245 18233 36245 18232 36246 18233 36246 18234 36246 18234 36247 18233 36247 18235 36247 18234 36248 18235 36248 18236 36248 18236 36249 18235 36249 18237 36249 18236 36250 18237 36250 18238 36250 18238 36251 18237 36251 18239 36251 18238 36252 18239 36252 18240 36252 18240 36253 18239 36253 18241 36253 18240 36254 18241 36254 18242 36254 18242 36255 18241 36255 18243 36255 18242 36256 18243 36256 18244 36256 18244 36257 18243 36257 18245 36257 18244 36258 18245 36258 18246 36258 18246 36259 18245 36259 18247 36259 18246 36260 18247 36260 18248 36260 18248 36261 18247 36261 18249 36261 18248 36262 18249 36262 18250 36262 18250 36263 18249 36263 18251 36263 18250 36264 18251 36264 18252 36264 18252 36265 18251 36265 18253 36265 18252 36266 18253 36266 18254 36266 18254 36267 18253 36267 18255 36267 18254 36268 18255 36268 18256 36268 18256 36269 18255 36269 18257 36269 18256 36270 18257 36270 18258 36270 18258 36271 18257 36271 18259 36271 18258 36272 18259 36272 18260 36272 18260 36273 18259 36273 18261 36273 18260 36274 18261 36274 18190 36274 18190 36275 18261 36275 18191 36275 18262 36276 18263 36276 18264 36276 18264 36277 18263 36277 18265 36277 18264 36278 18265 36278 18266 36278 18266 36279 18265 36279 18267 36279 18266 36280 18267 36280 18268 36280 18268 36281 18267 36281 18269 36281 18268 36282 18269 36282 18270 36282 18270 36283 18269 36283 18271 36283 18270 36284 18271 36284 18272 36284 18272 36285 18271 36285 18273 36285 18272 36286 18273 36286 18274 36286 18274 36287 18273 36287 18275 36287 18274 36288 18275 36288 18276 36288 18276 36289 18275 36289 18277 36289 18276 36290 18277 36290 18278 36290 18278 36291 18277 36291 18279 36291 18278 36292 18279 36292 18280 36292 18280 36293 18279 36293 18281 36293 18280 36294 18281 36294 18282 36294 18282 36295 18281 36295 18283 36295 18282 36296 18283 36296 18284 36296 18284 36297 18283 36297 18285 36297 18284 36298 18285 36298 18286 36298 18286 36299 18285 36299 18287 36299 18286 36300 18287 36300 18288 36300 18288 36301 18287 36301 18289 36301 18288 36302 18289 36302 18290 36302 18290 36303 18289 36303 18291 36303 18290 36304 18291 36304 18292 36304 18292 36305 18291 36305 18293 36305 18292 36306 18293 36306 18294 36306 18294 36307 18293 36307 18295 36307 18294 36308 18295 36308 18296 36308 18296 36309 18295 36309 18297 36309 18296 36310 18297 36310 18298 36310 18298 36311 18297 36311 18299 36311 18298 36312 18299 36312 18300 36312 18300 36313 18299 36313 18301 36313 18300 36314 18301 36314 18302 36314 18302 36315 18301 36315 18303 36315 18302 36316 18303 36316 18304 36316 18304 36317 18303 36317 18305 36317 18304 36318 18305 36318 18306 36318 18306 36319 18305 36319 18307 36319 18306 36320 18307 36320 18308 36320 18308 36321 18307 36321 18309 36321 18308 36322 18309 36322 18310 36322 18310 36323 18309 36323 18311 36323 18310 36324 18311 36324 18312 36324 18312 36325 18311 36325 18313 36325 18312 36326 18313 36326 18314 36326 18314 36327 18313 36327 18315 36327 18314 36328 18315 36328 18316 36328 18316 36329 18315 36329 18317 36329 18316 36330 18317 36330 18318 36330 18318 36331 18317 36331 18319 36331 18318 36332 18319 36332 18320 36332 18320 36333 18319 36333 18321 36333 18320 36334 18321 36334 18322 36334 18322 36335 18321 36335 18323 36335 18322 36336 18323 36336 18324 36336 18324 36337 18323 36337 18325 36337 18324 36338 18325 36338 18326 36338 18326 36339 18325 36339 18327 36339 18326 36340 18327 36340 18328 36340 18328 36341 18327 36341 18329 36341 18328 36342 18329 36342 18330 36342 18330 36343 18329 36343 18331 36343 18330 36344 18331 36344 18332 36344 18332 36345 18331 36345 18333 36345 18332 36346 18333 36346 18262 36346 18262 36347 18333 36347 18263 36347 18334 36348 18082 36348 18335 36348 18335 36349 18082 36349 18084 36349 18335 36350 18084 36350 18336 36350 18336 36351 18084 36351 18086 36351 18336 36352 18086 36352 18337 36352 18337 36353 18086 36353 18088 36353 18337 36354 18088 36354 18338 36354 18338 36355 18088 36355 18090 36355 18338 36356 18090 36356 18339 36356 18339 36357 18090 36357 18092 36357 18339 36358 18092 36358 18340 36358 18340 36359 18092 36359 18094 36359 18340 36360 18094 36360 18341 36360 18341 36361 18094 36361 18096 36361 18341 36362 18096 36362 18342 36362 18342 36363 18096 36363 18098 36363 18342 36364 18098 36364 18343 36364 18343 36365 18098 36365 18100 36365 18343 36366 18100 36366 18344 36366 18344 36367 18100 36367 18102 36367 18344 36368 18102 36368 18345 36368 18345 36369 18102 36369 18104 36369 18345 36370 18104 36370 18346 36370 18346 36371 18104 36371 18106 36371 18346 36372 18106 36372 18347 36372 18347 36373 18106 36373 18108 36373 18347 36374 18108 36374 18348 36374 18348 36375 18108 36375 18038 36375 18348 36376 18038 36376 18349 36376 18349 36377 18038 36377 18040 36377 18349 36378 18040 36378 18350 36378 18350 36379 18040 36379 18042 36379 18350 36380 18042 36380 18351 36380 18351 36381 18042 36381 18044 36381 18351 36382 18044 36382 18352 36382 18352 36383 18044 36383 18046 36383 18352 36384 18046 36384 18353 36384 18353 36385 18046 36385 18048 36385 18353 36386 18048 36386 18354 36386 18354 36387 18048 36387 18050 36387 18354 36388 18050 36388 18355 36388 18355 36389 18050 36389 18052 36389 18355 36390 18052 36390 18356 36390 18356 36391 18052 36391 18054 36391 18356 36392 18054 36392 18357 36392 18357 36393 18054 36393 18056 36393 18357 36394 18056 36394 18358 36394 18358 36395 18056 36395 18058 36395 18358 36396 18058 36396 18359 36396 18359 36397 18058 36397 18060 36397 18359 36398 18060 36398 18360 36398 18360 36399 18060 36399 18062 36399 18360 36400 18062 36400 18361 36400 18361 36401 18062 36401 18064 36401 18361 36402 18064 36402 18362 36402 18362 36403 18064 36403 18066 36403 18362 36404 18066 36404 18363 36404 18363 36405 18066 36405 18068 36405 18363 36406 18068 36406 18364 36406 18364 36407 18068 36407 18070 36407 18364 36408 18070 36408 18365 36408 18365 36409 18070 36409 18072 36409 18365 36410 18072 36410 18366 36410 18366 36411 18072 36411 18074 36411 18366 36412 18074 36412 18367 36412 18367 36413 18074 36413 18076 36413 18367 36414 18076 36414 18368 36414 18368 36415 18076 36415 18078 36415 18368 36416 18078 36416 18369 36416 18369 36417 18078 36417 18080 36417 18369 36418 18080 36418 18334 36418 18334 36419 18080 36419 18082 36419 18370 36420 18234 36420 18371 36420 18371 36421 18234 36421 18236 36421 18371 36422 18236 36422 18372 36422 18372 36423 18236 36423 18238 36423 18372 36424 18238 36424 18373 36424 18373 36425 18238 36425 18240 36425 18373 36426 18240 36426 18374 36426 18374 36427 18240 36427 18242 36427 18374 36428 18242 36428 18375 36428 18375 36429 18242 36429 18244 36429 18375 36430 18244 36430 18376 36430 18376 36431 18244 36431 18246 36431 18376 36432 18246 36432 18377 36432 18377 36433 18246 36433 18248 36433 18377 36434 18248 36434 18378 36434 18378 36435 18248 36435 18250 36435 18378 36436 18250 36436 18379 36436 18379 36437 18250 36437 18252 36437 18379 36438 18252 36438 18380 36438 18380 36439 18252 36439 18254 36439 18380 36440 18254 36440 18381 36440 18381 36441 18254 36441 18256 36441 18381 36442 18256 36442 18382 36442 18382 36443 18256 36443 18258 36443 18382 36444 18258 36444 18383 36444 18383 36445 18258 36445 18260 36445 18383 36446 18260 36446 18384 36446 18384 36447 18260 36447 18190 36447 18384 36448 18190 36448 18385 36448 18385 36449 18190 36449 18192 36449 18385 36450 18192 36450 18386 36450 18386 36451 18192 36451 18194 36451 18386 36452 18194 36452 18387 36452 18387 36453 18194 36453 18196 36453 18387 36454 18196 36454 18388 36454 18388 36455 18196 36455 18198 36455 18388 36456 18198 36456 18389 36456 18389 36457 18198 36457 18200 36457 18389 36458 18200 36458 18390 36458 18390 36459 18200 36459 18202 36459 18390 36460 18202 36460 18391 36460 18391 36461 18202 36461 18204 36461 18391 36462 18204 36462 18392 36462 18392 36463 18204 36463 18206 36463 18392 36464 18206 36464 18393 36464 18393 36465 18206 36465 18208 36465 18393 36466 18208 36466 18394 36466 18394 36467 18208 36467 18210 36467 18394 36468 18210 36468 18395 36468 18395 36469 18210 36469 18212 36469 18395 36470 18212 36470 18396 36470 18396 36471 18212 36471 18214 36471 18396 36472 18214 36472 18397 36472 18397 36473 18214 36473 18216 36473 18397 36474 18216 36474 18398 36474 18398 36475 18216 36475 18218 36475 18398 36476 18218 36476 18399 36476 18399 36477 18218 36477 18220 36477 18399 36478 18220 36478 18400 36478 18400 36479 18220 36479 18222 36479 18400 36480 18222 36480 18401 36480 18401 36481 18222 36481 18224 36481 18401 36482 18224 36482 18402 36482 18402 36483 18224 36483 18226 36483 18402 36484 18226 36484 18403 36484 18403 36485 18226 36485 18228 36485 18403 36486 18228 36486 18404 36486 18404 36487 18228 36487 18230 36487 18404 36488 18230 36488 18405 36488 18405 36489 18230 36489 18232 36489 18405 36490 18232 36490 18370 36490 18370 36491 18232 36491 18234 36491 18406 36492 18154 36492 18407 36492 18407 36493 18154 36493 18156 36493 18407 36494 18156 36494 18408 36494 18408 36495 18156 36495 18158 36495 18408 36496 18158 36496 18409 36496 18409 36497 18158 36497 18160 36497 18409 36498 18160 36498 18410 36498 18410 36499 18160 36499 18162 36499 18410 36500 18162 36500 18411 36500 18411 36501 18162 36501 18164 36501 18411 36502 18164 36502 18412 36502 18412 36503 18164 36503 18166 36503 18412 36504 18166 36504 18413 36504 18413 36505 18166 36505 18168 36505 18413 36506 18168 36506 18414 36506 18414 36507 18168 36507 18170 36507 18414 36508 18170 36508 18415 36508 18415 36509 18170 36509 18172 36509 18415 36510 18172 36510 18416 36510 18416 36511 18172 36511 18174 36511 18416 36512 18174 36512 18417 36512 18417 36513 18174 36513 18176 36513 18417 36514 18176 36514 18418 36514 18418 36515 18176 36515 18178 36515 18418 36516 18178 36516 18419 36516 18419 36517 18178 36517 18180 36517 18419 36518 18180 36518 18420 36518 18420 36519 18180 36519 18110 36519 18420 36520 18110 36520 18421 36520 18421 36521 18110 36521 18112 36521 18421 36522 18112 36522 18422 36522 18422 36523 18112 36523 18114 36523 18422 36524 18114 36524 18423 36524 18423 36525 18114 36525 18116 36525 18423 36526 18116 36526 18424 36526 18424 36527 18116 36527 18118 36527 18424 36528 18118 36528 18425 36528 18425 36529 18118 36529 18120 36529 18425 36530 18120 36530 18426 36530 18426 36531 18120 36531 18122 36531 18426 36532 18122 36532 18427 36532 18427 36533 18122 36533 18124 36533 18427 36534 18124 36534 18428 36534 18428 36535 18124 36535 18126 36535 18428 36536 18126 36536 18429 36536 18429 36537 18126 36537 18128 36537 18429 36538 18128 36538 18430 36538 18430 36539 18128 36539 18130 36539 18430 36540 18130 36540 18431 36540 18431 36541 18130 36541 18132 36541 18431 36542 18132 36542 18432 36542 18432 36543 18132 36543 18134 36543 18432 36544 18134 36544 18433 36544 18433 36545 18134 36545 18136 36545 18433 36546 18136 36546 18434 36546 18434 36547 18136 36547 18138 36547 18434 36548 18138 36548 18435 36548 18435 36549 18138 36549 18140 36549 18435 36550 18140 36550 18436 36550 18436 36551 18140 36551 18142 36551 18436 36552 18142 36552 18437 36552 18437 36553 18142 36553 18144 36553 18437 36554 18144 36554 18438 36554 18438 36555 18144 36555 18146 36555 18438 36556 18146 36556 18439 36556 18439 36557 18146 36557 18148 36557 18439 36558 18148 36558 18440 36558 18440 36559 18148 36559 18150 36559 18440 36560 18150 36560 18441 36560 18441 36561 18150 36561 18152 36561 18441 36562 18152 36562 18406 36562 18406 36563 18152 36563 18154 36563 18442 36564 18306 36564 18443 36564 18443 36565 18306 36565 18308 36565 18443 36566 18308 36566 18444 36566 18444 36567 18308 36567 18310 36567 18444 36568 18310 36568 18445 36568 18445 36569 18310 36569 18312 36569 18445 36570 18312 36570 18446 36570 18446 36571 18312 36571 18314 36571 18446 36572 18314 36572 18447 36572 18447 36573 18314 36573 18316 36573 18447 36574 18316 36574 18448 36574 18448 36575 18316 36575 18318 36575 18448 36576 18318 36576 18449 36576 18449 36577 18318 36577 18320 36577 18449 36578 18320 36578 18450 36578 18450 36579 18320 36579 18322 36579 18450 36580 18322 36580 18451 36580 18451 36581 18322 36581 18324 36581 18451 36582 18324 36582 18452 36582 18452 36583 18324 36583 18326 36583 18452 36584 18326 36584 18453 36584 18453 36585 18326 36585 18328 36585 18453 36586 18328 36586 18454 36586 18454 36587 18328 36587 18330 36587 18454 36588 18330 36588 18455 36588 18455 36589 18330 36589 18332 36589 18455 36590 18332 36590 18456 36590 18456 36591 18332 36591 18262 36591 18456 36592 18262 36592 18457 36592 18457 36593 18262 36593 18264 36593 18457 36594 18264 36594 18458 36594 18458 36595 18264 36595 18266 36595 18458 36596 18266 36596 18459 36596 18459 36597 18266 36597 18268 36597 18459 36598 18268 36598 18460 36598 18460 36599 18268 36599 18270 36599 18460 36600 18270 36600 18461 36600 18461 36601 18270 36601 18272 36601 18461 36602 18272 36602 18462 36602 18462 36603 18272 36603 18274 36603 18462 36604 18274 36604 18463 36604 18463 36605 18274 36605 18276 36605 18463 36606 18276 36606 18464 36606 18464 36607 18276 36607 18278 36607 18464 36608 18278 36608 18465 36608 18465 36609 18278 36609 18280 36609 18465 36610 18280 36610 18466 36610 18466 36611 18280 36611 18282 36611 18466 36612 18282 36612 18467 36612 18467 36613 18282 36613 18284 36613 18467 36614 18284 36614 18468 36614 18468 36615 18284 36615 18286 36615 18468 36616 18286 36616 18469 36616 18469 36617 18286 36617 18288 36617 18469 36618 18288 36618 18470 36618 18470 36619 18288 36619 18290 36619 18470 36620 18290 36620 18471 36620 18471 36621 18290 36621 18292 36621 18471 36622 18292 36622 18472 36622 18472 36623 18292 36623 18294 36623 18472 36624 18294 36624 18473 36624 18473 36625 18294 36625 18296 36625 18473 36626 18296 36626 18474 36626 18474 36627 18296 36627 18298 36627 18474 36628 18298 36628 18475 36628 18475 36629 18298 36629 18300 36629 18475 36630 18300 36630 18476 36630 18476 36631 18300 36631 18302 36631 18476 36632 18302 36632 18477 36632 18477 36633 18302 36633 18304 36633 18477 36634 18304 36634 18442 36634 18442 36635 18304 36635 18306 36635 18179 36636 18177 36636 18478 36636 18177 36637 18175 36637 18478 36637 18478 36638 18175 36638 18173 36638 18478 36639 18173 36639 18171 36639 18101 36640 18099 36640 18113 36640 18171 36641 18169 36641 18478 36641 18478 36642 18169 36642 18167 36642 18478 36643 18167 36643 18479 36643 18479 36644 18167 36644 18165 36644 18479 36645 18165 36645 18163 36645 18109 36646 18478 36646 18039 36646 18039 36647 18478 36647 18480 36647 18109 36648 18107 36648 18478 36648 18478 36649 18107 36649 18105 36649 18478 36650 18105 36650 18103 36650 18101 36651 18113 36651 18103 36651 18103 36652 18113 36652 18111 36652 18103 36653 18111 36653 18478 36653 18478 36654 18111 36654 18181 36654 18478 36655 18181 36655 18179 36655 18119 36656 18095 36656 18093 36656 18045 36657 18043 36657 18480 36657 18480 36658 18043 36658 18041 36658 18480 36659 18041 36659 18039 36659 18071 36660 18069 36660 18481 36660 18163 36661 18161 36661 18479 36661 18479 36662 18161 36662 18159 36662 18479 36663 18159 36663 18157 36663 18053 36664 18051 36664 18480 36664 18095 36665 18119 36665 18097 36665 18097 36666 18119 36666 18117 36666 18097 36667 18117 36667 18099 36667 18099 36668 18117 36668 18115 36668 18099 36669 18115 36669 18113 36669 18157 36670 18155 36670 18479 36670 18479 36671 18155 36671 18153 36671 18479 36672 18153 36672 18151 36672 18127 36673 18125 36673 18089 36673 18089 36674 18125 36674 18123 36674 18481 36675 18063 36675 18061 36675 18061 36676 18059 36676 18481 36676 18481 36677 18059 36677 18057 36677 18481 36678 18057 36678 18480 36678 18480 36679 18057 36679 18055 36679 18480 36680 18055 36680 18053 36680 18051 36681 18049 36681 18480 36681 18480 36682 18049 36682 18047 36682 18480 36683 18047 36683 18045 36683 18141 36684 18139 36684 18083 36684 18077 36685 18075 36685 18481 36685 18481 36686 18075 36686 18073 36686 18481 36687 18073 36687 18071 36687 18093 36688 18091 36688 18119 36688 18119 36689 18091 36689 18089 36689 18119 36690 18089 36690 18121 36690 18121 36691 18089 36691 18123 36691 18069 36692 18067 36692 18481 36692 18481 36693 18067 36693 18065 36693 18481 36694 18065 36694 18063 36694 18145 36695 18081 36695 18079 36695 18079 36696 18077 36696 18145 36696 18145 36697 18077 36697 18481 36697 18145 36698 18481 36698 18147 36698 18147 36699 18481 36699 18479 36699 18147 36700 18479 36700 18149 36700 18149 36701 18479 36701 18151 36701 18081 36702 18145 36702 18083 36702 18083 36703 18145 36703 18143 36703 18083 36704 18143 36704 18141 36704 18139 36705 18137 36705 18083 36705 18083 36706 18137 36706 18135 36706 18083 36707 18135 36707 18085 36707 18085 36708 18135 36708 18133 36708 18085 36709 18133 36709 18087 36709 18087 36710 18133 36710 18131 36710 18087 36711 18131 36711 18089 36711 18089 36712 18131 36712 18129 36712 18089 36713 18129 36713 18127 36713 18480 36714 18478 36714 18182 36714 18182 36715 18478 36715 18183 36715 18189 36716 18188 36716 18482 36716 18482 36717 18188 36717 18483 36717 18331 36718 18329 36718 18484 36718 18329 36719 18327 36719 18484 36719 18484 36720 18327 36720 18325 36720 18484 36721 18325 36721 18323 36721 18265 36722 18263 36722 18484 36722 18484 36723 18263 36723 18333 36723 18484 36724 18333 36724 18331 36724 18323 36725 18321 36725 18484 36725 18484 36726 18321 36726 18319 36726 18484 36727 18319 36727 18483 36727 18483 36728 18319 36728 18317 36728 18483 36729 18317 36729 18315 36729 18484 36730 18485 36730 18191 36730 18191 36731 18261 36731 18484 36731 18484 36732 18261 36732 18259 36732 18484 36733 18259 36733 18257 36733 18257 36734 18255 36734 18484 36734 18484 36735 18255 36735 18253 36735 18484 36736 18253 36736 18265 36736 18265 36737 18253 36737 18251 36737 18197 36738 18195 36738 18485 36738 18485 36739 18195 36739 18193 36739 18485 36740 18193 36740 18191 36740 18315 36741 18313 36741 18483 36741 18483 36742 18313 36742 18311 36742 18483 36743 18311 36743 18309 36743 18227 36744 18225 36744 18482 36744 18482 36745 18225 36745 18223 36745 18482 36746 18223 36746 18221 36746 18205 36747 18203 36747 18485 36747 18247 36748 18271 36748 18249 36748 18249 36749 18271 36749 18269 36749 18249 36750 18269 36750 18251 36750 18251 36751 18269 36751 18267 36751 18251 36752 18267 36752 18265 36752 18309 36753 18307 36753 18483 36753 18483 36754 18307 36754 18305 36754 18483 36755 18305 36755 18303 36755 18482 36756 18215 36756 18213 36756 18213 36757 18211 36757 18482 36757 18482 36758 18211 36758 18209 36758 18482 36759 18209 36759 18485 36759 18485 36760 18209 36760 18207 36760 18485 36761 18207 36761 18205 36761 18203 36762 18201 36762 18485 36762 18485 36763 18201 36763 18199 36763 18485 36764 18199 36764 18197 36764 18293 36765 18291 36765 18235 36765 18247 36766 18245 36766 18271 36766 18271 36767 18245 36767 18243 36767 18271 36768 18243 36768 18273 36768 18273 36769 18243 36769 18275 36769 18221 36770 18219 36770 18482 36770 18482 36771 18219 36771 18217 36771 18482 36772 18217 36772 18215 36772 18229 36773 18297 36773 18231 36773 18231 36774 18297 36774 18233 36774 18303 36775 18301 36775 18483 36775 18483 36776 18301 36776 18299 36776 18483 36777 18299 36777 18482 36777 18482 36778 18299 36778 18297 36778 18482 36779 18297 36779 18227 36779 18227 36780 18297 36780 18229 36780 18283 36781 18281 36781 18243 36781 18281 36782 18279 36782 18243 36782 18243 36783 18279 36783 18277 36783 18243 36784 18277 36784 18275 36784 18233 36785 18297 36785 18235 36785 18235 36786 18297 36786 18295 36786 18235 36787 18295 36787 18293 36787 18243 36788 18241 36788 18283 36788 18283 36789 18241 36789 18239 36789 18283 36790 18239 36790 18285 36790 18285 36791 18239 36791 18237 36791 18285 36792 18237 36792 18287 36792 18287 36793 18237 36793 18235 36793 18287 36794 18235 36794 18289 36794 18289 36795 18235 36795 18291 36795 18486 36796 18349 36796 18487 36796 18487 36797 18349 36797 18350 36797 18487 36798 18350 36798 18488 36798 18488 36799 18350 36799 18351 36799 18488 36800 18351 36800 18489 36800 18489 36801 18351 36801 18352 36801 18489 36802 18352 36802 18490 36802 18490 36803 18352 36803 18353 36803 18490 36804 18353 36804 18491 36804 18491 36805 18353 36805 18354 36805 18491 36806 18354 36806 18492 36806 18492 36807 18354 36807 18355 36807 18492 36808 18355 36808 18493 36808 18493 36809 18355 36809 18356 36809 18493 36810 18356 36810 18494 36810 18494 36811 18356 36811 18357 36811 18494 36812 18357 36812 18495 36812 18495 36813 18357 36813 18358 36813 18495 36814 18358 36814 18496 36814 18496 36815 18358 36815 18359 36815 18496 36816 18359 36816 18497 36816 18497 36817 18359 36817 18360 36817 18497 36818 18360 36818 18498 36818 18498 36819 18360 36819 18361 36819 18498 36820 18361 36820 18499 36820 18499 36821 18361 36821 18362 36821 18499 36822 18362 36822 18500 36822 18500 36823 18362 36823 18363 36823 18500 36824 18363 36824 18501 36824 18501 36825 18363 36825 18364 36825 18501 36826 18364 36826 18502 36826 18502 36827 18364 36827 18365 36827 18502 36828 18365 36828 18503 36828 18503 36829 18365 36829 18366 36829 18503 36830 18366 36830 18504 36830 18504 36831 18366 36831 18367 36831 18504 36832 18367 36832 18505 36832 18505 36833 18367 36833 18368 36833 18505 36834 18368 36834 18506 36834 18506 36835 18368 36835 18369 36835 18506 36836 18369 36836 18507 36836 18507 36837 18369 36837 18334 36837 18507 36838 18334 36838 18508 36838 18508 36839 18334 36839 18335 36839 18508 36840 18335 36840 18509 36840 18509 36841 18335 36841 18336 36841 18509 36842 18336 36842 18510 36842 18510 36843 18336 36843 18337 36843 18510 36844 18337 36844 18511 36844 18511 36845 18337 36845 18338 36845 18511 36846 18338 36846 18512 36846 18512 36847 18338 36847 18339 36847 18512 36848 18339 36848 18513 36848 18513 36849 18339 36849 18340 36849 18513 36850 18340 36850 18514 36850 18514 36851 18340 36851 18341 36851 18514 36852 18341 36852 18515 36852 18515 36853 18341 36853 18342 36853 18515 36854 18342 36854 18516 36854 18516 36855 18342 36855 18343 36855 18516 36856 18343 36856 18517 36856 18517 36857 18343 36857 18344 36857 18517 36858 18344 36858 18518 36858 18518 36859 18344 36859 18345 36859 18518 36860 18345 36860 18519 36860 18519 36861 18345 36861 18346 36861 18519 36862 18346 36862 18520 36862 18520 36863 18346 36863 18347 36863 18520 36864 18347 36864 18521 36864 18521 36865 18347 36865 18348 36865 18521 36866 18348 36866 18486 36866 18486 36867 18348 36867 18349 36867 18522 36868 18385 36868 18523 36868 18523 36869 18385 36869 18386 36869 18523 36870 18386 36870 18524 36870 18524 36871 18386 36871 18387 36871 18524 36872 18387 36872 18525 36872 18525 36873 18387 36873 18388 36873 18525 36874 18388 36874 18526 36874 18526 36875 18388 36875 18389 36875 18526 36876 18389 36876 18527 36876 18527 36877 18389 36877 18390 36877 18527 36878 18390 36878 18528 36878 18528 36879 18390 36879 18391 36879 18528 36880 18391 36880 18529 36880 18529 36881 18391 36881 18392 36881 18529 36882 18392 36882 18530 36882 18530 36883 18392 36883 18393 36883 18530 36884 18393 36884 18531 36884 18531 36885 18393 36885 18394 36885 18531 36886 18394 36886 18532 36886 18532 36887 18394 36887 18395 36887 18532 36888 18395 36888 18533 36888 18533 36889 18395 36889 18396 36889 18533 36890 18396 36890 18534 36890 18534 36891 18396 36891 18397 36891 18534 36892 18397 36892 18535 36892 18535 36893 18397 36893 18398 36893 18535 36894 18398 36894 18536 36894 18536 36895 18398 36895 18399 36895 18536 36896 18399 36896 18537 36896 18537 36897 18399 36897 18400 36897 18537 36898 18400 36898 18538 36898 18538 36899 18400 36899 18401 36899 18538 36900 18401 36900 18539 36900 18539 36901 18401 36901 18402 36901 18539 36902 18402 36902 18540 36902 18540 36903 18402 36903 18403 36903 18540 36904 18403 36904 18541 36904 18541 36905 18403 36905 18404 36905 18541 36906 18404 36906 18542 36906 18542 36907 18404 36907 18405 36907 18542 36908 18405 36908 18543 36908 18543 36909 18405 36909 18370 36909 18543 36910 18370 36910 18544 36910 18544 36911 18370 36911 18371 36911 18544 36912 18371 36912 18545 36912 18545 36913 18371 36913 18372 36913 18545 36914 18372 36914 18546 36914 18546 36915 18372 36915 18373 36915 18546 36916 18373 36916 18547 36916 18547 36917 18373 36917 18374 36917 18547 36918 18374 36918 18548 36918 18548 36919 18374 36919 18375 36919 18548 36920 18375 36920 18549 36920 18549 36921 18375 36921 18376 36921 18549 36922 18376 36922 18550 36922 18550 36923 18376 36923 18377 36923 18550 36924 18377 36924 18551 36924 18551 36925 18377 36925 18378 36925 18551 36926 18378 36926 18552 36926 18552 36927 18378 36927 18379 36927 18552 36928 18379 36928 18553 36928 18553 36929 18379 36929 18380 36929 18553 36930 18380 36930 18554 36930 18554 36931 18380 36931 18381 36931 18554 36932 18381 36932 18555 36932 18555 36933 18381 36933 18382 36933 18555 36934 18382 36934 18556 36934 18556 36935 18382 36935 18383 36935 18556 36936 18383 36936 18557 36936 18557 36937 18383 36937 18384 36937 18557 36938 18384 36938 18522 36938 18522 36939 18384 36939 18385 36939 18558 36940 18421 36940 18559 36940 18559 36941 18421 36941 18422 36941 18559 36942 18422 36942 18560 36942 18560 36943 18422 36943 18423 36943 18560 36944 18423 36944 18561 36944 18561 36945 18423 36945 18424 36945 18561 36946 18424 36946 18562 36946 18562 36947 18424 36947 18425 36947 18562 36948 18425 36948 18563 36948 18563 36949 18425 36949 18426 36949 18563 36950 18426 36950 18564 36950 18564 36951 18426 36951 18427 36951 18564 36952 18427 36952 18565 36952 18565 36953 18427 36953 18428 36953 18565 36954 18428 36954 18566 36954 18566 36955 18428 36955 18429 36955 18566 36956 18429 36956 18567 36956 18567 36957 18429 36957 18430 36957 18567 36958 18430 36958 18568 36958 18568 36959 18430 36959 18431 36959 18568 36960 18431 36960 18569 36960 18569 36961 18431 36961 18432 36961 18569 36962 18432 36962 18570 36962 18570 36963 18432 36963 18433 36963 18570 36964 18433 36964 18571 36964 18571 36965 18433 36965 18434 36965 18571 36966 18434 36966 18572 36966 18572 36967 18434 36967 18435 36967 18572 36968 18435 36968 18573 36968 18573 36969 18435 36969 18436 36969 18573 36970 18436 36970 18574 36970 18574 36971 18436 36971 18437 36971 18574 36972 18437 36972 18575 36972 18575 36973 18437 36973 18438 36973 18575 36974 18438 36974 18576 36974 18576 36975 18438 36975 18439 36975 18576 36976 18439 36976 18577 36976 18577 36977 18439 36977 18440 36977 18577 36978 18440 36978 18578 36978 18578 36979 18440 36979 18441 36979 18578 36980 18441 36980 18579 36980 18579 36981 18441 36981 18406 36981 18579 36982 18406 36982 18580 36982 18580 36983 18406 36983 18407 36983 18580 36984 18407 36984 18581 36984 18581 36985 18407 36985 18408 36985 18581 36986 18408 36986 18582 36986 18582 36987 18408 36987 18409 36987 18582 36988 18409 36988 18583 36988 18583 36989 18409 36989 18410 36989 18583 36990 18410 36990 18584 36990 18584 36991 18410 36991 18411 36991 18584 36992 18411 36992 18585 36992 18585 36993 18411 36993 18412 36993 18585 36994 18412 36994 18586 36994 18586 36995 18412 36995 18413 36995 18586 36996 18413 36996 18587 36996 18587 36997 18413 36997 18414 36997 18587 36998 18414 36998 18588 36998 18588 36999 18414 36999 18415 36999 18588 37000 18415 37000 18589 37000 18589 37001 18415 37001 18416 37001 18589 37002 18416 37002 18590 37002 18590 37003 18416 37003 18417 37003 18590 37004 18417 37004 18591 37004 18591 37005 18417 37005 18418 37005 18591 37006 18418 37006 18592 37006 18592 37007 18418 37007 18419 37007 18592 37008 18419 37008 18593 37008 18593 37009 18419 37009 18420 37009 18593 37010 18420 37010 18558 37010 18558 37011 18420 37011 18421 37011 18594 37012 18457 37012 18595 37012 18595 37013 18457 37013 18458 37013 18595 37014 18458 37014 18596 37014 18596 37015 18458 37015 18459 37015 18596 37016 18459 37016 18597 37016 18597 37017 18459 37017 18460 37017 18597 37018 18460 37018 18598 37018 18598 37019 18460 37019 18461 37019 18598 37020 18461 37020 18599 37020 18599 37021 18461 37021 18462 37021 18599 37022 18462 37022 18600 37022 18600 37023 18462 37023 18463 37023 18600 37024 18463 37024 18601 37024 18601 37025 18463 37025 18464 37025 18601 37026 18464 37026 18602 37026 18602 37027 18464 37027 18465 37027 18602 37028 18465 37028 18603 37028 18603 37029 18465 37029 18466 37029 18603 37030 18466 37030 18604 37030 18604 37031 18466 37031 18467 37031 18604 37032 18467 37032 18605 37032 18605 37033 18467 37033 18468 37033 18605 37034 18468 37034 18606 37034 18606 37035 18468 37035 18469 37035 18606 37036 18469 37036 18607 37036 18607 37037 18469 37037 18470 37037 18607 37038 18470 37038 18608 37038 18608 37039 18470 37039 18471 37039 18608 37040 18471 37040 18609 37040 18609 37041 18471 37041 18472 37041 18609 37042 18472 37042 18610 37042 18610 37043 18472 37043 18473 37043 18610 37044 18473 37044 18611 37044 18611 37045 18473 37045 18474 37045 18611 37046 18474 37046 18612 37046 18612 37047 18474 37047 18475 37047 18612 37048 18475 37048 18613 37048 18613 37049 18475 37049 18476 37049 18613 37050 18476 37050 18614 37050 18614 37051 18476 37051 18477 37051 18614 37052 18477 37052 18615 37052 18615 37053 18477 37053 18442 37053 18615 37054 18442 37054 18616 37054 18616 37055 18442 37055 18443 37055 18616 37056 18443 37056 18617 37056 18617 37057 18443 37057 18444 37057 18617 37058 18444 37058 18618 37058 18618 37059 18444 37059 18445 37059 18618 37060 18445 37060 18619 37060 18619 37061 18445 37061 18446 37061 18619 37062 18446 37062 18620 37062 18620 37063 18446 37063 18447 37063 18620 37064 18447 37064 18621 37064 18621 37065 18447 37065 18448 37065 18621 37066 18448 37066 18622 37066 18622 37067 18448 37067 18449 37067 18622 37068 18449 37068 18623 37068 18623 37069 18449 37069 18450 37069 18623 37070 18450 37070 18624 37070 18624 37071 18450 37071 18451 37071 18624 37072 18451 37072 18625 37072 18625 37073 18451 37073 18452 37073 18625 37074 18452 37074 18626 37074 18626 37075 18452 37075 18453 37075 18626 37076 18453 37076 18627 37076 18627 37077 18453 37077 18454 37077 18627 37078 18454 37078 18628 37078 18628 37079 18454 37079 18455 37079 18628 37080 18455 37080 18629 37080 18629 37081 18455 37081 18456 37081 18629 37082 18456 37082 18594 37082 18594 37083 18456 37083 18457 37083 18485 37084 18484 37084 18630 37084 18630 37085 18484 37085 18631 37085 18482 37086 18485 37086 18630 37086 18632 37087 18185 37087 18187 37087 18632 37088 18187 37088 18630 37088 18630 37089 18187 37089 18189 37089 18630 37090 18189 37090 18482 37090 18481 37091 18480 37091 18632 37091 18632 37092 18480 37092 18182 37092 18632 37093 18182 37093 18185 37093 18632 37094 18633 37094 18481 37094 18481 37095 18633 37095 18479 37095 18631 37096 18484 37096 18483 37096 18184 37097 18633 37097 18186 37097 18186 37098 18633 37098 18631 37098 18186 37099 18631 37099 18188 37099 18188 37100 18631 37100 18483 37100 18184 37101 18183 37101 18633 37101 18633 37102 18183 37102 18478 37102 18633 37103 18478 37103 18479 37103 18503 37104 18504 37104 18632 37104 18516 37105 18517 37105 18541 37105 18490 37106 18491 37106 18630 37106 18630 37107 18491 37107 18492 37107 18630 37108 18492 37108 18493 37108 18517 37109 18518 37109 18541 37109 18541 37110 18518 37110 18519 37110 18541 37111 18519 37111 18520 37111 18486 37112 18533 37112 18534 37112 18577 37113 18578 37113 18633 37113 18633 37114 18578 37114 18579 37114 18633 37115 18579 37115 18580 37115 18497 37116 18498 37116 18632 37116 18632 37117 18498 37117 18499 37117 18632 37118 18499 37118 18500 37118 18535 37119 18520 37119 18534 37119 18534 37120 18520 37120 18521 37120 18534 37121 18521 37121 18486 37121 18580 37122 18581 37122 18633 37122 18633 37123 18581 37123 18582 37123 18633 37124 18582 37124 18583 37124 18500 37125 18501 37125 18632 37125 18632 37126 18501 37126 18502 37126 18632 37127 18502 37127 18503 37127 18535 37128 18536 37128 18520 37128 18520 37129 18536 37129 18537 37129 18520 37130 18537 37130 18538 37130 18538 37131 18539 37131 18520 37131 18520 37132 18539 37132 18540 37132 18520 37133 18540 37133 18541 37133 18607 37134 18608 37134 18593 37134 18593 37135 18608 37135 18609 37135 18593 37136 18609 37136 18610 37136 18598 37137 18599 37137 18630 37137 18493 37138 18494 37138 18630 37138 18630 37139 18494 37139 18495 37139 18630 37140 18495 37140 18632 37140 18632 37141 18495 37141 18496 37141 18632 37142 18496 37142 18497 37142 18633 37143 18615 37143 18616 37143 18589 37144 18590 37144 18612 37144 18612 37145 18590 37145 18591 37145 18616 37146 18617 37146 18633 37146 18633 37147 18617 37147 18618 37147 18633 37148 18618 37148 18619 37148 18523 37149 18524 37149 18630 37149 18524 37150 18525 37150 18630 37150 18630 37151 18525 37151 18526 37151 18630 37152 18526 37152 18527 37152 18583 37153 18584 37153 18633 37153 18633 37154 18584 37154 18585 37154 18633 37155 18585 37155 18586 37155 18610 37156 18611 37156 18593 37156 18593 37157 18611 37157 18612 37157 18593 37158 18612 37158 18592 37158 18592 37159 18612 37159 18591 37159 18623 37160 18624 37160 18631 37160 18615 37161 18633 37161 18614 37161 18614 37162 18633 37162 18586 37162 18614 37163 18586 37163 18613 37163 18613 37164 18586 37164 18587 37164 18613 37165 18587 37165 18612 37165 18612 37166 18587 37166 18588 37166 18612 37167 18588 37167 18589 37167 18619 37168 18620 37168 18633 37168 18633 37169 18620 37169 18621 37169 18633 37170 18621 37170 18631 37170 18631 37171 18621 37171 18622 37171 18631 37172 18622 37172 18623 37172 18527 37173 18528 37173 18630 37173 18630 37174 18528 37174 18529 37174 18630 37175 18529 37175 18530 37175 18624 37176 18625 37176 18631 37176 18631 37177 18625 37177 18626 37177 18631 37178 18626 37178 18627 37178 18594 37179 18595 37179 18631 37179 18631 37180 18595 37180 18596 37180 18631 37181 18596 37181 18630 37181 18630 37182 18596 37182 18597 37182 18630 37183 18597 37183 18598 37183 18508 37184 18509 37184 18633 37184 18633 37185 18509 37185 18510 37185 18633 37186 18510 37186 18511 37186 18558 37187 18605 37187 18593 37187 18593 37188 18605 37188 18606 37188 18593 37189 18606 37189 18607 37189 18504 37190 18505 37190 18632 37190 18632 37191 18505 37191 18506 37191 18632 37192 18506 37192 18633 37192 18633 37193 18506 37193 18507 37193 18633 37194 18507 37194 18508 37194 18530 37195 18531 37195 18630 37195 18630 37196 18531 37196 18532 37196 18630 37197 18532 37197 18533 37197 18627 37198 18628 37198 18631 37198 18631 37199 18628 37199 18629 37199 18631 37200 18629 37200 18594 37200 18558 37201 18559 37201 18605 37201 18605 37202 18559 37202 18560 37202 18605 37203 18560 37203 18604 37203 18604 37204 18560 37204 18561 37204 18604 37205 18561 37205 18562 37205 18562 37206 18563 37206 18604 37206 18604 37207 18563 37207 18564 37207 18604 37208 18564 37208 18565 37208 18599 37209 18600 37209 18630 37209 18630 37210 18600 37210 18601 37210 18630 37211 18601 37211 18602 37211 18542 37212 18514 37212 18541 37212 18541 37213 18514 37213 18515 37213 18541 37214 18515 37214 18516 37214 18511 37215 18575 37215 18633 37215 18633 37216 18575 37216 18576 37216 18633 37217 18576 37217 18577 37217 18486 37218 18487 37218 18533 37218 18533 37219 18487 37219 18488 37219 18533 37220 18488 37220 18630 37220 18630 37221 18488 37221 18489 37221 18630 37222 18489 37222 18490 37222 18545 37223 18546 37223 18565 37223 18569 37224 18570 37224 18511 37224 18511 37225 18570 37225 18571 37225 18511 37226 18571 37226 18572 37226 18572 37227 18573 37227 18511 37227 18511 37228 18573 37228 18574 37228 18511 37229 18574 37229 18575 37229 18566 37230 18567 37230 18543 37230 18553 37231 18554 37231 18602 37231 18602 37232 18554 37232 18555 37232 18565 37233 18546 37233 18604 37233 18604 37234 18546 37234 18547 37234 18604 37235 18547 37235 18548 37235 18511 37236 18512 37236 18569 37236 18569 37237 18512 37237 18513 37237 18569 37238 18513 37238 18568 37238 18568 37239 18513 37239 18514 37239 18568 37240 18514 37240 18567 37240 18567 37241 18514 37241 18542 37241 18567 37242 18542 37242 18543 37242 18566 37243 18543 37243 18565 37243 18565 37244 18543 37244 18544 37244 18565 37245 18544 37245 18545 37245 18548 37246 18549 37246 18604 37246 18604 37247 18549 37247 18550 37247 18604 37248 18550 37248 18603 37248 18603 37249 18550 37249 18551 37249 18603 37250 18551 37250 18602 37250 18602 37251 18551 37251 18552 37251 18602 37252 18552 37252 18553 37252 18555 37253 18556 37253 18602 37253 18602 37254 18556 37254 18557 37254 18602 37255 18557 37255 18630 37255 18630 37256 18557 37256 18522 37256 18630 37257 18522 37257 18523 37257

+
+ + + + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +

0 0 1 0 2 0 3 1 4 1 5 1 6 2 7 2 8 2 8 3 7 3 5 3 8 4 5 4 9 4 9 5 5 5 4 5 3 6 5 6 2 6 2 7 5 7 10 7 2 8 10 8 0 8 6 9 8 9 11 9 11 10 8 10 12 10 11 11 12 11 13 11 13 12 14 12 11 12 11 13 14 13 15 13 11 14 15 14 16 14 17 15 18 15 11 15 1 16 19 16 2 16 2 17 19 17 20 17 2 18 20 18 21 18 22 19 23 19 24 19 21 20 25 20 2 20 2 21 25 21 26 21 2 22 26 22 27 22 27 23 26 23 28 23 28 24 29 24 27 24 27 25 29 25 30 25 27 26 30 26 31 26 16 27 32 27 11 27 11 28 32 28 33 28 11 29 33 29 17 29 18 30 34 30 11 30 11 31 34 31 22 31 11 32 22 32 35 32 35 33 22 33 24 33 36 34 5 34 37 34 37 35 5 35 7 35 37 36 7 36 38 36 38 37 7 37 6 37 38 38 6 38 39 38 39 39 6 39 11 39 39 40 11 40 40 40 40 41 11 41 35 41 40 42 35 42 41 42 41 43 35 43 24 43 41 44 24 44 42 44 42 45 24 45 23 45 42 46 23 46 43 46 43 47 23 47 22 47 43 48 22 48 44 48 44 49 22 49 34 49 44 50 34 50 45 50 45 51 34 51 18 51 45 52 18 52 46 52 46 53 18 53 17 53 46 54 17 54 47 54 47 55 17 55 33 55 47 56 33 56 48 56 48 57 33 57 32 57 48 58 32 58 49 58 49 59 32 59 16 59 49 60 16 60 50 60 50 61 16 61 15 61 50 62 15 62 51 62 51 63 15 63 14 63 51 64 14 64 52 64 52 65 14 65 13 65 52 66 13 66 53 66 53 67 13 67 54 67 53 68 54 68 55 68 55 69 54 69 8 69 55 70 8 70 56 70 56 71 8 71 9 71 56 72 9 72 57 72 57 73 9 73 4 73 57 74 4 74 58 74 58 75 4 75 3 75 58 76 3 76 59 76 59 77 3 77 2 77 59 78 2 78 60 78 60 79 2 79 27 79 60 80 27 80 61 80 61 81 27 81 31 81 61 82 31 82 62 82 62 83 31 83 30 83 62 84 30 84 63 84 63 85 30 85 29 85 63 86 29 86 64 86 64 87 29 87 28 87 64 88 28 88 65 88 65 89 28 89 26 89 65 90 26 90 66 90 66 91 26 91 25 91 66 92 25 92 67 92 67 93 25 93 21 93 67 94 21 94 68 94 68 95 21 95 20 95 68 96 20 96 69 96 69 97 20 97 19 97 69 98 19 98 70 98 70 99 19 99 1 99 70 100 1 100 71 100 71 101 1 101 0 101 71 102 0 102 72 102 72 103 0 103 10 103 72 104 10 104 36 104 36 105 10 105 5 105 36 106 73 106 72 106 72 107 73 107 74 107 72 108 74 108 71 108 71 109 74 109 75 109 71 110 75 110 70 110 70 111 75 111 76 111 70 112 76 112 69 112 69 113 76 113 77 113 69 114 77 114 68 114 68 115 77 115 78 115 68 116 78 116 67 116 67 117 78 117 79 117 67 118 79 118 66 118 66 119 79 119 80 119 66 120 80 120 65 120 65 121 80 121 81 121 65 122 81 122 64 122 64 123 81 123 82 123 64 124 82 124 63 124 63 125 82 125 83 125 63 126 83 126 62 126 62 127 83 127 84 127 62 128 84 128 61 128 61 129 84 129 85 129 61 130 85 130 60 130 60 131 85 131 86 131 60 132 86 132 59 132 59 133 86 133 87 133 59 134 87 134 58 134 58 135 87 135 88 135 58 136 88 136 57 136 57 137 88 137 89 137 57 138 89 138 56 138 56 139 89 139 90 139 56 140 90 140 55 140 55 141 90 141 91 141 55 142 91 142 92 142 92 143 91 143 93 143 92 144 93 144 52 144 52 145 93 145 94 145 52 146 94 146 51 146 51 147 94 147 95 147 51 148 95 148 50 148 50 149 95 149 96 149 50 150 96 150 49 150 49 151 96 151 97 151 49 152 97 152 48 152 48 153 97 153 98 153 48 154 98 154 47 154 47 155 98 155 99 155 47 156 99 156 46 156 46 157 99 157 100 157 46 158 100 158 45 158 45 159 100 159 101 159 45 160 101 160 44 160 44 161 101 161 102 161 44 162 102 162 43 162 43 163 102 163 103 163 43 164 103 164 42 164 42 165 103 165 104 165 42 166 104 166 41 166 41 167 104 167 105 167 41 168 105 168 40 168 40 169 105 169 106 169 40 170 106 170 39 170 39 171 106 171 107 171 39 172 107 172 38 172 38 173 107 173 108 173 38 174 108 174 37 174 37 175 108 175 109 175 37 176 109 176 36 176 36 177 109 177 73 177 298 402 299 402 300 402 301 403 302 403 303 403 304 404 305 404 306 404 306 405 305 405 307 405 308 406 309 406 310 406 310 407 309 407 311 407 312 408 313 408 314 408 315 409 316 409 298 409 298 410 316 410 317 410 298 411 317 411 299 411 318 412 319 412 320 412 314 413 313 413 321 413 321 414 313 414 322 414 321 415 322 415 323 415 307 416 305 416 303 416 303 417 305 417 324 417 303 418 324 418 301 418 325 419 326 419 310 419 327 420 328 420 329 420 329 421 328 421 330 421 331 422 332 422 333 422 323 423 334 423 321 423 321 424 334 424 335 424 321 425 335 425 336 425 337 426 338 426 339 426 339 427 338 427 336 427 302 428 340 428 303 428 303 429 340 429 341 429 303 430 341 430 342 430 343 431 344 431 345 431 346 432 347 432 348 432 326 433 349 433 310 433 310 434 349 434 350 434 310 435 350 435 308 435 336 436 338 436 321 436 321 437 338 437 351 437 321 438 351 438 352 438 352 439 353 439 321 439 321 440 353 440 354 440 321 441 354 441 355 441 355 442 354 442 333 442 355 443 333 443 319 443 319 444 333 444 332 444 319 445 332 445 320 445 356 446 357 446 329 446 329 447 357 447 358 447 359 448 360 448 361 448 300 449 362 449 298 449 298 450 362 450 363 450 298 451 363 451 348 451 348 452 363 452 364 452 348 453 364 453 346 453 298 454 365 454 366 454 331 455 333 455 367 455 367 456 333 456 368 456 367 457 368 457 369 457 370 458 371 458 372 458 360 459 359 459 373 459 373 460 359 460 374 460 373 461 374 461 375 461 361 462 376 462 359 462 359 463 376 463 377 463 359 464 377 464 378 464 378 465 379 465 359 465 359 466 379 466 380 466 359 467 380 467 381 467 337 468 382 468 338 468 338 469 382 469 359 469 338 470 359 470 383 470 383 471 359 471 381 471 342 472 384 472 303 472 303 473 384 473 385 473 303 474 385 474 345 474 345 475 385 475 386 475 345 476 386 476 343 476 387 477 388 477 348 477 348 478 388 478 389 478 348 479 389 479 390 479 391 480 392 480 393 480 393 481 392 481 394 481 393 482 394 482 348 482 395 483 396 483 397 483 397 484 396 484 398 484 395 485 397 485 310 485 310 486 397 486 399 486 310 487 399 487 325 487 330 488 400 488 329 488 329 489 400 489 401 489 329 490 401 490 402 490 402 491 401 491 403 491 329 492 404 492 356 492 356 493 404 493 405 493 356 494 405 494 406 494 406 495 405 495 407 495 406 496 407 496 320 496 320 497 407 497 408 497 320 498 408 498 318 498 358 499 409 499 329 499 329 500 409 500 410 500 329 501 410 501 310 501 347 502 411 502 348 502 348 503 411 503 412 503 348 504 412 504 387 504 390 505 413 505 348 505 348 506 413 506 414 506 348 507 414 507 393 507 311 508 415 508 310 508 310 509 415 509 416 509 310 510 416 510 329 510 329 511 416 511 417 511 329 512 417 512 327 512 366 513 418 513 298 513 298 514 418 514 419 514 298 515 419 515 420 515 369 516 421 516 367 516 367 517 421 517 422 517 367 518 422 518 365 518 365 519 422 519 423 519 365 520 423 520 366 520 312 521 314 521 372 521 372 522 314 522 424 522 372 523 424 523 370 523 398 524 425 524 397 524 397 525 425 525 426 525 397 526 426 526 427 526 304 527 315 527 305 527 305 528 315 528 298 528 305 529 298 529 428 529 428 530 298 530 420 530 371 531 429 531 372 531 372 532 429 532 430 532 372 533 430 533 431 533 431 534 432 534 372 534 372 535 432 535 433 535 372 536 433 536 434 536 435 537 436 537 437 537 435 538 437 538 438 538 439 539 440 539 401 539 401 540 440 540 441 540 401 541 441 541 442 541 438 542 437 542 433 542 433 543 437 543 443 543 433 544 443 544 434 544 444 545 445 545 446 545 446 546 445 546 447 546 446 547 447 547 401 547 401 548 447 548 448 548 401 549 448 549 439 549 442 550 449 550 401 550 401 551 449 551 450 551 401 552 450 552 451 552 451 553 452 553 401 553 401 554 452 554 453 554 401 555 453 555 403 555 454 556 455 556 456 556 457 557 458 557 459 557 459 558 458 558 460 558 461 559 462 559 463 559 464 560 465 560 466 560 467 561 468 561 469 561 469 562 468 562 470 562 471 563 472 563 473 563 473 564 472 564 469 564 473 565 469 565 474 565 474 566 469 566 470 566 475 567 455 567 476 567 476 568 477 568 475 568 475 569 477 569 478 569 475 570 478 570 479 570 479 571 480 571 475 571 475 572 480 572 481 572 475 573 481 573 482 573 454 574 456 574 483 574 465 575 464 575 463 575 463 576 464 576 484 576 463 577 484 577 461 577 462 578 485 578 463 578 463 579 485 579 486 579 463 580 486 580 487 580 466 581 488 581 464 581 464 582 488 582 489 582 464 583 489 583 458 583 458 584 489 584 490 584 458 585 490 585 460 585 471 586 491 586 472 586 472 587 491 587 492 587 472 588 492 588 493 588 494 589 495 589 496 589 496 590 495 590 497 590 498 591 456 591 499 591 499 592 456 592 455 592 499 593 455 593 500 593 500 594 455 594 475 594 467 595 469 595 501 595 501 596 469 596 483 596 501 597 483 597 496 597 496 598 483 598 456 598 496 599 456 599 494 599 502 600 503 600 504 600 504 601 503 601 505 601 504 602 505 602 506 602 507 603 508 603 509 603 510 604 511 604 512 604 512 605 511 605 513 605 512 606 513 606 514 606 515 607 516 607 517 607 517 608 516 608 518 608 519 609 520 609 510 609 510 610 520 610 521 610 510 611 521 611 511 611 498 612 522 612 456 612 456 613 522 613 520 613 456 614 520 614 523 614 523 615 520 615 519 615 458 616 524 616 525 616 487 617 486 617 504 617 504 618 486 618 526 618 504 619 526 619 502 619 457 620 527 620 458 620 458 621 527 621 528 621 458 622 528 622 529 622 529 623 528 623 509 623 529 624 509 624 530 624 530 625 509 625 508 625 524 626 458 626 497 626 497 627 458 627 531 627 497 628 531 628 496 628 532 629 533 629 534 629 534 630 533 630 535 630 535 631 533 631 509 631 509 632 533 632 536 632 509 633 536 633 507 633 537 634 538 634 492 634 492 635 538 635 539 635 492 636 539 636 493 636 540 637 541 637 542 637 542 638 541 638 543 638 542 639 543 639 544 639 517 640 545 640 513 640 513 641 545 641 546 641 513 642 546 642 514 642 525 643 547 643 458 643 458 644 547 644 548 644 458 645 548 645 464 645 532 646 549 646 533 646 533 647 549 647 550 647 533 648 550 648 551 648 552 649 553 649 551 649 551 650 553 650 554 650 551 651 554 651 533 651 555 652 556 652 557 652 557 653 556 653 558 653 557 654 558 654 559 654 555 655 557 655 492 655 492 656 557 656 560 656 492 657 560 657 537 657 482 658 481 658 542 658 542 659 481 659 561 659 542 660 561 660 562 660 563 661 564 661 542 661 542 662 564 662 565 662 542 663 565 663 566 663 567 664 568 664 513 664 513 665 568 665 569 665 569 666 570 666 513 666 513 667 570 667 571 667 513 668 571 668 517 668 517 669 571 669 572 669 517 670 572 670 515 670 573 671 574 671 575 671 518 672 576 672 517 672 517 673 576 673 577 673 517 674 577 674 578 674 578 675 577 675 579 675 559 676 580 676 557 676 557 677 580 677 581 677 557 678 581 678 582 678 562 679 583 679 542 679 542 680 583 680 584 680 542 681 584 681 540 681 544 682 585 682 542 682 542 683 585 683 586 683 542 684 586 684 563 684 573 685 575 685 587 685 567 686 513 686 588 686 588 687 513 687 589 687 588 688 589 688 590 688 590 689 589 689 591 689 590 690 591 690 592 690 574 691 593 691 575 691 575 692 593 692 594 692 575 693 594 693 595 693 587 694 575 694 577 694 577 695 575 695 596 695 577 696 596 696 579 696 592 697 597 697 590 697 590 698 597 698 598 698 590 699 598 699 599 699 599 700 598 700 600 700 599 701 600 701 601 701 601 702 602 702 599 702 599 703 602 703 603 703 599 704 603 704 604 704 605 705 606 705 607 705 607 706 606 706 608 706 607 707 608 707 603 707 603 708 608 708 609 708 603 709 609 709 604 709 308 1290 1014 1290 1015 1290 308 1291 1015 1291 309 1291 309 1292 1015 1292 1016 1292 309 1293 1016 1293 311 1293 311 1294 1016 1294 1017 1294 311 1295 1017 1295 415 1295 415 1296 1017 1296 1018 1296 415 1297 1018 1297 416 1297 416 1298 1018 1298 1019 1298 416 1299 1019 1299 417 1299 417 1300 1019 1300 1020 1300 417 1301 1020 1301 327 1301 327 1302 1020 1302 1021 1302 327 1303 1021 1303 328 1303 328 1304 1021 1304 1022 1304 328 1305 1022 1305 330 1305 330 1306 1022 1306 1023 1306 330 1307 1023 1307 400 1307 400 1308 1023 1308 1024 1308 400 1309 1024 1309 401 1309 358 1310 1025 1310 1026 1310 358 1311 1026 1311 409 1311 409 1312 1026 1312 1027 1312 409 1313 1027 1313 410 1313 410 1314 1027 1314 1028 1314 410 1315 1028 1315 310 1315 310 1316 1028 1316 1029 1316 310 1317 1029 1317 395 1317 395 1318 1029 1318 1030 1318 395 1319 1030 1319 396 1319 396 1320 1030 1320 1031 1320 396 1321 1031 1321 398 1321 398 1322 1031 1322 1032 1322 398 1323 1032 1323 425 1323 425 1324 1032 1324 1033 1324 425 1325 1033 1325 426 1325 426 1326 1033 1326 1034 1326 426 1327 1034 1327 427 1327 427 1328 1034 1328 1035 1328 427 1329 1035 1329 397 1329 397 1330 1035 1330 1036 1330 397 1331 1036 1331 399 1331 399 1332 1036 1332 1037 1332 399 1333 1037 1333 325 1333 325 1334 1037 1334 1038 1334 325 1335 1038 1335 326 1335 326 1336 1038 1336 1039 1336 326 1337 1039 1337 349 1337 349 1338 1039 1338 1040 1338 349 1339 1040 1339 350 1339 350 1340 1040 1340 1014 1340 350 1341 1014 1341 308 1341 348 1342 1041 1342 1042 1342 348 1343 1042 1343 298 1343 298 1344 1042 1344 1043 1344 298 1345 1043 1345 365 1345 365 1346 1043 1346 1044 1346 365 1347 1044 1347 367 1347 367 1348 1044 1348 1045 1348 367 1349 1045 1349 331 1349 331 1350 1045 1350 1046 1350 331 1351 1046 1351 332 1351 332 1352 1046 1352 1047 1352 332 1353 1047 1353 320 1353 320 1354 1047 1354 1048 1354 320 1355 1048 1355 406 1355 406 1356 1048 1356 1049 1356 406 1357 1049 1357 356 1357 356 1358 1049 1358 1050 1358 356 1359 1050 1359 357 1359 357 1360 1050 1360 1025 1360 357 1361 1025 1361 358 1361 363 1362 1051 1362 1052 1362 363 1363 1052 1363 364 1363 364 1364 1052 1364 1053 1364 364 1365 1053 1365 346 1365 346 1366 1053 1366 1054 1366 346 1367 1054 1367 347 1367 347 1368 1054 1368 1055 1368 347 1369 1055 1369 411 1369 411 1370 1055 1370 1056 1370 411 1371 1056 1371 412 1371 412 1372 1056 1372 1057 1372 412 1373 1057 1373 387 1373 387 1374 1057 1374 1058 1374 387 1375 1058 1375 388 1375 388 1376 1058 1376 1059 1376 388 1377 1059 1377 389 1377 389 1378 1059 1378 1060 1378 389 1379 1060 1379 390 1379 390 1380 1060 1380 1061 1380 390 1381 1061 1381 413 1381 413 1382 1061 1382 1062 1382 413 1383 1062 1383 414 1383 414 1384 1062 1384 1063 1384 414 1385 1063 1385 393 1385 393 1386 1063 1386 1064 1386 393 1387 1064 1387 391 1387 391 1388 1064 1388 1065 1388 391 1389 1065 1389 392 1389 392 1390 1065 1390 1066 1390 392 1391 1066 1391 394 1391 394 1392 1066 1392 1041 1392 394 1393 1041 1393 348 1393 303 1394 1067 1394 1068 1394 303 1395 1068 1395 307 1395 307 1396 1068 1396 1069 1396 307 1397 1069 1397 306 1397 306 1398 1069 1398 1070 1398 306 1399 1070 1399 304 1399 304 1400 1070 1400 1071 1400 304 1401 1071 1401 315 1401 315 1402 1071 1402 1072 1402 315 1403 1072 1403 316 1403 316 1404 1072 1404 1073 1404 316 1405 1073 1405 317 1405 317 1406 1073 1406 1074 1406 317 1407 1074 1407 299 1407 299 1408 1074 1408 1075 1408 299 1409 1075 1409 300 1409 300 1410 1075 1410 1076 1410 300 1411 1076 1411 362 1411 362 1412 1076 1412 1051 1412 362 1413 1051 1413 363 1413 402 1414 1077 1414 1078 1414 402 1415 1078 1415 329 1415 329 1416 1078 1416 1079 1416 329 1417 1079 1417 404 1417 404 1418 1079 1418 1080 1418 404 1419 1080 1419 405 1419 405 1420 1080 1420 1081 1420 405 1421 1081 1421 407 1421 407 1422 1081 1422 1082 1422 407 1423 1082 1423 408 1423 408 1424 1082 1424 1083 1424 408 1425 1083 1425 318 1425 318 1426 1083 1426 1084 1426 318 1427 1084 1427 319 1427 319 1428 1084 1428 1085 1428 319 1429 1085 1429 355 1429 355 1430 1085 1430 1086 1430 355 1431 1086 1431 321 1431 321 1432 1086 1432 1087 1432 321 1433 1087 1433 314 1433 401 1434 1024 1434 1088 1434 401 1435 1088 1435 446 1435 446 1436 1088 1436 1089 1436 446 1437 1089 1437 444 1437 444 1438 1089 1438 1090 1438 444 1439 1090 1439 445 1439 445 1440 1090 1440 1091 1440 445 1441 1091 1441 447 1441 447 1442 1091 1442 1092 1442 447 1443 1092 1443 448 1443 448 1444 1092 1444 1093 1444 448 1445 1093 1445 439 1445 439 1446 1093 1446 1094 1446 439 1447 1094 1447 440 1447 440 1448 1094 1448 1095 1448 440 1449 1095 1449 441 1449 441 1450 1095 1450 1096 1450 441 1451 1096 1451 442 1451 442 1452 1096 1452 1097 1452 442 1453 1097 1453 449 1453 449 1454 1097 1454 1098 1454 449 1455 1098 1455 450 1455 450 1456 1098 1456 1099 1456 450 1457 1099 1457 451 1457 451 1458 1099 1458 1100 1458 451 1459 1100 1459 452 1459 452 1460 1100 1460 1101 1460 452 1461 1101 1461 453 1461 453 1462 1101 1462 1102 1462 453 1463 1102 1463 403 1463 403 1464 1102 1464 1077 1464 403 1465 1077 1465 402 1465 419 1466 1103 1466 1104 1466 419 1467 1104 1467 420 1467 420 1468 1104 1468 1105 1468 420 1469 1105 1469 428 1469 428 1470 1105 1470 1106 1470 428 1471 1106 1471 305 1471 305 1472 1106 1472 1107 1472 305 1473 1107 1473 324 1473 324 1474 1107 1474 1108 1474 324 1475 1108 1475 301 1475 301 1476 1108 1476 1109 1476 301 1477 1109 1477 302 1477 302 1478 1109 1478 1110 1478 302 1479 1110 1479 340 1479 340 1480 1110 1480 1111 1480 340 1481 1111 1481 341 1481 341 1482 1111 1482 1112 1482 341 1483 1112 1483 342 1483 342 1484 1112 1484 1113 1484 342 1485 1113 1485 384 1485 384 1486 1113 1486 1114 1486 384 1487 1114 1487 385 1487 385 1488 1114 1488 1115 1488 385 1489 1115 1489 386 1489 386 1490 1115 1490 1116 1490 386 1491 1116 1491 343 1491 343 1492 1116 1492 1117 1492 343 1493 1117 1493 344 1493 344 1494 1117 1494 1118 1494 344 1495 1118 1495 345 1495 345 1496 1118 1496 1067 1496 345 1497 1067 1497 303 1497 353 1498 1119 1498 1120 1498 353 1499 1120 1499 354 1499 354 1500 1120 1500 1121 1500 354 1501 1121 1501 333 1501 333 1502 1121 1502 1122 1502 333 1503 1122 1503 368 1503 368 1504 1122 1504 1123 1504 368 1505 1123 1505 369 1505 369 1506 1123 1506 1124 1506 369 1507 1124 1507 421 1507 421 1508 1124 1508 1125 1508 421 1509 1125 1509 422 1509 422 1510 1125 1510 1126 1510 422 1511 1126 1511 423 1511 423 1512 1126 1512 1127 1512 423 1513 1127 1513 366 1513 366 1514 1127 1514 1128 1514 366 1515 1128 1515 418 1515 418 1516 1128 1516 1103 1516 418 1517 1103 1517 419 1517 312 1518 1129 1518 1130 1518 312 1519 1130 1519 313 1519 313 1520 1130 1520 1131 1520 313 1521 1131 1521 322 1521 322 1522 1131 1522 1132 1522 322 1523 1132 1523 323 1523 323 1524 1132 1524 1133 1524 323 1525 1133 1525 334 1525 334 1526 1133 1526 1134 1526 334 1527 1134 1527 335 1527 335 1528 1134 1528 1135 1528 335 1529 1135 1529 336 1529 336 1530 1135 1530 1136 1530 336 1531 1136 1531 339 1531 339 1532 1136 1532 1137 1532 339 1533 1137 1533 337 1533 337 1534 1137 1534 1138 1534 337 1535 1138 1535 382 1535 382 1536 1138 1536 1139 1536 382 1537 1139 1537 359 1537 314 1538 1087 1538 1140 1538 314 1539 1140 1539 424 1539 424 1540 1140 1540 1141 1540 424 1541 1141 1541 370 1541 370 1542 1141 1542 1142 1542 370 1543 1142 1543 371 1543 371 1544 1142 1544 1143 1544 371 1545 1143 1545 429 1545 429 1546 1143 1546 1144 1546 429 1547 1144 1547 430 1547 430 1548 1144 1548 1145 1548 430 1549 1145 1549 431 1549 431 1550 1145 1550 1146 1550 431 1551 1146 1551 432 1551 432 1552 1146 1552 1147 1552 432 1553 1147 1553 433 1553 433 1554 1147 1554 1148 1554 433 1555 1148 1555 438 1555 438 1556 1148 1556 1149 1556 438 1557 1149 1557 435 1557 435 1558 1149 1558 1150 1558 435 1559 1150 1559 436 1559 436 1560 1150 1560 1151 1560 436 1561 1151 1561 437 1561 437 1562 1151 1562 1152 1562 437 1563 1152 1563 443 1563 443 1564 1152 1564 1153 1564 443 1565 1153 1565 434 1565 434 1566 1153 1566 1154 1566 434 1567 1154 1567 372 1567 372 1568 1154 1568 1129 1568 372 1569 1129 1569 312 1569 359 1570 1139 1570 1155 1570 359 1571 1155 1571 374 1571 374 1572 1155 1572 1156 1572 374 1573 1156 1573 375 1573 375 1574 1156 1574 1157 1574 375 1575 1157 1575 373 1575 373 1576 1157 1576 1158 1576 373 1577 1158 1577 360 1577 360 1578 1158 1578 1159 1578 360 1579 1159 1579 361 1579 361 1580 1159 1580 1160 1580 361 1581 1160 1581 376 1581 376 1582 1160 1582 1161 1582 376 1583 1161 1583 377 1583 377 1584 1161 1584 1162 1584 377 1585 1162 1585 378 1585 378 1586 1162 1586 1163 1586 378 1587 1163 1587 379 1587 379 1588 1163 1588 1164 1588 379 1589 1164 1589 380 1589 380 1590 1164 1590 1165 1590 380 1591 1165 1591 381 1591 381 1592 1165 1592 1166 1592 381 1593 1166 1593 383 1593 383 1594 1166 1594 1167 1594 383 1595 1167 1595 338 1595 338 1596 1167 1596 1168 1596 338 1597 1168 1597 351 1597 351 1598 1168 1598 1169 1598 351 1599 1169 1599 352 1599 352 1600 1169 1600 1119 1600 352 1601 1119 1601 353 1601 472 1602 1170 1602 1171 1602 472 1603 1171 1603 469 1603 469 1604 1171 1604 1172 1604 469 1605 1172 1605 483 1605 483 1606 1172 1606 1173 1606 483 1607 1173 1607 454 1607 454 1608 1173 1608 1174 1608 454 1609 1174 1609 455 1609 455 1610 1174 1610 1175 1610 455 1611 1175 1611 476 1611 476 1612 1175 1612 1176 1612 476 1613 1176 1613 477 1613 477 1614 1176 1614 1177 1614 477 1615 1177 1615 478 1615 478 1616 1177 1616 1178 1616 478 1617 1178 1617 479 1617 479 1618 1178 1618 1179 1618 479 1619 1179 1619 480 1619 480 1620 1179 1620 1180 1620 480 1621 1180 1621 481 1621 471 1622 1181 1622 1182 1622 471 1623 1182 1623 491 1623 491 1624 1182 1624 1183 1624 491 1625 1183 1625 492 1625 492 1626 1183 1626 1184 1626 492 1627 1184 1627 555 1627 555 1628 1184 1628 1185 1628 555 1629 1185 1629 556 1629 556 1630 1185 1630 1186 1630 556 1631 1186 1631 558 1631 558 1632 1186 1632 1187 1632 558 1633 1187 1633 559 1633 559 1634 1187 1634 1188 1634 559 1635 1188 1635 580 1635 580 1636 1188 1636 1189 1636 580 1637 1189 1637 581 1637 581 1638 1189 1638 1190 1638 581 1639 1190 1639 582 1639 582 1640 1190 1640 1191 1640 582 1641 1191 1641 557 1641 557 1642 1191 1642 1192 1642 557 1643 1192 1643 560 1643 560 1644 1192 1644 1193 1644 560 1645 1193 1645 537 1645 537 1646 1193 1646 1194 1646 537 1647 1194 1647 538 1647 538 1648 1194 1648 1195 1648 538 1649 1195 1649 539 1649 539 1650 1195 1650 1196 1650 539 1651 1196 1651 493 1651 493 1652 1196 1652 1170 1652 493 1653 1170 1653 472 1653 529 1654 1197 1654 1198 1654 529 1655 1198 1655 458 1655 458 1656 1198 1656 1199 1656 458 1657 1199 1657 531 1657 531 1658 1199 1658 1200 1658 531 1659 1200 1659 496 1659 496 1660 1200 1660 1201 1660 496 1661 1201 1661 501 1661 501 1662 1201 1662 1202 1662 501 1663 1202 1663 467 1663 467 1664 1202 1664 1203 1664 467 1665 1203 1665 468 1665 468 1666 1203 1666 1204 1666 468 1667 1204 1667 470 1667 470 1668 1204 1668 1205 1668 470 1669 1205 1669 474 1669 474 1670 1205 1670 1206 1670 474 1671 1206 1671 473 1671 473 1672 1206 1672 1181 1672 473 1673 1181 1673 471 1673 528 1674 1207 1674 1208 1674 528 1675 1208 1675 509 1675 509 1676 1208 1676 1209 1676 509 1677 1209 1677 535 1677 535 1678 1209 1678 1210 1678 535 1679 1210 1679 534 1679 534 1680 1210 1680 1211 1680 534 1681 1211 1681 532 1681 532 1682 1211 1682 1212 1682 532 1683 1212 1683 549 1683 549 1684 1212 1684 1213 1684 549 1685 1213 1685 550 1685 550 1686 1213 1686 1214 1686 550 1687 1214 1687 551 1687 551 1688 1214 1688 1215 1688 551 1689 1215 1689 552 1689 552 1690 1215 1690 1216 1690 552 1691 1216 1691 553 1691 553 1692 1216 1692 1217 1692 553 1693 1217 1693 554 1693 554 1694 1217 1694 1218 1694 554 1695 1218 1695 533 1695 533 1696 1218 1696 1219 1696 533 1697 1219 1697 536 1697 536 1698 1219 1698 1220 1698 536 1699 1220 1699 507 1699 507 1700 1220 1700 1221 1700 507 1701 1221 1701 508 1701 508 1702 1221 1702 1222 1702 508 1703 1222 1703 530 1703 530 1704 1222 1704 1197 1704 530 1705 1197 1705 529 1705 463 1706 1223 1706 1224 1706 463 1707 1224 1707 465 1707 465 1708 1224 1708 1225 1708 465 1709 1225 1709 466 1709 466 1710 1225 1710 1226 1710 466 1711 1226 1711 488 1711 488 1712 1226 1712 1227 1712 488 1713 1227 1713 489 1713 489 1714 1227 1714 1228 1714 489 1715 1228 1715 490 1715 490 1716 1228 1716 1229 1716 490 1717 1229 1717 460 1717 460 1718 1229 1718 1230 1718 460 1719 1230 1719 459 1719 459 1720 1230 1720 1231 1720 459 1721 1231 1721 457 1721 457 1722 1231 1722 1232 1722 457 1723 1232 1723 527 1723 527 1724 1232 1724 1207 1724 527 1725 1207 1725 528 1725 482 1726 1233 1726 1234 1726 482 1727 1234 1727 475 1727 475 1728 1234 1728 1235 1728 475 1729 1235 1729 500 1729 500 1730 1235 1730 1236 1730 500 1731 1236 1731 499 1731 499 1732 1236 1732 1237 1732 499 1733 1237 1733 498 1733 498 1734 1237 1734 1238 1734 498 1735 1238 1735 522 1735 522 1736 1238 1736 1239 1736 522 1737 1239 1737 520 1737 520 1738 1239 1738 1240 1738 520 1739 1240 1739 521 1739 521 1740 1240 1740 1241 1740 521 1741 1241 1741 511 1741 511 1742 1241 1742 1242 1742 511 1743 1242 1743 513 1743 513 1744 1242 1744 1243 1744 513 1745 1243 1745 589 1745 481 1746 1180 1746 1244 1746 481 1747 1244 1747 561 1747 561 1748 1244 1748 1245 1748 561 1749 1245 1749 562 1749 562 1750 1245 1750 1246 1750 562 1751 1246 1751 583 1751 583 1752 1246 1752 1247 1752 583 1753 1247 1753 584 1753 584 1754 1247 1754 1248 1754 584 1755 1248 1755 540 1755 540 1756 1248 1756 1249 1756 540 1757 1249 1757 541 1757 541 1758 1249 1758 1250 1758 541 1759 1250 1759 543 1759 543 1760 1250 1760 1251 1760 543 1761 1251 1761 544 1761 544 1762 1251 1762 1252 1762 544 1763 1252 1763 585 1763 585 1764 1252 1764 1253 1764 585 1765 1253 1765 586 1765 586 1766 1253 1766 1254 1766 586 1767 1254 1767 563 1767 563 1768 1254 1768 1255 1768 563 1769 1255 1769 564 1769 564 1770 1255 1770 1256 1770 564 1771 1256 1771 565 1771 565 1772 1256 1772 1257 1772 565 1773 1257 1773 566 1773 566 1774 1257 1774 1258 1774 566 1775 1258 1775 542 1775 542 1776 1258 1776 1233 1776 542 1777 1233 1777 482 1777 525 1778 1259 1778 1260 1778 525 1779 1260 1779 547 1779 547 1780 1260 1780 1261 1780 547 1781 1261 1781 548 1781 548 1782 1261 1782 1262 1782 548 1783 1262 1783 464 1783 464 1784 1262 1784 1263 1784 464 1785 1263 1785 484 1785 484 1786 1263 1786 1264 1786 484 1787 1264 1787 461 1787 461 1788 1264 1788 1265 1788 461 1789 1265 1789 462 1789 462 1790 1265 1790 1266 1790 462 1791 1266 1791 485 1791 485 1792 1266 1792 1267 1792 485 1793 1267 1793 486 1793 486 1794 1267 1794 1268 1794 486 1795 1268 1795 526 1795 526 1796 1268 1796 1269 1796 526 1797 1269 1797 502 1797 502 1798 1269 1798 1270 1798 502 1799 1270 1799 503 1799 503 1800 1270 1800 1271 1800 503 1801 1271 1801 505 1801 505 1802 1271 1802 1272 1802 505 1803 1272 1803 506 1803 506 1804 1272 1804 1273 1804 506 1805 1273 1805 504 1805 504 1806 1273 1806 1274 1806 504 1807 1274 1807 487 1807 487 1808 1274 1808 1223 1808 487 1809 1223 1809 463 1809 514 1810 1275 1810 1276 1810 514 1811 1276 1811 512 1811 512 1812 1276 1812 1277 1812 512 1813 1277 1813 510 1813 510 1814 1277 1814 1278 1814 510 1815 1278 1815 519 1815 519 1816 1278 1816 1279 1816 519 1817 1279 1817 523 1817 523 1818 1279 1818 1280 1818 523 1819 1280 1819 456 1819 456 1820 1280 1820 1281 1820 456 1821 1281 1821 494 1821 494 1822 1281 1822 1282 1822 494 1823 1282 1823 495 1823 495 1824 1282 1824 1283 1824 495 1825 1283 1825 497 1825 497 1826 1283 1826 1284 1826 497 1827 1284 1827 524 1827 524 1828 1284 1828 1259 1828 524 1829 1259 1829 525 1829 590 1830 1285 1830 1286 1830 590 1831 1286 1831 588 1831 588 1832 1286 1832 1287 1832 588 1833 1287 1833 567 1833 567 1834 1287 1834 1288 1834 567 1835 1288 1835 568 1835 568 1836 1288 1836 1289 1836 568 1837 1289 1837 569 1837 569 1838 1289 1838 1290 1838 569 1839 1290 1839 570 1839 570 1840 1290 1840 1291 1840 570 1841 1291 1841 571 1841 571 1842 1291 1842 1292 1842 571 1843 1292 1843 572 1843 572 1844 1292 1844 1293 1844 572 1845 1293 1845 515 1845 515 1846 1293 1846 1294 1846 515 1847 1294 1847 516 1847 516 1848 1294 1848 1295 1848 516 1849 1295 1849 518 1849 589 1850 1243 1850 1296 1850 589 1851 1296 1851 591 1851 591 1852 1296 1852 1297 1852 591 1853 1297 1853 592 1853 592 1854 1297 1854 1298 1854 592 1855 1298 1855 597 1855 597 1856 1298 1856 1299 1856 597 1857 1299 1857 598 1857 598 1858 1299 1858 1300 1858 598 1859 1300 1859 600 1859 600 1860 1300 1860 1301 1860 600 1861 1301 1861 601 1861 601 1862 1301 1862 1302 1862 601 1863 1302 1863 602 1863 602 1864 1302 1864 1303 1864 602 1865 1303 1865 603 1865 603 1866 1303 1866 1304 1866 603 1867 1304 1867 607 1867 607 1868 1304 1868 1305 1868 607 1869 1305 1869 605 1869 605 1870 1305 1870 1306 1870 605 1871 1306 1871 606 1871 606 1872 1306 1872 1307 1872 606 1873 1307 1873 608 1873 608 1874 1307 1874 1308 1874 608 1875 1308 1875 609 1875 609 1876 1308 1876 1309 1876 609 1877 1309 1877 604 1877 604 1878 1309 1878 1310 1878 604 1879 1310 1879 599 1879 599 1880 1310 1880 1285 1880 599 1881 1285 1881 590 1881 518 1882 1295 1882 1311 1882 518 1883 1311 1883 576 1883 576 1884 1311 1884 1312 1884 576 1885 1312 1885 577 1885 577 1886 1312 1886 1313 1886 577 1887 1313 1887 587 1887 587 1888 1313 1888 1314 1888 587 1889 1314 1889 573 1889 573 1890 1314 1890 1315 1890 573 1891 1315 1891 574 1891 574 1892 1315 1892 1316 1892 574 1893 1316 1893 593 1893 593 1894 1316 1894 1317 1894 593 1895 1317 1895 594 1895 594 1896 1317 1896 1318 1896 594 1897 1318 1897 595 1897 595 1898 1318 1898 1319 1898 595 1899 1319 1899 575 1899 575 1900 1319 1900 1320 1900 575 1901 1320 1901 596 1901 596 1902 1320 1902 1321 1902 596 1903 1321 1903 579 1903 579 1904 1321 1904 1322 1904 579 1905 1322 1905 578 1905 578 1906 1322 1906 1323 1906 578 1907 1323 1907 517 1907 517 1908 1323 1908 1324 1908 517 1909 1324 1909 545 1909 545 1910 1324 1910 1325 1910 545 1911 1325 1911 546 1911 546 1912 1325 1912 1275 1912 546 1913 1275 1913 514 1913 1541 2345 1542 2345 1543 2345 1544 2346 1545 2346 1546 2346 1546 2347 1545 2347 1547 2347 1548 2348 1549 2348 1550 2348 1551 2349 1552 2349 1553 2349 1554 2350 1555 2350 1543 2350 1543 2351 1555 2351 1556 2351 1543 2352 1556 2352 1557 2352 1558 2353 1559 2353 1560 2353 1560 2354 1559 2354 1561 2354 1562 2355 1543 2355 1546 2355 1546 2356 1543 2356 1557 2356 1546 2357 1557 2357 1544 2357 1550 2358 1549 2358 1563 2358 1564 2359 1565 2359 1549 2359 1549 2360 1565 2360 1566 2360 1549 2361 1566 2361 1567 2361 1547 2362 1568 2362 1546 2362 1546 2363 1568 2363 1569 2363 1546 2364 1569 2364 1570 2364 1570 2365 1569 2365 1571 2365 1570 2366 1571 2366 1572 2366 1573 2367 1574 2367 1575 2367 1552 2368 1576 2368 1553 2368 1553 2369 1576 2369 1577 2369 1553 2370 1577 2370 1578 2370 1579 2371 1580 2371 1581 2371 1562 2372 1582 2372 1543 2372 1543 2373 1582 2373 1583 2373 1543 2374 1583 2374 1549 2374 1549 2375 1583 2375 1584 2375 1549 2376 1584 2376 1563 2376 1585 2377 1549 2377 1579 2377 1579 2378 1549 2378 1586 2378 1579 2379 1586 2379 1580 2379 1587 2380 1588 2380 1589 2380 1587 2381 1590 2381 1588 2381 1588 2382 1590 2382 1564 2382 1588 2383 1564 2383 1591 2383 1592 2384 1593 2384 1594 2384 1561 2385 1559 2385 1575 2385 1575 2386 1559 2386 1595 2386 1575 2387 1595 2387 1573 2387 1574 2388 1596 2388 1575 2388 1575 2389 1596 2389 1597 2389 1575 2390 1597 2390 1598 2390 1598 2391 1599 2391 1575 2391 1575 2392 1599 2392 1600 2392 1575 2393 1600 2393 1601 2393 1601 2394 1602 2394 1575 2394 1575 2395 1602 2395 1603 2395 1575 2396 1603 2396 1604 2396 1553 2397 1605 2397 1606 2397 1606 2398 1605 2398 1607 2398 1606 2399 1607 2399 1550 2399 1550 2400 1607 2400 1608 2400 1550 2401 1608 2401 1548 2401 1572 2402 1609 2402 1570 2402 1570 2403 1609 2403 1610 2403 1570 2404 1610 2404 1611 2404 1585 2405 1612 2405 1549 2405 1549 2406 1612 2406 1613 2406 1549 2407 1613 2407 1564 2407 1564 2408 1613 2408 1614 2408 1564 2409 1614 2409 1591 2409 1567 2410 1615 2410 1549 2410 1549 2411 1615 2411 1616 2411 1549 2412 1616 2412 1543 2412 1543 2413 1616 2413 1617 2413 1543 2414 1617 2414 1541 2414 1554 2415 1543 2415 1594 2415 1594 2416 1543 2416 1618 2416 1594 2417 1618 2417 1592 2417 1593 2418 1619 2418 1594 2418 1594 2419 1619 2419 1620 2419 1594 2420 1620 2420 1621 2420 1621 2421 1622 2421 1594 2421 1594 2422 1622 2422 1623 2422 1594 2423 1623 2423 1624 2423 1624 2424 1625 2424 1594 2424 1594 2425 1625 2425 1626 2425 1594 2426 1626 2426 1627 2426 1611 2427 1628 2427 1570 2427 1570 2428 1628 2428 1629 2428 1570 2429 1629 2429 1630 2429 1630 2430 1629 2430 1631 2430 1606 2431 1632 2431 1553 2431 1553 2432 1632 2432 1633 2432 1553 2433 1633 2433 1634 2433 1635 2434 1636 2434 1637 2434 1638 2435 1639 2435 1640 2435 1640 2436 1639 2436 1641 2436 1640 2437 1641 2437 1642 2437 1642 2438 1641 2438 1643 2438 1578 2439 1644 2439 1553 2439 1553 2440 1644 2440 1645 2440 1553 2441 1645 2441 1646 2441 1646 2442 1645 2442 1647 2442 1646 2443 1647 2443 1648 2443 1648 2444 1649 2444 1646 2444 1646 2445 1649 2445 1650 2445 1646 2446 1650 2446 1651 2446 1651 2447 1652 2447 1646 2447 1646 2448 1652 2448 1653 2448 1646 2449 1653 2449 1654 2449 1558 2450 1551 2450 1559 2450 1559 2451 1551 2451 1553 2451 1559 2452 1553 2452 1655 2452 1655 2453 1553 2453 1634 2453 1656 2454 1657 2454 1658 2454 1638 2455 1640 2455 1629 2455 1629 2456 1640 2456 1659 2456 1629 2457 1659 2457 1631 2457 1654 2458 1660 2458 1646 2458 1646 2459 1660 2459 1661 2459 1646 2460 1661 2460 1662 2460 1662 2461 1663 2461 1646 2461 1646 2462 1663 2462 1664 2462 1646 2463 1664 2463 1665 2463 1665 2464 1664 2464 1666 2464 1636 2465 1667 2465 1637 2465 1637 2466 1667 2466 1668 2466 1637 2467 1668 2467 1669 2467 1669 2468 1670 2468 1637 2468 1637 2469 1670 2469 1671 2469 1637 2470 1671 2470 1581 2470 1581 2471 1671 2471 1672 2471 1581 2472 1672 2472 1579 2472 1657 2473 1673 2473 1658 2473 1658 2474 1673 2474 1674 2474 1658 2475 1674 2475 1675 2475 1676 2476 1637 2476 1677 2476 1677 2477 1637 2477 1678 2477 1676 2478 1679 2478 1637 2478 1637 2479 1679 2479 1680 2479 1637 2480 1680 2480 1635 2480 1675 2481 1681 2481 1658 2481 1658 2482 1681 2482 1682 2482 1658 2483 1682 2483 1589 2483 1589 2484 1682 2484 1683 2484 1589 2485 1683 2485 1587 2485 1684 2486 1685 2486 1686 2486 1686 2487 1685 2487 1677 2487 1686 2488 1677 2488 1687 2488 1687 2489 1677 2489 1678 2489 1688 2490 1689 2490 1658 2490 1658 2491 1689 2491 1690 2491 1658 2492 1690 2492 1656 2492 1691 2493 1692 2493 1693 2493 1693 2494 1692 2494 1694 2494 1693 2495 1694 2495 1695 2495 1691 2496 1693 2496 1658 2496 1658 2497 1693 2497 1696 2497 1658 2498 1696 2498 1688 2498 1697 2499 1698 2499 1699 2499 1700 2500 1701 2500 1698 2500 1698 2501 1701 2501 1702 2501 1703 2502 1704 2502 1705 2502 1705 2503 1704 2503 1706 2503 1705 2504 1706 2504 1707 2504 1708 2505 1709 2505 1710 2505 1710 2506 1709 2506 1711 2506 1710 2507 1711 2507 1712 2507 1702 2508 1713 2508 1698 2508 1698 2509 1713 2509 1714 2509 1698 2510 1714 2510 1699 2510 1707 2511 1715 2511 1716 2511 1717 2512 1718 2512 1719 2512 1720 2513 1721 2513 1722 2513 1723 2514 1724 2514 1725 2514 1726 2515 1727 2515 1710 2515 1710 2516 1727 2516 1728 2516 1710 2517 1728 2517 1729 2517 1703 2518 1705 2518 1730 2518 1730 2519 1705 2519 1731 2519 1730 2520 1731 2520 1732 2520 1719 2521 1718 2521 1722 2521 1722 2522 1718 2522 1733 2522 1722 2523 1733 2523 1720 2523 1734 2524 1735 2524 1723 2524 1723 2525 1735 2525 1736 2525 1729 2526 1737 2526 1710 2526 1710 2527 1737 2527 1738 2527 1710 2528 1738 2528 1708 2528 1739 2529 1740 2529 1741 2529 1715 2530 1742 2530 1716 2530 1716 2531 1742 2531 1743 2531 1716 2532 1743 2532 1744 2532 1745 2533 1722 2533 1746 2533 1746 2534 1722 2534 1747 2534 1707 2535 1716 2535 1705 2535 1705 2536 1716 2536 1748 2536 1705 2537 1748 2537 1749 2537 1749 2538 1750 2538 1705 2538 1705 2539 1750 2539 1723 2539 1705 2540 1723 2540 1751 2540 1751 2541 1723 2541 1725 2541 1752 2542 1753 2542 1754 2542 1754 2543 1753 2543 1755 2543 1756 2544 1757 2544 1698 2544 1698 2545 1757 2545 1758 2545 1752 2546 1754 2546 1723 2546 1723 2547 1754 2547 1759 2547 1723 2548 1759 2548 1734 2548 1736 2549 1760 2549 1723 2549 1723 2550 1760 2550 1761 2550 1723 2551 1761 2551 1724 2551 1762 2552 1763 2552 1710 2552 1710 2553 1763 2553 1764 2553 1710 2554 1764 2554 1765 2554 1765 2555 1766 2555 1710 2555 1710 2556 1766 2556 1767 2556 1710 2557 1767 2557 1726 2557 1699 2558 1768 2558 1697 2558 1697 2559 1768 2559 1769 2559 1697 2560 1769 2560 1770 2560 1770 2561 1769 2561 1771 2561 1739 2562 1741 2562 1732 2562 1732 2563 1741 2563 1772 2563 1732 2564 1772 2564 1773 2564 1750 2565 1774 2565 1723 2565 1723 2566 1774 2566 1775 2566 1723 2567 1775 2567 1776 2567 1776 2568 1775 2568 1777 2568 1712 2569 1700 2569 1710 2569 1710 2570 1700 2570 1698 2570 1710 2571 1698 2571 1778 2571 1778 2572 1698 2572 1758 2572 1740 2573 1779 2573 1741 2573 1741 2574 1779 2574 1780 2574 1741 2575 1780 2575 1781 2575 1773 2576 1782 2576 1732 2576 1732 2577 1782 2577 1783 2577 1732 2578 1783 2578 1730 2578 1784 2579 1785 2579 1786 2579 1721 2580 1787 2580 1722 2580 1722 2581 1787 2581 1788 2581 1722 2582 1788 2582 1747 2582 1747 2583 1788 2583 1789 2583 1789 2584 1790 2584 1747 2584 1747 2585 1790 2585 1791 2585 1747 2586 1791 2586 1792 2586 1756 2587 1698 2587 1755 2587 1755 2588 1698 2588 1793 2588 1755 2589 1793 2589 1754 2589 1794 2590 1795 2590 1796 2590 1796 2591 1795 2591 1797 2591 1796 2592 1797 2592 1798 2592 1799 2593 1800 2593 1786 2593 1786 2594 1800 2594 1801 2594 1786 2595 1801 2595 1802 2595 1803 2596 1804 2596 1805 2596 1771 2597 1769 2597 1796 2597 1796 2598 1769 2598 1806 2598 1796 2599 1806 2599 1794 2599 1807 2600 1808 2600 1809 2600 1809 2601 1808 2601 1810 2601 1798 2602 1811 2602 1796 2602 1796 2603 1811 2603 1808 2603 1796 2604 1808 2604 1812 2604 1812 2605 1808 2605 1807 2605 1802 2606 1813 2606 1786 2606 1786 2607 1813 2607 1814 2607 1786 2608 1814 2608 1784 2608 1803 2609 1805 2609 1815 2609 1804 2610 1816 2610 1805 2610 1805 2611 1816 2611 1817 2611 1805 2612 1817 2612 1818 2612 1819 2613 1820 2613 1821 2613 1744 2614 1822 2614 1716 2614 1716 2615 1822 2615 1823 2615 1716 2616 1823 2616 1786 2616 1786 2617 1823 2617 1824 2617 1786 2618 1824 2618 1799 2618 1785 2619 1825 2619 1786 2619 1786 2620 1825 2620 1826 2620 1786 2621 1826 2621 1827 2621 1828 2622 1829 2622 1827 2622 1827 2623 1829 2623 1830 2623 1827 2624 1830 2624 1786 2624 1745 2625 1831 2625 1722 2625 1722 2626 1831 2626 1832 2626 1722 2627 1832 2627 1833 2627 1833 2628 1832 2628 1834 2628 1833 2629 1834 2629 1777 2629 1777 2630 1834 2630 1835 2630 1777 2631 1835 2631 1776 2631 1818 2632 1836 2632 1805 2632 1805 2633 1836 2633 1837 2633 1805 2634 1837 2634 1838 2634 1839 2635 1840 2635 1792 2635 1792 2636 1840 2636 1841 2636 1792 2637 1841 2637 1747 2637 1717 2638 1719 2638 1805 2638 1805 2639 1719 2639 1842 2639 1805 2640 1842 2640 1815 2640 1819 2641 1821 2641 1837 2641 1837 2642 1821 2642 1843 2642 1837 2643 1843 2643 1838 2643 1839 2644 1844 2644 1840 2644 1840 2645 1844 2645 1845 2645 1840 2646 1845 2646 1846 2646 1846 2647 1847 2647 1840 2647 1840 2648 1847 2648 1848 2648 1840 2649 1848 2649 1849 2649 1849 2650 1850 2650 1840 2650 1840 2651 1850 2651 1851 2651 1840 2652 1851 2652 1852 2652 1093 3306 2268 3306 1094 3306 1094 3307 2268 3307 1095 3307 2269 3308 2270 3308 1038 3308 1038 3309 1037 3309 2269 3309 2269 3310 1037 3310 1036 3310 2269 3311 1036 3311 2271 3311 1093 3312 1092 3312 2268 3312 2268 3313 1092 3313 1091 3313 2268 3314 1091 3314 2272 3314 2272 3315 1091 3315 1090 3315 2272 3316 1090 3316 2273 3316 2274 3317 1040 3317 2270 3317 2270 3318 1040 3318 1039 3318 2270 3319 1039 3319 1038 3319 1036 3320 1035 3320 2271 3320 2271 3321 1035 3321 1034 3321 2271 3322 1034 3322 2275 3322 2275 3323 1034 3323 1033 3323 1018 3324 1017 3324 2276 3324 2277 3325 1019 3325 2278 3325 2278 3326 1019 3326 1018 3326 2278 3327 1018 3327 2279 3327 2279 3328 1018 3328 2276 3328 1017 3329 1016 3329 2276 3329 2276 3330 1016 3330 1015 3330 2276 3331 1015 3331 2274 3331 2274 3332 1015 3332 1014 3332 2274 3333 1014 3333 1040 3333 1090 3334 1089 3334 2273 3334 2273 3335 1089 3335 1088 3335 2273 3336 1088 3336 2280 3336 2280 3337 1088 3337 1024 3337 2280 3338 1024 3338 2277 3338 2277 3339 1024 3339 1023 3339 2277 3340 1023 3340 1022 3340 1022 3341 1021 3341 2277 3341 2277 3342 1021 3342 1020 3342 2277 3343 1020 3343 1019 3343 1060 3344 1059 3344 2281 3344 1065 3345 1064 3345 2282 3345 1033 3346 1032 3346 2283 3346 2283 3347 1032 3347 1031 3347 2283 3348 1031 3348 1030 3348 1030 3349 1029 3349 2283 3349 2283 3350 1029 3350 1028 3350 2283 3351 1028 3351 2284 3351 1064 3352 1063 3352 2282 3352 2282 3353 1063 3353 1062 3353 2282 3354 1062 3354 2281 3354 2281 3355 1062 3355 1061 3355 2281 3356 1061 3356 1060 3356 1028 3357 1027 3357 2284 3357 2284 3358 1027 3358 1026 3358 2284 3359 1026 3359 2285 3359 2285 3360 1026 3360 1025 3360 2285 3361 1025 3361 2286 3361 1049 3362 1048 3362 2287 3362 1065 3363 2282 3363 1066 3363 1066 3364 2282 3364 2288 3364 1066 3365 2288 3365 1041 3365 1041 3366 2288 3366 2289 3366 1041 3367 2289 3367 1042 3367 1042 3368 2289 3368 2290 3368 1042 3369 2290 3369 1043 3369 2287 3370 1045 3370 2290 3370 2290 3371 1045 3371 1044 3371 2290 3372 1044 3372 1043 3372 1048 3373 1047 3373 2287 3373 2287 3374 1047 3374 1046 3374 2287 3375 1046 3375 1045 3375 2286 3376 1025 3376 2287 3376 2287 3377 1025 3377 1050 3377 2287 3378 1050 3378 1049 3378 1112 3379 1111 3379 2291 3379 1057 3380 1056 3380 2292 3380 2292 3381 1056 3381 2293 3381 1056 3382 1055 3382 2293 3382 2293 3383 1055 3383 1054 3383 2293 3384 1054 3384 2294 3384 2295 3385 2296 3385 1118 3385 1118 3386 1117 3386 2295 3386 2295 3387 1117 3387 1116 3387 2295 3388 1116 3388 2297 3388 1057 3389 2292 3389 1058 3389 1058 3390 2292 3390 2298 3390 1058 3391 2298 3391 1059 3391 1116 3392 1115 3392 2297 3392 2297 3393 1115 3393 1114 3393 2297 3394 1114 3394 2291 3394 2291 3395 1114 3395 1113 3395 2291 3396 1113 3396 1112 3396 1070 3397 2299 3397 1071 3397 1071 3398 2299 3398 2300 3398 1071 3399 2300 3399 1072 3399 1072 3400 2300 3400 2301 3400 1072 3401 2301 3401 2302 3401 1070 3402 1069 3402 2299 3402 2299 3403 1069 3403 1068 3403 2299 3404 1068 3404 2296 3404 2296 3405 1068 3405 1067 3405 2296 3406 1067 3406 1118 3406 1054 3407 1053 3407 2294 3407 2294 3408 1053 3408 1052 3408 2294 3409 1052 3409 2303 3409 2303 3410 1052 3410 1051 3410 2303 3411 1051 3411 2302 3411 2302 3412 1051 3412 1076 3412 2302 3413 1076 3413 1075 3413 1075 3414 1074 3414 2302 3414 2302 3415 1074 3415 1073 3415 2302 3416 1073 3416 1072 3416 1096 3417 1095 3417 2304 3417 1145 3418 1144 3418 2305 3418 2306 3419 2307 3419 1100 3419 2305 3420 1144 3420 2308 3420 1144 3421 1143 3421 2308 3421 2308 3422 1143 3422 1142 3422 2308 3423 1142 3423 2309 3423 1100 3424 1099 3424 2306 3424 2306 3425 1099 3425 1098 3425 2306 3426 1098 3426 2304 3426 2304 3427 1098 3427 1097 3427 2304 3428 1097 3428 1096 3428 1145 3429 2305 3429 1146 3429 1146 3430 2305 3430 2310 3430 1146 3431 2310 3431 1147 3431 2311 3432 1102 3432 2307 3432 2307 3433 1102 3433 1101 3433 2307 3434 1101 3434 1100 3434 1142 3435 1141 3435 2309 3435 2309 3436 1141 3436 1140 3436 2309 3437 1140 3437 2312 3437 2312 3438 1140 3438 1087 3438 2312 3439 1087 3439 2313 3439 2313 3440 1087 3440 1086 3440 2313 3441 1086 3441 1085 3441 1085 3442 1084 3442 2313 3442 2313 3443 1084 3443 1083 3443 2313 3444 1083 3444 1082 3444 1080 3445 2314 3445 1081 3445 1081 3446 2314 3446 2315 3446 1081 3447 2315 3447 1082 3447 1082 3448 2315 3448 2316 3448 1082 3449 2316 3449 2313 3449 1080 3450 1079 3450 2314 3450 2314 3451 1079 3451 1078 3451 2314 3452 1078 3452 2311 3452 2311 3453 1078 3453 1077 3453 2311 3454 1077 3454 1102 3454 2317 3455 2318 3455 1167 3455 1109 3456 2319 3456 1110 3456 1110 3457 2319 3457 1111 3457 2320 3458 1169 3458 2318 3458 2318 3459 1169 3459 1168 3459 2318 3460 1168 3460 1167 3460 1109 3461 1108 3461 2319 3461 2319 3462 1108 3462 1107 3462 2319 3463 1107 3463 2321 3463 2321 3464 1107 3464 1106 3464 2321 3465 1106 3465 2322 3465 1167 3466 1166 3466 2317 3466 2317 3467 1166 3467 1165 3467 2317 3468 1165 3468 2323 3468 1165 3469 1164 3469 2323 3469 2323 3470 1164 3470 1163 3470 2323 3471 1163 3471 2324 3471 2324 3472 1163 3472 1162 3472 2325 3473 1124 3473 2326 3473 2326 3474 1124 3474 1123 3474 1122 3475 2327 3475 1123 3475 1123 3476 2327 3476 2328 3476 1123 3477 2328 3477 2326 3477 1106 3478 1105 3478 2322 3478 2322 3479 1105 3479 1104 3479 2322 3480 1104 3480 2329 3480 2329 3481 1104 3481 1103 3481 2329 3482 1103 3482 2325 3482 2325 3483 1103 3483 1128 3483 2325 3484 1128 3484 1127 3484 1122 3485 1121 3485 2327 3485 2327 3486 1121 3486 1120 3486 2327 3487 1120 3487 2320 3487 2320 3488 1120 3488 1119 3488 2320 3489 1119 3489 1169 3489 1127 3490 1126 3490 2325 3490 2325 3491 1126 3491 1125 3491 2325 3492 1125 3492 1124 3492 1148 3493 1147 3493 2330 3493 1153 3494 1152 3494 2331 3494 1162 3495 1161 3495 2332 3495 2332 3496 1161 3496 1160 3496 2332 3497 1160 3497 1159 3497 1159 3498 1158 3498 2332 3498 2332 3499 1158 3499 1157 3499 2332 3500 1157 3500 2333 3500 1152 3501 1151 3501 2331 3501 2331 3502 1151 3502 1150 3502 2331 3503 1150 3503 2330 3503 2330 3504 1150 3504 1149 3504 2330 3505 1149 3505 1148 3505 1157 3506 1156 3506 2333 3506 2333 3507 1156 3507 1155 3507 2333 3508 1155 3508 2334 3508 2334 3509 1155 3509 1139 3509 2334 3510 1139 3510 2335 3510 1153 3511 2331 3511 1154 3511 1154 3512 2331 3512 2336 3512 1154 3513 2336 3513 1129 3513 1129 3514 2336 3514 2337 3514 1129 3515 2337 3515 1130 3515 1130 3516 2337 3516 2338 3516 1130 3517 2338 3517 1131 3517 2339 3518 1133 3518 2338 3518 2338 3519 1133 3519 1132 3519 2338 3520 1132 3520 1131 3520 1137 3521 1136 3521 2339 3521 2335 3522 1139 3522 2339 3522 2339 3523 1139 3523 1138 3523 2339 3524 1138 3524 1137 3524 1136 3525 1135 3525 2339 3525 2339 3526 1135 3526 1134 3526 2339 3527 1134 3527 1133 3527 1249 3528 2340 3528 1250 3528 1250 3529 2340 3529 1251 3529 1249 3530 1248 3530 2340 3530 2340 3531 1248 3531 1247 3531 2340 3532 1247 3532 2341 3532 2341 3533 1247 3533 1246 3533 2341 3534 1246 3534 2342 3534 2343 3535 2344 3535 1196 3535 2345 3536 2346 3536 1192 3536 1196 3537 1195 3537 2343 3537 2343 3538 1195 3538 1194 3538 2343 3539 1194 3539 2346 3539 2346 3540 1194 3540 1193 3540 2346 3541 1193 3541 1192 3541 1192 3542 1191 3542 2345 3542 2345 3543 1191 3543 1190 3543 2345 3544 1190 3544 2347 3544 2347 3545 1190 3545 1189 3545 1178 3546 1177 3546 2348 3546 1174 3547 1173 3547 2349 3547 1246 3548 1245 3548 2342 3548 2342 3549 1245 3549 1244 3549 2342 3550 1244 3550 2350 3550 2350 3551 1244 3551 1180 3551 2350 3552 1180 3552 2348 3552 2348 3553 1180 3553 1179 3553 2348 3554 1179 3554 1178 3554 2349 3555 2351 3555 1174 3555 1174 3556 2351 3556 2352 3556 1174 3557 2352 3557 1175 3557 1175 3558 2352 3558 2348 3558 1175 3559 2348 3559 1176 3559 1176 3560 2348 3560 1177 3560 1173 3561 1172 3561 2349 3561 2349 3562 1172 3562 1171 3562 2349 3563 1171 3563 2344 3563 2344 3564 1171 3564 1170 3564 2344 3565 1170 3565 1196 3565 1216 3566 1215 3566 2353 3566 1189 3567 1188 3567 2354 3567 2354 3568 1188 3568 1187 3568 2354 3569 1187 3569 1186 3569 1186 3570 1185 3570 2354 3570 2354 3571 1185 3571 1184 3571 2354 3572 1184 3572 2355 3572 1221 3573 1220 3573 2356 3573 1220 3574 1219 3574 2356 3574 2356 3575 1219 3575 1218 3575 2356 3576 1218 3576 2353 3576 2353 3577 1218 3577 1217 3577 2353 3578 1217 3578 1216 3578 1184 3579 1183 3579 2355 3579 2355 3580 1183 3580 1182 3580 2355 3581 1182 3581 2357 3581 2357 3582 1182 3582 1181 3582 2357 3583 1181 3583 2358 3583 1221 3584 2356 3584 1222 3584 1222 3585 2356 3585 2359 3585 1222 3586 2359 3586 1197 3586 1197 3587 2359 3587 2360 3587 1197 3588 2360 3588 1198 3588 1198 3589 2360 3589 2361 3589 1198 3590 2361 3590 1199 3590 2362 3591 1201 3591 2361 3591 2361 3592 1201 3592 1200 3592 2361 3593 1200 3593 1199 3593 2362 3594 1205 3594 1204 3594 2358 3595 1181 3595 2362 3595 2362 3596 1181 3596 1206 3596 2362 3597 1206 3597 1205 3597 1204 3598 1203 3598 2362 3598 2362 3599 1203 3599 1202 3599 2362 3600 1202 3600 1201 3600 1268 3601 1267 3601 2363 3601 1213 3602 1212 3602 2364 3602 2365 3603 2366 3603 1210 3603 2367 3604 2368 3604 1272 3604 2369 3605 1274 3605 2368 3605 2368 3606 1274 3606 1273 3606 2368 3607 1273 3607 1272 3607 2364 3608 1212 3608 2366 3608 2366 3609 1212 3609 1211 3609 2366 3610 1211 3610 1210 3610 1213 3611 2364 3611 1214 3611 1214 3612 2364 3612 2370 3612 1214 3613 2370 3613 1215 3613 1272 3614 1271 3614 2367 3614 2367 3615 1271 3615 1270 3615 2367 3616 1270 3616 2363 3616 2363 3617 1270 3617 1269 3617 2363 3618 1269 3618 1268 3618 1231 3619 1230 3619 2371 3619 2371 3620 1230 3620 1229 3620 2371 3621 1229 3621 1228 3621 1210 3622 1209 3622 2365 3622 2365 3623 1209 3623 1208 3623 2365 3624 1208 3624 2372 3624 2372 3625 1208 3625 1207 3625 2372 3626 1207 3626 2371 3626 2371 3627 1207 3627 1232 3627 2371 3628 1232 3628 1231 3628 1226 3629 2373 3629 1227 3629 1227 3630 2373 3630 2374 3630 1227 3631 2374 3631 1228 3631 1228 3632 2374 3632 2375 3632 1228 3633 2375 3633 2371 3633 1226 3634 1225 3634 2373 3634 2373 3635 1225 3635 1224 3635 2373 3636 1224 3636 2369 3636 2369 3637 1224 3637 1223 3637 2369 3638 1223 3638 1274 3638 1252 3639 1251 3639 2376 3639 1301 3640 1300 3640 2377 3640 2378 3641 2379 3641 1298 3641 2380 3642 2381 3642 1258 3642 2377 3643 1300 3643 2379 3643 2379 3644 1300 3644 1299 3644 2379 3645 1299 3645 1298 3645 1258 3646 1257 3646 2380 3646 2380 3647 1257 3647 1256 3647 2380 3648 1256 3648 2382 3648 1301 3649 2377 3649 1302 3649 1302 3650 2377 3650 2383 3650 1302 3651 2383 3651 1303 3651 1256 3652 1255 3652 2382 3652 2382 3653 1255 3653 1254 3653 2382 3654 1254 3654 2376 3654 2376 3655 1254 3655 1253 3655 2376 3656 1253 3656 1252 3656 1241 3657 1240 3657 2384 3657 2384 3658 1240 3658 1239 3658 2384 3659 1239 3659 1238 3659 1236 3660 2385 3660 1237 3660 1237 3661 2385 3661 2386 3661 1237 3662 2386 3662 1238 3662 1238 3663 2386 3663 2387 3663 1238 3664 2387 3664 2384 3664 1298 3665 1297 3665 2378 3665 2378 3666 1297 3666 1296 3666 2378 3667 1296 3667 2388 3667 2388 3668 1296 3668 1243 3668 2388 3669 1243 3669 2384 3669 2384 3670 1243 3670 1242 3670 2384 3671 1242 3671 1241 3671 1236 3672 1235 3672 2385 3672 2385 3673 1235 3673 1234 3673 2385 3674 1234 3674 2381 3674 2381 3675 1234 3675 1233 3675 2381 3676 1233 3676 1258 3676 2389 3677 2390 3677 1321 3677 1265 3678 2391 3678 1266 3678 1266 3679 2391 3679 1267 3679 1265 3680 1264 3680 2391 3680 2391 3681 1264 3681 1263 3681 2391 3682 1263 3682 2392 3682 2392 3683 1263 3683 1262 3683 2392 3684 1262 3684 2393 3684 2394 3685 2395 3685 1325 3685 1325 3686 1324 3686 2394 3686 2394 3687 1324 3687 1323 3687 2394 3688 1323 3688 2390 3688 2390 3689 1323 3689 1322 3689 2390 3690 1322 3690 1321 3690 1321 3691 1320 3691 2389 3691 2389 3692 1320 3692 1319 3692 2389 3693 1319 3693 2396 3693 2396 3694 1319 3694 1318 3694 1279 3695 1278 3695 2397 3695 2398 3696 1280 3696 2399 3696 2399 3697 1280 3697 1279 3697 2399 3698 1279 3698 2400 3698 2400 3699 1279 3699 2397 3699 1278 3700 1277 3700 2397 3700 2397 3701 1277 3701 1276 3701 2397 3702 1276 3702 2395 3702 2395 3703 1276 3703 1275 3703 2395 3704 1275 3704 1325 3704 1262 3705 1261 3705 2393 3705 2393 3706 1261 3706 1260 3706 2393 3707 1260 3707 2401 3707 2401 3708 1260 3708 1259 3708 2401 3709 1259 3709 2398 3709 2398 3710 1259 3710 1284 3710 2398 3711 1284 3711 1283 3711 1283 3712 1282 3712 2398 3712 2398 3713 1282 3713 1281 3713 2398 3714 1281 3714 1280 3714 1304 3715 1303 3715 2402 3715 1316 3716 2403 3716 1317 3716 1317 3717 2403 3717 1318 3717 2404 3718 2403 3718 1313 3718 1316 3719 1315 3719 2403 3719 2403 3720 1315 3720 1314 3720 2403 3721 1314 3721 1313 3721 1313 3722 1312 3722 2404 3722 2404 3723 1312 3723 1311 3723 2404 3724 1311 3724 2405 3724 2405 3725 1311 3725 1295 3725 2405 3726 1295 3726 2406 3726 1308 3727 1307 3727 2407 3727 2407 3728 1307 3728 1306 3728 2407 3729 1306 3729 2402 3729 2402 3730 1306 3730 1305 3730 2402 3731 1305 3731 1304 3731 1288 3732 1287 3732 2408 3732 2408 3733 1287 3733 1286 3733 2408 3734 1286 3734 2409 3734 2409 3735 1286 3735 1285 3735 2409 3736 1285 3736 2410 3736 2410 3737 1285 3737 1310 3737 2410 3738 1310 3738 2407 3738 2407 3739 1310 3739 1309 3739 2407 3740 1309 3740 1308 3740 1288 3741 2408 3741 1289 3741 1289 3742 2408 3742 2411 3742 1289 3743 2411 3743 1290 3743 2406 3744 1295 3744 2411 3744 2411 3745 1295 3745 1294 3745 2411 3746 1294 3746 1293 3746 1293 3747 1292 3747 2411 3747 2411 3748 1292 3748 1291 3748 2411 3749 1291 3749 1290 3749 2412 3750 2413 3750 2414 3750 2415 3751 2416 3751 2417 3751 2417 3752 2416 3752 2418 3752 2416 3753 2419 3753 2418 3753 2418 3754 2419 3754 2420 3754 2418 3755 2420 3755 2421 3755 2413 3756 2422 3756 2414 3756 2414 3757 2422 3757 2418 3757 2414 3758 2418 3758 2423 3758 2423 3759 2418 3759 2421 3759 2424 3760 2415 3760 2425 3760 2426 3761 2427 3761 2424 3761 2424 3762 2428 3762 2415 3762 2415 3763 2428 3763 2429 3763 2415 3764 2429 3764 2416 3764 2430 3765 2431 3765 2414 3765 2414 3766 2431 3766 2432 3766 2414 3767 2432 3767 2412 3767 2425 3768 2433 3768 2424 3768 2424 3769 2433 3769 2434 3769 2424 3770 2434 3770 2435 3770 2427 3771 2436 3771 2424 3771 2424 3772 2436 3772 2437 3772 2424 3773 2437 3773 2438 3773 2438 3774 2437 3774 2439 3774 2430 3775 2440 3775 2431 3775 2431 3776 2440 3776 2441 3776 2431 3777 2441 3777 2442 3777 2435 3778 2443 3778 2424 3778 2424 3779 2443 3779 2444 3779 2424 3780 2444 3780 2426 3780 2442 3781 2445 3781 2431 3781 2431 3782 2445 3782 2446 3782 2431 3783 2446 3783 2447 3783 2984 4527 2985 4527 2986 4527 2986 4528 2985 4528 2987 4528 2987 4529 2988 4529 2986 4529 2986 4530 2988 4530 2989 4530 2986 4531 2989 4531 2990 4531 2991 4532 2992 4532 2993 4532 2994 4533 2995 4533 2996 4533 2996 4534 2997 4534 2994 4534 2994 4535 2997 4535 2998 4535 2994 4536 2998 4536 2999 4536 3000 4537 3001 4537 2986 4537 2986 4538 3001 4538 3002 4538 2986 4539 3002 4539 3003 4539 3003 4540 3004 4540 2986 4540 2986 4541 3004 4541 3005 4541 2986 4542 3005 4542 2984 4542 3006 4543 2986 4543 3007 4543 3007 4544 2986 4544 3008 4544 2993 4545 3009 4545 2991 4545 2991 4546 3009 4546 3010 4546 2991 4547 3010 4547 3011 4547 3006 4548 3012 4548 2986 4548 2986 4549 3012 4549 2991 4549 2986 4550 2991 4550 3013 4550 3013 4551 2991 4551 3011 4551 3000 4552 2986 4552 2994 4552 2994 4553 2986 4553 3014 4553 2994 4554 3014 4554 3015 4554 2990 4555 3016 4555 2986 4555 2986 4556 3016 4556 3017 4556 2986 4557 3017 4557 3008 4557 3015 4558 3018 4558 2994 4558 2994 4559 3018 4559 3019 4559 2994 4560 3019 4560 2995 4560 1575 4561 3020 4561 3021 4561 1575 4562 3021 4562 1561 4562 1561 4563 3021 4563 3022 4563 1561 4564 3022 4564 1560 4564 1560 4565 3022 4565 3023 4565 1560 4566 3023 4566 1558 4566 1558 4567 3023 4567 3024 4567 1558 4568 3024 4568 1551 4568 1551 4569 3024 4569 3025 4569 1551 4570 3025 4570 1552 4570 1552 4571 3025 4571 3026 4571 1552 4572 3026 4572 1576 4572 1576 4573 3026 4573 3027 4573 1576 4574 3027 4574 1577 4574 1577 4575 3027 4575 3028 4575 1577 4576 3028 4576 1578 4576 1578 4577 3028 4577 3029 4577 1578 4578 3029 4578 1644 4578 1644 4579 3029 4579 3030 4579 1644 4580 3030 4580 1645 4580 1633 4581 3031 4581 3032 4581 1633 4582 3032 4582 1634 4582 1634 4583 3032 4583 3033 4583 1634 4584 3033 4584 1655 4584 1655 4585 3033 4585 3034 4585 1655 4586 3034 4586 1559 4586 1559 4587 3034 4587 3035 4587 1559 4588 3035 4588 1595 4588 1595 4589 3035 4589 3036 4589 1595 4590 3036 4590 1573 4590 1573 4591 3036 4591 3037 4591 1573 4592 3037 4592 1574 4592 1574 4593 3037 4593 3038 4593 1574 4594 3038 4594 1596 4594 1596 4595 3038 4595 3039 4595 1596 4596 3039 4596 1597 4596 1597 4597 3039 4597 3040 4597 1597 4598 3040 4598 1598 4598 1598 4599 3040 4599 3041 4599 1598 4600 3041 4600 1599 4600 1599 4601 3041 4601 3042 4601 1599 4602 3042 4602 1600 4602 1600 4603 3042 4603 3043 4603 1600 4604 3043 4604 1601 4604 1601 4605 3043 4605 3044 4605 1601 4606 3044 4606 1602 4606 1602 4607 3044 4607 3045 4607 1602 4608 3045 4608 1603 4608 1603 4609 3045 4609 3046 4609 1603 4610 3046 4610 1604 4610 1604 4611 3046 4611 3020 4611 1604 4612 3020 4612 1575 4612 1570 4613 3047 4613 3048 4613 1570 4614 3048 4614 1546 4614 1546 4615 3048 4615 3049 4615 1546 4616 3049 4616 1562 4616 1562 4617 3049 4617 3050 4617 1562 4618 3050 4618 1582 4618 1582 4619 3050 4619 3051 4619 1582 4620 3051 4620 1583 4620 1583 4621 3051 4621 3052 4621 1583 4622 3052 4622 1584 4622 1584 4623 3052 4623 3053 4623 1584 4624 3053 4624 1563 4624 1563 4625 3053 4625 3054 4625 1563 4626 3054 4626 1550 4626 1550 4627 3054 4627 3055 4627 1550 4628 3055 4628 1606 4628 1606 4629 3055 4629 3056 4629 1606 4630 3056 4630 1632 4630 1632 4631 3056 4631 3031 4631 1632 4632 3031 4632 1633 4632 1571 4633 3057 4633 3058 4633 1571 4634 3058 4634 1572 4634 1572 4635 3058 4635 3059 4635 1572 4636 3059 4636 1609 4636 1609 4637 3059 4637 3060 4637 1609 4638 3060 4638 1610 4638 1610 4639 3060 4639 3061 4639 1610 4640 3061 4640 1611 4640 1611 4641 3061 4641 3062 4641 1611 4642 3062 4642 1628 4642 1628 4643 3062 4643 3063 4643 1628 4644 3063 4644 1629 4644 1629 4645 3063 4645 3064 4645 1629 4646 3064 4646 1638 4646 1638 4647 3064 4647 3065 4647 1638 4648 3065 4648 1639 4648 1639 4649 3065 4649 3066 4649 1639 4650 3066 4650 1641 4650 1641 4651 3066 4651 3067 4651 1641 4652 3067 4652 1643 4652 1643 4653 3067 4653 3068 4653 1643 4654 3068 4654 1642 4654 1642 4655 3068 4655 3069 4655 1642 4656 3069 4656 1640 4656 1640 4657 3069 4657 3070 4657 1640 4658 3070 4658 1659 4658 1659 4659 3070 4659 3071 4659 1659 4660 3071 4660 1631 4660 1631 4661 3071 4661 3072 4661 1631 4662 3072 4662 1630 4662 1630 4663 3072 4663 3047 4663 1630 4664 3047 4664 1570 4664 1594 4665 3073 4665 3074 4665 1594 4666 3074 4666 1554 4666 1554 4667 3074 4667 3075 4667 1554 4668 3075 4668 1555 4668 1555 4669 3075 4669 3076 4669 1555 4670 3076 4670 1556 4670 1556 4671 3076 4671 3077 4671 1556 4672 3077 4672 1557 4672 1557 4673 3077 4673 3078 4673 1557 4674 3078 4674 1544 4674 1544 4675 3078 4675 3079 4675 1544 4676 3079 4676 1545 4676 1545 4677 3079 4677 3080 4677 1545 4678 3080 4678 1547 4678 1547 4679 3080 4679 3081 4679 1547 4680 3081 4680 1568 4680 1568 4681 3081 4681 3082 4681 1568 4682 3082 4682 1569 4682 1569 4683 3082 4683 3057 4683 1569 4684 3057 4684 1571 4684 1646 4685 3083 4685 3084 4685 1646 4686 3084 4686 1553 4686 1553 4687 3084 4687 3085 4687 1553 4688 3085 4688 1605 4688 1605 4689 3085 4689 3086 4689 1605 4690 3086 4690 1607 4690 1607 4691 3086 4691 3087 4691 1607 4692 3087 4692 1608 4692 1608 4693 3087 4693 3088 4693 1608 4694 3088 4694 1548 4694 1548 4695 3088 4695 3089 4695 1548 4696 3089 4696 1549 4696 1549 4697 3089 4697 3090 4697 1549 4698 3090 4698 1586 4698 1586 4699 3090 4699 3091 4699 1586 4700 3091 4700 1580 4700 1580 4701 3091 4701 3092 4701 1580 4702 3092 4702 1581 4702 1581 4703 3092 4703 3093 4703 1581 4704 3093 4704 1637 4704 1645 4705 3030 4705 3094 4705 1645 4706 3094 4706 1647 4706 1647 4707 3094 4707 3095 4707 1647 4708 3095 4708 1648 4708 1648 4709 3095 4709 3096 4709 1648 4710 3096 4710 1649 4710 1649 4711 3096 4711 3097 4711 1649 4712 3097 4712 1650 4712 1650 4713 3097 4713 3098 4713 1650 4714 3098 4714 1651 4714 1651 4715 3098 4715 3099 4715 1651 4716 3099 4716 1652 4716 1652 4717 3099 4717 3100 4717 1652 4718 3100 4718 1653 4718 1653 4719 3100 4719 3101 4719 1653 4720 3101 4720 1654 4720 1654 4721 3101 4721 3102 4721 1654 4722 3102 4722 1660 4722 1660 4723 3102 4723 3103 4723 1660 4724 3103 4724 1661 4724 1661 4725 3103 4725 3104 4725 1661 4726 3104 4726 1662 4726 1662 4727 3104 4727 3105 4727 1662 4728 3105 4728 1663 4728 1663 4729 3105 4729 3106 4729 1663 4730 3106 4730 1664 4730 1664 4731 3106 4731 3107 4731 1664 4732 3107 4732 1666 4732 1666 4733 3107 4733 3108 4733 1666 4734 3108 4734 1665 4734 1665 4735 3108 4735 3083 4735 1665 4736 3083 4736 1646 4736 1617 4737 3109 4737 3110 4737 1617 4738 3110 4738 1541 4738 1541 4739 3110 4739 3111 4739 1541 4740 3111 4740 1542 4740 1542 4741 3111 4741 3112 4741 1542 4742 3112 4742 1543 4742 1543 4743 3112 4743 3113 4743 1543 4744 3113 4744 1618 4744 1618 4745 3113 4745 3114 4745 1618 4746 3114 4746 1592 4746 1592 4747 3114 4747 3115 4747 1592 4748 3115 4748 1593 4748 1593 4749 3115 4749 3116 4749 1593 4750 3116 4750 1619 4750 1619 4751 3116 4751 3117 4751 1619 4752 3117 4752 1620 4752 1620 4753 3117 4753 3118 4753 1620 4754 3118 4754 1621 4754 1621 4755 3118 4755 3119 4755 1621 4756 3119 4756 1622 4756 1622 4757 3119 4757 3120 4757 1622 4758 3120 4758 1623 4758 1623 4759 3120 4759 3121 4759 1623 4760 3121 4760 1624 4760 1624 4761 3121 4761 3122 4761 1624 4762 3122 4762 1625 4762 1625 4763 3122 4763 3123 4763 1625 4764 3123 4764 1626 4764 1626 4765 3123 4765 3124 4765 1626 4766 3124 4766 1627 4766 1627 4767 3124 4767 3073 4767 1627 4768 3073 4768 1594 4768 1682 4769 3125 4769 3126 4769 1682 4770 3126 4770 1683 4770 1683 4771 3126 4771 3127 4771 1683 4772 3127 4772 1587 4772 1587 4773 3127 4773 3128 4773 1587 4774 3128 4774 1590 4774 1590 4775 3128 4775 3129 4775 1590 4776 3129 4776 1564 4776 1564 4777 3129 4777 3130 4777 1564 4778 3130 4778 1565 4778 1565 4779 3130 4779 3131 4779 1565 4780 3131 4780 1566 4780 1566 4781 3131 4781 3132 4781 1566 4782 3132 4782 1567 4782 1567 4783 3132 4783 3133 4783 1567 4784 3133 4784 1615 4784 1615 4785 3133 4785 3134 4785 1615 4786 3134 4786 1616 4786 1616 4787 3134 4787 3109 4787 1616 4788 3109 4788 1617 4788 1671 4789 3135 4789 3136 4789 1671 4790 3136 4790 1672 4790 1672 4791 3136 4791 3137 4791 1672 4792 3137 4792 1579 4792 1579 4793 3137 4793 3138 4793 1579 4794 3138 4794 1585 4794 1585 4795 3138 4795 3139 4795 1585 4796 3139 4796 1612 4796 1612 4797 3139 4797 3140 4797 1612 4798 3140 4798 1613 4798 1613 4799 3140 4799 3141 4799 1613 4800 3141 4800 1614 4800 1614 4801 3141 4801 3142 4801 1614 4802 3142 4802 1591 4802 1591 4803 3142 4803 3143 4803 1591 4804 3143 4804 1588 4804 1588 4805 3143 4805 3144 4805 1588 4806 3144 4806 1589 4806 1589 4807 3144 4807 3145 4807 1589 4808 3145 4808 1658 4808 1637 4809 3093 4809 3146 4809 1637 4810 3146 4810 1678 4810 1678 4811 3146 4811 3147 4811 1678 4812 3147 4812 1687 4812 1687 4813 3147 4813 3148 4813 1687 4814 3148 4814 1686 4814 1686 4815 3148 4815 3149 4815 1686 4816 3149 4816 1684 4816 1684 4817 3149 4817 3150 4817 1684 4818 3150 4818 1685 4818 1685 4819 3150 4819 3151 4819 1685 4820 3151 4820 1677 4820 1677 4821 3151 4821 3152 4821 1677 4822 3152 4822 1676 4822 1676 4823 3152 4823 3153 4823 1676 4824 3153 4824 1679 4824 1679 4825 3153 4825 3154 4825 1679 4826 3154 4826 1680 4826 1680 4827 3154 4827 3155 4827 1680 4828 3155 4828 1635 4828 1635 4829 3155 4829 3156 4829 1635 4830 3156 4830 1636 4830 1636 4831 3156 4831 3157 4831 1636 4832 3157 4832 1667 4832 1667 4833 3157 4833 3158 4833 1667 4834 3158 4834 1668 4834 1668 4835 3158 4835 3159 4835 1668 4836 3159 4836 1669 4836 1669 4837 3159 4837 3160 4837 1669 4838 3160 4838 1670 4838 1670 4839 3160 4839 3135 4839 1670 4840 3135 4840 1671 4840 1658 4841 3145 4841 3161 4841 1658 4842 3161 4842 1691 4842 1691 4843 3161 4843 3162 4843 1691 4844 3162 4844 1692 4844 1692 4845 3162 4845 3163 4845 1692 4846 3163 4846 1694 4846 1694 4847 3163 4847 3164 4847 1694 4848 3164 4848 1695 4848 1695 4849 3164 4849 3165 4849 1695 4850 3165 4850 1693 4850 1693 4851 3165 4851 3166 4851 1693 4852 3166 4852 1696 4852 1696 4853 3166 4853 3167 4853 1696 4854 3167 4854 1688 4854 1688 4855 3167 4855 3168 4855 1688 4856 3168 4856 1689 4856 1689 4857 3168 4857 3169 4857 1689 4858 3169 4858 1690 4858 1690 4859 3169 4859 3170 4859 1690 4860 3170 4860 1656 4860 1656 4861 3170 4861 3171 4861 1656 4862 3171 4862 1657 4862 1657 4863 3171 4863 3172 4863 1657 4864 3172 4864 1673 4864 1673 4865 3172 4865 3173 4865 1673 4866 3173 4866 1674 4866 1674 4867 3173 4867 3174 4867 1674 4868 3174 4868 1675 4868 1675 4869 3174 4869 3175 4869 1675 4870 3175 4870 1681 4870 1681 4871 3175 4871 3125 4871 1681 4872 3125 4872 1682 4872 1730 4873 3176 4873 3177 4873 1730 4874 3177 4874 1703 4874 1703 4875 3177 4875 3178 4875 1703 4876 3178 4876 1704 4876 1704 4877 3178 4877 3179 4877 1704 4878 3179 4878 1706 4878 1706 4879 3179 4879 3180 4879 1706 4880 3180 4880 1707 4880 1707 4881 3180 4881 3181 4881 1707 4882 3181 4882 1715 4882 1715 4883 3181 4883 3182 4883 1715 4884 3182 4884 1742 4884 1742 4885 3182 4885 3183 4885 1742 4886 3183 4886 1743 4886 1743 4887 3183 4887 3184 4887 1743 4888 3184 4888 1744 4888 1744 4889 3184 4889 3185 4889 1744 4890 3185 4890 1822 4890 1822 4891 3185 4891 3186 4891 1822 4892 3186 4892 1823 4892 1724 4893 3187 4893 3188 4893 1724 4894 3188 4894 1725 4894 1725 4895 3188 4895 3189 4895 1725 4896 3189 4896 1751 4896 1751 4897 3189 4897 3190 4897 1751 4898 3190 4898 1705 4898 1705 4899 3190 4899 3191 4899 1705 4900 3191 4900 1731 4900 1731 4901 3191 4901 3192 4901 1731 4902 3192 4902 1732 4902 1732 4903 3192 4903 3193 4903 1732 4904 3193 4904 1739 4904 1739 4905 3193 4905 3194 4905 1739 4906 3194 4906 1740 4906 1740 4907 3194 4907 3195 4907 1740 4908 3195 4908 1779 4908 1779 4909 3195 4909 3196 4909 1779 4910 3196 4910 1780 4910 1780 4911 3196 4911 3197 4911 1780 4912 3197 4912 1781 4912 1781 4913 3197 4913 3198 4913 1781 4914 3198 4914 1741 4914 1741 4915 3198 4915 3199 4915 1741 4916 3199 4916 1772 4916 1772 4917 3199 4917 3200 4917 1772 4918 3200 4918 1773 4918 1773 4919 3200 4919 3201 4919 1773 4920 3201 4920 1782 4920 1782 4921 3201 4921 3202 4921 1782 4922 3202 4922 1783 4922 1783 4923 3202 4923 3176 4923 1783 4924 3176 4924 1730 4924 1697 4925 3203 4925 3204 4925 1697 4926 3204 4926 1698 4926 1698 4927 3204 4927 3205 4927 1698 4928 3205 4928 1793 4928 1793 4929 3205 4929 3206 4929 1793 4930 3206 4930 1754 4930 1754 4931 3206 4931 3207 4931 1754 4932 3207 4932 1759 4932 1759 4933 3207 4933 3208 4933 1759 4934 3208 4934 1734 4934 1734 4935 3208 4935 3209 4935 1734 4936 3209 4936 1735 4936 1735 4937 3209 4937 3210 4937 1735 4938 3210 4938 1736 4938 1736 4939 3210 4939 3211 4939 1736 4940 3211 4940 1760 4940 1760 4941 3211 4941 3212 4941 1760 4942 3212 4942 1761 4942 1761 4943 3212 4943 3187 4943 1761 4944 3187 4944 1724 4944 1768 4945 3213 4945 3214 4945 1768 4946 3214 4946 1769 4946 1769 4947 3214 4947 3215 4947 1769 4948 3215 4948 1806 4948 1806 4949 3215 4949 3216 4949 1806 4950 3216 4950 1794 4950 1794 4951 3216 4951 3217 4951 1794 4952 3217 4952 1795 4952 1795 4953 3217 4953 3218 4953 1795 4954 3218 4954 1797 4954 1797 4955 3218 4955 3219 4955 1797 4956 3219 4956 1798 4956 1798 4957 3219 4957 3220 4957 1798 4958 3220 4958 1811 4958 1811 4959 3220 4959 3221 4959 1811 4960 3221 4960 1808 4960 1808 4961 3221 4961 3222 4961 1808 4962 3222 4962 1810 4962 1810 4963 3222 4963 3223 4963 1810 4964 3223 4964 1809 4964 1809 4965 3223 4965 3224 4965 1809 4966 3224 4966 1807 4966 1807 4967 3224 4967 3225 4967 1807 4968 3225 4968 1812 4968 1812 4969 3225 4969 3226 4969 1812 4970 3226 4970 1796 4970 1796 4971 3226 4971 3227 4971 1796 4972 3227 4972 1771 4972 1771 4973 3227 4973 3228 4973 1771 4974 3228 4974 1770 4974 1770 4975 3228 4975 3203 4975 1770 4976 3203 4976 1697 4976 1708 4977 3229 4977 3230 4977 1708 4978 3230 4978 1709 4978 1709 4979 3230 4979 3231 4979 1709 4980 3231 4980 1711 4980 1711 4981 3231 4981 3232 4981 1711 4982 3232 4982 1712 4982 1712 4983 3232 4983 3233 4983 1712 4984 3233 4984 1700 4984 1700 4985 3233 4985 3234 4985 1700 4986 3234 4986 1701 4986 1701 4987 3234 4987 3235 4987 1701 4988 3235 4988 1702 4988 1702 4989 3235 4989 3236 4989 1702 4990 3236 4990 1713 4990 1713 4991 3236 4991 3237 4991 1713 4992 3237 4992 1714 4992 1714 4993 3237 4993 3238 4993 1714 4994 3238 4994 1699 4994 1699 4995 3238 4995 3213 4995 1699 4996 3213 4996 1768 4996 1786 4997 3239 4997 3240 4997 1786 4998 3240 4998 1716 4998 1716 4999 3240 4999 3241 4999 1716 5000 3241 5000 1748 5000 1748 5001 3241 5001 3242 5001 1748 5002 3242 5002 1749 5002 1749 5003 3242 5003 3243 5003 1749 5004 3243 5004 1750 5004 1750 5005 3243 5005 3244 5005 1750 5006 3244 5006 1774 5006 1774 5007 3244 5007 3245 5007 1774 5008 3245 5008 1775 5008 1775 5009 3245 5009 3246 5009 1775 5010 3246 5010 1777 5010 1777 5011 3246 5011 3247 5011 1777 5012 3247 5012 1833 5012 1833 5013 3247 5013 3248 5013 1833 5014 3248 5014 1722 5014 1722 5015 3248 5015 3249 5015 1722 5016 3249 5016 1719 5016 1823 5017 3186 5017 3250 5017 1823 5018 3250 5018 1824 5018 1824 5019 3250 5019 3251 5019 1824 5020 3251 5020 1799 5020 1799 5021 3251 5021 3252 5021 1799 5022 3252 5022 1800 5022 1800 5023 3252 5023 3253 5023 1800 5024 3253 5024 1801 5024 1801 5025 3253 5025 3254 5025 1801 5026 3254 5026 1802 5026 1802 5027 3254 5027 3255 5027 1802 5028 3255 5028 1813 5028 1813 5029 3255 5029 3256 5029 1813 5030 3256 5030 1814 5030 1814 5031 3256 5031 3257 5031 1814 5032 3257 5032 1784 5032 1784 5033 3257 5033 3258 5033 1784 5034 3258 5034 1785 5034 1785 5035 3258 5035 3259 5035 1785 5036 3259 5036 1825 5036 1825 5037 3259 5037 3260 5037 1825 5038 3260 5038 1826 5038 1826 5039 3260 5039 3261 5039 1826 5040 3261 5040 1827 5040 1827 5041 3261 5041 3262 5041 1827 5042 3262 5042 1828 5042 1828 5043 3262 5043 3263 5043 1828 5044 3263 5044 1829 5044 1829 5045 3263 5045 3264 5045 1829 5046 3264 5046 1830 5046 1830 5047 3264 5047 3239 5047 1830 5048 3239 5048 1786 5048 1757 5049 3265 5049 3266 5049 1757 5050 3266 5050 1758 5050 1758 5051 3266 5051 3267 5051 1758 5052 3267 5052 1778 5052 1778 5053 3267 5053 3268 5053 1778 5054 3268 5054 1710 5054 1710 5055 3268 5055 3269 5055 1710 5056 3269 5056 1762 5056 1762 5057 3269 5057 3270 5057 1762 5058 3270 5058 1763 5058 1763 5059 3270 5059 3271 5059 1763 5060 3271 5060 1764 5060 1764 5061 3271 5061 3272 5061 1764 5062 3272 5062 1765 5062 1765 5063 3272 5063 3273 5063 1765 5064 3273 5064 1766 5064 1766 5065 3273 5065 3274 5065 1766 5066 3274 5066 1767 5066 1767 5067 3274 5067 3275 5067 1767 5068 3275 5068 1726 5068 1726 5069 3275 5069 3276 5069 1726 5070 3276 5070 1727 5070 1727 5071 3276 5071 3277 5071 1727 5072 3277 5072 1728 5072 1728 5073 3277 5073 3278 5073 1728 5074 3278 5074 1729 5074 1729 5075 3278 5075 3279 5075 1729 5076 3279 5076 1737 5076 1737 5077 3279 5077 3280 5077 1737 5078 3280 5078 1738 5078 1738 5079 3280 5079 3229 5079 1738 5080 3229 5080 1708 5080 1831 5081 3281 5081 3282 5081 1831 5082 3282 5082 1832 5082 1832 5083 3282 5083 3283 5083 1832 5084 3283 5084 1834 5084 1834 5085 3283 5085 3284 5085 1834 5086 3284 5086 1835 5086 1835 5087 3284 5087 3285 5087 1835 5088 3285 5088 1776 5088 1776 5089 3285 5089 3286 5089 1776 5090 3286 5090 1723 5090 1723 5091 3286 5091 3287 5091 1723 5092 3287 5092 1752 5092 1752 5093 3287 5093 3288 5093 1752 5094 3288 5094 1753 5094 1753 5095 3288 5095 3289 5095 1753 5096 3289 5096 1755 5096 1755 5097 3289 5097 3290 5097 1755 5098 3290 5098 1756 5098 1756 5099 3290 5099 3265 5099 1756 5100 3265 5100 1757 5100 1717 5101 3291 5101 3292 5101 1717 5102 3292 5102 1718 5102 1718 5103 3292 5103 3293 5103 1718 5104 3293 5104 1733 5104 1733 5105 3293 5105 3294 5105 1733 5106 3294 5106 1720 5106 1720 5107 3294 5107 3295 5107 1720 5108 3295 5108 1721 5108 1721 5109 3295 5109 3296 5109 1721 5110 3296 5110 1787 5110 1787 5111 3296 5111 3297 5111 1787 5112 3297 5112 1788 5112 1788 5113 3297 5113 3298 5113 1788 5114 3298 5114 1789 5114 1789 5115 3298 5115 3299 5115 1789 5116 3299 5116 1790 5116 1790 5117 3299 5117 3300 5117 1790 5118 3300 5118 1791 5118 1791 5119 3300 5119 3301 5119 1791 5120 3301 5120 1792 5120 1719 5121 3249 5121 3302 5121 1719 5122 3302 5122 1842 5122 1842 5123 3302 5123 3303 5123 1842 5124 3303 5124 1815 5124 1815 5125 3303 5125 3304 5125 1815 5126 3304 5126 1803 5126 1803 5127 3304 5127 3305 5127 1803 5128 3305 5128 1804 5128 1804 5129 3305 5129 3306 5129 1804 5130 3306 5130 1816 5130 1816 5131 3306 5131 3307 5131 1816 5132 3307 5132 1817 5132 1817 5133 3307 5133 3308 5133 1817 5134 3308 5134 1818 5134 1818 5135 3308 5135 3309 5135 1818 5136 3309 5136 1836 5136 1836 5137 3309 5137 3310 5137 1836 5138 3310 5138 1837 5138 1837 5139 3310 5139 3311 5139 1837 5140 3311 5140 1819 5140 1819 5141 3311 5141 3312 5141 1819 5142 3312 5142 1820 5142 1820 5143 3312 5143 3313 5143 1820 5144 3313 5144 1821 5144 1821 5145 3313 5145 3314 5145 1821 5146 3314 5146 1843 5146 1843 5147 3314 5147 3315 5147 1843 5148 3315 5148 1838 5148 1838 5149 3315 5149 3316 5149 1838 5150 3316 5150 1805 5150 1805 5151 3316 5151 3291 5151 1805 5152 3291 5152 1717 5152 1792 5153 3301 5153 3317 5153 1792 5154 3317 5154 1839 5154 1839 5155 3317 5155 3318 5155 1839 5156 3318 5156 1844 5156 1844 5157 3318 5157 3319 5157 1844 5158 3319 5158 1845 5158 1845 5159 3319 5159 3320 5159 1845 5160 3320 5160 1846 5160 1846 5161 3320 5161 3321 5161 1846 5162 3321 5162 1847 5162 1847 5163 3321 5163 3322 5163 1847 5164 3322 5164 1848 5164 1848 5165 3322 5165 3323 5165 1848 5166 3323 5166 1849 5166 1849 5167 3323 5167 3324 5167 1849 5168 3324 5168 1850 5168 1850 5169 3324 5169 3325 5169 1850 5170 3325 5170 1851 5170 1851 5171 3325 5171 3326 5171 1851 5172 3326 5172 1852 5172 1852 5173 3326 5173 3327 5173 1852 5174 3327 5174 1840 5174 1840 5175 3327 5175 3328 5175 1840 5176 3328 5176 1841 5176 1841 5177 3328 5177 3329 5177 1841 5178 3329 5178 1747 5178 1747 5179 3329 5179 3330 5179 1747 5180 3330 5180 1746 5180 1746 5181 3330 5181 3331 5181 1746 5182 3331 5182 1745 5182 1745 5183 3331 5183 3281 5183 1745 5184 3281 5184 1831 5184 3618 5759 3619 5759 3620 5759 3621 5760 3622 5760 3623 5760 3624 5761 3625 5761 3626 5761 3627 5762 3628 5762 3629 5762 3630 5763 3631 5763 3632 5763 3633 5764 3634 5764 3635 5764 3636 5765 3637 5765 3638 5765 2329 5766 2325 5766 3639 5766 2326 5767 2328 5767 3640 5767 2337 5768 2336 5768 3641 5768 2270 5769 2269 5769 3642 5769 2289 5770 2288 5770 3643 5770 1111 5771 3644 5771 2291 5771 2291 5772 3644 5772 3645 5772 2291 5773 3645 5773 2297 5773 2297 5774 3645 5774 2295 5774 2295 5775 3645 5775 2296 5775 2296 5776 3645 5776 3646 5776 2296 5777 3646 5777 2299 5777 3618 5778 2301 5778 3646 5778 3646 5779 2301 5779 2300 5779 3646 5780 2300 5780 2299 5780 3647 5781 2292 5781 2293 5781 2293 5782 2294 5782 3647 5782 3647 5783 2294 5783 2303 5783 3647 5784 2303 5784 2302 5784 2281 5785 1059 5785 3648 5785 3643 5786 2288 5786 3648 5786 3648 5787 2288 5787 2282 5787 3648 5788 2282 5788 2281 5788 2285 5789 2286 5789 3649 5789 3649 5790 2286 5790 2287 5790 3649 5791 2287 5791 3643 5791 3643 5792 2287 5792 2290 5792 3643 5793 2290 5793 2289 5793 1033 5794 2283 5794 3650 5794 3650 5795 2283 5795 3649 5795 3649 5796 2283 5796 2284 5796 3649 5797 2284 5797 2285 5797 3651 5798 2271 5798 3650 5798 3650 5799 2271 5799 2275 5799 3650 5800 2275 5800 1033 5800 2279 5801 2276 5801 3642 5801 3642 5802 2276 5802 2274 5802 3642 5803 2274 5803 2270 5803 2279 5804 3642 5804 2278 5804 2278 5805 3642 5805 3652 5805 2278 5806 3652 5806 2277 5806 2277 5807 3652 5807 3653 5807 2277 5808 3653 5808 2280 5808 3654 5809 2268 5809 2272 5809 3654 5810 2272 5810 3653 5810 3653 5811 2272 5811 2273 5811 3653 5812 2273 5812 2280 5812 2307 5813 2306 5813 3655 5813 3655 5814 2306 5814 2304 5814 3655 5815 2304 5815 3654 5815 3654 5816 2304 5816 1095 5816 3654 5817 1095 5817 2268 5817 2307 5818 3655 5818 2311 5818 2311 5819 3655 5819 3656 5819 2311 5820 3656 5820 2314 5820 3657 5821 2313 5821 3658 5821 3658 5822 2313 5822 2316 5822 3658 5823 2316 5823 3656 5823 3656 5824 2316 5824 2315 5824 3656 5825 2315 5825 2314 5825 2308 5826 2309 5826 3657 5826 3657 5827 2309 5827 2312 5827 3657 5828 2312 5828 2313 5828 2305 5829 3659 5829 3660 5829 2330 5830 1147 5830 3660 5830 3660 5831 1147 5831 2310 5831 3660 5832 2310 5832 2305 5832 3641 5833 2336 5833 3660 5833 3660 5834 2336 5834 2331 5834 3660 5835 2331 5835 2330 5835 2334 5836 2335 5836 3661 5836 3661 5837 2335 5837 2339 5837 3661 5838 2339 5838 3641 5838 3641 5839 2339 5839 2338 5839 3641 5840 2338 5840 2337 5840 2324 5841 1162 5841 3662 5841 3662 5842 1162 5842 2332 5842 3662 5843 2332 5843 3661 5843 3661 5844 2332 5844 2333 5844 3661 5845 2333 5845 2334 5845 2324 5846 3662 5846 2323 5846 2323 5847 3662 5847 3663 5847 2323 5848 3663 5848 2317 5848 2317 5849 3663 5849 3640 5849 2317 5850 3640 5850 2318 5850 2328 5851 2327 5851 3640 5851 3640 5852 2327 5852 2320 5852 3640 5853 2320 5853 2318 5853 3639 5854 2325 5854 3664 5854 1111 5855 2319 5855 3644 5855 3644 5856 2319 5856 2321 5856 3644 5857 2321 5857 3639 5857 3639 5858 2321 5858 2322 5858 3639 5859 2322 5859 2329 5859 3665 5860 3666 5860 3667 5860 3667 5861 3666 5861 3668 5861 3667 5862 3668 5862 3669 5862 3670 5863 3671 5863 3672 5863 3672 5864 3671 5864 3673 5864 3672 5865 3673 5865 3669 5865 3636 5866 3674 5866 3675 5866 3675 5867 3674 5867 3676 5867 3675 5868 3676 5868 3677 5868 3677 5869 3676 5869 3678 5869 3677 5870 3678 5870 3670 5870 3638 5871 3637 5871 3679 5871 3679 5872 3637 5872 3680 5872 3679 5873 3680 5873 3633 5873 3681 5874 3682 5874 3634 5874 3634 5875 3682 5875 3683 5875 3634 5876 3683 5876 3635 5876 3684 5877 3685 5877 3686 5877 3686 5878 3685 5878 3687 5878 3686 5879 3687 5879 3681 5879 3681 5880 3687 5880 3688 5880 3681 5881 3688 5881 3682 5881 3689 5882 3690 5882 3686 5882 3686 5883 3690 5883 3691 5883 3686 5884 3691 5884 3684 5884 3692 5885 3693 5885 3689 5885 3689 5886 3693 5886 3694 5886 3689 5887 3694 5887 3690 5887 3695 5888 3696 5888 3692 5888 3692 5889 3696 5889 3697 5889 3692 5890 3697 5890 3693 5890 3698 5891 3699 5891 3700 5891 3700 5892 3699 5892 3701 5892 3700 5893 3701 5893 3695 5893 3695 5894 3701 5894 3702 5894 3695 5895 3702 5895 3696 5895 3698 5896 3700 5896 3703 5896 3703 5897 3700 5897 3704 5897 3703 5898 3704 5898 3705 5898 3706 5899 3707 5899 3704 5899 3704 5900 3707 5900 3708 5900 3704 5901 3708 5901 3705 5901 3709 5902 3710 5902 3711 5902 3711 5903 3710 5903 3712 5903 3711 5904 3712 5904 3706 5904 3706 5905 3712 5905 3713 5905 3706 5906 3713 5906 3707 5906 3632 5907 3631 5907 3714 5907 3714 5908 3631 5908 3715 5908 3714 5909 3715 5909 3716 5909 3717 5910 3718 5910 3719 5910 3719 5911 3718 5911 3720 5911 3719 5912 3720 5912 3721 5912 3721 5913 3720 5913 3722 5913 3723 5914 3724 5914 3725 5914 3725 5915 3724 5915 3726 5915 3725 5916 3726 5916 3727 5916 3727 5917 3726 5917 3728 5917 3727 5918 3728 5918 3729 5918 3729 5919 3728 5919 3730 5919 3731 5920 3732 5920 3733 5920 3733 5921 3732 5921 3734 5921 3733 5922 3734 5922 3735 5922 3735 5923 3734 5923 3736 5923 3735 5924 3736 5924 3723 5924 3723 5925 3736 5925 3737 5925 3723 5926 3737 5926 3724 5926 3731 5927 3733 5927 3738 5927 3738 5928 3733 5928 3739 5928 3738 5929 3739 5929 3740 5929 3740 5930 3739 5930 3741 5930 3740 5931 3741 5931 3742 5931 3743 5932 3744 5932 3745 5932 3745 5933 3744 5933 3746 5933 3745 5934 3746 5934 3741 5934 3741 5935 3746 5935 3747 5935 3741 5936 3747 5936 3742 5936 3748 5937 3749 5937 3750 5937 3750 5938 3749 5938 3751 5938 3750 5939 3751 5939 3752 5939 3752 5940 3751 5940 3753 5940 3754 5941 3755 5941 3756 5941 3757 5942 3758 5942 3755 5942 3755 5943 3758 5943 3759 5943 3755 5944 3759 5944 3756 5944 3760 5945 3761 5945 3762 5945 3763 5946 3764 5946 3760 5946 3760 5947 3764 5947 3765 5947 3760 5948 3765 5948 3761 5948 3766 5949 3767 5949 3763 5949 3763 5950 3767 5950 3768 5950 3763 5951 3768 5951 3764 5951 3769 5952 3770 5952 3766 5952 3766 5953 3770 5953 3771 5953 3766 5954 3771 5954 3767 5954 3772 5955 3773 5955 3774 5955 3774 5956 3773 5956 3775 5956 3774 5957 3775 5957 3769 5957 3769 5958 3775 5958 3776 5958 3769 5959 3776 5959 3770 5959 3772 5960 3774 5960 3777 5960 3777 5961 3774 5961 3778 5961 3777 5962 3778 5962 3779 5962 3780 5963 3781 5963 3778 5963 3778 5964 3781 5964 3782 5964 3778 5965 3782 5965 3779 5965 3625 5966 3783 5966 3626 5966 3626 5967 3783 5967 3784 5967 3626 5968 3784 5968 3780 5968 3780 5969 3784 5969 3785 5969 3780 5970 3785 5970 3781 5970 3786 5971 3787 5971 3788 5971 3788 5972 3787 5972 3789 5972 3788 5973 3789 5973 3790 5973 3790 5974 3789 5974 3791 5974 3790 5975 3791 5975 3624 5975 3786 5976 3792 5976 3793 5976 3793 5977 3792 5977 3623 5977 3793 5978 3623 5978 3794 5978 3794 5979 3623 5979 3622 5979 3795 5980 3796 5980 3621 5980 3797 5981 3798 5981 3799 5981 3799 5982 3798 5982 3800 5982 3799 5983 3800 5983 3801 5983 3801 5984 3800 5984 3796 5984 3665 5985 3802 5985 3666 5985 3666 5986 3802 5986 3803 5986 3666 5987 3803 5987 3804 5987 3804 5988 3803 5988 3805 5988 3804 5989 3805 5989 3797 5989 3797 5990 3805 5990 3806 5990 3797 5991 3806 5991 3798 5991 3807 5992 3668 5992 3808 5992 3808 5993 3668 5993 3666 5993 3808 5994 3666 5994 3809 5994 3809 5995 3666 5995 3804 5995 3809 5996 3804 5996 3810 5996 3810 5997 3804 5997 3797 5997 3810 5998 3797 5998 3811 5998 3811 5999 3797 5999 3799 5999 3811 6000 3799 6000 3812 6000 3812 6001 3799 6001 3801 6001 3813 6002 3807 6002 3814 6002 3814 6003 3807 6003 3808 6003 3814 6004 3808 6004 3815 6004 3815 6005 3808 6005 3809 6005 3815 6006 3809 6006 3816 6006 3816 6007 3809 6007 3810 6007 3816 6008 3810 6008 3817 6008 3817 6009 3810 6009 3811 6009 3817 6010 3811 6010 3818 6010 3818 6011 3811 6011 3812 6011 3652 6012 3813 6012 3653 6012 3653 6013 3813 6013 3814 6013 3653 6014 3814 6014 3654 6014 3654 6015 3814 6015 3815 6015 3654 6016 3815 6016 3655 6016 3655 6017 3815 6017 3816 6017 3655 6018 3816 6018 3656 6018 3656 6019 3816 6019 3817 6019 3656 6020 3817 6020 3658 6020 3658 6021 3817 6021 3818 6021 3796 6022 3795 6022 3801 6022 3801 6023 3795 6023 3819 6023 3801 6024 3819 6024 3812 6024 3812 6025 3819 6025 3820 6025 3812 6026 3820 6026 3818 6026 3818 6027 3820 6027 3821 6027 3818 6028 3821 6028 3658 6028 3658 6029 3821 6029 3659 6029 3658 6030 3659 6030 3657 6030 3657 6031 3659 6031 2305 6031 3657 6032 2305 6032 2308 6032 3669 6033 3668 6033 3672 6033 3672 6034 3668 6034 3807 6034 3672 6035 3807 6035 3822 6035 3822 6036 3807 6036 3813 6036 3822 6037 3813 6037 3823 6037 3823 6038 3813 6038 3652 6038 3823 6039 3652 6039 3824 6039 3824 6040 3652 6040 3642 6040 3824 6041 3642 6041 3651 6041 3651 6042 3642 6042 2269 6042 3651 6043 2269 6043 2271 6043 3624 6044 3626 6044 3790 6044 3790 6045 3626 6045 3780 6045 3790 6046 3780 6046 3825 6046 3825 6047 3780 6047 3778 6047 3825 6048 3778 6048 3826 6048 3826 6049 3778 6049 3774 6049 3826 6050 3774 6050 3827 6050 3827 6051 3774 6051 3769 6051 3827 6052 3769 6052 3828 6052 3828 6053 3769 6053 3766 6053 3828 6054 3766 6054 3829 6054 3829 6055 3766 6055 3763 6055 3829 6056 3763 6056 3830 6056 3830 6057 3763 6057 3760 6057 3830 6058 3760 6058 3831 6058 3786 6059 3788 6059 3792 6059 3792 6060 3788 6060 3790 6060 3792 6061 3790 6061 3832 6061 3832 6062 3790 6062 3825 6062 3832 6063 3825 6063 3833 6063 3833 6064 3825 6064 3826 6064 3833 6065 3826 6065 3834 6065 3834 6066 3826 6066 3827 6066 3834 6067 3827 6067 3835 6067 3835 6068 3827 6068 3828 6068 3835 6069 3828 6069 3836 6069 3836 6070 3828 6070 3829 6070 3836 6071 3829 6071 3837 6071 3837 6072 3829 6072 3830 6072 3837 6073 3830 6073 3838 6073 3838 6074 3830 6074 3831 6074 3838 6075 3831 6075 3839 6075 3621 6076 3623 6076 3795 6076 3795 6077 3623 6077 3792 6077 3795 6078 3792 6078 3819 6078 3819 6079 3792 6079 3832 6079 3819 6080 3832 6080 3820 6080 3820 6081 3832 6081 3833 6081 3820 6082 3833 6082 3821 6082 3821 6083 3833 6083 3834 6083 3821 6084 3834 6084 3659 6084 3659 6085 3834 6085 3835 6085 3659 6086 3835 6086 3660 6086 3660 6087 3835 6087 3836 6087 3660 6088 3836 6088 3641 6088 3641 6089 3836 6089 3837 6089 3641 6090 3837 6090 3661 6090 3661 6091 3837 6091 3838 6091 3661 6092 3838 6092 3662 6092 3662 6093 3838 6093 3839 6093 3662 6094 3839 6094 3663 6094 2325 6095 2326 6095 3664 6095 3664 6096 2326 6096 3640 6096 3664 6097 3640 6097 3840 6097 3840 6098 3640 6098 3663 6098 3840 6099 3663 6099 3841 6099 3841 6100 3663 6100 3839 6100 3841 6101 3839 6101 3842 6101 3842 6102 3839 6102 3831 6102 3842 6103 3831 6103 3629 6103 3629 6104 3831 6104 3760 6104 3629 6105 3760 6105 3627 6105 3627 6106 3760 6106 3762 6106 1059 6107 2298 6107 3648 6107 3648 6108 2298 6108 2292 6108 3648 6109 2292 6109 3620 6109 3620 6110 2292 6110 3647 6110 3620 6111 3647 6111 3618 6111 3618 6112 3647 6112 2302 6112 3618 6113 2302 6113 2301 6113 3843 6114 3619 6114 3844 6114 3844 6115 3619 6115 3618 6115 3844 6116 3618 6116 3845 6116 3845 6117 3618 6117 3646 6117 3845 6118 3646 6118 3846 6118 3846 6119 3646 6119 3645 6119 3846 6120 3645 6120 3847 6120 3847 6121 3645 6121 3644 6121 3847 6122 3644 6122 3848 6122 3848 6123 3644 6123 3639 6123 3848 6124 3639 6124 3849 6124 3849 6125 3639 6125 3664 6125 3849 6126 3664 6126 3850 6126 3850 6127 3664 6127 3840 6127 3850 6128 3840 6128 3851 6128 3851 6129 3840 6129 3841 6129 3851 6130 3841 6130 3754 6130 3754 6131 3841 6131 3842 6131 3754 6132 3842 6132 3755 6132 3755 6133 3842 6133 3629 6133 3755 6134 3629 6134 3757 6134 3757 6135 3629 6135 3628 6135 3633 6136 3680 6136 3634 6136 3634 6137 3680 6137 3852 6137 3634 6138 3852 6138 3681 6138 3681 6139 3852 6139 3853 6139 3681 6140 3853 6140 3686 6140 3686 6141 3853 6141 3854 6141 3686 6142 3854 6142 3689 6142 3689 6143 3854 6143 3855 6143 3689 6144 3855 6144 3692 6144 3692 6145 3855 6145 3856 6145 3692 6146 3856 6146 3695 6146 3695 6147 3856 6147 3857 6147 3695 6148 3857 6148 3700 6148 3700 6149 3857 6149 3858 6149 3700 6150 3858 6150 3704 6150 3704 6151 3858 6151 3859 6151 3704 6152 3859 6152 3706 6152 3706 6153 3859 6153 3714 6153 3706 6154 3714 6154 3711 6154 3711 6155 3714 6155 3716 6155 3711 6156 3716 6156 3709 6156 3860 6157 3843 6157 3861 6157 3861 6158 3843 6158 3844 6158 3861 6159 3844 6159 3862 6159 3862 6160 3844 6160 3845 6160 3862 6161 3845 6161 3863 6161 3863 6162 3845 6162 3846 6162 3863 6163 3846 6163 3864 6163 3864 6164 3846 6164 3847 6164 3864 6165 3847 6165 3865 6165 3865 6166 3847 6166 3848 6166 3865 6167 3848 6167 3866 6167 3866 6168 3848 6168 3849 6168 3866 6169 3849 6169 3867 6169 3867 6170 3849 6170 3850 6170 3867 6171 3850 6171 3752 6171 3752 6172 3850 6172 3851 6172 3752 6173 3851 6173 3750 6173 3750 6174 3851 6174 3754 6174 3750 6175 3754 6175 3748 6175 3748 6176 3754 6176 3756 6176 3636 6177 3675 6177 3637 6177 3637 6178 3675 6178 3868 6178 3637 6179 3868 6179 3680 6179 3680 6180 3868 6180 3869 6180 3680 6181 3869 6181 3852 6181 3852 6182 3869 6182 3870 6182 3852 6183 3870 6183 3853 6183 3853 6184 3870 6184 3871 6184 3853 6185 3871 6185 3854 6185 3854 6186 3871 6186 3872 6186 3854 6187 3872 6187 3855 6187 3855 6188 3872 6188 3873 6188 3855 6189 3873 6189 3856 6189 3856 6190 3873 6190 3874 6190 3856 6191 3874 6191 3857 6191 3857 6192 3874 6192 3875 6192 3857 6193 3875 6193 3858 6193 3858 6194 3875 6194 3876 6194 3858 6195 3876 6195 3859 6195 3859 6196 3876 6196 3877 6196 3859 6197 3877 6197 3714 6197 3714 6198 3877 6198 3718 6198 3714 6199 3718 6199 3632 6199 3632 6200 3718 6200 3717 6200 3632 6201 3717 6201 3630 6201 3729 6202 3860 6202 3727 6202 3727 6203 3860 6203 3861 6203 3727 6204 3861 6204 3725 6204 3725 6205 3861 6205 3862 6205 3725 6206 3862 6206 3723 6206 3723 6207 3862 6207 3863 6207 3723 6208 3863 6208 3735 6208 3735 6209 3863 6209 3864 6209 3735 6210 3864 6210 3733 6210 3733 6211 3864 6211 3865 6211 3733 6212 3865 6212 3739 6212 3739 6213 3865 6213 3866 6213 3739 6214 3866 6214 3741 6214 3741 6215 3866 6215 3867 6215 3741 6216 3867 6216 3745 6216 3745 6217 3867 6217 3752 6217 3745 6218 3752 6218 3743 6218 3743 6219 3752 6219 3753 6219 3670 6220 3672 6220 3677 6220 3677 6221 3672 6221 3822 6221 3677 6222 3822 6222 3675 6222 3675 6223 3822 6223 3823 6223 3675 6224 3823 6224 3868 6224 3868 6225 3823 6225 3824 6225 3868 6226 3824 6226 3869 6226 3869 6227 3824 6227 3651 6227 3869 6228 3651 6228 3870 6228 3870 6229 3651 6229 3650 6229 3870 6230 3650 6230 3871 6230 3871 6231 3650 6231 3649 6231 3871 6232 3649 6232 3872 6232 3872 6233 3649 6233 3643 6233 3872 6234 3643 6234 3873 6234 3873 6235 3643 6235 3648 6235 3873 6236 3648 6236 3874 6236 3874 6237 3648 6237 3620 6237 3874 6238 3620 6238 3875 6238 3875 6239 3620 6239 3619 6239 3875 6240 3619 6240 3876 6240 3876 6241 3619 6241 3843 6241 3876 6242 3843 6242 3877 6242 3877 6243 3843 6243 3860 6243 3877 6244 3860 6244 3718 6244 3718 6245 3860 6245 3729 6245 3718 6246 3729 6246 3720 6246 3720 6247 3729 6247 3730 6247 3720 6248 3730 6248 3722 6248 4022 6393 4023 6393 4024 6393 4025 6394 4026 6394 4027 6394 4028 6395 4029 6395 4030 6395 4031 6396 4032 6396 4033 6396 4034 6397 4035 6397 4036 6397 4037 6398 4038 6398 4039 6398 4040 6399 4041 6399 4042 6399 2401 6400 2398 6400 4043 6400 2399 6401 2400 6401 4044 6401 2409 6402 2410 6402 4045 6402 2343 6403 2346 6403 4046 6403 2360 6404 2359 6404 4047 6404 1267 6405 4048 6405 2363 6405 2363 6406 4048 6406 4049 6406 2363 6407 4049 6407 2367 6407 2367 6408 4049 6408 2368 6408 2368 6409 4049 6409 2369 6409 2369 6410 4049 6410 4050 6410 2369 6411 4050 6411 2373 6411 4022 6412 2375 6412 4050 6412 4050 6413 2375 6413 2374 6413 4050 6414 2374 6414 2373 6414 4051 6415 2364 6415 2366 6415 2366 6416 2365 6416 4051 6416 4051 6417 2365 6417 2372 6417 4051 6418 2372 6418 2371 6418 2353 6419 1215 6419 4052 6419 4047 6420 2359 6420 4052 6420 4052 6421 2359 6421 2356 6421 4052 6422 2356 6422 2353 6422 2357 6423 2358 6423 4053 6423 4053 6424 2358 6424 2362 6424 4053 6425 2362 6425 4047 6425 4047 6426 2362 6426 2361 6426 4047 6427 2361 6427 2360 6427 1189 6428 2354 6428 4054 6428 4054 6429 2354 6429 4053 6429 4053 6430 2354 6430 2355 6430 4053 6431 2355 6431 2357 6431 4055 6432 2345 6432 4054 6432 4054 6433 2345 6433 2347 6433 4054 6434 2347 6434 1189 6434 2351 6435 2349 6435 4046 6435 4046 6436 2349 6436 2344 6436 4046 6437 2344 6437 2343 6437 2351 6438 4046 6438 2352 6438 2352 6439 4046 6439 4056 6439 2352 6440 4056 6440 2348 6440 2348 6441 4056 6441 4057 6441 2348 6442 4057 6442 2350 6442 4058 6443 2340 6443 2341 6443 4058 6444 2341 6444 4057 6444 4057 6445 2341 6445 2342 6445 4057 6446 2342 6446 2350 6446 2380 6447 2382 6447 4059 6447 4059 6448 2382 6448 2376 6448 4059 6449 2376 6449 4058 6449 4058 6450 2376 6450 1251 6450 4058 6451 1251 6451 2340 6451 2380 6452 4059 6452 2381 6452 2381 6453 4059 6453 4060 6453 2381 6454 4060 6454 2385 6454 4061 6455 2384 6455 4062 6455 4062 6456 2384 6456 2387 6456 4062 6457 2387 6457 4060 6457 4060 6458 2387 6458 2386 6458 4060 6459 2386 6459 2385 6459 2379 6460 2378 6460 4061 6460 4061 6461 2378 6461 2388 6461 4061 6462 2388 6462 2384 6462 2377 6463 4063 6463 4064 6463 2402 6464 1303 6464 4064 6464 4064 6465 1303 6465 2383 6465 4064 6466 2383 6466 2377 6466 4045 6467 2410 6467 4064 6467 4064 6468 2410 6468 2407 6468 4064 6469 2407 6469 2402 6469 2405 6470 2406 6470 4065 6470 4065 6471 2406 6471 2411 6471 4065 6472 2411 6472 4045 6472 4045 6473 2411 6473 2408 6473 4045 6474 2408 6474 2409 6474 2396 6475 1318 6475 4066 6475 4066 6476 1318 6476 2403 6476 4066 6477 2403 6477 4065 6477 4065 6478 2403 6478 2404 6478 4065 6479 2404 6479 2405 6479 2396 6480 4066 6480 2389 6480 2389 6481 4066 6481 4067 6481 2389 6482 4067 6482 2390 6482 2390 6483 4067 6483 4044 6483 2390 6484 4044 6484 2394 6484 2400 6485 2397 6485 4044 6485 4044 6486 2397 6486 2395 6486 4044 6487 2395 6487 2394 6487 4043 6488 2398 6488 4068 6488 1267 6489 2391 6489 4048 6489 4048 6490 2391 6490 2392 6490 4048 6491 2392 6491 4043 6491 4043 6492 2392 6492 2393 6492 4043 6493 2393 6493 2401 6493 4069 6494 4070 6494 4071 6494 4071 6495 4070 6495 4072 6495 4071 6496 4072 6496 4073 6496 4074 6497 4075 6497 4076 6497 4076 6498 4075 6498 4077 6498 4076 6499 4077 6499 4073 6499 4040 6500 4078 6500 4079 6500 4079 6501 4078 6501 4080 6501 4079 6502 4080 6502 4081 6502 4081 6503 4080 6503 4082 6503 4081 6504 4082 6504 4074 6504 4042 6505 4041 6505 4083 6505 4083 6506 4041 6506 4084 6506 4083 6507 4084 6507 4037 6507 4085 6508 4086 6508 4038 6508 4038 6509 4086 6509 4087 6509 4038 6510 4087 6510 4039 6510 4088 6511 4089 6511 4090 6511 4090 6512 4089 6512 4091 6512 4090 6513 4091 6513 4085 6513 4085 6514 4091 6514 4092 6514 4085 6515 4092 6515 4086 6515 4093 6516 4094 6516 4090 6516 4090 6517 4094 6517 4095 6517 4090 6518 4095 6518 4088 6518 4096 6519 4097 6519 4093 6519 4093 6520 4097 6520 4098 6520 4093 6521 4098 6521 4094 6521 4099 6522 4100 6522 4096 6522 4096 6523 4100 6523 4101 6523 4096 6524 4101 6524 4097 6524 4102 6525 4103 6525 4104 6525 4104 6526 4103 6526 4105 6526 4104 6527 4105 6527 4099 6527 4099 6528 4105 6528 4106 6528 4099 6529 4106 6529 4100 6529 4102 6530 4104 6530 4107 6530 4107 6531 4104 6531 4108 6531 4107 6532 4108 6532 4109 6532 4110 6533 4111 6533 4108 6533 4108 6534 4111 6534 4112 6534 4108 6535 4112 6535 4109 6535 4113 6536 4114 6536 4115 6536 4115 6537 4114 6537 4116 6537 4115 6538 4116 6538 4110 6538 4110 6539 4116 6539 4117 6539 4110 6540 4117 6540 4111 6540 4036 6541 4035 6541 4118 6541 4118 6542 4035 6542 4119 6542 4118 6543 4119 6543 4120 6543 4121 6544 4122 6544 4123 6544 4123 6545 4122 6545 4124 6545 4123 6546 4124 6546 4125 6546 4125 6547 4124 6547 4126 6547 4127 6548 4128 6548 4129 6548 4129 6549 4128 6549 4130 6549 4129 6550 4130 6550 4131 6550 4131 6551 4130 6551 4132 6551 4131 6552 4132 6552 4133 6552 4133 6553 4132 6553 4134 6553 4135 6554 4136 6554 4137 6554 4137 6555 4136 6555 4138 6555 4137 6556 4138 6556 4139 6556 4139 6557 4138 6557 4140 6557 4139 6558 4140 6558 4127 6558 4127 6559 4140 6559 4141 6559 4127 6560 4141 6560 4128 6560 4135 6561 4137 6561 4142 6561 4142 6562 4137 6562 4143 6562 4142 6563 4143 6563 4144 6563 4144 6564 4143 6564 4145 6564 4144 6565 4145 6565 4146 6565 4147 6566 4148 6566 4149 6566 4149 6567 4148 6567 4150 6567 4149 6568 4150 6568 4145 6568 4145 6569 4150 6569 4151 6569 4145 6570 4151 6570 4146 6570 4152 6571 4153 6571 4154 6571 4154 6572 4153 6572 4155 6572 4154 6573 4155 6573 4156 6573 4156 6574 4155 6574 4157 6574 4158 6575 4159 6575 4160 6575 4161 6576 4162 6576 4159 6576 4159 6577 4162 6577 4163 6577 4159 6578 4163 6578 4160 6578 4164 6579 4165 6579 4166 6579 4167 6580 4168 6580 4164 6580 4164 6581 4168 6581 4169 6581 4164 6582 4169 6582 4165 6582 4170 6583 4171 6583 4167 6583 4167 6584 4171 6584 4172 6584 4167 6585 4172 6585 4168 6585 4173 6586 4174 6586 4170 6586 4170 6587 4174 6587 4175 6587 4170 6588 4175 6588 4171 6588 4176 6589 4177 6589 4178 6589 4178 6590 4177 6590 4179 6590 4178 6591 4179 6591 4173 6591 4173 6592 4179 6592 4180 6592 4173 6593 4180 6593 4174 6593 4176 6594 4178 6594 4181 6594 4181 6595 4178 6595 4182 6595 4181 6596 4182 6596 4183 6596 4184 6597 4185 6597 4182 6597 4182 6598 4185 6598 4186 6598 4182 6599 4186 6599 4183 6599 4029 6600 4187 6600 4030 6600 4030 6601 4187 6601 4188 6601 4030 6602 4188 6602 4184 6602 4184 6603 4188 6603 4189 6603 4184 6604 4189 6604 4185 6604 4190 6605 4191 6605 4192 6605 4192 6606 4191 6606 4193 6606 4192 6607 4193 6607 4194 6607 4194 6608 4193 6608 4195 6608 4194 6609 4195 6609 4028 6609 4190 6610 4196 6610 4197 6610 4197 6611 4196 6611 4027 6611 4197 6612 4027 6612 4198 6612 4198 6613 4027 6613 4026 6613 4199 6614 4200 6614 4025 6614 4201 6615 4202 6615 4203 6615 4203 6616 4202 6616 4204 6616 4203 6617 4204 6617 4205 6617 4205 6618 4204 6618 4200 6618 4069 6619 4206 6619 4070 6619 4070 6620 4206 6620 4207 6620 4070 6621 4207 6621 4208 6621 4208 6622 4207 6622 4209 6622 4208 6623 4209 6623 4201 6623 4201 6624 4209 6624 4210 6624 4201 6625 4210 6625 4202 6625 4211 6626 4072 6626 4212 6626 4212 6627 4072 6627 4070 6627 4212 6628 4070 6628 4213 6628 4213 6629 4070 6629 4208 6629 4213 6630 4208 6630 4214 6630 4214 6631 4208 6631 4201 6631 4214 6632 4201 6632 4215 6632 4215 6633 4201 6633 4203 6633 4215 6634 4203 6634 4216 6634 4216 6635 4203 6635 4205 6635 4217 6636 4211 6636 4218 6636 4218 6637 4211 6637 4212 6637 4218 6638 4212 6638 4219 6638 4219 6639 4212 6639 4213 6639 4219 6640 4213 6640 4220 6640 4220 6641 4213 6641 4214 6641 4220 6642 4214 6642 4221 6642 4221 6643 4214 6643 4215 6643 4221 6644 4215 6644 4222 6644 4222 6645 4215 6645 4216 6645 4056 6646 4217 6646 4057 6646 4057 6647 4217 6647 4218 6647 4057 6648 4218 6648 4058 6648 4058 6649 4218 6649 4219 6649 4058 6650 4219 6650 4059 6650 4059 6651 4219 6651 4220 6651 4059 6652 4220 6652 4060 6652 4060 6653 4220 6653 4221 6653 4060 6654 4221 6654 4062 6654 4062 6655 4221 6655 4222 6655 4200 6656 4199 6656 4205 6656 4205 6657 4199 6657 4223 6657 4205 6658 4223 6658 4216 6658 4216 6659 4223 6659 4224 6659 4216 6660 4224 6660 4222 6660 4222 6661 4224 6661 4225 6661 4222 6662 4225 6662 4062 6662 4062 6663 4225 6663 4063 6663 4062 6664 4063 6664 4061 6664 4061 6665 4063 6665 2377 6665 4061 6666 2377 6666 2379 6666 4073 6667 4072 6667 4076 6667 4076 6668 4072 6668 4211 6668 4076 6669 4211 6669 4226 6669 4226 6670 4211 6670 4217 6670 4226 6671 4217 6671 4227 6671 4227 6672 4217 6672 4056 6672 4227 6673 4056 6673 4228 6673 4228 6674 4056 6674 4046 6674 4228 6675 4046 6675 4055 6675 4055 6676 4046 6676 2346 6676 4055 6677 2346 6677 2345 6677 4028 6678 4030 6678 4194 6678 4194 6679 4030 6679 4184 6679 4194 6680 4184 6680 4229 6680 4229 6681 4184 6681 4182 6681 4229 6682 4182 6682 4230 6682 4230 6683 4182 6683 4178 6683 4230 6684 4178 6684 4231 6684 4231 6685 4178 6685 4173 6685 4231 6686 4173 6686 4232 6686 4232 6687 4173 6687 4170 6687 4232 6688 4170 6688 4233 6688 4233 6689 4170 6689 4167 6689 4233 6690 4167 6690 4234 6690 4234 6691 4167 6691 4164 6691 4234 6692 4164 6692 4235 6692 4190 6693 4192 6693 4196 6693 4196 6694 4192 6694 4194 6694 4196 6695 4194 6695 4236 6695 4236 6696 4194 6696 4229 6696 4236 6697 4229 6697 4237 6697 4237 6698 4229 6698 4230 6698 4237 6699 4230 6699 4238 6699 4238 6700 4230 6700 4231 6700 4238 6701 4231 6701 4239 6701 4239 6702 4231 6702 4232 6702 4239 6703 4232 6703 4240 6703 4240 6704 4232 6704 4233 6704 4240 6705 4233 6705 4241 6705 4241 6706 4233 6706 4234 6706 4241 6707 4234 6707 4242 6707 4242 6708 4234 6708 4235 6708 4242 6709 4235 6709 4243 6709 4025 6710 4027 6710 4199 6710 4199 6711 4027 6711 4196 6711 4199 6712 4196 6712 4223 6712 4223 6713 4196 6713 4236 6713 4223 6714 4236 6714 4224 6714 4224 6715 4236 6715 4237 6715 4224 6716 4237 6716 4225 6716 4225 6717 4237 6717 4238 6717 4225 6718 4238 6718 4063 6718 4063 6719 4238 6719 4239 6719 4063 6720 4239 6720 4064 6720 4064 6721 4239 6721 4240 6721 4064 6722 4240 6722 4045 6722 4045 6723 4240 6723 4241 6723 4045 6724 4241 6724 4065 6724 4065 6725 4241 6725 4242 6725 4065 6726 4242 6726 4066 6726 4066 6727 4242 6727 4243 6727 4066 6728 4243 6728 4067 6728 2398 6729 2399 6729 4068 6729 4068 6730 2399 6730 4044 6730 4068 6731 4044 6731 4244 6731 4244 6732 4044 6732 4067 6732 4244 6733 4067 6733 4245 6733 4245 6734 4067 6734 4243 6734 4245 6735 4243 6735 4246 6735 4246 6736 4243 6736 4235 6736 4246 6737 4235 6737 4033 6737 4033 6738 4235 6738 4164 6738 4033 6739 4164 6739 4031 6739 4031 6740 4164 6740 4166 6740 1215 6741 2370 6741 4052 6741 4052 6742 2370 6742 2364 6742 4052 6743 2364 6743 4024 6743 4024 6744 2364 6744 4051 6744 4024 6745 4051 6745 4022 6745 4022 6746 4051 6746 2371 6746 4022 6747 2371 6747 2375 6747 4247 6748 4023 6748 4248 6748 4248 6749 4023 6749 4022 6749 4248 6750 4022 6750 4249 6750 4249 6751 4022 6751 4050 6751 4249 6752 4050 6752 4250 6752 4250 6753 4050 6753 4049 6753 4250 6754 4049 6754 4251 6754 4251 6755 4049 6755 4048 6755 4251 6756 4048 6756 4252 6756 4252 6757 4048 6757 4043 6757 4252 6758 4043 6758 4253 6758 4253 6759 4043 6759 4068 6759 4253 6760 4068 6760 4254 6760 4254 6761 4068 6761 4244 6761 4254 6762 4244 6762 4255 6762 4255 6763 4244 6763 4245 6763 4255 6764 4245 6764 4158 6764 4158 6765 4245 6765 4246 6765 4158 6766 4246 6766 4159 6766 4159 6767 4246 6767 4033 6767 4159 6768 4033 6768 4161 6768 4161 6769 4033 6769 4032 6769 4037 6770 4084 6770 4038 6770 4038 6771 4084 6771 4256 6771 4038 6772 4256 6772 4085 6772 4085 6773 4256 6773 4257 6773 4085 6774 4257 6774 4090 6774 4090 6775 4257 6775 4258 6775 4090 6776 4258 6776 4093 6776 4093 6777 4258 6777 4259 6777 4093 6778 4259 6778 4096 6778 4096 6779 4259 6779 4260 6779 4096 6780 4260 6780 4099 6780 4099 6781 4260 6781 4261 6781 4099 6782 4261 6782 4104 6782 4104 6783 4261 6783 4262 6783 4104 6784 4262 6784 4108 6784 4108 6785 4262 6785 4263 6785 4108 6786 4263 6786 4110 6786 4110 6787 4263 6787 4118 6787 4110 6788 4118 6788 4115 6788 4115 6789 4118 6789 4120 6789 4115 6790 4120 6790 4113 6790 4264 6791 4247 6791 4265 6791 4265 6792 4247 6792 4248 6792 4265 6793 4248 6793 4266 6793 4266 6794 4248 6794 4249 6794 4266 6795 4249 6795 4267 6795 4267 6796 4249 6796 4250 6796 4267 6797 4250 6797 4268 6797 4268 6798 4250 6798 4251 6798 4268 6799 4251 6799 4269 6799 4269 6800 4251 6800 4252 6800 4269 6801 4252 6801 4270 6801 4270 6802 4252 6802 4253 6802 4270 6803 4253 6803 4271 6803 4271 6804 4253 6804 4254 6804 4271 6805 4254 6805 4156 6805 4156 6806 4254 6806 4255 6806 4156 6807 4255 6807 4154 6807 4154 6808 4255 6808 4158 6808 4154 6809 4158 6809 4152 6809 4152 6810 4158 6810 4160 6810 4040 6811 4079 6811 4041 6811 4041 6812 4079 6812 4272 6812 4041 6813 4272 6813 4084 6813 4084 6814 4272 6814 4273 6814 4084 6815 4273 6815 4256 6815 4256 6816 4273 6816 4274 6816 4256 6817 4274 6817 4257 6817 4257 6818 4274 6818 4275 6818 4257 6819 4275 6819 4258 6819 4258 6820 4275 6820 4276 6820 4258 6821 4276 6821 4259 6821 4259 6822 4276 6822 4277 6822 4259 6823 4277 6823 4260 6823 4260 6824 4277 6824 4278 6824 4260 6825 4278 6825 4261 6825 4261 6826 4278 6826 4279 6826 4261 6827 4279 6827 4262 6827 4262 6828 4279 6828 4280 6828 4262 6829 4280 6829 4263 6829 4263 6830 4280 6830 4281 6830 4263 6831 4281 6831 4118 6831 4118 6832 4281 6832 4122 6832 4118 6833 4122 6833 4036 6833 4036 6834 4122 6834 4121 6834 4036 6835 4121 6835 4034 6835 4133 6836 4264 6836 4131 6836 4131 6837 4264 6837 4265 6837 4131 6838 4265 6838 4129 6838 4129 6839 4265 6839 4266 6839 4129 6840 4266 6840 4127 6840 4127 6841 4266 6841 4267 6841 4127 6842 4267 6842 4139 6842 4139 6843 4267 6843 4268 6843 4139 6844 4268 6844 4137 6844 4137 6845 4268 6845 4269 6845 4137 6846 4269 6846 4143 6846 4143 6847 4269 6847 4270 6847 4143 6848 4270 6848 4145 6848 4145 6849 4270 6849 4271 6849 4145 6850 4271 6850 4149 6850 4149 6851 4271 6851 4156 6851 4149 6852 4156 6852 4147 6852 4147 6853 4156 6853 4157 6853 4074 6854 4076 6854 4081 6854 4081 6855 4076 6855 4226 6855 4081 6856 4226 6856 4079 6856 4079 6857 4226 6857 4227 6857 4079 6858 4227 6858 4272 6858 4272 6859 4227 6859 4228 6859 4272 6860 4228 6860 4273 6860 4273 6861 4228 6861 4055 6861 4273 6862 4055 6862 4274 6862 4274 6863 4055 6863 4054 6863 4274 6864 4054 6864 4275 6864 4275 6865 4054 6865 4053 6865 4275 6866 4053 6866 4276 6866 4276 6867 4053 6867 4047 6867 4276 6868 4047 6868 4277 6868 4277 6869 4047 6869 4052 6869 4277 6870 4052 6870 4278 6870 4278 6871 4052 6871 4024 6871 4278 6872 4024 6872 4279 6872 4279 6873 4024 6873 4023 6873 4279 6874 4023 6874 4280 6874 4280 6875 4023 6875 4247 6875 4280 6876 4247 6876 4281 6876 4281 6877 4247 6877 4264 6877 4281 6878 4264 6878 4122 6878 4122 6879 4264 6879 4133 6879 4122 6880 4133 6880 4124 6880 4124 6881 4133 6881 4134 6881 4124 6882 4134 6882 4126 6882 3099 8494 5181 8494 3100 8494 3100 8495 5181 8495 3101 8495 5182 8496 5183 8496 3042 8496 5184 8497 5185 8497 3046 8497 3046 8498 3045 8498 5184 8498 5184 8499 3045 8499 3044 8499 5184 8500 3044 8500 5183 8500 5183 8501 3044 8501 3043 8501 5183 8502 3043 8502 3042 8502 3042 8503 3041 8503 5182 8503 5182 8504 3041 8504 3040 8504 5182 8505 3040 8505 5186 8505 5186 8506 3040 8506 3039 8506 3099 8507 3098 8507 5181 8507 5181 8508 3098 8508 3097 8508 5181 8509 3097 8509 5187 8509 5187 8510 3097 8510 3096 8510 5187 8511 3096 8511 5188 8511 5189 8512 3025 8512 5190 8512 5190 8513 3025 8513 3024 8513 3023 8514 5191 8514 3024 8514 3024 8515 5191 8515 5192 8515 3024 8516 5192 8516 5190 8516 3028 8517 3027 8517 5189 8517 5189 8518 3027 8518 3026 8518 5189 8519 3026 8519 3025 8519 3096 8520 3095 8520 5188 8520 5188 8521 3095 8521 3094 8521 5188 8522 3094 8522 5193 8522 5193 8523 3094 8523 3030 8523 5193 8524 3030 8524 5189 8524 5189 8525 3030 8525 3029 8525 5189 8526 3029 8526 3028 8526 3023 8527 3022 8527 5191 8527 5191 8528 3022 8528 3021 8528 5191 8529 3021 8529 5185 8529 5185 8530 3021 8530 3020 8530 5185 8531 3020 8531 3046 8531 3066 8532 3065 8532 5194 8532 3036 8533 3035 8533 5195 8533 5195 8534 3035 8534 3034 8534 5195 8535 3034 8535 5196 8535 3039 8536 3038 8536 5195 8536 5195 8537 3038 8537 3037 8537 5195 8538 3037 8538 3036 8538 3070 8539 3069 8539 5197 8539 5197 8540 3069 8540 3068 8540 5197 8541 3068 8541 5194 8541 5194 8542 3068 8542 3067 8542 5194 8543 3067 8543 3066 8543 3034 8544 3033 8544 5196 8544 5196 8545 3033 8545 3032 8545 5196 8546 3032 8546 5198 8546 5198 8547 3032 8547 3031 8547 5198 8548 3031 8548 5199 8548 3050 8549 3049 8549 5200 8549 5200 8550 3049 8550 3048 8550 5200 8551 3048 8551 5201 8551 5201 8552 3048 8552 3047 8552 5201 8553 3047 8553 5202 8553 5202 8554 3047 8554 3072 8554 5202 8555 3072 8555 5197 8555 5197 8556 3072 8556 3071 8556 5197 8557 3071 8557 3070 8557 3050 8558 5200 8558 3051 8558 3051 8559 5200 8559 5203 8559 3051 8560 5203 8560 3052 8560 5199 8561 3031 8561 5203 8561 5203 8562 3031 8562 3056 8562 5203 8563 3056 8563 3055 8563 3055 8564 3054 8564 5203 8564 5203 8565 3054 8565 3053 8565 5203 8566 3053 8566 3052 8566 3118 8567 3117 8567 5204 8567 5205 8568 3120 8568 5204 8568 5204 8569 3120 8569 3119 8569 5204 8570 3119 8570 3118 8570 5206 8571 3065 8571 3064 8571 5207 8572 5208 8572 3124 8572 5206 8573 3064 8573 5209 8573 5210 8574 5211 8574 3060 8574 3064 8575 3063 8575 5209 8575 5209 8576 3063 8576 3062 8576 5209 8577 3062 8577 5211 8577 5211 8578 3062 8578 3061 8578 5211 8579 3061 8579 3060 8579 3124 8580 3123 8580 5207 8580 5207 8581 3123 8581 3122 8581 5207 8582 3122 8582 5205 8582 5205 8583 3122 8583 3121 8583 5205 8584 3121 8584 3120 8584 3060 8585 3059 8585 5210 8585 5210 8586 3059 8586 3058 8586 5210 8587 3058 8587 5212 8587 5212 8588 3058 8588 3057 8588 5212 8589 3057 8589 5213 8589 5213 8590 3057 8590 3082 8590 5213 8591 3082 8591 3081 8591 3081 8592 3080 8592 5213 8592 5213 8593 3080 8593 3079 8593 5213 8594 3079 8594 3078 8594 3076 8595 3075 8595 5214 8595 5214 8596 3075 8596 3074 8596 5214 8597 3074 8597 5208 8597 5208 8598 3074 8598 3073 8598 5208 8599 3073 8599 3124 8599 3076 8600 5214 8600 3077 8600 3077 8601 5214 8601 5215 8601 3077 8602 5215 8602 3078 8602 3078 8603 5215 8603 5216 8603 3078 8604 5216 8604 5213 8604 3102 8605 3101 8605 5217 8605 3151 8606 3150 8606 5218 8606 5218 8607 3150 8607 5219 8607 3151 8608 5218 8608 3152 8608 3152 8609 5218 8609 5220 8609 3152 8610 5220 8610 3153 8610 5221 8611 5222 8611 3108 8611 5223 8612 3104 8612 5217 8612 5217 8613 3104 8613 3103 8613 5217 8614 3103 8614 3102 8614 3150 8615 3149 8615 5219 8615 5219 8616 3149 8616 3148 8616 5219 8617 3148 8617 5224 8617 3108 8618 3107 8618 5221 8618 5221 8619 3107 8619 3106 8619 5221 8620 3106 8620 5223 8620 5223 8621 3106 8621 3105 8621 5223 8622 3105 8622 3104 8622 3091 8623 3090 8623 5225 8623 3086 8624 5226 8624 3087 8624 3087 8625 5226 8625 5227 8625 3087 8626 5227 8626 3088 8626 5227 8627 5228 8627 3088 8627 3088 8628 5228 8628 5225 8628 3088 8629 5225 8629 3089 8629 3089 8630 5225 8630 3090 8630 3086 8631 3085 8631 5226 8631 5226 8632 3085 8632 3084 8632 5226 8633 3084 8633 5222 8633 5222 8634 3084 8634 3083 8634 5222 8635 3083 8635 3108 8635 3148 8636 3147 8636 5224 8636 5224 8637 3147 8637 3146 8637 5224 8638 3146 8638 5229 8638 5229 8639 3146 8639 3093 8639 5229 8640 3093 8640 5225 8640 5225 8641 3093 8641 3092 8641 5225 8642 3092 8642 3091 8642 5230 8643 3169 8643 5231 8643 5231 8644 3169 8644 3168 8644 5232 8645 3171 8645 5230 8645 5230 8646 3171 8646 3170 8646 5230 8647 3170 8647 3169 8647 3115 8648 5233 8648 3116 8648 3116 8649 5233 8649 3117 8649 3115 8650 3114 8650 5233 8650 5233 8651 3114 8651 3113 8651 5233 8652 3113 8652 5234 8652 5234 8653 3113 8653 3112 8653 5234 8654 3112 8654 5235 8654 5236 8655 5237 8655 3175 8655 3175 8656 3174 8656 5236 8656 5236 8657 3174 8657 3173 8657 5236 8658 3173 8658 5232 8658 5232 8659 3173 8659 3172 8659 5232 8660 3172 8660 3171 8660 3129 8661 3128 8661 5238 8661 3112 8662 3111 8662 5235 8662 5235 8663 3111 8663 3110 8663 5235 8664 3110 8664 5239 8664 5239 8665 3110 8665 3109 8665 5239 8666 3109 8666 5240 8666 3128 8667 3127 8667 5238 8667 5238 8668 3127 8668 3126 8668 5238 8669 3126 8669 5237 8669 5237 8670 3126 8670 3125 8670 5237 8671 3125 8671 3175 8671 3109 8672 3134 8672 5240 8672 5240 8673 3134 8673 3133 8673 5240 8674 3133 8674 3132 8674 5238 8675 5241 8675 3129 8675 3129 8676 5241 8676 5242 8676 3129 8677 5242 8677 3130 8677 3130 8678 5242 8678 5240 8678 3130 8679 5240 8679 3131 8679 3131 8680 5240 8680 3132 8680 3154 8681 3153 8681 5243 8681 3168 8682 3167 8682 5244 8682 5244 8683 3167 8683 3166 8683 5244 8684 3166 8684 3165 8684 5245 8685 3156 8685 5243 8685 5243 8686 3156 8686 3155 8686 5243 8687 3155 8687 3154 8687 3159 8688 3158 8688 5245 8688 5245 8689 3158 8689 3157 8689 5245 8690 3157 8690 3156 8690 3165 8691 3164 8691 5244 8691 5244 8692 3164 8692 3163 8692 5244 8693 3163 8693 5246 8693 3163 8694 3162 8694 5246 8694 5246 8695 3162 8695 3161 8695 5246 8696 3161 8696 5247 8696 5247 8697 3161 8697 3145 8697 5247 8698 3145 8698 5248 8698 3159 8699 5245 8699 3160 8699 3160 8700 5245 8700 5249 8700 3160 8701 5249 8701 3135 8701 3135 8702 5249 8702 5250 8702 3135 8703 5250 8703 3136 8703 3136 8704 5250 8704 5251 8704 3136 8705 5251 8705 3137 8705 3143 8706 3142 8706 5252 8706 5252 8707 3139 8707 5251 8707 5251 8708 3139 8708 3138 8708 5251 8709 3138 8709 3137 8709 3142 8710 3141 8710 5252 8710 5252 8711 3141 8711 3140 8711 5252 8712 3140 8712 3139 8712 5248 8713 3145 8713 5252 8713 5252 8714 3145 8714 3144 8714 5252 8715 3144 8715 3143 8715 3255 8716 5253 8716 3256 8716 3256 8717 5253 8717 3257 8717 5254 8718 5255 8718 3198 8718 3198 8719 3197 8719 5254 8719 5254 8720 3197 8720 3196 8720 5254 8721 3196 8721 5256 8721 5256 8722 3196 8722 3195 8722 3255 8723 3254 8723 5253 8723 5253 8724 3254 8724 3253 8724 5253 8725 3253 8725 5257 8725 5257 8726 3253 8726 3252 8726 5257 8727 3252 8727 5258 8727 5259 8728 5260 8728 3202 8728 3202 8729 3201 8729 5259 8729 5259 8730 3201 8730 3200 8730 5259 8731 3200 8731 5255 8731 5255 8732 3200 8732 3199 8732 5255 8733 3199 8733 3198 8733 3180 8734 3179 8734 5261 8734 3179 8735 3178 8735 5261 8735 5261 8736 3178 8736 3177 8736 5261 8737 3177 8737 5260 8737 5260 8738 3177 8738 3176 8738 5260 8739 3176 8739 3202 8739 5262 8740 3184 8740 3183 8740 3252 8741 3251 8741 5258 8741 5258 8742 3251 8742 3250 8742 5258 8743 3250 8743 5263 8743 5263 8744 3250 8744 3186 8744 5263 8745 3186 8745 5262 8745 5262 8746 3186 8746 3185 8746 5262 8747 3185 8747 3184 8747 5261 8748 5264 8748 3180 8748 3180 8749 5264 8749 5265 8749 3180 8750 5265 8750 3181 8750 3181 8751 5265 8751 5262 8751 3181 8752 5262 8752 3182 8752 3182 8753 5262 8753 3183 8753 3222 8754 3221 8754 5266 8754 3195 8755 3194 8755 5267 8755 5267 8756 3194 8756 3193 8756 5267 8757 3193 8757 3192 8757 5268 8758 3227 8758 3226 8758 3192 8759 3191 8759 5267 8759 5267 8760 3191 8760 3190 8760 5267 8761 3190 8761 5269 8761 3226 8762 3225 8762 5268 8762 5268 8763 3225 8763 3224 8763 5268 8764 3224 8764 5266 8764 5266 8765 3224 8765 3223 8765 5266 8766 3223 8766 3222 8766 3190 8767 3189 8767 5269 8767 5269 8768 3189 8768 3188 8768 5269 8769 3188 8769 5270 8769 5270 8770 3188 8770 3187 8770 5270 8771 3187 8771 5271 8771 3227 8772 5268 8772 3228 8772 3228 8773 5268 8773 5272 8773 3228 8774 5272 8774 3203 8774 3203 8775 5272 8775 5273 8775 3203 8776 5273 8776 3204 8776 3204 8777 5273 8777 5274 8777 3204 8778 5274 8778 3205 8778 5275 8779 3207 8779 5274 8779 5274 8780 3207 8780 3206 8780 5274 8781 3206 8781 3205 8781 5275 8782 3211 8782 3210 8782 5271 8783 3187 8783 5275 8783 5275 8784 3187 8784 3212 8784 5275 8785 3212 8785 3211 8785 3210 8786 3209 8786 5275 8786 5275 8787 3209 8787 3208 8787 5275 8788 3208 8788 3207 8788 5276 8789 5277 8789 3276 8789 3276 8790 3275 8790 5276 8790 5276 8791 3275 8791 3274 8791 5276 8792 3274 8792 3273 8792 5278 8793 3221 8793 3220 8793 5279 8794 5280 8794 3280 8794 3280 8795 3279 8795 5279 8795 5279 8796 3279 8796 3278 8796 5279 8797 3278 8797 5277 8797 5277 8798 3278 8798 3277 8798 5277 8799 3277 8799 3276 8799 5278 8800 3220 8800 5281 8800 5282 8801 5283 8801 3216 8801 3220 8802 3219 8802 5281 8802 5281 8803 3219 8803 3218 8803 5281 8804 3218 8804 5283 8804 5283 8805 3218 8805 3217 8805 5283 8806 3217 8806 3216 8806 3237 8807 3236 8807 5284 8807 5284 8808 3236 8808 3235 8808 5284 8809 3235 8809 3234 8809 3232 8810 3231 8810 5285 8810 5285 8811 3231 8811 3230 8811 5285 8812 3230 8812 5280 8812 5280 8813 3230 8813 3229 8813 5280 8814 3229 8814 3280 8814 3232 8815 5285 8815 3233 8815 3233 8816 5285 8816 5286 8816 3233 8817 5286 8817 3234 8817 3234 8818 5286 8818 5287 8818 3234 8819 5287 8819 5284 8819 3216 8820 3215 8820 5282 8820 5282 8821 3215 8821 3214 8821 5282 8822 3214 8822 5288 8822 5288 8823 3214 8823 3213 8823 5288 8824 3213 8824 5284 8824 5284 8825 3213 8825 3238 8825 5284 8826 3238 8826 3237 8826 3258 8827 3257 8827 5289 8827 5290 8828 3309 8828 3308 8828 5291 8829 3260 8829 5289 8829 5289 8830 3260 8830 3259 8830 5289 8831 3259 8831 3258 8831 5290 8832 3308 8832 5292 8832 5293 8833 5294 8833 3304 8833 5295 8834 5296 8834 3264 8834 3264 8835 3263 8835 5295 8835 5295 8836 3263 8836 3262 8836 5295 8837 3262 8837 5291 8837 5291 8838 3262 8838 3261 8838 5291 8839 3261 8839 3260 8839 3308 8840 3307 8840 5292 8840 5292 8841 3307 8841 3306 8841 5292 8842 3306 8842 5294 8842 5294 8843 3306 8843 3305 8843 5294 8844 3305 8844 3304 8844 3304 8845 3303 8845 5293 8845 5293 8846 3303 8846 3302 8846 5293 8847 3302 8847 5297 8847 5297 8848 3302 8848 3249 8848 5297 8849 3249 8849 5298 8849 5298 8850 3249 8850 3248 8850 5298 8851 3248 8851 3247 8851 3247 8852 3246 8852 5298 8852 5298 8853 3246 8853 3245 8853 5298 8854 3245 8854 3244 8854 3242 8855 5299 8855 3243 8855 3243 8856 5299 8856 5300 8856 3243 8857 5300 8857 3244 8857 3244 8858 5300 8858 5301 8858 3244 8859 5301 8859 5298 8859 3242 8860 3241 8860 5299 8860 5299 8861 3241 8861 3240 8861 5299 8862 3240 8862 5296 8862 5296 8863 3240 8863 3239 8863 5296 8864 3239 8864 3264 8864 5302 8865 5303 8865 3327 8865 3327 8866 3326 8866 5302 8866 5302 8867 3326 8867 3325 8867 5302 8868 3325 8868 5304 8868 5304 8869 3325 8869 3324 8869 3271 8870 5305 8870 3272 8870 3272 8871 5305 8871 3273 8871 3271 8872 3270 8872 5305 8872 5305 8873 3270 8873 3269 8873 5305 8874 3269 8874 5306 8874 5306 8875 3269 8875 3268 8875 5306 8876 3268 8876 5307 8876 5308 8877 5309 8877 3331 8877 3331 8878 3330 8878 5308 8878 5308 8879 3330 8879 3329 8879 5308 8880 3329 8880 5303 8880 5303 8881 3329 8881 3328 8881 5303 8882 3328 8882 3327 8882 5310 8883 3286 8883 5311 8883 5311 8884 3286 8884 3285 8884 3284 8885 5312 8885 3285 8885 3285 8886 5312 8886 5313 8886 3285 8887 5313 8887 5311 8887 3289 8888 3288 8888 5310 8888 5310 8889 3288 8889 3287 8889 5310 8890 3287 8890 3286 8890 3268 8891 3267 8891 5307 8891 5307 8892 3267 8892 3266 8892 5307 8893 3266 8893 5314 8893 5314 8894 3266 8894 3265 8894 5314 8895 3265 8895 5310 8895 5310 8896 3265 8896 3290 8896 5310 8897 3290 8897 3289 8897 3284 8898 3283 8898 5312 8898 5312 8899 3283 8899 3282 8899 5312 8900 3282 8900 5309 8900 5309 8901 3282 8901 3281 8901 5309 8902 3281 8902 3331 8902 3310 8903 3309 8903 5315 8903 3321 8904 3320 8904 5316 8904 5316 8905 3320 8905 3319 8905 5316 8906 3319 8906 5317 8906 3314 8907 3313 8907 5318 8907 5318 8908 3313 8908 3312 8908 5318 8909 3312 8909 5315 8909 5315 8910 3312 8910 3311 8910 5315 8911 3311 8911 3310 8911 3324 8912 3323 8912 5316 8912 5316 8913 3323 8913 3322 8913 5316 8914 3322 8914 3321 8914 3319 8915 3318 8915 5317 8915 5317 8916 3318 8916 3317 8916 5317 8917 3317 8917 5319 8917 5319 8918 3317 8918 3301 8918 5319 8919 3301 8919 5320 8919 3294 8920 3293 8920 5321 8920 5321 8921 3293 8921 3292 8921 5321 8922 3292 8922 5322 8922 5322 8923 3292 8923 3291 8923 5322 8924 3291 8924 5323 8924 5323 8925 3291 8925 3316 8925 5323 8926 3316 8926 5318 8926 5318 8927 3316 8927 3315 8927 5318 8928 3315 8928 3314 8928 3294 8929 5321 8929 3295 8929 3295 8930 5321 8930 5324 8930 3295 8931 5324 8931 3296 8931 5320 8932 3301 8932 5324 8932 5324 8933 3301 8933 3300 8933 5324 8934 3300 8934 3299 8934 3299 8935 3298 8935 5324 8935 5324 8936 3298 8936 3297 8936 5324 8937 3297 8937 3296 8937 5325 8938 5326 8938 5327 8938 5327 8939 5328 8939 5325 8939 5325 8940 5328 8940 5329 8940 5325 8941 5329 8941 5330 8941 5331 8942 5332 8942 5330 8942 5330 8943 5332 8943 5333 8943 5333 8944 5334 8944 5330 8944 5330 8945 5334 8945 5335 8945 5330 8946 5335 8946 5336 8946 5337 8947 5338 8947 5339 8947 5339 8948 5338 8948 5340 8948 5336 8949 5341 8949 5330 8949 5330 8950 5341 8950 5342 8950 5330 8951 5342 8951 5325 8951 5326 8952 5325 8952 5337 8952 5337 8953 5325 8953 5343 8953 5337 8954 5343 8954 5344 8954 5344 8955 5345 8955 5337 8955 5337 8956 5345 8956 5346 8956 5337 8957 5346 8957 5347 8957 5348 8958 5349 8958 5350 8958 5350 8959 5349 8959 5351 8959 5351 8960 5349 8960 5330 8960 5330 8961 5349 8961 5352 8961 5330 8962 5352 8962 5331 8962 5347 8963 5353 8963 5337 8963 5337 8964 5353 8964 5354 8964 5337 8965 5354 8965 5338 8965 5355 8966 5356 8966 5338 8966 5338 8967 5356 8967 5357 8967 5338 8968 5357 8968 5340 8968 5355 8969 5358 8969 5356 8969 5356 8970 5358 8970 5359 8970 5356 8971 5359 8971 5360 8971 5924 9767 5925 9767 5926 9767 5927 9768 5928 9768 5929 9768 5928 9769 5930 9769 5929 9769 5929 9770 5930 9770 5931 9770 5929 9771 5931 9771 5932 9771 5932 9772 5933 9772 5929 9772 5929 9773 5933 9773 5934 9773 5929 9774 5934 9774 5935 9774 5935 9775 5936 9775 5929 9775 5929 9776 5936 9776 5937 9776 5929 9777 5937 9777 5938 9777 5925 9778 5939 9778 5926 9778 5926 9779 5939 9779 5940 9779 5926 9780 5940 9780 5941 9780 5941 9781 5942 9781 5926 9781 5926 9782 5942 9782 5943 9782 5926 9783 5943 9783 5944 9783 5924 9784 5926 9784 5929 9784 5929 9785 5926 9785 5945 9785 5929 9786 5945 9786 5927 9786 5946 9787 5947 9787 5948 9787 5948 9788 5947 9788 5949 9788 5948 9789 5949 9789 5938 9789 5938 9790 5949 9790 5950 9790 5938 9791 5950 9791 5929 9791 5944 9792 5951 9792 5926 9792 5926 9793 5951 9793 5952 9793 5926 9794 5952 9794 5953 9794 5953 9795 5954 9795 5926 9795 5926 9796 5954 9796 5955 9796 5926 9797 5955 9797 5956 9797 5957 9798 5958 9798 5956 9798 5956 9799 5958 9799 5959 9799 5956 9800 5959 9800 5926 9800 3684 10688 3691 10688 6393 10688 6393 10689 3691 10689 6394 10689 3702 10690 3701 10690 6395 10690 3776 10691 3775 10691 6396 10691 6397 10692 3676 10692 3674 10692 6395 10693 3701 10693 6398 10693 6396 10694 3775 10694 6399 10694 3806 10695 3805 10695 6400 10695 3676 10696 6397 10696 3678 10696 3678 10697 6397 10697 6401 10697 3678 10698 6401 10698 3670 10698 3683 10699 3682 10699 6402 10699 6402 10700 3682 10700 3688 10700 6402 10701 3688 10701 6403 10701 6403 10702 3688 10702 3687 10702 6403 10703 3687 10703 6393 10703 6393 10704 3687 10704 3685 10704 6393 10705 3685 10705 3684 10705 3691 10706 3690 10706 6394 10706 6394 10707 3690 10707 3694 10707 6394 10708 3694 10708 6404 10708 3694 10709 3693 10709 6404 10709 6404 10710 3693 10710 3697 10710 6404 10711 3697 10711 6395 10711 6395 10712 3697 10712 3696 10712 6395 10713 3696 10713 3702 10713 3709 10714 3716 10714 6405 10714 3747 10715 3746 10715 6406 10715 6406 10716 3746 10716 3744 10716 6406 10717 3744 10717 6407 10717 6407 10718 3744 10718 3743 10718 6407 10719 3743 10719 3753 10719 3762 10720 6408 10720 3627 10720 3627 10721 6408 10721 6409 10721 3627 10722 6409 10722 3628 10722 3628 10723 6409 10723 6410 10723 3628 10724 6410 10724 3757 10724 3757 10725 6410 10725 3758 10725 3762 10726 3761 10726 6408 10726 6408 10727 3761 10727 3765 10727 6408 10728 3765 10728 6411 10728 3765 10729 3764 10729 6411 10729 6411 10730 3764 10730 3768 10730 6411 10731 3768 10731 6412 10731 3768 10732 3767 10732 6412 10732 6412 10733 3767 10733 3771 10733 6412 10734 3771 10734 6396 10734 6396 10735 3771 10735 3770 10735 6396 10736 3770 10736 3776 10736 3781 10737 6413 10737 3782 10737 3782 10738 6413 10738 6414 10738 3782 10739 6414 10739 3779 10739 3793 10740 3794 10740 6415 10740 3674 10741 3636 10741 6397 10741 6397 10742 3636 10742 3638 10742 6397 10743 3638 10743 6416 10743 3638 10744 3679 10744 6416 10744 6416 10745 3679 10745 3633 10745 6416 10746 3633 10746 6402 10746 6402 10747 3633 10747 3635 10747 6402 10748 3635 10748 3683 10748 3703 10749 6417 10749 3698 10749 3698 10750 6417 10750 6398 10750 3698 10751 6398 10751 3699 10751 3699 10752 6398 10752 3701 10752 3703 10753 3705 10753 6417 10753 6417 10754 3705 10754 3708 10754 6417 10755 3708 10755 6418 10755 6418 10756 3708 10756 3707 10756 3753 10757 3751 10757 6407 10757 6407 10758 3751 10758 3749 10758 6407 10759 3749 10759 6419 10759 3749 10760 3748 10760 6419 10760 6419 10761 3748 10761 3756 10761 6419 10762 3756 10762 6410 10762 6410 10763 3756 10763 3759 10763 6410 10764 3759 10764 3758 10764 3775 10765 3773 10765 6399 10765 6399 10766 3773 10766 3772 10766 6399 10767 3772 10767 6414 10767 6414 10768 3772 10768 3777 10768 6414 10769 3777 10769 3779 10769 3806 10770 6400 10770 3798 10770 3798 10771 6400 10771 6420 10771 3798 10772 6420 10772 3800 10772 6405 10773 3716 10773 6421 10773 6421 10774 3716 10774 3715 10774 6421 10775 3715 10775 3631 10775 3781 10776 3785 10776 6413 10776 6413 10777 3785 10777 3784 10777 6413 10778 3784 10778 6422 10778 6422 10779 3784 10779 3783 10779 3783 10780 3625 10780 6422 10780 6422 10781 3625 10781 3624 10781 6422 10782 3624 10782 6423 10782 6423 10783 3624 10783 3791 10783 3791 10784 3789 10784 6423 10784 6423 10785 3789 10785 3787 10785 6423 10786 3787 10786 6415 10786 6415 10787 3787 10787 3786 10787 6415 10788 3786 10788 3793 10788 3667 10789 3669 10789 6424 10789 6424 10790 3669 10790 3673 10790 6424 10791 3673 10791 6401 10791 6401 10792 3673 10792 3671 10792 6401 10793 3671 10793 3670 10793 3707 10794 3713 10794 6418 10794 6418 10795 3713 10795 3712 10795 6418 10796 3712 10796 6405 10796 6405 10797 3712 10797 3710 10797 6405 10798 3710 10798 3709 10798 3631 10799 3630 10799 6421 10799 6421 10800 3630 10800 3717 10800 6421 10801 3717 10801 6425 10801 6425 10802 3717 10802 3719 10802 6425 10803 3719 10803 3721 10803 6426 10804 3726 10804 6427 10804 6427 10805 3726 10805 3724 10805 6427 10806 3724 10806 3737 10806 3794 10807 3622 10807 6415 10807 6415 10808 3622 10808 3621 10808 6415 10809 3621 10809 6420 10809 6420 10810 3621 10810 3796 10810 6420 10811 3796 10811 3800 10811 3805 10812 3803 10812 6400 10812 6400 10813 3803 10813 3802 10813 6400 10814 3802 10814 6424 10814 6424 10815 3802 10815 3665 10815 6424 10816 3665 10816 3667 10816 3721 10817 3722 10817 6425 10817 6425 10818 3722 10818 3730 10818 6425 10819 3730 10819 6426 10819 6426 10820 3730 10820 3728 10820 6426 10821 3728 10821 3726 10821 3731 10822 3738 10822 6428 10822 6428 10823 3738 10823 3740 10823 6428 10824 3740 10824 6406 10824 6406 10825 3740 10825 3742 10825 6406 10826 3742 10826 3747 10826 3737 10827 3736 10827 6427 10827 6427 10828 3736 10828 3734 10828 6427 10829 3734 10829 6428 10829 6428 10830 3734 10830 3732 10830 6428 10831 3732 10831 3731 10831 4088 11055 4095 11055 6582 11055 6582 11056 4095 11056 6583 11056 6584 11057 4147 11057 4157 11057 4095 11058 4094 11058 6583 11058 6583 11059 4094 11059 4098 11059 6583 11060 4098 11060 6585 11060 4100 11061 6586 11061 4101 11061 4101 11062 6586 11062 6585 11062 4101 11063 6585 11063 4097 11063 4097 11064 6585 11064 4098 11064 4100 11065 4106 11065 6586 11065 6586 11066 4106 11066 4105 11066 6586 11067 4105 11067 6587 11067 4113 11068 4120 11068 6588 11068 4135 11069 4142 11069 6589 11069 4147 11070 6584 11070 4148 11070 4148 11071 6584 11071 6590 11071 4148 11072 6590 11072 4150 11072 4152 11073 6591 11073 4153 11073 4153 11074 6591 11074 6584 11074 4153 11075 6584 11075 4155 11075 4155 11076 6584 11076 4157 11076 4111 11077 6592 11077 4112 11077 4112 11078 6592 11078 6593 11078 4112 11079 6593 11079 4109 11079 6594 11080 4130 11080 6595 11080 6595 11081 4130 11081 4128 11081 6595 11082 4128 11082 4141 11082 4180 11083 4179 11083 6596 11083 4185 11084 6597 11084 4186 11084 4186 11085 6597 11085 6598 11085 4186 11086 6598 11086 4183 11086 4029 11087 4028 11087 6599 11087 4069 11088 4071 11088 6600 11088 6601 11089 4080 11089 4078 11089 4105 11090 4103 11090 6587 11090 6587 11091 4103 11091 4102 11091 6587 11092 4102 11092 6593 11092 6593 11093 4102 11093 4107 11093 6593 11094 4107 11094 4109 11094 6588 11095 4120 11095 6602 11095 6602 11096 4120 11096 4119 11096 6602 11097 4119 11097 4035 11097 4035 11098 4034 11098 6602 11098 6602 11099 4034 11099 4121 11099 6602 11100 4121 11100 6603 11100 6603 11101 4121 11101 4123 11101 6603 11102 4123 11102 4125 11102 4142 11103 4144 11103 6589 11103 6589 11104 4144 11104 4146 11104 6589 11105 4146 11105 6590 11105 6590 11106 4146 11106 4151 11106 6590 11107 4151 11107 4150 11107 4162 11108 6604 11108 4163 11108 4163 11109 6604 11109 6591 11109 4163 11110 6591 11110 4160 11110 4160 11111 6591 11111 4152 11111 6596 11112 4179 11112 6605 11112 4210 11113 6606 11113 4202 11113 4202 11114 6606 11114 6607 11114 4202 11115 6607 11115 4204 11115 4080 11116 6601 11116 4082 11116 4082 11117 6601 11117 6608 11117 4082 11118 6608 11118 4074 11118 4087 11119 6609 11119 4039 11119 4039 11120 6609 11120 6610 11120 4039 11121 6610 11121 4037 11121 4087 11122 4086 11122 6609 11122 6609 11123 4086 11123 4092 11123 6609 11124 4092 11124 6611 11124 6611 11125 4092 11125 4091 11125 6611 11126 4091 11126 6582 11126 6582 11127 4091 11127 4089 11127 6582 11128 4089 11128 4088 11128 4111 11129 4117 11129 6592 11129 6592 11130 4117 11130 4116 11130 6592 11131 4116 11131 6588 11131 6588 11132 4116 11132 4114 11132 6588 11133 4114 11133 4113 11133 4125 11134 4126 11134 6603 11134 6603 11135 4126 11135 4134 11135 6603 11136 4134 11136 6594 11136 6594 11137 4134 11137 4132 11137 6594 11138 4132 11138 4130 11138 4162 11139 4161 11139 6604 11139 6604 11140 4161 11140 4032 11140 6604 11141 4032 11141 6612 11141 6612 11142 4032 11142 4031 11142 6612 11143 4031 11143 6613 11143 6613 11144 4031 11144 4166 11144 6599 11145 4028 11145 6614 11145 6614 11146 4028 11146 4195 11146 6614 11147 4195 11147 4193 11147 4193 11148 4191 11148 6614 11148 6614 11149 4191 11149 4190 11149 6614 11150 4190 11150 6615 11150 6615 11151 4190 11151 4197 11151 6615 11152 4197 11152 4198 11152 4071 11153 4073 11153 6600 11153 6600 11154 4073 11154 4077 11154 6600 11155 4077 11155 6608 11155 6608 11156 4077 11156 4075 11156 6608 11157 4075 11157 4074 11157 4078 11158 4040 11158 6601 11158 6601 11159 4040 11159 4042 11159 6601 11160 4042 11160 6610 11160 6610 11161 4042 11161 4083 11161 6610 11162 4083 11162 4037 11162 4141 11163 4140 11163 6595 11163 6595 11164 4140 11164 4138 11164 6595 11165 4138 11165 6589 11165 6589 11166 4138 11166 4136 11166 6589 11167 4136 11167 4135 11167 4166 11168 4165 11168 6613 11168 6613 11169 4165 11169 4169 11169 6613 11170 4169 11170 6616 11170 4169 11171 4168 11171 6616 11171 6616 11172 4168 11172 4172 11172 6616 11173 4172 11173 6617 11173 4172 11174 4171 11174 6617 11174 6617 11175 4171 11175 4175 11175 6617 11176 4175 11176 6596 11176 6596 11177 4175 11177 4174 11177 6596 11178 4174 11178 4180 11178 4179 11179 4177 11179 6605 11179 6605 11180 4177 11180 4176 11180 6605 11181 4176 11181 6598 11181 6598 11182 4176 11182 4181 11182 6598 11183 4181 11183 4183 11183 4185 11184 4189 11184 6597 11184 6597 11185 4189 11185 4188 11185 6597 11186 4188 11186 6599 11186 6599 11187 4188 11187 4187 11187 6599 11188 4187 11188 4029 11188 4198 11189 4026 11189 6615 11189 6615 11190 4026 11190 4025 11190 6615 11191 4025 11191 6607 11191 6607 11192 4025 11192 4200 11192 6607 11193 4200 11193 4204 11193 4210 11194 4209 11194 6606 11194 6606 11195 4209 11195 4207 11195 6606 11196 4207 11196 6600 11196 6600 11197 4207 11197 4206 11197 6600 11198 4206 11198 4069 11198 7048 12631 7049 12631 7050 12631 7051 12632 7052 12632 7053 12632 7054 12633 7055 12633 7056 12633 7057 12634 7058 12634 7059 12634 7060 12635 7061 12635 7062 12635 7063 12636 7064 12636 7065 12636 7066 12637 7067 12637 7068 12637 5239 12638 5240 12638 7069 12638 5242 12639 5241 12639 7070 12639 5250 12640 5249 12640 7071 12640 5184 12641 5183 12641 7072 12641 5201 12642 5202 12642 7073 12642 3117 12643 7074 12643 5204 12643 5204 12644 7074 12644 7075 12644 5204 12645 7075 12645 5205 12645 5205 12646 7075 12646 5207 12646 5207 12647 7075 12647 5208 12647 5208 12648 7075 12648 7076 12648 5208 12649 7076 12649 5214 12649 7048 12650 5216 12650 7076 12650 7076 12651 5216 12651 5215 12651 7076 12652 5215 12652 5214 12652 7077 12653 5209 12653 5211 12653 5211 12654 5210 12654 7077 12654 7077 12655 5210 12655 5212 12655 7077 12656 5212 12656 5213 12656 5194 12657 3065 12657 7078 12657 7073 12658 5202 12658 7078 12658 7078 12659 5202 12659 5197 12659 7078 12660 5197 12660 5194 12660 5198 12661 5199 12661 7079 12661 7079 12662 5199 12662 5203 12662 7079 12663 5203 12663 7073 12663 7073 12664 5203 12664 5200 12664 7073 12665 5200 12665 5201 12665 3039 12666 5195 12666 7080 12666 7080 12667 5195 12667 7079 12667 7079 12668 5195 12668 5196 12668 7079 12669 5196 12669 5198 12669 7081 12670 5182 12670 7080 12670 7080 12671 5182 12671 5186 12671 7080 12672 5186 12672 3039 12672 5192 12673 5191 12673 7072 12673 7072 12674 5191 12674 5185 12674 7072 12675 5185 12675 5184 12675 5192 12676 7072 12676 5190 12676 5190 12677 7072 12677 7082 12677 5190 12678 7082 12678 5189 12678 5189 12679 7082 12679 7083 12679 5189 12680 7083 12680 5193 12680 7084 12681 5181 12681 5187 12681 7084 12682 5187 12682 7083 12682 7083 12683 5187 12683 5188 12683 7083 12684 5188 12684 5193 12684 5221 12685 5223 12685 7085 12685 7085 12686 5223 12686 5217 12686 7085 12687 5217 12687 7084 12687 7084 12688 5217 12688 3101 12688 7084 12689 3101 12689 5181 12689 5221 12690 7085 12690 5222 12690 5222 12691 7085 12691 7086 12691 5222 12692 7086 12692 5226 12692 7087 12693 5225 12693 7088 12693 7088 12694 5225 12694 5228 12694 7088 12695 5228 12695 7086 12695 7086 12696 5228 12696 5227 12696 7086 12697 5227 12697 5226 12697 5219 12698 5224 12698 7087 12698 7087 12699 5224 12699 5229 12699 7087 12700 5229 12700 5225 12700 5218 12701 7089 12701 7090 12701 5243 12702 3153 12702 7090 12702 7090 12703 3153 12703 5220 12703 7090 12704 5220 12704 5218 12704 7071 12705 5249 12705 7090 12705 7090 12706 5249 12706 5245 12706 7090 12707 5245 12707 5243 12707 5247 12708 5248 12708 7091 12708 7091 12709 5248 12709 5252 12709 7091 12710 5252 12710 7071 12710 7071 12711 5252 12711 5251 12711 7071 12712 5251 12712 5250 12712 5231 12713 3168 12713 7092 12713 7092 12714 3168 12714 5244 12714 7092 12715 5244 12715 7091 12715 7091 12716 5244 12716 5246 12716 7091 12717 5246 12717 5247 12717 5231 12718 7092 12718 5230 12718 5230 12719 7092 12719 7093 12719 5230 12720 7093 12720 5232 12720 5232 12721 7093 12721 7070 12721 5232 12722 7070 12722 5236 12722 5241 12723 5238 12723 7070 12723 7070 12724 5238 12724 5237 12724 7070 12725 5237 12725 5236 12725 7069 12726 5240 12726 7094 12726 3117 12727 5233 12727 7074 12727 7074 12728 5233 12728 5234 12728 7074 12729 5234 12729 7069 12729 7069 12730 5234 12730 5235 12730 7069 12731 5235 12731 5239 12731 7095 12732 7096 12732 7097 12732 7097 12733 7096 12733 7098 12733 7097 12734 7098 12734 7099 12734 7100 12735 7101 12735 7102 12735 7102 12736 7101 12736 7103 12736 7102 12737 7103 12737 7099 12737 7066 12738 7104 12738 7105 12738 7105 12739 7104 12739 7106 12739 7105 12740 7106 12740 7107 12740 7107 12741 7106 12741 7108 12741 7107 12742 7108 12742 7100 12742 7068 12743 7067 12743 7109 12743 7109 12744 7067 12744 7110 12744 7109 12745 7110 12745 7063 12745 7111 12746 7112 12746 7064 12746 7064 12747 7112 12747 7113 12747 7064 12748 7113 12748 7065 12748 7114 12749 7115 12749 7116 12749 7116 12750 7115 12750 7117 12750 7116 12751 7117 12751 7111 12751 7111 12752 7117 12752 7118 12752 7111 12753 7118 12753 7112 12753 7119 12754 7120 12754 7116 12754 7116 12755 7120 12755 7121 12755 7116 12756 7121 12756 7114 12756 7122 12757 7123 12757 7119 12757 7119 12758 7123 12758 7124 12758 7119 12759 7124 12759 7120 12759 7125 12760 7126 12760 7122 12760 7122 12761 7126 12761 7127 12761 7122 12762 7127 12762 7123 12762 7128 12763 7129 12763 7130 12763 7130 12764 7129 12764 7131 12764 7130 12765 7131 12765 7125 12765 7125 12766 7131 12766 7132 12766 7125 12767 7132 12767 7126 12767 7128 12768 7130 12768 7133 12768 7133 12769 7130 12769 7134 12769 7133 12770 7134 12770 7135 12770 7136 12771 7137 12771 7134 12771 7134 12772 7137 12772 7138 12772 7134 12773 7138 12773 7135 12773 7139 12774 7140 12774 7141 12774 7141 12775 7140 12775 7142 12775 7141 12776 7142 12776 7136 12776 7136 12777 7142 12777 7143 12777 7136 12778 7143 12778 7137 12778 7062 12779 7061 12779 7144 12779 7144 12780 7061 12780 7145 12780 7144 12781 7145 12781 7146 12781 7147 12782 7148 12782 7149 12782 7149 12783 7148 12783 7150 12783 7149 12784 7150 12784 7151 12784 7151 12785 7150 12785 7152 12785 7153 12786 7154 12786 7155 12786 7155 12787 7154 12787 7156 12787 7155 12788 7156 12788 7157 12788 7157 12789 7156 12789 7158 12789 7157 12790 7158 12790 7159 12790 7159 12791 7158 12791 7160 12791 7161 12792 7162 12792 7163 12792 7163 12793 7162 12793 7164 12793 7163 12794 7164 12794 7165 12794 7165 12795 7164 12795 7166 12795 7165 12796 7166 12796 7153 12796 7153 12797 7166 12797 7167 12797 7153 12798 7167 12798 7154 12798 7161 12799 7163 12799 7168 12799 7168 12800 7163 12800 7169 12800 7168 12801 7169 12801 7170 12801 7170 12802 7169 12802 7171 12802 7170 12803 7171 12803 7172 12803 7173 12804 7174 12804 7175 12804 7175 12805 7174 12805 7176 12805 7175 12806 7176 12806 7171 12806 7171 12807 7176 12807 7177 12807 7171 12808 7177 12808 7172 12808 7178 12809 7179 12809 7180 12809 7180 12810 7179 12810 7181 12810 7180 12811 7181 12811 7182 12811 7182 12812 7181 12812 7183 12812 7184 12813 7185 12813 7186 12813 7187 12814 7188 12814 7185 12814 7185 12815 7188 12815 7189 12815 7185 12816 7189 12816 7186 12816 7190 12817 7191 12817 7192 12817 7193 12818 7194 12818 7190 12818 7190 12819 7194 12819 7195 12819 7190 12820 7195 12820 7191 12820 7196 12821 7197 12821 7193 12821 7193 12822 7197 12822 7198 12822 7193 12823 7198 12823 7194 12823 7199 12824 7200 12824 7196 12824 7196 12825 7200 12825 7201 12825 7196 12826 7201 12826 7197 12826 7202 12827 7203 12827 7204 12827 7204 12828 7203 12828 7205 12828 7204 12829 7205 12829 7199 12829 7199 12830 7205 12830 7206 12830 7199 12831 7206 12831 7200 12831 7202 12832 7204 12832 7207 12832 7207 12833 7204 12833 7208 12833 7207 12834 7208 12834 7209 12834 7210 12835 7211 12835 7208 12835 7208 12836 7211 12836 7212 12836 7208 12837 7212 12837 7209 12837 7055 12838 7213 12838 7056 12838 7056 12839 7213 12839 7214 12839 7056 12840 7214 12840 7210 12840 7210 12841 7214 12841 7215 12841 7210 12842 7215 12842 7211 12842 7216 12843 7217 12843 7218 12843 7218 12844 7217 12844 7219 12844 7218 12845 7219 12845 7220 12845 7220 12846 7219 12846 7221 12846 7220 12847 7221 12847 7054 12847 7216 12848 7222 12848 7223 12848 7223 12849 7222 12849 7053 12849 7223 12850 7053 12850 7224 12850 7224 12851 7053 12851 7052 12851 7225 12852 7226 12852 7051 12852 7227 12853 7228 12853 7229 12853 7229 12854 7228 12854 7230 12854 7229 12855 7230 12855 7231 12855 7231 12856 7230 12856 7226 12856 7095 12857 7232 12857 7096 12857 7096 12858 7232 12858 7233 12858 7096 12859 7233 12859 7234 12859 7234 12860 7233 12860 7235 12860 7234 12861 7235 12861 7227 12861 7227 12862 7235 12862 7236 12862 7227 12863 7236 12863 7228 12863 7237 12864 7098 12864 7238 12864 7238 12865 7098 12865 7096 12865 7238 12866 7096 12866 7239 12866 7239 12867 7096 12867 7234 12867 7239 12868 7234 12868 7240 12868 7240 12869 7234 12869 7227 12869 7240 12870 7227 12870 7241 12870 7241 12871 7227 12871 7229 12871 7241 12872 7229 12872 7242 12872 7242 12873 7229 12873 7231 12873 7243 12874 7237 12874 7244 12874 7244 12875 7237 12875 7238 12875 7244 12876 7238 12876 7245 12876 7245 12877 7238 12877 7239 12877 7245 12878 7239 12878 7246 12878 7246 12879 7239 12879 7240 12879 7246 12880 7240 12880 7247 12880 7247 12881 7240 12881 7241 12881 7247 12882 7241 12882 7248 12882 7248 12883 7241 12883 7242 12883 7082 12884 7243 12884 7083 12884 7083 12885 7243 12885 7244 12885 7083 12886 7244 12886 7084 12886 7084 12887 7244 12887 7245 12887 7084 12888 7245 12888 7085 12888 7085 12889 7245 12889 7246 12889 7085 12890 7246 12890 7086 12890 7086 12891 7246 12891 7247 12891 7086 12892 7247 12892 7088 12892 7088 12893 7247 12893 7248 12893 7226 12894 7225 12894 7231 12894 7231 12895 7225 12895 7249 12895 7231 12896 7249 12896 7242 12896 7242 12897 7249 12897 7250 12897 7242 12898 7250 12898 7248 12898 7248 12899 7250 12899 7251 12899 7248 12900 7251 12900 7088 12900 7088 12901 7251 12901 7089 12901 7088 12902 7089 12902 7087 12902 7087 12903 7089 12903 5218 12903 7087 12904 5218 12904 5219 12904 7099 12905 7098 12905 7102 12905 7102 12906 7098 12906 7237 12906 7102 12907 7237 12907 7252 12907 7252 12908 7237 12908 7243 12908 7252 12909 7243 12909 7253 12909 7253 12910 7243 12910 7082 12910 7253 12911 7082 12911 7254 12911 7254 12912 7082 12912 7072 12912 7254 12913 7072 12913 7081 12913 7081 12914 7072 12914 5183 12914 7081 12915 5183 12915 5182 12915 7054 12916 7056 12916 7220 12916 7220 12917 7056 12917 7210 12917 7220 12918 7210 12918 7255 12918 7255 12919 7210 12919 7208 12919 7255 12920 7208 12920 7256 12920 7256 12921 7208 12921 7204 12921 7256 12922 7204 12922 7257 12922 7257 12923 7204 12923 7199 12923 7257 12924 7199 12924 7258 12924 7258 12925 7199 12925 7196 12925 7258 12926 7196 12926 7259 12926 7259 12927 7196 12927 7193 12927 7259 12928 7193 12928 7260 12928 7260 12929 7193 12929 7190 12929 7260 12930 7190 12930 7261 12930 7216 12931 7218 12931 7222 12931 7222 12932 7218 12932 7220 12932 7222 12933 7220 12933 7262 12933 7262 12934 7220 12934 7255 12934 7262 12935 7255 12935 7263 12935 7263 12936 7255 12936 7256 12936 7263 12937 7256 12937 7264 12937 7264 12938 7256 12938 7257 12938 7264 12939 7257 12939 7265 12939 7265 12940 7257 12940 7258 12940 7265 12941 7258 12941 7266 12941 7266 12942 7258 12942 7259 12942 7266 12943 7259 12943 7267 12943 7267 12944 7259 12944 7260 12944 7267 12945 7260 12945 7268 12945 7268 12946 7260 12946 7261 12946 7268 12947 7261 12947 7269 12947 7051 12948 7053 12948 7225 12948 7225 12949 7053 12949 7222 12949 7225 12950 7222 12950 7249 12950 7249 12951 7222 12951 7262 12951 7249 12952 7262 12952 7250 12952 7250 12953 7262 12953 7263 12953 7250 12954 7263 12954 7251 12954 7251 12955 7263 12955 7264 12955 7251 12956 7264 12956 7089 12956 7089 12957 7264 12957 7265 12957 7089 12958 7265 12958 7090 12958 7090 12959 7265 12959 7266 12959 7090 12960 7266 12960 7071 12960 7071 12961 7266 12961 7267 12961 7071 12962 7267 12962 7091 12962 7091 12963 7267 12963 7268 12963 7091 12964 7268 12964 7092 12964 7092 12965 7268 12965 7269 12965 7092 12966 7269 12966 7093 12966 5240 12967 5242 12967 7094 12967 7094 12968 5242 12968 7070 12968 7094 12969 7070 12969 7270 12969 7270 12970 7070 12970 7093 12970 7270 12971 7093 12971 7271 12971 7271 12972 7093 12972 7269 12972 7271 12973 7269 12973 7272 12973 7272 12974 7269 12974 7261 12974 7272 12975 7261 12975 7059 12975 7059 12976 7261 12976 7190 12976 7059 12977 7190 12977 7057 12977 7057 12978 7190 12978 7192 12978 3065 12979 5206 12979 7078 12979 7078 12980 5206 12980 5209 12980 7078 12981 5209 12981 7050 12981 7050 12982 5209 12982 7077 12982 7050 12983 7077 12983 7048 12983 7048 12984 7077 12984 5213 12984 7048 12985 5213 12985 5216 12985 7273 12986 7049 12986 7274 12986 7274 12987 7049 12987 7048 12987 7274 12988 7048 12988 7275 12988 7275 12989 7048 12989 7076 12989 7275 12990 7076 12990 7276 12990 7276 12991 7076 12991 7075 12991 7276 12992 7075 12992 7277 12992 7277 12993 7075 12993 7074 12993 7277 12994 7074 12994 7278 12994 7278 12995 7074 12995 7069 12995 7278 12996 7069 12996 7279 12996 7279 12997 7069 12997 7094 12997 7279 12998 7094 12998 7280 12998 7280 12999 7094 12999 7270 12999 7280 13000 7270 13000 7281 13000 7281 13001 7270 13001 7271 13001 7281 13002 7271 13002 7184 13002 7184 13003 7271 13003 7272 13003 7184 13004 7272 13004 7185 13004 7185 13005 7272 13005 7059 13005 7185 13006 7059 13006 7187 13006 7187 13007 7059 13007 7058 13007 7063 13008 7110 13008 7064 13008 7064 13009 7110 13009 7282 13009 7064 13010 7282 13010 7111 13010 7111 13011 7282 13011 7283 13011 7111 13012 7283 13012 7116 13012 7116 13013 7283 13013 7284 13013 7116 13014 7284 13014 7119 13014 7119 13015 7284 13015 7285 13015 7119 13016 7285 13016 7122 13016 7122 13017 7285 13017 7286 13017 7122 13018 7286 13018 7125 13018 7125 13019 7286 13019 7287 13019 7125 13020 7287 13020 7130 13020 7130 13021 7287 13021 7288 13021 7130 13022 7288 13022 7134 13022 7134 13023 7288 13023 7289 13023 7134 13024 7289 13024 7136 13024 7136 13025 7289 13025 7144 13025 7136 13026 7144 13026 7141 13026 7141 13027 7144 13027 7146 13027 7141 13028 7146 13028 7139 13028 7290 13029 7273 13029 7291 13029 7291 13030 7273 13030 7274 13030 7291 13031 7274 13031 7292 13031 7292 13032 7274 13032 7275 13032 7292 13033 7275 13033 7293 13033 7293 13034 7275 13034 7276 13034 7293 13035 7276 13035 7294 13035 7294 13036 7276 13036 7277 13036 7294 13037 7277 13037 7295 13037 7295 13038 7277 13038 7278 13038 7295 13039 7278 13039 7296 13039 7296 13040 7278 13040 7279 13040 7296 13041 7279 13041 7297 13041 7297 13042 7279 13042 7280 13042 7297 13043 7280 13043 7182 13043 7182 13044 7280 13044 7281 13044 7182 13045 7281 13045 7180 13045 7180 13046 7281 13046 7184 13046 7180 13047 7184 13047 7178 13047 7178 13048 7184 13048 7186 13048 7066 13049 7105 13049 7067 13049 7067 13050 7105 13050 7298 13050 7067 13051 7298 13051 7110 13051 7110 13052 7298 13052 7299 13052 7110 13053 7299 13053 7282 13053 7282 13054 7299 13054 7300 13054 7282 13055 7300 13055 7283 13055 7283 13056 7300 13056 7301 13056 7283 13057 7301 13057 7284 13057 7284 13058 7301 13058 7302 13058 7284 13059 7302 13059 7285 13059 7285 13060 7302 13060 7303 13060 7285 13061 7303 13061 7286 13061 7286 13062 7303 13062 7304 13062 7286 13063 7304 13063 7287 13063 7287 13064 7304 13064 7305 13064 7287 13065 7305 13065 7288 13065 7288 13066 7305 13066 7306 13066 7288 13067 7306 13067 7289 13067 7289 13068 7306 13068 7307 13068 7289 13069 7307 13069 7144 13069 7144 13070 7307 13070 7148 13070 7144 13071 7148 13071 7062 13071 7062 13072 7148 13072 7147 13072 7062 13073 7147 13073 7060 13073 7159 13074 7290 13074 7157 13074 7157 13075 7290 13075 7291 13075 7157 13076 7291 13076 7155 13076 7155 13077 7291 13077 7292 13077 7155 13078 7292 13078 7153 13078 7153 13079 7292 13079 7293 13079 7153 13080 7293 13080 7165 13080 7165 13081 7293 13081 7294 13081 7165 13082 7294 13082 7163 13082 7163 13083 7294 13083 7295 13083 7163 13084 7295 13084 7169 13084 7169 13085 7295 13085 7296 13085 7169 13086 7296 13086 7171 13086 7171 13087 7296 13087 7297 13087 7171 13088 7297 13088 7175 13088 7175 13089 7297 13089 7182 13089 7175 13090 7182 13090 7173 13090 7173 13091 7182 13091 7183 13091 7100 13092 7102 13092 7107 13092 7107 13093 7102 13093 7252 13093 7107 13094 7252 13094 7105 13094 7105 13095 7252 13095 7253 13095 7105 13096 7253 13096 7298 13096 7298 13097 7253 13097 7254 13097 7298 13098 7254 13098 7299 13098 7299 13099 7254 13099 7081 13099 7299 13100 7081 13100 7300 13100 7300 13101 7081 13101 7080 13101 7300 13102 7080 13102 7301 13102 7301 13103 7080 13103 7079 13103 7301 13104 7079 13104 7302 13104 7302 13105 7079 13105 7073 13105 7302 13106 7073 13106 7303 13106 7303 13107 7073 13107 7078 13107 7303 13108 7078 13108 7304 13108 7304 13109 7078 13109 7050 13109 7304 13110 7050 13110 7305 13110 7305 13111 7050 13111 7049 13111 7305 13112 7049 13112 7306 13112 7306 13113 7049 13113 7273 13113 7306 13114 7273 13114 7307 13114 7307 13115 7273 13115 7290 13115 7307 13116 7290 13116 7148 13116 7148 13117 7290 13117 7159 13117 7148 13118 7159 13118 7150 13118 7150 13119 7159 13119 7160 13119 7150 13120 7160 13120 7152 13120 7380 13265 7381 13265 7382 13265 7383 13266 7384 13266 7385 13266 7386 13267 7387 13267 7388 13267 7389 13268 7390 13268 7391 13268 7392 13269 7393 13269 7394 13269 7395 13270 7396 13270 7397 13270 7398 13271 7399 13271 7400 13271 5314 13272 5310 13272 7401 13272 5311 13273 5313 13273 7402 13273 5322 13274 5323 13274 7403 13274 5259 13275 5255 13275 7404 13275 5273 13276 5272 13276 7405 13276 3273 13277 7406 13277 5276 13277 5276 13278 7406 13278 7407 13278 5276 13279 7407 13279 5277 13279 5277 13280 7407 13280 5279 13280 5279 13281 7407 13281 5280 13281 5280 13282 7407 13282 7408 13282 5280 13283 7408 13283 5285 13283 7380 13284 5287 13284 7408 13284 7408 13285 5287 13285 5286 13285 7408 13286 5286 13286 5285 13286 7409 13287 5281 13287 5283 13287 5283 13288 5282 13288 7409 13288 7409 13289 5282 13289 5288 13289 7409 13290 5288 13290 5284 13290 5266 13291 3221 13291 7410 13291 7405 13292 5272 13292 7410 13292 7410 13293 5272 13293 5268 13293 7410 13294 5268 13294 5266 13294 5270 13295 5271 13295 7411 13295 7411 13296 5271 13296 5275 13296 7411 13297 5275 13297 7405 13297 7405 13298 5275 13298 5274 13298 7405 13299 5274 13299 5273 13299 3195 13300 5267 13300 7412 13300 7412 13301 5267 13301 7411 13301 7411 13302 5267 13302 5269 13302 7411 13303 5269 13303 5270 13303 7413 13304 5254 13304 7412 13304 7412 13305 5254 13305 5256 13305 7412 13306 5256 13306 3195 13306 5264 13307 5261 13307 7404 13307 7404 13308 5261 13308 5260 13308 7404 13309 5260 13309 5259 13309 5264 13310 7404 13310 5265 13310 5265 13311 7404 13311 7414 13311 5265 13312 7414 13312 5262 13312 5262 13313 7414 13313 7415 13313 5262 13314 7415 13314 5263 13314 7416 13315 5253 13315 5257 13315 7416 13316 5257 13316 7415 13316 7415 13317 5257 13317 5258 13317 7415 13318 5258 13318 5263 13318 5295 13319 5291 13319 7417 13319 7417 13320 5291 13320 5289 13320 7417 13321 5289 13321 7416 13321 7416 13322 5289 13322 3257 13322 7416 13323 3257 13323 5253 13323 5295 13324 7417 13324 5296 13324 5296 13325 7417 13325 7418 13325 5296 13326 7418 13326 5299 13326 7419 13327 5298 13327 7420 13327 7420 13328 5298 13328 5301 13328 7420 13329 5301 13329 7418 13329 7418 13330 5301 13330 5300 13330 7418 13331 5300 13331 5299 13331 5294 13332 5293 13332 7419 13332 7419 13333 5293 13333 5297 13333 7419 13334 5297 13334 5298 13334 5292 13335 7421 13335 7422 13335 5315 13336 3309 13336 7422 13336 7422 13337 3309 13337 5290 13337 7422 13338 5290 13338 5292 13338 7403 13339 5323 13339 7422 13339 7422 13340 5323 13340 5318 13340 7422 13341 5318 13341 5315 13341 5319 13342 5320 13342 7423 13342 7423 13343 5320 13343 5324 13343 7423 13344 5324 13344 7403 13344 7403 13345 5324 13345 5321 13345 7403 13346 5321 13346 5322 13346 5304 13347 3324 13347 7424 13347 7424 13348 3324 13348 5316 13348 7424 13349 5316 13349 7423 13349 7423 13350 5316 13350 5317 13350 7423 13351 5317 13351 5319 13351 5304 13352 7424 13352 5302 13352 5302 13353 7424 13353 7425 13353 5302 13354 7425 13354 5303 13354 5303 13355 7425 13355 7402 13355 5303 13356 7402 13356 5308 13356 5313 13357 5312 13357 7402 13357 7402 13358 5312 13358 5309 13358 7402 13359 5309 13359 5308 13359 7401 13360 5310 13360 7426 13360 3273 13361 5305 13361 7406 13361 7406 13362 5305 13362 5306 13362 7406 13363 5306 13363 7401 13363 7401 13364 5306 13364 5307 13364 7401 13365 5307 13365 5314 13365 7427 13366 7428 13366 7429 13366 7429 13367 7428 13367 7430 13367 7429 13368 7430 13368 7431 13368 7432 13369 7433 13369 7434 13369 7434 13370 7433 13370 7435 13370 7434 13371 7435 13371 7431 13371 7398 13372 7436 13372 7437 13372 7437 13373 7436 13373 7438 13373 7437 13374 7438 13374 7439 13374 7439 13375 7438 13375 7440 13375 7439 13376 7440 13376 7432 13376 7400 13377 7399 13377 7441 13377 7441 13378 7399 13378 7442 13378 7441 13379 7442 13379 7395 13379 7443 13380 7444 13380 7396 13380 7396 13381 7444 13381 7445 13381 7396 13382 7445 13382 7397 13382 7446 13383 7447 13383 7448 13383 7448 13384 7447 13384 7449 13384 7448 13385 7449 13385 7443 13385 7443 13386 7449 13386 7450 13386 7443 13387 7450 13387 7444 13387 7451 13388 7452 13388 7448 13388 7448 13389 7452 13389 7453 13389 7448 13390 7453 13390 7446 13390 7454 13391 7455 13391 7451 13391 7451 13392 7455 13392 7456 13392 7451 13393 7456 13393 7452 13393 7457 13394 7458 13394 7454 13394 7454 13395 7458 13395 7459 13395 7454 13396 7459 13396 7455 13396 7460 13397 7461 13397 7462 13397 7462 13398 7461 13398 7463 13398 7462 13399 7463 13399 7457 13399 7457 13400 7463 13400 7464 13400 7457 13401 7464 13401 7458 13401 7460 13402 7462 13402 7465 13402 7465 13403 7462 13403 7466 13403 7465 13404 7466 13404 7467 13404 7468 13405 7469 13405 7466 13405 7466 13406 7469 13406 7470 13406 7466 13407 7470 13407 7467 13407 7471 13408 7472 13408 7473 13408 7473 13409 7472 13409 7474 13409 7473 13410 7474 13410 7468 13410 7468 13411 7474 13411 7475 13411 7468 13412 7475 13412 7469 13412 7394 13413 7393 13413 7476 13413 7476 13414 7393 13414 7477 13414 7476 13415 7477 13415 7478 13415 7479 13416 7480 13416 7481 13416 7481 13417 7480 13417 7482 13417 7481 13418 7482 13418 7483 13418 7483 13419 7482 13419 7484 13419 7485 13420 7486 13420 7487 13420 7487 13421 7486 13421 7488 13421 7487 13422 7488 13422 7489 13422 7489 13423 7488 13423 7490 13423 7489 13424 7490 13424 7491 13424 7491 13425 7490 13425 7492 13425 7493 13426 7494 13426 7495 13426 7495 13427 7494 13427 7496 13427 7495 13428 7496 13428 7497 13428 7497 13429 7496 13429 7498 13429 7497 13430 7498 13430 7485 13430 7485 13431 7498 13431 7499 13431 7485 13432 7499 13432 7486 13432 7493 13433 7495 13433 7500 13433 7500 13434 7495 13434 7501 13434 7500 13435 7501 13435 7502 13435 7502 13436 7501 13436 7503 13436 7502 13437 7503 13437 7504 13437 7505 13438 7506 13438 7507 13438 7507 13439 7506 13439 7508 13439 7507 13440 7508 13440 7503 13440 7503 13441 7508 13441 7509 13441 7503 13442 7509 13442 7504 13442 7510 13443 7511 13443 7512 13443 7512 13444 7511 13444 7513 13444 7512 13445 7513 13445 7514 13445 7514 13446 7513 13446 7515 13446 7516 13447 7517 13447 7518 13447 7519 13448 7520 13448 7517 13448 7517 13449 7520 13449 7521 13449 7517 13450 7521 13450 7518 13450 7522 13451 7523 13451 7524 13451 7525 13452 7526 13452 7522 13452 7522 13453 7526 13453 7527 13453 7522 13454 7527 13454 7523 13454 7528 13455 7529 13455 7525 13455 7525 13456 7529 13456 7530 13456 7525 13457 7530 13457 7526 13457 7531 13458 7532 13458 7528 13458 7528 13459 7532 13459 7533 13459 7528 13460 7533 13460 7529 13460 7534 13461 7535 13461 7536 13461 7536 13462 7535 13462 7537 13462 7536 13463 7537 13463 7531 13463 7531 13464 7537 13464 7538 13464 7531 13465 7538 13465 7532 13465 7534 13466 7536 13466 7539 13466 7539 13467 7536 13467 7540 13467 7539 13468 7540 13468 7541 13468 7542 13469 7543 13469 7540 13469 7540 13470 7543 13470 7544 13470 7540 13471 7544 13471 7541 13471 7387 13472 7545 13472 7388 13472 7388 13473 7545 13473 7546 13473 7388 13474 7546 13474 7542 13474 7542 13475 7546 13475 7547 13475 7542 13476 7547 13476 7543 13476 7548 13477 7549 13477 7550 13477 7550 13478 7549 13478 7551 13478 7550 13479 7551 13479 7552 13479 7552 13480 7551 13480 7553 13480 7552 13481 7553 13481 7386 13481 7548 13482 7554 13482 7555 13482 7555 13483 7554 13483 7385 13483 7555 13484 7385 13484 7556 13484 7556 13485 7385 13485 7384 13485 7557 13486 7558 13486 7383 13486 7559 13487 7560 13487 7561 13487 7561 13488 7560 13488 7562 13488 7561 13489 7562 13489 7563 13489 7563 13490 7562 13490 7558 13490 7427 13491 7564 13491 7428 13491 7428 13492 7564 13492 7565 13492 7428 13493 7565 13493 7566 13493 7566 13494 7565 13494 7567 13494 7566 13495 7567 13495 7559 13495 7559 13496 7567 13496 7568 13496 7559 13497 7568 13497 7560 13497 7569 13498 7430 13498 7570 13498 7570 13499 7430 13499 7428 13499 7570 13500 7428 13500 7571 13500 7571 13501 7428 13501 7566 13501 7571 13502 7566 13502 7572 13502 7572 13503 7566 13503 7559 13503 7572 13504 7559 13504 7573 13504 7573 13505 7559 13505 7561 13505 7573 13506 7561 13506 7574 13506 7574 13507 7561 13507 7563 13507 7575 13508 7569 13508 7576 13508 7576 13509 7569 13509 7570 13509 7576 13510 7570 13510 7577 13510 7577 13511 7570 13511 7571 13511 7577 13512 7571 13512 7578 13512 7578 13513 7571 13513 7572 13513 7578 13514 7572 13514 7579 13514 7579 13515 7572 13515 7573 13515 7579 13516 7573 13516 7580 13516 7580 13517 7573 13517 7574 13517 7414 13518 7575 13518 7415 13518 7415 13519 7575 13519 7576 13519 7415 13520 7576 13520 7416 13520 7416 13521 7576 13521 7577 13521 7416 13522 7577 13522 7417 13522 7417 13523 7577 13523 7578 13523 7417 13524 7578 13524 7418 13524 7418 13525 7578 13525 7579 13525 7418 13526 7579 13526 7420 13526 7420 13527 7579 13527 7580 13527 7558 13528 7557 13528 7563 13528 7563 13529 7557 13529 7581 13529 7563 13530 7581 13530 7574 13530 7574 13531 7581 13531 7582 13531 7574 13532 7582 13532 7580 13532 7580 13533 7582 13533 7583 13533 7580 13534 7583 13534 7420 13534 7420 13535 7583 13535 7421 13535 7420 13536 7421 13536 7419 13536 7419 13537 7421 13537 5292 13537 7419 13538 5292 13538 5294 13538 7431 13539 7430 13539 7434 13539 7434 13540 7430 13540 7569 13540 7434 13541 7569 13541 7584 13541 7584 13542 7569 13542 7575 13542 7584 13543 7575 13543 7585 13543 7585 13544 7575 13544 7414 13544 7585 13545 7414 13545 7586 13545 7586 13546 7414 13546 7404 13546 7586 13547 7404 13547 7413 13547 7413 13548 7404 13548 5255 13548 7413 13549 5255 13549 5254 13549 7386 13550 7388 13550 7552 13550 7552 13551 7388 13551 7542 13551 7552 13552 7542 13552 7587 13552 7587 13553 7542 13553 7540 13553 7587 13554 7540 13554 7588 13554 7588 13555 7540 13555 7536 13555 7588 13556 7536 13556 7589 13556 7589 13557 7536 13557 7531 13557 7589 13558 7531 13558 7590 13558 7590 13559 7531 13559 7528 13559 7590 13560 7528 13560 7591 13560 7591 13561 7528 13561 7525 13561 7591 13562 7525 13562 7592 13562 7592 13563 7525 13563 7522 13563 7592 13564 7522 13564 7593 13564 7548 13565 7550 13565 7554 13565 7554 13566 7550 13566 7552 13566 7554 13567 7552 13567 7594 13567 7594 13568 7552 13568 7587 13568 7594 13569 7587 13569 7595 13569 7595 13570 7587 13570 7588 13570 7595 13571 7588 13571 7596 13571 7596 13572 7588 13572 7589 13572 7596 13573 7589 13573 7597 13573 7597 13574 7589 13574 7590 13574 7597 13575 7590 13575 7598 13575 7598 13576 7590 13576 7591 13576 7598 13577 7591 13577 7599 13577 7599 13578 7591 13578 7592 13578 7599 13579 7592 13579 7600 13579 7600 13580 7592 13580 7593 13580 7600 13581 7593 13581 7601 13581 7383 13582 7385 13582 7557 13582 7557 13583 7385 13583 7554 13583 7557 13584 7554 13584 7581 13584 7581 13585 7554 13585 7594 13585 7581 13586 7594 13586 7582 13586 7582 13587 7594 13587 7595 13587 7582 13588 7595 13588 7583 13588 7583 13589 7595 13589 7596 13589 7583 13590 7596 13590 7421 13590 7421 13591 7596 13591 7597 13591 7421 13592 7597 13592 7422 13592 7422 13593 7597 13593 7598 13593 7422 13594 7598 13594 7403 13594 7403 13595 7598 13595 7599 13595 7403 13596 7599 13596 7423 13596 7423 13597 7599 13597 7600 13597 7423 13598 7600 13598 7424 13598 7424 13599 7600 13599 7601 13599 7424 13600 7601 13600 7425 13600 5310 13601 5311 13601 7426 13601 7426 13602 5311 13602 7402 13602 7426 13603 7402 13603 7602 13603 7602 13604 7402 13604 7425 13604 7602 13605 7425 13605 7603 13605 7603 13606 7425 13606 7601 13606 7603 13607 7601 13607 7604 13607 7604 13608 7601 13608 7593 13608 7604 13609 7593 13609 7391 13609 7391 13610 7593 13610 7522 13610 7391 13611 7522 13611 7389 13611 7389 13612 7522 13612 7524 13612 3221 13613 5278 13613 7410 13613 7410 13614 5278 13614 5281 13614 7410 13615 5281 13615 7382 13615 7382 13616 5281 13616 7409 13616 7382 13617 7409 13617 7380 13617 7380 13618 7409 13618 5284 13618 7380 13619 5284 13619 5287 13619 7605 13620 7381 13620 7606 13620 7606 13621 7381 13621 7380 13621 7606 13622 7380 13622 7607 13622 7607 13623 7380 13623 7408 13623 7607 13624 7408 13624 7608 13624 7608 13625 7408 13625 7407 13625 7608 13626 7407 13626 7609 13626 7609 13627 7407 13627 7406 13627 7609 13628 7406 13628 7610 13628 7610 13629 7406 13629 7401 13629 7610 13630 7401 13630 7611 13630 7611 13631 7401 13631 7426 13631 7611 13632 7426 13632 7612 13632 7612 13633 7426 13633 7602 13633 7612 13634 7602 13634 7613 13634 7613 13635 7602 13635 7603 13635 7613 13636 7603 13636 7516 13636 7516 13637 7603 13637 7604 13637 7516 13638 7604 13638 7517 13638 7517 13639 7604 13639 7391 13639 7517 13640 7391 13640 7519 13640 7519 13641 7391 13641 7390 13641 7395 13642 7442 13642 7396 13642 7396 13643 7442 13643 7614 13643 7396 13644 7614 13644 7443 13644 7443 13645 7614 13645 7615 13645 7443 13646 7615 13646 7448 13646 7448 13647 7615 13647 7616 13647 7448 13648 7616 13648 7451 13648 7451 13649 7616 13649 7617 13649 7451 13650 7617 13650 7454 13650 7454 13651 7617 13651 7618 13651 7454 13652 7618 13652 7457 13652 7457 13653 7618 13653 7619 13653 7457 13654 7619 13654 7462 13654 7462 13655 7619 13655 7620 13655 7462 13656 7620 13656 7466 13656 7466 13657 7620 13657 7621 13657 7466 13658 7621 13658 7468 13658 7468 13659 7621 13659 7476 13659 7468 13660 7476 13660 7473 13660 7473 13661 7476 13661 7478 13661 7473 13662 7478 13662 7471 13662 7622 13663 7605 13663 7623 13663 7623 13664 7605 13664 7606 13664 7623 13665 7606 13665 7624 13665 7624 13666 7606 13666 7607 13666 7624 13667 7607 13667 7625 13667 7625 13668 7607 13668 7608 13668 7625 13669 7608 13669 7626 13669 7626 13670 7608 13670 7609 13670 7626 13671 7609 13671 7627 13671 7627 13672 7609 13672 7610 13672 7627 13673 7610 13673 7628 13673 7628 13674 7610 13674 7611 13674 7628 13675 7611 13675 7629 13675 7629 13676 7611 13676 7612 13676 7629 13677 7612 13677 7514 13677 7514 13678 7612 13678 7613 13678 7514 13679 7613 13679 7512 13679 7512 13680 7613 13680 7516 13680 7512 13681 7516 13681 7510 13681 7510 13682 7516 13682 7518 13682 7398 13683 7437 13683 7399 13683 7399 13684 7437 13684 7630 13684 7399 13685 7630 13685 7442 13685 7442 13686 7630 13686 7631 13686 7442 13687 7631 13687 7614 13687 7614 13688 7631 13688 7632 13688 7614 13689 7632 13689 7615 13689 7615 13690 7632 13690 7633 13690 7615 13691 7633 13691 7616 13691 7616 13692 7633 13692 7634 13692 7616 13693 7634 13693 7617 13693 7617 13694 7634 13694 7635 13694 7617 13695 7635 13695 7618 13695 7618 13696 7635 13696 7636 13696 7618 13697 7636 13697 7619 13697 7619 13698 7636 13698 7637 13698 7619 13699 7637 13699 7620 13699 7620 13700 7637 13700 7638 13700 7620 13701 7638 13701 7621 13701 7621 13702 7638 13702 7639 13702 7621 13703 7639 13703 7476 13703 7476 13704 7639 13704 7480 13704 7476 13705 7480 13705 7394 13705 7394 13706 7480 13706 7479 13706 7394 13707 7479 13707 7392 13707 7491 13708 7622 13708 7489 13708 7489 13709 7622 13709 7623 13709 7489 13710 7623 13710 7487 13710 7487 13711 7623 13711 7624 13711 7487 13712 7624 13712 7485 13712 7485 13713 7624 13713 7625 13713 7485 13714 7625 13714 7497 13714 7497 13715 7625 13715 7626 13715 7497 13716 7626 13716 7495 13716 7495 13717 7626 13717 7627 13717 7495 13718 7627 13718 7501 13718 7501 13719 7627 13719 7628 13719 7501 13720 7628 13720 7503 13720 7503 13721 7628 13721 7629 13721 7503 13722 7629 13722 7507 13722 7507 13723 7629 13723 7514 13723 7507 13724 7514 13724 7505 13724 7505 13725 7514 13725 7515 13725 7432 13726 7434 13726 7439 13726 7439 13727 7434 13727 7584 13727 7439 13728 7584 13728 7437 13728 7437 13729 7584 13729 7585 13729 7437 13730 7585 13730 7630 13730 7630 13731 7585 13731 7586 13731 7630 13732 7586 13732 7631 13732 7631 13733 7586 13733 7413 13733 7631 13734 7413 13734 7632 13734 7632 13735 7413 13735 7412 13735 7632 13736 7412 13736 7633 13736 7633 13737 7412 13737 7411 13737 7633 13738 7411 13738 7634 13738 7634 13739 7411 13739 7405 13739 7634 13740 7405 13740 7635 13740 7635 13741 7405 13741 7410 13741 7635 13742 7410 13742 7636 13742 7636 13743 7410 13743 7382 13743 7636 13744 7382 13744 7637 13744 7637 13745 7382 13745 7381 13745 7637 13746 7381 13746 7638 13746 7638 13747 7381 13747 7605 13747 7638 13748 7605 13748 7639 13748 7639 13749 7605 13749 7622 13749 7639 13750 7622 13750 7480 13750 7480 13751 7622 13751 7491 13751 7480 13752 7491 13752 7482 13752 7482 13753 7491 13753 7492 13753 7482 13754 7492 13754 7484 13754 7058 17525 7057 17525 9559 17525 7055 17526 7054 17526 9560 17526 9559 17527 7057 17527 9561 17527 7100 17528 7108 17528 9562 17528 9562 17529 7108 17529 7106 17529 9562 17530 7106 17530 9563 17530 9563 17531 7106 17531 7104 17531 7063 17532 7065 17532 9564 17532 9564 17533 7065 17533 7113 17533 9564 17534 7113 17534 9565 17534 9565 17535 7113 17535 7112 17535 7176 17536 7174 17536 9566 17536 9566 17537 7174 17537 7173 17537 9566 17538 7173 17538 9567 17538 9567 17539 7173 17539 7183 17539 9568 17540 7194 17540 9569 17540 9569 17541 7194 17541 7198 17541 7198 17542 7197 17542 9569 17542 9569 17543 7197 17543 7201 17543 9569 17544 7201 17544 9570 17544 7205 17545 9571 17545 7206 17545 7206 17546 9571 17546 9570 17546 7206 17547 9570 17547 7200 17547 7200 17548 9570 17548 7201 17548 7212 17549 9572 17549 7209 17549 7209 17550 9572 17550 9573 17550 7217 17551 9574 17551 7219 17551 7219 17552 9574 17552 9560 17552 7219 17553 9560 17553 7221 17553 7221 17554 9560 17554 7054 17554 7217 17555 7216 17555 9574 17555 9574 17556 7216 17556 7223 17556 9574 17557 7223 17557 9575 17557 9575 17558 7223 17558 7224 17558 9575 17559 7224 17559 7052 17559 7052 17560 7051 17560 9575 17560 9575 17561 7051 17561 7226 17561 9575 17562 7226 17562 9576 17562 7104 17563 7066 17563 9563 17563 9563 17564 7066 17564 7068 17564 9563 17565 7068 17565 9564 17565 9564 17566 7068 17566 7109 17566 9564 17567 7109 17567 7063 17567 7112 17568 7118 17568 9565 17568 9565 17569 7118 17569 7117 17569 9565 17570 7117 17570 9577 17570 7186 17571 7189 17571 9578 17571 9578 17572 7189 17572 7188 17572 9578 17573 7188 17573 9559 17573 9559 17574 7188 17574 7187 17574 9559 17575 7187 17575 7058 17575 7205 17576 7203 17576 9571 17576 9571 17577 7203 17577 7202 17577 9571 17578 7202 17578 9573 17578 9573 17579 7202 17579 7207 17579 9573 17580 7207 17580 7209 17580 7212 17581 7211 17581 9572 17581 9572 17582 7211 17582 7215 17582 9572 17583 7215 17583 9579 17583 9579 17584 7215 17584 7214 17584 9579 17585 7214 17585 9560 17585 9560 17586 7214 17586 7213 17586 9560 17587 7213 17587 7055 17587 7226 17588 7230 17588 9576 17588 9576 17589 7230 17589 7228 17589 9576 17590 7228 17590 9580 17590 9580 17591 7228 17591 7236 17591 9580 17592 7236 17592 7235 17592 7097 17593 7099 17593 9581 17593 9581 17594 7099 17594 7103 17594 9581 17595 7103 17595 9562 17595 9562 17596 7103 17596 7101 17596 9562 17597 7101 17597 7100 17597 7131 17598 9582 17598 7132 17598 7132 17599 9582 17599 9583 17599 9584 17600 7151 17600 7152 17600 7156 17601 9585 17601 7158 17601 7158 17602 9585 17602 9584 17602 7158 17603 9584 17603 7160 17603 7160 17604 9584 17604 7152 17604 7166 17605 9586 17605 7167 17605 7167 17606 9586 17606 9585 17606 7167 17607 9585 17607 7154 17607 7154 17608 9585 17608 7156 17608 7183 17609 7181 17609 9567 17609 9567 17610 7181 17610 7179 17610 9567 17611 7179 17611 9578 17611 9578 17612 7179 17612 7178 17612 9578 17613 7178 17613 7186 17613 7057 17614 7192 17614 9561 17614 9561 17615 7192 17615 7191 17615 9561 17616 7191 17616 9568 17616 9568 17617 7191 17617 7195 17617 9568 17618 7195 17618 7194 17618 7235 17619 7233 17619 9580 17619 9580 17620 7233 17620 7232 17620 9580 17621 7232 17621 9581 17621 9581 17622 7232 17622 7095 17622 9581 17623 7095 17623 7097 17623 9587 17624 7120 17624 9588 17624 9588 17625 7120 17625 7124 17625 7124 17626 7123 17626 9588 17626 9588 17627 7123 17627 7127 17627 9588 17628 7127 17628 9583 17628 9583 17629 7127 17629 7126 17629 9583 17630 7126 17630 7132 17630 7131 17631 7129 17631 9582 17631 9582 17632 7129 17632 7128 17632 9582 17633 7128 17633 9589 17633 7138 17634 9590 17634 7135 17634 7135 17635 9590 17635 9589 17635 7135 17636 9589 17636 7133 17636 7133 17637 9589 17637 7128 17637 9591 17638 7147 17638 9584 17638 9584 17639 7147 17639 7149 17639 9584 17640 7149 17640 7151 17640 7168 17641 7170 17641 9592 17641 9592 17642 7170 17642 7172 17642 9592 17643 7172 17643 9566 17643 9566 17644 7172 17644 7177 17644 9566 17645 7177 17645 7176 17645 7117 17646 7115 17646 9577 17646 9577 17647 7115 17647 7114 17647 9577 17648 7114 17648 9587 17648 9587 17649 7114 17649 7121 17649 9587 17650 7121 17650 7120 17650 7138 17651 7137 17651 9590 17651 9590 17652 7137 17652 7143 17652 9590 17653 7143 17653 9593 17653 7143 17654 7142 17654 9593 17654 9593 17655 7142 17655 7140 17655 9593 17656 7140 17656 9594 17656 9594 17657 7140 17657 7139 17657 9594 17658 7139 17658 7146 17658 7146 17659 7145 17659 9594 17659 9594 17660 7145 17660 7061 17660 9594 17661 7061 17661 9591 17661 9591 17662 7061 17662 7060 17662 9591 17663 7060 17663 7147 17663 7166 17664 7164 17664 9586 17664 9586 17665 7164 17665 7162 17665 9586 17666 7162 17666 9592 17666 9592 17667 7162 17667 7161 17667 9592 17668 7161 17668 7168 17668 7537 17892 9748 17892 7538 17892 7538 17893 9748 17893 9749 17893 7537 17894 7535 17894 9748 17894 9748 17895 7535 17895 7534 17895 9748 17896 7534 17896 9750 17896 9751 17897 7526 17897 9752 17897 9752 17898 7526 17898 7530 17898 7530 17899 7529 17899 9752 17899 9752 17900 7529 17900 7533 17900 9752 17901 7533 17901 9749 17901 9749 17902 7533 17902 7532 17902 9749 17903 7532 17903 7538 17903 7544 17904 9753 17904 7541 17904 7541 17905 9753 17905 9750 17905 7541 17906 9750 17906 7539 17906 7539 17907 9750 17907 7534 17907 9754 17908 7523 17908 9751 17908 9751 17909 7523 17909 7527 17909 9751 17910 7527 17910 7526 17910 7387 17911 7386 17911 9755 17911 7432 17912 7440 17912 9756 17912 9756 17913 7440 17913 7438 17913 9756 17914 7438 17914 9757 17914 9757 17915 7438 17915 7436 17915 7470 17916 9758 17916 7467 17916 7467 17917 9758 17917 9759 17917 7544 17918 7543 17918 9753 17918 9753 17919 7543 17919 7547 17919 9753 17920 7547 17920 9760 17920 9760 17921 7547 17921 7546 17921 9760 17922 7546 17922 9755 17922 9755 17923 7546 17923 7545 17923 9755 17924 7545 17924 7387 17924 7549 17925 9761 17925 7551 17925 7551 17926 9761 17926 9755 17926 7551 17927 9755 17927 7553 17927 7553 17928 9755 17928 7386 17928 7549 17929 7548 17929 9761 17929 9761 17930 7548 17930 7555 17930 9761 17931 7555 17931 9762 17931 9762 17932 7555 17932 7556 17932 9762 17933 7556 17933 7384 17933 7384 17934 7383 17934 9762 17934 9762 17935 7383 17935 7558 17935 9762 17936 7558 17936 9763 17936 7558 17937 7562 17937 9763 17937 9763 17938 7562 17938 7560 17938 9763 17939 7560 17939 9764 17939 9764 17940 7560 17940 7568 17940 9764 17941 7568 17941 7567 17941 7450 17942 7449 17942 9765 17942 7463 17943 9766 17943 7464 17943 7464 17944 9766 17944 9767 17944 7470 17945 7469 17945 9758 17945 9758 17946 7469 17946 7475 17946 9758 17947 7475 17947 9768 17947 7429 17948 7431 17948 9769 17948 9769 17949 7431 17949 7435 17949 9769 17950 7435 17950 9756 17950 9756 17951 7435 17951 7433 17951 9756 17952 7433 17952 7432 17952 9765 17953 7449 17953 9770 17953 7463 17954 7461 17954 9766 17954 9766 17955 7461 17955 7460 17955 9766 17956 7460 17956 9759 17956 9759 17957 7460 17957 7465 17957 9759 17958 7465 17958 7467 17958 7475 17959 7474 17959 9768 17959 9768 17960 7474 17960 7472 17960 9768 17961 7472 17961 9771 17961 9771 17962 7472 17962 7471 17962 9771 17963 7471 17963 7478 17963 7392 17964 9772 17964 7393 17964 7393 17965 9772 17965 9771 17965 7393 17966 9771 17966 7477 17966 7477 17967 9771 17967 7478 17967 7508 17968 7506 17968 9773 17968 9773 17969 7506 17969 7505 17969 9773 17970 7505 17970 9774 17970 9774 17971 7505 17971 7515 17971 7518 17972 7521 17972 9775 17972 9775 17973 7521 17973 7520 17973 9775 17974 7520 17974 9776 17974 9776 17975 7520 17975 7519 17975 7519 17976 7390 17976 9776 17976 9776 17977 7390 17977 7389 17977 9776 17978 7389 17978 9754 17978 9754 17979 7389 17979 7524 17979 9754 17980 7524 17980 7523 17980 7567 17981 7565 17981 9764 17981 9764 17982 7565 17982 7564 17982 9764 17983 7564 17983 9769 17983 9769 17984 7564 17984 7427 17984 9769 17985 7427 17985 7429 17985 9777 17986 7452 17986 9778 17986 9778 17987 7452 17987 7456 17987 7456 17988 7455 17988 9778 17988 9778 17989 7455 17989 7459 17989 9778 17990 7459 17990 9767 17990 9767 17991 7459 17991 7458 17991 9767 17992 7458 17992 7464 17992 7392 17993 7479 17993 9772 17993 9772 17994 7479 17994 7481 17994 9772 17995 7481 17995 9779 17995 9779 17996 7481 17996 7483 17996 9779 17997 7483 17997 7484 17997 7488 17998 9780 17998 7490 17998 7490 17999 9780 17999 9779 17999 7490 18000 9779 18000 7492 18000 7492 18001 9779 18001 7484 18001 7498 18002 9781 18002 7499 18002 7499 18003 9781 18003 9780 18003 7499 18004 9780 18004 7486 18004 7486 18005 9780 18005 7488 18005 7436 18006 7398 18006 9757 18006 9757 18007 7398 18007 7400 18007 9757 18008 7400 18008 9782 18008 9782 18009 7400 18009 7441 18009 9782 18010 7441 18010 7395 18010 7395 18011 7397 18011 9782 18011 9782 18012 7397 18012 7445 18012 9782 18013 7445 18013 9765 18013 9765 18014 7445 18014 7444 18014 9765 18015 7444 18015 7450 18015 7500 18016 7502 18016 9783 18016 9783 18017 7502 18017 7504 18017 9783 18018 7504 18018 9773 18018 9773 18019 7504 18019 7509 18019 9773 18020 7509 18020 7508 18020 7515 18021 7513 18021 9774 18021 9774 18022 7513 18022 7511 18022 9774 18023 7511 18023 9775 18023 9775 18024 7511 18024 7510 18024 9775 18025 7510 18025 7518 18025 7449 18026 7447 18026 9770 18026 9770 18027 7447 18027 7446 18027 9770 18028 7446 18028 9777 18028 9777 18029 7446 18029 7453 18029 9777 18030 7453 18030 7452 18030 7498 18031 7496 18031 9781 18031 9781 18032 7496 18032 7494 18032 9781 18033 7494 18033 9783 18033 9783 18034 7494 18034 7493 18034 9783 18035 7493 18035 7500 18035 11698 23390 11699 23390 11700 23390 11701 23391 11699 23391 11698 23391 11698 23392 11702 23392 11703 23392 11704 23393 11702 23393 11698 23393 11700 23394 11704 23394 11698 23394 11698 23395 11705 23395 11706 23395 11707 23396 11705 23396 11698 23396 11703 23397 11707 23397 11698 23397 11698 23398 11708 23398 11709 23398 11710 23399 11708 23399 11698 23399 11706 23400 11710 23400 11698 23400 11698 23401 11711 23401 11712 23401 11713 23402 11711 23402 11698 23402 11709 23403 11713 23403 11698 23403 11698 23404 11714 23404 11715 23404 11716 23405 11714 23405 11698 23405 11712 23406 11716 23406 11698 23406 11698 23407 11717 23407 11718 23407 11719 23408 11717 23408 11698 23408 11715 23409 11719 23409 11698 23409 11698 23410 11720 23410 11721 23410 11722 23411 11720 23411 11698 23411 11718 23412 11722 23412 11698 23412 11698 23413 11723 23413 11724 23413 11725 23414 11723 23414 11698 23414 11721 23415 11725 23415 11698 23415 11698 23416 11726 23416 11727 23416 11728 23417 11726 23417 11698 23417 11724 23418 11728 23418 11698 23418 11698 23419 11729 23419 11730 23419 11731 23420 11729 23420 11698 23420 11727 23421 11731 23421 11698 23421 11698 23422 11732 23422 11733 23422 11734 23423 11732 23423 11698 23423 11730 23424 11734 23424 11698 23424 11733 23425 11701 23425 11698 23425 11716 23426 11712 23426 11735 23426 11735 23427 11712 23427 11711 23427 11735 23428 11711 23428 11713 23428 11713 23429 11709 23429 11735 23429 11735 23430 11709 23430 11708 23430 11735 23431 11708 23431 11710 23431 11702 23432 11704 23432 11736 23432 11702 23433 11736 23433 11703 23433 11736 23434 11710 23434 11706 23434 11706 23435 11705 23435 11736 23435 11736 23436 11705 23436 11707 23436 11736 23437 11707 23437 11703 23437 11704 23438 11700 23438 11737 23438 11737 23439 11700 23439 11699 23439 11737 23440 11699 23440 11701 23440 11701 23441 11733 23441 11737 23441 11737 23442 11733 23442 11732 23442 11737 23443 11732 23443 11734 23443 11734 23444 11730 23444 11738 23444 11738 23445 11730 23445 11729 23445 11738 23446 11729 23446 11731 23446 11731 23447 11727 23447 11738 23447 11738 23448 11727 23448 11726 23448 11738 23449 11726 23449 11728 23449 11722 23450 11718 23450 11739 23450 11739 23451 11718 23451 11717 23451 11739 23452 11717 23452 11719 23452 11719 23453 11715 23453 11739 23453 11739 23454 11715 23454 11714 23454 11739 23455 11714 23455 11716 23455 11725 23456 11721 23456 11740 23456 11740 23457 11721 23457 11720 23457 11740 23458 11720 23458 11722 23458 11728 23459 11724 23459 11740 23459 11740 23460 11724 23460 11723 23460 11740 23461 11723 23461 11725 23461 11735 23462 11741 23462 11716 23462 11716 23463 11741 23463 11742 23463 11716 23464 11742 23464 11739 23464 11736 23465 11743 23465 11710 23465 11710 23466 11743 23466 11741 23466 11710 23467 11741 23467 11735 23467 11737 23468 11744 23468 11704 23468 11704 23469 11744 23469 11743 23469 11704 23470 11743 23470 11736 23470 11738 23471 11745 23471 11734 23471 11734 23472 11745 23472 11744 23472 11734 23473 11744 23473 11737 23473 11740 23474 11746 23474 11728 23474 11728 23475 11746 23475 11745 23475 11728 23476 11745 23476 11738 23476 11746 23477 11740 23477 11742 23477 11742 23478 11740 23478 11722 23478 11742 23479 11722 23479 11739 23479 11743 23480 11747 23480 11748 23480 11749 23481 11750 23481 11743 23481 11748 23482 11751 23482 11743 23482 11743 23483 11751 23483 11752 23483 11743 23484 11752 23484 11753 23484 11753 23485 11754 23485 11743 23485 11743 23486 11754 23486 11755 23486 11743 23487 11755 23487 11741 23487 11741 23488 11755 23488 11756 23488 11741 23489 11756 23489 11757 23489 11758 23490 11759 23490 11744 23490 11744 23491 11759 23491 11760 23491 11761 23492 11745 23492 11762 23492 11762 23493 11745 23493 11763 23493 11750 23494 11764 23494 11743 23494 11743 23495 11764 23495 11765 23495 11743 23496 11765 23496 11747 23496 11766 23497 11767 23497 11744 23497 11768 23498 11769 23498 11746 23498 11746 23499 11769 23499 11770 23499 11746 23500 11770 23500 11771 23500 11772 23501 11773 23501 11746 23501 11746 23502 11773 23502 11774 23502 11746 23503 11774 23503 11768 23503 11775 23504 11742 23504 11776 23504 11776 23505 11742 23505 11777 23505 11760 23506 11778 23506 11744 23506 11744 23507 11778 23507 11779 23507 11744 23508 11779 23508 11743 23508 11743 23509 11779 23509 11780 23509 11743 23510 11780 23510 11749 23510 11766 23511 11744 23511 11781 23511 11767 23512 11782 23512 11744 23512 11744 23513 11782 23513 11783 23513 11744 23514 11783 23514 11758 23514 11771 23515 11784 23515 11746 23515 11746 23516 11784 23516 11785 23516 11746 23517 11785 23517 11745 23517 11745 23518 11785 23518 11786 23518 11745 23519 11786 23519 11787 23519 11787 23520 11788 23520 11745 23520 11745 23521 11788 23521 11789 23521 11745 23522 11789 23522 11790 23522 11790 23523 11791 23523 11745 23523 11745 23524 11791 23524 11792 23524 11745 23525 11792 23525 11763 23525 11742 23526 11793 23526 11794 23526 11757 23527 11795 23527 11741 23527 11741 23528 11795 23528 11796 23528 11741 23529 11796 23529 11797 23529 11777 23530 11742 23530 11798 23530 11798 23531 11742 23531 11741 23531 11798 23532 11741 23532 11799 23532 11775 23533 11800 23533 11742 23533 11742 23534 11800 23534 11801 23534 11742 23535 11801 23535 11802 23535 11802 23536 11803 23536 11742 23536 11742 23537 11803 23537 11804 23537 11742 23538 11804 23538 11793 23538 11797 23539 11805 23539 11741 23539 11741 23540 11805 23540 11806 23540 11741 23541 11806 23541 11799 23541 11794 23542 11807 23542 11742 23542 11742 23543 11807 23543 11808 23543 11742 23544 11808 23544 11746 23544 11746 23545 11808 23545 11809 23545 11746 23546 11809 23546 11772 23546 11761 23547 11810 23547 11745 23547 11745 23548 11810 23548 11811 23548 11745 23549 11811 23549 11744 23549 11744 23550 11811 23550 11812 23550 11744 23551 11812 23551 11781 23551 11786 23552 11785 23552 11813 23552 11813 23553 11785 23553 11784 23553 11813 23554 11784 23554 11814 23554 11814 23555 11784 23555 11771 23555 11814 23556 11771 23556 11815 23556 11815 23557 11771 23557 11770 23557 11815 23558 11770 23558 11816 23558 11816 23559 11770 23559 11769 23559 11816 23560 11769 23560 11817 23560 11817 23561 11769 23561 11768 23561 11817 23562 11768 23562 11818 23562 11818 23563 11768 23563 11774 23563 11818 23564 11774 23564 11819 23564 11819 23565 11774 23565 11773 23565 11819 23566 11773 23566 11820 23566 11820 23567 11773 23567 11772 23567 11820 23568 11772 23568 11821 23568 11821 23569 11772 23569 11809 23569 11821 23570 11809 23570 11822 23570 11822 23571 11809 23571 11808 23571 11822 23572 11808 23572 11823 23572 11823 23573 11808 23573 11807 23573 11823 23574 11807 23574 11824 23574 11824 23575 11807 23575 11794 23575 11824 23576 11794 23576 11825 23576 11825 23577 11794 23577 11793 23577 11825 23578 11793 23578 11826 23578 11826 23579 11793 23579 11804 23579 11826 23580 11804 23580 11827 23580 11827 23581 11804 23581 11803 23581 11827 23582 11803 23582 11828 23582 11828 23583 11803 23583 11802 23583 11828 23584 11802 23584 11829 23584 11829 23585 11802 23585 11801 23585 11829 23586 11801 23586 11830 23586 11830 23587 11801 23587 11800 23587 11830 23588 11800 23588 11831 23588 11831 23589 11800 23589 11775 23589 11831 23590 11775 23590 11832 23590 11832 23591 11775 23591 11776 23591 11832 23592 11776 23592 11833 23592 11833 23593 11776 23593 11777 23593 11833 23594 11777 23594 11834 23594 11834 23595 11777 23595 11798 23595 11834 23596 11798 23596 11835 23596 11835 23597 11798 23597 11799 23597 11835 23598 11799 23598 11836 23598 11836 23599 11799 23599 11806 23599 11836 23600 11806 23600 11837 23600 11837 23601 11806 23601 11805 23601 11837 23602 11805 23602 11838 23602 11838 23603 11805 23603 11797 23603 11838 23604 11797 23604 11839 23604 11839 23605 11797 23605 11796 23605 11839 23606 11796 23606 11840 23606 11840 23607 11796 23607 11795 23607 11840 23608 11795 23608 11841 23608 11841 23609 11795 23609 11757 23609 11841 23610 11757 23610 11842 23610 11842 23611 11757 23611 11756 23611 11842 23612 11756 23612 11843 23612 11843 23613 11756 23613 11755 23613 11843 23614 11755 23614 11844 23614 11844 23615 11755 23615 11754 23615 11844 23616 11754 23616 11845 23616 11845 23617 11754 23617 11753 23617 11845 23618 11753 23618 11846 23618 11846 23619 11753 23619 11752 23619 11846 23620 11752 23620 11847 23620 11847 23621 11752 23621 11751 23621 11847 23622 11751 23622 11848 23622 11848 23623 11751 23623 11748 23623 11848 23624 11748 23624 11849 23624 11849 23625 11748 23625 11747 23625 11849 23626 11747 23626 11850 23626 11850 23627 11747 23627 11765 23627 11850 23628 11765 23628 11851 23628 11851 23629 11765 23629 11764 23629 11851 23630 11764 23630 11852 23630 11852 23631 11764 23631 11750 23631 11852 23632 11750 23632 11853 23632 11853 23633 11750 23633 11749 23633 11853 23634 11749 23634 11854 23634 11854 23635 11749 23635 11780 23635 11854 23636 11780 23636 11855 23636 11855 23637 11780 23637 11779 23637 11855 23638 11779 23638 11856 23638 11856 23639 11779 23639 11778 23639 11856 23640 11778 23640 11857 23640 11857 23641 11778 23641 11760 23641 11857 23642 11760 23642 11858 23642 11858 23643 11760 23643 11759 23643 11858 23644 11759 23644 11859 23644 11859 23645 11759 23645 11758 23645 11859 23646 11758 23646 11860 23646 11860 23647 11758 23647 11783 23647 11860 23648 11783 23648 11861 23648 11861 23649 11783 23649 11782 23649 11861 23650 11782 23650 11862 23650 11862 23651 11782 23651 11767 23651 11862 23652 11767 23652 11863 23652 11863 23653 11767 23653 11766 23653 11863 23654 11766 23654 11864 23654 11864 23655 11766 23655 11781 23655 11864 23656 11781 23656 11865 23656 11865 23657 11781 23657 11812 23657 11865 23658 11812 23658 11866 23658 11866 23659 11812 23659 11811 23659 11866 23660 11811 23660 11867 23660 11867 23661 11811 23661 11810 23661 11867 23662 11810 23662 11868 23662 11868 23663 11810 23663 11761 23663 11868 23664 11761 23664 11869 23664 11869 23665 11761 23665 11762 23665 11869 23666 11762 23666 11870 23666 11870 23667 11762 23667 11763 23667 11870 23668 11763 23668 11871 23668 11871 23669 11763 23669 11792 23669 11871 23670 11792 23670 11872 23670 11872 23671 11792 23671 11791 23671 11872 23672 11791 23672 11873 23672 11873 23673 11791 23673 11790 23673 11873 23674 11790 23674 11874 23674 11874 23675 11790 23675 11789 23675 11874 23676 11789 23676 11875 23676 11875 23677 11789 23677 11788 23677 11875 23678 11788 23678 11876 23678 11876 23679 11788 23679 11787 23679 11876 23680 11787 23680 11877 23680 11877 23681 11787 23681 11786 23681 11877 23682 11786 23682 11813 23682 11878 23683 11879 23683 11880 23683 11880 23684 11879 23684 11881 23684 11881 23685 11879 23685 11882 23685 11882 23686 11879 23686 11883 23686 11882 23687 11883 23687 11884 23687 11884 23688 11883 23688 11885 23688 11884 23689 11885 23689 11886 23689 11887 23690 11888 23690 11889 23690 11889 23691 11888 23691 11890 23691 11889 23692 11890 23692 11891 23692 11891 23693 11890 23693 11892 23693 11891 23694 11892 23694 11893 23694 11893 23695 11892 23695 11894 23695 11893 23696 11894 23696 11885 23696 11885 23697 11894 23697 11895 23697 11885 23698 11895 23698 11886 23698 11887 23699 11889 23699 11896 23699 11896 23700 11889 23700 11897 23700 11896 23701 11897 23701 11898 23701 11898 23702 11897 23702 11899 23702 11898 23703 11899 23703 11900 23703 11900 23704 11899 23704 11901 23704 11901 23705 11899 23705 11902 23705 11901 23706 11902 23706 11903 23706 11903 23707 11902 23707 11904 23707 11903 23708 11904 23708 11905 23708 11906 23709 11907 23709 11908 23709 11908 23710 11907 23710 11909 23710 11908 23711 11909 23711 11910 23711 11910 23712 11909 23712 11911 23712 11910 23713 11911 23713 11912 23713 11912 23714 11911 23714 11913 23714 11912 23715 11913 23715 11904 23715 11904 23716 11913 23716 11914 23716 11904 23717 11914 23717 11905 23717 11906 23718 11908 23718 11915 23718 11915 23719 11908 23719 11916 23719 11915 23720 11916 23720 11917 23720 11917 23721 11916 23721 11918 23721 11917 23722 11918 23722 11919 23722 11919 23723 11918 23723 11920 23723 11920 23724 11918 23724 11921 23724 11920 23725 11921 23725 11922 23725 11922 23726 11921 23726 11923 23726 11922 23727 11923 23727 11924 23727 11924 23728 11923 23728 11925 23728 11925 23729 11923 23729 11926 23729 11925 23730 11926 23730 11927 23730 11927 23731 11926 23731 11928 23731 11928 23732 11926 23732 11929 23732 11928 23733 11929 23733 11930 23733 11930 23734 11929 23734 11931 23734 11930 23735 11931 23735 11932 23735 11933 23736 11934 23736 11935 23736 11935 23737 11934 23737 11936 23737 11935 23738 11936 23738 11937 23738 11937 23739 11936 23739 11938 23739 11937 23740 11938 23740 11931 23740 11931 23741 11938 23741 11939 23741 11931 23742 11939 23742 11932 23742 11940 23743 11941 23743 11933 23743 11933 23744 11941 23744 11942 23744 11933 23745 11942 23745 11934 23745 11943 23746 11944 23746 11940 23746 11940 23747 11944 23747 11945 23747 11940 23748 11945 23748 11941 23748 11946 23749 11947 23749 11948 23749 11948 23750 11947 23750 11949 23750 11948 23751 11949 23751 11950 23751 11950 23752 11949 23752 11951 23752 11950 23753 11951 23753 11943 23753 11943 23754 11951 23754 11952 23754 11943 23755 11952 23755 11944 23755 11946 23756 11948 23756 11953 23756 11953 23757 11948 23757 11954 23757 11953 23758 11954 23758 11955 23758 11955 23759 11954 23759 11956 23759 11955 23760 11956 23760 11957 23760 11957 23761 11956 23761 11958 23761 11957 23762 11958 23762 11959 23762 11960 23763 11961 23763 11962 23763 11962 23764 11961 23764 11963 23764 11962 23765 11963 23765 11958 23765 11958 23766 11963 23766 11964 23766 11958 23767 11964 23767 11959 23767 11965 23768 11966 23768 11967 23768 11967 23769 11966 23769 11968 23769 11967 23770 11968 23770 11969 23770 11969 23771 11968 23771 11970 23771 11969 23772 11970 23772 11960 23772 11960 23773 11970 23773 11971 23773 11960 23774 11971 23774 11961 23774 11965 23775 11967 23775 11972 23775 11972 23776 11967 23776 11973 23776 11972 23777 11973 23777 11974 23777 11974 23778 11973 23778 11975 23778 11974 23779 11975 23779 11976 23779 11976 23780 11975 23780 11977 23780 11976 23781 11977 23781 11978 23781 11979 23782 11980 23782 11981 23782 11981 23783 11980 23783 11982 23783 11981 23784 11982 23784 11977 23784 11977 23785 11982 23785 11983 23785 11977 23786 11983 23786 11978 23786 11984 23787 11985 23787 11986 23787 11986 23788 11985 23788 11987 23788 11986 23789 11987 23789 11979 23789 11979 23790 11987 23790 11988 23790 11979 23791 11988 23791 11980 23791 11989 23792 11990 23792 11984 23792 11984 23793 11990 23793 11991 23793 11984 23794 11991 23794 11985 23794 11992 23795 11993 23795 11994 23795 11994 23796 11993 23796 11995 23796 11994 23797 11995 23797 11996 23797 11996 23798 11995 23798 11997 23798 11996 23799 11997 23799 11989 23799 11989 23800 11997 23800 11998 23800 11989 23801 11998 23801 11990 23801 11992 23802 11994 23802 11999 23802 11999 23803 11994 23803 12000 23803 11999 23804 12000 23804 12001 23804 12001 23805 12000 23805 12002 23805 12001 23806 12002 23806 12003 23806 12003 23807 12002 23807 12004 23807 12003 23808 12004 23808 12005 23808 12005 23809 12004 23809 12006 23809 12006 23810 12004 23810 12007 23810 12006 23811 12007 23811 12008 23811 12008 23812 12007 23812 12009 23812 12009 23813 12007 23813 12010 23813 12009 23814 12010 23814 12011 23814 12011 23815 12010 23815 12012 23815 12012 23816 12010 23816 12013 23816 12012 23817 12013 23817 12014 23817 12014 23818 12013 23818 12015 23818 12014 23819 12015 23819 12016 23819 12017 23820 12018 23820 12019 23820 12019 23821 12018 23821 12020 23821 12019 23822 12020 23822 12021 23822 12021 23823 12020 23823 12022 23823 12021 23824 12022 23824 12023 23824 12023 23825 12022 23825 12024 23825 12023 23826 12024 23826 12015 23826 12015 23827 12024 23827 12025 23827 12015 23828 12025 23828 12016 23828 12017 23829 12019 23829 12026 23829 12026 23830 12019 23830 12027 23830 12026 23831 12027 23831 12028 23831 12028 23832 12027 23832 12029 23832 12028 23833 12029 23833 12030 23833 12030 23834 12029 23834 12031 23834 12031 23835 12029 23835 12032 23835 12031 23836 12032 23836 12033 23836 12033 23837 12032 23837 12034 23837 12033 23838 12034 23838 12035 23838 12035 23839 12034 23839 12036 23839 12036 23840 12034 23840 12037 23840 12036 23841 12037 23841 12038 23841 12038 23842 12037 23842 12039 23842 12039 23843 12037 23843 12040 23843 12039 23844 12040 23844 12041 23844 12041 23845 12040 23845 12042 23845 12041 23846 12042 23846 12043 23846 11880 23847 12044 23847 11878 23847 11878 23848 12044 23848 12045 23848 11878 23849 12045 23849 12046 23849 12046 23850 12045 23850 12047 23850 12046 23851 12047 23851 12048 23851 12048 23852 12047 23852 12049 23852 12048 23853 12049 23853 12050 23853 12050 23854 12049 23854 12051 23854 12050 23855 12051 23855 12042 23855 12042 23856 12051 23856 12052 23856 12042 23857 12052 23857 12043 23857 12053 23858 12048 23858 12054 23858 12054 23859 12048 23859 12050 23859 12054 23860 12050 23860 12055 23860 12055 23861 12050 23861 12042 23861 12055 23862 12042 23862 12056 23862 12056 23863 12042 23863 12040 23863 12056 23864 12040 23864 12057 23864 12057 23865 12040 23865 12037 23865 12057 23866 12037 23866 12058 23866 12058 23867 12037 23867 12034 23867 12058 23868 12034 23868 12059 23868 12059 23869 12034 23869 12032 23869 12059 23870 12032 23870 12060 23870 12060 23871 12032 23871 12029 23871 12060 23872 12029 23872 12061 23872 12061 23873 12029 23873 12027 23873 12061 23874 12027 23874 12062 23874 12062 23875 12027 23875 12019 23875 12062 23876 12019 23876 12063 23876 12063 23877 12019 23877 12021 23877 12063 23878 12021 23878 12064 23878 12064 23879 12021 23879 12023 23879 12064 23880 12023 23880 12065 23880 12065 23881 12023 23881 12015 23881 12065 23882 12015 23882 12066 23882 12066 23883 12015 23883 12013 23883 12066 23884 12013 23884 12067 23884 12067 23885 12013 23885 12010 23885 12067 23886 12010 23886 12068 23886 12068 23887 12010 23887 12007 23887 12068 23888 12007 23888 12069 23888 12069 23889 12007 23889 12004 23889 12069 23890 12004 23890 12070 23890 12070 23891 12004 23891 12002 23891 12070 23892 12002 23892 12071 23892 12071 23893 12002 23893 12000 23893 12071 23894 12000 23894 12072 23894 12072 23895 12000 23895 11994 23895 12072 23896 11994 23896 12073 23896 12073 23897 11994 23897 11996 23897 12073 23898 11996 23898 12074 23898 12074 23899 11996 23899 11989 23899 12074 23900 11989 23900 12075 23900 12075 23901 11989 23901 11984 23901 12075 23902 11984 23902 12076 23902 12076 23903 11984 23903 11986 23903 12076 23904 11986 23904 12077 23904 12077 23905 11986 23905 11979 23905 12077 23906 11979 23906 12078 23906 12078 23907 11979 23907 11981 23907 12078 23908 11981 23908 12079 23908 12079 23909 11981 23909 11977 23909 12079 23910 11977 23910 12080 23910 12080 23911 11977 23911 11975 23911 12080 23912 11975 23912 12081 23912 12081 23913 11975 23913 11973 23913 12081 23914 11973 23914 12082 23914 12082 23915 11973 23915 11967 23915 12082 23916 11967 23916 12083 23916 12083 23917 11967 23917 11969 23917 12083 23918 11969 23918 12084 23918 12084 23919 11969 23919 11960 23919 12084 23920 11960 23920 12085 23920 12085 23921 11960 23921 11962 23921 12085 23922 11962 23922 12086 23922 12086 23923 11962 23923 11958 23923 12086 23924 11958 23924 12087 23924 12087 23925 11958 23925 11956 23925 12087 23926 11956 23926 12088 23926 12088 23927 11956 23927 11954 23927 12088 23928 11954 23928 12089 23928 12089 23929 11954 23929 11948 23929 12089 23930 11948 23930 12090 23930 12090 23931 11948 23931 11950 23931 12090 23932 11950 23932 12091 23932 12091 23933 11950 23933 11943 23933 12091 23934 11943 23934 12092 23934 12092 23935 11943 23935 11940 23935 12092 23936 11940 23936 12093 23936 12093 23937 11940 23937 11933 23937 12093 23938 11933 23938 12094 23938 12094 23939 11933 23939 11935 23939 12094 23940 11935 23940 12095 23940 12095 23941 11935 23941 11937 23941 12095 23942 11937 23942 12096 23942 12096 23943 11937 23943 11931 23943 12096 23944 11931 23944 12097 23944 12097 23945 11931 23945 11929 23945 12097 23946 11929 23946 12098 23946 12098 23947 11929 23947 11926 23947 12098 23948 11926 23948 12099 23948 12099 23949 11926 23949 11923 23949 12099 23950 11923 23950 12100 23950 12100 23951 11923 23951 11921 23951 12100 23952 11921 23952 12101 23952 12101 23953 11921 23953 11918 23953 12101 23954 11918 23954 12102 23954 12102 23955 11918 23955 11916 23955 12102 23956 11916 23956 12103 23956 12103 23957 11916 23957 11908 23957 12103 23958 11908 23958 12104 23958 12104 23959 11908 23959 11910 23959 12104 23960 11910 23960 12105 23960 12105 23961 11910 23961 11912 23961 12105 23962 11912 23962 12106 23962 12106 23963 11912 23963 11904 23963 12106 23964 11904 23964 12107 23964 12107 23965 11904 23965 11902 23965 12107 23966 11902 23966 12108 23966 12108 23967 11902 23967 11899 23967 12108 23968 11899 23968 12109 23968 12109 23969 11899 23969 11897 23969 12109 23970 11897 23970 12110 23970 12110 23971 11897 23971 11889 23971 12110 23972 11889 23972 12111 23972 12111 23973 11889 23973 11891 23973 12111 23974 11891 23974 12112 23974 12112 23975 11891 23975 11893 23975 12112 23976 11893 23976 12113 23976 12113 23977 11893 23977 11885 23977 12113 23978 11885 23978 12114 23978 12114 23979 11885 23979 11883 23979 12114 23980 11883 23980 12115 23980 12115 23981 11883 23981 11879 23981 12115 23982 11879 23982 12116 23982 12116 23983 11879 23983 11878 23983 12116 23984 11878 23984 12117 23984 12117 23985 11878 23985 12046 23985 12117 23986 12046 23986 12053 23986 12053 23987 12046 23987 12048 23987 12118 23988 12053 23988 12119 23988 12119 23989 12053 23989 12054 23989 12119 23990 12054 23990 12120 23990 12120 23991 12054 23991 12055 23991 12120 23992 12055 23992 12121 23992 12121 23993 12055 23993 12056 23993 12121 23994 12056 23994 12122 23994 12122 23995 12056 23995 12057 23995 12122 23996 12057 23996 12123 23996 12123 23997 12057 23997 12058 23997 12123 23998 12058 23998 12124 23998 12124 23999 12058 23999 12059 23999 12124 24000 12059 24000 12125 24000 12125 24001 12059 24001 12060 24001 12125 24002 12060 24002 12126 24002 12126 24003 12060 24003 12061 24003 12126 24004 12061 24004 12127 24004 12127 24005 12061 24005 12062 24005 12127 24006 12062 24006 12128 24006 12128 24007 12062 24007 12063 24007 12128 24008 12063 24008 12129 24008 12129 24009 12063 24009 12064 24009 12129 24010 12064 24010 12130 24010 12130 24011 12064 24011 12065 24011 12130 24012 12065 24012 12131 24012 12131 24013 12065 24013 12066 24013 12131 24014 12066 24014 12132 24014 12132 24015 12066 24015 12067 24015 12132 24016 12067 24016 12133 24016 12133 24017 12067 24017 12068 24017 12133 24018 12068 24018 12134 24018 12134 24019 12068 24019 12069 24019 12134 24020 12069 24020 12135 24020 12135 24021 12069 24021 12070 24021 12135 24022 12070 24022 12136 24022 12136 24023 12070 24023 12071 24023 12136 24024 12071 24024 12137 24024 12137 24025 12071 24025 12072 24025 12137 24026 12072 24026 12138 24026 12138 24027 12072 24027 12073 24027 12138 24028 12073 24028 12139 24028 12139 24029 12073 24029 12074 24029 12139 24030 12074 24030 12140 24030 12140 24031 12074 24031 12075 24031 12140 24032 12075 24032 12141 24032 12141 24033 12075 24033 12076 24033 12141 24034 12076 24034 12142 24034 12142 24035 12076 24035 12077 24035 12142 24036 12077 24036 12143 24036 12143 24037 12077 24037 12078 24037 12143 24038 12078 24038 12144 24038 12144 24039 12078 24039 12079 24039 12144 24040 12079 24040 12145 24040 12145 24041 12079 24041 12080 24041 12145 24042 12080 24042 12146 24042 12146 24043 12080 24043 12081 24043 12146 24044 12081 24044 12147 24044 12147 24045 12081 24045 12082 24045 12147 24046 12082 24046 12148 24046 12148 24047 12082 24047 12083 24047 12148 24048 12083 24048 12149 24048 12149 24049 12083 24049 12084 24049 12149 24050 12084 24050 12150 24050 12150 24051 12084 24051 12085 24051 12150 24052 12085 24052 12151 24052 12151 24053 12085 24053 12086 24053 12151 24054 12086 24054 12152 24054 12152 24055 12086 24055 12087 24055 12152 24056 12087 24056 12153 24056 12153 24057 12087 24057 12088 24057 12153 24058 12088 24058 12154 24058 12154 24059 12088 24059 12089 24059 12154 24060 12089 24060 12155 24060 12155 24061 12089 24061 12090 24061 12155 24062 12090 24062 12156 24062 12156 24063 12090 24063 12091 24063 12156 24064 12091 24064 12157 24064 12157 24065 12091 24065 12092 24065 12157 24066 12092 24066 12158 24066 12158 24067 12092 24067 12093 24067 12158 24068 12093 24068 12159 24068 12159 24069 12093 24069 12094 24069 12159 24070 12094 24070 12160 24070 12160 24071 12094 24071 12095 24071 12160 24072 12095 24072 12161 24072 12161 24073 12095 24073 12096 24073 12161 24074 12096 24074 12162 24074 12162 24075 12096 24075 12097 24075 12162 24076 12097 24076 12163 24076 12163 24077 12097 24077 12098 24077 12163 24078 12098 24078 12164 24078 12164 24079 12098 24079 12099 24079 12164 24080 12099 24080 12165 24080 12165 24081 12099 24081 12100 24081 12165 24082 12100 24082 12166 24082 12166 24083 12100 24083 12101 24083 12166 24084 12101 24084 12167 24084 12167 24085 12101 24085 12102 24085 12167 24086 12102 24086 12168 24086 12168 24087 12102 24087 12103 24087 12168 24088 12103 24088 12169 24088 12169 24089 12103 24089 12104 24089 12169 24090 12104 24090 12170 24090 12170 24091 12104 24091 12105 24091 12170 24092 12105 24092 12171 24092 12171 24093 12105 24093 12106 24093 12171 24094 12106 24094 12172 24094 12172 24095 12106 24095 12107 24095 12172 24096 12107 24096 12173 24096 12173 24097 12107 24097 12108 24097 12173 24098 12108 24098 12174 24098 12174 24099 12108 24099 12109 24099 12174 24100 12109 24100 12175 24100 12175 24101 12109 24101 12110 24101 12175 24102 12110 24102 12176 24102 12176 24103 12110 24103 12111 24103 12176 24104 12111 24104 12177 24104 12177 24105 12111 24105 12112 24105 12177 24106 12112 24106 12178 24106 12178 24107 12112 24107 12113 24107 12178 24108 12113 24108 12179 24108 12179 24109 12113 24109 12114 24109 12179 24110 12114 24110 12180 24110 12180 24111 12114 24111 12115 24111 12180 24112 12115 24112 12181 24112 12181 24113 12115 24113 12116 24113 12181 24114 12116 24114 12182 24114 12182 24115 12116 24115 12117 24115 12182 24116 12117 24116 12118 24116 12118 24117 12117 24117 12053 24117 12183 24118 12118 24118 12184 24118 12184 24119 12118 24119 12119 24119 12184 24120 12119 24120 12185 24120 12185 24121 12119 24121 12120 24121 12185 24122 12120 24122 12186 24122 12186 24123 12120 24123 12121 24123 12186 24124 12121 24124 12187 24124 12187 24125 12121 24125 12122 24125 12187 24126 12122 24126 12188 24126 12188 24127 12122 24127 12123 24127 12188 24128 12123 24128 12189 24128 12189 24129 12123 24129 12124 24129 12189 24130 12124 24130 12190 24130 12190 24131 12124 24131 12125 24131 12190 24132 12125 24132 12191 24132 12191 24133 12125 24133 12126 24133 12191 24134 12126 24134 12192 24134 12192 24135 12126 24135 12127 24135 12192 24136 12127 24136 12193 24136 12193 24137 12127 24137 12128 24137 12193 24138 12128 24138 12194 24138 12194 24139 12128 24139 12129 24139 12194 24140 12129 24140 12195 24140 12195 24141 12129 24141 12130 24141 12195 24142 12130 24142 12196 24142 12196 24143 12130 24143 12131 24143 12196 24144 12131 24144 12197 24144 12197 24145 12131 24145 12132 24145 12197 24146 12132 24146 12198 24146 12198 24147 12132 24147 12133 24147 12198 24148 12133 24148 12199 24148 12199 24149 12133 24149 12134 24149 12199 24150 12134 24150 12200 24150 12200 24151 12134 24151 12135 24151 12200 24152 12135 24152 12201 24152 12201 24153 12135 24153 12136 24153 12201 24154 12136 24154 12202 24154 12202 24155 12136 24155 12137 24155 12202 24156 12137 24156 12203 24156 12203 24157 12137 24157 12138 24157 12203 24158 12138 24158 12204 24158 12204 24159 12138 24159 12139 24159 12204 24160 12139 24160 12205 24160 12205 24161 12139 24161 12140 24161 12205 24162 12140 24162 12206 24162 12206 24163 12140 24163 12141 24163 12206 24164 12141 24164 12207 24164 12207 24165 12141 24165 12142 24165 12207 24166 12142 24166 12208 24166 12208 24167 12142 24167 12143 24167 12208 24168 12143 24168 12209 24168 12209 24169 12143 24169 12144 24169 12209 24170 12144 24170 12210 24170 12210 24171 12144 24171 12145 24171 12210 24172 12145 24172 12211 24172 12211 24173 12145 24173 12146 24173 12211 24174 12146 24174 12212 24174 12212 24175 12146 24175 12147 24175 12212 24176 12147 24176 12213 24176 12213 24177 12147 24177 12148 24177 12213 24178 12148 24178 12214 24178 12214 24179 12148 24179 12149 24179 12214 24180 12149 24180 12215 24180 12215 24181 12149 24181 12150 24181 12215 24182 12150 24182 12216 24182 12216 24183 12150 24183 12151 24183 12216 24184 12151 24184 12217 24184 12217 24185 12151 24185 12152 24185 12217 24186 12152 24186 12218 24186 12218 24187 12152 24187 12153 24187 12218 24188 12153 24188 12219 24188 12219 24189 12153 24189 12154 24189 12219 24190 12154 24190 12220 24190 12220 24191 12154 24191 12155 24191 12220 24192 12155 24192 12221 24192 12221 24193 12155 24193 12156 24193 12221 24194 12156 24194 12222 24194 12222 24195 12156 24195 12157 24195 12222 24196 12157 24196 12223 24196 12223 24197 12157 24197 12158 24197 12223 24198 12158 24198 12224 24198 12224 24199 12158 24199 12159 24199 12224 24200 12159 24200 12225 24200 12225 24201 12159 24201 12160 24201 12225 24202 12160 24202 12226 24202 12226 24203 12160 24203 12161 24203 12226 24204 12161 24204 12227 24204 12227 24205 12161 24205 12162 24205 12227 24206 12162 24206 12228 24206 12228 24207 12162 24207 12163 24207 12228 24208 12163 24208 12229 24208 12229 24209 12163 24209 12164 24209 12229 24210 12164 24210 12230 24210 12230 24211 12164 24211 12165 24211 12230 24212 12165 24212 12231 24212 12231 24213 12165 24213 12166 24213 12231 24214 12166 24214 12232 24214 12232 24215 12166 24215 12167 24215 12232 24216 12167 24216 12233 24216 12233 24217 12167 24217 12168 24217 12233 24218 12168 24218 12234 24218 12234 24219 12168 24219 12169 24219 12234 24220 12169 24220 12235 24220 12235 24221 12169 24221 12170 24221 12235 24222 12170 24222 12236 24222 12236 24223 12170 24223 12171 24223 12236 24224 12171 24224 12237 24224 12237 24225 12171 24225 12172 24225 12237 24226 12172 24226 12238 24226 12238 24227 12172 24227 12173 24227 12238 24228 12173 24228 12239 24228 12239 24229 12173 24229 12174 24229 12239 24230 12174 24230 12240 24230 12240 24231 12174 24231 12175 24231 12240 24232 12175 24232 12241 24232 12241 24233 12175 24233 12176 24233 12241 24234 12176 24234 12242 24234 12242 24235 12176 24235 12177 24235 12242 24236 12177 24236 12243 24236 12243 24237 12177 24237 12178 24237 12243 24238 12178 24238 12244 24238 12244 24239 12178 24239 12179 24239 12244 24240 12179 24240 12245 24240 12245 24241 12179 24241 12180 24241 12245 24242 12180 24242 12246 24242 12246 24243 12180 24243 12181 24243 12246 24244 12181 24244 12247 24244 12247 24245 12181 24245 12182 24245 12247 24246 12182 24246 12183 24246 12183 24247 12182 24247 12118 24247 12248 24248 12183 24248 12249 24248 12249 24249 12183 24249 12184 24249 12249 24250 12184 24250 12250 24250 12250 24251 12184 24251 12185 24251 12250 24252 12185 24252 12251 24252 12251 24253 12185 24253 12186 24253 12251 24254 12186 24254 12252 24254 12252 24255 12186 24255 12187 24255 12252 24256 12187 24256 12253 24256 12253 24257 12187 24257 12188 24257 12253 24258 12188 24258 12254 24258 12254 24259 12188 24259 12189 24259 12254 24260 12189 24260 12255 24260 12255 24261 12189 24261 12190 24261 12255 24262 12190 24262 12256 24262 12256 24263 12190 24263 12191 24263 12256 24264 12191 24264 12257 24264 12257 24265 12191 24265 12192 24265 12257 24266 12192 24266 12258 24266 12258 24267 12192 24267 12193 24267 12258 24268 12193 24268 12259 24268 12259 24269 12193 24269 12194 24269 12259 24270 12194 24270 12260 24270 12260 24271 12194 24271 12195 24271 12260 24272 12195 24272 12261 24272 12261 24273 12195 24273 12196 24273 12261 24274 12196 24274 12262 24274 12262 24275 12196 24275 12197 24275 12262 24276 12197 24276 12263 24276 12263 24277 12197 24277 12198 24277 12263 24278 12198 24278 12264 24278 12264 24279 12198 24279 12199 24279 12264 24280 12199 24280 12265 24280 12265 24281 12199 24281 12200 24281 12265 24282 12200 24282 12266 24282 12266 24283 12200 24283 12201 24283 12266 24284 12201 24284 12267 24284 12267 24285 12201 24285 12202 24285 12267 24286 12202 24286 12268 24286 12268 24287 12202 24287 12203 24287 12268 24288 12203 24288 12269 24288 12269 24289 12203 24289 12204 24289 12269 24290 12204 24290 12270 24290 12270 24291 12204 24291 12205 24291 12270 24292 12205 24292 12271 24292 12271 24293 12205 24293 12206 24293 12271 24294 12206 24294 12272 24294 12272 24295 12206 24295 12207 24295 12272 24296 12207 24296 12273 24296 12273 24297 12207 24297 12208 24297 12273 24298 12208 24298 12274 24298 12274 24299 12208 24299 12209 24299 12274 24300 12209 24300 12275 24300 12275 24301 12209 24301 12210 24301 12275 24302 12210 24302 12276 24302 12276 24303 12210 24303 12211 24303 12276 24304 12211 24304 12277 24304 12277 24305 12211 24305 12212 24305 12277 24306 12212 24306 12278 24306 12278 24307 12212 24307 12213 24307 12278 24308 12213 24308 12279 24308 12279 24309 12213 24309 12214 24309 12279 24310 12214 24310 12280 24310 12280 24311 12214 24311 12215 24311 12280 24312 12215 24312 12281 24312 12281 24313 12215 24313 12216 24313 12281 24314 12216 24314 12282 24314 12282 24315 12216 24315 12217 24315 12282 24316 12217 24316 12283 24316 12283 24317 12217 24317 12218 24317 12283 24318 12218 24318 12284 24318 12284 24319 12218 24319 12219 24319 12284 24320 12219 24320 12285 24320 12285 24321 12219 24321 12220 24321 12285 24322 12220 24322 12286 24322 12286 24323 12220 24323 12221 24323 12286 24324 12221 24324 12287 24324 12287 24325 12221 24325 12222 24325 12287 24326 12222 24326 12288 24326 12288 24327 12222 24327 12223 24327 12288 24328 12223 24328 12289 24328 12289 24329 12223 24329 12224 24329 12289 24330 12224 24330 12290 24330 12290 24331 12224 24331 12225 24331 12290 24332 12225 24332 12291 24332 12291 24333 12225 24333 12226 24333 12291 24334 12226 24334 12292 24334 12292 24335 12226 24335 12227 24335 12292 24336 12227 24336 12293 24336 12293 24337 12227 24337 12228 24337 12293 24338 12228 24338 12294 24338 12294 24339 12228 24339 12229 24339 12294 24340 12229 24340 12295 24340 12295 24341 12229 24341 12230 24341 12295 24342 12230 24342 12296 24342 12296 24343 12230 24343 12231 24343 12296 24344 12231 24344 12297 24344 12297 24345 12231 24345 12232 24345 12297 24346 12232 24346 12298 24346 12298 24347 12232 24347 12233 24347 12298 24348 12233 24348 12299 24348 12299 24349 12233 24349 12234 24349 12299 24350 12234 24350 12300 24350 12300 24351 12234 24351 12235 24351 12300 24352 12235 24352 12301 24352 12301 24353 12235 24353 12236 24353 12301 24354 12236 24354 12302 24354 12302 24355 12236 24355 12237 24355 12302 24356 12237 24356 12303 24356 12303 24357 12237 24357 12238 24357 12303 24358 12238 24358 12304 24358 12304 24359 12238 24359 12239 24359 12304 24360 12239 24360 12305 24360 12305 24361 12239 24361 12240 24361 12305 24362 12240 24362 12306 24362 12306 24363 12240 24363 12241 24363 12306 24364 12241 24364 12307 24364 12307 24365 12241 24365 12242 24365 12307 24366 12242 24366 12308 24366 12308 24367 12242 24367 12243 24367 12308 24368 12243 24368 12309 24368 12309 24369 12243 24369 12244 24369 12309 24370 12244 24370 12310 24370 12310 24371 12244 24371 12245 24371 12310 24372 12245 24372 12311 24372 12311 24373 12245 24373 12246 24373 12311 24374 12246 24374 12312 24374 12312 24375 12246 24375 12247 24375 12312 24376 12247 24376 12248 24376 12248 24377 12247 24377 12183 24377 12313 24378 12248 24378 12314 24378 12314 24379 12248 24379 12249 24379 12314 24380 12249 24380 12315 24380 12315 24381 12249 24381 12250 24381 12315 24382 12250 24382 12316 24382 12316 24383 12250 24383 12251 24383 12316 24384 12251 24384 12317 24384 12317 24385 12251 24385 12252 24385 12317 24386 12252 24386 12318 24386 12318 24387 12252 24387 12253 24387 12318 24388 12253 24388 12319 24388 12319 24389 12253 24389 12254 24389 12319 24390 12254 24390 12320 24390 12320 24391 12254 24391 12255 24391 12320 24392 12255 24392 12321 24392 12321 24393 12255 24393 12256 24393 12321 24394 12256 24394 12322 24394 12322 24395 12256 24395 12257 24395 12322 24396 12257 24396 12323 24396 12323 24397 12257 24397 12258 24397 12323 24398 12258 24398 12324 24398 12324 24399 12258 24399 12259 24399 12324 24400 12259 24400 12325 24400 12325 24401 12259 24401 12260 24401 12325 24402 12260 24402 12326 24402 12326 24403 12260 24403 12261 24403 12326 24404 12261 24404 12327 24404 12327 24405 12261 24405 12262 24405 12327 24406 12262 24406 12328 24406 12328 24407 12262 24407 12263 24407 12328 24408 12263 24408 12329 24408 12329 24409 12263 24409 12264 24409 12329 24410 12264 24410 12330 24410 12330 24411 12264 24411 12265 24411 12330 24412 12265 24412 12331 24412 12331 24413 12265 24413 12266 24413 12331 24414 12266 24414 12332 24414 12332 24415 12266 24415 12267 24415 12332 24416 12267 24416 12333 24416 12333 24417 12267 24417 12268 24417 12333 24418 12268 24418 12334 24418 12334 24419 12268 24419 12269 24419 12334 24420 12269 24420 12335 24420 12335 24421 12269 24421 12270 24421 12335 24422 12270 24422 12336 24422 12336 24423 12270 24423 12271 24423 12336 24424 12271 24424 12337 24424 12337 24425 12271 24425 12272 24425 12337 24426 12272 24426 12338 24426 12338 24427 12272 24427 12273 24427 12338 24428 12273 24428 12339 24428 12339 24429 12273 24429 12274 24429 12339 24430 12274 24430 12340 24430 12340 24431 12274 24431 12275 24431 12340 24432 12275 24432 12341 24432 12341 24433 12275 24433 12276 24433 12341 24434 12276 24434 12342 24434 12342 24435 12276 24435 12277 24435 12342 24436 12277 24436 12343 24436 12343 24437 12277 24437 12278 24437 12343 24438 12278 24438 12344 24438 12344 24439 12278 24439 12279 24439 12344 24440 12279 24440 12345 24440 12345 24441 12279 24441 12280 24441 12345 24442 12280 24442 12346 24442 12346 24443 12280 24443 12281 24443 12346 24444 12281 24444 12347 24444 12347 24445 12281 24445 12282 24445 12347 24446 12282 24446 12348 24446 12348 24447 12282 24447 12283 24447 12348 24448 12283 24448 12349 24448 12349 24449 12283 24449 12284 24449 12349 24450 12284 24450 12350 24450 12350 24451 12284 24451 12285 24451 12350 24452 12285 24452 12351 24452 12351 24453 12285 24453 12286 24453 12351 24454 12286 24454 12352 24454 12352 24455 12286 24455 12287 24455 12352 24456 12287 24456 12353 24456 12353 24457 12287 24457 12288 24457 12353 24458 12288 24458 12354 24458 12354 24459 12288 24459 12289 24459 12354 24460 12289 24460 12355 24460 12355 24461 12289 24461 12290 24461 12355 24462 12290 24462 12356 24462 12356 24463 12290 24463 12291 24463 12356 24464 12291 24464 12357 24464 12357 24465 12291 24465 12292 24465 12357 24466 12292 24466 12358 24466 12358 24467 12292 24467 12293 24467 12358 24468 12293 24468 12359 24468 12359 24469 12293 24469 12294 24469 12359 24470 12294 24470 12360 24470 12360 24471 12294 24471 12295 24471 12360 24472 12295 24472 12361 24472 12361 24473 12295 24473 12296 24473 12361 24474 12296 24474 12362 24474 12362 24475 12296 24475 12297 24475 12362 24476 12297 24476 12363 24476 12363 24477 12297 24477 12298 24477 12363 24478 12298 24478 12364 24478 12364 24479 12298 24479 12299 24479 12364 24480 12299 24480 12365 24480 12365 24481 12299 24481 12300 24481 12365 24482 12300 24482 12366 24482 12366 24483 12300 24483 12301 24483 12366 24484 12301 24484 12367 24484 12367 24485 12301 24485 12302 24485 12367 24486 12302 24486 12368 24486 12368 24487 12302 24487 12303 24487 12368 24488 12303 24488 12369 24488 12369 24489 12303 24489 12304 24489 12369 24490 12304 24490 12370 24490 12370 24491 12304 24491 12305 24491 12370 24492 12305 24492 12371 24492 12371 24493 12305 24493 12306 24493 12371 24494 12306 24494 12372 24494 12372 24495 12306 24495 12307 24495 12372 24496 12307 24496 12373 24496 12373 24497 12307 24497 12308 24497 12373 24498 12308 24498 12374 24498 12374 24499 12308 24499 12309 24499 12374 24500 12309 24500 12375 24500 12375 24501 12309 24501 12310 24501 12375 24502 12310 24502 12376 24502 12376 24503 12310 24503 12311 24503 12376 24504 12311 24504 12377 24504 12377 24505 12311 24505 12312 24505 12377 24506 12312 24506 12313 24506 12313 24507 12312 24507 12248 24507 12378 24508 12313 24508 12379 24508 12379 24509 12313 24509 12314 24509 12379 24510 12314 24510 12380 24510 12380 24511 12314 24511 12315 24511 12380 24512 12315 24512 12381 24512 12381 24513 12315 24513 12316 24513 12381 24514 12316 24514 12382 24514 12382 24515 12316 24515 12317 24515 12382 24516 12317 24516 12383 24516 12383 24517 12317 24517 12318 24517 12383 24518 12318 24518 12384 24518 12384 24519 12318 24519 12319 24519 12384 24520 12319 24520 12385 24520 12385 24521 12319 24521 12320 24521 12385 24522 12320 24522 12386 24522 12386 24523 12320 24523 12321 24523 12386 24524 12321 24524 12387 24524 12387 24525 12321 24525 12322 24525 12387 24526 12322 24526 12388 24526 12388 24527 12322 24527 12323 24527 12388 24528 12323 24528 12389 24528 12389 24529 12323 24529 12324 24529 12389 24530 12324 24530 12390 24530 12390 24531 12324 24531 12325 24531 12390 24532 12325 24532 12391 24532 12391 24533 12325 24533 12326 24533 12391 24534 12326 24534 12392 24534 12392 24535 12326 24535 12327 24535 12392 24536 12327 24536 12393 24536 12393 24537 12327 24537 12328 24537 12393 24538 12328 24538 12394 24538 12394 24539 12328 24539 12329 24539 12394 24540 12329 24540 12395 24540 12395 24541 12329 24541 12330 24541 12395 24542 12330 24542 12396 24542 12396 24543 12330 24543 12331 24543 12396 24544 12331 24544 12397 24544 12397 24545 12331 24545 12332 24545 12397 24546 12332 24546 12398 24546 12398 24547 12332 24547 12333 24547 12398 24548 12333 24548 12399 24548 12399 24549 12333 24549 12334 24549 12399 24550 12334 24550 12400 24550 12400 24551 12334 24551 12335 24551 12400 24552 12335 24552 12401 24552 12401 24553 12335 24553 12336 24553 12401 24554 12336 24554 12402 24554 12402 24555 12336 24555 12337 24555 12402 24556 12337 24556 12403 24556 12403 24557 12337 24557 12338 24557 12403 24558 12338 24558 12404 24558 12404 24559 12338 24559 12339 24559 12404 24560 12339 24560 12405 24560 12405 24561 12339 24561 12340 24561 12405 24562 12340 24562 12406 24562 12406 24563 12340 24563 12341 24563 12406 24564 12341 24564 12407 24564 12407 24565 12341 24565 12342 24565 12407 24566 12342 24566 12408 24566 12408 24567 12342 24567 12343 24567 12408 24568 12343 24568 12409 24568 12409 24569 12343 24569 12344 24569 12409 24570 12344 24570 12410 24570 12410 24571 12344 24571 12345 24571 12410 24572 12345 24572 12411 24572 12411 24573 12345 24573 12346 24573 12411 24574 12346 24574 12412 24574 12412 24575 12346 24575 12347 24575 12412 24576 12347 24576 12413 24576 12413 24577 12347 24577 12348 24577 12413 24578 12348 24578 12414 24578 12414 24579 12348 24579 12349 24579 12414 24580 12349 24580 12415 24580 12415 24581 12349 24581 12350 24581 12415 24582 12350 24582 12416 24582 12416 24583 12350 24583 12351 24583 12416 24584 12351 24584 12417 24584 12417 24585 12351 24585 12352 24585 12417 24586 12352 24586 12418 24586 12418 24587 12352 24587 12353 24587 12418 24588 12353 24588 12419 24588 12419 24589 12353 24589 12354 24589 12419 24590 12354 24590 12420 24590 12420 24591 12354 24591 12355 24591 12420 24592 12355 24592 12421 24592 12421 24593 12355 24593 12356 24593 12421 24594 12356 24594 12422 24594 12422 24595 12356 24595 12357 24595 12422 24596 12357 24596 12423 24596 12423 24597 12357 24597 12358 24597 12423 24598 12358 24598 12424 24598 12424 24599 12358 24599 12359 24599 12424 24600 12359 24600 12425 24600 12425 24601 12359 24601 12360 24601 12425 24602 12360 24602 12426 24602 12426 24603 12360 24603 12361 24603 12426 24604 12361 24604 12427 24604 12427 24605 12361 24605 12362 24605 12427 24606 12362 24606 12428 24606 12428 24607 12362 24607 12363 24607 12428 24608 12363 24608 12429 24608 12429 24609 12363 24609 12364 24609 12429 24610 12364 24610 12430 24610 12430 24611 12364 24611 12365 24611 12430 24612 12365 24612 12431 24612 12431 24613 12365 24613 12366 24613 12431 24614 12366 24614 12432 24614 12432 24615 12366 24615 12367 24615 12432 24616 12367 24616 12433 24616 12433 24617 12367 24617 12368 24617 12433 24618 12368 24618 12434 24618 12434 24619 12368 24619 12369 24619 12434 24620 12369 24620 12435 24620 12435 24621 12369 24621 12370 24621 12435 24622 12370 24622 12436 24622 12436 24623 12370 24623 12371 24623 12436 24624 12371 24624 12437 24624 12437 24625 12371 24625 12372 24625 12437 24626 12372 24626 12438 24626 12438 24627 12372 24627 12373 24627 12438 24628 12373 24628 12439 24628 12439 24629 12373 24629 12374 24629 12439 24630 12374 24630 12440 24630 12440 24631 12374 24631 12375 24631 12440 24632 12375 24632 12441 24632 12441 24633 12375 24633 12376 24633 12441 24634 12376 24634 12442 24634 12442 24635 12376 24635 12377 24635 12442 24636 12377 24636 12378 24636 12378 24637 12377 24637 12313 24637 12443 24638 12378 24638 12444 24638 12444 24639 12378 24639 12379 24639 12444 24640 12379 24640 12445 24640 12445 24641 12379 24641 12380 24641 12445 24642 12380 24642 12446 24642 12446 24643 12380 24643 12381 24643 12446 24644 12381 24644 12447 24644 12447 24645 12381 24645 12382 24645 12447 24646 12382 24646 12448 24646 12448 24647 12382 24647 12383 24647 12448 24648 12383 24648 12449 24648 12449 24649 12383 24649 12384 24649 12449 24650 12384 24650 12450 24650 12450 24651 12384 24651 12385 24651 12450 24652 12385 24652 12451 24652 12451 24653 12385 24653 12386 24653 12451 24654 12386 24654 12452 24654 12452 24655 12386 24655 12387 24655 12452 24656 12387 24656 12453 24656 12453 24657 12387 24657 12388 24657 12453 24658 12388 24658 12454 24658 12454 24659 12388 24659 12389 24659 12454 24660 12389 24660 12455 24660 12455 24661 12389 24661 12390 24661 12455 24662 12390 24662 12456 24662 12456 24663 12390 24663 12391 24663 12456 24664 12391 24664 12457 24664 12457 24665 12391 24665 12392 24665 12457 24666 12392 24666 12458 24666 12458 24667 12392 24667 12393 24667 12458 24668 12393 24668 12459 24668 12459 24669 12393 24669 12394 24669 12459 24670 12394 24670 12460 24670 12460 24671 12394 24671 12395 24671 12460 24672 12395 24672 12461 24672 12461 24673 12395 24673 12396 24673 12461 24674 12396 24674 12462 24674 12462 24675 12396 24675 12397 24675 12462 24676 12397 24676 12463 24676 12463 24677 12397 24677 12398 24677 12463 24678 12398 24678 12464 24678 12464 24679 12398 24679 12399 24679 12464 24680 12399 24680 12465 24680 12465 24681 12399 24681 12400 24681 12465 24682 12400 24682 12466 24682 12466 24683 12400 24683 12401 24683 12466 24684 12401 24684 12467 24684 12467 24685 12401 24685 12402 24685 12467 24686 12402 24686 12468 24686 12468 24687 12402 24687 12403 24687 12468 24688 12403 24688 12469 24688 12469 24689 12403 24689 12404 24689 12469 24690 12404 24690 12470 24690 12470 24691 12404 24691 12405 24691 12470 24692 12405 24692 12471 24692 12471 24693 12405 24693 12406 24693 12471 24694 12406 24694 12472 24694 12472 24695 12406 24695 12407 24695 12472 24696 12407 24696 12473 24696 12473 24697 12407 24697 12408 24697 12473 24698 12408 24698 12474 24698 12474 24699 12408 24699 12409 24699 12474 24700 12409 24700 12475 24700 12475 24701 12409 24701 12410 24701 12475 24702 12410 24702 12476 24702 12476 24703 12410 24703 12411 24703 12476 24704 12411 24704 12477 24704 12477 24705 12411 24705 12412 24705 12477 24706 12412 24706 12478 24706 12478 24707 12412 24707 12413 24707 12478 24708 12413 24708 12479 24708 12479 24709 12413 24709 12414 24709 12479 24710 12414 24710 12480 24710 12480 24711 12414 24711 12415 24711 12480 24712 12415 24712 12481 24712 12481 24713 12415 24713 12416 24713 12481 24714 12416 24714 12482 24714 12482 24715 12416 24715 12417 24715 12482 24716 12417 24716 12483 24716 12483 24717 12417 24717 12418 24717 12483 24718 12418 24718 12484 24718 12484 24719 12418 24719 12419 24719 12484 24720 12419 24720 12485 24720 12485 24721 12419 24721 12420 24721 12485 24722 12420 24722 12486 24722 12486 24723 12420 24723 12421 24723 12486 24724 12421 24724 12487 24724 12487 24725 12421 24725 12422 24725 12487 24726 12422 24726 12488 24726 12488 24727 12422 24727 12423 24727 12488 24728 12423 24728 12489 24728 12489 24729 12423 24729 12424 24729 12489 24730 12424 24730 12490 24730 12490 24731 12424 24731 12425 24731 12490 24732 12425 24732 12491 24732 12491 24733 12425 24733 12426 24733 12491 24734 12426 24734 12492 24734 12492 24735 12426 24735 12427 24735 12492 24736 12427 24736 12493 24736 12493 24737 12427 24737 12428 24737 12493 24738 12428 24738 12494 24738 12494 24739 12428 24739 12429 24739 12494 24740 12429 24740 12495 24740 12495 24741 12429 24741 12430 24741 12495 24742 12430 24742 12496 24742 12496 24743 12430 24743 12431 24743 12496 24744 12431 24744 12497 24744 12497 24745 12431 24745 12432 24745 12497 24746 12432 24746 12498 24746 12498 24747 12432 24747 12433 24747 12498 24748 12433 24748 12499 24748 12499 24749 12433 24749 12434 24749 12499 24750 12434 24750 12500 24750 12500 24751 12434 24751 12435 24751 12500 24752 12435 24752 12501 24752 12501 24753 12435 24753 12436 24753 12501 24754 12436 24754 12502 24754 12502 24755 12436 24755 12437 24755 12502 24756 12437 24756 12503 24756 12503 24757 12437 24757 12438 24757 12503 24758 12438 24758 12504 24758 12504 24759 12438 24759 12439 24759 12504 24760 12439 24760 12505 24760 12505 24761 12439 24761 12440 24761 12505 24762 12440 24762 12506 24762 12506 24763 12440 24763 12441 24763 12506 24764 12441 24764 12507 24764 12507 24765 12441 24765 12442 24765 12507 24766 12442 24766 12443 24766 12443 24767 12442 24767 12378 24767 11844 24768 12443 24768 11843 24768 11843 24769 12443 24769 12444 24769 11843 24770 12444 24770 11842 24770 11842 24771 12444 24771 12445 24771 11842 24772 12445 24772 11841 24772 11841 24773 12445 24773 12446 24773 11841 24774 12446 24774 11840 24774 11840 24775 12446 24775 12447 24775 11840 24776 12447 24776 11839 24776 11839 24777 12447 24777 12448 24777 11839 24778 12448 24778 11838 24778 11838 24779 12448 24779 12449 24779 11838 24780 12449 24780 11837 24780 11837 24781 12449 24781 12450 24781 11837 24782 12450 24782 11836 24782 11836 24783 12450 24783 12451 24783 11836 24784 12451 24784 11835 24784 11835 24785 12451 24785 12452 24785 11835 24786 12452 24786 11834 24786 11834 24787 12452 24787 12453 24787 11834 24788 12453 24788 11833 24788 11833 24789 12453 24789 12454 24789 11833 24790 12454 24790 11832 24790 11832 24791 12454 24791 12455 24791 11832 24792 12455 24792 11831 24792 11831 24793 12455 24793 12456 24793 11831 24794 12456 24794 11830 24794 11830 24795 12456 24795 12457 24795 11830 24796 12457 24796 11829 24796 11829 24797 12457 24797 12458 24797 11829 24798 12458 24798 11828 24798 11828 24799 12458 24799 12459 24799 11828 24800 12459 24800 11827 24800 11827 24801 12459 24801 12460 24801 11827 24802 12460 24802 11826 24802 11826 24803 12460 24803 12461 24803 11826 24804 12461 24804 11825 24804 11825 24805 12461 24805 12462 24805 11825 24806 12462 24806 11824 24806 11824 24807 12462 24807 12463 24807 11824 24808 12463 24808 11823 24808 11823 24809 12463 24809 12464 24809 11823 24810 12464 24810 11822 24810 11822 24811 12464 24811 12465 24811 11822 24812 12465 24812 11821 24812 11821 24813 12465 24813 12466 24813 11821 24814 12466 24814 11820 24814 11820 24815 12466 24815 12467 24815 11820 24816 12467 24816 11819 24816 11819 24817 12467 24817 12468 24817 11819 24818 12468 24818 11818 24818 11818 24819 12468 24819 12469 24819 11818 24820 12469 24820 11817 24820 11817 24821 12469 24821 12470 24821 11817 24822 12470 24822 11816 24822 11816 24823 12470 24823 12471 24823 11816 24824 12471 24824 11815 24824 11815 24825 12471 24825 12472 24825 11815 24826 12472 24826 11814 24826 11814 24827 12472 24827 12473 24827 11814 24828 12473 24828 11813 24828 11813 24829 12473 24829 12474 24829 11813 24830 12474 24830 11877 24830 11877 24831 12474 24831 12475 24831 11877 24832 12475 24832 11876 24832 11876 24833 12475 24833 12476 24833 11876 24834 12476 24834 11875 24834 11875 24835 12476 24835 12477 24835 11875 24836 12477 24836 11874 24836 11874 24837 12477 24837 12478 24837 11874 24838 12478 24838 11873 24838 11873 24839 12478 24839 12479 24839 11873 24840 12479 24840 11872 24840 11872 24841 12479 24841 12480 24841 11872 24842 12480 24842 11871 24842 11871 24843 12480 24843 12481 24843 11871 24844 12481 24844 11870 24844 11870 24845 12481 24845 12482 24845 11870 24846 12482 24846 11869 24846 11869 24847 12482 24847 12483 24847 11869 24848 12483 24848 11868 24848 11868 24849 12483 24849 12484 24849 11868 24850 12484 24850 11867 24850 11867 24851 12484 24851 12485 24851 11867 24852 12485 24852 11866 24852 11866 24853 12485 24853 12486 24853 11866 24854 12486 24854 11865 24854 11865 24855 12486 24855 12487 24855 11865 24856 12487 24856 11864 24856 11864 24857 12487 24857 12488 24857 11864 24858 12488 24858 11863 24858 11863 24859 12488 24859 12489 24859 11863 24860 12489 24860 11862 24860 11862 24861 12489 24861 12490 24861 11862 24862 12490 24862 11861 24862 11861 24863 12490 24863 12491 24863 11861 24864 12491 24864 11860 24864 11860 24865 12491 24865 12492 24865 11860 24866 12492 24866 11859 24866 11859 24867 12492 24867 12493 24867 11859 24868 12493 24868 11858 24868 11858 24869 12493 24869 12494 24869 11858 24870 12494 24870 11857 24870 11857 24871 12494 24871 12495 24871 11857 24872 12495 24872 11856 24872 11856 24873 12495 24873 12496 24873 11856 24874 12496 24874 11855 24874 11855 24875 12496 24875 12497 24875 11855 24876 12497 24876 11854 24876 11854 24877 12497 24877 12498 24877 11854 24878 12498 24878 11853 24878 11853 24879 12498 24879 12499 24879 11853 24880 12499 24880 11852 24880 11852 24881 12499 24881 12500 24881 11852 24882 12500 24882 11851 24882 11851 24883 12500 24883 12501 24883 11851 24884 12501 24884 11850 24884 11850 24885 12501 24885 12502 24885 11850 24886 12502 24886 11849 24886 11849 24887 12502 24887 12503 24887 11849 24888 12503 24888 11848 24888 11848 24889 12503 24889 12504 24889 11848 24890 12504 24890 11847 24890 11847 24891 12504 24891 12505 24891 11847 24892 12505 24892 11846 24892 11846 24893 12505 24893 12506 24893 11846 24894 12506 24894 11845 24894 11845 24895 12506 24895 12507 24895 11845 24896 12507 24896 11844 24896 11844 24897 12507 24897 12443 24897 12044 24898 12508 24898 12509 24898 11882 24899 12510 24899 11881 24899 11881 24900 12510 24900 12508 24900 11881 24901 12508 24901 11880 24901 11880 24902 12508 24902 12044 24902 11882 24903 11884 24903 12510 24903 12510 24904 11884 24904 11886 24904 12510 24905 11886 24905 12511 24905 11892 24906 12512 24906 11894 24906 11894 24907 12512 24907 12511 24907 11894 24908 12511 24908 11895 24908 11895 24909 12511 24909 11886 24909 11892 24910 11890 24910 12512 24910 12512 24911 11890 24911 11888 24911 12512 24912 11888 24912 12513 24912 11888 24913 11887 24913 12513 24913 12513 24914 11887 24914 11896 24914 12513 24915 11896 24915 12514 24915 11901 24916 12515 24916 11900 24916 11900 24917 12515 24917 12514 24917 11900 24918 12514 24918 11898 24918 11898 24919 12514 24919 11896 24919 11901 24920 11903 24920 12515 24920 12515 24921 11903 24921 11905 24921 12515 24922 11905 24922 12516 24922 11911 24923 12517 24923 11913 24923 11913 24924 12517 24924 12516 24924 11913 24925 12516 24925 11914 24925 11914 24926 12516 24926 11905 24926 11911 24927 11909 24927 12517 24927 12517 24928 11909 24928 11907 24928 12517 24929 11907 24929 12518 24929 11907 24930 11906 24930 12518 24930 12518 24931 11906 24931 11915 24931 12518 24932 11915 24932 12519 24932 11920 24933 12520 24933 11919 24933 11919 24934 12520 24934 12519 24934 11919 24935 12519 24935 11917 24935 11917 24936 12519 24936 11915 24936 11920 24937 11922 24937 12520 24937 12520 24938 11922 24938 11924 24938 12520 24939 11924 24939 12521 24939 11928 24940 12522 24940 11927 24940 11927 24941 12522 24941 12521 24941 11927 24942 12521 24942 11925 24942 11925 24943 12521 24943 11924 24943 11928 24944 11930 24944 12522 24944 12522 24945 11930 24945 11932 24945 12522 24946 11932 24946 12523 24946 11936 24947 12524 24947 11938 24947 11938 24948 12524 24948 12523 24948 11938 24949 12523 24949 11939 24949 11939 24950 12523 24950 11932 24950 11936 24951 11934 24951 12524 24951 12524 24952 11934 24952 11942 24952 12524 24953 11942 24953 12525 24953 11942 24954 11941 24954 12525 24954 12525 24955 11941 24955 11945 24955 12525 24956 11945 24956 12526 24956 11951 24957 12527 24957 11952 24957 11952 24958 12527 24958 12526 24958 11952 24959 12526 24959 11944 24959 11944 24960 12526 24960 11945 24960 11951 24961 11949 24961 12527 24961 12527 24962 11949 24962 11947 24962 12527 24963 11947 24963 12528 24963 11955 24964 12529 24964 11953 24964 11953 24965 12529 24965 12528 24965 11953 24966 12528 24966 11946 24966 11946 24967 12528 24967 11947 24967 11955 24968 11957 24968 12529 24968 12529 24969 11957 24969 11959 24969 12529 24970 11959 24970 12530 24970 11959 24971 11964 24971 12530 24971 12530 24972 11964 24972 11963 24972 12530 24973 11963 24973 12531 24973 11970 24974 12532 24974 11971 24974 11971 24975 12532 24975 12531 24975 11971 24976 12531 24976 11961 24976 11961 24977 12531 24977 11963 24977 11970 24978 11968 24978 12532 24978 12532 24979 11968 24979 11966 24979 12532 24980 11966 24980 12533 24980 11974 24981 12534 24981 11972 24981 11972 24982 12534 24982 12533 24982 11972 24983 12533 24983 11965 24983 11965 24984 12533 24984 11966 24984 11974 24985 11976 24985 12534 24985 12534 24986 11976 24986 11978 24986 12534 24987 11978 24987 12535 24987 11978 24988 11983 24988 12535 24988 12535 24989 11983 24989 11982 24989 12535 24990 11982 24990 12536 24990 11982 24991 11980 24991 12536 24991 12536 24992 11980 24992 11988 24992 12536 24993 11988 24993 12537 24993 12537 24994 11988 24994 11987 24994 12537 24995 11987 24995 12538 24995 12538 24996 11987 24996 11985 24996 12538 24997 11985 24997 11991 24997 11997 24998 12539 24998 11998 24998 11998 24999 12539 24999 12538 24999 11998 25000 12538 25000 11990 25000 11990 25001 12538 25001 11991 25001 11997 25002 11995 25002 12539 25002 12539 25003 11995 25003 11993 25003 12539 25004 11993 25004 12540 25004 12001 25005 12541 25005 11999 25005 11999 25006 12541 25006 12540 25006 11999 25007 12540 25007 11992 25007 11992 25008 12540 25008 11993 25008 12001 25009 12003 25009 12541 25009 12541 25010 12003 25010 12005 25010 12541 25011 12005 25011 12542 25011 12005 25012 12006 25012 12542 25012 12542 25013 12006 25013 12008 25013 12542 25014 12008 25014 12543 25014 12012 25015 12544 25015 12011 25015 12011 25016 12544 25016 12543 25016 12011 25017 12543 25017 12009 25017 12009 25018 12543 25018 12008 25018 12012 25019 12014 25019 12544 25019 12544 25020 12014 25020 12016 25020 12544 25021 12016 25021 12545 25021 12022 25022 12546 25022 12024 25022 12024 25023 12546 25023 12545 25023 12024 25024 12545 25024 12025 25024 12025 25025 12545 25025 12016 25025 12022 25026 12020 25026 12546 25026 12546 25027 12020 25027 12018 25027 12546 25028 12018 25028 12547 25028 12018 25029 12017 25029 12547 25029 12547 25030 12017 25030 12026 25030 12547 25031 12026 25031 12548 25031 12031 25032 12549 25032 12030 25032 12030 25033 12549 25033 12548 25033 12030 25034 12548 25034 12028 25034 12028 25035 12548 25035 12026 25035 12031 25036 12033 25036 12549 25036 12549 25037 12033 25037 12035 25037 12549 25038 12035 25038 12550 25038 12039 25039 12551 25039 12038 25039 12038 25040 12551 25040 12550 25040 12038 25041 12550 25041 12036 25041 12036 25042 12550 25042 12035 25042 12039 25043 12041 25043 12551 25043 12551 25044 12041 25044 12043 25044 12551 25045 12043 25045 12552 25045 12043 25046 12052 25046 12552 25046 12552 25047 12052 25047 12051 25047 12552 25048 12051 25048 12553 25048 12051 25049 12049 25049 12553 25049 12553 25050 12049 25050 12047 25050 12553 25051 12047 25051 12509 25051 12509 25052 12047 25052 12045 25052 12509 25053 12045 25053 12044 25053 12590 25088 12591 25088 12516 25088 12592 25089 12593 25089 12536 25089 12594 25090 12527 25090 12595 25090 12595 25091 12527 25091 12528 25091 12595 25092 12528 25092 12596 25092 12596 25093 12528 25093 12597 25093 12598 25094 12550 25094 12599 25094 12599 25095 12550 25095 12551 25095 12599 25096 12551 25096 12600 25096 12601 25097 12602 25097 12530 25097 12530 25098 12602 25098 12603 25098 12530 25099 12603 25099 12529 25099 12529 25100 12603 25100 12604 25100 12529 25101 12604 25101 12528 25101 12528 25102 12604 25102 12605 25102 12528 25103 12605 25103 12597 25103 12516 25104 12591 25104 12515 25104 12606 25105 12607 25105 12548 25105 12608 25106 12609 25106 12544 25106 12610 25107 12611 25107 12539 25107 12539 25108 12611 25108 12538 25108 12536 25109 12593 25109 12535 25109 12612 25110 12613 25110 12532 25110 12598 25111 12614 25111 12550 25111 12550 25112 12614 25112 12615 25112 12550 25113 12615 25113 12549 25113 12532 25114 12613 25114 12531 25114 12616 25115 12617 25115 12525 25115 12525 25116 12617 25116 12524 25116 12618 25117 12619 25117 12518 25117 12620 25118 12621 25118 12541 25118 12541 25119 12621 25119 12540 25119 12621 25120 12622 25120 12540 25120 12540 25121 12622 25121 12623 25121 12540 25122 12623 25122 12539 25122 12539 25123 12623 25123 12624 25123 12539 25124 12624 25124 12610 25124 12613 25125 12625 25125 12531 25125 12531 25126 12625 25126 12626 25126 12531 25127 12626 25127 12530 25127 12530 25128 12626 25128 12627 25128 12530 25129 12627 25129 12601 25129 12594 25130 12628 25130 12527 25130 12527 25131 12628 25131 12629 25131 12527 25132 12629 25132 12526 25132 12518 25133 12619 25133 12517 25133 12619 25134 12630 25134 12517 25134 12517 25135 12630 25135 12631 25135 12517 25136 12631 25136 12516 25136 12516 25137 12631 25137 12632 25137 12516 25138 12632 25138 12590 25138 12548 25139 12607 25139 12547 25139 12547 25140 12607 25140 12633 25140 12547 25141 12633 25141 12546 25141 12546 25142 12633 25142 12634 25142 12546 25143 12634 25143 12635 25143 12636 25144 12537 25144 12637 25144 12637 25145 12537 25145 12538 25145 12637 25146 12538 25146 12638 25146 12638 25147 12538 25147 12611 25147 12639 25148 12534 25148 12640 25148 12640 25149 12534 25149 12535 25149 12640 25150 12535 25150 12641 25150 12641 25151 12535 25151 12593 25151 12629 25152 12642 25152 12526 25152 12526 25153 12642 25153 12643 25153 12526 25154 12643 25154 12525 25154 12525 25155 12643 25155 12644 25155 12525 25156 12644 25156 12616 25156 12645 25157 12523 25157 12646 25157 12646 25158 12523 25158 12524 25158 12646 25159 12524 25159 12647 25159 12647 25160 12524 25160 12617 25160 12519 25161 12648 25161 12518 25161 12518 25162 12648 25162 12649 25162 12518 25163 12649 25163 12618 25163 12650 25164 12514 25164 12651 25164 12651 25165 12514 25165 12515 25165 12651 25166 12515 25166 12652 25166 12652 25167 12515 25167 12591 25167 12650 25168 12653 25168 12514 25168 12514 25169 12653 25169 12654 25169 12514 25170 12654 25170 12513 25170 12513 25171 12654 25171 12655 25171 12513 25172 12655 25172 12656 25172 12553 25173 12657 25173 12658 25173 12615 25174 12659 25174 12549 25174 12549 25175 12659 25175 12660 25175 12549 25176 12660 25176 12548 25176 12548 25177 12660 25177 12661 25177 12548 25178 12661 25178 12606 25178 12544 25179 12609 25179 12543 25179 12543 25180 12609 25180 12662 25180 12543 25181 12662 25181 12663 25181 12663 25182 12664 25182 12543 25182 12543 25183 12664 25183 12665 25183 12543 25184 12665 25184 12542 25184 12542 25185 12665 25185 12666 25185 12542 25186 12666 25186 12541 25186 12541 25187 12666 25187 12667 25187 12541 25188 12667 25188 12620 25188 12636 25189 12668 25189 12537 25189 12537 25190 12668 25190 12669 25190 12537 25191 12669 25191 12536 25191 12536 25192 12669 25192 12670 25192 12536 25193 12670 25193 12592 25193 12639 25194 12671 25194 12534 25194 12534 25195 12671 25195 12672 25195 12534 25196 12672 25196 12533 25196 12672 25197 12673 25197 12533 25197 12533 25198 12673 25198 12674 25198 12533 25199 12674 25199 12532 25199 12532 25200 12674 25200 12675 25200 12532 25201 12675 25201 12612 25201 12676 25202 12520 25202 12677 25202 12677 25203 12520 25203 12521 25203 12677 25204 12521 25204 12678 25204 12676 25205 12679 25205 12520 25205 12520 25206 12679 25206 12680 25206 12520 25207 12680 25207 12519 25207 12519 25208 12680 25208 12681 25208 12519 25209 12681 25209 12648 25209 12553 25210 12658 25210 12552 25210 12658 25211 12682 25211 12552 25211 12552 25212 12682 25212 12683 25212 12552 25213 12683 25213 12551 25213 12551 25214 12683 25214 12684 25214 12551 25215 12684 25215 12600 25215 12635 25216 12685 25216 12546 25216 12546 25217 12685 25217 12686 25217 12546 25218 12686 25218 12545 25218 12545 25219 12686 25219 12687 25219 12545 25220 12687 25220 12544 25220 12544 25221 12687 25221 12688 25221 12544 25222 12688 25222 12608 25222 12645 25223 12689 25223 12523 25223 12523 25224 12689 25224 12690 25224 12523 25225 12690 25225 12522 25225 12656 25226 12691 25226 12513 25226 12513 25227 12691 25227 12692 25227 12513 25228 12692 25228 12512 25228 12512 25229 12692 25229 12693 25229 12512 25230 12693 25230 12511 25230 12511 25231 12693 25231 12694 25231 12511 25232 12694 25232 12695 25232 12695 25233 12696 25233 12511 25233 12511 25234 12696 25234 12697 25234 12511 25235 12697 25235 12510 25235 12510 25236 12697 25236 12698 25236 12510 25237 12698 25237 12508 25237 12508 25238 12698 25238 12699 25238 12508 25239 12699 25239 12700 25239 12690 25240 12701 25240 12522 25240 12522 25241 12701 25241 12702 25241 12522 25242 12702 25242 12521 25242 12521 25243 12702 25243 12703 25243 12521 25244 12703 25244 12678 25244 12704 25245 12509 25245 12705 25245 12705 25246 12509 25246 12508 25246 12705 25247 12508 25247 12706 25247 12706 25248 12508 25248 12700 25248 12704 25249 12707 25249 12509 25249 12509 25250 12707 25250 12708 25250 12509 25251 12708 25251 12553 25251 12553 25252 12708 25252 12709 25252 12553 25253 12709 25253 12657 25253 12704 25326 12746 25326 12707 25326 12707 25327 12746 25327 12747 25327 12707 25328 12747 25328 12708 25328 12708 25329 12747 25329 12709 25329 12709 25330 12747 25330 12748 25330 12709 25331 12748 25331 12657 25331 12749 25332 12682 25332 12748 25332 12748 25333 12682 25333 12658 25333 12748 25334 12658 25334 12657 25334 12599 25335 12600 25335 12750 25335 12750 25336 12600 25336 12684 25336 12750 25337 12684 25337 12749 25337 12749 25338 12684 25338 12683 25338 12749 25339 12683 25339 12682 25339 12599 25340 12750 25340 12598 25340 12598 25341 12750 25341 12751 25341 12598 25342 12751 25342 12614 25342 12614 25343 12751 25343 12615 25343 12615 25344 12751 25344 12752 25344 12615 25345 12752 25345 12659 25345 12753 25346 12661 25346 12752 25346 12752 25347 12661 25347 12660 25347 12752 25348 12660 25348 12659 25348 12634 25349 12633 25349 12754 25349 12754 25350 12633 25350 12607 25350 12754 25351 12607 25351 12753 25351 12753 25352 12607 25352 12606 25352 12753 25353 12606 25353 12661 25353 12634 25354 12754 25354 12635 25354 12635 25355 12754 25355 12755 25355 12635 25356 12755 25356 12685 25356 12685 25357 12755 25357 12686 25357 12686 25358 12755 25358 12756 25358 12686 25359 12756 25359 12687 25359 12687 25360 12756 25360 12688 25360 12688 25361 12756 25361 12757 25361 12688 25362 12757 25362 12608 25362 12608 25363 12757 25363 12609 25363 12609 25364 12757 25364 12758 25364 12609 25365 12758 25365 12662 25365 12759 25366 12664 25366 12758 25366 12758 25367 12664 25367 12663 25367 12758 25368 12663 25368 12662 25368 12760 25369 12666 25369 12759 25369 12759 25370 12666 25370 12665 25370 12759 25371 12665 25371 12664 25371 12761 25372 12620 25372 12760 25372 12760 25373 12620 25373 12667 25373 12760 25374 12667 25374 12666 25374 12624 25375 12623 25375 12762 25375 12762 25376 12623 25376 12622 25376 12762 25377 12622 25377 12761 25377 12761 25378 12622 25378 12621 25378 12761 25379 12621 25379 12620 25379 12624 25380 12762 25380 12610 25380 12610 25381 12762 25381 12763 25381 12610 25382 12763 25382 12611 25382 12611 25383 12763 25383 12638 25383 12638 25384 12763 25384 12764 25384 12638 25385 12764 25385 12637 25385 12765 25386 12668 25386 12764 25386 12764 25387 12668 25387 12636 25387 12764 25388 12636 25388 12637 25388 12593 25389 12592 25389 12766 25389 12766 25390 12592 25390 12670 25390 12766 25391 12670 25391 12765 25391 12765 25392 12670 25392 12669 25392 12765 25393 12669 25393 12668 25393 12593 25394 12766 25394 12641 25394 12641 25395 12766 25395 12767 25395 12641 25396 12767 25396 12640 25396 12640 25397 12767 25397 12639 25397 12639 25398 12767 25398 12768 25398 12639 25399 12768 25399 12671 25399 12769 25400 12673 25400 12768 25400 12768 25401 12673 25401 12672 25401 12768 25402 12672 25402 12671 25402 12613 25403 12612 25403 12770 25403 12770 25404 12612 25404 12675 25404 12770 25405 12675 25405 12769 25405 12769 25406 12675 25406 12674 25406 12769 25407 12674 25407 12673 25407 12613 25408 12770 25408 12625 25408 12625 25409 12770 25409 12771 25409 12625 25410 12771 25410 12626 25410 12626 25411 12771 25411 12627 25411 12627 25412 12771 25412 12772 25412 12627 25413 12772 25413 12601 25413 12601 25414 12772 25414 12602 25414 12602 25415 12772 25415 12773 25415 12602 25416 12773 25416 12603 25416 12774 25417 12605 25417 12773 25417 12773 25418 12605 25418 12604 25418 12773 25419 12604 25419 12603 25419 12594 25420 12595 25420 12775 25420 12775 25421 12595 25421 12596 25421 12775 25422 12596 25422 12774 25422 12774 25423 12596 25423 12597 25423 12774 25424 12597 25424 12605 25424 12594 25425 12775 25425 12628 25425 12628 25426 12775 25426 12776 25426 12628 25427 12776 25427 12629 25427 12629 25428 12776 25428 12642 25428 12642 25429 12776 25429 12777 25429 12642 25430 12777 25430 12643 25430 12778 25431 12616 25431 12777 25431 12777 25432 12616 25432 12644 25432 12777 25433 12644 25433 12643 25433 12645 25434 12646 25434 12779 25434 12779 25435 12646 25435 12647 25435 12779 25436 12647 25436 12778 25436 12778 25437 12647 25437 12617 25437 12778 25438 12617 25438 12616 25438 12645 25439 12779 25439 12689 25439 12689 25440 12779 25440 12780 25440 12689 25441 12780 25441 12690 25441 12690 25442 12780 25442 12701 25442 12701 25443 12780 25443 12781 25443 12701 25444 12781 25444 12702 25444 12782 25445 12678 25445 12781 25445 12781 25446 12678 25446 12703 25446 12781 25447 12703 25447 12702 25447 12680 25448 12679 25448 12783 25448 12783 25449 12679 25449 12676 25449 12783 25450 12676 25450 12782 25450 12782 25451 12676 25451 12677 25451 12782 25452 12677 25452 12678 25452 12680 25453 12783 25453 12681 25453 12681 25454 12783 25454 12784 25454 12681 25455 12784 25455 12648 25455 12648 25456 12784 25456 12649 25456 12649 25457 12784 25457 12785 25457 12649 25458 12785 25458 12618 25458 12786 25459 12630 25459 12785 25459 12785 25460 12630 25460 12619 25460 12785 25461 12619 25461 12618 25461 12787 25462 12632 25462 12786 25462 12786 25463 12632 25463 12631 25463 12786 25464 12631 25464 12630 25464 12651 25465 12652 25465 12788 25465 12788 25466 12652 25466 12591 25466 12788 25467 12591 25467 12787 25467 12787 25468 12591 25468 12590 25468 12787 25469 12590 25469 12632 25469 12651 25470 12788 25470 12650 25470 12650 25471 12788 25471 12789 25471 12650 25472 12789 25472 12653 25472 12653 25473 12789 25473 12654 25473 12654 25474 12789 25474 12790 25474 12654 25475 12790 25475 12655 25475 12791 25476 12691 25476 12790 25476 12790 25477 12691 25477 12656 25477 12790 25478 12656 25478 12655 25478 12695 25479 12694 25479 12792 25479 12792 25480 12694 25480 12693 25480 12792 25481 12693 25481 12791 25481 12791 25482 12693 25482 12692 25482 12791 25483 12692 25483 12691 25483 12695 25484 12792 25484 12696 25484 12696 25485 12792 25485 12793 25485 12696 25486 12793 25486 12697 25486 12697 25487 12793 25487 12698 25487 12698 25488 12793 25488 12794 25488 12698 25489 12794 25489 12699 25489 12704 25490 12705 25490 12746 25490 12746 25491 12705 25491 12706 25491 12746 25492 12706 25492 12794 25492 12794 25493 12706 25493 12700 25493 12794 25494 12700 25494 12699 25494 12928 25628 12770 25628 12929 25628 12929 25629 12770 25629 12769 25629 12929 25630 12769 25630 12930 25630 12930 25631 12769 25631 12768 25631 12930 25632 12768 25632 12931 25632 12931 25633 12768 25633 12767 25633 12931 25634 12767 25634 12932 25634 12932 25635 12767 25635 12766 25635 12932 25636 12766 25636 12933 25636 12933 25637 12766 25637 12765 25637 12933 25638 12765 25638 12934 25638 12934 25639 12765 25639 12764 25639 12934 25640 12764 25640 12935 25640 12935 25641 12764 25641 12763 25641 12935 25642 12763 25642 12936 25642 12936 25643 12763 25643 12762 25643 12936 25644 12762 25644 12937 25644 12937 25645 12762 25645 12761 25645 12937 25646 12761 25646 12938 25646 12938 25647 12761 25647 12760 25647 12938 25648 12760 25648 12939 25648 12939 25649 12760 25649 12759 25649 12939 25650 12759 25650 12940 25650 12940 25651 12759 25651 12758 25651 12940 25652 12758 25652 12941 25652 12941 25653 12758 25653 12757 25653 12941 25654 12757 25654 12942 25654 12942 25655 12757 25655 12756 25655 12942 25656 12756 25656 12943 25656 12943 25657 12756 25657 12755 25657 12943 25658 12755 25658 12944 25658 12944 25659 12755 25659 12754 25659 12944 25660 12754 25660 12945 25660 12945 25661 12754 25661 12753 25661 12945 25662 12753 25662 12946 25662 12946 25663 12753 25663 12752 25663 12946 25664 12752 25664 12947 25664 12947 25665 12752 25665 12751 25665 12947 25666 12751 25666 12948 25666 12948 25667 12751 25667 12750 25667 12948 25668 12750 25668 12949 25668 12949 25669 12750 25669 12749 25669 12949 25670 12749 25670 12950 25670 12950 25671 12749 25671 12748 25671 12950 25672 12748 25672 12951 25672 12951 25673 12748 25673 12747 25673 12951 25674 12747 25674 12952 25674 12952 25675 12747 25675 12746 25675 12952 25676 12746 25676 12953 25676 12953 25677 12746 25677 12794 25677 12953 25678 12794 25678 12954 25678 12954 25679 12794 25679 12793 25679 12954 25680 12793 25680 12955 25680 12955 25681 12793 25681 12792 25681 12955 25682 12792 25682 12956 25682 12956 25683 12792 25683 12791 25683 12956 25684 12791 25684 12957 25684 12957 25685 12791 25685 12790 25685 12957 25686 12790 25686 12958 25686 12958 25687 12790 25687 12789 25687 12958 25688 12789 25688 12959 25688 12959 25689 12789 25689 12788 25689 12959 25690 12788 25690 12960 25690 12960 25691 12788 25691 12787 25691 12960 25692 12787 25692 12961 25692 12961 25693 12787 25693 12786 25693 12961 25694 12786 25694 12962 25694 12962 25695 12786 25695 12785 25695 12962 25696 12785 25696 12963 25696 12963 25697 12785 25697 12784 25697 12963 25698 12784 25698 12964 25698 12964 25699 12784 25699 12783 25699 12964 25700 12783 25700 12965 25700 12965 25701 12783 25701 12782 25701 12965 25702 12782 25702 12966 25702 12966 25703 12782 25703 12781 25703 12966 25704 12781 25704 12967 25704 12967 25705 12781 25705 12780 25705 12967 25706 12780 25706 12968 25706 12968 25707 12780 25707 12779 25707 12968 25708 12779 25708 12969 25708 12969 25709 12779 25709 12778 25709 12969 25710 12778 25710 12970 25710 12970 25711 12778 25711 12777 25711 12970 25712 12777 25712 12971 25712 12971 25713 12777 25713 12776 25713 12971 25714 12776 25714 12972 25714 12972 25715 12776 25715 12775 25715 12972 25716 12775 25716 12973 25716 12973 25717 12775 25717 12774 25717 12973 25718 12774 25718 12974 25718 12974 25719 12774 25719 12773 25719 12974 25720 12773 25720 12975 25720 12975 25721 12773 25721 12772 25721 12975 25722 12772 25722 12976 25722 12976 25723 12772 25723 12771 25723 12976 25724 12771 25724 12928 25724 12928 25725 12771 25725 12770 25725 13271 26532 13272 26532 13273 26532 13274 26533 13272 26533 13271 26533 13271 26534 13275 26534 13276 26534 13277 26535 13275 26535 13271 26535 13273 26536 13277 26536 13271 26536 13271 26537 13278 26537 13279 26537 13280 26538 13278 26538 13271 26538 13281 26539 13280 26539 13271 26539 13271 26540 13282 26540 13283 26540 13284 26541 13282 26541 13271 26541 13279 26542 13284 26542 13271 26542 13271 26543 13285 26543 13286 26543 13287 26544 13285 26544 13271 26544 13288 26545 13287 26545 13271 26545 13271 26546 13289 26546 13290 26546 13291 26547 13289 26547 13271 26547 13286 26548 13291 26548 13271 26548 13271 26549 13292 26549 13293 26549 13294 26550 13292 26550 13271 26550 13295 26551 13294 26551 13271 26551 13271 26552 13296 26552 13297 26552 13298 26553 13296 26553 13271 26553 13293 26554 13298 26554 13271 26554 13271 26555 13299 26555 13300 26555 13301 26556 13299 26556 13271 26556 13302 26557 13301 26557 13271 26557 13271 26558 13303 26558 13304 26558 13305 26559 13303 26559 13271 26559 13300 26560 13305 26560 13271 26560 13271 26561 13306 26561 13307 26561 13308 26562 13306 26562 13271 26562 13309 26563 13308 26563 13271 26563 13271 26564 13310 26564 13311 26564 13312 26565 13310 26565 13271 26565 13307 26566 13312 26566 13271 26566 13313 26567 13274 26567 13271 26567 13311 26568 13313 26568 13271 26568 13304 26569 13309 26569 13271 26569 13297 26570 13302 26570 13271 26570 13290 26571 13295 26571 13271 26571 13283 26572 13288 26572 13271 26572 13276 26573 13281 26573 13271 26573 13309 26574 13314 26574 13308 26574 13308 26575 13314 26575 13306 26575 13310 26576 13314 26576 13311 26576 13311 26577 13314 26577 13313 26577 13310 26578 13312 26578 13314 26578 13314 26579 13312 26579 13307 26579 13314 26580 13307 26580 13306 26580 13315 26581 13309 26581 13304 26581 13304 26582 13303 26582 13315 26582 13315 26583 13303 26583 13305 26583 13315 26584 13305 26584 13300 26584 13300 26585 13299 26585 13315 26585 13315 26586 13299 26586 13301 26586 13315 26587 13301 26587 13302 26587 13298 26588 13293 26588 13316 26588 13293 26589 13292 26589 13316 26589 13316 26590 13292 26590 13294 26590 13316 26591 13294 26591 13295 26591 13302 26592 13297 26592 13316 26592 13316 26593 13297 26593 13296 26593 13316 26594 13296 26594 13298 26594 13291 26595 13286 26595 13317 26595 13286 26596 13285 26596 13317 26596 13317 26597 13285 26597 13287 26597 13317 26598 13287 26598 13288 26598 13295 26599 13290 26599 13317 26599 13317 26600 13290 26600 13289 26600 13317 26601 13289 26601 13291 26601 13274 26602 13313 26602 13318 26602 13281 26603 13276 26603 13318 26603 13318 26604 13276 26604 13275 26604 13318 26605 13275 26605 13277 26605 13277 26606 13273 26606 13318 26606 13318 26607 13273 26607 13272 26607 13318 26608 13272 26608 13274 26608 13319 26609 13288 26609 13283 26609 13283 26610 13282 26610 13319 26610 13319 26611 13282 26611 13284 26611 13319 26612 13284 26612 13279 26612 13279 26613 13278 26613 13319 26613 13319 26614 13278 26614 13280 26614 13319 26615 13280 26615 13281 26615 13314 26616 13320 26616 13313 26616 13313 26617 13320 26617 13321 26617 13313 26618 13321 26618 13318 26618 13315 26619 13322 26619 13309 26619 13309 26620 13322 26620 13320 26620 13309 26621 13320 26621 13314 26621 13316 26622 13323 26622 13302 26622 13302 26623 13323 26623 13322 26623 13302 26624 13322 26624 13315 26624 13317 26625 13324 26625 13295 26625 13295 26626 13324 26626 13323 26626 13295 26627 13323 26627 13316 26627 13319 26628 13325 26628 13288 26628 13288 26629 13325 26629 13324 26629 13288 26630 13324 26630 13317 26630 13318 26631 13321 26631 13281 26631 13281 26632 13321 26632 13325 26632 13281 26633 13325 26633 13319 26633 13326 26634 13327 26634 13321 26634 13328 26635 13329 26635 13324 26635 13330 26636 13331 26636 13325 26636 13332 26637 13333 26637 13320 26637 13334 26638 13335 26638 13322 26638 13328 26639 13324 26639 13336 26639 13330 26640 13325 26640 13337 26640 13331 26641 13338 26641 13325 26641 13325 26642 13338 26642 13339 26642 13325 26643 13339 26643 13324 26643 13324 26644 13339 26644 13340 26644 13324 26645 13340 26645 13341 26645 13342 26646 13343 26646 13321 26646 13321 26647 13343 26647 13325 26647 13343 26648 13344 26648 13325 26648 13325 26649 13344 26649 13345 26649 13325 26650 13345 26650 13346 26650 13326 26651 13321 26651 13347 26651 13348 26652 13349 26652 13322 26652 13322 26653 13349 26653 13350 26653 13322 26654 13350 26654 13351 26654 13333 26655 13352 26655 13320 26655 13320 26656 13352 26656 13353 26656 13320 26657 13353 26657 13354 26657 13341 26658 13355 26658 13324 26658 13324 26659 13355 26659 13356 26659 13324 26660 13356 26660 13357 26660 13357 26661 13358 26661 13324 26661 13324 26662 13358 26662 13359 26662 13324 26663 13359 26663 13336 26663 13327 26664 13360 26664 13321 26664 13321 26665 13360 26665 13361 26665 13321 26666 13361 26666 13362 26666 13346 26667 13363 26667 13325 26667 13325 26668 13363 26668 13364 26668 13325 26669 13364 26669 13337 26669 13354 26670 13365 26670 13320 26670 13320 26671 13365 26671 13366 26671 13320 26672 13366 26672 13367 26672 13367 26673 13368 26673 13320 26673 13320 26674 13368 26674 13369 26674 13320 26675 13369 26675 13321 26675 13321 26676 13369 26676 13370 26676 13321 26677 13370 26677 13347 26677 13351 26678 13371 26678 13322 26678 13322 26679 13371 26679 13372 26679 13322 26680 13372 26680 13320 26680 13320 26681 13372 26681 13373 26681 13320 26682 13373 26682 13332 26682 13374 26683 13323 26683 13375 26683 13375 26684 13323 26684 13376 26684 13335 26685 13377 26685 13322 26685 13322 26686 13377 26686 13378 26686 13322 26687 13378 26687 13348 26687 13379 26688 13323 26688 13380 26688 13380 26689 13323 26689 13324 26689 13380 26690 13324 26690 13381 26690 13381 26691 13324 26691 13329 26691 13379 26692 13382 26692 13323 26692 13323 26693 13382 26693 13383 26693 13323 26694 13383 26694 13384 26694 13362 26695 13385 26695 13321 26695 13321 26696 13385 26696 13386 26696 13321 26697 13386 26697 13342 26697 13374 26698 13387 26698 13323 26698 13323 26699 13387 26699 13388 26699 13323 26700 13388 26700 13322 26700 13322 26701 13388 26701 13389 26701 13322 26702 13389 26702 13334 26702 13384 26703 13390 26703 13323 26703 13323 26704 13390 26704 13391 26704 13323 26705 13391 26705 13376 26705 13340 26706 13339 26706 13392 26706 13392 26707 13339 26707 13338 26707 13392 26708 13338 26708 13393 26708 13393 26709 13338 26709 13331 26709 13393 26710 13331 26710 13394 26710 13394 26711 13331 26711 13330 26711 13394 26712 13330 26712 13395 26712 13395 26713 13330 26713 13337 26713 13395 26714 13337 26714 13396 26714 13396 26715 13337 26715 13364 26715 13396 26716 13364 26716 13397 26716 13397 26717 13364 26717 13363 26717 13397 26718 13363 26718 13398 26718 13398 26719 13363 26719 13346 26719 13398 26720 13346 26720 13399 26720 13399 26721 13346 26721 13345 26721 13399 26722 13345 26722 13400 26722 13400 26723 13345 26723 13344 26723 13400 26724 13344 26724 13401 26724 13401 26725 13344 26725 13343 26725 13401 26726 13343 26726 13402 26726 13402 26727 13343 26727 13342 26727 13402 26728 13342 26728 13403 26728 13403 26729 13342 26729 13386 26729 13403 26730 13386 26730 13404 26730 13404 26731 13386 26731 13385 26731 13404 26732 13385 26732 13405 26732 13405 26733 13385 26733 13362 26733 13405 26734 13362 26734 13406 26734 13406 26735 13362 26735 13361 26735 13406 26736 13361 26736 13407 26736 13407 26737 13361 26737 13360 26737 13407 26738 13360 26738 13408 26738 13408 26739 13360 26739 13327 26739 13408 26740 13327 26740 13409 26740 13409 26741 13327 26741 13326 26741 13409 26742 13326 26742 13410 26742 13410 26743 13326 26743 13347 26743 13410 26744 13347 26744 13411 26744 13411 26745 13347 26745 13370 26745 13411 26746 13370 26746 13412 26746 13412 26747 13370 26747 13369 26747 13412 26748 13369 26748 13413 26748 13413 26749 13369 26749 13368 26749 13413 26750 13368 26750 13414 26750 13414 26751 13368 26751 13367 26751 13414 26752 13367 26752 13415 26752 13415 26753 13367 26753 13366 26753 13415 26754 13366 26754 13416 26754 13416 26755 13366 26755 13365 26755 13416 26756 13365 26756 13417 26756 13417 26757 13365 26757 13354 26757 13417 26758 13354 26758 13418 26758 13418 26759 13354 26759 13353 26759 13418 26760 13353 26760 13419 26760 13419 26761 13353 26761 13352 26761 13419 26762 13352 26762 13420 26762 13420 26763 13352 26763 13333 26763 13420 26764 13333 26764 13421 26764 13421 26765 13333 26765 13332 26765 13421 26766 13332 26766 13422 26766 13422 26767 13332 26767 13373 26767 13422 26768 13373 26768 13423 26768 13423 26769 13373 26769 13372 26769 13423 26770 13372 26770 13424 26770 13424 26771 13372 26771 13371 26771 13424 26772 13371 26772 13425 26772 13425 26773 13371 26773 13351 26773 13425 26774 13351 26774 13426 26774 13426 26775 13351 26775 13350 26775 13426 26776 13350 26776 13427 26776 13427 26777 13350 26777 13349 26777 13427 26778 13349 26778 13428 26778 13428 26779 13349 26779 13348 26779 13428 26780 13348 26780 13429 26780 13429 26781 13348 26781 13378 26781 13429 26782 13378 26782 13430 26782 13430 26783 13378 26783 13377 26783 13430 26784 13377 26784 13431 26784 13431 26785 13377 26785 13335 26785 13431 26786 13335 26786 13432 26786 13432 26787 13335 26787 13334 26787 13432 26788 13334 26788 13433 26788 13433 26789 13334 26789 13389 26789 13433 26790 13389 26790 13434 26790 13434 26791 13389 26791 13388 26791 13434 26792 13388 26792 13435 26792 13435 26793 13388 26793 13387 26793 13435 26794 13387 26794 13436 26794 13436 26795 13387 26795 13374 26795 13436 26796 13374 26796 13437 26796 13437 26797 13374 26797 13375 26797 13437 26798 13375 26798 13438 26798 13438 26799 13375 26799 13376 26799 13438 26800 13376 26800 13439 26800 13439 26801 13376 26801 13391 26801 13439 26802 13391 26802 13440 26802 13440 26803 13391 26803 13390 26803 13440 26804 13390 26804 13441 26804 13441 26805 13390 26805 13384 26805 13441 26806 13384 26806 13442 26806 13442 26807 13384 26807 13383 26807 13442 26808 13383 26808 13443 26808 13443 26809 13383 26809 13382 26809 13443 26810 13382 26810 13444 26810 13444 26811 13382 26811 13379 26811 13444 26812 13379 26812 13445 26812 13445 26813 13379 26813 13380 26813 13445 26814 13380 26814 13446 26814 13446 26815 13380 26815 13381 26815 13446 26816 13381 26816 13447 26816 13447 26817 13381 26817 13329 26817 13447 26818 13329 26818 13448 26818 13448 26819 13329 26819 13328 26819 13448 26820 13328 26820 13449 26820 13449 26821 13328 26821 13336 26821 13449 26822 13336 26822 13450 26822 13450 26823 13336 26823 13359 26823 13450 26824 13359 26824 13451 26824 13451 26825 13359 26825 13358 26825 13451 26826 13358 26826 13452 26826 13452 26827 13358 26827 13357 26827 13452 26828 13357 26828 13453 26828 13453 26829 13357 26829 13356 26829 13453 26830 13356 26830 13454 26830 13454 26831 13356 26831 13355 26831 13454 26832 13355 26832 13455 26832 13455 26833 13355 26833 13341 26833 13455 26834 13341 26834 13456 26834 13456 26835 13341 26835 13340 26835 13456 26836 13340 26836 13392 26836 13457 26837 13458 26837 13459 26837 13459 26838 13458 26838 13460 26838 13459 26839 13460 26839 13461 26839 13461 26840 13460 26840 13462 26840 13461 26841 13462 26841 13463 26841 13463 26842 13462 26842 13464 26842 13465 26843 13466 26843 13464 26843 13464 26844 13466 26844 13467 26844 13464 26845 13467 26845 13463 26845 13468 26846 13469 26846 13465 26846 13465 26847 13469 26847 13470 26847 13465 26848 13470 26848 13466 26848 13471 26849 13472 26849 13473 26849 13473 26850 13472 26850 13474 26850 13473 26851 13474 26851 13475 26851 13475 26852 13474 26852 13476 26852 13475 26853 13476 26853 13468 26853 13468 26854 13476 26854 13477 26854 13468 26855 13477 26855 13469 26855 13471 26856 13473 26856 13478 26856 13478 26857 13473 26857 13479 26857 13478 26858 13479 26858 13480 26858 13480 26859 13479 26859 13481 26859 13480 26860 13481 26860 13482 26860 13482 26861 13481 26861 13483 26861 13482 26862 13483 26862 13484 26862 13485 26863 13486 26863 13487 26863 13487 26864 13486 26864 13488 26864 13487 26865 13488 26865 13483 26865 13483 26866 13488 26866 13489 26866 13483 26867 13489 26867 13484 26867 13490 26868 13491 26868 13492 26868 13492 26869 13491 26869 13493 26869 13492 26870 13493 26870 13485 26870 13485 26871 13493 26871 13494 26871 13485 26872 13494 26872 13486 26872 13495 26873 13496 26873 13490 26873 13490 26874 13496 26874 13497 26874 13490 26875 13497 26875 13491 26875 13498 26876 13499 26876 13500 26876 13500 26877 13499 26877 13501 26877 13500 26878 13501 26878 13502 26878 13502 26879 13501 26879 13503 26879 13502 26880 13503 26880 13495 26880 13495 26881 13503 26881 13504 26881 13495 26882 13504 26882 13496 26882 13498 26883 13500 26883 13505 26883 13505 26884 13500 26884 13506 26884 13505 26885 13506 26885 13507 26885 13507 26886 13506 26886 13508 26886 13507 26887 13508 26887 13509 26887 13509 26888 13508 26888 13510 26888 13510 26889 13508 26889 13511 26889 13510 26890 13511 26890 13512 26890 13512 26891 13511 26891 13513 26891 13512 26892 13513 26892 13514 26892 13514 26893 13513 26893 13515 26893 13515 26894 13513 26894 13516 26894 13515 26895 13516 26895 13517 26895 13517 26896 13516 26896 13518 26896 13518 26897 13516 26897 13519 26897 13518 26898 13519 26898 13520 26898 13520 26899 13519 26899 13521 26899 13520 26900 13521 26900 13522 26900 13523 26901 13524 26901 13525 26901 13525 26902 13524 26902 13526 26902 13525 26903 13526 26903 13527 26903 13527 26904 13526 26904 13528 26904 13527 26905 13528 26905 13529 26905 13529 26906 13528 26906 13530 26906 13529 26907 13530 26907 13521 26907 13521 26908 13530 26908 13531 26908 13521 26909 13531 26909 13522 26909 13523 26910 13525 26910 13532 26910 13532 26911 13525 26911 13533 26911 13532 26912 13533 26912 13534 26912 13534 26913 13533 26913 13535 26913 13534 26914 13535 26914 13536 26914 13536 26915 13535 26915 13537 26915 13537 26916 13535 26916 13538 26916 13537 26917 13538 26917 13539 26917 13539 26918 13538 26918 13540 26918 13539 26919 13540 26919 13541 26919 13542 26920 13543 26920 13544 26920 13544 26921 13543 26921 13545 26921 13544 26922 13545 26922 13546 26922 13546 26923 13545 26923 13547 26923 13546 26924 13547 26924 13548 26924 13548 26925 13547 26925 13549 26925 13548 26926 13549 26926 13540 26926 13540 26927 13549 26927 13550 26927 13540 26928 13550 26928 13541 26928 13542 26929 13544 26929 13551 26929 13551 26930 13544 26930 13552 26930 13551 26931 13552 26931 13553 26931 13553 26932 13552 26932 13554 26932 13553 26933 13554 26933 13555 26933 13555 26934 13554 26934 13556 26934 13556 26935 13554 26935 13557 26935 13556 26936 13557 26936 13558 26936 13558 26937 13557 26937 13559 26937 13558 26938 13559 26938 13560 26938 13560 26939 13559 26939 13561 26939 13561 26940 13559 26940 13562 26940 13561 26941 13562 26941 13563 26941 13563 26942 13562 26942 13564 26942 13564 26943 13562 26943 13565 26943 13564 26944 13565 26944 13566 26944 13566 26945 13565 26945 13567 26945 13566 26946 13567 26946 13568 26946 13569 26947 13570 26947 13571 26947 13571 26948 13570 26948 13572 26948 13571 26949 13572 26949 13573 26949 13573 26950 13572 26950 13574 26950 13573 26951 13574 26951 13567 26951 13567 26952 13574 26952 13575 26952 13567 26953 13575 26953 13568 26953 13576 26954 13577 26954 13569 26954 13569 26955 13577 26955 13578 26955 13569 26956 13578 26956 13570 26956 13579 26957 13580 26957 13576 26957 13576 26958 13580 26958 13581 26958 13576 26959 13581 26959 13577 26959 13582 26960 13583 26960 13584 26960 13584 26961 13583 26961 13585 26961 13584 26962 13585 26962 13586 26962 13586 26963 13585 26963 13587 26963 13586 26964 13587 26964 13579 26964 13579 26965 13587 26965 13588 26965 13579 26966 13588 26966 13580 26966 13582 26967 13584 26967 13589 26967 13589 26968 13584 26968 13590 26968 13589 26969 13590 26969 13591 26969 13591 26970 13590 26970 13592 26970 13591 26971 13592 26971 13593 26971 13593 26972 13592 26972 13594 26972 13593 26973 13594 26973 13595 26973 13596 26974 13597 26974 13598 26974 13598 26975 13597 26975 13599 26975 13598 26976 13599 26976 13594 26976 13594 26977 13599 26977 13600 26977 13594 26978 13600 26978 13595 26978 13601 26979 13602 26979 13603 26979 13603 26980 13602 26980 13604 26980 13603 26981 13604 26981 13605 26981 13605 26982 13604 26982 13606 26982 13605 26983 13606 26983 13596 26983 13596 26984 13606 26984 13607 26984 13596 26985 13607 26985 13597 26985 13601 26986 13603 26986 13608 26986 13608 26987 13603 26987 13609 26987 13608 26988 13609 26988 13610 26988 13610 26989 13609 26989 13611 26989 13610 26990 13611 26990 13612 26990 13612 26991 13611 26991 13613 26991 13612 26992 13613 26992 13614 26992 13615 26993 13616 26993 13617 26993 13617 26994 13616 26994 13618 26994 13617 26995 13618 26995 13613 26995 13613 26996 13618 26996 13619 26996 13613 26997 13619 26997 13614 26997 13620 26998 13621 26998 13622 26998 13622 26999 13621 26999 13623 26999 13622 27000 13623 27000 13615 27000 13615 27001 13623 27001 13624 27001 13615 27002 13624 27002 13616 27002 13625 27003 13626 27003 13620 27003 13620 27004 13626 27004 13627 27004 13620 27005 13627 27005 13621 27005 13457 27006 13628 27006 13458 27006 13458 27007 13628 27007 13629 27007 13458 27008 13629 27008 13630 27008 13630 27009 13629 27009 13631 27009 13630 27010 13631 27010 13625 27010 13625 27011 13631 27011 13632 27011 13625 27012 13632 27012 13626 27012 13633 27013 13483 27013 13634 27013 13634 27014 13483 27014 13481 27014 13634 27015 13481 27015 13635 27015 13635 27016 13481 27016 13479 27016 13635 27017 13479 27017 13636 27017 13636 27018 13479 27018 13473 27018 13636 27019 13473 27019 13637 27019 13637 27020 13473 27020 13475 27020 13637 27021 13475 27021 13638 27021 13638 27022 13475 27022 13468 27022 13638 27023 13468 27023 13639 27023 13639 27024 13468 27024 13465 27024 13639 27025 13465 27025 13640 27025 13640 27026 13465 27026 13464 27026 13640 27027 13464 27027 13641 27027 13641 27028 13464 27028 13462 27028 13641 27029 13462 27029 13642 27029 13642 27030 13462 27030 13460 27030 13642 27031 13460 27031 13643 27031 13643 27032 13460 27032 13458 27032 13643 27033 13458 27033 13644 27033 13644 27034 13458 27034 13630 27034 13644 27035 13630 27035 13645 27035 13645 27036 13630 27036 13625 27036 13645 27037 13625 27037 13646 27037 13646 27038 13625 27038 13620 27038 13646 27039 13620 27039 13647 27039 13647 27040 13620 27040 13622 27040 13647 27041 13622 27041 13648 27041 13648 27042 13622 27042 13615 27042 13648 27043 13615 27043 13649 27043 13649 27044 13615 27044 13617 27044 13649 27045 13617 27045 13650 27045 13650 27046 13617 27046 13613 27046 13650 27047 13613 27047 13651 27047 13651 27048 13613 27048 13611 27048 13651 27049 13611 27049 13652 27049 13652 27050 13611 27050 13609 27050 13652 27051 13609 27051 13653 27051 13653 27052 13609 27052 13603 27052 13653 27053 13603 27053 13654 27053 13654 27054 13603 27054 13605 27054 13654 27055 13605 27055 13655 27055 13655 27056 13605 27056 13596 27056 13655 27057 13596 27057 13656 27057 13656 27058 13596 27058 13598 27058 13656 27059 13598 27059 13657 27059 13657 27060 13598 27060 13594 27060 13657 27061 13594 27061 13658 27061 13658 27062 13594 27062 13592 27062 13658 27063 13592 27063 13659 27063 13659 27064 13592 27064 13590 27064 13659 27065 13590 27065 13660 27065 13660 27066 13590 27066 13584 27066 13660 27067 13584 27067 13661 27067 13661 27068 13584 27068 13586 27068 13661 27069 13586 27069 13662 27069 13662 27070 13586 27070 13579 27070 13662 27071 13579 27071 13663 27071 13663 27072 13579 27072 13576 27072 13663 27073 13576 27073 13664 27073 13664 27074 13576 27074 13569 27074 13664 27075 13569 27075 13665 27075 13665 27076 13569 27076 13571 27076 13665 27077 13571 27077 13666 27077 13666 27078 13571 27078 13573 27078 13666 27079 13573 27079 13667 27079 13667 27080 13573 27080 13567 27080 13667 27081 13567 27081 13668 27081 13668 27082 13567 27082 13565 27082 13668 27083 13565 27083 13669 27083 13669 27084 13565 27084 13562 27084 13669 27085 13562 27085 13670 27085 13670 27086 13562 27086 13559 27086 13670 27087 13559 27087 13671 27087 13671 27088 13559 27088 13557 27088 13671 27089 13557 27089 13672 27089 13672 27090 13557 27090 13554 27090 13672 27091 13554 27091 13673 27091 13673 27092 13554 27092 13552 27092 13673 27093 13552 27093 13674 27093 13674 27094 13552 27094 13544 27094 13674 27095 13544 27095 13675 27095 13675 27096 13544 27096 13546 27096 13675 27097 13546 27097 13676 27097 13676 27098 13546 27098 13548 27098 13676 27099 13548 27099 13677 27099 13677 27100 13548 27100 13540 27100 13677 27101 13540 27101 13678 27101 13678 27102 13540 27102 13538 27102 13678 27103 13538 27103 13679 27103 13679 27104 13538 27104 13535 27104 13679 27105 13535 27105 13680 27105 13680 27106 13535 27106 13533 27106 13680 27107 13533 27107 13681 27107 13681 27108 13533 27108 13525 27108 13681 27109 13525 27109 13682 27109 13682 27110 13525 27110 13527 27110 13682 27111 13527 27111 13683 27111 13683 27112 13527 27112 13529 27112 13683 27113 13529 27113 13684 27113 13684 27114 13529 27114 13521 27114 13684 27115 13521 27115 13685 27115 13685 27116 13521 27116 13519 27116 13685 27117 13519 27117 13686 27117 13686 27118 13519 27118 13516 27118 13686 27119 13516 27119 13687 27119 13687 27120 13516 27120 13513 27120 13687 27121 13513 27121 13688 27121 13688 27122 13513 27122 13511 27122 13688 27123 13511 27123 13689 27123 13689 27124 13511 27124 13508 27124 13689 27125 13508 27125 13690 27125 13690 27126 13508 27126 13506 27126 13690 27127 13506 27127 13691 27127 13691 27128 13506 27128 13500 27128 13691 27129 13500 27129 13692 27129 13692 27130 13500 27130 13502 27130 13692 27131 13502 27131 13693 27131 13693 27132 13502 27132 13495 27132 13693 27133 13495 27133 13694 27133 13694 27134 13495 27134 13490 27134 13694 27135 13490 27135 13695 27135 13695 27136 13490 27136 13492 27136 13695 27137 13492 27137 13696 27137 13696 27138 13492 27138 13485 27138 13696 27139 13485 27139 13697 27139 13697 27140 13485 27140 13487 27140 13697 27141 13487 27141 13633 27141 13633 27142 13487 27142 13483 27142 13698 27143 13633 27143 13699 27143 13699 27144 13633 27144 13634 27144 13699 27145 13634 27145 13700 27145 13700 27146 13634 27146 13635 27146 13700 27147 13635 27147 13701 27147 13701 27148 13635 27148 13636 27148 13701 27149 13636 27149 13702 27149 13702 27150 13636 27150 13637 27150 13702 27151 13637 27151 13703 27151 13703 27152 13637 27152 13638 27152 13703 27153 13638 27153 13704 27153 13704 27154 13638 27154 13639 27154 13704 27155 13639 27155 13705 27155 13705 27156 13639 27156 13640 27156 13705 27157 13640 27157 13706 27157 13706 27158 13640 27158 13641 27158 13706 27159 13641 27159 13707 27159 13707 27160 13641 27160 13642 27160 13707 27161 13642 27161 13708 27161 13708 27162 13642 27162 13643 27162 13708 27163 13643 27163 13709 27163 13709 27164 13643 27164 13644 27164 13709 27165 13644 27165 13710 27165 13710 27166 13644 27166 13645 27166 13710 27167 13645 27167 13711 27167 13711 27168 13645 27168 13646 27168 13711 27169 13646 27169 13712 27169 13712 27170 13646 27170 13647 27170 13712 27171 13647 27171 13713 27171 13713 27172 13647 27172 13648 27172 13713 27173 13648 27173 13714 27173 13714 27174 13648 27174 13649 27174 13714 27175 13649 27175 13715 27175 13715 27176 13649 27176 13650 27176 13715 27177 13650 27177 13716 27177 13716 27178 13650 27178 13651 27178 13716 27179 13651 27179 13717 27179 13717 27180 13651 27180 13652 27180 13717 27181 13652 27181 13718 27181 13718 27182 13652 27182 13653 27182 13718 27183 13653 27183 13719 27183 13719 27184 13653 27184 13654 27184 13719 27185 13654 27185 13720 27185 13720 27186 13654 27186 13655 27186 13720 27187 13655 27187 13721 27187 13721 27188 13655 27188 13656 27188 13721 27189 13656 27189 13722 27189 13722 27190 13656 27190 13657 27190 13722 27191 13657 27191 13723 27191 13723 27192 13657 27192 13658 27192 13723 27193 13658 27193 13724 27193 13724 27194 13658 27194 13659 27194 13724 27195 13659 27195 13725 27195 13725 27196 13659 27196 13660 27196 13725 27197 13660 27197 13726 27197 13726 27198 13660 27198 13661 27198 13726 27199 13661 27199 13727 27199 13727 27200 13661 27200 13662 27200 13727 27201 13662 27201 13728 27201 13728 27202 13662 27202 13663 27202 13728 27203 13663 27203 13729 27203 13729 27204 13663 27204 13664 27204 13729 27205 13664 27205 13730 27205 13730 27206 13664 27206 13665 27206 13730 27207 13665 27207 13731 27207 13731 27208 13665 27208 13666 27208 13731 27209 13666 27209 13732 27209 13732 27210 13666 27210 13667 27210 13732 27211 13667 27211 13733 27211 13733 27212 13667 27212 13668 27212 13733 27213 13668 27213 13734 27213 13734 27214 13668 27214 13669 27214 13734 27215 13669 27215 13735 27215 13735 27216 13669 27216 13670 27216 13735 27217 13670 27217 13736 27217 13736 27218 13670 27218 13671 27218 13736 27219 13671 27219 13737 27219 13737 27220 13671 27220 13672 27220 13737 27221 13672 27221 13738 27221 13738 27222 13672 27222 13673 27222 13738 27223 13673 27223 13739 27223 13739 27224 13673 27224 13674 27224 13739 27225 13674 27225 13740 27225 13740 27226 13674 27226 13675 27226 13740 27227 13675 27227 13741 27227 13741 27228 13675 27228 13676 27228 13741 27229 13676 27229 13742 27229 13742 27230 13676 27230 13677 27230 13742 27231 13677 27231 13743 27231 13743 27232 13677 27232 13678 27232 13743 27233 13678 27233 13744 27233 13744 27234 13678 27234 13679 27234 13744 27235 13679 27235 13745 27235 13745 27236 13679 27236 13680 27236 13745 27237 13680 27237 13746 27237 13746 27238 13680 27238 13681 27238 13746 27239 13681 27239 13747 27239 13747 27240 13681 27240 13682 27240 13747 27241 13682 27241 13748 27241 13748 27242 13682 27242 13683 27242 13748 27243 13683 27243 13749 27243 13749 27244 13683 27244 13684 27244 13749 27245 13684 27245 13750 27245 13750 27246 13684 27246 13685 27246 13750 27247 13685 27247 13751 27247 13751 27248 13685 27248 13686 27248 13751 27249 13686 27249 13752 27249 13752 27250 13686 27250 13687 27250 13752 27251 13687 27251 13753 27251 13753 27252 13687 27252 13688 27252 13753 27253 13688 27253 13754 27253 13754 27254 13688 27254 13689 27254 13754 27255 13689 27255 13755 27255 13755 27256 13689 27256 13690 27256 13755 27257 13690 27257 13756 27257 13756 27258 13690 27258 13691 27258 13756 27259 13691 27259 13757 27259 13757 27260 13691 27260 13692 27260 13757 27261 13692 27261 13758 27261 13758 27262 13692 27262 13693 27262 13758 27263 13693 27263 13759 27263 13759 27264 13693 27264 13694 27264 13759 27265 13694 27265 13760 27265 13760 27266 13694 27266 13695 27266 13760 27267 13695 27267 13761 27267 13761 27268 13695 27268 13696 27268 13761 27269 13696 27269 13762 27269 13762 27270 13696 27270 13697 27270 13762 27271 13697 27271 13698 27271 13698 27272 13697 27272 13633 27272 13763 27273 13698 27273 13764 27273 13764 27274 13698 27274 13699 27274 13764 27275 13699 27275 13765 27275 13765 27276 13699 27276 13700 27276 13765 27277 13700 27277 13766 27277 13766 27278 13700 27278 13701 27278 13766 27279 13701 27279 13767 27279 13767 27280 13701 27280 13702 27280 13767 27281 13702 27281 13768 27281 13768 27282 13702 27282 13703 27282 13768 27283 13703 27283 13769 27283 13769 27284 13703 27284 13704 27284 13769 27285 13704 27285 13770 27285 13770 27286 13704 27286 13705 27286 13770 27287 13705 27287 13771 27287 13771 27288 13705 27288 13706 27288 13771 27289 13706 27289 13772 27289 13772 27290 13706 27290 13707 27290 13772 27291 13707 27291 13773 27291 13773 27292 13707 27292 13708 27292 13773 27293 13708 27293 13774 27293 13774 27294 13708 27294 13709 27294 13774 27295 13709 27295 13775 27295 13775 27296 13709 27296 13710 27296 13775 27297 13710 27297 13776 27297 13776 27298 13710 27298 13711 27298 13776 27299 13711 27299 13777 27299 13777 27300 13711 27300 13712 27300 13777 27301 13712 27301 13778 27301 13778 27302 13712 27302 13713 27302 13778 27303 13713 27303 13779 27303 13779 27304 13713 27304 13714 27304 13779 27305 13714 27305 13780 27305 13780 27306 13714 27306 13715 27306 13780 27307 13715 27307 13781 27307 13781 27308 13715 27308 13716 27308 13781 27309 13716 27309 13782 27309 13782 27310 13716 27310 13717 27310 13782 27311 13717 27311 13783 27311 13783 27312 13717 27312 13718 27312 13783 27313 13718 27313 13784 27313 13784 27314 13718 27314 13719 27314 13784 27315 13719 27315 13785 27315 13785 27316 13719 27316 13720 27316 13785 27317 13720 27317 13786 27317 13786 27318 13720 27318 13721 27318 13786 27319 13721 27319 13787 27319 13787 27320 13721 27320 13722 27320 13787 27321 13722 27321 13788 27321 13788 27322 13722 27322 13723 27322 13788 27323 13723 27323 13789 27323 13789 27324 13723 27324 13724 27324 13789 27325 13724 27325 13790 27325 13790 27326 13724 27326 13725 27326 13790 27327 13725 27327 13791 27327 13791 27328 13725 27328 13726 27328 13791 27329 13726 27329 13792 27329 13792 27330 13726 27330 13727 27330 13792 27331 13727 27331 13793 27331 13793 27332 13727 27332 13728 27332 13793 27333 13728 27333 13794 27333 13794 27334 13728 27334 13729 27334 13794 27335 13729 27335 13795 27335 13795 27336 13729 27336 13730 27336 13795 27337 13730 27337 13796 27337 13796 27338 13730 27338 13731 27338 13796 27339 13731 27339 13797 27339 13797 27340 13731 27340 13732 27340 13797 27341 13732 27341 13798 27341 13798 27342 13732 27342 13733 27342 13798 27343 13733 27343 13799 27343 13799 27344 13733 27344 13734 27344 13799 27345 13734 27345 13800 27345 13800 27346 13734 27346 13735 27346 13800 27347 13735 27347 13801 27347 13801 27348 13735 27348 13736 27348 13801 27349 13736 27349 13802 27349 13802 27350 13736 27350 13737 27350 13802 27351 13737 27351 13803 27351 13803 27352 13737 27352 13738 27352 13803 27353 13738 27353 13804 27353 13804 27354 13738 27354 13739 27354 13804 27355 13739 27355 13805 27355 13805 27356 13739 27356 13740 27356 13805 27357 13740 27357 13806 27357 13806 27358 13740 27358 13741 27358 13806 27359 13741 27359 13807 27359 13807 27360 13741 27360 13742 27360 13807 27361 13742 27361 13808 27361 13808 27362 13742 27362 13743 27362 13808 27363 13743 27363 13809 27363 13809 27364 13743 27364 13744 27364 13809 27365 13744 27365 13810 27365 13810 27366 13744 27366 13745 27366 13810 27367 13745 27367 13811 27367 13811 27368 13745 27368 13746 27368 13811 27369 13746 27369 13812 27369 13812 27370 13746 27370 13747 27370 13812 27371 13747 27371 13813 27371 13813 27372 13747 27372 13748 27372 13813 27373 13748 27373 13814 27373 13814 27374 13748 27374 13749 27374 13814 27375 13749 27375 13815 27375 13815 27376 13749 27376 13750 27376 13815 27377 13750 27377 13816 27377 13816 27378 13750 27378 13751 27378 13816 27379 13751 27379 13817 27379 13817 27380 13751 27380 13752 27380 13817 27381 13752 27381 13818 27381 13818 27382 13752 27382 13753 27382 13818 27383 13753 27383 13819 27383 13819 27384 13753 27384 13754 27384 13819 27385 13754 27385 13820 27385 13820 27386 13754 27386 13755 27386 13820 27387 13755 27387 13821 27387 13821 27388 13755 27388 13756 27388 13821 27389 13756 27389 13822 27389 13822 27390 13756 27390 13757 27390 13822 27391 13757 27391 13823 27391 13823 27392 13757 27392 13758 27392 13823 27393 13758 27393 13824 27393 13824 27394 13758 27394 13759 27394 13824 27395 13759 27395 13825 27395 13825 27396 13759 27396 13760 27396 13825 27397 13760 27397 13826 27397 13826 27398 13760 27398 13761 27398 13826 27399 13761 27399 13827 27399 13827 27400 13761 27400 13762 27400 13827 27401 13762 27401 13763 27401 13763 27402 13762 27402 13698 27402 13828 27403 13763 27403 13829 27403 13829 27404 13763 27404 13764 27404 13829 27405 13764 27405 13830 27405 13830 27406 13764 27406 13765 27406 13830 27407 13765 27407 13831 27407 13831 27408 13765 27408 13766 27408 13831 27409 13766 27409 13832 27409 13832 27410 13766 27410 13767 27410 13832 27411 13767 27411 13833 27411 13833 27412 13767 27412 13768 27412 13833 27413 13768 27413 13834 27413 13834 27414 13768 27414 13769 27414 13834 27415 13769 27415 13835 27415 13835 27416 13769 27416 13770 27416 13835 27417 13770 27417 13836 27417 13836 27418 13770 27418 13771 27418 13836 27419 13771 27419 13837 27419 13837 27420 13771 27420 13772 27420 13837 27421 13772 27421 13838 27421 13838 27422 13772 27422 13773 27422 13838 27423 13773 27423 13839 27423 13839 27424 13773 27424 13774 27424 13839 27425 13774 27425 13840 27425 13840 27426 13774 27426 13775 27426 13840 27427 13775 27427 13841 27427 13841 27428 13775 27428 13776 27428 13841 27429 13776 27429 13842 27429 13842 27430 13776 27430 13777 27430 13842 27431 13777 27431 13843 27431 13843 27432 13777 27432 13778 27432 13843 27433 13778 27433 13844 27433 13844 27434 13778 27434 13779 27434 13844 27435 13779 27435 13845 27435 13845 27436 13779 27436 13780 27436 13845 27437 13780 27437 13846 27437 13846 27438 13780 27438 13781 27438 13846 27439 13781 27439 13847 27439 13847 27440 13781 27440 13782 27440 13847 27441 13782 27441 13848 27441 13848 27442 13782 27442 13783 27442 13848 27443 13783 27443 13849 27443 13849 27444 13783 27444 13784 27444 13849 27445 13784 27445 13850 27445 13850 27446 13784 27446 13785 27446 13850 27447 13785 27447 13851 27447 13851 27448 13785 27448 13786 27448 13851 27449 13786 27449 13852 27449 13852 27450 13786 27450 13787 27450 13852 27451 13787 27451 13853 27451 13853 27452 13787 27452 13788 27452 13853 27453 13788 27453 13854 27453 13854 27454 13788 27454 13789 27454 13854 27455 13789 27455 13855 27455 13855 27456 13789 27456 13790 27456 13855 27457 13790 27457 13856 27457 13856 27458 13790 27458 13791 27458 13856 27459 13791 27459 13857 27459 13857 27460 13791 27460 13792 27460 13857 27461 13792 27461 13858 27461 13858 27462 13792 27462 13793 27462 13858 27463 13793 27463 13859 27463 13859 27464 13793 27464 13794 27464 13859 27465 13794 27465 13860 27465 13860 27466 13794 27466 13795 27466 13860 27467 13795 27467 13861 27467 13861 27468 13795 27468 13796 27468 13861 27469 13796 27469 13862 27469 13862 27470 13796 27470 13797 27470 13862 27471 13797 27471 13863 27471 13863 27472 13797 27472 13798 27472 13863 27473 13798 27473 13864 27473 13864 27474 13798 27474 13799 27474 13864 27475 13799 27475 13865 27475 13865 27476 13799 27476 13800 27476 13865 27477 13800 27477 13866 27477 13866 27478 13800 27478 13801 27478 13866 27479 13801 27479 13867 27479 13867 27480 13801 27480 13802 27480 13867 27481 13802 27481 13868 27481 13868 27482 13802 27482 13803 27482 13868 27483 13803 27483 13869 27483 13869 27484 13803 27484 13804 27484 13869 27485 13804 27485 13870 27485 13870 27486 13804 27486 13805 27486 13870 27487 13805 27487 13871 27487 13871 27488 13805 27488 13806 27488 13871 27489 13806 27489 13872 27489 13872 27490 13806 27490 13807 27490 13872 27491 13807 27491 13873 27491 13873 27492 13807 27492 13808 27492 13873 27493 13808 27493 13874 27493 13874 27494 13808 27494 13809 27494 13874 27495 13809 27495 13875 27495 13875 27496 13809 27496 13810 27496 13875 27497 13810 27497 13876 27497 13876 27498 13810 27498 13811 27498 13876 27499 13811 27499 13877 27499 13877 27500 13811 27500 13812 27500 13877 27501 13812 27501 13878 27501 13878 27502 13812 27502 13813 27502 13878 27503 13813 27503 13879 27503 13879 27504 13813 27504 13814 27504 13879 27505 13814 27505 13880 27505 13880 27506 13814 27506 13815 27506 13880 27507 13815 27507 13881 27507 13881 27508 13815 27508 13816 27508 13881 27509 13816 27509 13882 27509 13882 27510 13816 27510 13817 27510 13882 27511 13817 27511 13883 27511 13883 27512 13817 27512 13818 27512 13883 27513 13818 27513 13884 27513 13884 27514 13818 27514 13819 27514 13884 27515 13819 27515 13885 27515 13885 27516 13819 27516 13820 27516 13885 27517 13820 27517 13886 27517 13886 27518 13820 27518 13821 27518 13886 27519 13821 27519 13887 27519 13887 27520 13821 27520 13822 27520 13887 27521 13822 27521 13888 27521 13888 27522 13822 27522 13823 27522 13888 27523 13823 27523 13889 27523 13889 27524 13823 27524 13824 27524 13889 27525 13824 27525 13890 27525 13890 27526 13824 27526 13825 27526 13890 27527 13825 27527 13891 27527 13891 27528 13825 27528 13826 27528 13891 27529 13826 27529 13892 27529 13892 27530 13826 27530 13827 27530 13892 27531 13827 27531 13828 27531 13828 27532 13827 27532 13763 27532 13893 27533 13828 27533 13894 27533 13894 27534 13828 27534 13829 27534 13894 27535 13829 27535 13895 27535 13895 27536 13829 27536 13830 27536 13895 27537 13830 27537 13896 27537 13896 27538 13830 27538 13831 27538 13896 27539 13831 27539 13897 27539 13897 27540 13831 27540 13832 27540 13897 27541 13832 27541 13898 27541 13898 27542 13832 27542 13833 27542 13898 27543 13833 27543 13899 27543 13899 27544 13833 27544 13834 27544 13899 27545 13834 27545 13900 27545 13900 27546 13834 27546 13835 27546 13900 27547 13835 27547 13901 27547 13901 27548 13835 27548 13836 27548 13901 27549 13836 27549 13902 27549 13902 27550 13836 27550 13837 27550 13902 27551 13837 27551 13903 27551 13903 27552 13837 27552 13838 27552 13903 27553 13838 27553 13904 27553 13904 27554 13838 27554 13839 27554 13904 27555 13839 27555 13905 27555 13905 27556 13839 27556 13840 27556 13905 27557 13840 27557 13906 27557 13906 27558 13840 27558 13841 27558 13906 27559 13841 27559 13907 27559 13907 27560 13841 27560 13842 27560 13907 27561 13842 27561 13908 27561 13908 27562 13842 27562 13843 27562 13908 27563 13843 27563 13909 27563 13909 27564 13843 27564 13844 27564 13909 27565 13844 27565 13910 27565 13910 27566 13844 27566 13845 27566 13910 27567 13845 27567 13911 27567 13911 27568 13845 27568 13846 27568 13911 27569 13846 27569 13912 27569 13912 27570 13846 27570 13847 27570 13912 27571 13847 27571 13913 27571 13913 27572 13847 27572 13848 27572 13913 27573 13848 27573 13914 27573 13914 27574 13848 27574 13849 27574 13914 27575 13849 27575 13915 27575 13915 27576 13849 27576 13850 27576 13915 27577 13850 27577 13916 27577 13916 27578 13850 27578 13851 27578 13916 27579 13851 27579 13917 27579 13917 27580 13851 27580 13852 27580 13917 27581 13852 27581 13918 27581 13918 27582 13852 27582 13853 27582 13918 27583 13853 27583 13919 27583 13919 27584 13853 27584 13854 27584 13919 27585 13854 27585 13920 27585 13920 27586 13854 27586 13855 27586 13920 27587 13855 27587 13921 27587 13921 27588 13855 27588 13856 27588 13921 27589 13856 27589 13922 27589 13922 27590 13856 27590 13857 27590 13922 27591 13857 27591 13923 27591 13923 27592 13857 27592 13858 27592 13923 27593 13858 27593 13924 27593 13924 27594 13858 27594 13859 27594 13924 27595 13859 27595 13925 27595 13925 27596 13859 27596 13860 27596 13925 27597 13860 27597 13926 27597 13926 27598 13860 27598 13861 27598 13926 27599 13861 27599 13927 27599 13927 27600 13861 27600 13862 27600 13927 27601 13862 27601 13928 27601 13928 27602 13862 27602 13863 27602 13928 27603 13863 27603 13929 27603 13929 27604 13863 27604 13864 27604 13929 27605 13864 27605 13930 27605 13930 27606 13864 27606 13865 27606 13930 27607 13865 27607 13931 27607 13931 27608 13865 27608 13866 27608 13931 27609 13866 27609 13932 27609 13932 27610 13866 27610 13867 27610 13932 27611 13867 27611 13933 27611 13933 27612 13867 27612 13868 27612 13933 27613 13868 27613 13934 27613 13934 27614 13868 27614 13869 27614 13934 27615 13869 27615 13935 27615 13935 27616 13869 27616 13870 27616 13935 27617 13870 27617 13936 27617 13936 27618 13870 27618 13871 27618 13936 27619 13871 27619 13937 27619 13937 27620 13871 27620 13872 27620 13937 27621 13872 27621 13938 27621 13938 27622 13872 27622 13873 27622 13938 27623 13873 27623 13939 27623 13939 27624 13873 27624 13874 27624 13939 27625 13874 27625 13940 27625 13940 27626 13874 27626 13875 27626 13940 27627 13875 27627 13941 27627 13941 27628 13875 27628 13876 27628 13941 27629 13876 27629 13942 27629 13942 27630 13876 27630 13877 27630 13942 27631 13877 27631 13943 27631 13943 27632 13877 27632 13878 27632 13943 27633 13878 27633 13944 27633 13944 27634 13878 27634 13879 27634 13944 27635 13879 27635 13945 27635 13945 27636 13879 27636 13880 27636 13945 27637 13880 27637 13946 27637 13946 27638 13880 27638 13881 27638 13946 27639 13881 27639 13947 27639 13947 27640 13881 27640 13882 27640 13947 27641 13882 27641 13948 27641 13948 27642 13882 27642 13883 27642 13948 27643 13883 27643 13949 27643 13949 27644 13883 27644 13884 27644 13949 27645 13884 27645 13950 27645 13950 27646 13884 27646 13885 27646 13950 27647 13885 27647 13951 27647 13951 27648 13885 27648 13886 27648 13951 27649 13886 27649 13952 27649 13952 27650 13886 27650 13887 27650 13952 27651 13887 27651 13953 27651 13953 27652 13887 27652 13888 27652 13953 27653 13888 27653 13954 27653 13954 27654 13888 27654 13889 27654 13954 27655 13889 27655 13955 27655 13955 27656 13889 27656 13890 27656 13955 27657 13890 27657 13956 27657 13956 27658 13890 27658 13891 27658 13956 27659 13891 27659 13957 27659 13957 27660 13891 27660 13892 27660 13957 27661 13892 27661 13893 27661 13893 27662 13892 27662 13828 27662 13958 27663 13893 27663 13959 27663 13959 27664 13893 27664 13894 27664 13959 27665 13894 27665 13960 27665 13960 27666 13894 27666 13895 27666 13960 27667 13895 27667 13961 27667 13961 27668 13895 27668 13896 27668 13961 27669 13896 27669 13962 27669 13962 27670 13896 27670 13897 27670 13962 27671 13897 27671 13963 27671 13963 27672 13897 27672 13898 27672 13963 27673 13898 27673 13964 27673 13964 27674 13898 27674 13899 27674 13964 27675 13899 27675 13965 27675 13965 27676 13899 27676 13900 27676 13965 27677 13900 27677 13966 27677 13966 27678 13900 27678 13901 27678 13966 27679 13901 27679 13967 27679 13967 27680 13901 27680 13902 27680 13967 27681 13902 27681 13968 27681 13968 27682 13902 27682 13903 27682 13968 27683 13903 27683 13969 27683 13969 27684 13903 27684 13904 27684 13969 27685 13904 27685 13970 27685 13970 27686 13904 27686 13905 27686 13970 27687 13905 27687 13971 27687 13971 27688 13905 27688 13906 27688 13971 27689 13906 27689 13972 27689 13972 27690 13906 27690 13907 27690 13972 27691 13907 27691 13973 27691 13973 27692 13907 27692 13908 27692 13973 27693 13908 27693 13974 27693 13974 27694 13908 27694 13909 27694 13974 27695 13909 27695 13975 27695 13975 27696 13909 27696 13910 27696 13975 27697 13910 27697 13976 27697 13976 27698 13910 27698 13911 27698 13976 27699 13911 27699 13977 27699 13977 27700 13911 27700 13912 27700 13977 27701 13912 27701 13978 27701 13978 27702 13912 27702 13913 27702 13978 27703 13913 27703 13979 27703 13979 27704 13913 27704 13914 27704 13979 27705 13914 27705 13980 27705 13980 27706 13914 27706 13915 27706 13980 27707 13915 27707 13981 27707 13981 27708 13915 27708 13916 27708 13981 27709 13916 27709 13982 27709 13982 27710 13916 27710 13917 27710 13982 27711 13917 27711 13983 27711 13983 27712 13917 27712 13918 27712 13983 27713 13918 27713 13984 27713 13984 27714 13918 27714 13919 27714 13984 27715 13919 27715 13985 27715 13985 27716 13919 27716 13920 27716 13985 27717 13920 27717 13986 27717 13986 27718 13920 27718 13921 27718 13986 27719 13921 27719 13987 27719 13987 27720 13921 27720 13922 27720 13987 27721 13922 27721 13988 27721 13988 27722 13922 27722 13923 27722 13988 27723 13923 27723 13989 27723 13989 27724 13923 27724 13924 27724 13989 27725 13924 27725 13990 27725 13990 27726 13924 27726 13925 27726 13990 27727 13925 27727 13991 27727 13991 27728 13925 27728 13926 27728 13991 27729 13926 27729 13992 27729 13992 27730 13926 27730 13927 27730 13992 27731 13927 27731 13993 27731 13993 27732 13927 27732 13928 27732 13993 27733 13928 27733 13994 27733 13994 27734 13928 27734 13929 27734 13994 27735 13929 27735 13995 27735 13995 27736 13929 27736 13930 27736 13995 27737 13930 27737 13996 27737 13996 27738 13930 27738 13931 27738 13996 27739 13931 27739 13997 27739 13997 27740 13931 27740 13932 27740 13997 27741 13932 27741 13998 27741 13998 27742 13932 27742 13933 27742 13998 27743 13933 27743 13999 27743 13999 27744 13933 27744 13934 27744 13999 27745 13934 27745 14000 27745 14000 27746 13934 27746 13935 27746 14000 27747 13935 27747 14001 27747 14001 27748 13935 27748 13936 27748 14001 27749 13936 27749 14002 27749 14002 27750 13936 27750 13937 27750 14002 27751 13937 27751 14003 27751 14003 27752 13937 27752 13938 27752 14003 27753 13938 27753 14004 27753 14004 27754 13938 27754 13939 27754 14004 27755 13939 27755 14005 27755 14005 27756 13939 27756 13940 27756 14005 27757 13940 27757 14006 27757 14006 27758 13940 27758 13941 27758 14006 27759 13941 27759 14007 27759 14007 27760 13941 27760 13942 27760 14007 27761 13942 27761 14008 27761 14008 27762 13942 27762 13943 27762 14008 27763 13943 27763 14009 27763 14009 27764 13943 27764 13944 27764 14009 27765 13944 27765 14010 27765 14010 27766 13944 27766 13945 27766 14010 27767 13945 27767 14011 27767 14011 27768 13945 27768 13946 27768 14011 27769 13946 27769 14012 27769 14012 27770 13946 27770 13947 27770 14012 27771 13947 27771 14013 27771 14013 27772 13947 27772 13948 27772 14013 27773 13948 27773 14014 27773 14014 27774 13948 27774 13949 27774 14014 27775 13949 27775 14015 27775 14015 27776 13949 27776 13950 27776 14015 27777 13950 27777 14016 27777 14016 27778 13950 27778 13951 27778 14016 27779 13951 27779 14017 27779 14017 27780 13951 27780 13952 27780 14017 27781 13952 27781 14018 27781 14018 27782 13952 27782 13953 27782 14018 27783 13953 27783 14019 27783 14019 27784 13953 27784 13954 27784 14019 27785 13954 27785 14020 27785 14020 27786 13954 27786 13955 27786 14020 27787 13955 27787 14021 27787 14021 27788 13955 27788 13956 27788 14021 27789 13956 27789 14022 27789 14022 27790 13956 27790 13957 27790 14022 27791 13957 27791 13958 27791 13958 27792 13957 27792 13893 27792 14023 27793 13958 27793 14024 27793 14024 27794 13958 27794 13959 27794 14024 27795 13959 27795 14025 27795 14025 27796 13959 27796 13960 27796 14025 27797 13960 27797 14026 27797 14026 27798 13960 27798 13961 27798 14026 27799 13961 27799 14027 27799 14027 27800 13961 27800 13962 27800 14027 27801 13962 27801 14028 27801 14028 27802 13962 27802 13963 27802 14028 27803 13963 27803 14029 27803 14029 27804 13963 27804 13964 27804 14029 27805 13964 27805 14030 27805 14030 27806 13964 27806 13965 27806 14030 27807 13965 27807 14031 27807 14031 27808 13965 27808 13966 27808 14031 27809 13966 27809 14032 27809 14032 27810 13966 27810 13967 27810 14032 27811 13967 27811 14033 27811 14033 27812 13967 27812 13968 27812 14033 27813 13968 27813 14034 27813 14034 27814 13968 27814 13969 27814 14034 27815 13969 27815 14035 27815 14035 27816 13969 27816 13970 27816 14035 27817 13970 27817 14036 27817 14036 27818 13970 27818 13971 27818 14036 27819 13971 27819 14037 27819 14037 27820 13971 27820 13972 27820 14037 27821 13972 27821 14038 27821 14038 27822 13972 27822 13973 27822 14038 27823 13973 27823 14039 27823 14039 27824 13973 27824 13974 27824 14039 27825 13974 27825 14040 27825 14040 27826 13974 27826 13975 27826 14040 27827 13975 27827 14041 27827 14041 27828 13975 27828 13976 27828 14041 27829 13976 27829 14042 27829 14042 27830 13976 27830 13977 27830 14042 27831 13977 27831 14043 27831 14043 27832 13977 27832 13978 27832 14043 27833 13978 27833 14044 27833 14044 27834 13978 27834 13979 27834 14044 27835 13979 27835 14045 27835 14045 27836 13979 27836 13980 27836 14045 27837 13980 27837 14046 27837 14046 27838 13980 27838 13981 27838 14046 27839 13981 27839 14047 27839 14047 27840 13981 27840 13982 27840 14047 27841 13982 27841 14048 27841 14048 27842 13982 27842 13983 27842 14048 27843 13983 27843 14049 27843 14049 27844 13983 27844 13984 27844 14049 27845 13984 27845 14050 27845 14050 27846 13984 27846 13985 27846 14050 27847 13985 27847 14051 27847 14051 27848 13985 27848 13986 27848 14051 27849 13986 27849 14052 27849 14052 27850 13986 27850 13987 27850 14052 27851 13987 27851 14053 27851 14053 27852 13987 27852 13988 27852 14053 27853 13988 27853 14054 27853 14054 27854 13988 27854 13989 27854 14054 27855 13989 27855 14055 27855 14055 27856 13989 27856 13990 27856 14055 27857 13990 27857 14056 27857 14056 27858 13990 27858 13991 27858 14056 27859 13991 27859 14057 27859 14057 27860 13991 27860 13992 27860 14057 27861 13992 27861 14058 27861 14058 27862 13992 27862 13993 27862 14058 27863 13993 27863 14059 27863 14059 27864 13993 27864 13994 27864 14059 27865 13994 27865 14060 27865 14060 27866 13994 27866 13995 27866 14060 27867 13995 27867 14061 27867 14061 27868 13995 27868 13996 27868 14061 27869 13996 27869 14062 27869 14062 27870 13996 27870 13997 27870 14062 27871 13997 27871 14063 27871 14063 27872 13997 27872 13998 27872 14063 27873 13998 27873 14064 27873 14064 27874 13998 27874 13999 27874 14064 27875 13999 27875 14065 27875 14065 27876 13999 27876 14000 27876 14065 27877 14000 27877 14066 27877 14066 27878 14000 27878 14001 27878 14066 27879 14001 27879 14067 27879 14067 27880 14001 27880 14002 27880 14067 27881 14002 27881 14068 27881 14068 27882 14002 27882 14003 27882 14068 27883 14003 27883 14069 27883 14069 27884 14003 27884 14004 27884 14069 27885 14004 27885 14070 27885 14070 27886 14004 27886 14005 27886 14070 27887 14005 27887 14071 27887 14071 27888 14005 27888 14006 27888 14071 27889 14006 27889 14072 27889 14072 27890 14006 27890 14007 27890 14072 27891 14007 27891 14073 27891 14073 27892 14007 27892 14008 27892 14073 27893 14008 27893 14074 27893 14074 27894 14008 27894 14009 27894 14074 27895 14009 27895 14075 27895 14075 27896 14009 27896 14010 27896 14075 27897 14010 27897 14076 27897 14076 27898 14010 27898 14011 27898 14076 27899 14011 27899 14077 27899 14077 27900 14011 27900 14012 27900 14077 27901 14012 27901 14078 27901 14078 27902 14012 27902 14013 27902 14078 27903 14013 27903 14079 27903 14079 27904 14013 27904 14014 27904 14079 27905 14014 27905 14080 27905 14080 27906 14014 27906 14015 27906 14080 27907 14015 27907 14081 27907 14081 27908 14015 27908 14016 27908 14081 27909 14016 27909 14082 27909 14082 27910 14016 27910 14017 27910 14082 27911 14017 27911 14083 27911 14083 27912 14017 27912 14018 27912 14083 27913 14018 27913 14084 27913 14084 27914 14018 27914 14019 27914 14084 27915 14019 27915 14085 27915 14085 27916 14019 27916 14020 27916 14085 27917 14020 27917 14086 27917 14086 27918 14020 27918 14021 27918 14086 27919 14021 27919 14087 27919 14087 27920 14021 27920 14022 27920 14087 27921 14022 27921 14023 27921 14023 27922 14022 27922 13958 27922 13423 27923 14023 27923 13422 27923 13422 27924 14023 27924 14024 27924 13422 27925 14024 27925 13421 27925 13421 27926 14024 27926 14025 27926 13421 27927 14025 27927 13420 27927 13420 27928 14025 27928 14026 27928 13420 27929 14026 27929 13419 27929 13419 27930 14026 27930 14027 27930 13419 27931 14027 27931 13418 27931 13418 27932 14027 27932 14028 27932 13418 27933 14028 27933 13417 27933 13417 27934 14028 27934 14029 27934 13417 27935 14029 27935 13416 27935 13416 27936 14029 27936 14030 27936 13416 27937 14030 27937 13415 27937 13415 27938 14030 27938 14031 27938 13415 27939 14031 27939 13414 27939 13414 27940 14031 27940 14032 27940 13414 27941 14032 27941 13413 27941 13413 27942 14032 27942 14033 27942 13413 27943 14033 27943 13412 27943 13412 27944 14033 27944 14034 27944 13412 27945 14034 27945 13411 27945 13411 27946 14034 27946 14035 27946 13411 27947 14035 27947 13410 27947 13410 27948 14035 27948 14036 27948 13410 27949 14036 27949 13409 27949 13409 27950 14036 27950 14037 27950 13409 27951 14037 27951 13408 27951 13408 27952 14037 27952 14038 27952 13408 27953 14038 27953 13407 27953 13407 27954 14038 27954 14039 27954 13407 27955 14039 27955 13406 27955 13406 27956 14039 27956 14040 27956 13406 27957 14040 27957 13405 27957 13405 27958 14040 27958 14041 27958 13405 27959 14041 27959 13404 27959 13404 27960 14041 27960 14042 27960 13404 27961 14042 27961 13403 27961 13403 27962 14042 27962 14043 27962 13403 27963 14043 27963 13402 27963 13402 27964 14043 27964 14044 27964 13402 27965 14044 27965 13401 27965 13401 27966 14044 27966 14045 27966 13401 27967 14045 27967 13400 27967 13400 27968 14045 27968 14046 27968 13400 27969 14046 27969 13399 27969 13399 27970 14046 27970 14047 27970 13399 27971 14047 27971 13398 27971 13398 27972 14047 27972 14048 27972 13398 27973 14048 27973 13397 27973 13397 27974 14048 27974 14049 27974 13397 27975 14049 27975 13396 27975 13396 27976 14049 27976 14050 27976 13396 27977 14050 27977 13395 27977 13395 27978 14050 27978 14051 27978 13395 27979 14051 27979 13394 27979 13394 27980 14051 27980 14052 27980 13394 27981 14052 27981 13393 27981 13393 27982 14052 27982 14053 27982 13393 27983 14053 27983 13392 27983 13392 27984 14053 27984 14054 27984 13392 27985 14054 27985 13456 27985 13456 27986 14054 27986 14055 27986 13456 27987 14055 27987 13455 27987 13455 27988 14055 27988 14056 27988 13455 27989 14056 27989 13454 27989 13454 27990 14056 27990 14057 27990 13454 27991 14057 27991 13453 27991 13453 27992 14057 27992 14058 27992 13453 27993 14058 27993 13452 27993 13452 27994 14058 27994 14059 27994 13452 27995 14059 27995 13451 27995 13451 27996 14059 27996 14060 27996 13451 27997 14060 27997 13450 27997 13450 27998 14060 27998 14061 27998 13450 27999 14061 27999 13449 27999 13449 28000 14061 28000 14062 28000 13449 28001 14062 28001 13448 28001 13448 28002 14062 28002 14063 28002 13448 28003 14063 28003 13447 28003 13447 28004 14063 28004 14064 28004 13447 28005 14064 28005 13446 28005 13446 28006 14064 28006 14065 28006 13446 28007 14065 28007 13445 28007 13445 28008 14065 28008 14066 28008 13445 28009 14066 28009 13444 28009 13444 28010 14066 28010 14067 28010 13444 28011 14067 28011 13443 28011 13443 28012 14067 28012 14068 28012 13443 28013 14068 28013 13442 28013 13442 28014 14068 28014 14069 28014 13442 28015 14069 28015 13441 28015 13441 28016 14069 28016 14070 28016 13441 28017 14070 28017 13440 28017 13440 28018 14070 28018 14071 28018 13440 28019 14071 28019 13439 28019 13439 28020 14071 28020 14072 28020 13439 28021 14072 28021 13438 28021 13438 28022 14072 28022 14073 28022 13438 28023 14073 28023 13437 28023 13437 28024 14073 28024 14074 28024 13437 28025 14074 28025 13436 28025 13436 28026 14074 28026 14075 28026 13436 28027 14075 28027 13435 28027 13435 28028 14075 28028 14076 28028 13435 28029 14076 28029 13434 28029 13434 28030 14076 28030 14077 28030 13434 28031 14077 28031 13433 28031 13433 28032 14077 28032 14078 28032 13433 28033 14078 28033 13432 28033 13432 28034 14078 28034 14079 28034 13432 28035 14079 28035 13431 28035 13431 28036 14079 28036 14080 28036 13431 28037 14080 28037 13430 28037 13430 28038 14080 28038 14081 28038 13430 28039 14081 28039 13429 28039 13429 28040 14081 28040 14082 28040 13429 28041 14082 28041 13428 28041 13428 28042 14082 28042 14083 28042 13428 28043 14083 28043 13427 28043 13427 28044 14083 28044 14084 28044 13427 28045 14084 28045 13426 28045 13426 28046 14084 28046 14085 28046 13426 28047 14085 28047 13425 28047 13425 28048 14085 28048 14086 28048 13425 28049 14086 28049 13424 28049 13424 28050 14086 28050 14087 28050 13424 28051 14087 28051 13423 28051 13423 28052 14087 28052 14023 28052 13629 28053 13628 28053 14088 28053 14088 28054 13628 28054 14089 28054 13461 28055 14090 28055 13459 28055 13459 28056 14090 28056 14089 28056 13459 28057 14089 28057 13457 28057 13457 28058 14089 28058 13628 28058 13461 28059 13463 28059 14090 28059 14090 28060 13463 28060 13467 28060 14090 28061 13467 28061 14091 28061 13467 28062 13466 28062 14091 28062 14091 28063 13466 28063 13470 28063 14091 28064 13470 28064 14092 28064 13476 28065 14093 28065 13477 28065 13477 28066 14093 28066 14092 28066 13477 28067 14092 28067 13469 28067 13469 28068 14092 28068 13470 28068 13476 28069 13474 28069 14093 28069 14093 28070 13474 28070 13472 28070 14093 28071 13472 28071 14094 28071 13480 28072 14095 28072 13478 28072 13478 28073 14095 28073 14094 28073 13478 28074 14094 28074 13471 28074 13471 28075 14094 28075 13472 28075 13480 28076 13482 28076 14095 28076 14095 28077 13482 28077 13484 28077 14095 28078 13484 28078 14096 28078 13484 28079 13489 28079 14096 28079 14096 28080 13489 28080 13488 28080 14096 28081 13488 28081 14097 28081 13493 28082 14098 28082 13494 28082 13494 28083 14098 28083 14097 28083 13494 28084 14097 28084 13486 28084 13486 28085 14097 28085 13488 28085 13493 28086 13491 28086 14098 28086 14098 28087 13491 28087 13497 28087 14098 28088 13497 28088 14099 28088 13503 28089 14100 28089 13504 28089 13504 28090 14100 28090 14099 28090 13504 28091 14099 28091 13496 28091 13496 28092 14099 28092 13497 28092 13503 28093 13501 28093 14100 28093 14100 28094 13501 28094 13499 28094 14100 28095 13499 28095 14101 28095 13499 28096 13498 28096 14101 28096 14101 28097 13498 28097 13505 28097 14101 28098 13505 28098 14102 28098 13505 28099 13507 28099 14102 28099 14102 28100 13507 28100 13509 28100 14102 28101 13509 28101 14103 28101 14103 28102 13509 28102 13510 28102 14103 28103 13510 28103 14104 28103 14104 28104 13510 28104 13512 28104 14104 28105 13512 28105 13514 28105 13518 28106 14105 28106 13517 28106 13517 28107 14105 28107 14104 28107 13517 28108 14104 28108 13515 28108 13515 28109 14104 28109 13514 28109 13518 28110 13520 28110 14105 28110 14105 28111 13520 28111 13522 28111 14105 28112 13522 28112 14106 28112 13528 28113 14107 28113 13530 28113 13530 28114 14107 28114 14106 28114 13530 28115 14106 28115 13531 28115 13531 28116 14106 28116 13522 28116 13528 28117 13526 28117 14107 28117 14107 28118 13526 28118 13524 28118 14107 28119 13524 28119 14108 28119 13524 28120 13523 28120 14108 28120 14108 28121 13523 28121 13532 28121 14108 28122 13532 28122 14109 28122 13537 28123 14110 28123 13536 28123 13536 28124 14110 28124 14109 28124 13536 28125 14109 28125 13534 28125 13534 28126 14109 28126 13532 28126 13537 28127 13539 28127 14110 28127 14110 28128 13539 28128 13541 28128 14110 28129 13541 28129 14111 28129 13547 28130 14112 28130 13549 28130 13549 28131 14112 28131 14111 28131 13549 28132 14111 28132 13550 28132 13550 28133 14111 28133 13541 28133 13547 28134 13545 28134 14112 28134 14112 28135 13545 28135 13543 28135 14112 28136 13543 28136 14113 28136 13543 28137 13542 28137 14113 28137 14113 28138 13542 28138 13551 28138 14113 28139 13551 28139 14114 28139 13556 28140 14115 28140 13555 28140 13555 28141 14115 28141 14114 28141 13555 28142 14114 28142 13553 28142 13553 28143 14114 28143 13551 28143 13556 28144 13558 28144 14115 28144 14115 28145 13558 28145 13560 28145 14115 28146 13560 28146 14116 28146 13564 28147 14117 28147 13563 28147 13563 28148 14117 28148 14116 28148 13563 28149 14116 28149 13561 28149 13561 28150 14116 28150 13560 28150 13564 28151 13566 28151 14117 28151 14117 28152 13566 28152 13568 28152 14117 28153 13568 28153 14118 28153 13572 28154 14119 28154 13574 28154 13574 28155 14119 28155 14118 28155 13574 28156 14118 28156 13575 28156 13575 28157 14118 28157 13568 28157 13572 28158 13570 28158 14119 28158 14119 28159 13570 28159 13578 28159 14119 28160 13578 28160 14120 28160 13578 28161 13577 28161 14120 28161 14120 28162 13577 28162 13581 28162 14120 28163 13581 28163 14121 28163 13587 28164 14122 28164 13588 28164 13588 28165 14122 28165 14121 28165 13588 28166 14121 28166 13580 28166 13580 28167 14121 28167 13581 28167 13587 28168 13585 28168 14122 28168 14122 28169 13585 28169 13583 28169 14122 28170 13583 28170 14123 28170 13583 28171 13582 28171 14123 28171 14123 28172 13582 28172 13589 28172 14123 28173 13589 28173 14124 28173 13595 28174 14125 28174 13593 28174 13593 28175 14125 28175 14124 28175 13593 28176 14124 28176 13591 28176 13591 28177 14124 28177 13589 28177 13595 28178 13600 28178 14125 28178 14125 28179 13600 28179 13599 28179 14125 28180 13599 28180 14126 28180 13606 28181 14127 28181 13607 28181 13607 28182 14127 28182 14126 28182 13607 28183 14126 28183 13597 28183 13597 28184 14126 28184 13599 28184 13606 28185 13604 28185 14127 28185 14127 28186 13604 28186 13602 28186 14127 28187 13602 28187 14128 28187 13610 28188 14129 28188 13608 28188 13608 28189 14129 28189 14128 28189 13608 28190 14128 28190 13601 28190 13601 28191 14128 28191 13602 28191 13610 28192 13612 28192 14129 28192 14129 28193 13612 28193 13614 28193 14129 28194 13614 28194 14130 28194 13614 28195 13619 28195 14130 28195 14130 28196 13619 28196 13618 28196 14130 28197 13618 28197 14131 28197 13618 28198 13616 28198 14131 28198 14131 28199 13616 28199 13624 28199 14131 28200 13624 28200 14132 28200 14132 28201 13624 28201 13623 28201 14132 28202 13623 28202 14133 28202 14133 28203 13623 28203 13621 28203 14133 28204 13621 28204 13627 28204 13627 28205 13626 28205 14133 28205 14133 28206 13626 28206 13632 28206 14133 28207 13632 28207 14088 28207 14088 28208 13632 28208 13631 28208 14088 28209 13631 28209 13629 28209 14171 28245 14172 28245 14106 28245 14106 28246 14172 28246 14105 28246 14173 28247 14104 28247 14174 28247 14174 28248 14104 28248 14105 28248 14174 28249 14105 28249 14175 28249 14175 28250 14105 28250 14172 28250 14176 28251 14177 28251 14113 28251 14113 28252 14177 28252 14178 28252 14113 28253 14178 28253 14112 28253 14112 28254 14178 28254 14179 28254 14112 28255 14179 28255 14111 28255 14111 28256 14179 28256 14180 28256 14111 28257 14180 28257 14181 28257 14182 28258 14183 28258 14108 28258 14108 28259 14183 28259 14107 28259 14184 28260 14092 28260 14185 28260 14185 28261 14092 28261 14093 28261 14185 28262 14093 28262 14186 28262 14186 28263 14093 28263 14187 28263 14188 28264 14189 28264 14116 28264 14116 28265 14189 28265 14190 28265 14116 28266 14190 28266 14115 28266 14115 28267 14190 28267 14191 28267 14115 28268 14191 28268 14192 28268 14181 28269 14193 28269 14111 28269 14111 28270 14193 28270 14194 28270 14111 28271 14194 28271 14110 28271 14110 28272 14194 28272 14195 28272 14110 28273 14195 28273 14109 28273 14109 28274 14195 28274 14196 28274 14109 28275 14196 28275 14197 28275 14183 28276 14198 28276 14107 28276 14107 28277 14198 28277 14199 28277 14107 28278 14199 28278 14106 28278 14106 28279 14199 28279 14200 28279 14106 28280 14200 28280 14171 28280 14201 28281 14202 28281 14131 28281 14203 28282 14204 28282 14129 28282 14129 28283 14204 28283 14205 28283 14129 28284 14205 28284 14128 28284 14128 28285 14205 28285 14206 28285 14128 28286 14206 28286 14127 28286 14127 28287 14206 28287 14207 28287 14127 28288 14207 28288 14208 28288 14209 28289 14124 28289 14210 28289 14210 28290 14124 28290 14125 28290 14210 28291 14125 28291 14211 28291 14211 28292 14125 28292 14212 28292 14188 28293 14116 28293 14213 28293 14213 28294 14116 28294 14117 28294 14213 28295 14117 28295 14214 28295 14192 28296 14215 28296 14115 28296 14115 28297 14215 28297 14216 28297 14115 28298 14216 28298 14114 28298 14114 28299 14216 28299 14217 28299 14114 28300 14217 28300 14113 28300 14113 28301 14217 28301 14218 28301 14113 28302 14218 28302 14176 28302 14197 28303 14219 28303 14109 28303 14109 28304 14219 28304 14220 28304 14109 28305 14220 28305 14108 28305 14108 28306 14220 28306 14221 28306 14108 28307 14221 28307 14182 28307 14222 28308 14101 28308 14223 28308 14223 28309 14101 28309 14102 28309 14223 28310 14102 28310 14224 28310 14222 28311 14225 28311 14101 28311 14101 28312 14225 28312 14226 28312 14101 28313 14226 28313 14100 28313 14227 28314 14228 28314 14090 28314 14090 28315 14228 28315 14089 28315 14131 28316 14202 28316 14130 28316 14130 28317 14202 28317 14229 28317 14130 28318 14229 28318 14129 28318 14129 28319 14229 28319 14230 28319 14129 28320 14230 28320 14203 28320 14173 28321 14231 28321 14104 28321 14104 28322 14231 28322 14232 28322 14104 28323 14232 28323 14103 28323 14233 28324 14234 28324 14099 28324 14235 28325 14236 28325 14095 28325 14095 28326 14236 28326 14237 28326 14095 28327 14237 28327 14094 28327 14094 28328 14237 28328 14238 28328 14094 28329 14238 28329 14093 28329 14093 28330 14238 28330 14239 28330 14093 28331 14239 28331 14187 28331 14184 28332 14240 28332 14092 28332 14092 28333 14240 28333 14241 28333 14092 28334 14241 28334 14091 28334 14208 28335 14242 28335 14127 28335 14127 28336 14242 28336 14243 28336 14127 28337 14243 28337 14126 28337 14126 28338 14243 28338 14244 28338 14126 28339 14244 28339 14125 28339 14125 28340 14244 28340 14245 28340 14125 28341 14245 28341 14212 28341 14209 28342 14246 28342 14124 28342 14124 28343 14246 28343 14247 28343 14124 28344 14247 28344 14123 28344 14214 28345 14117 28345 14248 28345 14248 28346 14117 28346 14118 28346 14248 28347 14118 28347 14249 28347 14232 28348 14250 28348 14103 28348 14103 28349 14250 28349 14251 28349 14103 28350 14251 28350 14102 28350 14102 28351 14251 28351 14252 28351 14102 28352 14252 28352 14224 28352 14099 28353 14234 28353 14098 28353 14241 28354 14253 28354 14091 28354 14091 28355 14253 28355 14254 28355 14091 28356 14254 28356 14090 28356 14090 28357 14254 28357 14255 28357 14090 28358 14255 28358 14227 28358 14256 28359 14132 28359 14257 28359 14257 28360 14132 28360 14133 28360 14258 28361 14259 28361 14122 28361 14122 28362 14259 28362 14121 28362 14119 28363 14260 28363 14118 28363 14118 28364 14260 28364 14261 28364 14118 28365 14261 28365 14249 28365 14262 28366 14263 28366 14097 28366 14263 28367 14264 28367 14097 28367 14097 28368 14264 28368 14265 28368 14097 28369 14265 28369 14096 28369 14096 28370 14265 28370 14266 28370 14096 28371 14266 28371 14095 28371 14095 28372 14266 28372 14267 28372 14095 28373 14267 28373 14235 28373 14228 28374 14268 28374 14089 28374 14089 28375 14268 28375 14269 28375 14089 28376 14269 28376 14088 28376 14269 28377 14270 28377 14088 28377 14088 28378 14270 28378 14271 28378 14088 28379 14271 28379 14133 28379 14133 28380 14271 28380 14272 28380 14133 28381 14272 28381 14257 28381 14256 28382 14273 28382 14132 28382 14132 28383 14273 28383 14274 28383 14132 28384 14274 28384 14131 28384 14131 28385 14274 28385 14275 28385 14131 28386 14275 28386 14201 28386 14276 28387 14120 28387 14277 28387 14277 28388 14120 28388 14121 28388 14277 28389 14121 28389 14278 28389 14278 28390 14121 28390 14259 28390 14276 28391 14279 28391 14120 28391 14120 28392 14279 28392 14280 28392 14120 28393 14280 28393 14119 28393 14119 28394 14280 28394 14281 28394 14119 28395 14281 28395 14260 28395 14226 28396 14282 28396 14100 28396 14100 28397 14282 28397 14283 28397 14100 28398 14283 28398 14099 28398 14099 28399 14283 28399 14284 28399 14099 28400 14284 28400 14233 28400 14234 28401 14285 28401 14098 28401 14098 28402 14285 28402 14286 28402 14098 28403 14286 28403 14097 28403 14097 28404 14286 28404 14287 28404 14097 28405 14287 28405 14262 28405 14247 28406 14288 28406 14123 28406 14123 28407 14288 28407 14289 28407 14123 28408 14289 28408 14122 28408 14122 28409 14289 28409 14290 28409 14122 28410 14290 28410 14258 28410 14263 28521 14364 28521 14264 28521 14264 28522 14364 28522 14365 28522 14264 28523 14365 28523 14265 28523 14265 28524 14365 28524 14266 28524 14266 28525 14365 28525 14366 28525 14266 28526 14366 28526 14267 28526 14367 28527 14236 28527 14366 28527 14366 28528 14236 28528 14235 28528 14366 28529 14235 28529 14267 28529 14187 28530 14239 28530 14368 28530 14368 28531 14239 28531 14238 28531 14368 28532 14238 28532 14367 28532 14367 28533 14238 28533 14237 28533 14367 28534 14237 28534 14236 28534 14187 28535 14368 28535 14186 28535 14186 28536 14368 28536 14369 28536 14186 28537 14369 28537 14185 28537 14185 28538 14369 28538 14184 28538 14184 28539 14369 28539 14370 28539 14184 28540 14370 28540 14240 28540 14371 28541 14253 28541 14370 28541 14370 28542 14253 28542 14241 28542 14370 28543 14241 28543 14240 28543 14228 28544 14227 28544 14372 28544 14372 28545 14227 28545 14255 28545 14372 28546 14255 28546 14371 28546 14371 28547 14255 28547 14254 28547 14371 28548 14254 28548 14253 28548 14228 28549 14372 28549 14268 28549 14268 28550 14372 28550 14373 28550 14268 28551 14373 28551 14269 28551 14269 28552 14373 28552 14270 28552 14270 28553 14373 28553 14374 28553 14270 28554 14374 28554 14271 28554 14271 28555 14374 28555 14272 28555 14272 28556 14374 28556 14375 28556 14272 28557 14375 28557 14257 28557 14257 28558 14375 28558 14256 28558 14256 28559 14375 28559 14376 28559 14256 28560 14376 28560 14273 28560 14377 28561 14275 28561 14376 28561 14376 28562 14275 28562 14274 28562 14376 28563 14274 28563 14273 28563 14378 28564 14202 28564 14377 28564 14377 28565 14202 28565 14201 28565 14377 28566 14201 28566 14275 28566 14379 28567 14230 28567 14378 28567 14378 28568 14230 28568 14229 28568 14378 28569 14229 28569 14202 28569 14206 28570 14205 28570 14380 28570 14380 28571 14205 28571 14204 28571 14380 28572 14204 28572 14379 28572 14379 28573 14204 28573 14203 28573 14379 28574 14203 28574 14230 28574 14206 28575 14380 28575 14207 28575 14207 28576 14380 28576 14381 28576 14207 28577 14381 28577 14208 28577 14208 28578 14381 28578 14242 28578 14242 28579 14381 28579 14382 28579 14242 28580 14382 28580 14243 28580 14383 28581 14245 28581 14382 28581 14382 28582 14245 28582 14244 28582 14382 28583 14244 28583 14243 28583 14209 28584 14210 28584 14384 28584 14384 28585 14210 28585 14211 28585 14384 28586 14211 28586 14383 28586 14383 28587 14211 28587 14212 28587 14383 28588 14212 28588 14245 28588 14209 28589 14384 28589 14246 28589 14246 28590 14384 28590 14385 28590 14246 28591 14385 28591 14247 28591 14247 28592 14385 28592 14288 28592 14288 28593 14385 28593 14386 28593 14288 28594 14386 28594 14289 28594 14387 28595 14258 28595 14386 28595 14386 28596 14258 28596 14290 28596 14386 28597 14290 28597 14289 28597 14276 28598 14277 28598 14388 28598 14388 28599 14277 28599 14278 28599 14388 28600 14278 28600 14387 28600 14387 28601 14278 28601 14259 28601 14387 28602 14259 28602 14258 28602 14276 28603 14388 28603 14279 28603 14279 28604 14388 28604 14389 28604 14279 28605 14389 28605 14280 28605 14280 28606 14389 28606 14281 28606 14281 28607 14389 28607 14390 28607 14281 28608 14390 28608 14260 28608 14260 28609 14390 28609 14261 28609 14261 28610 14390 28610 14391 28610 14261 28611 14391 28611 14249 28611 14392 28612 14214 28612 14391 28612 14391 28613 14214 28613 14248 28613 14391 28614 14248 28614 14249 28614 14190 28615 14189 28615 14393 28615 14393 28616 14189 28616 14188 28616 14393 28617 14188 28617 14392 28617 14392 28618 14188 28618 14213 28618 14392 28619 14213 28619 14214 28619 14190 28620 14393 28620 14191 28620 14191 28621 14393 28621 14394 28621 14191 28622 14394 28622 14192 28622 14192 28623 14394 28623 14215 28623 14215 28624 14394 28624 14395 28624 14215 28625 14395 28625 14216 28625 14396 28626 14218 28626 14395 28626 14395 28627 14218 28627 14217 28627 14395 28628 14217 28628 14216 28628 14179 28629 14178 28629 14397 28629 14397 28630 14178 28630 14177 28630 14397 28631 14177 28631 14396 28631 14396 28632 14177 28632 14176 28632 14396 28633 14176 28633 14218 28633 14179 28634 14397 28634 14180 28634 14180 28635 14397 28635 14398 28635 14180 28636 14398 28636 14181 28636 14181 28637 14398 28637 14193 28637 14193 28638 14398 28638 14399 28638 14193 28639 14399 28639 14194 28639 14400 28640 14196 28640 14399 28640 14399 28641 14196 28641 14195 28641 14399 28642 14195 28642 14194 28642 14221 28643 14220 28643 14401 28643 14401 28644 14220 28644 14219 28644 14401 28645 14219 28645 14400 28645 14400 28646 14219 28646 14197 28646 14400 28647 14197 28647 14196 28647 14221 28648 14401 28648 14182 28648 14182 28649 14401 28649 14402 28649 14182 28650 14402 28650 14183 28650 14183 28651 14402 28651 14198 28651 14198 28652 14402 28652 14403 28652 14198 28653 14403 28653 14199 28653 14404 28654 14171 28654 14403 28654 14403 28655 14171 28655 14200 28655 14403 28656 14200 28656 14199 28656 14405 28657 14175 28657 14404 28657 14404 28658 14175 28658 14172 28658 14404 28659 14172 28659 14171 28659 14232 28660 14231 28660 14406 28660 14406 28661 14231 28661 14173 28661 14406 28662 14173 28662 14405 28662 14405 28663 14173 28663 14174 28663 14405 28664 14174 28664 14175 28664 14232 28665 14406 28665 14250 28665 14250 28666 14406 28666 14407 28666 14250 28667 14407 28667 14251 28667 14251 28668 14407 28668 14252 28668 14252 28669 14407 28669 14408 28669 14252 28670 14408 28670 14224 28670 14409 28671 14222 28671 14408 28671 14408 28672 14222 28672 14223 28672 14408 28673 14223 28673 14224 28673 14283 28674 14282 28674 14410 28674 14410 28675 14282 28675 14226 28675 14410 28676 14226 28676 14409 28676 14409 28677 14226 28677 14225 28677 14409 28678 14225 28678 14222 28678 14283 28679 14410 28679 14284 28679 14284 28680 14410 28680 14411 28680 14284 28681 14411 28681 14233 28681 14233 28682 14411 28682 14234 28682 14234 28683 14411 28683 14412 28683 14234 28684 14412 28684 14285 28684 14263 28685 14262 28685 14364 28685 14364 28686 14262 28686 14287 28686 14364 28687 14287 28687 14412 28687 14412 28688 14287 28688 14286 28688 14412 28689 14286 28689 14285 28689 14547 28824 14388 28824 14548 28824 14548 28825 14388 28825 14387 28825 14548 28826 14387 28826 14549 28826 14549 28827 14387 28827 14386 28827 14549 28828 14386 28828 14550 28828 14550 28829 14386 28829 14385 28829 14550 28830 14385 28830 14551 28830 14551 28831 14385 28831 14384 28831 14551 28832 14384 28832 14552 28832 14552 28833 14384 28833 14383 28833 14552 28834 14383 28834 14553 28834 14553 28835 14383 28835 14382 28835 14553 28836 14382 28836 14554 28836 14554 28837 14382 28837 14381 28837 14554 28838 14381 28838 14555 28838 14555 28839 14381 28839 14380 28839 14555 28840 14380 28840 14556 28840 14556 28841 14380 28841 14379 28841 14556 28842 14379 28842 14557 28842 14557 28843 14379 28843 14378 28843 14557 28844 14378 28844 14558 28844 14558 28845 14378 28845 14377 28845 14558 28846 14377 28846 14559 28846 14559 28847 14377 28847 14376 28847 14559 28848 14376 28848 14560 28848 14560 28849 14376 28849 14375 28849 14560 28850 14375 28850 14561 28850 14561 28851 14375 28851 14374 28851 14561 28852 14374 28852 14562 28852 14562 28853 14374 28853 14373 28853 14562 28854 14373 28854 14563 28854 14563 28855 14373 28855 14372 28855 14563 28856 14372 28856 14564 28856 14564 28857 14372 28857 14371 28857 14564 28858 14371 28858 14565 28858 14565 28859 14371 28859 14370 28859 14565 28860 14370 28860 14566 28860 14566 28861 14370 28861 14369 28861 14566 28862 14369 28862 14567 28862 14567 28863 14369 28863 14368 28863 14567 28864 14368 28864 14568 28864 14568 28865 14368 28865 14367 28865 14568 28866 14367 28866 14569 28866 14569 28867 14367 28867 14366 28867 14569 28868 14366 28868 14570 28868 14570 28869 14366 28869 14365 28869 14570 28870 14365 28870 14571 28870 14571 28871 14365 28871 14364 28871 14571 28872 14364 28872 14572 28872 14572 28873 14364 28873 14412 28873 14572 28874 14412 28874 14573 28874 14573 28875 14412 28875 14411 28875 14573 28876 14411 28876 14574 28876 14574 28877 14411 28877 14410 28877 14574 28878 14410 28878 14575 28878 14575 28879 14410 28879 14409 28879 14575 28880 14409 28880 14576 28880 14576 28881 14409 28881 14408 28881 14576 28882 14408 28882 14577 28882 14577 28883 14408 28883 14407 28883 14577 28884 14407 28884 14578 28884 14578 28885 14407 28885 14406 28885 14578 28886 14406 28886 14579 28886 14579 28887 14406 28887 14405 28887 14579 28888 14405 28888 14580 28888 14580 28889 14405 28889 14404 28889 14580 28890 14404 28890 14581 28890 14581 28891 14404 28891 14403 28891 14581 28892 14403 28892 14582 28892 14582 28893 14403 28893 14402 28893 14582 28894 14402 28894 14583 28894 14583 28895 14402 28895 14401 28895 14583 28896 14401 28896 14584 28896 14584 28897 14401 28897 14400 28897 14584 28898 14400 28898 14585 28898 14585 28899 14400 28899 14399 28899 14585 28900 14399 28900 14586 28900 14586 28901 14399 28901 14398 28901 14586 28902 14398 28902 14587 28902 14587 28903 14398 28903 14397 28903 14587 28904 14397 28904 14588 28904 14588 28905 14397 28905 14396 28905 14588 28906 14396 28906 14589 28906 14589 28907 14396 28907 14395 28907 14589 28908 14395 28908 14590 28908 14590 28909 14395 28909 14394 28909 14590 28910 14394 28910 14591 28910 14591 28911 14394 28911 14393 28911 14591 28912 14393 28912 14592 28912 14592 28913 14393 28913 14392 28913 14592 28914 14392 28914 14593 28914 14593 28915 14392 28915 14391 28915 14593 28916 14391 28916 14594 28916 14594 28917 14391 28917 14390 28917 14594 28918 14390 28918 14595 28918 14595 28919 14390 28919 14389 28919 14595 28920 14389 28920 14547 28920 14547 28921 14389 28921 14388 28921 14890 29766 14891 29766 14892 29766 14893 29767 14891 29767 14890 29767 14890 29768 14894 29768 14895 29768 14896 29769 14894 29769 14890 29769 14892 29770 14896 29770 14890 29770 14890 29771 14897 29771 14898 29771 14899 29772 14897 29772 14890 29772 14895 29773 14899 29773 14890 29773 14890 29774 14900 29774 14901 29774 14902 29775 14900 29775 14890 29775 14898 29776 14902 29776 14890 29776 14890 29777 14903 29777 14904 29777 14905 29778 14903 29778 14890 29778 14901 29779 14905 29779 14890 29779 14890 29780 14906 29780 14907 29780 14908 29781 14906 29781 14890 29781 14904 29782 14908 29782 14890 29782 14890 29783 14909 29783 14910 29783 14911 29784 14909 29784 14890 29784 14907 29785 14911 29785 14890 29785 14890 29786 14912 29786 14913 29786 14914 29787 14912 29787 14890 29787 14910 29788 14914 29788 14890 29788 14890 29789 14915 29789 14916 29789 14917 29790 14915 29790 14890 29790 14913 29791 14917 29791 14890 29791 14890 29792 14918 29792 14919 29792 14920 29793 14918 29793 14890 29793 14916 29794 14920 29794 14890 29794 14890 29795 14921 29795 14922 29795 14923 29796 14921 29796 14890 29796 14919 29797 14923 29797 14890 29797 14890 29798 14924 29798 14925 29798 14926 29799 14924 29799 14890 29799 14922 29800 14926 29800 14890 29800 14925 29801 14893 29801 14890 29801 14900 29802 14902 29802 14927 29802 14908 29803 14904 29803 14927 29803 14927 29804 14904 29804 14903 29804 14903 29805 14905 29805 14927 29805 14927 29806 14905 29806 14901 29806 14927 29807 14901 29807 14900 29807 14902 29808 14898 29808 14928 29808 14928 29809 14898 29809 14897 29809 14928 29810 14897 29810 14899 29810 14899 29811 14895 29811 14928 29811 14928 29812 14895 29812 14894 29812 14928 29813 14894 29813 14896 29813 14896 29814 14892 29814 14929 29814 14929 29815 14892 29815 14891 29815 14929 29816 14891 29816 14893 29816 14893 29817 14925 29817 14929 29817 14929 29818 14925 29818 14924 29818 14929 29819 14924 29819 14926 29819 14926 29820 14922 29820 14930 29820 14930 29821 14922 29821 14921 29821 14930 29822 14921 29822 14923 29822 14923 29823 14919 29823 14930 29823 14930 29824 14919 29824 14918 29824 14930 29825 14918 29825 14920 29825 14914 29826 14910 29826 14931 29826 14931 29827 14910 29827 14909 29827 14931 29828 14909 29828 14911 29828 14911 29829 14907 29829 14931 29829 14931 29830 14907 29830 14906 29830 14931 29831 14906 29831 14908 29831 14917 29832 14913 29832 14932 29832 14932 29833 14913 29833 14912 29833 14932 29834 14912 29834 14914 29834 14920 29835 14916 29835 14932 29835 14932 29836 14916 29836 14915 29836 14932 29837 14915 29837 14917 29837 14927 29838 14933 29838 14908 29838 14908 29839 14933 29839 14934 29839 14908 29840 14934 29840 14931 29840 14928 29841 14935 29841 14902 29841 14902 29842 14935 29842 14933 29842 14902 29843 14933 29843 14927 29843 14929 29844 14936 29844 14896 29844 14896 29845 14936 29845 14935 29845 14896 29846 14935 29846 14928 29846 14930 29847 14937 29847 14926 29847 14926 29848 14937 29848 14936 29848 14926 29849 14936 29849 14929 29849 14932 29850 14938 29850 14920 29850 14920 29851 14938 29851 14937 29851 14920 29852 14937 29852 14930 29852 14931 29853 14934 29853 14914 29853 14914 29854 14934 29854 14938 29854 14914 29855 14938 29855 14932 29855 14939 29856 14940 29856 14937 29856 14937 29857 14940 29857 14941 29857 14942 29858 14943 29858 14938 29858 14944 29859 14945 29859 14933 29859 14933 29860 14945 29860 14946 29860 14933 29861 14946 29861 14947 29861 14935 29862 14948 29862 14949 29862 14949 29863 14950 29863 14935 29863 14935 29864 14950 29864 14951 29864 14935 29865 14951 29865 14952 29865 14941 29866 14953 29866 14937 29866 14937 29867 14953 29867 14954 29867 14937 29868 14954 29868 14955 29868 14956 29869 14957 29869 14936 29869 14958 29870 14959 29870 14934 29870 14952 29871 14960 29871 14935 29871 14935 29872 14960 29872 14961 29872 14935 29873 14961 29873 14962 29873 14963 29874 14936 29874 14964 29874 14964 29875 14936 29875 14965 29875 14955 29876 14966 29876 14937 29876 14937 29877 14966 29877 14967 29877 14937 29878 14967 29878 14936 29878 14936 29879 14967 29879 14968 29879 14936 29880 14968 29880 14956 29880 14957 29881 14969 29881 14936 29881 14936 29882 14969 29882 14970 29882 14936 29883 14970 29883 14965 29883 14971 29884 14972 29884 14938 29884 14938 29885 14972 29885 14973 29885 14938 29886 14973 29886 14937 29886 14973 29887 14974 29887 14937 29887 14937 29888 14974 29888 14975 29888 14937 29889 14975 29889 14976 29889 14962 29890 14977 29890 14935 29890 14935 29891 14977 29891 14978 29891 14935 29892 14978 29892 14933 29892 14933 29893 14978 29893 14979 29893 14933 29894 14979 29894 14944 29894 14943 29895 14980 29895 14938 29895 14938 29896 14980 29896 14981 29896 14938 29897 14981 29897 14971 29897 14976 29898 14982 29898 14937 29898 14937 29899 14982 29899 14983 29899 14937 29900 14983 29900 14939 29900 14984 29901 14985 29901 14934 29901 14934 29902 14985 29902 14986 29902 14934 29903 14986 29903 14987 29903 14988 29904 14989 29904 14938 29904 14938 29905 14989 29905 14990 29905 14938 29906 14990 29906 14942 29906 14947 29907 14991 29907 14933 29907 14933 29908 14991 29908 14992 29908 14933 29909 14992 29909 14993 29909 14959 29910 14994 29910 14934 29910 14934 29911 14994 29911 14995 29911 14934 29912 14995 29912 14984 29912 14963 29913 14996 29913 14936 29913 14936 29914 14996 29914 14997 29914 14936 29915 14997 29915 14935 29915 14935 29916 14997 29916 14998 29916 14935 29917 14998 29917 14948 29917 14987 29918 14999 29918 14934 29918 14934 29919 14999 29919 15000 29919 14934 29920 15000 29920 14938 29920 14938 29921 15000 29921 15001 29921 14938 29922 15001 29922 14988 29922 14993 29923 15002 29923 14933 29923 14933 29924 15002 29924 15003 29924 14933 29925 15003 29925 14934 29925 14934 29926 15003 29926 15004 29926 14934 29927 15004 29927 14958 29927 14974 29928 14973 29928 15005 29928 15005 29929 14973 29929 14972 29929 15005 29930 14972 29930 15006 29930 15006 29931 14972 29931 14971 29931 15006 29932 14971 29932 15007 29932 15007 29933 14971 29933 14981 29933 15007 29934 14981 29934 15008 29934 15008 29935 14981 29935 14980 29935 15008 29936 14980 29936 15009 29936 15009 29937 14980 29937 14943 29937 15009 29938 14943 29938 15010 29938 15010 29939 14943 29939 14942 29939 15010 29940 14942 29940 15011 29940 15011 29941 14942 29941 14990 29941 15011 29942 14990 29942 15012 29942 15012 29943 14990 29943 14989 29943 15012 29944 14989 29944 15013 29944 15013 29945 14989 29945 14988 29945 15013 29946 14988 29946 15014 29946 15014 29947 14988 29947 15001 29947 15014 29948 15001 29948 15015 29948 15015 29949 15001 29949 15000 29949 15015 29950 15000 29950 15016 29950 15016 29951 15000 29951 14999 29951 15016 29952 14999 29952 15017 29952 15017 29953 14999 29953 14987 29953 15017 29954 14987 29954 15018 29954 15018 29955 14987 29955 14986 29955 15018 29956 14986 29956 15019 29956 15019 29957 14986 29957 14985 29957 15019 29958 14985 29958 15020 29958 15020 29959 14985 29959 14984 29959 15020 29960 14984 29960 15021 29960 15021 29961 14984 29961 14995 29961 15021 29962 14995 29962 15022 29962 15022 29963 14995 29963 14994 29963 15022 29964 14994 29964 15023 29964 15023 29965 14994 29965 14959 29965 15023 29966 14959 29966 15024 29966 15024 29967 14959 29967 14958 29967 15024 29968 14958 29968 15025 29968 15025 29969 14958 29969 15004 29969 15025 29970 15004 29970 15026 29970 15026 29971 15004 29971 15003 29971 15026 29972 15003 29972 15027 29972 15027 29973 15003 29973 15002 29973 15027 29974 15002 29974 15028 29974 15028 29975 15002 29975 14993 29975 15028 29976 14993 29976 15029 29976 15029 29977 14993 29977 14992 29977 15029 29978 14992 29978 15030 29978 15030 29979 14992 29979 14991 29979 15030 29980 14991 29980 15031 29980 15031 29981 14991 29981 14947 29981 15031 29982 14947 29982 15032 29982 15032 29983 14947 29983 14946 29983 15032 29984 14946 29984 15033 29984 15033 29985 14946 29985 14945 29985 15033 29986 14945 29986 15034 29986 15034 29987 14945 29987 14944 29987 15034 29988 14944 29988 15035 29988 15035 29989 14944 29989 14979 29989 15035 29990 14979 29990 15036 29990 15036 29991 14979 29991 14978 29991 15036 29992 14978 29992 15037 29992 15037 29993 14978 29993 14977 29993 15037 29994 14977 29994 15038 29994 15038 29995 14977 29995 14962 29995 15038 29996 14962 29996 15039 29996 15039 29997 14962 29997 14961 29997 15039 29998 14961 29998 15040 29998 15040 29999 14961 29999 14960 29999 15040 30000 14960 30000 15041 30000 15041 30001 14960 30001 14952 30001 15041 30002 14952 30002 15042 30002 15042 30003 14952 30003 14951 30003 15042 30004 14951 30004 15043 30004 15043 30005 14951 30005 14950 30005 15043 30006 14950 30006 15044 30006 15044 30007 14950 30007 14949 30007 15044 30008 14949 30008 15045 30008 15045 30009 14949 30009 14948 30009 15045 30010 14948 30010 15046 30010 15046 30011 14948 30011 14998 30011 15046 30012 14998 30012 15047 30012 15047 30013 14998 30013 14997 30013 15047 30014 14997 30014 15048 30014 15048 30015 14997 30015 14996 30015 15048 30016 14996 30016 15049 30016 15049 30017 14996 30017 14963 30017 15049 30018 14963 30018 15050 30018 15050 30019 14963 30019 14964 30019 15050 30020 14964 30020 15051 30020 15051 30021 14964 30021 14965 30021 15051 30022 14965 30022 15052 30022 15052 30023 14965 30023 14970 30023 15052 30024 14970 30024 15053 30024 15053 30025 14970 30025 14969 30025 15053 30026 14969 30026 15054 30026 15054 30027 14969 30027 14957 30027 15054 30028 14957 30028 15055 30028 15055 30029 14957 30029 14956 30029 15055 30030 14956 30030 15056 30030 15056 30031 14956 30031 14968 30031 15056 30032 14968 30032 15057 30032 15057 30033 14968 30033 14967 30033 15057 30034 14967 30034 15058 30034 15058 30035 14967 30035 14966 30035 15058 30036 14966 30036 15059 30036 15059 30037 14966 30037 14955 30037 15059 30038 14955 30038 15060 30038 15060 30039 14955 30039 14954 30039 15060 30040 14954 30040 15061 30040 15061 30041 14954 30041 14953 30041 15061 30042 14953 30042 15062 30042 15062 30043 14953 30043 14941 30043 15062 30044 14941 30044 15063 30044 15063 30045 14941 30045 14940 30045 15063 30046 14940 30046 15064 30046 15064 30047 14940 30047 14939 30047 15064 30048 14939 30048 15065 30048 15065 30049 14939 30049 14983 30049 15065 30050 14983 30050 15066 30050 15066 30051 14983 30051 14982 30051 15066 30052 14982 30052 15067 30052 15067 30053 14982 30053 14976 30053 15067 30054 14976 30054 15068 30054 15068 30055 14976 30055 14975 30055 15068 30056 14975 30056 15069 30056 15069 30057 14975 30057 14974 30057 15069 30058 14974 30058 15005 30058 15070 30059 15071 30059 15072 30059 15072 30060 15071 30060 15073 30060 15072 30061 15073 30061 15074 30061 15074 30062 15073 30062 15075 30062 15074 30063 15075 30063 15076 30063 15076 30064 15075 30064 15077 30064 15076 30065 15077 30065 15078 30065 15079 30066 15080 30066 15081 30066 15081 30067 15080 30067 15082 30067 15081 30068 15082 30068 15077 30068 15077 30069 15082 30069 15083 30069 15077 30070 15083 30070 15078 30070 15084 30071 15085 30071 15086 30071 15086 30072 15085 30072 15087 30072 15086 30073 15087 30073 15088 30073 15088 30074 15087 30074 15089 30074 15088 30075 15089 30075 15079 30075 15079 30076 15089 30076 15090 30076 15079 30077 15090 30077 15080 30077 15084 30078 15086 30078 15091 30078 15091 30079 15086 30079 15092 30079 15091 30080 15092 30080 15093 30080 15093 30081 15092 30081 15094 30081 15093 30082 15094 30082 15095 30082 15095 30083 15094 30083 15096 30083 15095 30084 15096 30084 15097 30084 15098 30085 15099 30085 15100 30085 15100 30086 15099 30086 15101 30086 15100 30087 15101 30087 15096 30087 15096 30088 15101 30088 15102 30088 15096 30089 15102 30089 15097 30089 15103 30090 15104 30090 15105 30090 15105 30091 15104 30091 15106 30091 15105 30092 15106 30092 15098 30092 15098 30093 15106 30093 15107 30093 15098 30094 15107 30094 15099 30094 15108 30095 15109 30095 15103 30095 15103 30096 15109 30096 15110 30096 15103 30097 15110 30097 15104 30097 15111 30098 15112 30098 15113 30098 15113 30099 15112 30099 15114 30099 15113 30100 15114 30100 15115 30100 15115 30101 15114 30101 15116 30101 15115 30102 15116 30102 15108 30102 15108 30103 15116 30103 15117 30103 15108 30104 15117 30104 15109 30104 15111 30105 15113 30105 15118 30105 15118 30106 15113 30106 15119 30106 15118 30107 15119 30107 15120 30107 15120 30108 15119 30108 15121 30108 15120 30109 15121 30109 15122 30109 15122 30110 15121 30110 15123 30110 15122 30111 15123 30111 15124 30111 15124 30112 15123 30112 15125 30112 15125 30113 15123 30113 15126 30113 15125 30114 15126 30114 15127 30114 15127 30115 15126 30115 15128 30115 15128 30116 15126 30116 15129 30116 15128 30117 15129 30117 15130 30117 15130 30118 15129 30118 15131 30118 15131 30119 15129 30119 15132 30119 15131 30120 15132 30120 15133 30120 15133 30121 15132 30121 15134 30121 15133 30122 15134 30122 15135 30122 15136 30123 15137 30123 15138 30123 15138 30124 15137 30124 15139 30124 15138 30125 15139 30125 15140 30125 15140 30126 15139 30126 15141 30126 15140 30127 15141 30127 15142 30127 15142 30128 15141 30128 15143 30128 15142 30129 15143 30129 15134 30129 15134 30130 15143 30130 15144 30130 15134 30131 15144 30131 15135 30131 15136 30132 15138 30132 15145 30132 15145 30133 15138 30133 15146 30133 15145 30134 15146 30134 15147 30134 15147 30135 15146 30135 15148 30135 15147 30136 15148 30136 15149 30136 15149 30137 15148 30137 15150 30137 15150 30138 15148 30138 15151 30138 15150 30139 15151 30139 15152 30139 15152 30140 15151 30140 15153 30140 15152 30141 15153 30141 15154 30141 15154 30142 15153 30142 15155 30142 15155 30143 15153 30143 15156 30143 15155 30144 15156 30144 15157 30144 15157 30145 15156 30145 15158 30145 15158 30146 15156 30146 15159 30146 15158 30147 15159 30147 15160 30147 15160 30148 15159 30148 15161 30148 15160 30149 15161 30149 15162 30149 15163 30150 15164 30150 15165 30150 15165 30151 15164 30151 15166 30151 15165 30152 15166 30152 15161 30152 15161 30153 15166 30153 15167 30153 15161 30154 15167 30154 15162 30154 15168 30155 15169 30155 15170 30155 15170 30156 15169 30156 15171 30156 15170 30157 15171 30157 15163 30157 15163 30158 15171 30158 15172 30158 15163 30159 15172 30159 15164 30159 15173 30160 15174 30160 15168 30160 15168 30161 15174 30161 15175 30161 15168 30162 15175 30162 15169 30162 15176 30163 15177 30163 15178 30163 15178 30164 15177 30164 15179 30164 15178 30165 15179 30165 15180 30165 15180 30166 15179 30166 15181 30166 15180 30167 15181 30167 15173 30167 15173 30168 15181 30168 15182 30168 15173 30169 15182 30169 15174 30169 15176 30170 15178 30170 15183 30170 15183 30171 15178 30171 15184 30171 15183 30172 15184 30172 15185 30172 15185 30173 15184 30173 15186 30173 15185 30174 15186 30174 15187 30174 15187 30175 15186 30175 15188 30175 15187 30176 15188 30176 15189 30176 15189 30177 15188 30177 15190 30177 15190 30178 15188 30178 15191 30178 15190 30179 15191 30179 15192 30179 15192 30180 15191 30180 15193 30180 15193 30181 15191 30181 15194 30181 15193 30182 15194 30182 15195 30182 15195 30183 15194 30183 15196 30183 15196 30184 15194 30184 15197 30184 15196 30185 15197 30185 15198 30185 15198 30186 15197 30186 15199 30186 15198 30187 15199 30187 15200 30187 15201 30188 15202 30188 15203 30188 15203 30189 15202 30189 15204 30189 15203 30190 15204 30190 15205 30190 15205 30191 15204 30191 15206 30191 15205 30192 15206 30192 15207 30192 15207 30193 15206 30193 15208 30193 15207 30194 15208 30194 15199 30194 15199 30195 15208 30195 15209 30195 15199 30196 15209 30196 15200 30196 15201 30197 15203 30197 15210 30197 15210 30198 15203 30198 15211 30198 15210 30199 15211 30199 15212 30199 15212 30200 15211 30200 15213 30200 15212 30201 15213 30201 15214 30201 15214 30202 15213 30202 15215 30202 15215 30203 15213 30203 15216 30203 15215 30204 15216 30204 15217 30204 15217 30205 15216 30205 15218 30205 15217 30206 15218 30206 15219 30206 15219 30207 15218 30207 15220 30207 15220 30208 15218 30208 15221 30208 15220 30209 15221 30209 15222 30209 15222 30210 15221 30210 15223 30210 15223 30211 15221 30211 15224 30211 15223 30212 15224 30212 15225 30212 15225 30213 15224 30213 15226 30213 15225 30214 15226 30214 15227 30214 15228 30215 15229 30215 15230 30215 15230 30216 15229 30216 15231 30216 15230 30217 15231 30217 15232 30217 15232 30218 15231 30218 15233 30218 15232 30219 15233 30219 15226 30219 15226 30220 15233 30220 15234 30220 15226 30221 15234 30221 15227 30221 15235 30222 15236 30222 15228 30222 15228 30223 15236 30223 15237 30223 15228 30224 15237 30224 15229 30224 15238 30225 15239 30225 15235 30225 15235 30226 15239 30226 15240 30226 15235 30227 15240 30227 15236 30227 15070 30228 15241 30228 15071 30228 15071 30229 15241 30229 15242 30229 15071 30230 15242 30230 15243 30230 15243 30231 15242 30231 15244 30231 15243 30232 15244 30232 15238 30232 15238 30233 15244 30233 15245 30233 15238 30234 15245 30234 15239 30234 15246 30235 15199 30235 15247 30235 15247 30236 15199 30236 15197 30236 15247 30237 15197 30237 15248 30237 15248 30238 15197 30238 15194 30238 15248 30239 15194 30239 15249 30239 15249 30240 15194 30240 15191 30240 15249 30241 15191 30241 15250 30241 15250 30242 15191 30242 15188 30242 15250 30243 15188 30243 15251 30243 15251 30244 15188 30244 15186 30244 15251 30245 15186 30245 15252 30245 15252 30246 15186 30246 15184 30246 15252 30247 15184 30247 15253 30247 15253 30248 15184 30248 15178 30248 15253 30249 15178 30249 15254 30249 15254 30250 15178 30250 15180 30250 15254 30251 15180 30251 15255 30251 15255 30252 15180 30252 15173 30252 15255 30253 15173 30253 15256 30253 15256 30254 15173 30254 15168 30254 15256 30255 15168 30255 15257 30255 15257 30256 15168 30256 15170 30256 15257 30257 15170 30257 15258 30257 15258 30258 15170 30258 15163 30258 15258 30259 15163 30259 15259 30259 15259 30260 15163 30260 15165 30260 15259 30261 15165 30261 15260 30261 15260 30262 15165 30262 15161 30262 15260 30263 15161 30263 15261 30263 15261 30264 15161 30264 15159 30264 15261 30265 15159 30265 15262 30265 15262 30266 15159 30266 15156 30266 15262 30267 15156 30267 15263 30267 15263 30268 15156 30268 15153 30268 15263 30269 15153 30269 15264 30269 15264 30270 15153 30270 15151 30270 15264 30271 15151 30271 15265 30271 15265 30272 15151 30272 15148 30272 15265 30273 15148 30273 15266 30273 15266 30274 15148 30274 15146 30274 15266 30275 15146 30275 15267 30275 15267 30276 15146 30276 15138 30276 15267 30277 15138 30277 15268 30277 15268 30278 15138 30278 15140 30278 15268 30279 15140 30279 15269 30279 15269 30280 15140 30280 15142 30280 15269 30281 15142 30281 15270 30281 15270 30282 15142 30282 15134 30282 15270 30283 15134 30283 15271 30283 15271 30284 15134 30284 15132 30284 15271 30285 15132 30285 15272 30285 15272 30286 15132 30286 15129 30286 15272 30287 15129 30287 15273 30287 15273 30288 15129 30288 15126 30288 15273 30289 15126 30289 15274 30289 15274 30290 15126 30290 15123 30290 15274 30291 15123 30291 15275 30291 15275 30292 15123 30292 15121 30292 15275 30293 15121 30293 15276 30293 15276 30294 15121 30294 15119 30294 15276 30295 15119 30295 15277 30295 15277 30296 15119 30296 15113 30296 15277 30297 15113 30297 15278 30297 15278 30298 15113 30298 15115 30298 15278 30299 15115 30299 15279 30299 15279 30300 15115 30300 15108 30300 15279 30301 15108 30301 15280 30301 15280 30302 15108 30302 15103 30302 15280 30303 15103 30303 15281 30303 15281 30304 15103 30304 15105 30304 15281 30305 15105 30305 15282 30305 15282 30306 15105 30306 15098 30306 15282 30307 15098 30307 15283 30307 15283 30308 15098 30308 15100 30308 15283 30309 15100 30309 15284 30309 15284 30310 15100 30310 15096 30310 15284 30311 15096 30311 15285 30311 15285 30312 15096 30312 15094 30312 15285 30313 15094 30313 15286 30313 15286 30314 15094 30314 15092 30314 15286 30315 15092 30315 15287 30315 15287 30316 15092 30316 15086 30316 15287 30317 15086 30317 15288 30317 15288 30318 15086 30318 15088 30318 15288 30319 15088 30319 15289 30319 15289 30320 15088 30320 15079 30320 15289 30321 15079 30321 15290 30321 15290 30322 15079 30322 15081 30322 15290 30323 15081 30323 15291 30323 15291 30324 15081 30324 15077 30324 15291 30325 15077 30325 15292 30325 15292 30326 15077 30326 15075 30326 15292 30327 15075 30327 15293 30327 15293 30328 15075 30328 15073 30328 15293 30329 15073 30329 15294 30329 15294 30330 15073 30330 15071 30330 15294 30331 15071 30331 15295 30331 15295 30332 15071 30332 15243 30332 15295 30333 15243 30333 15296 30333 15296 30334 15243 30334 15238 30334 15296 30335 15238 30335 15297 30335 15297 30336 15238 30336 15235 30336 15297 30337 15235 30337 15298 30337 15298 30338 15235 30338 15228 30338 15298 30339 15228 30339 15299 30339 15299 30340 15228 30340 15230 30340 15299 30341 15230 30341 15300 30341 15300 30342 15230 30342 15232 30342 15300 30343 15232 30343 15301 30343 15301 30344 15232 30344 15226 30344 15301 30345 15226 30345 15302 30345 15302 30346 15226 30346 15224 30346 15302 30347 15224 30347 15303 30347 15303 30348 15224 30348 15221 30348 15303 30349 15221 30349 15304 30349 15304 30350 15221 30350 15218 30350 15304 30351 15218 30351 15305 30351 15305 30352 15218 30352 15216 30352 15305 30353 15216 30353 15306 30353 15306 30354 15216 30354 15213 30354 15306 30355 15213 30355 15307 30355 15307 30356 15213 30356 15211 30356 15307 30357 15211 30357 15308 30357 15308 30358 15211 30358 15203 30358 15308 30359 15203 30359 15309 30359 15309 30360 15203 30360 15205 30360 15309 30361 15205 30361 15310 30361 15310 30362 15205 30362 15207 30362 15310 30363 15207 30363 15246 30363 15246 30364 15207 30364 15199 30364 15311 30365 15246 30365 15312 30365 15312 30366 15246 30366 15247 30366 15312 30367 15247 30367 15313 30367 15313 30368 15247 30368 15248 30368 15313 30369 15248 30369 15314 30369 15314 30370 15248 30370 15249 30370 15314 30371 15249 30371 15315 30371 15315 30372 15249 30372 15250 30372 15315 30373 15250 30373 15316 30373 15316 30374 15250 30374 15251 30374 15316 30375 15251 30375 15317 30375 15317 30376 15251 30376 15252 30376 15317 30377 15252 30377 15318 30377 15318 30378 15252 30378 15253 30378 15318 30379 15253 30379 15319 30379 15319 30380 15253 30380 15254 30380 15319 30381 15254 30381 15320 30381 15320 30382 15254 30382 15255 30382 15320 30383 15255 30383 15321 30383 15321 30384 15255 30384 15256 30384 15321 30385 15256 30385 15322 30385 15322 30386 15256 30386 15257 30386 15322 30387 15257 30387 15323 30387 15323 30388 15257 30388 15258 30388 15323 30389 15258 30389 15324 30389 15324 30390 15258 30390 15259 30390 15324 30391 15259 30391 15325 30391 15325 30392 15259 30392 15260 30392 15325 30393 15260 30393 15326 30393 15326 30394 15260 30394 15261 30394 15326 30395 15261 30395 15327 30395 15327 30396 15261 30396 15262 30396 15327 30397 15262 30397 15328 30397 15328 30398 15262 30398 15263 30398 15328 30399 15263 30399 15329 30399 15329 30400 15263 30400 15264 30400 15329 30401 15264 30401 15330 30401 15330 30402 15264 30402 15265 30402 15330 30403 15265 30403 15331 30403 15331 30404 15265 30404 15266 30404 15331 30405 15266 30405 15332 30405 15332 30406 15266 30406 15267 30406 15332 30407 15267 30407 15333 30407 15333 30408 15267 30408 15268 30408 15333 30409 15268 30409 15334 30409 15334 30410 15268 30410 15269 30410 15334 30411 15269 30411 15335 30411 15335 30412 15269 30412 15270 30412 15335 30413 15270 30413 15336 30413 15336 30414 15270 30414 15271 30414 15336 30415 15271 30415 15337 30415 15337 30416 15271 30416 15272 30416 15337 30417 15272 30417 15338 30417 15338 30418 15272 30418 15273 30418 15338 30419 15273 30419 15339 30419 15339 30420 15273 30420 15274 30420 15339 30421 15274 30421 15340 30421 15340 30422 15274 30422 15275 30422 15340 30423 15275 30423 15341 30423 15341 30424 15275 30424 15276 30424 15341 30425 15276 30425 15342 30425 15342 30426 15276 30426 15277 30426 15342 30427 15277 30427 15343 30427 15343 30428 15277 30428 15278 30428 15343 30429 15278 30429 15344 30429 15344 30430 15278 30430 15279 30430 15344 30431 15279 30431 15345 30431 15345 30432 15279 30432 15280 30432 15345 30433 15280 30433 15346 30433 15346 30434 15280 30434 15281 30434 15346 30435 15281 30435 15347 30435 15347 30436 15281 30436 15282 30436 15347 30437 15282 30437 15348 30437 15348 30438 15282 30438 15283 30438 15348 30439 15283 30439 15349 30439 15349 30440 15283 30440 15284 30440 15349 30441 15284 30441 15350 30441 15350 30442 15284 30442 15285 30442 15350 30443 15285 30443 15351 30443 15351 30444 15285 30444 15286 30444 15351 30445 15286 30445 15352 30445 15352 30446 15286 30446 15287 30446 15352 30447 15287 30447 15353 30447 15353 30448 15287 30448 15288 30448 15353 30449 15288 30449 15354 30449 15354 30450 15288 30450 15289 30450 15354 30451 15289 30451 15355 30451 15355 30452 15289 30452 15290 30452 15355 30453 15290 30453 15356 30453 15356 30454 15290 30454 15291 30454 15356 30455 15291 30455 15357 30455 15357 30456 15291 30456 15292 30456 15357 30457 15292 30457 15358 30457 15358 30458 15292 30458 15293 30458 15358 30459 15293 30459 15359 30459 15359 30460 15293 30460 15294 30460 15359 30461 15294 30461 15360 30461 15360 30462 15294 30462 15295 30462 15360 30463 15295 30463 15361 30463 15361 30464 15295 30464 15296 30464 15361 30465 15296 30465 15362 30465 15362 30466 15296 30466 15297 30466 15362 30467 15297 30467 15363 30467 15363 30468 15297 30468 15298 30468 15363 30469 15298 30469 15364 30469 15364 30470 15298 30470 15299 30470 15364 30471 15299 30471 15365 30471 15365 30472 15299 30472 15300 30472 15365 30473 15300 30473 15366 30473 15366 30474 15300 30474 15301 30474 15366 30475 15301 30475 15367 30475 15367 30476 15301 30476 15302 30476 15367 30477 15302 30477 15368 30477 15368 30478 15302 30478 15303 30478 15368 30479 15303 30479 15369 30479 15369 30480 15303 30480 15304 30480 15369 30481 15304 30481 15370 30481 15370 30482 15304 30482 15305 30482 15370 30483 15305 30483 15371 30483 15371 30484 15305 30484 15306 30484 15371 30485 15306 30485 15372 30485 15372 30486 15306 30486 15307 30486 15372 30487 15307 30487 15373 30487 15373 30488 15307 30488 15308 30488 15373 30489 15308 30489 15374 30489 15374 30490 15308 30490 15309 30490 15374 30491 15309 30491 15375 30491 15375 30492 15309 30492 15310 30492 15375 30493 15310 30493 15311 30493 15311 30494 15310 30494 15246 30494 15376 30495 15311 30495 15377 30495 15377 30496 15311 30496 15312 30496 15377 30497 15312 30497 15378 30497 15378 30498 15312 30498 15313 30498 15378 30499 15313 30499 15379 30499 15379 30500 15313 30500 15314 30500 15379 30501 15314 30501 15380 30501 15380 30502 15314 30502 15315 30502 15380 30503 15315 30503 15381 30503 15381 30504 15315 30504 15316 30504 15381 30505 15316 30505 15382 30505 15382 30506 15316 30506 15317 30506 15382 30507 15317 30507 15383 30507 15383 30508 15317 30508 15318 30508 15383 30509 15318 30509 15384 30509 15384 30510 15318 30510 15319 30510 15384 30511 15319 30511 15385 30511 15385 30512 15319 30512 15320 30512 15385 30513 15320 30513 15386 30513 15386 30514 15320 30514 15321 30514 15386 30515 15321 30515 15387 30515 15387 30516 15321 30516 15322 30516 15387 30517 15322 30517 15388 30517 15388 30518 15322 30518 15323 30518 15388 30519 15323 30519 15389 30519 15389 30520 15323 30520 15324 30520 15389 30521 15324 30521 15390 30521 15390 30522 15324 30522 15325 30522 15390 30523 15325 30523 15391 30523 15391 30524 15325 30524 15326 30524 15391 30525 15326 30525 15392 30525 15392 30526 15326 30526 15327 30526 15392 30527 15327 30527 15393 30527 15393 30528 15327 30528 15328 30528 15393 30529 15328 30529 15394 30529 15394 30530 15328 30530 15329 30530 15394 30531 15329 30531 15395 30531 15395 30532 15329 30532 15330 30532 15395 30533 15330 30533 15396 30533 15396 30534 15330 30534 15331 30534 15396 30535 15331 30535 15397 30535 15397 30536 15331 30536 15332 30536 15397 30537 15332 30537 15398 30537 15398 30538 15332 30538 15333 30538 15398 30539 15333 30539 15399 30539 15399 30540 15333 30540 15334 30540 15399 30541 15334 30541 15400 30541 15400 30542 15334 30542 15335 30542 15400 30543 15335 30543 15401 30543 15401 30544 15335 30544 15336 30544 15401 30545 15336 30545 15402 30545 15402 30546 15336 30546 15337 30546 15402 30547 15337 30547 15403 30547 15403 30548 15337 30548 15338 30548 15403 30549 15338 30549 15404 30549 15404 30550 15338 30550 15339 30550 15404 30551 15339 30551 15405 30551 15405 30552 15339 30552 15340 30552 15405 30553 15340 30553 15406 30553 15406 30554 15340 30554 15341 30554 15406 30555 15341 30555 15407 30555 15407 30556 15341 30556 15342 30556 15407 30557 15342 30557 15408 30557 15408 30558 15342 30558 15343 30558 15408 30559 15343 30559 15409 30559 15409 30560 15343 30560 15344 30560 15409 30561 15344 30561 15410 30561 15410 30562 15344 30562 15345 30562 15410 30563 15345 30563 15411 30563 15411 30564 15345 30564 15346 30564 15411 30565 15346 30565 15412 30565 15412 30566 15346 30566 15347 30566 15412 30567 15347 30567 15413 30567 15413 30568 15347 30568 15348 30568 15413 30569 15348 30569 15414 30569 15414 30570 15348 30570 15349 30570 15414 30571 15349 30571 15415 30571 15415 30572 15349 30572 15350 30572 15415 30573 15350 30573 15416 30573 15416 30574 15350 30574 15351 30574 15416 30575 15351 30575 15417 30575 15417 30576 15351 30576 15352 30576 15417 30577 15352 30577 15418 30577 15418 30578 15352 30578 15353 30578 15418 30579 15353 30579 15419 30579 15419 30580 15353 30580 15354 30580 15419 30581 15354 30581 15420 30581 15420 30582 15354 30582 15355 30582 15420 30583 15355 30583 15421 30583 15421 30584 15355 30584 15356 30584 15421 30585 15356 30585 15422 30585 15422 30586 15356 30586 15357 30586 15422 30587 15357 30587 15423 30587 15423 30588 15357 30588 15358 30588 15423 30589 15358 30589 15424 30589 15424 30590 15358 30590 15359 30590 15424 30591 15359 30591 15425 30591 15425 30592 15359 30592 15360 30592 15425 30593 15360 30593 15426 30593 15426 30594 15360 30594 15361 30594 15426 30595 15361 30595 15427 30595 15427 30596 15361 30596 15362 30596 15427 30597 15362 30597 15428 30597 15428 30598 15362 30598 15363 30598 15428 30599 15363 30599 15429 30599 15429 30600 15363 30600 15364 30600 15429 30601 15364 30601 15430 30601 15430 30602 15364 30602 15365 30602 15430 30603 15365 30603 15431 30603 15431 30604 15365 30604 15366 30604 15431 30605 15366 30605 15432 30605 15432 30606 15366 30606 15367 30606 15432 30607 15367 30607 15433 30607 15433 30608 15367 30608 15368 30608 15433 30609 15368 30609 15434 30609 15434 30610 15368 30610 15369 30610 15434 30611 15369 30611 15435 30611 15435 30612 15369 30612 15370 30612 15435 30613 15370 30613 15436 30613 15436 30614 15370 30614 15371 30614 15436 30615 15371 30615 15437 30615 15437 30616 15371 30616 15372 30616 15437 30617 15372 30617 15438 30617 15438 30618 15372 30618 15373 30618 15438 30619 15373 30619 15439 30619 15439 30620 15373 30620 15374 30620 15439 30621 15374 30621 15440 30621 15440 30622 15374 30622 15375 30622 15440 30623 15375 30623 15376 30623 15376 30624 15375 30624 15311 30624 15441 30625 15376 30625 15442 30625 15442 30626 15376 30626 15377 30626 15442 30627 15377 30627 15443 30627 15443 30628 15377 30628 15378 30628 15443 30629 15378 30629 15444 30629 15444 30630 15378 30630 15379 30630 15444 30631 15379 30631 15445 30631 15445 30632 15379 30632 15380 30632 15445 30633 15380 30633 15446 30633 15446 30634 15380 30634 15381 30634 15446 30635 15381 30635 15447 30635 15447 30636 15381 30636 15382 30636 15447 30637 15382 30637 15448 30637 15448 30638 15382 30638 15383 30638 15448 30639 15383 30639 15449 30639 15449 30640 15383 30640 15384 30640 15449 30641 15384 30641 15450 30641 15450 30642 15384 30642 15385 30642 15450 30643 15385 30643 15451 30643 15451 30644 15385 30644 15386 30644 15451 30645 15386 30645 15452 30645 15452 30646 15386 30646 15387 30646 15452 30647 15387 30647 15453 30647 15453 30648 15387 30648 15388 30648 15453 30649 15388 30649 15454 30649 15454 30650 15388 30650 15389 30650 15454 30651 15389 30651 15455 30651 15455 30652 15389 30652 15390 30652 15455 30653 15390 30653 15456 30653 15456 30654 15390 30654 15391 30654 15456 30655 15391 30655 15457 30655 15457 30656 15391 30656 15392 30656 15457 30657 15392 30657 15458 30657 15458 30658 15392 30658 15393 30658 15458 30659 15393 30659 15459 30659 15459 30660 15393 30660 15394 30660 15459 30661 15394 30661 15460 30661 15460 30662 15394 30662 15395 30662 15460 30663 15395 30663 15461 30663 15461 30664 15395 30664 15396 30664 15461 30665 15396 30665 15462 30665 15462 30666 15396 30666 15397 30666 15462 30667 15397 30667 15463 30667 15463 30668 15397 30668 15398 30668 15463 30669 15398 30669 15464 30669 15464 30670 15398 30670 15399 30670 15464 30671 15399 30671 15465 30671 15465 30672 15399 30672 15400 30672 15465 30673 15400 30673 15466 30673 15466 30674 15400 30674 15401 30674 15466 30675 15401 30675 15467 30675 15467 30676 15401 30676 15402 30676 15467 30677 15402 30677 15468 30677 15468 30678 15402 30678 15403 30678 15468 30679 15403 30679 15469 30679 15469 30680 15403 30680 15404 30680 15469 30681 15404 30681 15470 30681 15470 30682 15404 30682 15405 30682 15470 30683 15405 30683 15471 30683 15471 30684 15405 30684 15406 30684 15471 30685 15406 30685 15472 30685 15472 30686 15406 30686 15407 30686 15472 30687 15407 30687 15473 30687 15473 30688 15407 30688 15408 30688 15473 30689 15408 30689 15474 30689 15474 30690 15408 30690 15409 30690 15474 30691 15409 30691 15475 30691 15475 30692 15409 30692 15410 30692 15475 30693 15410 30693 15476 30693 15476 30694 15410 30694 15411 30694 15476 30695 15411 30695 15477 30695 15477 30696 15411 30696 15412 30696 15477 30697 15412 30697 15478 30697 15478 30698 15412 30698 15413 30698 15478 30699 15413 30699 15479 30699 15479 30700 15413 30700 15414 30700 15479 30701 15414 30701 15480 30701 15480 30702 15414 30702 15415 30702 15480 30703 15415 30703 15481 30703 15481 30704 15415 30704 15416 30704 15481 30705 15416 30705 15482 30705 15482 30706 15416 30706 15417 30706 15482 30707 15417 30707 15483 30707 15483 30708 15417 30708 15418 30708 15483 30709 15418 30709 15484 30709 15484 30710 15418 30710 15419 30710 15484 30711 15419 30711 15485 30711 15485 30712 15419 30712 15420 30712 15485 30713 15420 30713 15486 30713 15486 30714 15420 30714 15421 30714 15486 30715 15421 30715 15487 30715 15487 30716 15421 30716 15422 30716 15487 30717 15422 30717 15488 30717 15488 30718 15422 30718 15423 30718 15488 30719 15423 30719 15489 30719 15489 30720 15423 30720 15424 30720 15489 30721 15424 30721 15490 30721 15490 30722 15424 30722 15425 30722 15490 30723 15425 30723 15491 30723 15491 30724 15425 30724 15426 30724 15491 30725 15426 30725 15492 30725 15492 30726 15426 30726 15427 30726 15492 30727 15427 30727 15493 30727 15493 30728 15427 30728 15428 30728 15493 30729 15428 30729 15494 30729 15494 30730 15428 30730 15429 30730 15494 30731 15429 30731 15495 30731 15495 30732 15429 30732 15430 30732 15495 30733 15430 30733 15496 30733 15496 30734 15430 30734 15431 30734 15496 30735 15431 30735 15497 30735 15497 30736 15431 30736 15432 30736 15497 30737 15432 30737 15498 30737 15498 30738 15432 30738 15433 30738 15498 30739 15433 30739 15499 30739 15499 30740 15433 30740 15434 30740 15499 30741 15434 30741 15500 30741 15500 30742 15434 30742 15435 30742 15500 30743 15435 30743 15501 30743 15501 30744 15435 30744 15436 30744 15501 30745 15436 30745 15502 30745 15502 30746 15436 30746 15437 30746 15502 30747 15437 30747 15503 30747 15503 30748 15437 30748 15438 30748 15503 30749 15438 30749 15504 30749 15504 30750 15438 30750 15439 30750 15504 30751 15439 30751 15505 30751 15505 30752 15439 30752 15440 30752 15505 30753 15440 30753 15441 30753 15441 30754 15440 30754 15376 30754 15506 30755 15441 30755 15507 30755 15507 30756 15441 30756 15442 30756 15507 30757 15442 30757 15508 30757 15508 30758 15442 30758 15443 30758 15508 30759 15443 30759 15509 30759 15509 30760 15443 30760 15444 30760 15509 30761 15444 30761 15510 30761 15510 30762 15444 30762 15445 30762 15510 30763 15445 30763 15511 30763 15511 30764 15445 30764 15446 30764 15511 30765 15446 30765 15512 30765 15512 30766 15446 30766 15447 30766 15512 30767 15447 30767 15513 30767 15513 30768 15447 30768 15448 30768 15513 30769 15448 30769 15514 30769 15514 30770 15448 30770 15449 30770 15514 30771 15449 30771 15515 30771 15515 30772 15449 30772 15450 30772 15515 30773 15450 30773 15516 30773 15516 30774 15450 30774 15451 30774 15516 30775 15451 30775 15517 30775 15517 30776 15451 30776 15452 30776 15517 30777 15452 30777 15518 30777 15518 30778 15452 30778 15453 30778 15518 30779 15453 30779 15519 30779 15519 30780 15453 30780 15454 30780 15519 30781 15454 30781 15520 30781 15520 30782 15454 30782 15455 30782 15520 30783 15455 30783 15521 30783 15521 30784 15455 30784 15456 30784 15521 30785 15456 30785 15522 30785 15522 30786 15456 30786 15457 30786 15522 30787 15457 30787 15523 30787 15523 30788 15457 30788 15458 30788 15523 30789 15458 30789 15524 30789 15524 30790 15458 30790 15459 30790 15524 30791 15459 30791 15525 30791 15525 30792 15459 30792 15460 30792 15525 30793 15460 30793 15526 30793 15526 30794 15460 30794 15461 30794 15526 30795 15461 30795 15527 30795 15527 30796 15461 30796 15462 30796 15527 30797 15462 30797 15528 30797 15528 30798 15462 30798 15463 30798 15528 30799 15463 30799 15529 30799 15529 30800 15463 30800 15464 30800 15529 30801 15464 30801 15530 30801 15530 30802 15464 30802 15465 30802 15530 30803 15465 30803 15531 30803 15531 30804 15465 30804 15466 30804 15531 30805 15466 30805 15532 30805 15532 30806 15466 30806 15467 30806 15532 30807 15467 30807 15533 30807 15533 30808 15467 30808 15468 30808 15533 30809 15468 30809 15534 30809 15534 30810 15468 30810 15469 30810 15534 30811 15469 30811 15535 30811 15535 30812 15469 30812 15470 30812 15535 30813 15470 30813 15536 30813 15536 30814 15470 30814 15471 30814 15536 30815 15471 30815 15537 30815 15537 30816 15471 30816 15472 30816 15537 30817 15472 30817 15538 30817 15538 30818 15472 30818 15473 30818 15538 30819 15473 30819 15539 30819 15539 30820 15473 30820 15474 30820 15539 30821 15474 30821 15540 30821 15540 30822 15474 30822 15475 30822 15540 30823 15475 30823 15541 30823 15541 30824 15475 30824 15476 30824 15541 30825 15476 30825 15542 30825 15542 30826 15476 30826 15477 30826 15542 30827 15477 30827 15543 30827 15543 30828 15477 30828 15478 30828 15543 30829 15478 30829 15544 30829 15544 30830 15478 30830 15479 30830 15544 30831 15479 30831 15545 30831 15545 30832 15479 30832 15480 30832 15545 30833 15480 30833 15546 30833 15546 30834 15480 30834 15481 30834 15546 30835 15481 30835 15547 30835 15547 30836 15481 30836 15482 30836 15547 30837 15482 30837 15548 30837 15548 30838 15482 30838 15483 30838 15548 30839 15483 30839 15549 30839 15549 30840 15483 30840 15484 30840 15549 30841 15484 30841 15550 30841 15550 30842 15484 30842 15485 30842 15550 30843 15485 30843 15551 30843 15551 30844 15485 30844 15486 30844 15551 30845 15486 30845 15552 30845 15552 30846 15486 30846 15487 30846 15552 30847 15487 30847 15553 30847 15553 30848 15487 30848 15488 30848 15553 30849 15488 30849 15554 30849 15554 30850 15488 30850 15489 30850 15554 30851 15489 30851 15555 30851 15555 30852 15489 30852 15490 30852 15555 30853 15490 30853 15556 30853 15556 30854 15490 30854 15491 30854 15556 30855 15491 30855 15557 30855 15557 30856 15491 30856 15492 30856 15557 30857 15492 30857 15558 30857 15558 30858 15492 30858 15493 30858 15558 30859 15493 30859 15559 30859 15559 30860 15493 30860 15494 30860 15559 30861 15494 30861 15560 30861 15560 30862 15494 30862 15495 30862 15560 30863 15495 30863 15561 30863 15561 30864 15495 30864 15496 30864 15561 30865 15496 30865 15562 30865 15562 30866 15496 30866 15497 30866 15562 30867 15497 30867 15563 30867 15563 30868 15497 30868 15498 30868 15563 30869 15498 30869 15564 30869 15564 30870 15498 30870 15499 30870 15564 30871 15499 30871 15565 30871 15565 30872 15499 30872 15500 30872 15565 30873 15500 30873 15566 30873 15566 30874 15500 30874 15501 30874 15566 30875 15501 30875 15567 30875 15567 30876 15501 30876 15502 30876 15567 30877 15502 30877 15568 30877 15568 30878 15502 30878 15503 30878 15568 30879 15503 30879 15569 30879 15569 30880 15503 30880 15504 30880 15569 30881 15504 30881 15570 30881 15570 30882 15504 30882 15505 30882 15570 30883 15505 30883 15506 30883 15506 30884 15505 30884 15441 30884 15571 30885 15506 30885 15572 30885 15572 30886 15506 30886 15507 30886 15572 30887 15507 30887 15573 30887 15573 30888 15507 30888 15508 30888 15573 30889 15508 30889 15574 30889 15574 30890 15508 30890 15509 30890 15574 30891 15509 30891 15575 30891 15575 30892 15509 30892 15510 30892 15575 30893 15510 30893 15576 30893 15576 30894 15510 30894 15511 30894 15576 30895 15511 30895 15577 30895 15577 30896 15511 30896 15512 30896 15577 30897 15512 30897 15578 30897 15578 30898 15512 30898 15513 30898 15578 30899 15513 30899 15579 30899 15579 30900 15513 30900 15514 30900 15579 30901 15514 30901 15580 30901 15580 30902 15514 30902 15515 30902 15580 30903 15515 30903 15581 30903 15581 30904 15515 30904 15516 30904 15581 30905 15516 30905 15582 30905 15582 30906 15516 30906 15517 30906 15582 30907 15517 30907 15583 30907 15583 30908 15517 30908 15518 30908 15583 30909 15518 30909 15584 30909 15584 30910 15518 30910 15519 30910 15584 30911 15519 30911 15585 30911 15585 30912 15519 30912 15520 30912 15585 30913 15520 30913 15586 30913 15586 30914 15520 30914 15521 30914 15586 30915 15521 30915 15587 30915 15587 30916 15521 30916 15522 30916 15587 30917 15522 30917 15588 30917 15588 30918 15522 30918 15523 30918 15588 30919 15523 30919 15589 30919 15589 30920 15523 30920 15524 30920 15589 30921 15524 30921 15590 30921 15590 30922 15524 30922 15525 30922 15590 30923 15525 30923 15591 30923 15591 30924 15525 30924 15526 30924 15591 30925 15526 30925 15592 30925 15592 30926 15526 30926 15527 30926 15592 30927 15527 30927 15593 30927 15593 30928 15527 30928 15528 30928 15593 30929 15528 30929 15594 30929 15594 30930 15528 30930 15529 30930 15594 30931 15529 30931 15595 30931 15595 30932 15529 30932 15530 30932 15595 30933 15530 30933 15596 30933 15596 30934 15530 30934 15531 30934 15596 30935 15531 30935 15597 30935 15597 30936 15531 30936 15532 30936 15597 30937 15532 30937 15598 30937 15598 30938 15532 30938 15533 30938 15598 30939 15533 30939 15599 30939 15599 30940 15533 30940 15534 30940 15599 30941 15534 30941 15600 30941 15600 30942 15534 30942 15535 30942 15600 30943 15535 30943 15601 30943 15601 30944 15535 30944 15536 30944 15601 30945 15536 30945 15602 30945 15602 30946 15536 30946 15537 30946 15602 30947 15537 30947 15603 30947 15603 30948 15537 30948 15538 30948 15603 30949 15538 30949 15604 30949 15604 30950 15538 30950 15539 30950 15604 30951 15539 30951 15605 30951 15605 30952 15539 30952 15540 30952 15605 30953 15540 30953 15606 30953 15606 30954 15540 30954 15541 30954 15606 30955 15541 30955 15607 30955 15607 30956 15541 30956 15542 30956 15607 30957 15542 30957 15608 30957 15608 30958 15542 30958 15543 30958 15608 30959 15543 30959 15609 30959 15609 30960 15543 30960 15544 30960 15609 30961 15544 30961 15610 30961 15610 30962 15544 30962 15545 30962 15610 30963 15545 30963 15611 30963 15611 30964 15545 30964 15546 30964 15611 30965 15546 30965 15612 30965 15612 30966 15546 30966 15547 30966 15612 30967 15547 30967 15613 30967 15613 30968 15547 30968 15548 30968 15613 30969 15548 30969 15614 30969 15614 30970 15548 30970 15549 30970 15614 30971 15549 30971 15615 30971 15615 30972 15549 30972 15550 30972 15615 30973 15550 30973 15616 30973 15616 30974 15550 30974 15551 30974 15616 30975 15551 30975 15617 30975 15617 30976 15551 30976 15552 30976 15617 30977 15552 30977 15618 30977 15618 30978 15552 30978 15553 30978 15618 30979 15553 30979 15619 30979 15619 30980 15553 30980 15554 30980 15619 30981 15554 30981 15620 30981 15620 30982 15554 30982 15555 30982 15620 30983 15555 30983 15621 30983 15621 30984 15555 30984 15556 30984 15621 30985 15556 30985 15622 30985 15622 30986 15556 30986 15557 30986 15622 30987 15557 30987 15623 30987 15623 30988 15557 30988 15558 30988 15623 30989 15558 30989 15624 30989 15624 30990 15558 30990 15559 30990 15624 30991 15559 30991 15625 30991 15625 30992 15559 30992 15560 30992 15625 30993 15560 30993 15626 30993 15626 30994 15560 30994 15561 30994 15626 30995 15561 30995 15627 30995 15627 30996 15561 30996 15562 30996 15627 30997 15562 30997 15628 30997 15628 30998 15562 30998 15563 30998 15628 30999 15563 30999 15629 30999 15629 31000 15563 31000 15564 31000 15629 31001 15564 31001 15630 31001 15630 31002 15564 31002 15565 31002 15630 31003 15565 31003 15631 31003 15631 31004 15565 31004 15566 31004 15631 31005 15566 31005 15632 31005 15632 31006 15566 31006 15567 31006 15632 31007 15567 31007 15633 31007 15633 31008 15567 31008 15568 31008 15633 31009 15568 31009 15634 31009 15634 31010 15568 31010 15569 31010 15634 31011 15569 31011 15635 31011 15635 31012 15569 31012 15570 31012 15635 31013 15570 31013 15571 31013 15571 31014 15570 31014 15506 31014 15636 31015 15571 31015 15637 31015 15637 31016 15571 31016 15572 31016 15637 31017 15572 31017 15638 31017 15638 31018 15572 31018 15573 31018 15638 31019 15573 31019 15639 31019 15639 31020 15573 31020 15574 31020 15639 31021 15574 31021 15640 31021 15640 31022 15574 31022 15575 31022 15640 31023 15575 31023 15641 31023 15641 31024 15575 31024 15576 31024 15641 31025 15576 31025 15642 31025 15642 31026 15576 31026 15577 31026 15642 31027 15577 31027 15643 31027 15643 31028 15577 31028 15578 31028 15643 31029 15578 31029 15644 31029 15644 31030 15578 31030 15579 31030 15644 31031 15579 31031 15645 31031 15645 31032 15579 31032 15580 31032 15645 31033 15580 31033 15646 31033 15646 31034 15580 31034 15581 31034 15646 31035 15581 31035 15647 31035 15647 31036 15581 31036 15582 31036 15647 31037 15582 31037 15648 31037 15648 31038 15582 31038 15583 31038 15648 31039 15583 31039 15649 31039 15649 31040 15583 31040 15584 31040 15649 31041 15584 31041 15650 31041 15650 31042 15584 31042 15585 31042 15650 31043 15585 31043 15651 31043 15651 31044 15585 31044 15586 31044 15651 31045 15586 31045 15652 31045 15652 31046 15586 31046 15587 31046 15652 31047 15587 31047 15653 31047 15653 31048 15587 31048 15588 31048 15653 31049 15588 31049 15654 31049 15654 31050 15588 31050 15589 31050 15654 31051 15589 31051 15655 31051 15655 31052 15589 31052 15590 31052 15655 31053 15590 31053 15656 31053 15656 31054 15590 31054 15591 31054 15656 31055 15591 31055 15657 31055 15657 31056 15591 31056 15592 31056 15657 31057 15592 31057 15658 31057 15658 31058 15592 31058 15593 31058 15658 31059 15593 31059 15659 31059 15659 31060 15593 31060 15594 31060 15659 31061 15594 31061 15660 31061 15660 31062 15594 31062 15595 31062 15660 31063 15595 31063 15661 31063 15661 31064 15595 31064 15596 31064 15661 31065 15596 31065 15662 31065 15662 31066 15596 31066 15597 31066 15662 31067 15597 31067 15663 31067 15663 31068 15597 31068 15598 31068 15663 31069 15598 31069 15664 31069 15664 31070 15598 31070 15599 31070 15664 31071 15599 31071 15665 31071 15665 31072 15599 31072 15600 31072 15665 31073 15600 31073 15666 31073 15666 31074 15600 31074 15601 31074 15666 31075 15601 31075 15667 31075 15667 31076 15601 31076 15602 31076 15667 31077 15602 31077 15668 31077 15668 31078 15602 31078 15603 31078 15668 31079 15603 31079 15669 31079 15669 31080 15603 31080 15604 31080 15669 31081 15604 31081 15670 31081 15670 31082 15604 31082 15605 31082 15670 31083 15605 31083 15671 31083 15671 31084 15605 31084 15606 31084 15671 31085 15606 31085 15672 31085 15672 31086 15606 31086 15607 31086 15672 31087 15607 31087 15673 31087 15673 31088 15607 31088 15608 31088 15673 31089 15608 31089 15674 31089 15674 31090 15608 31090 15609 31090 15674 31091 15609 31091 15675 31091 15675 31092 15609 31092 15610 31092 15675 31093 15610 31093 15676 31093 15676 31094 15610 31094 15611 31094 15676 31095 15611 31095 15677 31095 15677 31096 15611 31096 15612 31096 15677 31097 15612 31097 15678 31097 15678 31098 15612 31098 15613 31098 15678 31099 15613 31099 15679 31099 15679 31100 15613 31100 15614 31100 15679 31101 15614 31101 15680 31101 15680 31102 15614 31102 15615 31102 15680 31103 15615 31103 15681 31103 15681 31104 15615 31104 15616 31104 15681 31105 15616 31105 15682 31105 15682 31106 15616 31106 15617 31106 15682 31107 15617 31107 15683 31107 15683 31108 15617 31108 15618 31108 15683 31109 15618 31109 15684 31109 15684 31110 15618 31110 15619 31110 15684 31111 15619 31111 15685 31111 15685 31112 15619 31112 15620 31112 15685 31113 15620 31113 15686 31113 15686 31114 15620 31114 15621 31114 15686 31115 15621 31115 15687 31115 15687 31116 15621 31116 15622 31116 15687 31117 15622 31117 15688 31117 15688 31118 15622 31118 15623 31118 15688 31119 15623 31119 15689 31119 15689 31120 15623 31120 15624 31120 15689 31121 15624 31121 15690 31121 15690 31122 15624 31122 15625 31122 15690 31123 15625 31123 15691 31123 15691 31124 15625 31124 15626 31124 15691 31125 15626 31125 15692 31125 15692 31126 15626 31126 15627 31126 15692 31127 15627 31127 15693 31127 15693 31128 15627 31128 15628 31128 15693 31129 15628 31129 15694 31129 15694 31130 15628 31130 15629 31130 15694 31131 15629 31131 15695 31131 15695 31132 15629 31132 15630 31132 15695 31133 15630 31133 15696 31133 15696 31134 15630 31134 15631 31134 15696 31135 15631 31135 15697 31135 15697 31136 15631 31136 15632 31136 15697 31137 15632 31137 15698 31137 15698 31138 15632 31138 15633 31138 15698 31139 15633 31139 15699 31139 15699 31140 15633 31140 15634 31140 15699 31141 15634 31141 15700 31141 15700 31142 15634 31142 15635 31142 15700 31143 15635 31143 15636 31143 15636 31144 15635 31144 15571 31144 15036 31145 15636 31145 15035 31145 15035 31146 15636 31146 15637 31146 15035 31147 15637 31147 15034 31147 15034 31148 15637 31148 15638 31148 15034 31149 15638 31149 15033 31149 15033 31150 15638 31150 15639 31150 15033 31151 15639 31151 15032 31151 15032 31152 15639 31152 15640 31152 15032 31153 15640 31153 15031 31153 15031 31154 15640 31154 15641 31154 15031 31155 15641 31155 15030 31155 15030 31156 15641 31156 15642 31156 15030 31157 15642 31157 15029 31157 15029 31158 15642 31158 15643 31158 15029 31159 15643 31159 15028 31159 15028 31160 15643 31160 15644 31160 15028 31161 15644 31161 15027 31161 15027 31162 15644 31162 15645 31162 15027 31163 15645 31163 15026 31163 15026 31164 15645 31164 15646 31164 15026 31165 15646 31165 15025 31165 15025 31166 15646 31166 15647 31166 15025 31167 15647 31167 15024 31167 15024 31168 15647 31168 15648 31168 15024 31169 15648 31169 15023 31169 15023 31170 15648 31170 15649 31170 15023 31171 15649 31171 15022 31171 15022 31172 15649 31172 15650 31172 15022 31173 15650 31173 15021 31173 15021 31174 15650 31174 15651 31174 15021 31175 15651 31175 15020 31175 15020 31176 15651 31176 15652 31176 15020 31177 15652 31177 15019 31177 15019 31178 15652 31178 15653 31178 15019 31179 15653 31179 15018 31179 15018 31180 15653 31180 15654 31180 15018 31181 15654 31181 15017 31181 15017 31182 15654 31182 15655 31182 15017 31183 15655 31183 15016 31183 15016 31184 15655 31184 15656 31184 15016 31185 15656 31185 15015 31185 15015 31186 15656 31186 15657 31186 15015 31187 15657 31187 15014 31187 15014 31188 15657 31188 15658 31188 15014 31189 15658 31189 15013 31189 15013 31190 15658 31190 15659 31190 15013 31191 15659 31191 15012 31191 15012 31192 15659 31192 15660 31192 15012 31193 15660 31193 15011 31193 15011 31194 15660 31194 15661 31194 15011 31195 15661 31195 15010 31195 15010 31196 15661 31196 15662 31196 15010 31197 15662 31197 15009 31197 15009 31198 15662 31198 15663 31198 15009 31199 15663 31199 15008 31199 15008 31200 15663 31200 15664 31200 15008 31201 15664 31201 15007 31201 15007 31202 15664 31202 15665 31202 15007 31203 15665 31203 15006 31203 15006 31204 15665 31204 15666 31204 15006 31205 15666 31205 15005 31205 15005 31206 15666 31206 15667 31206 15005 31207 15667 31207 15069 31207 15069 31208 15667 31208 15668 31208 15069 31209 15668 31209 15068 31209 15068 31210 15668 31210 15669 31210 15068 31211 15669 31211 15067 31211 15067 31212 15669 31212 15670 31212 15067 31213 15670 31213 15066 31213 15066 31214 15670 31214 15671 31214 15066 31215 15671 31215 15065 31215 15065 31216 15671 31216 15672 31216 15065 31217 15672 31217 15064 31217 15064 31218 15672 31218 15673 31218 15064 31219 15673 31219 15063 31219 15063 31220 15673 31220 15674 31220 15063 31221 15674 31221 15062 31221 15062 31222 15674 31222 15675 31222 15062 31223 15675 31223 15061 31223 15061 31224 15675 31224 15676 31224 15061 31225 15676 31225 15060 31225 15060 31226 15676 31226 15677 31226 15060 31227 15677 31227 15059 31227 15059 31228 15677 31228 15678 31228 15059 31229 15678 31229 15058 31229 15058 31230 15678 31230 15679 31230 15058 31231 15679 31231 15057 31231 15057 31232 15679 31232 15680 31232 15057 31233 15680 31233 15056 31233 15056 31234 15680 31234 15681 31234 15056 31235 15681 31235 15055 31235 15055 31236 15681 31236 15682 31236 15055 31237 15682 31237 15054 31237 15054 31238 15682 31238 15683 31238 15054 31239 15683 31239 15053 31239 15053 31240 15683 31240 15684 31240 15053 31241 15684 31241 15052 31241 15052 31242 15684 31242 15685 31242 15052 31243 15685 31243 15051 31243 15051 31244 15685 31244 15686 31244 15051 31245 15686 31245 15050 31245 15050 31246 15686 31246 15687 31246 15050 31247 15687 31247 15049 31247 15049 31248 15687 31248 15688 31248 15049 31249 15688 31249 15048 31249 15048 31250 15688 31250 15689 31250 15048 31251 15689 31251 15047 31251 15047 31252 15689 31252 15690 31252 15047 31253 15690 31253 15046 31253 15046 31254 15690 31254 15691 31254 15046 31255 15691 31255 15045 31255 15045 31256 15691 31256 15692 31256 15045 31257 15692 31257 15044 31257 15044 31258 15692 31258 15693 31258 15044 31259 15693 31259 15043 31259 15043 31260 15693 31260 15694 31260 15043 31261 15694 31261 15042 31261 15042 31262 15694 31262 15695 31262 15042 31263 15695 31263 15041 31263 15041 31264 15695 31264 15696 31264 15041 31265 15696 31265 15040 31265 15040 31266 15696 31266 15697 31266 15040 31267 15697 31267 15039 31267 15039 31268 15697 31268 15698 31268 15039 31269 15698 31269 15038 31269 15038 31270 15698 31270 15699 31270 15038 31271 15699 31271 15037 31271 15037 31272 15699 31272 15700 31272 15037 31273 15700 31273 15036 31273 15036 31274 15700 31274 15636 31274 15074 31275 15701 31275 15072 31275 15072 31276 15701 31276 15702 31276 15072 31277 15702 31277 15070 31277 15074 31278 15076 31278 15701 31278 15701 31279 15076 31279 15078 31279 15701 31280 15078 31280 15703 31280 15078 31281 15083 31281 15703 31281 15703 31282 15083 31282 15082 31282 15703 31283 15082 31283 15704 31283 15089 31284 15705 31284 15090 31284 15090 31285 15705 31285 15704 31285 15090 31286 15704 31286 15080 31286 15080 31287 15704 31287 15082 31287 15089 31288 15087 31288 15705 31288 15705 31289 15087 31289 15085 31289 15705 31290 15085 31290 15706 31290 15093 31291 15707 31291 15091 31291 15091 31292 15707 31292 15706 31292 15091 31293 15706 31293 15084 31293 15084 31294 15706 31294 15085 31294 15093 31295 15095 31295 15707 31295 15707 31296 15095 31296 15097 31296 15707 31297 15097 31297 15708 31297 15097 31298 15102 31298 15708 31298 15708 31299 15102 31299 15101 31299 15708 31300 15101 31300 15709 31300 15106 31301 15710 31301 15107 31301 15107 31302 15710 31302 15709 31302 15107 31303 15709 31303 15099 31303 15099 31304 15709 31304 15101 31304 15106 31305 15104 31305 15710 31305 15710 31306 15104 31306 15110 31306 15710 31307 15110 31307 15711 31307 15116 31308 15712 31308 15117 31308 15117 31309 15712 31309 15711 31309 15117 31310 15711 31310 15109 31310 15109 31311 15711 31311 15110 31311 15116 31312 15114 31312 15712 31312 15712 31313 15114 31313 15112 31313 15712 31314 15112 31314 15713 31314 15120 31315 15714 31315 15118 31315 15118 31316 15714 31316 15713 31316 15118 31317 15713 31317 15111 31317 15111 31318 15713 31318 15112 31318 15120 31319 15122 31319 15714 31319 15714 31320 15122 31320 15124 31320 15714 31321 15124 31321 15715 31321 15124 31322 15125 31322 15715 31322 15715 31323 15125 31323 15127 31323 15715 31324 15127 31324 15716 31324 15131 31325 15717 31325 15130 31325 15130 31326 15717 31326 15716 31326 15130 31327 15716 31327 15128 31327 15128 31328 15716 31328 15127 31328 15131 31329 15133 31329 15717 31329 15717 31330 15133 31330 15135 31330 15717 31331 15135 31331 15718 31331 15141 31332 15719 31332 15143 31332 15143 31333 15719 31333 15718 31333 15143 31334 15718 31334 15144 31334 15144 31335 15718 31335 15135 31335 15141 31336 15139 31336 15719 31336 15719 31337 15139 31337 15137 31337 15719 31338 15137 31338 15720 31338 15137 31339 15136 31339 15720 31339 15720 31340 15136 31340 15145 31340 15720 31341 15145 31341 15721 31341 15150 31342 15722 31342 15149 31342 15149 31343 15722 31343 15721 31343 15149 31344 15721 31344 15147 31344 15147 31345 15721 31345 15145 31345 15150 31346 15152 31346 15722 31346 15722 31347 15152 31347 15154 31347 15722 31348 15154 31348 15723 31348 15158 31349 15724 31349 15157 31349 15157 31350 15724 31350 15723 31350 15157 31351 15723 31351 15155 31351 15155 31352 15723 31352 15154 31352 15158 31353 15160 31353 15724 31353 15724 31354 15160 31354 15162 31354 15724 31355 15162 31355 15725 31355 15162 31356 15167 31356 15725 31356 15725 31357 15167 31357 15166 31357 15725 31358 15166 31358 15726 31358 15166 31359 15164 31359 15726 31359 15726 31360 15164 31360 15172 31360 15726 31361 15172 31361 15727 31361 15727 31362 15172 31362 15171 31362 15727 31363 15171 31363 15728 31363 15728 31364 15171 31364 15169 31364 15728 31365 15169 31365 15175 31365 15181 31366 15729 31366 15182 31366 15182 31367 15729 31367 15728 31367 15182 31368 15728 31368 15174 31368 15174 31369 15728 31369 15175 31369 15181 31370 15179 31370 15729 31370 15729 31371 15179 31371 15177 31371 15729 31372 15177 31372 15730 31372 15185 31373 15731 31373 15183 31373 15183 31374 15731 31374 15730 31374 15183 31375 15730 31375 15176 31375 15176 31376 15730 31376 15177 31376 15185 31377 15187 31377 15731 31377 15731 31378 15187 31378 15189 31378 15731 31379 15189 31379 15732 31379 15189 31380 15190 31380 15732 31380 15732 31381 15190 31381 15192 31381 15732 31382 15192 31382 15733 31382 15196 31383 15734 31383 15195 31383 15195 31384 15734 31384 15733 31384 15195 31385 15733 31385 15193 31385 15193 31386 15733 31386 15192 31386 15196 31387 15198 31387 15734 31387 15734 31388 15198 31388 15200 31388 15734 31389 15200 31389 15735 31389 15206 31390 15736 31390 15208 31390 15208 31391 15736 31391 15735 31391 15208 31392 15735 31392 15209 31392 15209 31393 15735 31393 15200 31393 15206 31394 15204 31394 15736 31394 15736 31395 15204 31395 15202 31395 15736 31396 15202 31396 15737 31396 15202 31397 15201 31397 15737 31397 15737 31398 15201 31398 15210 31398 15737 31399 15210 31399 15738 31399 15215 31400 15739 31400 15214 31400 15214 31401 15739 31401 15738 31401 15214 31402 15738 31402 15212 31402 15212 31403 15738 31403 15210 31403 15215 31404 15217 31404 15739 31404 15739 31405 15217 31405 15219 31405 15739 31406 15219 31406 15740 31406 15223 31407 15741 31407 15222 31407 15222 31408 15741 31408 15740 31408 15222 31409 15740 31409 15220 31409 15220 31410 15740 31410 15219 31410 15223 31411 15225 31411 15741 31411 15741 31412 15225 31412 15227 31412 15741 31413 15227 31413 15742 31413 15231 31414 15743 31414 15233 31414 15233 31415 15743 31415 15742 31415 15233 31416 15742 31416 15234 31416 15234 31417 15742 31417 15227 31417 15231 31418 15229 31418 15743 31418 15743 31419 15229 31419 15237 31419 15743 31420 15237 31420 15744 31420 15237 31421 15236 31421 15744 31421 15744 31422 15236 31422 15240 31422 15744 31423 15240 31423 15745 31423 15240 31424 15239 31424 15745 31424 15745 31425 15239 31425 15245 31425 15745 31426 15245 31426 15746 31426 15245 31427 15244 31427 15746 31427 15746 31428 15244 31428 15242 31428 15746 31429 15242 31429 15702 31429 15702 31430 15242 31430 15241 31430 15702 31431 15241 31431 15070 31431 15783 31466 15784 31466 15709 31466 15724 31467 15785 31467 15786 31467 15709 31468 15784 31468 15708 31468 15787 31469 15743 31469 15788 31469 15788 31470 15743 31470 15744 31470 15788 31471 15744 31471 15789 31471 15724 31472 15786 31472 15723 31472 15786 31473 15790 31473 15723 31473 15723 31474 15790 31474 15791 31474 15723 31475 15791 31475 15722 31475 15722 31476 15791 31476 15792 31476 15722 31477 15792 31477 15793 31477 15793 31478 15794 31478 15722 31478 15722 31479 15794 31479 15795 31479 15722 31480 15795 31480 15721 31480 15721 31481 15795 31481 15796 31481 15721 31482 15796 31482 15720 31482 15720 31483 15796 31483 15797 31483 15720 31484 15797 31484 15798 31484 15785 31485 15724 31485 15799 31485 15799 31486 15724 31486 15725 31486 15799 31487 15725 31487 15800 31487 15710 31488 15801 31488 15709 31488 15709 31489 15801 31489 15802 31489 15709 31490 15802 31490 15783 31490 15789 31491 15744 31491 15803 31491 15803 31492 15744 31492 15745 31492 15803 31493 15745 31493 15804 31493 15741 31494 15805 31494 15806 31494 15807 31495 15808 31495 15732 31495 15732 31496 15808 31496 15809 31496 15732 31497 15809 31497 15731 31497 15731 31498 15809 31498 15810 31498 15731 31499 15810 31499 15730 31499 15730 31500 15810 31500 15811 31500 15730 31501 15811 31501 15812 31501 15812 31502 15813 31502 15730 31502 15730 31503 15813 31503 15814 31503 15730 31504 15814 31504 15729 31504 15729 31505 15814 31505 15815 31505 15729 31506 15815 31506 15728 31506 15728 31507 15815 31507 15816 31507 15728 31508 15816 31508 15817 31508 15726 31509 15818 31509 15725 31509 15725 31510 15818 31510 15819 31510 15725 31511 15819 31511 15800 31511 15820 31512 15705 31512 15821 31512 15821 31513 15705 31513 15706 31513 15822 31514 15823 31514 15746 31514 15746 31515 15823 31515 15824 31515 15746 31516 15824 31516 15745 31516 15745 31517 15824 31517 15825 31517 15745 31518 15825 31518 15804 31518 15787 31519 15826 31519 15743 31519 15743 31520 15826 31520 15827 31520 15743 31521 15827 31521 15742 31521 15741 31522 15806 31522 15740 31522 15828 31523 15829 31523 15735 31523 15817 31524 15830 31524 15728 31524 15728 31525 15830 31525 15831 31525 15728 31526 15831 31526 15727 31526 15831 31527 15832 31527 15727 31527 15727 31528 15832 31528 15833 31528 15727 31529 15833 31529 15726 31529 15726 31530 15833 31530 15834 31530 15726 31531 15834 31531 15818 31531 15798 31532 15835 31532 15720 31532 15720 31533 15835 31533 15836 31533 15720 31534 15836 31534 15719 31534 15719 31535 15836 31535 15837 31535 15719 31536 15837 31536 15718 31536 15718 31537 15837 31537 15838 31537 15718 31538 15838 31538 15839 31538 15839 31539 15840 31539 15718 31539 15718 31540 15840 31540 15841 31540 15718 31541 15841 31541 15717 31541 15717 31542 15841 31542 15842 31542 15717 31543 15842 31543 15716 31543 15716 31544 15842 31544 15843 31544 15716 31545 15843 31545 15844 31545 15845 31546 15846 31546 15711 31546 15711 31547 15846 31547 15847 31547 15711 31548 15847 31548 15710 31548 15710 31549 15847 31549 15848 31549 15710 31550 15848 31550 15801 31550 15849 31551 15707 31551 15850 31551 15850 31552 15707 31552 15708 31552 15850 31553 15708 31553 15851 31553 15851 31554 15708 31554 15784 31554 15849 31555 15852 31555 15707 31555 15707 31556 15852 31556 15853 31556 15707 31557 15853 31557 15706 31557 15706 31558 15853 31558 15854 31558 15706 31559 15854 31559 15821 31559 15855 31560 15739 31560 15856 31560 15856 31561 15739 31561 15740 31561 15856 31562 15740 31562 15857 31562 15857 31563 15740 31563 15806 31563 15858 31564 15859 31564 15738 31564 15735 31565 15829 31565 15734 31565 15734 31566 15829 31566 15860 31566 15734 31567 15860 31567 15861 31567 15861 31568 15862 31568 15734 31568 15734 31569 15862 31569 15863 31569 15734 31570 15863 31570 15733 31570 15733 31571 15863 31571 15864 31571 15733 31572 15864 31572 15732 31572 15732 31573 15864 31573 15865 31573 15732 31574 15865 31574 15807 31574 15866 31575 15867 31575 15715 31575 15715 31576 15867 31576 15714 31576 15845 31577 15711 31577 15868 31577 15868 31578 15711 31578 15712 31578 15868 31579 15712 31579 15869 31579 15870 31580 15871 31580 15701 31580 15701 31581 15871 31581 15872 31581 15701 31582 15872 31582 15702 31582 15702 31583 15872 31583 15873 31583 15702 31584 15873 31584 15746 31584 15746 31585 15873 31585 15874 31585 15746 31586 15874 31586 15822 31586 15827 31587 15875 31587 15742 31587 15742 31588 15875 31588 15876 31588 15742 31589 15876 31589 15741 31589 15741 31590 15876 31590 15877 31590 15741 31591 15877 31591 15805 31591 15738 31592 15859 31592 15737 31592 15844 31593 15878 31593 15716 31593 15716 31594 15878 31594 15879 31594 15716 31595 15879 31595 15715 31595 15715 31596 15879 31596 15880 31596 15715 31597 15880 31597 15866 31597 15867 31598 15881 31598 15714 31598 15714 31599 15881 31599 15882 31599 15714 31600 15882 31600 15713 31600 15820 31601 15883 31601 15705 31601 15705 31602 15883 31602 15884 31602 15705 31603 15884 31603 15704 31603 15704 31604 15884 31604 15885 31604 15704 31605 15885 31605 15886 31605 15886 31606 15887 31606 15704 31606 15704 31607 15887 31607 15888 31607 15704 31608 15888 31608 15703 31608 15703 31609 15888 31609 15889 31609 15703 31610 15889 31610 15701 31610 15701 31611 15889 31611 15890 31611 15701 31612 15890 31612 15870 31612 15891 31613 15736 31613 15892 31613 15892 31614 15736 31614 15737 31614 15892 31615 15737 31615 15893 31615 15893 31616 15737 31616 15859 31616 15882 31617 15894 31617 15713 31617 15713 31618 15894 31618 15895 31618 15713 31619 15895 31619 15712 31619 15712 31620 15895 31620 15896 31620 15712 31621 15896 31621 15869 31621 15855 31622 15897 31622 15739 31622 15739 31623 15897 31623 15898 31623 15739 31624 15898 31624 15738 31624 15738 31625 15898 31625 15899 31625 15738 31626 15899 31626 15858 31626 15891 31627 15900 31627 15736 31627 15736 31628 15900 31628 15901 31628 15736 31629 15901 31629 15735 31629 15735 31630 15901 31630 15902 31630 15735 31631 15902 31631 15828 31631 15901 31704 15939 31704 15902 31704 15902 31705 15939 31705 15940 31705 15902 31706 15940 31706 15828 31706 15828 31707 15940 31707 15829 31707 15829 31708 15940 31708 15941 31708 15829 31709 15941 31709 15860 31709 15942 31710 15862 31710 15941 31710 15941 31711 15862 31711 15861 31711 15941 31712 15861 31712 15860 31712 15807 31713 15865 31713 15943 31713 15943 31714 15865 31714 15864 31714 15943 31715 15864 31715 15942 31715 15942 31716 15864 31716 15863 31716 15942 31717 15863 31717 15862 31717 15807 31718 15943 31718 15808 31718 15808 31719 15943 31719 15944 31719 15808 31720 15944 31720 15809 31720 15809 31721 15944 31721 15810 31721 15810 31722 15944 31722 15945 31722 15810 31723 15945 31723 15811 31723 15946 31724 15813 31724 15945 31724 15945 31725 15813 31725 15812 31725 15945 31726 15812 31726 15811 31726 15817 31727 15816 31727 15947 31727 15947 31728 15816 31728 15815 31728 15947 31729 15815 31729 15946 31729 15946 31730 15815 31730 15814 31730 15946 31731 15814 31731 15813 31731 15817 31732 15947 31732 15830 31732 15830 31733 15947 31733 15948 31733 15830 31734 15948 31734 15831 31734 15831 31735 15948 31735 15832 31735 15832 31736 15948 31736 15949 31736 15832 31737 15949 31737 15833 31737 15833 31738 15949 31738 15834 31738 15834 31739 15949 31739 15950 31739 15834 31740 15950 31740 15818 31740 15818 31741 15950 31741 15819 31741 15819 31742 15950 31742 15951 31742 15819 31743 15951 31743 15800 31743 15952 31744 15785 31744 15951 31744 15951 31745 15785 31745 15799 31745 15951 31746 15799 31746 15800 31746 15953 31747 15790 31747 15952 31747 15952 31748 15790 31748 15786 31748 15952 31749 15786 31749 15785 31749 15954 31750 15792 31750 15953 31750 15953 31751 15792 31751 15791 31751 15953 31752 15791 31752 15790 31752 15796 31753 15795 31753 15955 31753 15955 31754 15795 31754 15794 31754 15955 31755 15794 31755 15954 31755 15954 31756 15794 31756 15793 31756 15954 31757 15793 31757 15792 31757 15796 31758 15955 31758 15797 31758 15797 31759 15955 31759 15956 31759 15797 31760 15956 31760 15798 31760 15798 31761 15956 31761 15835 31761 15835 31762 15956 31762 15957 31762 15835 31763 15957 31763 15836 31763 15958 31764 15838 31764 15957 31764 15957 31765 15838 31765 15837 31765 15957 31766 15837 31766 15836 31766 15842 31767 15841 31767 15959 31767 15959 31768 15841 31768 15840 31768 15959 31769 15840 31769 15958 31769 15958 31770 15840 31770 15839 31770 15958 31771 15839 31771 15838 31771 15842 31772 15959 31772 15843 31772 15843 31773 15959 31773 15960 31773 15843 31774 15960 31774 15844 31774 15844 31775 15960 31775 15878 31775 15878 31776 15960 31776 15961 31776 15878 31777 15961 31777 15879 31777 15962 31778 15866 31778 15961 31778 15961 31779 15866 31779 15880 31779 15961 31780 15880 31780 15879 31780 15894 31781 15882 31781 15963 31781 15963 31782 15882 31782 15881 31782 15963 31783 15881 31783 15962 31783 15962 31784 15881 31784 15867 31784 15962 31785 15867 31785 15866 31785 15894 31786 15963 31786 15895 31786 15895 31787 15963 31787 15964 31787 15895 31788 15964 31788 15896 31788 15896 31789 15964 31789 15869 31789 15869 31790 15964 31790 15965 31790 15869 31791 15965 31791 15868 31791 15868 31792 15965 31792 15845 31792 15845 31793 15965 31793 15966 31793 15845 31794 15966 31794 15846 31794 15967 31795 15848 31795 15966 31795 15966 31796 15848 31796 15847 31796 15966 31797 15847 31797 15846 31797 15784 31798 15783 31798 15968 31798 15968 31799 15783 31799 15802 31799 15968 31800 15802 31800 15967 31800 15967 31801 15802 31801 15801 31801 15967 31802 15801 31802 15848 31802 15784 31803 15968 31803 15851 31803 15851 31804 15968 31804 15969 31804 15851 31805 15969 31805 15850 31805 15850 31806 15969 31806 15849 31806 15849 31807 15969 31807 15970 31807 15849 31808 15970 31808 15852 31808 15971 31809 15854 31809 15970 31809 15970 31810 15854 31810 15853 31810 15970 31811 15853 31811 15852 31811 15884 31812 15883 31812 15972 31812 15972 31813 15883 31813 15820 31813 15972 31814 15820 31814 15971 31814 15971 31815 15820 31815 15821 31815 15971 31816 15821 31816 15854 31816 15884 31817 15972 31817 15885 31817 15885 31818 15972 31818 15973 31818 15885 31819 15973 31819 15886 31819 15886 31820 15973 31820 15887 31820 15887 31821 15973 31821 15974 31821 15887 31822 15974 31822 15888 31822 15975 31823 15890 31823 15974 31823 15974 31824 15890 31824 15889 31824 15974 31825 15889 31825 15888 31825 15873 31826 15872 31826 15976 31826 15976 31827 15872 31827 15871 31827 15976 31828 15871 31828 15975 31828 15975 31829 15871 31829 15870 31829 15975 31830 15870 31830 15890 31830 15873 31831 15976 31831 15874 31831 15874 31832 15976 31832 15977 31832 15874 31833 15977 31833 15822 31833 15822 31834 15977 31834 15823 31834 15823 31835 15977 31835 15978 31835 15823 31836 15978 31836 15824 31836 15979 31837 15804 31837 15978 31837 15978 31838 15804 31838 15825 31838 15978 31839 15825 31839 15824 31839 15980 31840 15789 31840 15979 31840 15979 31841 15789 31841 15803 31841 15979 31842 15803 31842 15804 31842 15827 31843 15826 31843 15981 31843 15981 31844 15826 31844 15787 31844 15981 31845 15787 31845 15980 31845 15980 31846 15787 31846 15788 31846 15980 31847 15788 31847 15789 31847 15827 31848 15981 31848 15875 31848 15875 31849 15981 31849 15982 31849 15875 31850 15982 31850 15876 31850 15876 31851 15982 31851 15877 31851 15877 31852 15982 31852 15983 31852 15877 31853 15983 31853 15805 31853 15984 31854 15857 31854 15983 31854 15983 31855 15857 31855 15806 31855 15983 31856 15806 31856 15805 31856 15898 31857 15897 31857 15985 31857 15985 31858 15897 31858 15855 31858 15985 31859 15855 31859 15984 31859 15984 31860 15855 31860 15856 31860 15984 31861 15856 31861 15857 31861 15898 31862 15985 31862 15899 31862 15899 31863 15985 31863 15986 31863 15899 31864 15986 31864 15858 31864 15858 31865 15986 31865 15859 31865 15859 31866 15986 31866 15987 31866 15859 31867 15987 31867 15893 31867 15901 31868 15900 31868 15939 31868 15939 31869 15900 31869 15891 31869 15939 31870 15891 31870 15987 31870 15987 31871 15891 31871 15892 31871 15987 31872 15892 31872 15893 31872 16121 32006 15963 32006 16122 32006 16122 32007 15963 32007 15962 32007 16122 32008 15962 32008 16123 32008 16123 32009 15962 32009 15961 32009 16123 32010 15961 32010 16124 32010 16124 32011 15961 32011 15960 32011 16124 32012 15960 32012 16125 32012 16125 32013 15960 32013 15959 32013 16125 32014 15959 32014 16126 32014 16126 32015 15959 32015 15958 32015 16126 32016 15958 32016 16127 32016 16127 32017 15958 32017 15957 32017 16127 32018 15957 32018 16128 32018 16128 32019 15957 32019 15956 32019 16128 32020 15956 32020 16129 32020 16129 32021 15956 32021 15955 32021 16129 32022 15955 32022 16130 32022 16130 32023 15955 32023 15954 32023 16130 32024 15954 32024 16131 32024 16131 32025 15954 32025 15953 32025 16131 32026 15953 32026 16132 32026 16132 32027 15953 32027 15952 32027 16132 32028 15952 32028 16133 32028 16133 32029 15952 32029 15951 32029 16133 32030 15951 32030 16134 32030 16134 32031 15951 32031 15950 32031 16134 32032 15950 32032 16135 32032 16135 32033 15950 32033 15949 32033 16135 32034 15949 32034 16136 32034 16136 32035 15949 32035 15948 32035 16136 32036 15948 32036 16137 32036 16137 32037 15948 32037 15947 32037 16137 32038 15947 32038 16138 32038 16138 32039 15947 32039 15946 32039 16138 32040 15946 32040 16139 32040 16139 32041 15946 32041 15945 32041 16139 32042 15945 32042 16140 32042 16140 32043 15945 32043 15944 32043 16140 32044 15944 32044 16141 32044 16141 32045 15944 32045 15943 32045 16141 32046 15943 32046 16142 32046 16142 32047 15943 32047 15942 32047 16142 32048 15942 32048 16143 32048 16143 32049 15942 32049 15941 32049 16143 32050 15941 32050 16144 32050 16144 32051 15941 32051 15940 32051 16144 32052 15940 32052 16145 32052 16145 32053 15940 32053 15939 32053 16145 32054 15939 32054 16146 32054 16146 32055 15939 32055 15987 32055 16146 32056 15987 32056 16147 32056 16147 32057 15987 32057 15986 32057 16147 32058 15986 32058 16148 32058 16148 32059 15986 32059 15985 32059 16148 32060 15985 32060 16149 32060 16149 32061 15985 32061 15984 32061 16149 32062 15984 32062 16150 32062 16150 32063 15984 32063 15983 32063 16150 32064 15983 32064 16151 32064 16151 32065 15983 32065 15982 32065 16151 32066 15982 32066 16152 32066 16152 32067 15982 32067 15981 32067 16152 32068 15981 32068 16153 32068 16153 32069 15981 32069 15980 32069 16153 32070 15980 32070 16154 32070 16154 32071 15980 32071 15979 32071 16154 32072 15979 32072 16155 32072 16155 32073 15979 32073 15978 32073 16155 32074 15978 32074 16156 32074 16156 32075 15978 32075 15977 32075 16156 32076 15977 32076 16157 32076 16157 32077 15977 32077 15976 32077 16157 32078 15976 32078 16158 32078 16158 32079 15976 32079 15975 32079 16158 32080 15975 32080 16159 32080 16159 32081 15975 32081 15974 32081 16159 32082 15974 32082 16160 32082 16160 32083 15974 32083 15973 32083 16160 32084 15973 32084 16161 32084 16161 32085 15973 32085 15972 32085 16161 32086 15972 32086 16162 32086 16162 32087 15972 32087 15971 32087 16162 32088 15971 32088 16163 32088 16163 32089 15971 32089 15970 32089 16163 32090 15970 32090 16164 32090 16164 32091 15970 32091 15969 32091 16164 32092 15969 32092 16165 32092 16165 32093 15969 32093 15968 32093 16165 32094 15968 32094 16166 32094 16166 32095 15968 32095 15967 32095 16166 32096 15967 32096 16167 32096 16167 32097 15967 32097 15966 32097 16167 32098 15966 32098 16168 32098 16168 32099 15966 32099 15965 32099 16168 32100 15965 32100 16169 32100 16169 32101 15965 32101 15964 32101 16169 32102 15964 32102 16121 32102 16121 32103 15964 32103 15963 32103 16170 32104 16121 32104 16171 32104 16171 32105 16121 32105 16122 32105 16171 32106 16122 32106 16172 32106 16172 32107 16122 32107 16123 32107 16172 32108 16123 32108 16173 32108 16173 32109 16123 32109 16124 32109 16173 32110 16124 32110 16174 32110 16174 32111 16124 32111 16125 32111 16174 32112 16125 32112 16175 32112 16175 32113 16125 32113 16126 32113 16175 32114 16126 32114 16176 32114 16176 32115 16126 32115 16127 32115 16176 32116 16127 32116 16177 32116 16177 32117 16127 32117 16128 32117 16177 32118 16128 32118 16178 32118 16178 32119 16128 32119 16129 32119 16178 32120 16129 32120 16179 32120 16179 32121 16129 32121 16130 32121 16179 32122 16130 32122 16180 32122 16180 32123 16130 32123 16131 32123 16180 32124 16131 32124 16181 32124 16181 32125 16131 32125 16132 32125 16181 32126 16132 32126 16182 32126 16182 32127 16132 32127 16133 32127 16182 32128 16133 32128 16183 32128 16183 32129 16133 32129 16134 32129 16183 32130 16134 32130 16184 32130 16184 32131 16134 32131 16135 32131 16184 32132 16135 32132 16185 32132 16185 32133 16135 32133 16136 32133 16185 32134 16136 32134 16186 32134 16186 32135 16136 32135 16137 32135 16186 32136 16137 32136 16187 32136 16187 32137 16137 32137 16138 32137 16187 32138 16138 32138 16188 32138 16188 32139 16138 32139 16139 32139 16188 32140 16139 32140 16189 32140 16189 32141 16139 32141 16140 32141 16189 32142 16140 32142 16190 32142 16190 32143 16140 32143 16141 32143 16190 32144 16141 32144 16191 32144 16191 32145 16141 32145 16142 32145 16191 32146 16142 32146 16192 32146 16192 32147 16142 32147 16143 32147 16192 32148 16143 32148 16193 32148 16193 32149 16143 32149 16144 32149 16193 32150 16144 32150 16194 32150 16194 32151 16144 32151 16145 32151 16194 32152 16145 32152 16195 32152 16195 32153 16145 32153 16146 32153 16195 32154 16146 32154 16196 32154 16196 32155 16146 32155 16147 32155 16196 32156 16147 32156 16197 32156 16197 32157 16147 32157 16148 32157 16197 32158 16148 32158 16198 32158 16198 32159 16148 32159 16149 32159 16198 32160 16149 32160 16199 32160 16199 32161 16149 32161 16150 32161 16199 32162 16150 32162 16200 32162 16200 32163 16150 32163 16151 32163 16200 32164 16151 32164 16201 32164 16201 32165 16151 32165 16152 32165 16201 32166 16152 32166 16202 32166 16202 32167 16152 32167 16153 32167 16202 32168 16153 32168 16203 32168 16203 32169 16153 32169 16154 32169 16203 32170 16154 32170 16204 32170 16204 32171 16154 32171 16155 32171 16204 32172 16155 32172 16205 32172 16205 32173 16155 32173 16156 32173 16205 32174 16156 32174 16206 32174 16206 32175 16156 32175 16157 32175 16206 32176 16157 32176 16207 32176 16207 32177 16157 32177 16158 32177 16207 32178 16158 32178 16208 32178 16208 32179 16158 32179 16159 32179 16208 32180 16159 32180 16209 32180 16209 32181 16159 32181 16160 32181 16209 32182 16160 32182 16210 32182 16210 32183 16160 32183 16161 32183 16210 32184 16161 32184 16211 32184 16211 32185 16161 32185 16162 32185 16211 32186 16162 32186 16212 32186 16212 32187 16162 32187 16163 32187 16212 32188 16163 32188 16213 32188 16213 32189 16163 32189 16164 32189 16213 32190 16164 32190 16214 32190 16214 32191 16164 32191 16165 32191 16214 32192 16165 32192 16215 32192 16215 32193 16165 32193 16166 32193 16215 32194 16166 32194 16216 32194 16216 32195 16166 32195 16167 32195 16216 32196 16167 32196 16217 32196 16217 32197 16167 32197 16168 32197 16217 32198 16168 32198 16218 32198 16218 32199 16168 32199 16169 32199 16218 32200 16169 32200 16170 32200 16170 32201 16169 32201 16121 32201 16464 32910 16465 32910 16466 32910 16467 32911 16465 32911 16464 32911 16464 32912 16468 32912 16469 32912 16470 32913 16468 32913 16464 32913 16466 32914 16470 32914 16464 32914 16464 32915 16471 32915 16472 32915 16473 32916 16471 32916 16464 32916 16469 32917 16473 32917 16464 32917 16464 32918 16474 32918 16475 32918 16476 32919 16474 32919 16464 32919 16472 32920 16476 32920 16464 32920 16464 32921 16477 32921 16478 32921 16479 32922 16477 32922 16464 32922 16475 32923 16479 32923 16464 32923 16464 32924 16480 32924 16481 32924 16482 32925 16480 32925 16464 32925 16478 32926 16482 32926 16464 32926 16464 32927 16483 32927 16484 32927 16485 32928 16483 32928 16464 32928 16481 32929 16485 32929 16464 32929 16464 32930 16486 32930 16487 32930 16488 32931 16486 32931 16464 32931 16484 32932 16488 32932 16464 32932 16464 32933 16489 32933 16490 32933 16491 32934 16489 32934 16464 32934 16487 32935 16491 32935 16464 32935 16464 32936 16492 32936 16493 32936 16494 32937 16492 32937 16464 32937 16490 32938 16494 32938 16464 32938 16464 32939 16495 32939 16496 32939 16497 32940 16495 32940 16464 32940 16493 32941 16497 32941 16464 32941 16464 32942 16498 32942 16499 32942 16500 32943 16498 32943 16464 32943 16496 32944 16500 32944 16464 32944 16499 32945 16467 32945 16464 32945 16482 32946 16478 32946 16501 32946 16501 32947 16478 32947 16477 32947 16501 32948 16477 32948 16479 32948 16479 32949 16475 32949 16501 32949 16501 32950 16475 32950 16474 32950 16501 32951 16474 32951 16476 32951 16473 32952 16469 32952 16502 32952 16502 32953 16469 32953 16468 32953 16502 32954 16468 32954 16470 32954 16476 32955 16472 32955 16502 32955 16502 32956 16472 32956 16471 32956 16502 32957 16471 32957 16473 32957 16470 32958 16466 32958 16503 32958 16503 32959 16466 32959 16465 32959 16503 32960 16465 32960 16467 32960 16467 32961 16499 32961 16503 32961 16503 32962 16499 32962 16498 32962 16503 32963 16498 32963 16500 32963 16500 32964 16496 32964 16504 32964 16504 32965 16496 32965 16495 32965 16504 32966 16495 32966 16497 32966 16497 32967 16493 32967 16504 32967 16504 32968 16493 32968 16492 32968 16504 32969 16492 32969 16494 32969 16488 32970 16484 32970 16505 32970 16505 32971 16484 32971 16483 32971 16505 32972 16483 32972 16485 32972 16485 32973 16481 32973 16505 32973 16505 32974 16481 32974 16480 32974 16505 32975 16480 32975 16482 32975 16491 32976 16487 32976 16506 32976 16506 32977 16487 32977 16486 32977 16506 32978 16486 32978 16488 32978 16494 32979 16490 32979 16506 32979 16506 32980 16490 32980 16489 32980 16506 32981 16489 32981 16491 32981 16501 32982 16507 32982 16482 32982 16482 32983 16507 32983 16508 32983 16482 32984 16508 32984 16505 32984 16502 32985 16509 32985 16476 32985 16476 32986 16509 32986 16507 32986 16476 32987 16507 32987 16501 32987 16503 32988 16510 32988 16470 32988 16470 32989 16510 32989 16509 32989 16470 32990 16509 32990 16502 32990 16504 32991 16511 32991 16500 32991 16500 32992 16511 32992 16510 32992 16500 32993 16510 32993 16503 32993 16506 32994 16512 32994 16494 32994 16494 32995 16512 32995 16511 32995 16494 32996 16511 32996 16504 32996 16505 32997 16508 32997 16488 32997 16488 32998 16508 32998 16512 32998 16488 32999 16512 32999 16506 32999 16513 33000 16514 33000 16511 33000 16515 33001 16516 33001 16507 33001 16507 33002 16516 33002 16517 33002 16507 33003 16517 33003 16518 33003 16509 33004 16519 33004 16520 33004 16514 33005 16521 33005 16511 33005 16511 33006 16521 33006 16522 33006 16511 33007 16522 33007 16523 33007 16524 33008 16510 33008 16525 33008 16525 33009 16510 33009 16526 33009 16524 33010 16527 33010 16510 33010 16510 33011 16527 33011 16528 33011 16510 33012 16528 33012 16529 33012 16512 33013 16530 33013 16531 33013 16532 33014 16533 33014 16508 33014 16534 33015 16535 33015 16509 33015 16509 33016 16535 33016 16536 33016 16529 33017 16537 33017 16510 33017 16510 33018 16537 33018 16538 33018 16510 33019 16538 33019 16539 33019 16520 33020 16540 33020 16509 33020 16509 33021 16540 33021 16541 33021 16509 33022 16541 33022 16534 33022 16523 33023 16542 33023 16511 33023 16511 33024 16542 33024 16543 33024 16511 33025 16543 33025 16510 33025 16510 33026 16543 33026 16544 33026 16510 33027 16544 33027 16526 33027 16545 33028 16546 33028 16512 33028 16512 33029 16546 33029 16547 33029 16512 33030 16547 33030 16511 33030 16547 33031 16548 33031 16511 33031 16511 33032 16548 33032 16549 33032 16511 33033 16549 33033 16550 33033 16536 33034 16551 33034 16509 33034 16509 33035 16551 33035 16552 33035 16509 33036 16552 33036 16507 33036 16507 33037 16552 33037 16553 33037 16507 33038 16553 33038 16515 33038 16539 33039 16554 33039 16510 33039 16510 33040 16554 33040 16555 33040 16510 33041 16555 33041 16509 33041 16509 33042 16555 33042 16556 33042 16509 33043 16556 33043 16519 33043 16557 33044 16558 33044 16512 33044 16512 33045 16558 33045 16559 33045 16512 33046 16559 33046 16545 33046 16550 33047 16560 33047 16511 33047 16511 33048 16560 33048 16561 33048 16511 33049 16561 33049 16513 33049 16531 33050 16562 33050 16512 33050 16512 33051 16562 33051 16563 33051 16512 33052 16563 33052 16557 33052 16518 33053 16564 33053 16507 33053 16507 33054 16564 33054 16565 33054 16507 33055 16565 33055 16566 33055 16533 33056 16567 33056 16508 33056 16508 33057 16567 33057 16568 33057 16508 33058 16568 33058 16569 33058 16569 33059 16570 33059 16508 33059 16508 33060 16570 33060 16571 33060 16508 33061 16571 33061 16572 33061 16572 33062 16573 33062 16508 33062 16508 33063 16573 33063 16574 33063 16508 33064 16574 33064 16512 33064 16512 33065 16574 33065 16575 33065 16512 33066 16575 33066 16530 33066 16566 33067 16576 33067 16507 33067 16507 33068 16576 33068 16577 33068 16507 33069 16577 33069 16508 33069 16508 33070 16577 33070 16578 33070 16508 33071 16578 33071 16532 33071 16548 33072 16547 33072 16579 33072 16579 33073 16547 33073 16546 33073 16579 33074 16546 33074 16580 33074 16580 33075 16546 33075 16545 33075 16580 33076 16545 33076 16581 33076 16581 33077 16545 33077 16559 33077 16581 33078 16559 33078 16582 33078 16582 33079 16559 33079 16558 33079 16582 33080 16558 33080 16583 33080 16583 33081 16558 33081 16557 33081 16583 33082 16557 33082 16584 33082 16584 33083 16557 33083 16563 33083 16584 33084 16563 33084 16585 33084 16585 33085 16563 33085 16562 33085 16585 33086 16562 33086 16586 33086 16586 33087 16562 33087 16531 33087 16586 33088 16531 33088 16587 33088 16587 33089 16531 33089 16530 33089 16587 33090 16530 33090 16588 33090 16588 33091 16530 33091 16575 33091 16588 33092 16575 33092 16589 33092 16589 33093 16575 33093 16574 33093 16589 33094 16574 33094 16590 33094 16590 33095 16574 33095 16573 33095 16590 33096 16573 33096 16591 33096 16591 33097 16573 33097 16572 33097 16591 33098 16572 33098 16592 33098 16592 33099 16572 33099 16571 33099 16592 33100 16571 33100 16593 33100 16593 33101 16571 33101 16570 33101 16593 33102 16570 33102 16594 33102 16594 33103 16570 33103 16569 33103 16594 33104 16569 33104 16595 33104 16595 33105 16569 33105 16568 33105 16595 33106 16568 33106 16596 33106 16596 33107 16568 33107 16567 33107 16596 33108 16567 33108 16597 33108 16597 33109 16567 33109 16533 33109 16597 33110 16533 33110 16598 33110 16598 33111 16533 33111 16532 33111 16598 33112 16532 33112 16599 33112 16599 33113 16532 33113 16578 33113 16599 33114 16578 33114 16600 33114 16600 33115 16578 33115 16577 33115 16600 33116 16577 33116 16601 33116 16601 33117 16577 33117 16576 33117 16601 33118 16576 33118 16602 33118 16602 33119 16576 33119 16566 33119 16602 33120 16566 33120 16603 33120 16603 33121 16566 33121 16565 33121 16603 33122 16565 33122 16604 33122 16604 33123 16565 33123 16564 33123 16604 33124 16564 33124 16605 33124 16605 33125 16564 33125 16518 33125 16605 33126 16518 33126 16606 33126 16606 33127 16518 33127 16517 33127 16606 33128 16517 33128 16607 33128 16607 33129 16517 33129 16516 33129 16607 33130 16516 33130 16608 33130 16608 33131 16516 33131 16515 33131 16608 33132 16515 33132 16609 33132 16609 33133 16515 33133 16553 33133 16609 33134 16553 33134 16610 33134 16610 33135 16553 33135 16552 33135 16610 33136 16552 33136 16611 33136 16611 33137 16552 33137 16551 33137 16611 33138 16551 33138 16612 33138 16612 33139 16551 33139 16536 33139 16612 33140 16536 33140 16613 33140 16613 33141 16536 33141 16535 33141 16613 33142 16535 33142 16614 33142 16614 33143 16535 33143 16534 33143 16614 33144 16534 33144 16615 33144 16615 33145 16534 33145 16541 33145 16615 33146 16541 33146 16616 33146 16616 33147 16541 33147 16540 33147 16616 33148 16540 33148 16617 33148 16617 33149 16540 33149 16520 33149 16617 33150 16520 33150 16618 33150 16618 33151 16520 33151 16519 33151 16618 33152 16519 33152 16619 33152 16619 33153 16519 33153 16556 33153 16619 33154 16556 33154 16620 33154 16620 33155 16556 33155 16555 33155 16620 33156 16555 33156 16621 33156 16621 33157 16555 33157 16554 33157 16621 33158 16554 33158 16622 33158 16622 33159 16554 33159 16539 33159 16622 33160 16539 33160 16623 33160 16623 33161 16539 33161 16538 33161 16623 33162 16538 33162 16624 33162 16624 33163 16538 33163 16537 33163 16624 33164 16537 33164 16625 33164 16625 33165 16537 33165 16529 33165 16625 33166 16529 33166 16626 33166 16626 33167 16529 33167 16528 33167 16626 33168 16528 33168 16627 33168 16627 33169 16528 33169 16527 33169 16627 33170 16527 33170 16628 33170 16628 33171 16527 33171 16524 33171 16628 33172 16524 33172 16629 33172 16629 33173 16524 33173 16525 33173 16629 33174 16525 33174 16630 33174 16630 33175 16525 33175 16526 33175 16630 33176 16526 33176 16631 33176 16631 33177 16526 33177 16544 33177 16631 33178 16544 33178 16632 33178 16632 33179 16544 33179 16543 33179 16632 33180 16543 33180 16633 33180 16633 33181 16543 33181 16542 33181 16633 33182 16542 33182 16634 33182 16634 33183 16542 33183 16523 33183 16634 33184 16523 33184 16635 33184 16635 33185 16523 33185 16522 33185 16635 33186 16522 33186 16636 33186 16636 33187 16522 33187 16521 33187 16636 33188 16521 33188 16637 33188 16637 33189 16521 33189 16514 33189 16637 33190 16514 33190 16638 33190 16638 33191 16514 33191 16513 33191 16638 33192 16513 33192 16639 33192 16639 33193 16513 33193 16561 33193 16639 33194 16561 33194 16640 33194 16640 33195 16561 33195 16560 33195 16640 33196 16560 33196 16641 33196 16641 33197 16560 33197 16550 33197 16641 33198 16550 33198 16642 33198 16642 33199 16550 33199 16549 33199 16642 33200 16549 33200 16643 33200 16643 33201 16549 33201 16548 33201 16643 33202 16548 33202 16579 33202 16644 33203 16645 33203 16646 33203 16646 33204 16645 33204 16647 33204 16646 33205 16647 33205 16648 33205 16648 33206 16647 33206 16649 33206 16648 33207 16649 33207 16650 33207 16650 33208 16649 33208 16651 33208 16650 33209 16651 33209 16652 33209 16653 33210 16654 33210 16655 33210 16655 33211 16654 33211 16656 33211 16655 33212 16656 33212 16651 33212 16651 33213 16656 33213 16657 33213 16651 33214 16657 33214 16652 33214 16658 33215 16659 33215 16660 33215 16660 33216 16659 33216 16661 33216 16660 33217 16661 33217 16662 33217 16662 33218 16661 33218 16663 33218 16662 33219 16663 33219 16653 33219 16653 33220 16663 33220 16664 33220 16653 33221 16664 33221 16654 33221 16658 33222 16660 33222 16665 33222 16665 33223 16660 33223 16666 33223 16665 33224 16666 33224 16667 33224 16667 33225 16666 33225 16668 33225 16667 33226 16668 33226 16669 33226 16669 33227 16668 33227 16670 33227 16669 33228 16670 33228 16671 33228 16672 33229 16673 33229 16674 33229 16674 33230 16673 33230 16675 33230 16674 33231 16675 33231 16670 33231 16670 33232 16675 33232 16676 33232 16670 33233 16676 33233 16671 33233 16677 33234 16678 33234 16679 33234 16679 33235 16678 33235 16680 33235 16679 33236 16680 33236 16672 33236 16672 33237 16680 33237 16681 33237 16672 33238 16681 33238 16673 33238 16682 33239 16683 33239 16677 33239 16677 33240 16683 33240 16684 33240 16677 33241 16684 33241 16678 33241 16685 33242 16686 33242 16687 33242 16687 33243 16686 33243 16688 33243 16687 33244 16688 33244 16689 33244 16689 33245 16688 33245 16690 33245 16689 33246 16690 33246 16682 33246 16682 33247 16690 33247 16691 33247 16682 33248 16691 33248 16683 33248 16685 33249 16687 33249 16692 33249 16692 33250 16687 33250 16693 33250 16692 33251 16693 33251 16694 33251 16694 33252 16693 33252 16695 33252 16694 33253 16695 33253 16696 33253 16696 33254 16695 33254 16697 33254 16696 33255 16697 33255 16698 33255 16698 33256 16697 33256 16699 33256 16699 33257 16697 33257 16700 33257 16699 33258 16700 33258 16701 33258 16701 33259 16700 33259 16702 33259 16702 33260 16700 33260 16703 33260 16702 33261 16703 33261 16704 33261 16704 33262 16703 33262 16705 33262 16705 33263 16703 33263 16706 33263 16705 33264 16706 33264 16707 33264 16707 33265 16706 33265 16708 33265 16707 33266 16708 33266 16709 33266 16710 33267 16711 33267 16712 33267 16712 33268 16711 33268 16713 33268 16712 33269 16713 33269 16714 33269 16714 33270 16713 33270 16715 33270 16714 33271 16715 33271 16716 33271 16716 33272 16715 33272 16717 33272 16716 33273 16717 33273 16708 33273 16708 33274 16717 33274 16718 33274 16708 33275 16718 33275 16709 33275 16710 33276 16712 33276 16719 33276 16719 33277 16712 33277 16720 33277 16719 33278 16720 33278 16721 33278 16721 33279 16720 33279 16722 33279 16721 33280 16722 33280 16723 33280 16723 33281 16722 33281 16724 33281 16724 33282 16722 33282 16725 33282 16724 33283 16725 33283 16726 33283 16726 33284 16725 33284 16727 33284 16726 33285 16727 33285 16728 33285 16728 33286 16727 33286 16729 33286 16729 33287 16727 33287 16730 33287 16729 33288 16730 33288 16731 33288 16731 33289 16730 33289 16732 33289 16732 33290 16730 33290 16733 33290 16732 33291 16733 33291 16734 33291 16734 33292 16733 33292 16735 33292 16734 33293 16735 33293 16736 33293 16737 33294 16738 33294 16739 33294 16739 33295 16738 33295 16740 33295 16739 33296 16740 33296 16735 33296 16735 33297 16740 33297 16741 33297 16735 33298 16741 33298 16736 33298 16742 33299 16743 33299 16744 33299 16744 33300 16743 33300 16745 33300 16744 33301 16745 33301 16737 33301 16737 33302 16745 33302 16746 33302 16737 33303 16746 33303 16738 33303 16747 33304 16748 33304 16742 33304 16742 33305 16748 33305 16749 33305 16742 33306 16749 33306 16743 33306 16750 33307 16751 33307 16752 33307 16752 33308 16751 33308 16753 33308 16752 33309 16753 33309 16754 33309 16754 33310 16753 33310 16755 33310 16754 33311 16755 33311 16747 33311 16747 33312 16755 33312 16756 33312 16747 33313 16756 33313 16748 33313 16750 33314 16752 33314 16757 33314 16757 33315 16752 33315 16758 33315 16757 33316 16758 33316 16759 33316 16759 33317 16758 33317 16760 33317 16759 33318 16760 33318 16761 33318 16761 33319 16760 33319 16762 33319 16761 33320 16762 33320 16763 33320 16763 33321 16762 33321 16764 33321 16764 33322 16762 33322 16765 33322 16764 33323 16765 33323 16766 33323 16766 33324 16765 33324 16767 33324 16767 33325 16765 33325 16768 33325 16767 33326 16768 33326 16769 33326 16769 33327 16768 33327 16770 33327 16770 33328 16768 33328 16771 33328 16770 33329 16771 33329 16772 33329 16772 33330 16771 33330 16773 33330 16772 33331 16773 33331 16774 33331 16775 33332 16776 33332 16777 33332 16777 33333 16776 33333 16778 33333 16777 33334 16778 33334 16779 33334 16779 33335 16778 33335 16780 33335 16779 33336 16780 33336 16781 33336 16781 33337 16780 33337 16782 33337 16781 33338 16782 33338 16773 33338 16773 33339 16782 33339 16783 33339 16773 33340 16783 33340 16774 33340 16775 33341 16777 33341 16784 33341 16784 33342 16777 33342 16785 33342 16784 33343 16785 33343 16786 33343 16786 33344 16785 33344 16787 33344 16786 33345 16787 33345 16788 33345 16788 33346 16787 33346 16789 33346 16789 33347 16787 33347 16790 33347 16789 33348 16790 33348 16791 33348 16791 33349 16790 33349 16792 33349 16791 33350 16792 33350 16793 33350 16793 33351 16792 33351 16794 33351 16794 33352 16792 33352 16795 33352 16794 33353 16795 33353 16796 33353 16796 33354 16795 33354 16797 33354 16797 33355 16795 33355 16798 33355 16797 33356 16798 33356 16799 33356 16799 33357 16798 33357 16800 33357 16799 33358 16800 33358 16801 33358 16802 33359 16803 33359 16804 33359 16804 33360 16803 33360 16805 33360 16804 33361 16805 33361 16806 33361 16806 33362 16805 33362 16807 33362 16806 33363 16807 33363 16800 33363 16800 33364 16807 33364 16808 33364 16800 33365 16808 33365 16801 33365 16809 33366 16810 33366 16802 33366 16802 33367 16810 33367 16811 33367 16802 33368 16811 33368 16803 33368 16812 33369 16813 33369 16809 33369 16809 33370 16813 33370 16814 33370 16809 33371 16814 33371 16810 33371 16644 33372 16815 33372 16645 33372 16645 33373 16815 33373 16816 33373 16645 33374 16816 33374 16817 33374 16817 33375 16816 33375 16818 33375 16817 33376 16818 33376 16812 33376 16812 33377 16818 33377 16819 33377 16812 33378 16819 33378 16813 33378 16820 33379 16773 33379 16821 33379 16821 33380 16773 33380 16771 33380 16821 33381 16771 33381 16822 33381 16822 33382 16771 33382 16768 33382 16822 33383 16768 33383 16823 33383 16823 33384 16768 33384 16765 33384 16823 33385 16765 33385 16824 33385 16824 33386 16765 33386 16762 33386 16824 33387 16762 33387 16825 33387 16825 33388 16762 33388 16760 33388 16825 33389 16760 33389 16826 33389 16826 33390 16760 33390 16758 33390 16826 33391 16758 33391 16827 33391 16827 33392 16758 33392 16752 33392 16827 33393 16752 33393 16828 33393 16828 33394 16752 33394 16754 33394 16828 33395 16754 33395 16829 33395 16829 33396 16754 33396 16747 33396 16829 33397 16747 33397 16830 33397 16830 33398 16747 33398 16742 33398 16830 33399 16742 33399 16831 33399 16831 33400 16742 33400 16744 33400 16831 33401 16744 33401 16832 33401 16832 33402 16744 33402 16737 33402 16832 33403 16737 33403 16833 33403 16833 33404 16737 33404 16739 33404 16833 33405 16739 33405 16834 33405 16834 33406 16739 33406 16735 33406 16834 33407 16735 33407 16835 33407 16835 33408 16735 33408 16733 33408 16835 33409 16733 33409 16836 33409 16836 33410 16733 33410 16730 33410 16836 33411 16730 33411 16837 33411 16837 33412 16730 33412 16727 33412 16837 33413 16727 33413 16838 33413 16838 33414 16727 33414 16725 33414 16838 33415 16725 33415 16839 33415 16839 33416 16725 33416 16722 33416 16839 33417 16722 33417 16840 33417 16840 33418 16722 33418 16720 33418 16840 33419 16720 33419 16841 33419 16841 33420 16720 33420 16712 33420 16841 33421 16712 33421 16842 33421 16842 33422 16712 33422 16714 33422 16842 33423 16714 33423 16843 33423 16843 33424 16714 33424 16716 33424 16843 33425 16716 33425 16844 33425 16844 33426 16716 33426 16708 33426 16844 33427 16708 33427 16845 33427 16845 33428 16708 33428 16706 33428 16845 33429 16706 33429 16846 33429 16846 33430 16706 33430 16703 33430 16846 33431 16703 33431 16847 33431 16847 33432 16703 33432 16700 33432 16847 33433 16700 33433 16848 33433 16848 33434 16700 33434 16697 33434 16848 33435 16697 33435 16849 33435 16849 33436 16697 33436 16695 33436 16849 33437 16695 33437 16850 33437 16850 33438 16695 33438 16693 33438 16850 33439 16693 33439 16851 33439 16851 33440 16693 33440 16687 33440 16851 33441 16687 33441 16852 33441 16852 33442 16687 33442 16689 33442 16852 33443 16689 33443 16853 33443 16853 33444 16689 33444 16682 33444 16853 33445 16682 33445 16854 33445 16854 33446 16682 33446 16677 33446 16854 33447 16677 33447 16855 33447 16855 33448 16677 33448 16679 33448 16855 33449 16679 33449 16856 33449 16856 33450 16679 33450 16672 33450 16856 33451 16672 33451 16857 33451 16857 33452 16672 33452 16674 33452 16857 33453 16674 33453 16858 33453 16858 33454 16674 33454 16670 33454 16858 33455 16670 33455 16859 33455 16859 33456 16670 33456 16668 33456 16859 33457 16668 33457 16860 33457 16860 33458 16668 33458 16666 33458 16860 33459 16666 33459 16861 33459 16861 33460 16666 33460 16660 33460 16861 33461 16660 33461 16862 33461 16862 33462 16660 33462 16662 33462 16862 33463 16662 33463 16863 33463 16863 33464 16662 33464 16653 33464 16863 33465 16653 33465 16864 33465 16864 33466 16653 33466 16655 33466 16864 33467 16655 33467 16865 33467 16865 33468 16655 33468 16651 33468 16865 33469 16651 33469 16866 33469 16866 33470 16651 33470 16649 33470 16866 33471 16649 33471 16867 33471 16867 33472 16649 33472 16647 33472 16867 33473 16647 33473 16868 33473 16868 33474 16647 33474 16645 33474 16868 33475 16645 33475 16869 33475 16869 33476 16645 33476 16817 33476 16869 33477 16817 33477 16870 33477 16870 33478 16817 33478 16812 33478 16870 33479 16812 33479 16871 33479 16871 33480 16812 33480 16809 33480 16871 33481 16809 33481 16872 33481 16872 33482 16809 33482 16802 33482 16872 33483 16802 33483 16873 33483 16873 33484 16802 33484 16804 33484 16873 33485 16804 33485 16874 33485 16874 33486 16804 33486 16806 33486 16874 33487 16806 33487 16875 33487 16875 33488 16806 33488 16800 33488 16875 33489 16800 33489 16876 33489 16876 33490 16800 33490 16798 33490 16876 33491 16798 33491 16877 33491 16877 33492 16798 33492 16795 33492 16877 33493 16795 33493 16878 33493 16878 33494 16795 33494 16792 33494 16878 33495 16792 33495 16879 33495 16879 33496 16792 33496 16790 33496 16879 33497 16790 33497 16880 33497 16880 33498 16790 33498 16787 33498 16880 33499 16787 33499 16881 33499 16881 33500 16787 33500 16785 33500 16881 33501 16785 33501 16882 33501 16882 33502 16785 33502 16777 33502 16882 33503 16777 33503 16883 33503 16883 33504 16777 33504 16779 33504 16883 33505 16779 33505 16884 33505 16884 33506 16779 33506 16781 33506 16884 33507 16781 33507 16820 33507 16820 33508 16781 33508 16773 33508 16885 33509 16820 33509 16886 33509 16886 33510 16820 33510 16821 33510 16886 33511 16821 33511 16887 33511 16887 33512 16821 33512 16822 33512 16887 33513 16822 33513 16888 33513 16888 33514 16822 33514 16823 33514 16888 33515 16823 33515 16889 33515 16889 33516 16823 33516 16824 33516 16889 33517 16824 33517 16890 33517 16890 33518 16824 33518 16825 33518 16890 33519 16825 33519 16891 33519 16891 33520 16825 33520 16826 33520 16891 33521 16826 33521 16892 33521 16892 33522 16826 33522 16827 33522 16892 33523 16827 33523 16893 33523 16893 33524 16827 33524 16828 33524 16893 33525 16828 33525 16894 33525 16894 33526 16828 33526 16829 33526 16894 33527 16829 33527 16895 33527 16895 33528 16829 33528 16830 33528 16895 33529 16830 33529 16896 33529 16896 33530 16830 33530 16831 33530 16896 33531 16831 33531 16897 33531 16897 33532 16831 33532 16832 33532 16897 33533 16832 33533 16898 33533 16898 33534 16832 33534 16833 33534 16898 33535 16833 33535 16899 33535 16899 33536 16833 33536 16834 33536 16899 33537 16834 33537 16900 33537 16900 33538 16834 33538 16835 33538 16900 33539 16835 33539 16901 33539 16901 33540 16835 33540 16836 33540 16901 33541 16836 33541 16902 33541 16902 33542 16836 33542 16837 33542 16902 33543 16837 33543 16903 33543 16903 33544 16837 33544 16838 33544 16903 33545 16838 33545 16904 33545 16904 33546 16838 33546 16839 33546 16904 33547 16839 33547 16905 33547 16905 33548 16839 33548 16840 33548 16905 33549 16840 33549 16906 33549 16906 33550 16840 33550 16841 33550 16906 33551 16841 33551 16907 33551 16907 33552 16841 33552 16842 33552 16907 33553 16842 33553 16908 33553 16908 33554 16842 33554 16843 33554 16908 33555 16843 33555 16909 33555 16909 33556 16843 33556 16844 33556 16909 33557 16844 33557 16910 33557 16910 33558 16844 33558 16845 33558 16910 33559 16845 33559 16911 33559 16911 33560 16845 33560 16846 33560 16911 33561 16846 33561 16912 33561 16912 33562 16846 33562 16847 33562 16912 33563 16847 33563 16913 33563 16913 33564 16847 33564 16848 33564 16913 33565 16848 33565 16914 33565 16914 33566 16848 33566 16849 33566 16914 33567 16849 33567 16915 33567 16915 33568 16849 33568 16850 33568 16915 33569 16850 33569 16916 33569 16916 33570 16850 33570 16851 33570 16916 33571 16851 33571 16917 33571 16917 33572 16851 33572 16852 33572 16917 33573 16852 33573 16918 33573 16918 33574 16852 33574 16853 33574 16918 33575 16853 33575 16919 33575 16919 33576 16853 33576 16854 33576 16919 33577 16854 33577 16920 33577 16920 33578 16854 33578 16855 33578 16920 33579 16855 33579 16921 33579 16921 33580 16855 33580 16856 33580 16921 33581 16856 33581 16922 33581 16922 33582 16856 33582 16857 33582 16922 33583 16857 33583 16923 33583 16923 33584 16857 33584 16858 33584 16923 33585 16858 33585 16924 33585 16924 33586 16858 33586 16859 33586 16924 33587 16859 33587 16925 33587 16925 33588 16859 33588 16860 33588 16925 33589 16860 33589 16926 33589 16926 33590 16860 33590 16861 33590 16926 33591 16861 33591 16927 33591 16927 33592 16861 33592 16862 33592 16927 33593 16862 33593 16928 33593 16928 33594 16862 33594 16863 33594 16928 33595 16863 33595 16929 33595 16929 33596 16863 33596 16864 33596 16929 33597 16864 33597 16930 33597 16930 33598 16864 33598 16865 33598 16930 33599 16865 33599 16931 33599 16931 33600 16865 33600 16866 33600 16931 33601 16866 33601 16932 33601 16932 33602 16866 33602 16867 33602 16932 33603 16867 33603 16933 33603 16933 33604 16867 33604 16868 33604 16933 33605 16868 33605 16934 33605 16934 33606 16868 33606 16869 33606 16934 33607 16869 33607 16935 33607 16935 33608 16869 33608 16870 33608 16935 33609 16870 33609 16936 33609 16936 33610 16870 33610 16871 33610 16936 33611 16871 33611 16937 33611 16937 33612 16871 33612 16872 33612 16937 33613 16872 33613 16938 33613 16938 33614 16872 33614 16873 33614 16938 33615 16873 33615 16939 33615 16939 33616 16873 33616 16874 33616 16939 33617 16874 33617 16940 33617 16940 33618 16874 33618 16875 33618 16940 33619 16875 33619 16941 33619 16941 33620 16875 33620 16876 33620 16941 33621 16876 33621 16942 33621 16942 33622 16876 33622 16877 33622 16942 33623 16877 33623 16943 33623 16943 33624 16877 33624 16878 33624 16943 33625 16878 33625 16944 33625 16944 33626 16878 33626 16879 33626 16944 33627 16879 33627 16945 33627 16945 33628 16879 33628 16880 33628 16945 33629 16880 33629 16946 33629 16946 33630 16880 33630 16881 33630 16946 33631 16881 33631 16947 33631 16947 33632 16881 33632 16882 33632 16947 33633 16882 33633 16948 33633 16948 33634 16882 33634 16883 33634 16948 33635 16883 33635 16949 33635 16949 33636 16883 33636 16884 33636 16949 33637 16884 33637 16885 33637 16885 33638 16884 33638 16820 33638 16950 33639 16885 33639 16951 33639 16951 33640 16885 33640 16886 33640 16951 33641 16886 33641 16952 33641 16952 33642 16886 33642 16887 33642 16952 33643 16887 33643 16953 33643 16953 33644 16887 33644 16888 33644 16953 33645 16888 33645 16954 33645 16954 33646 16888 33646 16889 33646 16954 33647 16889 33647 16955 33647 16955 33648 16889 33648 16890 33648 16955 33649 16890 33649 16956 33649 16956 33650 16890 33650 16891 33650 16956 33651 16891 33651 16957 33651 16957 33652 16891 33652 16892 33652 16957 33653 16892 33653 16958 33653 16958 33654 16892 33654 16893 33654 16958 33655 16893 33655 16959 33655 16959 33656 16893 33656 16894 33656 16959 33657 16894 33657 16960 33657 16960 33658 16894 33658 16895 33658 16960 33659 16895 33659 16961 33659 16961 33660 16895 33660 16896 33660 16961 33661 16896 33661 16962 33661 16962 33662 16896 33662 16897 33662 16962 33663 16897 33663 16963 33663 16963 33664 16897 33664 16898 33664 16963 33665 16898 33665 16964 33665 16964 33666 16898 33666 16899 33666 16964 33667 16899 33667 16965 33667 16965 33668 16899 33668 16900 33668 16965 33669 16900 33669 16966 33669 16966 33670 16900 33670 16901 33670 16966 33671 16901 33671 16967 33671 16967 33672 16901 33672 16902 33672 16967 33673 16902 33673 16968 33673 16968 33674 16902 33674 16903 33674 16968 33675 16903 33675 16969 33675 16969 33676 16903 33676 16904 33676 16969 33677 16904 33677 16970 33677 16970 33678 16904 33678 16905 33678 16970 33679 16905 33679 16971 33679 16971 33680 16905 33680 16906 33680 16971 33681 16906 33681 16972 33681 16972 33682 16906 33682 16907 33682 16972 33683 16907 33683 16973 33683 16973 33684 16907 33684 16908 33684 16973 33685 16908 33685 16974 33685 16974 33686 16908 33686 16909 33686 16974 33687 16909 33687 16975 33687 16975 33688 16909 33688 16910 33688 16975 33689 16910 33689 16976 33689 16976 33690 16910 33690 16911 33690 16976 33691 16911 33691 16977 33691 16977 33692 16911 33692 16912 33692 16977 33693 16912 33693 16978 33693 16978 33694 16912 33694 16913 33694 16978 33695 16913 33695 16979 33695 16979 33696 16913 33696 16914 33696 16979 33697 16914 33697 16980 33697 16980 33698 16914 33698 16915 33698 16980 33699 16915 33699 16981 33699 16981 33700 16915 33700 16916 33700 16981 33701 16916 33701 16982 33701 16982 33702 16916 33702 16917 33702 16982 33703 16917 33703 16983 33703 16983 33704 16917 33704 16918 33704 16983 33705 16918 33705 16984 33705 16984 33706 16918 33706 16919 33706 16984 33707 16919 33707 16985 33707 16985 33708 16919 33708 16920 33708 16985 33709 16920 33709 16986 33709 16986 33710 16920 33710 16921 33710 16986 33711 16921 33711 16987 33711 16987 33712 16921 33712 16922 33712 16987 33713 16922 33713 16988 33713 16988 33714 16922 33714 16923 33714 16988 33715 16923 33715 16989 33715 16989 33716 16923 33716 16924 33716 16989 33717 16924 33717 16990 33717 16990 33718 16924 33718 16925 33718 16990 33719 16925 33719 16991 33719 16991 33720 16925 33720 16926 33720 16991 33721 16926 33721 16992 33721 16992 33722 16926 33722 16927 33722 16992 33723 16927 33723 16993 33723 16993 33724 16927 33724 16928 33724 16993 33725 16928 33725 16994 33725 16994 33726 16928 33726 16929 33726 16994 33727 16929 33727 16995 33727 16995 33728 16929 33728 16930 33728 16995 33729 16930 33729 16996 33729 16996 33730 16930 33730 16931 33730 16996 33731 16931 33731 16997 33731 16997 33732 16931 33732 16932 33732 16997 33733 16932 33733 16998 33733 16998 33734 16932 33734 16933 33734 16998 33735 16933 33735 16999 33735 16999 33736 16933 33736 16934 33736 16999 33737 16934 33737 17000 33737 17000 33738 16934 33738 16935 33738 17000 33739 16935 33739 17001 33739 17001 33740 16935 33740 16936 33740 17001 33741 16936 33741 17002 33741 17002 33742 16936 33742 16937 33742 17002 33743 16937 33743 17003 33743 17003 33744 16937 33744 16938 33744 17003 33745 16938 33745 17004 33745 17004 33746 16938 33746 16939 33746 17004 33747 16939 33747 17005 33747 17005 33748 16939 33748 16940 33748 17005 33749 16940 33749 17006 33749 17006 33750 16940 33750 16941 33750 17006 33751 16941 33751 17007 33751 17007 33752 16941 33752 16942 33752 17007 33753 16942 33753 17008 33753 17008 33754 16942 33754 16943 33754 17008 33755 16943 33755 17009 33755 17009 33756 16943 33756 16944 33756 17009 33757 16944 33757 17010 33757 17010 33758 16944 33758 16945 33758 17010 33759 16945 33759 17011 33759 17011 33760 16945 33760 16946 33760 17011 33761 16946 33761 17012 33761 17012 33762 16946 33762 16947 33762 17012 33763 16947 33763 17013 33763 17013 33764 16947 33764 16948 33764 17013 33765 16948 33765 17014 33765 17014 33766 16948 33766 16949 33766 17014 33767 16949 33767 16950 33767 16950 33768 16949 33768 16885 33768 17015 33769 16950 33769 17016 33769 17016 33770 16950 33770 16951 33770 17016 33771 16951 33771 17017 33771 17017 33772 16951 33772 16952 33772 17017 33773 16952 33773 17018 33773 17018 33774 16952 33774 16953 33774 17018 33775 16953 33775 17019 33775 17019 33776 16953 33776 16954 33776 17019 33777 16954 33777 17020 33777 17020 33778 16954 33778 16955 33778 17020 33779 16955 33779 17021 33779 17021 33780 16955 33780 16956 33780 17021 33781 16956 33781 17022 33781 17022 33782 16956 33782 16957 33782 17022 33783 16957 33783 17023 33783 17023 33784 16957 33784 16958 33784 17023 33785 16958 33785 17024 33785 17024 33786 16958 33786 16959 33786 17024 33787 16959 33787 17025 33787 17025 33788 16959 33788 16960 33788 17025 33789 16960 33789 17026 33789 17026 33790 16960 33790 16961 33790 17026 33791 16961 33791 17027 33791 17027 33792 16961 33792 16962 33792 17027 33793 16962 33793 17028 33793 17028 33794 16962 33794 16963 33794 17028 33795 16963 33795 17029 33795 17029 33796 16963 33796 16964 33796 17029 33797 16964 33797 17030 33797 17030 33798 16964 33798 16965 33798 17030 33799 16965 33799 17031 33799 17031 33800 16965 33800 16966 33800 17031 33801 16966 33801 17032 33801 17032 33802 16966 33802 16967 33802 17032 33803 16967 33803 17033 33803 17033 33804 16967 33804 16968 33804 17033 33805 16968 33805 17034 33805 17034 33806 16968 33806 16969 33806 17034 33807 16969 33807 17035 33807 17035 33808 16969 33808 16970 33808 17035 33809 16970 33809 17036 33809 17036 33810 16970 33810 16971 33810 17036 33811 16971 33811 17037 33811 17037 33812 16971 33812 16972 33812 17037 33813 16972 33813 17038 33813 17038 33814 16972 33814 16973 33814 17038 33815 16973 33815 17039 33815 17039 33816 16973 33816 16974 33816 17039 33817 16974 33817 17040 33817 17040 33818 16974 33818 16975 33818 17040 33819 16975 33819 17041 33819 17041 33820 16975 33820 16976 33820 17041 33821 16976 33821 17042 33821 17042 33822 16976 33822 16977 33822 17042 33823 16977 33823 17043 33823 17043 33824 16977 33824 16978 33824 17043 33825 16978 33825 17044 33825 17044 33826 16978 33826 16979 33826 17044 33827 16979 33827 17045 33827 17045 33828 16979 33828 16980 33828 17045 33829 16980 33829 17046 33829 17046 33830 16980 33830 16981 33830 17046 33831 16981 33831 17047 33831 17047 33832 16981 33832 16982 33832 17047 33833 16982 33833 17048 33833 17048 33834 16982 33834 16983 33834 17048 33835 16983 33835 17049 33835 17049 33836 16983 33836 16984 33836 17049 33837 16984 33837 17050 33837 17050 33838 16984 33838 16985 33838 17050 33839 16985 33839 17051 33839 17051 33840 16985 33840 16986 33840 17051 33841 16986 33841 17052 33841 17052 33842 16986 33842 16987 33842 17052 33843 16987 33843 17053 33843 17053 33844 16987 33844 16988 33844 17053 33845 16988 33845 17054 33845 17054 33846 16988 33846 16989 33846 17054 33847 16989 33847 17055 33847 17055 33848 16989 33848 16990 33848 17055 33849 16990 33849 17056 33849 17056 33850 16990 33850 16991 33850 17056 33851 16991 33851 17057 33851 17057 33852 16991 33852 16992 33852 17057 33853 16992 33853 17058 33853 17058 33854 16992 33854 16993 33854 17058 33855 16993 33855 17059 33855 17059 33856 16993 33856 16994 33856 17059 33857 16994 33857 17060 33857 17060 33858 16994 33858 16995 33858 17060 33859 16995 33859 17061 33859 17061 33860 16995 33860 16996 33860 17061 33861 16996 33861 17062 33861 17062 33862 16996 33862 16997 33862 17062 33863 16997 33863 17063 33863 17063 33864 16997 33864 16998 33864 17063 33865 16998 33865 17064 33865 17064 33866 16998 33866 16999 33866 17064 33867 16999 33867 17065 33867 17065 33868 16999 33868 17000 33868 17065 33869 17000 33869 17066 33869 17066 33870 17000 33870 17001 33870 17066 33871 17001 33871 17067 33871 17067 33872 17001 33872 17002 33872 17067 33873 17002 33873 17068 33873 17068 33874 17002 33874 17003 33874 17068 33875 17003 33875 17069 33875 17069 33876 17003 33876 17004 33876 17069 33877 17004 33877 17070 33877 17070 33878 17004 33878 17005 33878 17070 33879 17005 33879 17071 33879 17071 33880 17005 33880 17006 33880 17071 33881 17006 33881 17072 33881 17072 33882 17006 33882 17007 33882 17072 33883 17007 33883 17073 33883 17073 33884 17007 33884 17008 33884 17073 33885 17008 33885 17074 33885 17074 33886 17008 33886 17009 33886 17074 33887 17009 33887 17075 33887 17075 33888 17009 33888 17010 33888 17075 33889 17010 33889 17076 33889 17076 33890 17010 33890 17011 33890 17076 33891 17011 33891 17077 33891 17077 33892 17011 33892 17012 33892 17077 33893 17012 33893 17078 33893 17078 33894 17012 33894 17013 33894 17078 33895 17013 33895 17079 33895 17079 33896 17013 33896 17014 33896 17079 33897 17014 33897 17015 33897 17015 33898 17014 33898 16950 33898 17080 33899 17015 33899 17081 33899 17081 33900 17015 33900 17016 33900 17081 33901 17016 33901 17082 33901 17082 33902 17016 33902 17017 33902 17082 33903 17017 33903 17083 33903 17083 33904 17017 33904 17018 33904 17083 33905 17018 33905 17084 33905 17084 33906 17018 33906 17019 33906 17084 33907 17019 33907 17085 33907 17085 33908 17019 33908 17020 33908 17085 33909 17020 33909 17086 33909 17086 33910 17020 33910 17021 33910 17086 33911 17021 33911 17087 33911 17087 33912 17021 33912 17022 33912 17087 33913 17022 33913 17088 33913 17088 33914 17022 33914 17023 33914 17088 33915 17023 33915 17089 33915 17089 33916 17023 33916 17024 33916 17089 33917 17024 33917 17090 33917 17090 33918 17024 33918 17025 33918 17090 33919 17025 33919 17091 33919 17091 33920 17025 33920 17026 33920 17091 33921 17026 33921 17092 33921 17092 33922 17026 33922 17027 33922 17092 33923 17027 33923 17093 33923 17093 33924 17027 33924 17028 33924 17093 33925 17028 33925 17094 33925 17094 33926 17028 33926 17029 33926 17094 33927 17029 33927 17095 33927 17095 33928 17029 33928 17030 33928 17095 33929 17030 33929 17096 33929 17096 33930 17030 33930 17031 33930 17096 33931 17031 33931 17097 33931 17097 33932 17031 33932 17032 33932 17097 33933 17032 33933 17098 33933 17098 33934 17032 33934 17033 33934 17098 33935 17033 33935 17099 33935 17099 33936 17033 33936 17034 33936 17099 33937 17034 33937 17100 33937 17100 33938 17034 33938 17035 33938 17100 33939 17035 33939 17101 33939 17101 33940 17035 33940 17036 33940 17101 33941 17036 33941 17102 33941 17102 33942 17036 33942 17037 33942 17102 33943 17037 33943 17103 33943 17103 33944 17037 33944 17038 33944 17103 33945 17038 33945 17104 33945 17104 33946 17038 33946 17039 33946 17104 33947 17039 33947 17105 33947 17105 33948 17039 33948 17040 33948 17105 33949 17040 33949 17106 33949 17106 33950 17040 33950 17041 33950 17106 33951 17041 33951 17107 33951 17107 33952 17041 33952 17042 33952 17107 33953 17042 33953 17108 33953 17108 33954 17042 33954 17043 33954 17108 33955 17043 33955 17109 33955 17109 33956 17043 33956 17044 33956 17109 33957 17044 33957 17110 33957 17110 33958 17044 33958 17045 33958 17110 33959 17045 33959 17111 33959 17111 33960 17045 33960 17046 33960 17111 33961 17046 33961 17112 33961 17112 33962 17046 33962 17047 33962 17112 33963 17047 33963 17113 33963 17113 33964 17047 33964 17048 33964 17113 33965 17048 33965 17114 33965 17114 33966 17048 33966 17049 33966 17114 33967 17049 33967 17115 33967 17115 33968 17049 33968 17050 33968 17115 33969 17050 33969 17116 33969 17116 33970 17050 33970 17051 33970 17116 33971 17051 33971 17117 33971 17117 33972 17051 33972 17052 33972 17117 33973 17052 33973 17118 33973 17118 33974 17052 33974 17053 33974 17118 33975 17053 33975 17119 33975 17119 33976 17053 33976 17054 33976 17119 33977 17054 33977 17120 33977 17120 33978 17054 33978 17055 33978 17120 33979 17055 33979 17121 33979 17121 33980 17055 33980 17056 33980 17121 33981 17056 33981 17122 33981 17122 33982 17056 33982 17057 33982 17122 33983 17057 33983 17123 33983 17123 33984 17057 33984 17058 33984 17123 33985 17058 33985 17124 33985 17124 33986 17058 33986 17059 33986 17124 33987 17059 33987 17125 33987 17125 33988 17059 33988 17060 33988 17125 33989 17060 33989 17126 33989 17126 33990 17060 33990 17061 33990 17126 33991 17061 33991 17127 33991 17127 33992 17061 33992 17062 33992 17127 33993 17062 33993 17128 33993 17128 33994 17062 33994 17063 33994 17128 33995 17063 33995 17129 33995 17129 33996 17063 33996 17064 33996 17129 33997 17064 33997 17130 33997 17130 33998 17064 33998 17065 33998 17130 33999 17065 33999 17131 33999 17131 34000 17065 34000 17066 34000 17131 34001 17066 34001 17132 34001 17132 34002 17066 34002 17067 34002 17132 34003 17067 34003 17133 34003 17133 34004 17067 34004 17068 34004 17133 34005 17068 34005 17134 34005 17134 34006 17068 34006 17069 34006 17134 34007 17069 34007 17135 34007 17135 34008 17069 34008 17070 34008 17135 34009 17070 34009 17136 34009 17136 34010 17070 34010 17071 34010 17136 34011 17071 34011 17137 34011 17137 34012 17071 34012 17072 34012 17137 34013 17072 34013 17138 34013 17138 34014 17072 34014 17073 34014 17138 34015 17073 34015 17139 34015 17139 34016 17073 34016 17074 34016 17139 34017 17074 34017 17140 34017 17140 34018 17074 34018 17075 34018 17140 34019 17075 34019 17141 34019 17141 34020 17075 34020 17076 34020 17141 34021 17076 34021 17142 34021 17142 34022 17076 34022 17077 34022 17142 34023 17077 34023 17143 34023 17143 34024 17077 34024 17078 34024 17143 34025 17078 34025 17144 34025 17144 34026 17078 34026 17079 34026 17144 34027 17079 34027 17080 34027 17080 34028 17079 34028 17015 34028 17145 34029 17080 34029 17146 34029 17146 34030 17080 34030 17081 34030 17146 34031 17081 34031 17147 34031 17147 34032 17081 34032 17082 34032 17147 34033 17082 34033 17148 34033 17148 34034 17082 34034 17083 34034 17148 34035 17083 34035 17149 34035 17149 34036 17083 34036 17084 34036 17149 34037 17084 34037 17150 34037 17150 34038 17084 34038 17085 34038 17150 34039 17085 34039 17151 34039 17151 34040 17085 34040 17086 34040 17151 34041 17086 34041 17152 34041 17152 34042 17086 34042 17087 34042 17152 34043 17087 34043 17153 34043 17153 34044 17087 34044 17088 34044 17153 34045 17088 34045 17154 34045 17154 34046 17088 34046 17089 34046 17154 34047 17089 34047 17155 34047 17155 34048 17089 34048 17090 34048 17155 34049 17090 34049 17156 34049 17156 34050 17090 34050 17091 34050 17156 34051 17091 34051 17157 34051 17157 34052 17091 34052 17092 34052 17157 34053 17092 34053 17158 34053 17158 34054 17092 34054 17093 34054 17158 34055 17093 34055 17159 34055 17159 34056 17093 34056 17094 34056 17159 34057 17094 34057 17160 34057 17160 34058 17094 34058 17095 34058 17160 34059 17095 34059 17161 34059 17161 34060 17095 34060 17096 34060 17161 34061 17096 34061 17162 34061 17162 34062 17096 34062 17097 34062 17162 34063 17097 34063 17163 34063 17163 34064 17097 34064 17098 34064 17163 34065 17098 34065 17164 34065 17164 34066 17098 34066 17099 34066 17164 34067 17099 34067 17165 34067 17165 34068 17099 34068 17100 34068 17165 34069 17100 34069 17166 34069 17166 34070 17100 34070 17101 34070 17166 34071 17101 34071 17167 34071 17167 34072 17101 34072 17102 34072 17167 34073 17102 34073 17168 34073 17168 34074 17102 34074 17103 34074 17168 34075 17103 34075 17169 34075 17169 34076 17103 34076 17104 34076 17169 34077 17104 34077 17170 34077 17170 34078 17104 34078 17105 34078 17170 34079 17105 34079 17171 34079 17171 34080 17105 34080 17106 34080 17171 34081 17106 34081 17172 34081 17172 34082 17106 34082 17107 34082 17172 34083 17107 34083 17173 34083 17173 34084 17107 34084 17108 34084 17173 34085 17108 34085 17174 34085 17174 34086 17108 34086 17109 34086 17174 34087 17109 34087 17175 34087 17175 34088 17109 34088 17110 34088 17175 34089 17110 34089 17176 34089 17176 34090 17110 34090 17111 34090 17176 34091 17111 34091 17177 34091 17177 34092 17111 34092 17112 34092 17177 34093 17112 34093 17178 34093 17178 34094 17112 34094 17113 34094 17178 34095 17113 34095 17179 34095 17179 34096 17113 34096 17114 34096 17179 34097 17114 34097 17180 34097 17180 34098 17114 34098 17115 34098 17180 34099 17115 34099 17181 34099 17181 34100 17115 34100 17116 34100 17181 34101 17116 34101 17182 34101 17182 34102 17116 34102 17117 34102 17182 34103 17117 34103 17183 34103 17183 34104 17117 34104 17118 34104 17183 34105 17118 34105 17184 34105 17184 34106 17118 34106 17119 34106 17184 34107 17119 34107 17185 34107 17185 34108 17119 34108 17120 34108 17185 34109 17120 34109 17186 34109 17186 34110 17120 34110 17121 34110 17186 34111 17121 34111 17187 34111 17187 34112 17121 34112 17122 34112 17187 34113 17122 34113 17188 34113 17188 34114 17122 34114 17123 34114 17188 34115 17123 34115 17189 34115 17189 34116 17123 34116 17124 34116 17189 34117 17124 34117 17190 34117 17190 34118 17124 34118 17125 34118 17190 34119 17125 34119 17191 34119 17191 34120 17125 34120 17126 34120 17191 34121 17126 34121 17192 34121 17192 34122 17126 34122 17127 34122 17192 34123 17127 34123 17193 34123 17193 34124 17127 34124 17128 34124 17193 34125 17128 34125 17194 34125 17194 34126 17128 34126 17129 34126 17194 34127 17129 34127 17195 34127 17195 34128 17129 34128 17130 34128 17195 34129 17130 34129 17196 34129 17196 34130 17130 34130 17131 34130 17196 34131 17131 34131 17197 34131 17197 34132 17131 34132 17132 34132 17197 34133 17132 34133 17198 34133 17198 34134 17132 34134 17133 34134 17198 34135 17133 34135 17199 34135 17199 34136 17133 34136 17134 34136 17199 34137 17134 34137 17200 34137 17200 34138 17134 34138 17135 34138 17200 34139 17135 34139 17201 34139 17201 34140 17135 34140 17136 34140 17201 34141 17136 34141 17202 34141 17202 34142 17136 34142 17137 34142 17202 34143 17137 34143 17203 34143 17203 34144 17137 34144 17138 34144 17203 34145 17138 34145 17204 34145 17204 34146 17138 34146 17139 34146 17204 34147 17139 34147 17205 34147 17205 34148 17139 34148 17140 34148 17205 34149 17140 34149 17206 34149 17206 34150 17140 34150 17141 34150 17206 34151 17141 34151 17207 34151 17207 34152 17141 34152 17142 34152 17207 34153 17142 34153 17208 34153 17208 34154 17142 34154 17143 34154 17208 34155 17143 34155 17209 34155 17209 34156 17143 34156 17144 34156 17209 34157 17144 34157 17145 34157 17145 34158 17144 34158 17080 34158 17210 34159 17145 34159 17211 34159 17211 34160 17145 34160 17146 34160 17211 34161 17146 34161 17212 34161 17212 34162 17146 34162 17147 34162 17212 34163 17147 34163 17213 34163 17213 34164 17147 34164 17148 34164 17213 34165 17148 34165 17214 34165 17214 34166 17148 34166 17149 34166 17214 34167 17149 34167 17215 34167 17215 34168 17149 34168 17150 34168 17215 34169 17150 34169 17216 34169 17216 34170 17150 34170 17151 34170 17216 34171 17151 34171 17217 34171 17217 34172 17151 34172 17152 34172 17217 34173 17152 34173 17218 34173 17218 34174 17152 34174 17153 34174 17218 34175 17153 34175 17219 34175 17219 34176 17153 34176 17154 34176 17219 34177 17154 34177 17220 34177 17220 34178 17154 34178 17155 34178 17220 34179 17155 34179 17221 34179 17221 34180 17155 34180 17156 34180 17221 34181 17156 34181 17222 34181 17222 34182 17156 34182 17157 34182 17222 34183 17157 34183 17223 34183 17223 34184 17157 34184 17158 34184 17223 34185 17158 34185 17224 34185 17224 34186 17158 34186 17159 34186 17224 34187 17159 34187 17225 34187 17225 34188 17159 34188 17160 34188 17225 34189 17160 34189 17226 34189 17226 34190 17160 34190 17161 34190 17226 34191 17161 34191 17227 34191 17227 34192 17161 34192 17162 34192 17227 34193 17162 34193 17228 34193 17228 34194 17162 34194 17163 34194 17228 34195 17163 34195 17229 34195 17229 34196 17163 34196 17164 34196 17229 34197 17164 34197 17230 34197 17230 34198 17164 34198 17165 34198 17230 34199 17165 34199 17231 34199 17231 34200 17165 34200 17166 34200 17231 34201 17166 34201 17232 34201 17232 34202 17166 34202 17167 34202 17232 34203 17167 34203 17233 34203 17233 34204 17167 34204 17168 34204 17233 34205 17168 34205 17234 34205 17234 34206 17168 34206 17169 34206 17234 34207 17169 34207 17235 34207 17235 34208 17169 34208 17170 34208 17235 34209 17170 34209 17236 34209 17236 34210 17170 34210 17171 34210 17236 34211 17171 34211 17237 34211 17237 34212 17171 34212 17172 34212 17237 34213 17172 34213 17238 34213 17238 34214 17172 34214 17173 34214 17238 34215 17173 34215 17239 34215 17239 34216 17173 34216 17174 34216 17239 34217 17174 34217 17240 34217 17240 34218 17174 34218 17175 34218 17240 34219 17175 34219 17241 34219 17241 34220 17175 34220 17176 34220 17241 34221 17176 34221 17242 34221 17242 34222 17176 34222 17177 34222 17242 34223 17177 34223 17243 34223 17243 34224 17177 34224 17178 34224 17243 34225 17178 34225 17244 34225 17244 34226 17178 34226 17179 34226 17244 34227 17179 34227 17245 34227 17245 34228 17179 34228 17180 34228 17245 34229 17180 34229 17246 34229 17246 34230 17180 34230 17181 34230 17246 34231 17181 34231 17247 34231 17247 34232 17181 34232 17182 34232 17247 34233 17182 34233 17248 34233 17248 34234 17182 34234 17183 34234 17248 34235 17183 34235 17249 34235 17249 34236 17183 34236 17184 34236 17249 34237 17184 34237 17250 34237 17250 34238 17184 34238 17185 34238 17250 34239 17185 34239 17251 34239 17251 34240 17185 34240 17186 34240 17251 34241 17186 34241 17252 34241 17252 34242 17186 34242 17187 34242 17252 34243 17187 34243 17253 34243 17253 34244 17187 34244 17188 34244 17253 34245 17188 34245 17254 34245 17254 34246 17188 34246 17189 34246 17254 34247 17189 34247 17255 34247 17255 34248 17189 34248 17190 34248 17255 34249 17190 34249 17256 34249 17256 34250 17190 34250 17191 34250 17256 34251 17191 34251 17257 34251 17257 34252 17191 34252 17192 34252 17257 34253 17192 34253 17258 34253 17258 34254 17192 34254 17193 34254 17258 34255 17193 34255 17259 34255 17259 34256 17193 34256 17194 34256 17259 34257 17194 34257 17260 34257 17260 34258 17194 34258 17195 34258 17260 34259 17195 34259 17261 34259 17261 34260 17195 34260 17196 34260 17261 34261 17196 34261 17262 34261 17262 34262 17196 34262 17197 34262 17262 34263 17197 34263 17263 34263 17263 34264 17197 34264 17198 34264 17263 34265 17198 34265 17264 34265 17264 34266 17198 34266 17199 34266 17264 34267 17199 34267 17265 34267 17265 34268 17199 34268 17200 34268 17265 34269 17200 34269 17266 34269 17266 34270 17200 34270 17201 34270 17266 34271 17201 34271 17267 34271 17267 34272 17201 34272 17202 34272 17267 34273 17202 34273 17268 34273 17268 34274 17202 34274 17203 34274 17268 34275 17203 34275 17269 34275 17269 34276 17203 34276 17204 34276 17269 34277 17204 34277 17270 34277 17270 34278 17204 34278 17205 34278 17270 34279 17205 34279 17271 34279 17271 34280 17205 34280 17206 34280 17271 34281 17206 34281 17272 34281 17272 34282 17206 34282 17207 34282 17272 34283 17207 34283 17273 34283 17273 34284 17207 34284 17208 34284 17273 34285 17208 34285 17274 34285 17274 34286 17208 34286 17209 34286 17274 34287 17209 34287 17210 34287 17210 34288 17209 34288 17145 34288 16610 34289 17210 34289 16609 34289 16609 34290 17210 34290 17211 34290 16609 34291 17211 34291 16608 34291 16608 34292 17211 34292 17212 34292 16608 34293 17212 34293 16607 34293 16607 34294 17212 34294 17213 34294 16607 34295 17213 34295 16606 34295 16606 34296 17213 34296 17214 34296 16606 34297 17214 34297 16605 34297 16605 34298 17214 34298 17215 34298 16605 34299 17215 34299 16604 34299 16604 34300 17215 34300 17216 34300 16604 34301 17216 34301 16603 34301 16603 34302 17216 34302 17217 34302 16603 34303 17217 34303 16602 34303 16602 34304 17217 34304 17218 34304 16602 34305 17218 34305 16601 34305 16601 34306 17218 34306 17219 34306 16601 34307 17219 34307 16600 34307 16600 34308 17219 34308 17220 34308 16600 34309 17220 34309 16599 34309 16599 34310 17220 34310 17221 34310 16599 34311 17221 34311 16598 34311 16598 34312 17221 34312 17222 34312 16598 34313 17222 34313 16597 34313 16597 34314 17222 34314 17223 34314 16597 34315 17223 34315 16596 34315 16596 34316 17223 34316 17224 34316 16596 34317 17224 34317 16595 34317 16595 34318 17224 34318 17225 34318 16595 34319 17225 34319 16594 34319 16594 34320 17225 34320 17226 34320 16594 34321 17226 34321 16593 34321 16593 34322 17226 34322 17227 34322 16593 34323 17227 34323 16592 34323 16592 34324 17227 34324 17228 34324 16592 34325 17228 34325 16591 34325 16591 34326 17228 34326 17229 34326 16591 34327 17229 34327 16590 34327 16590 34328 17229 34328 17230 34328 16590 34329 17230 34329 16589 34329 16589 34330 17230 34330 17231 34330 16589 34331 17231 34331 16588 34331 16588 34332 17231 34332 17232 34332 16588 34333 17232 34333 16587 34333 16587 34334 17232 34334 17233 34334 16587 34335 17233 34335 16586 34335 16586 34336 17233 34336 17234 34336 16586 34337 17234 34337 16585 34337 16585 34338 17234 34338 17235 34338 16585 34339 17235 34339 16584 34339 16584 34340 17235 34340 17236 34340 16584 34341 17236 34341 16583 34341 16583 34342 17236 34342 17237 34342 16583 34343 17237 34343 16582 34343 16582 34344 17237 34344 17238 34344 16582 34345 17238 34345 16581 34345 16581 34346 17238 34346 17239 34346 16581 34347 17239 34347 16580 34347 16580 34348 17239 34348 17240 34348 16580 34349 17240 34349 16579 34349 16579 34350 17240 34350 17241 34350 16579 34351 17241 34351 16643 34351 16643 34352 17241 34352 17242 34352 16643 34353 17242 34353 16642 34353 16642 34354 17242 34354 17243 34354 16642 34355 17243 34355 16641 34355 16641 34356 17243 34356 17244 34356 16641 34357 17244 34357 16640 34357 16640 34358 17244 34358 17245 34358 16640 34359 17245 34359 16639 34359 16639 34360 17245 34360 17246 34360 16639 34361 17246 34361 16638 34361 16638 34362 17246 34362 17247 34362 16638 34363 17247 34363 16637 34363 16637 34364 17247 34364 17248 34364 16637 34365 17248 34365 16636 34365 16636 34366 17248 34366 17249 34366 16636 34367 17249 34367 16635 34367 16635 34368 17249 34368 17250 34368 16635 34369 17250 34369 16634 34369 16634 34370 17250 34370 17251 34370 16634 34371 17251 34371 16633 34371 16633 34372 17251 34372 17252 34372 16633 34373 17252 34373 16632 34373 16632 34374 17252 34374 17253 34374 16632 34375 17253 34375 16631 34375 16631 34376 17253 34376 17254 34376 16631 34377 17254 34377 16630 34377 16630 34378 17254 34378 17255 34378 16630 34379 17255 34379 16629 34379 16629 34380 17255 34380 17256 34380 16629 34381 17256 34381 16628 34381 16628 34382 17256 34382 17257 34382 16628 34383 17257 34383 16627 34383 16627 34384 17257 34384 17258 34384 16627 34385 17258 34385 16626 34385 16626 34386 17258 34386 17259 34386 16626 34387 17259 34387 16625 34387 16625 34388 17259 34388 17260 34388 16625 34389 17260 34389 16624 34389 16624 34390 17260 34390 17261 34390 16624 34391 17261 34391 16623 34391 16623 34392 17261 34392 17262 34392 16623 34393 17262 34393 16622 34393 16622 34394 17262 34394 17263 34394 16622 34395 17263 34395 16621 34395 16621 34396 17263 34396 17264 34396 16621 34397 17264 34397 16620 34397 16620 34398 17264 34398 17265 34398 16620 34399 17265 34399 16619 34399 16619 34400 17265 34400 17266 34400 16619 34401 17266 34401 16618 34401 16618 34402 17266 34402 17267 34402 16618 34403 17267 34403 16617 34403 16617 34404 17267 34404 17268 34404 16617 34405 17268 34405 16616 34405 16616 34406 17268 34406 17269 34406 16616 34407 17269 34407 16615 34407 16615 34408 17269 34408 17270 34408 16615 34409 17270 34409 16614 34409 16614 34410 17270 34410 17271 34410 16614 34411 17271 34411 16613 34411 16613 34412 17271 34412 17272 34412 16613 34413 17272 34413 16612 34413 16612 34414 17272 34414 17273 34414 16612 34415 17273 34415 16611 34415 16611 34416 17273 34416 17274 34416 16611 34417 17274 34417 16610 34417 16610 34418 17274 34418 17210 34418 16648 34419 17275 34419 16646 34419 16646 34420 17275 34420 17276 34420 16648 34421 16650 34421 17275 34421 17275 34422 16650 34422 16652 34422 17275 34423 16652 34423 17277 34423 16652 34424 16657 34424 17277 34424 17277 34425 16657 34425 16656 34425 17277 34426 16656 34426 17278 34426 16663 34427 17279 34427 16664 34427 16664 34428 17279 34428 17278 34428 16664 34429 17278 34429 16654 34429 16654 34430 17278 34430 16656 34430 16663 34431 16661 34431 17279 34431 17279 34432 16661 34432 16659 34432 17279 34433 16659 34433 17280 34433 16667 34434 17281 34434 16665 34434 16665 34435 17281 34435 17280 34435 16665 34436 17280 34436 16658 34436 16658 34437 17280 34437 16659 34437 16667 34438 16669 34438 17281 34438 17281 34439 16669 34439 16671 34439 17281 34440 16671 34440 17282 34440 16671 34441 16676 34441 17282 34441 17282 34442 16676 34442 16675 34442 17282 34443 16675 34443 17283 34443 16680 34444 17284 34444 16681 34444 16681 34445 17284 34445 17283 34445 16681 34446 17283 34446 16673 34446 16673 34447 17283 34447 16675 34447 16680 34448 16678 34448 17284 34448 17284 34449 16678 34449 16684 34449 17284 34450 16684 34450 17285 34450 16690 34451 17286 34451 16691 34451 16691 34452 17286 34452 17285 34452 16691 34453 17285 34453 16683 34453 16683 34454 17285 34454 16684 34454 16690 34455 16688 34455 17286 34455 17286 34456 16688 34456 16686 34456 17286 34457 16686 34457 17287 34457 16694 34458 17288 34458 16692 34458 16692 34459 17288 34459 17287 34459 16692 34460 17287 34460 16685 34460 16685 34461 17287 34461 16686 34461 16694 34462 16696 34462 17288 34462 17288 34463 16696 34463 16698 34463 17288 34464 16698 34464 17289 34464 16698 34465 16699 34465 17289 34465 17289 34466 16699 34466 16701 34466 17289 34467 16701 34467 17290 34467 16705 34468 17291 34468 16704 34468 16704 34469 17291 34469 17290 34469 16704 34470 17290 34470 16702 34470 16702 34471 17290 34471 16701 34471 16705 34472 16707 34472 17291 34472 17291 34473 16707 34473 16709 34473 17291 34474 16709 34474 17292 34474 16715 34475 17293 34475 16717 34475 16717 34476 17293 34476 17292 34476 16717 34477 17292 34477 16718 34477 16718 34478 17292 34478 16709 34478 16715 34479 16713 34479 17293 34479 17293 34480 16713 34480 16711 34480 17293 34481 16711 34481 17294 34481 16711 34482 16710 34482 17294 34482 17294 34483 16710 34483 16719 34483 17294 34484 16719 34484 17295 34484 16724 34485 17296 34485 16723 34485 16723 34486 17296 34486 17295 34486 16723 34487 17295 34487 16721 34487 16721 34488 17295 34488 16719 34488 16724 34489 16726 34489 17296 34489 17296 34490 16726 34490 16728 34490 17296 34491 16728 34491 17297 34491 16732 34492 17298 34492 16731 34492 16731 34493 17298 34493 17297 34493 16731 34494 17297 34494 16729 34494 16729 34495 17297 34495 16728 34495 16732 34496 16734 34496 17298 34496 17298 34497 16734 34497 16736 34497 17298 34498 16736 34498 17299 34498 16736 34499 16741 34499 17299 34499 17299 34500 16741 34500 16740 34500 17299 34501 16740 34501 17300 34501 16740 34502 16738 34502 17300 34502 17300 34503 16738 34503 16746 34503 17300 34504 16746 34504 17301 34504 17301 34505 16746 34505 16745 34505 17301 34506 16745 34506 17302 34506 17302 34507 16745 34507 16743 34507 17302 34508 16743 34508 16749 34508 16755 34509 17303 34509 16756 34509 16756 34510 17303 34510 17302 34510 16756 34511 17302 34511 16748 34511 16748 34512 17302 34512 16749 34512 16755 34513 16753 34513 17303 34513 17303 34514 16753 34514 16751 34514 17303 34515 16751 34515 17304 34515 16759 34516 17305 34516 16757 34516 16757 34517 17305 34517 17304 34517 16757 34518 17304 34518 16750 34518 16750 34519 17304 34519 16751 34519 16759 34520 16761 34520 17305 34520 17305 34521 16761 34521 16763 34521 17305 34522 16763 34522 17306 34522 16763 34523 16764 34523 17306 34523 17306 34524 16764 34524 16766 34524 17306 34525 16766 34525 17307 34525 16770 34526 17308 34526 16769 34526 16769 34527 17308 34527 17307 34527 16769 34528 17307 34528 16767 34528 16767 34529 17307 34529 16766 34529 16770 34530 16772 34530 17308 34530 17308 34531 16772 34531 16774 34531 17308 34532 16774 34532 17309 34532 16780 34533 17310 34533 16782 34533 16782 34534 17310 34534 17309 34534 16782 34535 17309 34535 16783 34535 16783 34536 17309 34536 16774 34536 16780 34537 16778 34537 17310 34537 17310 34538 16778 34538 16776 34538 17310 34539 16776 34539 17311 34539 16776 34540 16775 34540 17311 34540 17311 34541 16775 34541 16784 34541 17311 34542 16784 34542 17312 34542 16789 34543 17313 34543 16788 34543 16788 34544 17313 34544 17312 34544 16788 34545 17312 34545 16786 34545 16786 34546 17312 34546 16784 34546 16789 34547 16791 34547 17313 34547 17313 34548 16791 34548 16793 34548 17313 34549 16793 34549 17314 34549 16797 34550 17315 34550 16796 34550 16796 34551 17315 34551 17314 34551 16796 34552 17314 34552 16794 34552 16794 34553 17314 34553 16793 34553 16797 34554 16799 34554 17315 34554 17315 34555 16799 34555 16801 34555 17315 34556 16801 34556 17316 34556 16805 34557 17317 34557 16807 34557 16807 34558 17317 34558 17316 34558 16807 34559 17316 34559 16808 34559 16808 34560 17316 34560 16801 34560 16805 34561 16803 34561 17317 34561 17317 34562 16803 34562 16811 34562 17317 34563 16811 34563 17318 34563 16811 34564 16810 34564 17318 34564 17318 34565 16810 34565 16814 34565 17318 34566 16814 34566 17319 34566 16818 34567 17320 34567 16819 34567 16819 34568 17320 34568 17319 34568 16819 34569 17319 34569 16813 34569 16813 34570 17319 34570 16814 34570 16818 34571 16816 34571 17320 34571 17320 34572 16816 34572 16815 34572 17320 34573 16815 34573 17276 34573 17276 34574 16815 34574 16644 34574 17276 34575 16644 34575 16646 34575 17357 34610 17358 34610 17283 34610 17298 34611 17359 34611 17360 34611 17283 34612 17358 34612 17282 34612 17361 34613 17317 34613 17362 34613 17362 34614 17317 34614 17318 34614 17362 34615 17318 34615 17363 34615 17298 34616 17360 34616 17297 34616 17360 34617 17364 34617 17297 34617 17297 34618 17364 34618 17365 34618 17297 34619 17365 34619 17296 34619 17296 34620 17365 34620 17366 34620 17296 34621 17366 34621 17367 34621 17367 34622 17368 34622 17296 34622 17296 34623 17368 34623 17369 34623 17296 34624 17369 34624 17295 34624 17295 34625 17369 34625 17370 34625 17295 34626 17370 34626 17294 34626 17294 34627 17370 34627 17371 34627 17294 34628 17371 34628 17372 34628 17359 34629 17298 34629 17373 34629 17373 34630 17298 34630 17299 34630 17373 34631 17299 34631 17374 34631 17284 34632 17375 34632 17283 34632 17283 34633 17375 34633 17376 34633 17283 34634 17376 34634 17357 34634 17363 34635 17318 34635 17377 34635 17377 34636 17318 34636 17319 34636 17377 34637 17319 34637 17378 34637 17315 34638 17379 34638 17380 34638 17381 34639 17382 34639 17306 34639 17306 34640 17382 34640 17383 34640 17306 34641 17383 34641 17305 34641 17305 34642 17383 34642 17384 34642 17305 34643 17384 34643 17304 34643 17304 34644 17384 34644 17385 34644 17304 34645 17385 34645 17386 34645 17386 34646 17387 34646 17304 34646 17304 34647 17387 34647 17388 34647 17304 34648 17388 34648 17303 34648 17303 34649 17388 34649 17389 34649 17303 34650 17389 34650 17302 34650 17302 34651 17389 34651 17390 34651 17302 34652 17390 34652 17391 34652 17300 34653 17392 34653 17299 34653 17299 34654 17392 34654 17393 34654 17299 34655 17393 34655 17374 34655 17394 34656 17279 34656 17395 34656 17395 34657 17279 34657 17280 34657 17396 34658 17397 34658 17320 34658 17320 34659 17397 34659 17398 34659 17320 34660 17398 34660 17319 34660 17319 34661 17398 34661 17399 34661 17319 34662 17399 34662 17378 34662 17361 34663 17400 34663 17317 34663 17317 34664 17400 34664 17401 34664 17317 34665 17401 34665 17316 34665 17315 34666 17380 34666 17314 34666 17402 34667 17403 34667 17309 34667 17391 34668 17404 34668 17302 34668 17302 34669 17404 34669 17405 34669 17302 34670 17405 34670 17301 34670 17405 34671 17406 34671 17301 34671 17301 34672 17406 34672 17407 34672 17301 34673 17407 34673 17300 34673 17300 34674 17407 34674 17408 34674 17300 34675 17408 34675 17392 34675 17372 34676 17409 34676 17294 34676 17294 34677 17409 34677 17410 34677 17294 34678 17410 34678 17293 34678 17293 34679 17410 34679 17411 34679 17293 34680 17411 34680 17292 34680 17292 34681 17411 34681 17412 34681 17292 34682 17412 34682 17413 34682 17413 34683 17414 34683 17292 34683 17292 34684 17414 34684 17415 34684 17292 34685 17415 34685 17291 34685 17291 34686 17415 34686 17416 34686 17291 34687 17416 34687 17290 34687 17290 34688 17416 34688 17417 34688 17290 34689 17417 34689 17418 34689 17419 34690 17420 34690 17285 34690 17285 34691 17420 34691 17421 34691 17285 34692 17421 34692 17284 34692 17284 34693 17421 34693 17422 34693 17284 34694 17422 34694 17375 34694 17423 34695 17281 34695 17424 34695 17424 34696 17281 34696 17282 34696 17424 34697 17282 34697 17425 34697 17425 34698 17282 34698 17358 34698 17423 34699 17426 34699 17281 34699 17281 34700 17426 34700 17427 34700 17281 34701 17427 34701 17280 34701 17280 34702 17427 34702 17428 34702 17280 34703 17428 34703 17395 34703 17429 34704 17313 34704 17430 34704 17430 34705 17313 34705 17314 34705 17430 34706 17314 34706 17431 34706 17431 34707 17314 34707 17380 34707 17432 34708 17433 34708 17312 34708 17309 34709 17403 34709 17308 34709 17308 34710 17403 34710 17434 34710 17308 34711 17434 34711 17435 34711 17435 34712 17436 34712 17308 34712 17308 34713 17436 34713 17437 34713 17308 34714 17437 34714 17307 34714 17307 34715 17437 34715 17438 34715 17307 34716 17438 34716 17306 34716 17306 34717 17438 34717 17439 34717 17306 34718 17439 34718 17381 34718 17440 34719 17441 34719 17289 34719 17289 34720 17441 34720 17288 34720 17419 34721 17285 34721 17442 34721 17442 34722 17285 34722 17286 34722 17442 34723 17286 34723 17443 34723 17444 34724 17445 34724 17275 34724 17275 34725 17445 34725 17446 34725 17275 34726 17446 34726 17276 34726 17276 34727 17446 34727 17447 34727 17276 34728 17447 34728 17320 34728 17320 34729 17447 34729 17448 34729 17320 34730 17448 34730 17396 34730 17401 34731 17449 34731 17316 34731 17316 34732 17449 34732 17450 34732 17316 34733 17450 34733 17315 34733 17315 34734 17450 34734 17451 34734 17315 34735 17451 34735 17379 34735 17312 34736 17433 34736 17311 34736 17418 34737 17452 34737 17290 34737 17290 34738 17452 34738 17453 34738 17290 34739 17453 34739 17289 34739 17289 34740 17453 34740 17454 34740 17289 34741 17454 34741 17440 34741 17441 34742 17455 34742 17288 34742 17288 34743 17455 34743 17456 34743 17288 34744 17456 34744 17287 34744 17394 34745 17457 34745 17279 34745 17279 34746 17457 34746 17458 34746 17279 34747 17458 34747 17278 34747 17278 34748 17458 34748 17459 34748 17278 34749 17459 34749 17460 34749 17460 34750 17461 34750 17278 34750 17278 34751 17461 34751 17462 34751 17278 34752 17462 34752 17277 34752 17277 34753 17462 34753 17463 34753 17277 34754 17463 34754 17275 34754 17275 34755 17463 34755 17464 34755 17275 34756 17464 34756 17444 34756 17465 34757 17310 34757 17466 34757 17466 34758 17310 34758 17311 34758 17466 34759 17311 34759 17467 34759 17467 34760 17311 34760 17433 34760 17456 34761 17468 34761 17287 34761 17287 34762 17468 34762 17469 34762 17287 34763 17469 34763 17286 34763 17286 34764 17469 34764 17470 34764 17286 34765 17470 34765 17443 34765 17429 34766 17471 34766 17313 34766 17313 34767 17471 34767 17472 34767 17313 34768 17472 34768 17312 34768 17312 34769 17472 34769 17473 34769 17312 34770 17473 34770 17432 34770 17465 34771 17474 34771 17310 34771 17310 34772 17474 34772 17475 34772 17310 34773 17475 34773 17309 34773 17309 34774 17475 34774 17476 34774 17309 34775 17476 34775 17402 34775 17475 34848 17513 34848 17476 34848 17476 34849 17513 34849 17514 34849 17476 34850 17514 34850 17402 34850 17402 34851 17514 34851 17403 34851 17403 34852 17514 34852 17515 34852 17403 34853 17515 34853 17434 34853 17516 34854 17436 34854 17515 34854 17515 34855 17436 34855 17435 34855 17515 34856 17435 34856 17434 34856 17381 34857 17439 34857 17517 34857 17517 34858 17439 34858 17438 34858 17517 34859 17438 34859 17516 34859 17516 34860 17438 34860 17437 34860 17516 34861 17437 34861 17436 34861 17381 34862 17517 34862 17382 34862 17382 34863 17517 34863 17518 34863 17382 34864 17518 34864 17383 34864 17383 34865 17518 34865 17384 34865 17384 34866 17518 34866 17519 34866 17384 34867 17519 34867 17385 34867 17520 34868 17387 34868 17519 34868 17519 34869 17387 34869 17386 34869 17519 34870 17386 34870 17385 34870 17391 34871 17390 34871 17521 34871 17521 34872 17390 34872 17389 34872 17521 34873 17389 34873 17520 34873 17520 34874 17389 34874 17388 34874 17520 34875 17388 34875 17387 34875 17391 34876 17521 34876 17404 34876 17404 34877 17521 34877 17522 34877 17404 34878 17522 34878 17405 34878 17405 34879 17522 34879 17406 34879 17406 34880 17522 34880 17523 34880 17406 34881 17523 34881 17407 34881 17407 34882 17523 34882 17408 34882 17408 34883 17523 34883 17524 34883 17408 34884 17524 34884 17392 34884 17392 34885 17524 34885 17393 34885 17393 34886 17524 34886 17525 34886 17393 34887 17525 34887 17374 34887 17526 34888 17359 34888 17525 34888 17525 34889 17359 34889 17373 34889 17525 34890 17373 34890 17374 34890 17527 34891 17364 34891 17526 34891 17526 34892 17364 34892 17360 34892 17526 34893 17360 34893 17359 34893 17528 34894 17366 34894 17527 34894 17527 34895 17366 34895 17365 34895 17527 34896 17365 34896 17364 34896 17370 34897 17369 34897 17529 34897 17529 34898 17369 34898 17368 34898 17529 34899 17368 34899 17528 34899 17528 34900 17368 34900 17367 34900 17528 34901 17367 34901 17366 34901 17370 34902 17529 34902 17371 34902 17371 34903 17529 34903 17530 34903 17371 34904 17530 34904 17372 34904 17372 34905 17530 34905 17409 34905 17409 34906 17530 34906 17531 34906 17409 34907 17531 34907 17410 34907 17532 34908 17412 34908 17531 34908 17531 34909 17412 34909 17411 34909 17531 34910 17411 34910 17410 34910 17416 34911 17415 34911 17533 34911 17533 34912 17415 34912 17414 34912 17533 34913 17414 34913 17532 34913 17532 34914 17414 34914 17413 34914 17532 34915 17413 34915 17412 34915 17416 34916 17533 34916 17417 34916 17417 34917 17533 34917 17534 34917 17417 34918 17534 34918 17418 34918 17418 34919 17534 34919 17452 34919 17452 34920 17534 34920 17535 34920 17452 34921 17535 34921 17453 34921 17536 34922 17440 34922 17535 34922 17535 34923 17440 34923 17454 34923 17535 34924 17454 34924 17453 34924 17468 34925 17456 34925 17537 34925 17537 34926 17456 34926 17455 34926 17537 34927 17455 34927 17536 34927 17536 34928 17455 34928 17441 34928 17536 34929 17441 34929 17440 34929 17468 34930 17537 34930 17469 34930 17469 34931 17537 34931 17538 34931 17469 34932 17538 34932 17470 34932 17470 34933 17538 34933 17443 34933 17443 34934 17538 34934 17539 34934 17443 34935 17539 34935 17442 34935 17442 34936 17539 34936 17419 34936 17419 34937 17539 34937 17540 34937 17419 34938 17540 34938 17420 34938 17541 34939 17422 34939 17540 34939 17540 34940 17422 34940 17421 34940 17540 34941 17421 34941 17420 34941 17358 34942 17357 34942 17542 34942 17542 34943 17357 34943 17376 34943 17542 34944 17376 34944 17541 34944 17541 34945 17376 34945 17375 34945 17541 34946 17375 34946 17422 34946 17358 34947 17542 34947 17425 34947 17425 34948 17542 34948 17543 34948 17425 34949 17543 34949 17424 34949 17424 34950 17543 34950 17423 34950 17423 34951 17543 34951 17544 34951 17423 34952 17544 34952 17426 34952 17545 34953 17428 34953 17544 34953 17544 34954 17428 34954 17427 34954 17544 34955 17427 34955 17426 34955 17458 34956 17457 34956 17546 34956 17546 34957 17457 34957 17394 34957 17546 34958 17394 34958 17545 34958 17545 34959 17394 34959 17395 34959 17545 34960 17395 34960 17428 34960 17458 34961 17546 34961 17459 34961 17459 34962 17546 34962 17547 34962 17459 34963 17547 34963 17460 34963 17460 34964 17547 34964 17461 34964 17461 34965 17547 34965 17548 34965 17461 34966 17548 34966 17462 34966 17549 34967 17464 34967 17548 34967 17548 34968 17464 34968 17463 34968 17548 34969 17463 34969 17462 34969 17447 34970 17446 34970 17550 34970 17550 34971 17446 34971 17445 34971 17550 34972 17445 34972 17549 34972 17549 34973 17445 34973 17444 34973 17549 34974 17444 34974 17464 34974 17447 34975 17550 34975 17448 34975 17448 34976 17550 34976 17551 34976 17448 34977 17551 34977 17396 34977 17396 34978 17551 34978 17397 34978 17397 34979 17551 34979 17552 34979 17397 34980 17552 34980 17398 34980 17553 34981 17378 34981 17552 34981 17552 34982 17378 34982 17399 34982 17552 34983 17399 34983 17398 34983 17554 34984 17363 34984 17553 34984 17553 34985 17363 34985 17377 34985 17553 34986 17377 34986 17378 34986 17401 34987 17400 34987 17555 34987 17555 34988 17400 34988 17361 34988 17555 34989 17361 34989 17554 34989 17554 34990 17361 34990 17362 34990 17554 34991 17362 34991 17363 34991 17401 34992 17555 34992 17449 34992 17449 34993 17555 34993 17556 34993 17449 34994 17556 34994 17450 34994 17450 34995 17556 34995 17451 34995 17451 34996 17556 34996 17557 34996 17451 34997 17557 34997 17379 34997 17558 34998 17431 34998 17557 34998 17557 34999 17431 34999 17380 34999 17557 35000 17380 35000 17379 35000 17472 35001 17471 35001 17559 35001 17559 35002 17471 35002 17429 35002 17559 35003 17429 35003 17558 35003 17558 35004 17429 35004 17430 35004 17558 35005 17430 35005 17431 35005 17472 35006 17559 35006 17473 35006 17473 35007 17559 35007 17560 35007 17473 35008 17560 35008 17432 35008 17432 35009 17560 35009 17433 35009 17433 35010 17560 35010 17561 35010 17433 35011 17561 35011 17467 35011 17475 35012 17474 35012 17513 35012 17513 35013 17474 35013 17465 35013 17513 35014 17465 35014 17561 35014 17561 35015 17465 35015 17466 35015 17561 35016 17466 35016 17467 35016 17695 35150 17537 35150 17696 35150 17696 35151 17537 35151 17536 35151 17696 35152 17536 35152 17697 35152 17697 35153 17536 35153 17535 35153 17697 35154 17535 35154 17698 35154 17698 35155 17535 35155 17534 35155 17698 35156 17534 35156 17699 35156 17699 35157 17534 35157 17533 35157 17699 35158 17533 35158 17700 35158 17700 35159 17533 35159 17532 35159 17700 35160 17532 35160 17701 35160 17701 35161 17532 35161 17531 35161 17701 35162 17531 35162 17702 35162 17702 35163 17531 35163 17530 35163 17702 35164 17530 35164 17703 35164 17703 35165 17530 35165 17529 35165 17703 35166 17529 35166 17704 35166 17704 35167 17529 35167 17528 35167 17704 35168 17528 35168 17705 35168 17705 35169 17528 35169 17527 35169 17705 35170 17527 35170 17706 35170 17706 35171 17527 35171 17526 35171 17706 35172 17526 35172 17707 35172 17707 35173 17526 35173 17525 35173 17707 35174 17525 35174 17708 35174 17708 35175 17525 35175 17524 35175 17708 35176 17524 35176 17709 35176 17709 35177 17524 35177 17523 35177 17709 35178 17523 35178 17710 35178 17710 35179 17523 35179 17522 35179 17710 35180 17522 35180 17711 35180 17711 35181 17522 35181 17521 35181 17711 35182 17521 35182 17712 35182 17712 35183 17521 35183 17520 35183 17712 35184 17520 35184 17713 35184 17713 35185 17520 35185 17519 35185 17713 35186 17519 35186 17714 35186 17714 35187 17519 35187 17518 35187 17714 35188 17518 35188 17715 35188 17715 35189 17518 35189 17517 35189 17715 35190 17517 35190 17716 35190 17716 35191 17517 35191 17516 35191 17716 35192 17516 35192 17717 35192 17717 35193 17516 35193 17515 35193 17717 35194 17515 35194 17718 35194 17718 35195 17515 35195 17514 35195 17718 35196 17514 35196 17719 35196 17719 35197 17514 35197 17513 35197 17719 35198 17513 35198 17720 35198 17720 35199 17513 35199 17561 35199 17720 35200 17561 35200 17721 35200 17721 35201 17561 35201 17560 35201 17721 35202 17560 35202 17722 35202 17722 35203 17560 35203 17559 35203 17722 35204 17559 35204 17723 35204 17723 35205 17559 35205 17558 35205 17723 35206 17558 35206 17724 35206 17724 35207 17558 35207 17557 35207 17724 35208 17557 35208 17725 35208 17725 35209 17557 35209 17556 35209 17725 35210 17556 35210 17726 35210 17726 35211 17556 35211 17555 35211 17726 35212 17555 35212 17727 35212 17727 35213 17555 35213 17554 35213 17727 35214 17554 35214 17728 35214 17728 35215 17554 35215 17553 35215 17728 35216 17553 35216 17729 35216 17729 35217 17553 35217 17552 35217 17729 35218 17552 35218 17730 35218 17730 35219 17552 35219 17551 35219 17730 35220 17551 35220 17731 35220 17731 35221 17551 35221 17550 35221 17731 35222 17550 35222 17732 35222 17732 35223 17550 35223 17549 35223 17732 35224 17549 35224 17733 35224 17733 35225 17549 35225 17548 35225 17733 35226 17548 35226 17734 35226 17734 35227 17548 35227 17547 35227 17734 35228 17547 35228 17735 35228 17735 35229 17547 35229 17546 35229 17735 35230 17546 35230 17736 35230 17736 35231 17546 35231 17545 35231 17736 35232 17545 35232 17737 35232 17737 35233 17545 35233 17544 35233 17737 35234 17544 35234 17738 35234 17738 35235 17544 35235 17543 35235 17738 35236 17543 35236 17739 35236 17739 35237 17543 35237 17542 35237 17739 35238 17542 35238 17740 35238 17740 35239 17542 35239 17541 35239 17740 35240 17541 35240 17741 35240 17741 35241 17541 35241 17540 35241 17741 35242 17540 35242 17742 35242 17742 35243 17540 35243 17539 35243 17742 35244 17539 35244 17743 35244 17743 35245 17539 35245 17538 35245 17743 35246 17538 35246 17695 35246 17695 35247 17538 35247 17537 35247 17744 35248 17695 35248 17745 35248 17745 35249 17695 35249 17696 35249 17745 35250 17696 35250 17746 35250 17746 35251 17696 35251 17697 35251 17746 35252 17697 35252 17747 35252 17747 35253 17697 35253 17698 35253 17747 35254 17698 35254 17748 35254 17748 35255 17698 35255 17699 35255 17748 35256 17699 35256 17749 35256 17749 35257 17699 35257 17700 35257 17749 35258 17700 35258 17750 35258 17750 35259 17700 35259 17701 35259 17750 35260 17701 35260 17751 35260 17751 35261 17701 35261 17702 35261 17751 35262 17702 35262 17752 35262 17752 35263 17702 35263 17703 35263 17752 35264 17703 35264 17753 35264 17753 35265 17703 35265 17704 35265 17753 35266 17704 35266 17754 35266 17754 35267 17704 35267 17705 35267 17754 35268 17705 35268 17755 35268 17755 35269 17705 35269 17706 35269 17755 35270 17706 35270 17756 35270 17756 35271 17706 35271 17707 35271 17756 35272 17707 35272 17757 35272 17757 35273 17707 35273 17708 35273 17757 35274 17708 35274 17758 35274 17758 35275 17708 35275 17709 35275 17758 35276 17709 35276 17759 35276 17759 35277 17709 35277 17710 35277 17759 35278 17710 35278 17760 35278 17760 35279 17710 35279 17711 35279 17760 35280 17711 35280 17761 35280 17761 35281 17711 35281 17712 35281 17761 35282 17712 35282 17762 35282 17762 35283 17712 35283 17713 35283 17762 35284 17713 35284 17763 35284 17763 35285 17713 35285 17714 35285 17763 35286 17714 35286 17764 35286 17764 35287 17714 35287 17715 35287 17764 35288 17715 35288 17765 35288 17765 35289 17715 35289 17716 35289 17765 35290 17716 35290 17766 35290 17766 35291 17716 35291 17717 35291 17766 35292 17717 35292 17767 35292 17767 35293 17717 35293 17718 35293 17767 35294 17718 35294 17768 35294 17768 35295 17718 35295 17719 35295 17768 35296 17719 35296 17769 35296 17769 35297 17719 35297 17720 35297 17769 35298 17720 35298 17770 35298 17770 35299 17720 35299 17721 35299 17770 35300 17721 35300 17771 35300 17771 35301 17721 35301 17722 35301 17771 35302 17722 35302 17772 35302 17772 35303 17722 35303 17723 35303 17772 35304 17723 35304 17773 35304 17773 35305 17723 35305 17724 35305 17773 35306 17724 35306 17774 35306 17774 35307 17724 35307 17725 35307 17774 35308 17725 35308 17775 35308 17775 35309 17725 35309 17726 35309 17775 35310 17726 35310 17776 35310 17776 35311 17726 35311 17727 35311 17776 35312 17727 35312 17777 35312 17777 35313 17727 35313 17728 35313 17777 35314 17728 35314 17778 35314 17778 35315 17728 35315 17729 35315 17778 35316 17729 35316 17779 35316 17779 35317 17729 35317 17730 35317 17779 35318 17730 35318 17780 35318 17780 35319 17730 35319 17731 35319 17780 35320 17731 35320 17781 35320 17781 35321 17731 35321 17732 35321 17781 35322 17732 35322 17782 35322 17782 35323 17732 35323 17733 35323 17782 35324 17733 35324 17783 35324 17783 35325 17733 35325 17734 35325 17783 35326 17734 35326 17784 35326 17784 35327 17734 35327 17735 35327 17784 35328 17735 35328 17785 35328 17785 35329 17735 35329 17736 35329 17785 35330 17736 35330 17786 35330 17786 35331 17736 35331 17737 35331 17786 35332 17737 35332 17787 35332 17787 35333 17737 35333 17738 35333 17787 35334 17738 35334 17788 35334 17788 35335 17738 35335 17739 35335 17788 35336 17739 35336 17789 35336 17789 35337 17739 35337 17740 35337 17789 35338 17740 35338 17790 35338 17790 35339 17740 35339 17741 35339 17790 35340 17741 35340 17791 35340 17791 35341 17741 35341 17742 35341 17791 35342 17742 35342 17792 35342 17792 35343 17742 35343 17743 35343 17792 35344 17743 35344 17744 35344 17744 35345 17743 35345 17695 35345

+
+
+
+
+ + + + + 0.6858805 -0.3173701 0.6548619 7.481132 0.7276338 0.3124686 -0.6106656 -6.50764 -0.01081678 0.8953432 0.4452454 5.343665 0 0 0 1 + + + + -0.2908646 -0.7711008 0.5663932 4.076245 0.9551712 -0.1998834 0.2183912 1.005454 -0.05518906 0.6045247 0.7946723 5.903862 0 0 0 1 + + + + 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/kortex_description/grippers/robotiq_2f_85/meshes/visual/robotiq_85_finger_link.dae b/kortex_description/grippers/robotiq_2f_85/meshes/visual/robotiq_85_finger_link.dae new file mode 100644 index 00000000..69dddc52 --- /dev/null +++ b/kortex_description/grippers/robotiq_2f_85/meshes/visual/robotiq_85_finger_link.dae @@ -0,0 +1,277 @@ + + + + + Blender User + Blender 2.74.0 commit date:2015-03-31, commit time:13:39, hash:000dfc0 + + 2015-09-16T11:24:50 + 2015-09-16T11:24:50 + + Z_UP + + + + + + + 49.13434 + 1.777778 + 0.1 + 100 + + + + + + 0 + 0 + 0 + + + + + + + + + 1 1 1 + 1 + 0 + 0.00111109 + + + + + 0.000999987 + 1 + 0.1 + 0.1 + 1 + 1 + 1 + 2 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 2880 + 2 + 30.002 + 1.000799 + 0.04999995 + 29.99998 + 1 + 2 + 0 + 0 + 1 + 1 + 1 + 1 + 8192 + 1 + 1 + 0 + 1 + 1 + 1 + 3 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 3 + 0.15 + 75 + 1 + 1 + 0 + 1 + 1 + 0 + + + + + + + + + + + + 0 0 0 1 + + + 0 0 0 1 + + + 0.04 0.04 0.04 1 + + + 0.5 0.5 0.5 1 + + + 50 + + + 1 + + + + + + + + + + + 0 0 0 1 + + + 0 0 0 1 + + + 0.44 0.44 0.44 1 + + + 0.5 0.5 0.5 1 + + + 50 + + + 1 1 1 1 + + + 0.2 + + + 1 + + + + + + + + + + + 0 0 0 1 + + + 0 0 0 1 + + + 0.24 0.24 0.24 1 + + + 0.5 0.5 0.5 1 + + + 50 + + + 1 + + + + + + + + + + + + + + + + + + + + + + -4.34194e-4 0.002461969 -0.01349997 0 0.002499997 -0.01349997 0.002349197 -8.54977e-4 -0.01349997 0.002165079 -0.001249909 -0.01349997 0.001915156 -0.001606881 -0.01349997 -0.001250028 0.002165019 -0.01349997 -0.001606881 -0.001915156 -0.01349997 -0.001915037 -0.001607 -0.01349997 0.001607 -0.001915037 -0.01349997 0.001250028 -0.002165019 -0.01349997 8.55121e-4 -0.002349197 -0.01349997 -8.55122e-4 0.002349197 -0.01349997 4.34192e-4 -0.002461969 -0.01349997 0 -0.002499997 -0.01349997 -4.34046e-4 -0.002462029 -0.01349997 -8.54981e-4 -0.002349257 -0.01349997 -0.001249909 -0.002165079 -0.01349997 0.002461969 4.34192e-4 -0.01349997 0.002499997 0 -0.01349997 8.5498e-4 0.002349197 -0.01349997 4.34045e-4 0.002462029 -0.01349997 0.002462029 -4.34046e-4 -0.01349997 -0.002165019 -0.001250028 -0.01349997 -0.002349197 -8.55118e-4 -0.01349997 -0.002461969 -4.34194e-4 -0.01349997 -0.002499997 0 -0.01349997 -0.002462029 4.34045e-4 -0.01349997 -0.002349257 8.5498e-4 -0.01349997 0.002349197 8.55121e-4 -0.01349997 0.001249909 0.002165079 -0.01349997 0.002165019 0.001250028 -0.01349997 0.001606881 0.001915156 -0.01349997 0.001915037 0.001607 -0.01349997 -0.002165079 0.001249909 -0.01349997 -0.001915156 0.001606881 -0.01349997 -0.001607 0.001915037 -0.01349997 0.04798018 -0.008462548 -0.01349997 0.04626995 -0.003764152 -0.01349997 0.04669088 -0.00365132 -0.01349997 0.04712504 -0.003613352 -0.01349997 0.04755914 -0.00365132 -0.01349997 0.04798007 -0.003764092 -0.01349997 0.04627013 -0.008462607 -0.01349997 0.04587519 -0.008278429 -0.01349997 0.04587501 -0.00394833 -0.01349997 0.04837501 -0.003948211 -0.01349997 0.0487321 -0.008028388 -0.01349997 0.04837518 -0.008278369 -0.01349997 0.04755932 -0.00857532 -0.01349997 0.04712516 -0.008613348 -0.01349997 0.04669106 -0.008575379 -0.01349997 0.04958713 -0.006547391 -0.01349997 0.04947435 -0.006968319 -0.01349997 0.04929018 -0.007363259 -0.01349997 0.04551815 -0.008028507 -0.01349997 0.04521006 -0.007720351 -0.01349997 0.04496008 -0.007363379 -0.01349997 0.04873198 -0.004198193 -0.01349997 0.04904013 -0.004506289 -0.01349997 0.04929012 -0.004863262 -0.01349997 0.04962509 -0.00611329 -0.01349997 0.04904025 -0.007720232 -0.01349997 0.0447759 -0.006968438 -0.01349997 0.04466307 -0.00654751 -0.01349997 0.0446251 -0.006113409 -0.01349997 0.0455181 -0.004198253 -0.01349997 0.04520994 -0.004506409 -0.01349997 0.04496002 -0.004863381 -0.01349997 0.04947429 -0.005258202 -0.01349997 0.04958713 -0.00567913 -0.01349997 0.04466307 -0.005679309 -0.01349997 0.04477584 -0.005258381 -0.01349997 0.001607 -0.001915037 0.01349997 0.001915156 -0.001606881 0.01349997 -0.001250028 0.002165019 0.01349997 0.002165079 -0.001249909 0.01349997 0.002349197 -8.54977e-4 0.01349997 -0.001606881 -0.001915156 0.01349997 -0.001249909 -0.002165079 0.01349997 -8.54981e-4 -0.002349257 0.01349997 0.002462029 -4.34046e-4 0.01349997 0.002499997 0 0.01349997 0.002461969 4.34192e-4 0.01349997 -0.001915156 0.001606881 0.01349997 -0.002165079 0.001249909 0.01349997 -0.001915037 -0.001607 0.01349997 -4.34046e-4 -0.002462029 0.01349997 0 -0.002499997 0.01349997 4.34192e-4 -0.002461969 0.01349997 8.55121e-4 -0.002349197 0.01349997 0.001250028 -0.002165019 0.01349997 -0.002349257 8.5498e-4 0.01349997 -0.002462029 4.34045e-4 0.01349997 -0.002499997 0 0.01349997 8.5498e-4 0.002349197 0.01349997 4.34045e-4 0.002462029 0.01349997 0 0.002499997 0.01349997 -4.34194e-4 0.002461969 0.01349997 -8.55122e-4 0.002349197 0.01349997 -0.001607 0.001915037 0.01349997 -0.002461969 -4.34194e-4 0.01349997 -0.002349197 -8.55118e-4 0.01349997 -0.002165019 -0.001250028 0.01349997 0.002349197 8.55121e-4 0.01349997 0.002165019 0.001250028 0.01349997 0.001915037 0.001607 0.01349997 0.001606881 0.001915156 0.01349997 0.001249909 0.002165079 0.01349997 0.04837501 -0.003948211 0.01349997 0.04798007 -0.003764092 0.01349997 0.0487321 -0.008028388 0.01349997 0.04755914 -0.00365132 0.01349997 0.04712504 -0.003613352 0.01349997 0.04798018 -0.008462548 0.01349997 0.04669088 -0.00365132 0.01349997 0.04626995 -0.003764152 0.01349997 0.04837518 -0.008278369 0.01349997 0.04904013 -0.004506289 0.01349997 0.04873198 -0.004198193 0.01349997 0.04947435 -0.006968319 0.01349997 0.04627013 -0.008462607 0.01349997 0.04669106 -0.008575379 0.01349997 0.04587501 -0.00394833 0.01349997 0.04712516 -0.008613348 0.01349997 0.04755932 -0.00857532 0.01349997 0.04929018 -0.007363259 0.01349997 0.0455181 -0.004198253 0.01349997 0.04520994 -0.004506409 0.01349997 0.04496002 -0.004863381 0.01349997 0.04477584 -0.005258381 0.01349997 0.04962509 -0.00611329 0.01349997 0.04958713 -0.00567913 0.01349997 0.04947429 -0.005258202 0.01349997 0.04466307 -0.005679309 0.01349997 0.0446251 -0.006113409 0.01349997 0.04466307 -0.00654751 0.01349997 0.0447759 -0.006968438 0.01349997 0.04496008 -0.007363379 0.01349997 0.04521006 -0.007720351 0.01349997 0.04551815 -0.008028507 0.01349997 0.04587519 -0.008278429 0.01349997 0.04904025 -0.007720232 0.01349997 0.04958713 -0.006547391 0.01349997 0.04929012 -0.004863262 0.01349997 4.34045e-4 0.002462029 -0.01269996 0 0.002499997 -0.01269996 -4.34194e-4 0.002461969 -0.01269996 -8.55122e-4 0.002349197 -0.01269996 -0.001250028 0.002165019 -0.01269996 -0.001607 0.001915037 -0.01269996 -0.001915156 0.001606881 -0.01269996 -0.002165079 0.001249909 -0.01269996 -0.002349257 8.5498e-4 -0.01269996 -0.002462029 4.34045e-4 -0.01269996 -0.002499997 0 -0.01269996 -0.002461969 -4.34194e-4 -0.01269996 -0.002349197 -8.55118e-4 -0.01269996 -0.002165019 -0.001250028 -0.01269996 -0.001915037 -0.001607 -0.01269996 -0.001606881 -0.001915156 -0.01269996 -0.001249909 -0.002165079 -0.01269996 -8.54981e-4 -0.002349257 -0.01269996 -4.34046e-4 -0.002462029 -0.01269996 0 -0.002499997 -0.01269996 4.34192e-4 -0.002461969 -0.01269996 8.55121e-4 -0.002349197 -0.01269996 0.001250028 -0.002165019 -0.01269996 0.001607 -0.001915037 -0.01269996 0.001915156 -0.001606881 -0.01269996 0.002165079 -0.001249909 -0.01269996 0.002349197 -8.54977e-4 -0.01269996 0.002462029 -4.34046e-4 -0.01269996 0.002499997 0 -0.01269996 0.002461969 4.34192e-4 -0.01269996 0.002349197 8.55121e-4 -0.01269996 0.002165019 0.001250028 -0.01269996 0.001915037 0.001607 -0.01269996 0.001606881 0.001915156 -0.01269996 0.001249909 0.002165079 -0.01269996 8.5498e-4 0.002349197 -0.01269996 0.04962509 -0.00611329 -0.01269996 0.04958713 -0.006547391 -0.01269996 0.04947435 -0.006968319 -0.01269996 0.04929018 -0.007363259 -0.01269996 0.04904025 -0.007720232 -0.01269996 0.0487321 -0.008028388 -0.01269996 0.04837518 -0.008278369 -0.01269996 0.04798018 -0.008462548 -0.01269996 0.04755932 -0.00857532 -0.01269996 0.04712516 -0.008613348 -0.01269996 0.04669106 -0.008575379 -0.01269996 0.04627013 -0.008462607 -0.01269996 0.04587519 -0.008278429 -0.01269996 0.04551815 -0.008028507 -0.01269996 0.04521006 -0.007720351 -0.01269996 0.04496008 -0.007363379 -0.01269996 0.0447759 -0.006968438 -0.01269996 0.04466307 -0.00654751 -0.01269996 0.0446251 -0.006113409 -0.01269996 0.04466307 -0.005679309 -0.01269996 0.04477584 -0.005258381 -0.01269996 0.04496002 -0.004863381 -0.01269996 0.04520994 -0.004506409 -0.01269996 0.0455181 -0.004198253 -0.01269996 0.04587501 -0.00394833 -0.01269996 0.04626995 -0.003764152 -0.01269996 0.04669088 -0.00365132 -0.01269996 0.04712504 -0.003613352 -0.01269996 0.04755914 -0.00365132 -0.01269996 0.04798007 -0.003764092 -0.01269996 0.04837501 -0.003948211 -0.01269996 0.04873198 -0.004198193 -0.01269996 0.04904013 -0.004506289 -0.01269996 0.04929012 -0.004863262 -0.01269996 0.04947429 -0.005258202 -0.01269996 0.04958713 -0.00567913 -0.01269996 0 0.002499997 0.01269996 -4.34194e-4 0.002461969 0.01269996 -8.55122e-4 0.002349197 0.01269996 -0.001250028 0.002165019 0.01269996 -0.001607 0.001915037 0.01269996 -0.001915156 0.001606881 0.01269996 -0.002165079 0.001249909 0.01269996 -0.002349257 8.5498e-4 0.01269996 -0.002462029 4.34045e-4 0.01269996 -0.002499997 0 0.01269996 -0.002461969 -4.34194e-4 0.01269996 -0.002349197 -8.55118e-4 0.01269996 -0.002165019 -0.001250028 0.01269996 -0.001915037 -0.001607 0.01269996 -0.001606881 -0.001915156 0.01269996 -0.001249909 -0.002165079 0.01269996 -8.54981e-4 -0.002349257 0.01269996 -4.34046e-4 -0.002462029 0.01269996 0 -0.002499997 0.01269996 4.34192e-4 -0.002461969 0.01269996 8.55121e-4 -0.002349197 0.01269996 0.001250028 -0.002165019 0.01269996 0.001607 -0.001915037 0.01269996 0.001915156 -0.001606881 0.01269996 0.002165079 -0.001249909 0.01269996 0.002349197 -8.54977e-4 0.01269996 0.002462029 -4.34046e-4 0.01269996 0.002499997 0 0.01269996 0.002461969 4.34192e-4 0.01269996 0.002349197 8.55121e-4 0.01269996 0.002165019 0.001250028 0.01269996 0.001915037 0.001607 0.01269996 0.001606881 0.001915156 0.01269996 0.001249909 0.002165079 0.01269996 8.5498e-4 0.002349197 0.01269996 4.34045e-4 0.002462029 0.01269996 0.04958713 -0.00567913 0.01269996 0.04962509 -0.00611329 0.01269996 0.04958713 -0.006547391 0.01269996 0.04947435 -0.006968319 0.01269996 0.04929018 -0.007363259 0.01269996 0.04904025 -0.007720232 0.01269996 0.0487321 -0.008028388 0.01269996 0.04837518 -0.008278369 0.01269996 0.04798018 -0.008462548 0.01269996 0.04755932 -0.00857532 0.01269996 0.04712516 -0.008613348 0.01269996 0.04669106 -0.008575379 0.01269996 0.04627013 -0.008462607 0.01269996 0.04587519 -0.008278429 0.01269996 0.04551815 -0.008028507 0.01269996 0.04521006 -0.007720351 0.01269996 0.04496008 -0.007363379 0.01269996 0.0447759 -0.006968438 0.01269996 0.04466307 -0.00654751 0.01269996 0.0446251 -0.006113409 0.01269996 0.04466307 -0.005679309 0.01269996 0.04477584 -0.005258381 0.01269996 0.04496002 -0.004863381 0.01269996 0.04520994 -0.004506409 0.01269996 0.0455181 -0.004198253 0.01269996 0.04587501 -0.00394833 0.01269996 0.04626995 -0.003764152 0.01269996 0.04669088 -0.00365132 0.01269996 0.04712504 -0.003613352 0.01269996 0.04755914 -0.00365132 0.01269996 0.04798007 -0.003764092 0.01269996 0.04837501 -0.003948211 0.01269996 0.04873198 -0.004198193 0.01269996 0.04904013 -0.004506289 0.01269996 0.04929012 -0.004863262 0.01269996 0.04947429 -0.005258202 0.01269996 4.16826e-4 -0.002363502 -0.01269996 0 -0.002399981 -0.01269996 8.20916e-4 -0.002255201 -0.01269996 0.00120002 -0.002078413 -0.01269996 0.001542687 -0.001838445 -0.01269996 0.001838505 -0.001542627 -0.01269996 0.002078473 -0.001199901 -0.01269996 0.00225526 -8.20782e-4 -0.01269996 0.002363502 -4.16682e-4 -0.01269996 0.002399981 0 -0.01269996 0.002363502 4.16826e-4 -0.01269996 0.002255201 8.20916e-4 -0.01269996 0.002078413 0.00120002 -0.01269996 0.001838445 0.001542687 -0.01269996 0.001542627 0.001838505 -0.01269996 0.001199901 0.002078473 -0.01269996 8.20781e-4 0.00225526 -0.01269996 4.16684e-4 0.002363502 -0.01269996 0 0.002399981 -0.01269996 -4.16827e-4 0.002363502 -0.01269996 -8.20917e-4 0.002255201 -0.01269996 -0.00120002 0.002078413 -0.01269996 -0.001542747 0.001838445 -0.01269996 -0.001838505 0.001542627 -0.01269996 -0.002078473 0.001199901 -0.01269996 -0.00225526 8.20781e-4 -0.01269996 -0.002363502 4.16684e-4 -0.01269996 -0.002399981 0 -0.01269996 -0.002363502 -4.16823e-4 -0.01269996 -0.002255201 -8.20917e-4 -0.01269996 -0.002078413 -0.00120002 -0.01269996 -0.001838445 -0.001542747 -0.01269996 -0.001542627 -0.001838505 -0.01269996 -0.001199901 -0.002078473 -0.01269996 -8.20782e-4 -0.00225526 -0.01269996 -4.16685e-4 -0.002363502 -0.01269996 0.04528665 -0.007656097 -0.01269996 0.04558247 -0.007951915 -0.01269996 0.04592514 -0.008191823 -0.01269996 0.04630434 -0.008368611 -0.01269996 0.0467084 -0.008476853 -0.01269996 0.04712516 -0.008513331 -0.01269996 0.04754191 -0.008476853 -0.01269996 0.04794603 -0.008368551 -0.01269996 0.04832518 -0.008191764 -0.01269996 0.04866784 -0.007951796 -0.01269996 0.04896366 -0.007655978 -0.01269996 0.04920357 -0.007313251 -0.01269996 0.04938036 -0.006934106 -0.01269996 0.04948866 -0.006530046 -0.01269996 0.04952508 -0.00611329 -0.01269996 0.0494886 -0.005696535 -0.01269996 0.04938036 -0.005292415 -0.01269996 0.04920351 -0.00491327 -0.01269996 0.04896354 -0.004570603 -0.01269996 0.04866772 -0.004274785 -0.01269996 0.04832506 -0.004034817 -0.01269996 0.04794585 -0.003858029 -0.01269996 0.04754179 -0.003749787 -0.01269996 0.04712504 -0.003713309 -0.01269996 0.04670828 -0.003749787 -0.01269996 0.04630416 -0.003858089 -0.01269996 0.04592502 -0.004034936 -0.01269996 0.04558235 -0.004274904 -0.01269996 0.04528653 -0.004570722 -0.01269996 0.04504662 -0.004913389 -0.01269996 0.04486984 -0.005292534 -0.01269996 0.04476153 -0.005696654 -0.01269996 0.04472512 -0.006113409 -0.01269996 0.04476159 -0.006530165 -0.01269996 0.04486984 -0.006934225 -0.01269996 0.04504668 -0.00731337 -0.01269996 0.001199901 0.002078473 0.01269996 0.001542627 0.001838505 0.01269996 0.001838445 0.001542687 0.01269996 0.002078413 0.00120002 0.01269996 0.002255201 8.20916e-4 0.01269996 0.002363502 4.16826e-4 0.01269996 0.002399981 0 0.01269996 0.002363502 -4.16682e-4 0.01269996 0.00225526 -8.20782e-4 0.01269996 0.002078473 -0.001199901 0.01269996 0.001838505 -0.001542627 0.01269996 0.001542687 -0.001838445 0.01269996 0.00120002 -0.002078413 0.01269996 8.20916e-4 -0.002255201 0.01269996 4.16826e-4 -0.002363502 0.01269996 0 -0.002399981 0.01269996 -4.16685e-4 -0.002363502 0.01269996 -8.20782e-4 -0.00225526 0.01269996 -0.001199901 -0.002078473 0.01269996 -0.001542627 -0.001838505 0.01269996 -0.001838445 -0.001542747 0.01269996 -0.002078413 -0.00120002 0.01269996 -0.002255201 -8.20917e-4 0.01269996 -0.002363502 -4.16823e-4 0.01269996 -0.002399981 0 0.01269996 -0.002363502 4.16684e-4 0.01269996 -0.00225526 8.20781e-4 0.01269996 -0.002078473 0.001199901 0.01269996 -0.001838505 0.001542627 0.01269996 -0.001542747 0.001838445 0.01269996 -0.00120002 0.002078413 0.01269996 -8.20917e-4 0.002255201 0.01269996 -4.16827e-4 0.002363502 0.01269996 0 0.002399981 0.01269996 4.16684e-4 0.002363502 0.01269996 8.20781e-4 0.00225526 0.01269996 0.04948866 -0.006530046 0.01269996 0.04938036 -0.006934106 0.01269996 0.04920357 -0.007313251 0.01269996 0.04896366 -0.007655978 0.01269996 0.04866784 -0.007951796 0.01269996 0.04832518 -0.008191764 0.01269996 0.04794603 -0.008368551 0.01269996 0.04754191 -0.008476853 0.01269996 0.04712516 -0.008513331 0.01269996 0.0467084 -0.008476853 0.01269996 0.04630434 -0.008368611 0.01269996 0.04592514 -0.008191823 0.01269996 0.04558247 -0.007951915 0.01269996 0.04528665 -0.007656097 0.01269996 0.04504668 -0.00731337 0.01269996 0.04486984 -0.006934225 0.01269996 0.04476159 -0.006530165 0.01269996 0.04472512 -0.006113409 0.01269996 0.04476153 -0.005696654 0.01269996 0.04486984 -0.005292534 0.01269996 0.04504662 -0.004913389 0.01269996 0.04528653 -0.004570722 0.01269996 0.04558235 -0.004274904 0.01269996 0.04592502 -0.004034936 0.01269996 0.04630416 -0.003858089 0.01269996 0.04670828 -0.003749787 0.01269996 0.04712504 -0.003713309 0.01269996 0.04754179 -0.003749787 0.01269996 0.04794585 -0.003858029 0.01269996 0.04832506 -0.004034817 0.01269996 0.04866772 -0.004274785 0.01269996 0.04896354 -0.004570603 0.01269996 0.04920351 -0.00491327 0.01269996 0.04938036 -0.005292415 0.01269996 0.0494886 -0.005696535 0.01269996 0.04952508 -0.00611329 0.01269996 4.16684e-4 0.002363502 -0.01199996 0 0.002399981 -0.01199996 -4.16827e-4 0.002363502 -0.01199996 -8.20917e-4 0.002255201 -0.01199996 -0.00120002 0.002078413 -0.01199996 -0.001542747 0.001838445 -0.01199996 -0.001838505 0.001542627 -0.01199996 -0.002078473 0.001199901 -0.01199996 -0.00225526 8.20781e-4 -0.01199996 -0.002363502 4.16684e-4 -0.01199996 -0.002399981 0 -0.01199996 -0.002363502 -4.16823e-4 -0.01199996 -0.002255201 -8.20917e-4 -0.01199996 -0.002078413 -0.00120002 -0.01199996 -0.001838445 -0.001542747 -0.01199996 -0.001542627 -0.001838505 -0.01199996 -0.001199901 -0.002078473 -0.01199996 -8.20782e-4 -0.00225526 -0.01199996 -4.16685e-4 -0.002363502 -0.01199996 0 -0.002399981 -0.01199996 4.16826e-4 -0.002363502 -0.01199996 8.20916e-4 -0.002255201 -0.01199996 0.00120002 -0.002078413 -0.01199996 0.001542687 -0.001838445 -0.01199996 0.001838505 -0.001542627 -0.01199996 0.002078473 -0.001199901 -0.01199996 0.00225526 -8.20782e-4 -0.01199996 0.002363502 -4.16682e-4 -0.01199996 0.002399981 0 -0.01199996 0.002363502 4.16826e-4 -0.01199996 0.002255201 8.20916e-4 -0.01199996 0.002078413 0.00120002 -0.01199996 0.001838445 0.001542687 -0.01199996 0.001542627 0.001838505 -0.01199996 0.001199901 0.002078473 -0.01199996 8.20781e-4 0.00225526 -0.01199996 0.04952508 -0.00611329 -0.01199996 0.04948866 -0.006530046 -0.01199996 0.04938036 -0.006934106 -0.01199996 0.04920357 -0.007313251 -0.01199996 0.04896366 -0.007655978 -0.01199996 0.04866784 -0.007951796 -0.01199996 0.04832518 -0.008191764 -0.01199996 0.04794603 -0.008368551 -0.01199996 0.04754191 -0.008476853 -0.01199996 0.04712516 -0.008513331 -0.01199996 0.0467084 -0.008476853 -0.01199996 0.04630434 -0.008368611 -0.01199996 0.04592514 -0.008191823 -0.01199996 0.04558247 -0.007951915 -0.01199996 0.04528665 -0.007656097 -0.01199996 0.04504668 -0.00731337 -0.01199996 0.04486984 -0.006934225 -0.01199996 0.04476159 -0.006530165 -0.01199996 0.04472512 -0.006113409 -0.01199996 0.04476153 -0.005696654 -0.01199996 0.04486984 -0.005292534 -0.01199996 0.04504662 -0.004913389 -0.01199996 0.04528653 -0.004570722 -0.01199996 0.04558235 -0.004274904 -0.01199996 0.04592502 -0.004034936 -0.01199996 0.04630416 -0.003858089 -0.01199996 0.04670828 -0.003749787 -0.01199996 0.04712504 -0.003713309 -0.01199996 0.04754179 -0.003749787 -0.01199996 0.04794585 -0.003858029 -0.01199996 0.04832506 -0.004034817 -0.01199996 0.04866772 -0.004274785 -0.01199996 0.04896354 -0.004570603 -0.01199996 0.04920351 -0.00491327 -0.01199996 0.04938036 -0.005292415 -0.01199996 0.0494886 -0.005696535 -0.01199996 0 0.002399981 0.01199996 -4.16827e-4 0.002363502 0.01199996 -8.20917e-4 0.002255201 0.01199996 -0.00120002 0.002078413 0.01199996 -0.001542747 0.001838445 0.01199996 -0.001838505 0.001542627 0.01199996 -0.002078473 0.001199901 0.01199996 -0.00225526 8.20781e-4 0.01199996 -0.002363502 4.16684e-4 0.01199996 -0.002399981 0 0.01199996 -0.002363502 -4.16823e-4 0.01199996 -0.002255201 -8.20917e-4 0.01199996 -0.002078413 -0.00120002 0.01199996 -0.001838445 -0.001542747 0.01199996 -0.001542627 -0.001838505 0.01199996 -0.001199901 -0.002078473 0.01199996 -8.20782e-4 -0.00225526 0.01199996 -4.16685e-4 -0.002363502 0.01199996 0 -0.002399981 0.01199996 4.16826e-4 -0.002363502 0.01199996 8.20916e-4 -0.002255201 0.01199996 0.00120002 -0.002078413 0.01199996 0.001542687 -0.001838445 0.01199996 0.001838505 -0.001542627 0.01199996 0.002078473 -0.001199901 0.01199996 0.00225526 -8.20782e-4 0.01199996 0.002363502 -4.16682e-4 0.01199996 0.002399981 0 0.01199996 0.002363502 4.16826e-4 0.01199996 0.002255201 8.20916e-4 0.01199996 0.002078413 0.00120002 0.01199996 0.001838445 0.001542687 0.01199996 0.001542627 0.001838505 0.01199996 0.001199901 0.002078473 0.01199996 8.20781e-4 0.00225526 0.01199996 4.16684e-4 0.002363502 0.01199996 0.0494886 -0.005696535 0.01199996 0.04952508 -0.00611329 0.01199996 0.04948866 -0.006530046 0.01199996 0.04938036 -0.006934106 0.01199996 0.04920357 -0.007313251 0.01199996 0.04896366 -0.007655978 0.01199996 0.04866784 -0.007951796 0.01199996 0.04832518 -0.008191764 0.01199996 0.04794603 -0.008368551 0.01199996 0.04754191 -0.008476853 0.01199996 0.04712516 -0.008513331 0.01199996 0.0467084 -0.008476853 0.01199996 0.04630434 -0.008368611 0.01199996 0.04592514 -0.008191823 0.01199996 0.04558247 -0.007951915 0.01199996 0.04528665 -0.007656097 0.01199996 0.04504668 -0.00731337 0.01199996 0.04486984 -0.006934225 0.01199996 0.04476159 -0.006530165 0.01199996 0.04472512 -0.006113409 0.01199996 0.04476153 -0.005696654 0.01199996 0.04486984 -0.005292534 0.01199996 0.04504662 -0.004913389 0.01199996 0.04528653 -0.004570722 0.01199996 0.04558235 -0.004274904 0.01199996 0.04592502 -0.004034936 0.01199996 0.04630416 -0.003858089 0.01199996 0.04670828 -0.003749787 0.01199996 0.04712504 -0.003713309 0.01199996 0.04754179 -0.003749787 0.01199996 0.04794585 -0.003858029 0.01199996 0.04832506 -0.004034817 0.01199996 0.04866772 -0.004274785 0.01199996 0.04896354 -0.004570603 0.01199996 0.04920351 -0.00491327 0.01199996 0.04938036 -0.005292415 0.01199996 4.34045e-4 0.002462029 0.004999995 0 0.002499997 -0.004999995 0 0.002499997 0.004999995 -4.34194e-4 0.002461969 -0.004999995 -4.34194e-4 0.002461969 0.004999995 -8.55122e-4 0.002349197 -0.004999995 -8.55122e-4 0.002349197 0.004999995 -0.001250028 0.002165019 -0.004999995 -0.001250028 0.002165019 0.004999995 -0.001607 0.001915037 -0.004999995 -0.001607 0.001915037 0.004999995 -0.001915156 0.001606881 -0.004999995 -0.001915156 0.001606881 0.004999995 -0.002165079 0.001249909 -0.004999995 -0.002165079 0.001249909 0.004999995 -0.002349257 8.5498e-4 -0.004999995 -0.002349257 8.5498e-4 0.004999995 -0.002462029 4.34045e-4 -0.004999995 -0.002462029 4.34045e-4 0.004999995 -0.002499997 0 -0.004999995 -0.002499997 0 0.004999995 -0.002461969 -4.34194e-4 -0.004999995 -0.002461969 -4.34194e-4 0.004999995 -0.002349197 -8.55118e-4 -0.004999995 -0.002349197 -8.55118e-4 0.004999995 -0.002165019 -0.001250028 -0.004999995 -0.002165019 -0.001250028 0.004999995 -0.001915037 -0.001607 -0.004999995 -0.001915037 -0.001607 0.004999995 -0.001606881 -0.001915156 -0.004999995 -0.001606881 -0.001915156 0.004999995 -0.001249909 -0.002165079 -0.004999995 -0.001249909 -0.002165079 0.004999995 -8.54981e-4 -0.002349257 -0.004999995 -8.54981e-4 -0.002349257 0.004999995 -4.34046e-4 -0.002462029 -0.004999995 -4.34046e-4 -0.002462029 0.004999995 0 -0.002499997 -0.004999995 0 -0.002499997 0.004999995 4.34192e-4 -0.002461969 -0.004999995 4.34192e-4 -0.002461969 0.004999995 8.55121e-4 -0.002349197 -0.004999995 8.55121e-4 -0.002349197 0.004999995 0.001250028 -0.002165019 -0.004999995 0.001250028 -0.002165019 0.004999995 0.001607 -0.001915037 -0.004999995 0.001607 -0.001915037 0.004999995 0.001915156 -0.001606881 -0.004999995 0.001915156 -0.001606881 0.004999995 0.002165079 -0.001249909 -0.004999995 0.002165079 -0.001249909 0.004999995 0.002349197 -8.54977e-4 -0.004999995 0.002349197 -8.54977e-4 0.004999995 0.002462029 -4.34046e-4 -0.004999995 0.002462029 -4.34046e-4 0.004999995 0.002499997 0 -0.004999995 0.002499997 0 0.004999995 0.002461969 4.34192e-4 -0.004999995 0.002461969 4.34192e-4 0.004999995 0.002349197 8.55121e-4 -0.004999995 0.002349197 8.55121e-4 0.004999995 0.002165019 0.001250028 -0.004999995 0.002165019 0.001250028 0.004999995 0.001915037 0.001607 -0.004999995 0.001915037 0.001607 0.004999995 0.001606881 0.001915156 -0.004999995 0.001606881 0.001915156 0.004999995 0.001249909 0.002165079 -0.004999995 0.001249909 0.002165079 0.004999995 8.5498e-4 0.002349197 -0.004999995 8.5498e-4 0.002349197 0.004999995 4.34045e-4 0.002462029 -0.004999995 0.04958713 -0.00567913 -0.007499992 0.04962509 -0.00611329 0.007499992 0.04962509 -0.00611329 -0.007499992 0.04958713 -0.006547391 0.007499992 0.04958713 -0.006547391 -0.007499992 0.04947435 -0.006968319 0.007499992 0.04947435 -0.006968319 -0.007499992 0.04929018 -0.007363259 0.007499992 0.04929018 -0.007363259 -0.007499992 0.04904025 -0.007720232 0.007499992 0.04904025 -0.007720232 -0.007499992 0.0487321 -0.008028388 0.007499992 0.0487321 -0.008028388 -0.007499992 0.04837518 -0.008278369 0.007499992 0.04837518 -0.008278369 -0.007499992 0.04798018 -0.008462548 0.007499992 0.04798018 -0.008462548 -0.007499992 0.04755932 -0.00857532 0.007499992 0.04755932 -0.00857532 -0.007499992 0.04712516 -0.008613348 0.007499992 0.04712516 -0.008613348 -0.007499992 0.04669106 -0.008575379 0.007499992 0.04669106 -0.008575379 -0.007499992 0.04627013 -0.008462607 0.007499992 0.04627013 -0.008462607 -0.007499992 0.04587519 -0.008278429 0.007499992 0.04587519 -0.008278429 -0.007499992 0.04551815 -0.008028507 0.007499992 0.04551815 -0.008028507 -0.007499992 0.04521006 -0.007720351 0.007499992 0.04521006 -0.007720351 -0.007499992 0.04496008 -0.007363379 0.007499992 0.04496008 -0.007363379 -0.007499992 0.0447759 -0.006968438 0.007499992 0.0447759 -0.006968438 -0.007499992 0.04466307 -0.00654751 0.007499992 0.04466307 -0.00654751 -0.007499992 0.0446251 -0.006113409 0.007499992 0.0446251 -0.006113409 -0.007499992 0.04466307 -0.005679309 0.007499992 0.04466307 -0.005679309 -0.007499992 0.04477584 -0.005258381 0.007499992 0.04477584 -0.005258381 -0.007499992 0.04496002 -0.004863381 0.007499992 0.04496002 -0.004863381 -0.007499992 0.04520994 -0.004506409 0.007499992 0.04520994 -0.004506409 -0.007499992 0.0455181 -0.004198253 0.007499992 0.0455181 -0.004198253 -0.007499992 0.04587501 -0.00394833 0.007499992 0.04587501 -0.00394833 -0.007499992 0.04626995 -0.003764152 0.007499992 0.04626995 -0.003764152 -0.007499992 0.04669088 -0.00365132 0.007499992 0.04669088 -0.00365132 -0.007499992 0.04712504 -0.003613352 0.007499992 0.04712504 -0.003613352 -0.007499992 0.04755914 -0.00365132 0.007499992 0.04755914 -0.00365132 -0.007499992 0.04798007 -0.003764092 0.007499992 0.04798007 -0.003764092 -0.007499992 0.04837501 -0.003948211 0.007499992 0.04837501 -0.003948211 -0.007499992 0.04873198 -0.004198193 0.007499992 0.04873198 -0.004198193 -0.007499992 0.04904013 -0.004506289 0.007499992 0.04904013 -0.004506289 -0.007499992 0.04929012 -0.004863262 0.007499992 0.04929012 -0.004863262 -0.007499992 0.04947429 -0.005258202 0.007499992 0.04947429 -0.005258202 -0.007499992 0.04958713 -0.00567913 0.007499992 0.017048 0.003838658 -0.004574596 0.01749753 0.003780364 -0.004257142 0.03017961 0.002135157 -0.00675714 0.03165674 0.001943528 0.007451713 0.03112661 0.002012312 0.007308483 7.71891e-4 0.005950093 0.01199996 0.03062915 0.002076864 0.007074594 0.03017961 0.002135157 0.00675714 0.02979153 0.002185523 -0.006365835 0.03112661 0.002012312 -0.007308483 7.71891e-4 0.005950093 -0.01199996 0.03062915 0.002076864 -0.007074594 0.03165674 0.001943528 -0.007451713 0.03220349 0.001872599 -0.007499992 0.04789698 -1.63224e-4 -0.01199996 0.04789698 -1.63224e-4 -0.007499992 0.03220349 0.001872599 0.007499992 0.04789698 -1.63224e-4 0.01199996 0.04789698 -1.63224e-4 0.007499992 7.71891e-4 0.005950093 -0.004999995 0.01547366 0.004042923 -0.004999995 0.01602041 0.003971993 -0.004951715 0.01655054 0.00390321 -0.004808485 7.71891e-4 0.005950093 0.004999995 0.01547366 0.004042923 0.004999995 0.01602041 0.003971993 0.004951715 0.02979153 0.002185523 0.006365835 0.0294767 0.002226352 0.005912482 0.01655054 0.00390321 0.004808485 0.01788568 0.003729999 -0.003865838 0.02924478 0.002256453 -0.005410909 0.0294767 0.002226352 -0.005912482 0.01843237 0.003659069 0.002910912 0.01820045 0.003689169 0.003412485 0.01788568 0.003729999 0.003865838 0.01749753 0.003780364 0.004257142 0.017048 0.003838658 0.004574596 0.01820045 0.003689169 -0.003412485 0.01843237 0.003659069 -0.002910912 0.02910268 0.00227487 -0.004876315 0.02905488 0.002281069 -0.004324972 0.01857447 0.003640651 -0.002376317 0.01862227 0.003634452 -0.001824975 0.02905488 0.002281069 0.004324972 0.02924478 0.002256453 0.005410909 0.02910268 0.00227487 0.004876315 0.01857447 0.003640651 0.002376317 0.01862227 0.003634452 0.001824975 0.04635322 -0.0120635 -0.007499992 0.04635322 -0.0120635 -0.01199996 0.04739814 -0.01210713 -0.01199996 0.04739814 -0.01210713 -0.007499992 0.04843485 -0.01196867 -0.01199996 0.04843485 -0.01196867 -0.007499992 0.04943168 -0.01165223 -0.01199996 0.04943168 -0.01165223 -0.007499992 0.05035847 -0.01116758 -0.01199996 0.05035847 -0.01116758 -0.007499992 0.05118703 -0.01052933 -0.01199996 0.05118703 -0.01052933 -0.007499992 0.0518921 -0.009756863 -0.01199996 0.0518921 -0.009756863 -0.007499992 0.05245238 -0.00887376 -0.01199996 0.05245238 -0.00887376 -0.007499992 0.05285078 -0.007906734 -0.01199996 0.05285078 -0.007906734 -0.007499992 0.05307525 -0.00688523 -0.01199996 0.05307525 -0.00688523 -0.007499992 0.05311888 -0.005840241 -0.01199996 0.05311888 -0.005840241 -0.007499992 0.05298042 -0.004803597 -0.01199996 0.05298042 -0.004803597 -0.007499992 0.05266404 -0.00380671 -0.01199996 0.05266404 -0.00380671 -0.007499992 0.05217933 -0.002879977 -0.01199996 0.05217933 -0.002879977 -0.007499992 0.05154109 -0.002051413 -0.01199996 0.05154109 -0.002051413 -0.007499992 0.05076867 -0.00134629 -0.01199996 0.05076867 -0.00134629 -0.007499992 0.04988551 -7.86059e-4 -0.01199996 0.04988551 -7.86059e-4 -0.007499992 0.04891848 -3.87657e-4 -0.01199996 0.04891848 -3.87657e-4 -0.007499992 -0.003510773 -0.004865586 -0.01199996 -7.71889e-4 -0.005950093 -0.01199996 -0.002662062 -0.005377113 -0.01199996 -0.001740694 -0.005741894 -0.01199996 -0.004263758 -0.004221379 -0.01199996 -0.004900395 -0.003462016 -0.01199996 -0.005403399 -0.00260818 -0.01199996 -0.005759 -0.001683235 -0.01199996 -0.005957543 -7.12406e-4 -0.01199996 -0.005993545 2.77894e-4 -0.01199996 -0.00586605 0.001260578 -0.01199996 -0.005578577 0.002208888 -0.01199996 -0.005138874 0.003096997 -0.01199996 -0.00455904 0.003900587 -0.01199996 -0.00385487 0.004597783 -0.01199996 -0.003045499 0.00516957 -0.01199996 -0.002153098 0.005600333 -0.01199996 -0.001201927 0.005878329 -0.01199996 -2.17998e-4 0.005995988 -0.01199996 -2.17998e-4 0.005995988 -0.004999995 -0.001201927 0.005878329 -0.004999995 -0.002153098 0.005600333 -0.004999995 -0.003045499 0.00516957 -0.004999995 -0.00385487 0.004597783 -0.004999995 -0.00455904 0.003900587 -0.004999995 -0.005138874 0.003096997 -0.004999995 -0.005578577 0.002208888 -0.004999995 -0.00586605 0.001260578 -0.004999995 -0.005993545 2.77894e-4 -0.004999995 -0.005957543 -7.12406e-4 -0.004999995 -0.005759 -0.001683235 -0.004999995 -0.005403399 -0.00260818 -0.004999995 -0.004900395 -0.003462016 -0.004999995 -0.004263758 -0.004221379 -0.004999995 -0.003510773 -0.004865586 -0.004999995 -0.002662062 -0.005377113 -0.004999995 -0.001740694 -0.005741894 -0.004999995 -7.71889e-4 -0.005950093 -0.004999995 0.0139299 -0.007857322 -0.004999995 0.01707851 -0.008265793 -0.001824975 0.01703065 -0.008259594 -0.002376317 0.01688861 -0.008241117 -0.002910912 0.01665669 -0.008211076 -0.003412485 0.01634186 -0.008170247 -0.003865838 0.01595377 -0.008119881 -0.004257142 0.01550418 -0.008061528 -0.004574596 0.01500678 -0.007997035 -0.004808485 0.01447665 -0.007928252 -0.004951715 0.01707851 -0.008265793 0.001824975 0.01703065 -0.008259594 0.002376317 0.01688861 -0.008241117 0.002910912 0.01665669 -0.008211076 0.003412485 0.01634186 -0.008170247 0.003865838 0.01595377 -0.008119881 0.004257142 0.01550418 -0.008061528 0.004574596 0.01500678 -0.007997035 0.004808485 0.01447665 -0.007928252 0.004951715 0.0139299 -0.007857322 0.004999995 -0.003510773 -0.004865586 0.004999995 -0.002662062 -0.005377113 0.004999995 -0.001740694 -0.005741894 0.004999995 -7.71889e-4 -0.005950093 0.004999995 -0.004263758 -0.004221379 0.004999995 -0.004900395 -0.003462016 0.004999995 -0.005403399 -0.00260818 0.004999995 -0.005759 -0.001683235 0.004999995 -0.005957543 -7.12406e-4 0.004999995 -0.005993545 2.77894e-4 0.004999995 -0.00586605 0.001260578 0.004999995 -0.005578577 0.002208888 0.004999995 -0.005138874 0.003096997 0.004999995 -0.00455904 0.003900587 0.004999995 -0.00385487 0.004597783 0.004999995 -0.003045499 0.00516957 0.004999995 -0.002153098 0.005600333 0.004999995 -0.001201927 0.005878329 0.004999995 -2.17998e-4 0.005995988 0.004999995 -2.17998e-4 0.005995988 0.01199996 -0.001201927 0.005878329 0.01199996 -0.002153098 0.005600333 0.01199996 -0.003045499 0.00516957 0.01199996 -0.00385487 0.004597783 0.01199996 -0.00455904 0.003900587 0.01199996 -0.005138874 0.003096997 0.01199996 -0.005578577 0.002208888 0.01199996 -0.00586605 0.001260578 0.01199996 -0.005993545 2.77894e-4 0.01199996 -0.005957543 -7.12406e-4 0.01199996 -0.005759 -0.001683235 0.01199996 -0.005403399 -0.00260818 0.01199996 -0.004900395 -0.003462016 0.01199996 -0.004263758 -0.004221379 0.01199996 -0.003510773 -0.004865586 0.01199996 -0.002662062 -0.005377113 0.01199996 -0.001740694 -0.005741894 0.01199996 -7.71889e-4 -0.005950093 0.01199996 0.04635322 -0.0120635 0.01199996 0.04739814 -0.01210713 0.01199996 0.04843485 -0.01196867 0.01199996 0.04943168 -0.01165223 0.01199996 0.05035847 -0.01116758 0.01199996 0.05118703 -0.01052933 0.01199996 0.0518921 -0.009756863 0.01199996 0.05245238 -0.00887376 0.01199996 0.05285078 -0.007906734 0.01199996 0.05307525 -0.00688523 0.01199996 0.05311888 -0.005840241 0.01199996 0.05298042 -0.004803597 0.01199996 0.05266404 -0.00380671 0.01199996 0.05217933 -0.002879977 0.01199996 0.05154109 -0.002051413 0.01199996 0.05076867 -0.00134629 0.01199996 0.04988551 -7.86059e-4 0.01199996 0.04891848 -3.87657e-4 0.01199996 0.04635322 -0.0120635 0.007499992 0.04739814 -0.01210713 0.007499992 0.04843485 -0.01196867 0.007499992 0.04943168 -0.01165223 0.007499992 0.05035847 -0.01116758 0.007499992 0.05118703 -0.01052933 0.007499992 0.0518921 -0.009756863 0.007499992 0.05245238 -0.00887376 0.007499992 0.05285078 -0.007906734 0.007499992 0.05307525 -0.00688523 0.007499992 0.05311888 -0.005840241 0.007499992 0.05298042 -0.004803597 0.007499992 0.05266404 -0.00380671 0.007499992 0.05217933 -0.002879977 0.007499992 0.05154109 -0.002051413 0.007499992 0.05076867 -0.00134629 0.007499992 0.04988551 -7.86059e-4 0.007499992 0.04891848 -3.87657e-4 0.007499992 0.03065973 -0.01002764 0.007499992 0.02751111 -0.009619176 0.004324972 0.02755892 -0.009625375 0.004876315 0.02770096 -0.009643793 0.005410909 0.02793294 -0.009673893 0.005912482 0.02824771 -0.009714722 0.006365835 0.02863579 -0.009765088 0.00675714 0.02908539 -0.009823381 0.007074594 0.02958279 -0.009887933 0.007308483 0.03011298 -0.009956717 0.007451713 0.02751111 -0.009619176 -0.004324972 0.02755892 -0.009625375 -0.004876315 0.02770096 -0.009643793 -0.005410909 0.02793294 -0.009673893 -0.005912482 0.02824771 -0.009714722 -0.006365835 0.02863579 -0.009765088 -0.00675714 0.02908539 -0.009823381 -0.007074594 0.02958279 -0.009887933 -0.007308483 0.03011298 -0.009956717 -0.007451713 0.03065973 -0.01002764 -0.007499992 + + + + + + + + + + 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0.08713161 0.9961967 0 -0.08719146 0.9961915 0 -0.08719146 0.9961915 0 -0.2588449 0.965919 0 -0.2588449 0.965919 0 -0.4226454 0.9062952 0 -0.4226454 0.9062952 0 -0.573601 0.8191349 0 -0.573601 0.8191349 0 -0.7071236 0.7070899 0 -0.7071236 0.7070899 0 -0.819172 0.5735481 0 -0.819172 0.5735481 0 -0.9063205 0.422591 0 -0.9063205 0.422591 0 -0.9659344 0.2587872 0 -0.9659344 0.2587872 0 -0.9961976 0.08712309 0 -0.9961976 0.08712309 0 -0.9961923 -0.08718293 0 -0.9961923 -0.08718293 0 -0.9659183 -0.2588469 0 -0.9659183 -0.2588469 0 -0.9062982 -0.4226388 0 -0.9062982 -0.4226388 0 -0.8191319 -0.5736052 0 -0.8191319 -0.5736052 0 -0.7070814 -0.7071321 0 -0.7070814 -0.7071321 0 -0.5735521 -0.8191691 0 -0.5735521 -0.8191691 0 -0.422598 -0.9063172 0 -0.422598 -0.9063172 0 -0.2587872 -0.9659344 0 -0.2587872 -0.9659344 0 -0.08713161 -0.9961967 0 -0.08713161 -0.9961967 0 0.08719146 -0.9961915 0 0.08719146 -0.9961915 0 0.2588449 -0.965919 0 0.2588449 -0.965919 0 0.4226524 -0.9062919 0 0.4226524 -0.9062919 0 0.5735971 -0.8191375 0 0.5735971 -0.8191375 0 0.7071279 -0.7070857 0 0.7071279 -0.7070857 0 0.8191664 -0.5735559 0 0.8191664 -0.5735559 0 0.9063236 -0.4225845 0 0.9063236 -0.4225845 0 0.9659338 -0.2587893 0 0.9659338 -0.2587893 0 0.9961967 -0.08713161 0 0.9961967 -0.08713161 0 0.9961915 0.08719146 0 0.9961915 0.08719146 0 0.965919 0.2588449 0 0.965919 0.2588449 0 0.9062952 0.4226454 0 0.9062952 0.4226454 0 0.8191376 0.573597 0 0.8191376 0.573597 0 0.7070857 0.7071279 0 0.7070857 0.7071279 0 0.5735478 0.8191721 0 0.5735478 0.8191721 0 0.422591 0.9063205 0 0.422591 0.9063205 0 0.2587871 0.9659344 0 0.2587871 0.9659344 0 0.08713161 0.9961967 0 0.9961928 0.08717793 0 0.9961971 -0.08712816 0 0.9961971 -0.08712816 0 0.9659363 -0.2587801 0 0.9659363 -0.2587801 0 0.9063199 -0.4225922 0 0.9063199 -0.4225922 0 0.8191629 -0.573561 0 0.8191629 -0.573561 0 0.7071388 -0.7070747 0 0.7071388 -0.7070747 0 0.5735977 -0.8191371 0 0.5735977 -0.8191371 0 0.4226356 -0.9062998 0 0.4226356 -0.9062998 0 0.2588482 -0.9659181 0 0.2588482 -0.9659181 0 0.08719122 -0.9961916 0 0.08719122 -0.9961916 0 -0.08713108 -0.9961969 0 -0.08713108 -0.9961969 0 -0.2587901 -0.9659336 0 -0.2587901 -0.9659336 0 -0.4225819 -0.9063249 0 -0.4225819 -0.9063249 0 -0.5735527 -0.8191686 0 -0.5735527 -0.8191686 0 -0.7070913 -0.7071223 0 -0.7070913 -0.7071223 0 -0.8191315 -0.5736057 0 -0.8191315 -0.5736057 0 -0.9062957 -0.4226442 0 -0.9062957 -0.4226442 0 -0.9659183 -0.2588477 0 -0.9659183 -0.2588477 0 -0.9961919 -0.08718788 0 -0.9961919 -0.08718788 0 -0.9961972 0.08712667 0 -0.9961972 0.08712667 0 -0.965933 0.2587924 0 -0.965933 0.2587924 0 -0.9063199 0.4225922 0 -0.9063199 0.4225922 0 -0.8191725 0.5735473 0 -0.8191725 0.5735473 0 -0.707126 0.7070875 0 -0.707126 0.7070875 0 -0.573601 0.8191348 0 -0.573601 0.8191348 0 -0.4226509 0.9062926 0 -0.4226509 0.9062926 0 -0.258845 0.9659189 0 -0.258845 0.9659189 0 -0.08719122 0.9961916 0 -0.08719122 0.9961916 0 0.08713179 0.9961967 0 0.08713179 0.9961967 0 0.2587869 0.9659344 0 0.2587869 0.9659344 0 0.4225963 0.906318 0 0.4225963 0.906318 0 0.573552 0.8191692 0 0.573552 0.8191692 0 0.7070834 0.7071303 0 0.7070834 0.7071303 0 0.8191412 0.573592 0 0.8191412 0.573592 0 0.9062925 0.4226512 0 0.9062925 0.4226512 0 0.965917 0.2588519 0 0.965917 0.2588519 0 0.9961928 0.08717793 0 0.08713161 0.9961967 0 -0.08719146 0.9961915 0 -0.08719146 0.9961915 0 -0.2588449 0.965919 0 -0.2588449 0.965919 0 -0.4226454 0.9062952 0 -0.4226454 0.9062952 0 -0.573601 0.8191349 0 -0.573601 0.8191349 0 -0.7071236 0.7070899 0 -0.7071236 0.7070899 0 -0.819172 0.5735481 0 -0.819172 0.5735481 0 -0.9063205 0.422591 0 -0.9063205 0.422591 0 -0.9659344 0.2587872 0 -0.9659344 0.2587872 0 -0.9961976 0.08712309 0 -0.9961976 0.08712309 0 -0.9961923 -0.08718293 0 -0.9961923 -0.08718293 0 -0.9659183 -0.2588469 0 -0.9659183 -0.2588469 0 -0.9062982 -0.4226388 0 -0.9062982 -0.4226388 0 -0.8191319 -0.5736052 0 -0.8191319 -0.5736052 0 -0.7070814 -0.7071321 0 -0.7070814 -0.7071321 0 -0.5735521 -0.8191691 0 -0.5735521 -0.8191691 0 -0.422598 -0.9063172 0 -0.422598 -0.9063172 0 -0.2587872 -0.9659344 0 -0.2587872 -0.9659344 0 -0.08713161 -0.9961967 0 -0.08713161 -0.9961967 0 0.08719146 -0.9961915 0 0.08719146 -0.9961915 0 0.2588449 -0.965919 0 0.2588449 -0.965919 0 0.4226524 -0.9062919 0 0.4226524 -0.9062919 0 0.5735971 -0.8191375 0 0.5735971 -0.8191375 0 0.7071279 -0.7070857 0 0.7071279 -0.7070857 0 0.8191664 -0.5735559 0 0.8191664 -0.5735559 0 0.9063236 -0.4225845 0 0.9063236 -0.4225845 0 0.9659338 -0.2587893 0 0.9659338 -0.2587893 0 0.9961967 -0.08713161 0 0.9961967 -0.08713161 0 0.9961915 0.08719146 0 0.9961915 0.08719146 0 0.965919 0.2588449 0 0.965919 0.2588449 0 0.9062952 0.4226454 0 0.9062952 0.4226454 0 0.8191376 0.573597 0 0.8191376 0.573597 0 0.7070857 0.7071279 0 0.7070857 0.7071279 0 0.5735478 0.8191721 0 0.5735478 0.8191721 0 0.422591 0.9063205 0 0.422591 0.9063205 0 0.2587871 0.9659344 0 0.2587871 0.9659344 0 0.08713161 0.9961967 0 0.9961928 0.08717793 0 0.9961971 -0.08712816 0 0.9961971 -0.08712816 0 0.9659363 -0.2587801 0 0.9659363 -0.2587801 0 0.9063199 -0.4225922 0 0.9063199 -0.4225922 0 0.8191629 -0.573561 0 0.8191629 -0.573561 0 0.7071388 -0.7070747 0 0.7071388 -0.7070747 0 0.5735977 -0.8191371 0 0.5735977 -0.8191371 0 0.4226356 -0.9062998 0 0.4226356 -0.9062998 0 0.2588482 -0.9659181 0 0.2588482 -0.9659181 0 0.08719122 -0.9961916 0 0.08719122 -0.9961916 0 -0.08713108 -0.9961969 0 -0.08713108 -0.9961969 0 -0.2587901 -0.9659336 0 -0.2587901 -0.9659336 0 -0.4225819 -0.9063249 0 -0.4225819 -0.9063249 0 -0.5735527 -0.8191686 0 -0.5735527 -0.8191686 0 -0.7070913 -0.7071223 0 -0.7070913 -0.7071223 0 -0.8191315 -0.5736057 0 -0.8191315 -0.5736057 0 -0.9062957 -0.4226442 0 -0.9062957 -0.4226442 0 -0.9659183 -0.2588477 0 -0.9659183 -0.2588477 0 -0.9961919 -0.08718788 0 -0.9961919 -0.08718788 0 -0.9961972 0.08712667 0 -0.9961972 0.08712667 0 -0.965933 0.2587924 0 -0.965933 0.2587924 0 -0.9063199 0.4225922 0 -0.9063199 0.4225922 0 -0.8191725 0.5735473 0 -0.8191725 0.5735473 0 -0.707126 0.7070875 0 -0.707126 0.7070875 0 -0.573601 0.8191348 0 -0.573601 0.8191348 0 -0.4226509 0.9062926 0 -0.4226509 0.9062926 0 -0.258845 0.9659189 0 -0.258845 0.9659189 0 -0.08719122 0.9961916 0 -0.08719122 0.9961916 0 0.08713179 0.9961967 0 0.08713179 0.9961967 0 0.2587869 0.9659344 0 0.2587869 0.9659344 0 0.4225963 0.906318 0 0.4225963 0.906318 0 0.573552 0.8191692 0 0.573552 0.8191692 0 0.7070834 0.7071303 0 0.7070834 0.7071303 0 0.8191412 0.573592 0 0.8191412 0.573592 0 0.9062925 0.4226512 0 0.9062925 0.4226512 0 0.965917 0.2588519 0 0.965917 0.2588519 0 0.9961928 0.08717793 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.08712095 0.9961978 0 -0.08718049 0.9961925 0 -0.08718049 0.9961925 0 -0.2588459 0.9659186 0 -0.2588459 0.9659186 0 -0.42265 0.906293 0 -0.42265 0.906293 0 -0.5735961 0.8191383 0 -0.5735961 0.8191383 0 -0.7071324 0.7070812 0 -0.7071324 0.7070812 0 -0.8191698 0.5735512 0 -0.8191698 0.5735512 0 -0.90632 0.4225921 0 -0.90632 0.4225921 0 -0.9659342 0.258788 0 -0.9659342 0.258788 0 -0.9961969 0.08713036 0 -0.9961969 0.08713036 0 -0.9961916 -0.08719068 0 -0.9961916 -0.08719068 0 -0.9659192 -0.2588436 0 -0.9659192 -0.2588436 0 -0.9062946 -0.4226465 0 -0.9062946 -0.4226465 0 -0.8191353 -0.5736002 0 -0.8191353 -0.5736002 0 -0.70709 -0.7071236 0 -0.70709 -0.7071236 0 -0.5735473 -0.8191724 0 -0.5735473 -0.8191724 0 -0.4225954 -0.9063185 0 -0.4225954 -0.9063185 0 -0.2587797 -0.9659364 0 -0.2587797 -0.9659364 0 -0.08713036 -0.9961969 0 -0.08713036 -0.9961969 0 0.08718991 -0.9961917 0 0.08718991 -0.9961917 0 0.2588375 -0.9659209 0 0.2588375 -0.9659209 0 0.4226466 -0.9062946 0 0.4226466 -0.9062946 0 0.5736003 -0.8191353 0 0.5736003 -0.8191353 0 0.7071281 -0.7070855 0 0.7071281 -0.7070855 0 0.8191695 -0.5735515 0 0.8191695 -0.5735515 0 0.90632 -0.4225921 0 0.90632 -0.4225921 0 0.9659347 -0.2587858 0 0.9659347 -0.2587858 0 0.9961977 -0.08712172 0 0.9961977 -0.08712172 0 0.9961925 0.08718049 0 0.9961925 0.08718049 0 0.9659186 0.2588459 0 0.9659186 0.2588459 0 0.9062946 0.4226466 0 0.9062946 0.4226466 0 0.8191352 0.5736005 0 0.8191352 0.5736005 0 0.7070857 0.707128 0 0.7070857 0.707128 0 0.5735515 0.8191695 0 0.5735515 0.8191695 0 0.422592 0.90632 0 0.422592 0.90632 0 0.258788 0.9659341 0 0.258788 0.9659341 0 0.08712095 0.9961978 0 0.996192 0.08718657 0 0.9961974 -0.08712428 0 0.9961974 -0.08712428 0 0.965933 -0.2587923 0 0.965933 -0.2587923 0 0.9063199 -0.4225922 0 0.9063199 -0.4225922 0 0.8191705 -0.5735502 0 0.8191705 -0.5735502 0 0.7071263 -0.7070873 0 0.7071263 -0.7070873 0 0.5736007 -0.8191351 0 0.5736007 -0.8191351 0 0.4226481 -0.906294 0 0.4226481 -0.906294 0 0.2588379 -0.9659209 0 0.2588379 -0.9659209 0 0.0871908 -0.9961916 0 0.0871908 -0.9961916 0 -0.08713114 -0.9961968 0 -0.08713114 -0.9961968 0 -0.2587794 -0.9659364 0 -0.2587794 -0.9659364 0 -0.4225939 -0.9063192 0 -0.4225939 -0.9063192 0 -0.5735511 -0.8191698 0 -0.5735511 -0.8191698 0 -0.7070867 -0.7071268 0 -0.7070867 -0.7071268 0 -0.8191344 -0.5736017 0 -0.8191344 -0.5736017 0 -0.9062947 -0.4226464 0 -0.9062947 -0.4226464 0 -0.9659186 -0.2588461 0 -0.9659186 -0.2588461 0 -0.996192 -0.08718657 0 -0.996192 -0.08718657 0 -0.9961974 0.08712428 0 -0.9961974 0.08712428 0 -0.9659342 0.2587878 0 -0.9659342 0.2587878 0 -0.9063233 0.4225849 0 -0.9063233 0.4225849 0 -0.8191663 0.5735561 0 -0.8191663 0.5735561 0 -0.7071218 0.7070918 0 -0.7071218 0.7070918 0 -0.5736085 0.8191297 0 -0.5736085 0.8191297 0 -0.4226339 0.9063006 0 -0.4226339 0.9063006 0 -0.2588545 0.9659163 0 -0.2588545 0.9659163 0 -0.08719044 0.9961917 0 -0.08719044 0.9961917 0 0.08712929 0.9961971 0 0.08712929 0.9961971 0 0.2587983 0.9659314 0 0.2587983 0.9659314 0 0.4225755 0.9063278 0 0.4225755 0.9063278 0 0.573563 0.8191614 0 0.573563 0.8191614 0 0.7070784 0.7071352 0 0.7070784 0.7071352 0 0.8191344 0.5736017 0 0.8191344 0.5736017 0 0.9062947 0.4226464 0 0.9062947 0.4226464 0 0.9659197 0.2588416 0 0.9659197 0.2588416 0 0.996192 0.08718657 0 0.08712095 0.9961978 0 -0.08718049 0.9961925 0 -0.08718049 0.9961925 0 -0.2588459 0.9659186 0 -0.2588459 0.9659186 0 -0.42265 0.906293 0 -0.42265 0.906293 0 -0.5735961 0.8191383 0 -0.5735961 0.8191383 0 -0.7071324 0.7070812 0 -0.7071324 0.7070812 0 -0.8191698 0.5735512 0 -0.8191698 0.5735512 0 -0.90632 0.4225921 0 -0.90632 0.4225921 0 -0.9659342 0.258788 0 -0.9659342 0.258788 0 -0.9961969 0.08713036 0 -0.9961969 0.08713036 0 -0.9961916 -0.08719068 0 -0.9961916 -0.08719068 0 -0.9659192 -0.2588436 0 -0.9659192 -0.2588436 0 -0.9062946 -0.4226465 0 -0.9062946 -0.4226465 0 -0.8191353 -0.5736002 0 -0.8191353 -0.5736002 0 -0.70709 -0.7071236 0 -0.70709 -0.7071236 0 -0.5735473 -0.8191724 0 -0.5735473 -0.8191724 0 -0.4225954 -0.9063185 0 -0.4225954 -0.9063185 0 -0.2587797 -0.9659364 0 -0.2587797 -0.9659364 0 -0.08713036 -0.9961969 0 -0.08713036 -0.9961969 0 0.08718991 -0.9961917 0 0.08718991 -0.9961917 0 0.2588375 -0.9659209 0 0.2588375 -0.9659209 0 0.4226466 -0.9062946 0 0.4226466 -0.9062946 0 0.5736003 -0.8191353 0 0.5736003 -0.8191353 0 0.7071281 -0.7070855 0 0.7071281 -0.7070855 0 0.8191695 -0.5735515 0 0.8191695 -0.5735515 0 0.90632 -0.4225921 0 0.90632 -0.4225921 0 0.9659347 -0.2587858 0 0.9659347 -0.2587858 0 0.9961977 -0.08712172 0 0.9961977 -0.08712172 0 0.9961925 0.08718049 0 0.9961925 0.08718049 0 0.9659186 0.2588459 0 0.9659186 0.2588459 0 0.9062946 0.4226466 0 0.9062946 0.4226466 0 0.8191352 0.5736005 0 0.8191352 0.5736005 0 0.7070857 0.707128 0 0.7070857 0.707128 0 0.5735515 0.8191695 0 0.5735515 0.8191695 0 0.422592 0.90632 0 0.422592 0.90632 0 0.258788 0.9659341 0 0.258788 0.9659341 0 0.08712095 0.9961978 0 0.996192 0.08718657 0 0.9961974 -0.08712428 0 0.9961974 -0.08712428 0 0.965933 -0.2587923 0 0.965933 -0.2587923 0 0.9063199 -0.4225922 0 0.9063199 -0.4225922 0 0.8191705 -0.5735502 0 0.8191705 -0.5735502 0 0.7071263 -0.7070873 0 0.7071263 -0.7070873 0 0.5736007 -0.8191351 0 0.5736007 -0.8191351 0 0.4226481 -0.906294 0 0.4226481 -0.906294 0 0.2588379 -0.9659209 0 0.2588379 -0.9659209 0 0.0871908 -0.9961916 0 0.0871908 -0.9961916 0 -0.08713114 -0.9961968 0 -0.08713114 -0.9961968 0 -0.2587794 -0.9659364 0 -0.2587794 -0.9659364 0 -0.4225939 -0.9063192 0 -0.4225939 -0.9063192 0 -0.5735511 -0.8191698 0 -0.5735511 -0.8191698 0 -0.7070867 -0.7071268 0 -0.7070867 -0.7071268 0 -0.8191344 -0.5736017 0 -0.8191344 -0.5736017 0 -0.9062947 -0.4226464 0 -0.9062947 -0.4226464 0 -0.9659186 -0.2588461 0 -0.9659186 -0.2588461 0 -0.996192 -0.08718657 0 -0.996192 -0.08718657 0 -0.9961974 0.08712428 0 -0.9961974 0.08712428 0 -0.9659342 0.2587878 0 -0.9659342 0.2587878 0 -0.9063233 0.4225849 0 -0.9063233 0.4225849 0 -0.8191663 0.5735561 0 -0.8191663 0.5735561 0 -0.7071218 0.7070918 0 -0.7071218 0.7070918 0 -0.5736085 0.8191297 0 -0.5736085 0.8191297 0 -0.4226339 0.9063006 0 -0.4226339 0.9063006 0 -0.2588545 0.9659163 0 -0.2588545 0.9659163 0 -0.08719044 0.9961917 0 -0.08719044 0.9961917 0 0.08712929 0.9961971 0 0.08712929 0.9961971 0 0.2587983 0.9659314 0 0.2587983 0.9659314 0 0.4225755 0.9063278 0 0.4225755 0.9063278 0 0.573563 0.8191614 0 0.573563 0.8191614 0 0.7070784 0.7071352 0 0.7070784 0.7071352 0 0.8191344 0.5736017 0 0.8191344 0.5736017 0 0.9062947 0.4226464 0 0.9062947 0.4226464 0 0.9659197 0.2588416 0 0.9659197 0.2588416 0 0.996192 0.08718657 0 0.08713161 0.9961968 0 -0.08719146 0.9961916 0 -0.08719146 0.9961916 0 -0.2588449 0.9659189 0 -0.2588449 0.9659189 0 -0.4226454 0.9062951 0 -0.4226454 0.9062951 0 -0.573601 0.8191348 0 -0.573601 0.8191348 0 -0.7071236 0.7070899 0 -0.7071236 0.7070899 0 -0.819172 0.573548 0 -0.819172 0.573548 0 -0.9063206 0.422591 0 -0.9063206 0.422591 0 -0.9659343 0.2587871 0 -0.9659343 0.2587871 0 -0.9961976 0.08712315 0 -0.9961976 0.08712315 0 -0.9961922 -0.08718293 0 -0.9961922 -0.08718293 0 -0.9659183 -0.2588469 0 -0.9659183 -0.2588469 0 -0.9062982 -0.4226388 0 -0.9062982 -0.4226388 0 -0.8191319 -0.5736052 0 -0.8191319 -0.5736052 0 -0.7070814 -0.7071321 0 -0.7070814 -0.7071321 0 -0.573552 -0.8191691 0 -0.573552 -0.8191691 0 -0.4225981 -0.9063172 0 -0.4225981 -0.9063172 0 -0.2587871 -0.9659343 0 -0.2587871 -0.9659343 0 -0.08713161 -0.9961968 0 -0.08713161 -0.9961968 0 0.08719146 -0.9961916 0 0.08719146 -0.9961916 0 0.2588449 -0.9659189 0 0.2588449 -0.9659189 0 0.4226524 -0.9062919 0 0.4226524 -0.9062919 0 0.5735971 -0.8191376 0 0.5735971 -0.8191376 0 0.7071279 -0.7070857 0 0.7071279 -0.7070857 0 0.8191665 -0.5735559 0 0.8191665 -0.5735559 0 0.9063236 -0.4225845 0 0.9063236 -0.4225845 0 0.9659337 -0.2587893 0 0.9659337 -0.2587893 0 0.9961968 -0.08713161 0 0.9961968 -0.08713161 0 0.9961916 0.08719146 0 0.9961916 0.08719146 0 0.9659189 0.2588449 0 0.9659189 0.2588449 0 0.9062951 0.4226454 0 0.9062951 0.4226454 0 0.8191376 0.573597 0 0.8191376 0.573597 0 0.7070857 0.7071279 0 0.7070857 0.7071279 0 0.5735478 0.8191721 0 0.5735478 0.8191721 0 0.422591 0.9063206 0 0.422591 0.9063206 0 0.2587871 0.9659343 0 0.2587871 0.9659343 0 0.08713161 0.9961968 0 0.9961928 0.08717793 0 0.9961972 -0.08712816 0 0.9961972 -0.08712816 0 0.9659363 -0.2587801 0 0.9659363 -0.2587801 0 0.9063199 -0.4225922 0 0.9063199 -0.4225922 0 0.8191628 -0.573561 0 0.8191628 -0.573561 0 0.7071388 -0.7070747 0 0.7071388 -0.7070747 0 0.5735977 -0.8191372 0 0.5735977 -0.8191372 0 0.4226355 -0.9062997 0 0.4226355 -0.9062997 0 0.2588482 -0.965918 0 0.2588482 -0.965918 0 0.08719122 -0.9961916 0 0.08719122 -0.9961916 0 -0.08713108 -0.9961969 0 -0.08713108 -0.9961969 0 -0.2587901 -0.9659336 0 -0.2587901 -0.9659336 0 -0.4225818 -0.9063248 0 -0.4225818 -0.9063248 0 -0.5735527 -0.8191687 0 -0.5735527 -0.8191687 0 -0.7070913 -0.7071223 0 -0.7070913 -0.7071223 0 -0.8191315 -0.5736058 0 -0.8191315 -0.5736058 0 -0.9062957 -0.4226442 0 -0.9062957 -0.4226442 0 -0.9659181 -0.2588476 0 -0.9659181 -0.2588476 0 -0.9961919 -0.08718788 0 -0.9961919 -0.08718788 0 -0.9961972 0.08712667 0 -0.9961972 0.08712667 0 -0.9659329 0.2587923 0 -0.9659329 0.2587923 0 -0.9063199 0.4225922 0 -0.9063199 0.4225922 0 -0.8191725 0.5735472 0 -0.8191725 0.5735472 0 -0.707126 0.7070875 0 -0.707126 0.7070875 0 -0.5736011 0.8191349 0 -0.5736011 0.8191349 0 -0.4226509 0.9062926 0 -0.4226509 0.9062926 0 -0.258845 0.9659189 0 -0.258845 0.9659189 0 -0.08719122 0.9961916 0 -0.08719122 0.9961916 0 0.08713185 0.9961969 0 0.08713185 0.9961969 0 0.2587869 0.9659345 0 0.2587869 0.9659345 0 0.4225963 0.906318 0 0.4225963 0.906318 0 0.573552 0.8191692 0 0.573552 0.8191692 0 0.7070833 0.7071302 0 0.7070833 0.7071302 0 0.8191412 0.573592 0 0.8191412 0.573592 0 0.9062924 0.4226512 0 0.9062924 0.4226512 0 0.9659171 0.2588519 0 0.9659171 0.2588519 0 0.9961928 0.08717793 0 0.1286489 0.9916902 4.79452e-6 0.1286473 0.9916905 -6.03696e-6 0.1286489 0.9916902 4.3025e-6 0.1286491 0.9916902 5.24549e-6 0.1286491 0.9916902 5.8732e-6 0.1286491 0.9916902 -4.58934e-6 0.1286492 0.9916901 -5.55405e-6 0.1286473 0.9916905 6.06995e-6 0.1286479 0.9916903 1.98465e-6 0.1286482 0.9916903 -1.36101e-7 0.1286483 0.9916903 0 0.1286478 0.9916903 0 0.1286482 0.9916903 0 0.1286483 0.9916903 0 0.1286482 0.9916903 0 0.1286482 0.9916903 0 0.1286481 0.9916903 1.70007e-7 0.1286473 0.9916904 -6.60902e-6 0.1286488 0.9916902 4.50205e-6 0.1286482 0.9916903 0 0.1286484 0.9916902 0 0.1286474 0.9916905 -4.36214e-6 0.1286482 0.9916903 0 0.1286482 0.9916902 0 0.1286478 0.9916904 8.14287e-6 0.1286476 0.9916904 -5.36346e-6 0.1286482 0.9916903 6.06343e-7 0.1286481 0.9916903 0 0.1286481 0.9916904 1.00342e-6 0.1286485 0.9916903 -1.25182e-6 0.1286475 0.9916905 5.0128e-6 0.1286488 0.9916903 -4.94673e-6 0.1286488 0.9916902 -4.68645e-6 0.1286485 0.9916903 1.26524e-6 0.1286481 0.9916903 -1.03761e-6 0.1286479 0.9916904 -2.16134e-6 0.1286484 0.9916903 9.34832e-7 0.1286485 0.9916902 1.88401e-6 0.128648 0.9916903 -8.1848e-7 0.1286482 0.9916903 0 0.1286485 0.9916902 -7.44871e-7 0.1286478 0.9916903 2.06263e-6 0.1286486 0.9916902 -1.8089e-6 0.1286484 0.9916902 -8.45321e-7 0.1286481 0.9916904 7.68075e-7 0.1286482 0.9916903 0 -0.0417295 -0.9991289 0 -0.0417295 -0.9991289 0 0.1324039 -0.9911959 0 0.1324039 -0.9911959 0 0.3025129 -0.9531453 0 0.3025129 -0.9531453 0 0.463426 -0.8861356 0 0.463426 -0.8861356 0 0.6102631 -0.7921988 0 0.6102631 -0.7921988 0 0.738557 -0.674191 0 0.738557 -0.674191 0 0.8444064 -0.5357031 0 0.8444064 -0.5357031 0 0.9246032 -0.3809316 0 0.9246032 -0.3809316 0 0.9767041 -0.2145909 0 0.9767041 -0.2145909 0 0.9991291 -0.04172766 0 0.9991291 -0.04172766 0 0.9911954 0.1324066 0 0.9911954 0.1324066 0 0.9531462 0.3025102 0 0.9531462 0.3025102 0 0.8861335 0.4634301 0 0.8861335 0.4634301 0 0.7921999 0.6102616 0 0.7921999 0.6102616 0 0.6741917 0.7385563 0 0.6741917 0.7385563 0 0.5357055 0.8444049 0 0.5357055 0.8444049 0 0.3809293 0.9246042 0 0.3809293 0.9246042 0 0.2145901 0.9767042 0 0.2145901 0.9767042 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.04631507 0.9989269 0 0.04631507 0.9989269 0 -0.1187338 0.9929261 0 -0.1187338 0.9929261 0 -0.2805436 0.9598413 0 -0.2805436 0.9598413 0 -0.4347038 0.9005734 0 -0.4347038 0.9005734 0 -0.5770034 0.8167418 0 -0.5770034 0.8167418 0 -0.7035666 0.7106292 0 -0.7035666 0.7106292 0 -0.8109354 0.5851357 0 -0.8109354 0.5851357 0 -0.8961854 0.4436798 0 -0.8961854 0.4436798 0 -0.95699 0.2901212 0 -0.95699 0.2901212 0 -0.9916904 0.1286472 0 -0.9916904 0.1286472 0 -0.9993398 -0.03633308 0 -0.9993398 -0.03633308 0 -0.9797294 -0.2003254 0 -0.9797294 -0.2003254 0 -0.9333953 -0.3588498 0 -0.9333953 -0.3588498 0 -0.861602 -0.5075845 0 -0.861602 -0.5075845 0 -0.7663012 -0.6424815 0 -0.7663012 -0.6424815 0 -0.6501032 -0.7598459 0 -0.6501032 -0.7598459 0 -0.5161715 -0.8564853 0 -0.5161715 -0.8564853 0 -0.3681584 -0.9297631 0 -0.3681584 -0.9297631 0 -0.2101007 -0.9776797 0 -0.2101007 -0.9776797 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -0.9879167 0.1281585 0.08715569 -0.9879166 0.1281585 0.08715569 -0.9578998 0.1242645 0.2588171 -0.9578981 0.1242647 0.2588235 -0.8987756 0.1165949 0.4226205 -0.8987785 0.116595 0.4226143 -0.8123465 0.1053825 0.5735746 -0.8123429 0.1053823 0.5735796 -0.7012302 0.09096807 0.7071076 -0.7012322 0.09096819 0.7071055 -0.5688108 0.07378965 0.8191515 -0.5688102 0.07378959 0.8191521 -0.4191064 0.05436909 0.9063078 -0.4191064 0.05436909 0.9063078 -0.2566687 0.03329664 0.9659257 -0.2566682 0.03329658 0.9659259 -0.08643072 0.01121234 0.9961948 -0.0864309 0.01121234 0.9961947 -0.9916903 0.1286481 0 -0.9916903 0.1286481 0 -0.9879167 0.1281585 -0.08715558 -0.9879166 0.1281585 -0.08715599 -0.9578981 0.1242644 -0.2588235 -0.9578998 0.1242649 -0.2588171 -0.8987784 0.1165953 -0.4226143 -0.8987756 0.1165946 -0.4226206 -0.812343 0.105382 -0.5735796 -0.8123465 0.1053828 -0.5735746 -0.7012322 0.09096831 -0.7071056 -0.7012302 0.09096795 -0.7071076 -0.5688101 0.07378953 -0.8191521 -0.5688108 0.07378971 -0.8191516 -0.4191064 0.05436909 -0.9063078 -0.4191064 0.05436909 -0.9063078 -0.256668 0.03329658 -0.9659259 -0.2566687 0.0332967 -0.9659258 -0.0864309 0.01121234 -0.9961947 -0.08643078 0.01121234 -0.9961948 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.04631507 0.9989269 0 0.04631507 0.9989269 0 -0.1187338 0.9929261 0 -0.1187338 0.9929261 0 -0.2805436 0.9598413 0 -0.2805436 0.9598413 0 -0.4347038 0.9005734 0 -0.4347038 0.9005734 0 -0.5770034 0.8167418 0 -0.5770034 0.8167418 0 -0.7035666 0.7106292 0 -0.7035666 0.7106292 0 -0.8109354 0.5851357 0 -0.8109354 0.5851357 0 -0.8961854 0.4436798 0 -0.8961854 0.4436798 0 -0.95699 0.2901212 0 -0.95699 0.2901212 0 -0.9916904 0.1286472 0 -0.9916904 0.1286472 0 -0.9993398 -0.03633308 0 -0.9993398 -0.03633308 0 -0.9797294 -0.2003254 0 -0.9797294 -0.2003254 0 -0.9333953 -0.3588498 0 -0.9333953 -0.3588498 0 -0.861602 -0.5075845 0 -0.861602 -0.5075845 0 -0.7663012 -0.6424815 0 -0.7663012 -0.6424815 0 -0.6501032 -0.7598459 0 -0.6501032 -0.7598459 0 -0.5161715 -0.8564853 0 -0.5161715 -0.8564853 0 -0.3681584 -0.9297631 0 -0.3681584 -0.9297631 0 -0.2101007 -0.9776797 0 -0.2101007 -0.9776797 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -0.0417295 -0.9991289 0 -0.0417295 -0.9991289 0 0.1324039 -0.9911959 0 0.1324039 -0.9911959 0 0.3025129 -0.9531453 0 0.3025129 -0.9531453 0 0.463426 -0.8861356 0 0.463426 -0.8861356 0 0.6102631 -0.7921988 0 0.6102631 -0.7921988 0 0.738557 -0.674191 0 0.738557 -0.674191 0 0.8444064 -0.5357031 0 0.8444064 -0.5357031 0 0.9246032 -0.3809316 0 0.9246032 -0.3809316 0 0.9767041 -0.2145909 0 0.9767041 -0.2145909 0 0.9991291 -0.04172766 0 0.9991291 -0.04172766 0 0.9911954 0.1324066 0 0.9911954 0.1324066 0 0.9531462 0.3025102 0 0.9531462 0.3025102 0 0.8861335 0.4634301 0 0.8861335 0.4634301 0 0.7921999 0.6102616 0 0.7921999 0.6102616 0 0.6741917 0.7385563 0 0.6741917 0.7385563 0 0.5357055 0.8444049 0 0.5357055 0.8444049 0 0.3809293 0.9246042 0 0.3809293 0.9246042 0 0.2145901 0.9767042 0 0.2145901 0.9767042 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.9879167 -0.1281586 -0.08715569 0.9879167 -0.1281586 -0.08715569 0.9578997 -0.1242647 -0.2588171 0.9578997 -0.1242647 -0.2588172 0.8987768 -0.1165949 -0.4226179 0.8987759 -0.1165947 -0.4226198 0.8123434 -0.1053821 -0.5735791 0.8123461 -0.1053827 -0.573575 0.7012318 -0.09096825 -0.7071059 0.7012305 -0.09096801 -0.7071071 0.5688108 -0.07378965 -0.8191516 0.5688108 -0.07378965 -0.8191516 0.4191064 -0.05436909 -0.9063078 0.4191053 -0.05436885 -0.9063084 0.2566687 -0.03329658 -0.9659258 0.2566685 -0.03329658 -0.9659258 0.0864306 -0.01121228 -0.9961947 0.0864312 -0.0112124 -0.9961948 0.9916902 -0.1286482 0 0.9916902 -0.1286482 0 0.9879167 -0.1281586 0.08715558 0.9879167 -0.1281586 0.08715569 0.9578997 -0.1242647 0.2588173 0.9578997 -0.1242647 0.2588172 0.898776 -0.1165948 0.4226198 0.8987768 -0.1165948 0.4226177 0.8123461 -0.1053825 0.5735751 0.8123434 -0.1053823 0.573579 0.7012305 -0.09096807 0.7071071 0.7012317 -0.09096813 0.707106 0.5688109 -0.07378965 0.8191515 0.5688108 -0.07378965 0.8191515 0.4191052 -0.05436891 0.9063084 0.4191064 -0.05436903 0.9063078 0.2566685 -0.03329658 0.9659258 0.2566687 -0.03329658 0.9659257 0.0864312 -0.01121234 0.9961948 0.0864306 -0.01121228 0.9961948 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -0.1286487 -0.9916902 3.62556e-6 -0.1286498 -0.99169 -8.45771e-6 -0.1286481 -0.9916903 0 -0.1286485 -0.9916903 3.82444e-6 -0.1286482 -0.9916903 -3.06227e-7 -0.1286481 -0.9916903 -8.50567e-7 -0.1286498 -0.9916901 1.11832e-5 -0.1286484 -0.9916903 3.78133e-6 -0.1286484 -0.9916903 -3.60136e-6 -0.128646 -0.9916906 1.18044e-5 -0.1286487 -0.9916902 -3.62556e-6 -0.1286487 -0.9916903 -3.75273e-6 -0.1286498 -0.9916901 -1.11832e-5 -0.1286481 -0.9916903 8.50567e-7 -0.1286482 -0.9916903 3.06227e-7 -0.1286481 -0.9916903 0 -0.1286486 -0.9916903 -4.8953e-6 -0.1286495 -0.9916901 -1.13675e-5 -0.1286481 -0.9916903 2.69177e-7 -0.1286475 -0.9916904 -1.08471e-6 -0.128648 -0.9916903 0 -0.128648 -0.9916903 0 -0.1286475 -0.9916904 1.08471e-6 -0.1286482 -0.9916903 -4.61295e-7 -0.1286491 -0.9916902 1.30008e-5 -0.1286485 -0.9916903 5.28606e-6 -0.1286457 -0.9916906 1.06411e-5 -0.1286523 -0.9916898 -1.82452e-5 -0.1286463 -0.9916905 1.09306e-5 -0.1286463 -0.9916905 -1.14639e-5 -0.1286495 -0.9916901 7.60647e-6 -0.1286463 -0.9916905 -7.50755e-6 -0.1286489 -0.9916902 -1.74518e-6 -0.1286489 -0.9916902 -1.75002e-6 -0.12865 -0.9916902 -1.02307e-5 -0.1286483 -0.9916903 2.81235e-6 -0.1286492 -0.9916901 -8.01223e-6 -0.1286472 -0.9916905 7.91997e-6 -0.1286489 -0.9916902 1.7309e-6 -0.1286481 -0.9916903 -2.87313e-6 -0.1286512 -0.99169 1.07599e-5 -0.1286489 -0.9916902 1.75217e-6 -0.1286482 -0.9916903 -1.67656e-6 -0.1286486 -0.9916903 0 -0.1286486 -0.9916902 0 -0.1286483 -0.9916903 1.67656e-6 + + + + + + + + + + + + + + + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +

360 568 249 568 361 568 361 569 249 569 248 569 361 570 248 570 362 570 362 571 248 571 247 571 362 572 247 572 363 572 363 573 247 573 246 573 363 574 246 574 364 574 364 575 246 575 245 575 364 576 245 576 365 576 365 577 245 577 244 577 365 578 244 578 366 578 366 579 244 579 243 579 366 580 243 580 367 580 367 581 243 581 242 581 367 582 242 582 368 582 368 583 242 583 241 583 368 584 241 584 369 584 369 585 241 585 240 585 369 586 240 586 370 586 370 587 240 587 239 587 370 588 239 588 371 588 371 589 239 589 238 589 371 590 238 590 372 590 372 591 238 591 237 591 372 592 237 592 373 592 373 593 237 593 236 593 373 594 236 594 374 594 374 595 236 595 235 595 374 596 235 596 375 596 375 597 235 597 234 597 375 598 234 598 376 598 376 599 234 599 233 599 376 600 233 600 377 600 377 601 233 601 232 601 377 602 232 602 378 602 378 603 232 603 231 603 378 604 231 604 379 604 379 605 231 605 230 605 379 606 230 606 380 606 380 607 230 607 229 607 380 608 229 608 381 608 381 609 229 609 228 609 381 610 228 610 382 610 382 611 228 611 227 611 382 612 227 612 383 612 383 613 227 613 226 613 383 614 226 614 384 614 384 615 226 615 225 615 384 616 225 616 385 616 385 617 225 617 224 617 385 618 224 618 386 618 386 619 224 619 223 619 386 620 223 620 387 620 387 621 223 621 222 621 387 622 222 622 388 622 388 623 222 623 221 623 388 624 221 624 389 624 389 625 221 625 220 625 389 626 220 626 390 626 390 627 220 627 219 627 390 628 219 628 391 628 391 629 219 629 218 629 391 630 218 630 392 630 392 631 218 631 217 631 392 632 217 632 393 632 393 633 217 633 216 633 393 634 216 634 394 634 394 635 216 635 251 635 394 636 251 636 395 636 395 637 251 637 250 637 395 638 250 638 360 638 360 639 250 639 249 639 720 1144 721 1144 722 1144 723 1145 724 1145 725 1145 725 1146 724 1146 726 1146 725 1147 726 1147 727 1147 722 1148 721 1148 728 1148 729 1149 730 1149 731 1149 731 1150 730 1150 722 1150 729 1151 732 1151 730 1151 730 1152 732 1152 733 1152 730 1153 733 1153 734 1153 734 1154 733 1154 735 1154 723 1155 725 1155 736 1155 736 1156 725 1156 737 1156 736 1157 737 1157 738 1157 739 1158 740 1158 730 1158 730 1159 740 1159 741 1159 730 1160 741 1160 722 1160 722 1161 741 1161 742 1161 722 1162 742 1162 720 1162 743 1163 725 1163 744 1163 744 1164 725 1164 745 1164 727 1165 746 1165 725 1165 725 1166 746 1166 747 1166 725 1167 747 1167 745 1167 745 1168 747 1168 748 1168 749 1169 750 1169 721 1169 721 1170 750 1170 751 1170 721 1171 751 1171 728 1171 752 1172 753 1172 747 1172 747 1173 753 1173 754 1173 754 1174 755 1174 747 1174 747 1175 755 1175 756 1175 747 1176 756 1176 748 1176 749 1177 757 1177 750 1177 750 1178 757 1178 758 1178 750 1179 758 1179 759 1179 759 1180 758 1180 760 1180 758 1181 761 1181 760 1181 760 1182 761 1182 762 1182 760 1183 762 1183 763 1183 747 1184 764 1184 752 1184 752 1185 764 1185 765 1185 752 1186 765 1186 766 1186 766 1187 765 1187 763 1187 766 1188 763 1188 767 1188 767 1189 763 1189 762 1189 768 1190 769 1190 770 1190 768 1191 770 1191 771 1191 771 1192 770 1192 772 1192 771 1193 772 1193 773 1193 773 1194 772 1194 774 1194 773 1195 774 1195 775 1195 775 1196 774 1196 776 1196 775 1197 776 1197 777 1197 777 1198 776 1198 778 1198 777 1199 778 1199 779 1199 779 1200 778 1200 780 1200 779 1201 780 1201 781 1201 781 1202 780 1202 782 1202 781 1203 782 1203 783 1203 783 1204 782 1204 784 1204 783 1205 784 1205 785 1205 785 1206 784 1206 786 1206 785 1207 786 1207 787 1207 787 1208 786 1208 788 1208 787 1209 788 1209 789 1209 789 1210 788 1210 790 1210 789 1211 790 1211 791 1211 791 1212 790 1212 792 1212 791 1213 792 1213 793 1213 793 1214 792 1214 794 1214 793 1215 794 1215 795 1215 795 1216 794 1216 796 1216 795 1217 796 1217 797 1217 797 1218 796 1218 798 1218 797 1219 798 1219 799 1219 799 1220 798 1220 800 1220 799 1221 800 1221 801 1221 801 1222 800 1222 802 1222 801 1223 802 1223 803 1223 803 1224 802 1224 734 1224 803 1225 734 1225 735 1225 739 1339 730 1339 822 1339 739 1340 822 1340 823 1340 823 1341 822 1341 821 1341 823 1342 821 1342 824 1342 824 1343 821 1343 820 1343 824 1344 820 1344 825 1344 825 1345 820 1345 819 1345 825 1346 819 1346 826 1346 826 1347 819 1347 818 1347 826 1348 818 1348 827 1348 827 1349 818 1349 817 1349 827 1350 817 1350 828 1350 828 1351 817 1351 816 1351 828 1352 816 1352 829 1352 829 1353 816 1353 815 1353 829 1354 815 1354 830 1354 830 1355 815 1355 814 1355 830 1356 814 1356 831 1356 831 1357 814 1357 813 1357 831 1358 813 1358 832 1358 832 1359 813 1359 812 1359 832 1360 812 1360 833 1360 833 1361 812 1361 811 1361 833 1362 811 1362 834 1362 834 1363 811 1363 810 1363 834 1364 810 1364 835 1364 835 1365 810 1365 809 1365 835 1366 809 1366 836 1366 836 1367 809 1367 808 1367 836 1368 808 1368 837 1368 837 1369 808 1369 804 1369 837 1370 804 1370 838 1370 838 1371 804 1371 806 1371 838 1372 806 1372 839 1372 839 1373 806 1373 807 1373 839 1374 807 1374 840 1374 840 1375 807 1375 805 1375 840 1376 805 1376 841 1376 842 1377 740 1377 631 1377 842 1378 619 1378 841 1378 841 1379 619 1379 617 1379 841 1380 617 1380 615 1380 631 1381 629 1381 842 1381 842 1382 629 1382 627 1382 842 1383 627 1383 625 1383 625 1384 623 1384 842 1384 842 1385 623 1385 621 1385 842 1386 621 1386 619 1386 615 1387 613 1387 841 1387 841 1388 613 1388 611 1388 841 1389 611 1389 840 1389 840 1390 611 1390 609 1390 840 1391 609 1391 839 1391 839 1392 609 1392 607 1392 839 1393 607 1393 838 1393 838 1394 607 1394 605 1394 838 1395 605 1395 837 1395 837 1396 605 1396 603 1396 837 1397 603 1397 836 1397 836 1398 603 1398 601 1398 647 1399 739 1399 577 1399 577 1400 739 1400 823 1400 577 1401 823 1401 579 1401 579 1402 823 1402 824 1402 579 1403 824 1403 581 1403 581 1404 824 1404 825 1404 581 1405 825 1405 583 1405 583 1406 825 1406 826 1406 583 1407 826 1407 585 1407 585 1408 826 1408 827 1408 585 1409 827 1409 587 1409 587 1410 827 1410 828 1410 587 1411 828 1411 589 1411 589 1412 828 1412 829 1412 589 1413 829 1413 591 1413 591 1414 829 1414 830 1414 591 1415 830 1415 593 1415 593 1416 830 1416 831 1416 593 1417 831 1417 595 1417 595 1418 831 1418 832 1418 595 1419 832 1419 597 1419 597 1420 832 1420 833 1420 597 1421 833 1421 599 1421 599 1422 833 1422 834 1422 599 1423 834 1423 601 1423 601 1424 834 1424 835 1424 601 1425 835 1425 836 1425 647 1426 645 1426 739 1426 739 1427 645 1427 643 1427 739 1428 643 1428 740 1428 643 1429 641 1429 740 1429 740 1430 641 1430 639 1430 740 1431 639 1431 637 1431 637 1432 635 1432 740 1432 740 1433 635 1433 633 1433 740 1434 633 1434 631 1434 843 1435 762 1435 761 1435 843 1436 761 1436 844 1436 844 1437 761 1437 758 1437 844 1438 758 1438 845 1438 845 1439 758 1439 757 1439 845 1440 757 1440 846 1440 846 1441 757 1441 749 1441 846 1442 749 1442 847 1442 847 1443 749 1443 721 1443 847 1444 721 1444 848 1444 848 1445 721 1445 720 1445 848 1446 720 1446 849 1446 849 1447 720 1447 742 1447 849 1448 742 1448 850 1448 850 1449 742 1449 741 1449 850 1450 741 1450 851 1450 851 1451 741 1451 740 1451 851 1452 740 1452 842 1452 762 1453 843 1453 767 1453 767 1454 843 1454 852 1454 767 1455 852 1455 853 1455 767 1456 853 1456 766 1456 766 1457 853 1457 854 1457 766 1458 854 1458 752 1458 752 1459 854 1459 855 1459 752 1460 855 1460 753 1460 753 1461 855 1461 856 1461 753 1462 856 1462 754 1462 754 1463 856 1463 857 1463 754 1464 857 1464 755 1464 755 1465 857 1465 858 1465 755 1466 858 1466 756 1466 756 1467 858 1467 859 1467 756 1468 859 1468 748 1468 748 1469 859 1469 860 1469 748 1470 860 1470 745 1470 745 1471 860 1471 861 1471 745 1472 861 1472 744 1472 604 1473 606 1473 862 1473 862 1474 606 1474 863 1474 863 1475 606 1475 608 1475 863 1476 608 1476 864 1476 864 1477 608 1477 610 1477 864 1478 610 1478 865 1478 865 1479 610 1479 612 1479 865 1480 612 1480 614 1480 614 1481 616 1481 865 1481 865 1482 616 1482 618 1482 865 1483 618 1483 861 1483 861 1484 618 1484 620 1484 620 1485 622 1485 861 1485 861 1486 622 1486 624 1486 861 1487 624 1487 626 1487 626 1488 628 1488 861 1488 861 1489 628 1489 630 1489 861 1490 630 1490 744 1490 744 1491 630 1491 632 1491 632 1492 634 1492 744 1492 744 1493 634 1493 636 1493 744 1494 636 1494 638 1494 638 1495 640 1495 744 1495 744 1496 640 1496 642 1496 744 1497 642 1497 743 1497 743 1498 642 1498 644 1498 862 1499 866 1499 604 1499 604 1500 866 1500 867 1500 604 1501 867 1501 602 1501 602 1502 867 1502 868 1502 602 1503 868 1503 600 1503 600 1504 868 1504 869 1504 600 1505 869 1505 598 1505 598 1506 869 1506 870 1506 598 1507 870 1507 596 1507 596 1508 870 1508 871 1508 596 1509 871 1509 594 1509 594 1510 871 1510 872 1510 594 1511 872 1511 592 1511 592 1512 872 1512 873 1512 592 1513 873 1513 590 1513 590 1514 873 1514 874 1514 590 1515 874 1515 588 1515 588 1516 874 1516 875 1516 588 1517 875 1517 586 1517 586 1518 875 1518 876 1518 586 1519 876 1519 584 1519 584 1520 876 1520 877 1520 584 1521 877 1521 582 1521 582 1522 877 1522 878 1522 582 1523 878 1523 580 1523 580 1524 878 1524 879 1524 580 1525 879 1525 578 1525 578 1526 879 1526 880 1526 578 1527 880 1527 576 1527 576 1528 880 1528 743 1528 576 1529 743 1529 646 1529 646 1530 743 1530 644 1530 725 1531 743 1531 880 1531 725 1532 880 1532 881 1532 881 1533 880 1533 879 1533 881 1534 879 1534 882 1534 882 1535 879 1535 878 1535 882 1536 878 1536 883 1536 883 1537 878 1537 877 1537 883 1538 877 1538 884 1538 884 1539 877 1539 876 1539 884 1540 876 1540 885 1540 885 1541 876 1541 875 1541 885 1542 875 1542 886 1542 886 1543 875 1543 874 1543 886 1544 874 1544 887 1544 887 1545 874 1545 873 1545 887 1546 873 1546 888 1546 888 1547 873 1547 872 1547 888 1548 872 1548 889 1548 889 1549 872 1549 871 1549 889 1550 871 1550 890 1550 890 1551 871 1551 870 1551 890 1552 870 1552 891 1552 891 1553 870 1553 869 1553 891 1554 869 1554 892 1554 892 1555 869 1555 868 1555 892 1556 868 1556 893 1556 893 1557 868 1557 867 1557 893 1558 867 1558 894 1558 894 1559 867 1559 866 1559 894 1560 866 1560 895 1560 895 1561 866 1561 862 1561 895 1562 862 1562 896 1562 896 1563 862 1563 863 1563 896 1564 863 1564 897 1564 897 1565 863 1565 864 1565 897 1566 864 1566 898 1566 898 1567 864 1567 865 1567 898 1568 865 1568 899 1568 900 1682 918 1682 919 1682 900 1683 919 1683 901 1683 901 1684 919 1684 920 1684 901 1685 920 1685 902 1685 902 1686 920 1686 921 1686 902 1687 921 1687 903 1687 903 1688 921 1688 922 1688 903 1689 922 1689 904 1689 904 1690 922 1690 923 1690 904 1691 923 1691 905 1691 905 1692 923 1692 924 1692 905 1693 924 1693 906 1693 906 1694 924 1694 925 1694 906 1695 925 1695 907 1695 907 1696 925 1696 926 1696 907 1697 926 1697 908 1697 908 1698 926 1698 927 1698 908 1699 927 1699 909 1699 909 1700 927 1700 928 1700 909 1701 928 1701 910 1701 910 1702 928 1702 929 1702 910 1703 929 1703 911 1703 911 1704 929 1704 930 1704 911 1705 930 1705 912 1705 912 1706 930 1706 931 1706 912 1707 931 1707 913 1707 913 1708 931 1708 932 1708 913 1709 932 1709 914 1709 914 1710 932 1710 933 1710 914 1711 933 1711 915 1711 915 1712 933 1712 934 1712 915 1713 934 1713 916 1713 916 1714 934 1714 935 1714 916 1715 935 1715 917 1715 917 1716 935 1716 738 1716 917 1717 738 1717 737 1717 683 1718 681 1718 936 1718 936 1719 681 1719 679 1719 679 1720 677 1720 936 1720 936 1721 677 1721 675 1721 936 1722 675 1722 918 1722 918 1723 675 1723 673 1723 736 1724 695 1724 693 1724 736 1725 687 1725 936 1725 936 1726 687 1726 685 1726 936 1727 685 1727 683 1727 703 1728 701 1728 738 1728 738 1729 701 1729 699 1729 738 1730 699 1730 736 1730 736 1731 699 1731 697 1731 736 1732 697 1732 695 1732 693 1733 691 1733 736 1733 736 1734 691 1734 689 1734 736 1735 689 1735 687 1735 673 1736 671 1736 918 1736 918 1737 671 1737 669 1737 918 1738 669 1738 919 1738 919 1739 669 1739 667 1739 919 1740 667 1740 920 1740 920 1741 667 1741 665 1741 920 1742 665 1742 921 1742 921 1743 665 1743 663 1743 921 1744 663 1744 922 1744 922 1745 663 1745 661 1745 922 1746 661 1746 923 1746 923 1747 661 1747 659 1747 923 1748 659 1748 924 1748 924 1749 659 1749 657 1749 924 1750 657 1750 925 1750 925 1751 657 1751 655 1751 925 1752 655 1752 926 1752 926 1753 655 1753 653 1753 926 1754 653 1754 927 1754 927 1755 653 1755 651 1755 927 1756 651 1756 928 1756 928 1757 651 1757 649 1757 928 1758 649 1758 929 1758 929 1759 649 1759 719 1759 929 1760 719 1760 930 1760 930 1761 719 1761 717 1761 930 1762 717 1762 931 1762 931 1763 717 1763 715 1763 931 1764 715 1764 932 1764 932 1765 715 1765 713 1765 932 1766 713 1766 933 1766 933 1767 713 1767 711 1767 933 1768 711 1768 934 1768 934 1769 711 1769 709 1769 934 1770 709 1770 935 1770 935 1771 709 1771 707 1771 935 1772 707 1772 738 1772 738 1773 707 1773 705 1773 738 1774 705 1774 703 1774 937 1775 763 1775 765 1775 937 1776 765 1776 938 1776 938 1777 765 1777 764 1777 938 1778 764 1778 939 1778 939 1779 764 1779 747 1779 939 1780 747 1780 940 1780 940 1781 747 1781 746 1781 940 1782 746 1782 941 1782 941 1783 746 1783 727 1783 941 1784 727 1784 942 1784 942 1785 727 1785 726 1785 942 1786 726 1786 943 1786 943 1787 726 1787 724 1787 943 1788 724 1788 944 1788 944 1789 724 1789 723 1789 944 1790 723 1790 945 1790 945 1791 723 1791 736 1791 945 1792 736 1792 936 1792 763 1793 937 1793 760 1793 760 1794 937 1794 946 1794 760 1795 946 1795 947 1795 760 1796 947 1796 759 1796 759 1797 947 1797 948 1797 759 1798 948 1798 750 1798 750 1799 948 1799 949 1799 750 1800 949 1800 751 1800 751 1801 949 1801 950 1801 751 1802 950 1802 728 1802 728 1803 950 1803 951 1803 728 1804 951 1804 722 1804 722 1805 951 1805 952 1805 722 1806 952 1806 731 1806 731 1807 952 1807 953 1807 731 1808 953 1808 729 1808 729 1809 953 1809 954 1809 729 1810 954 1810 732 1810 732 1811 954 1811 955 1811 732 1812 955 1812 733 1812 700 1813 702 1813 735 1813 700 1814 735 1814 698 1814 698 1815 735 1815 733 1815 698 1816 733 1816 696 1816 670 1817 768 1817 668 1817 668 1818 768 1818 771 1818 668 1819 771 1819 666 1819 666 1820 771 1820 773 1820 666 1821 773 1821 664 1821 664 1822 773 1822 775 1822 664 1823 775 1823 662 1823 662 1824 775 1824 777 1824 662 1825 777 1825 660 1825 660 1826 777 1826 779 1826 660 1827 779 1827 658 1827 658 1828 779 1828 781 1828 658 1829 781 1829 656 1829 656 1830 781 1830 783 1830 656 1831 783 1831 654 1831 654 1832 783 1832 785 1832 654 1833 785 1833 652 1833 652 1834 785 1834 787 1834 652 1835 787 1835 650 1835 650 1836 787 1836 789 1836 650 1837 789 1837 648 1837 648 1838 789 1838 791 1838 648 1839 791 1839 718 1839 718 1840 791 1840 793 1840 718 1841 793 1841 716 1841 716 1842 793 1842 795 1842 716 1843 795 1843 714 1843 714 1844 795 1844 797 1844 714 1845 797 1845 712 1845 712 1846 797 1846 799 1846 712 1847 799 1847 710 1847 710 1848 799 1848 801 1848 710 1849 801 1849 708 1849 708 1850 801 1850 803 1850 708 1851 803 1851 706 1851 706 1852 803 1852 735 1852 706 1853 735 1853 704 1853 704 1854 735 1854 702 1854 676 1855 955 1855 674 1855 674 1856 955 1856 768 1856 674 1857 768 1857 672 1857 672 1858 768 1858 670 1858 676 1859 678 1859 955 1859 955 1860 678 1860 680 1860 955 1861 680 1861 682 1861 690 1862 692 1862 733 1862 733 1863 692 1863 694 1863 733 1864 694 1864 696 1864 682 1865 684 1865 955 1865 955 1866 684 1866 686 1866 955 1867 686 1867 733 1867 733 1868 686 1868 688 1868 733 1869 688 1869 690 1869 952 1870 951 1870 805 1870 899 1871 940 1871 941 1871 769 1872 768 1872 955 1872 952 1873 805 1873 953 1873 769 1874 955 1874 805 1874 805 1875 955 1875 954 1875 805 1876 954 1876 953 1876 940 1877 858 1877 857 1877 848 1878 849 1878 951 1878 941 1879 942 1879 899 1879 899 1880 942 1880 943 1880 899 1881 943 1881 944 1881 944 1882 945 1882 899 1882 899 1883 945 1883 936 1883 899 1884 936 1884 900 1884 900 1885 936 1885 918 1885 849 1886 850 1886 951 1886 951 1887 850 1887 851 1887 951 1888 851 1888 805 1888 805 1889 851 1889 842 1889 805 1890 842 1890 841 1890 865 1891 861 1891 899 1891 899 1892 861 1892 860 1892 899 1893 860 1893 940 1893 940 1894 860 1894 859 1894 940 1895 859 1895 858 1895 848 1896 951 1896 847 1896 847 1897 951 1897 950 1897 847 1898 950 1898 949 1898 857 1899 856 1899 940 1899 940 1900 856 1900 855 1900 940 1901 855 1901 854 1901 946 1902 844 1902 947 1902 947 1903 844 1903 845 1903 949 1904 948 1904 847 1904 847 1905 948 1905 947 1905 847 1906 947 1906 846 1906 846 1907 947 1907 845 1907 937 1908 938 1908 854 1908 854 1909 938 1909 939 1909 854 1910 939 1910 940 1910 854 1911 853 1911 937 1911 937 1912 853 1912 852 1912 937 1913 852 1913 946 1913 946 1914 852 1914 843 1914 946 1915 843 1915 844 1915

+
+ + + + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +

0 0 1 0 2 0 3 1 4 1 5 1 6 2 7 2 5 2 4 3 8 3 5 3 5 4 8 4 9 4 5 5 9 5 10 5 3 6 5 6 2 6 2 7 5 7 11 7 2 8 11 8 0 8 10 9 12 9 5 9 5 10 12 10 13 10 5 11 13 11 14 11 14 12 15 12 5 12 5 13 15 13 16 13 5 14 16 14 6 14 17 15 18 15 19 15 1 16 20 16 2 16 2 17 20 17 19 17 2 18 19 18 21 18 21 19 19 19 18 19 7 20 22 20 5 20 5 21 22 21 23 21 5 22 23 22 24 22 24 23 25 23 5 23 5 24 25 24 26 24 5 25 26 25 27 25 17 26 19 26 28 26 28 27 19 27 29 27 28 28 29 28 30 28 30 29 29 29 31 29 30 30 31 30 32 30 27 31 33 31 5 31 5 32 33 32 34 32 5 33 34 33 35 33 36 34 37 34 38 34 38 35 39 35 36 35 36 36 39 36 40 36 36 37 40 37 41 37 42 38 43 38 44 38 45 39 46 39 41 39 41 40 46 40 47 40 41 41 47 41 36 41 36 42 48 42 37 42 37 43 48 43 49 43 37 44 49 44 44 44 44 45 49 45 50 45 44 46 50 46 42 46 51 47 52 47 53 47 43 48 54 48 44 48 44 49 54 49 55 49 44 50 55 50 56 50 45 51 57 51 46 51 46 52 57 52 58 52 46 53 58 53 59 53 51 54 53 54 60 54 60 55 53 55 61 55 60 56 61 56 46 56 56 57 62 57 44 57 44 58 62 58 63 58 44 59 63 59 64 59 65 60 44 60 66 60 66 61 44 61 67 61 59 62 68 62 46 62 46 63 68 63 69 63 46 64 69 64 60 64 64 65 70 65 44 65 44 66 70 66 71 66 44 67 71 67 67 67 72 68 73 68 74 68 74 69 73 69 75 69 74 70 75 70 76 70 77 71 78 71 74 71 74 72 78 72 79 72 76 73 80 73 74 73 74 74 80 74 81 74 74 75 81 75 82 75 83 76 84 76 85 76 79 77 86 77 74 77 74 78 86 78 87 78 74 79 87 79 88 79 88 80 89 80 74 80 74 81 89 81 90 81 74 82 90 82 72 82 84 83 91 83 85 83 85 84 91 84 92 84 85 85 92 85 93 85 74 86 94 86 95 86 95 87 96 87 74 87 74 88 96 88 97 88 74 89 97 89 98 89 77 90 74 90 85 90 85 91 74 91 99 91 85 92 99 92 83 92 100 93 101 93 93 93 93 94 101 94 102 94 93 95 102 95 85 95 82 96 103 96 74 96 74 97 103 97 104 97 74 98 104 98 105 98 105 99 106 99 74 99 74 100 106 100 107 100 74 101 107 101 94 101 108 102 109 102 110 102 111 103 112 103 113 103 113 104 112 104 114 104 113 105 114 105 115 105 111 106 113 106 109 106 109 107 113 107 116 107 109 108 116 108 110 108 117 109 118 109 119 109 120 110 121 110 122 110 122 111 121 111 123 111 122 112 123 112 115 112 115 113 123 113 124 113 115 114 124 114 113 114 119 115 118 115 125 115 126 116 127 116 122 116 122 117 127 117 128 117 122 118 128 118 129 118 130 119 131 119 132 119 129 120 133 120 122 120 122 121 133 121 134 121 122 122 134 122 135 122 135 123 136 123 122 123 122 124 136 124 137 124 122 125 137 125 138 125 138 126 139 126 122 126 122 127 139 127 140 127 122 128 140 128 120 128 108 129 110 129 118 129 118 130 110 130 141 130 118 131 141 131 125 131 130 132 132 132 142 132 142 133 132 133 119 133 119 134 132 134 143 134 119 135 143 135 117 135 144 136 1 136 145 136 145 137 1 137 0 137 145 138 0 138 146 138 146 139 0 139 11 139 146 140 11 140 147 140 147 141 11 141 5 141 147 142 5 142 148 142 148 143 5 143 35 143 148 144 35 144 149 144 149 145 35 145 34 145 149 146 34 146 150 146 150 147 34 147 33 147 150 148 33 148 151 148 151 149 33 149 27 149 151 150 27 150 152 150 152 151 27 151 26 151 152 152 26 152 153 152 153 153 26 153 25 153 153 154 25 154 154 154 154 155 25 155 24 155 154 156 24 156 155 156 155 157 24 157 23 157 155 158 23 158 156 158 156 159 23 159 22 159 156 160 22 160 157 160 157 161 22 161 7 161 157 162 7 162 158 162 158 163 7 163 6 163 158 164 6 164 159 164 159 165 6 165 16 165 159 166 16 166 160 166 160 167 16 167 15 167 160 168 15 168 161 168 161 169 15 169 14 169 161 170 14 170 162 170 162 171 14 171 13 171 162 172 13 172 163 172 163 173 13 173 12 173 163 174 12 174 164 174 164 175 12 175 10 175 164 176 10 176 165 176 165 177 10 177 9 177 165 178 9 178 166 178 166 179 9 179 8 179 166 180 8 180 167 180 167 181 8 181 4 181 167 182 4 182 168 182 168 183 4 183 3 183 168 184 3 184 169 184 169 185 3 185 2 185 169 186 2 186 170 186 170 187 2 187 21 187 170 188 21 188 171 188 171 189 21 189 18 189 171 190 18 190 172 190 172 191 18 191 17 191 172 192 17 192 173 192 173 193 17 193 28 193 173 194 28 194 174 194 174 195 28 195 30 195 174 196 30 196 175 196 175 197 30 197 32 197 175 198 32 198 176 198 176 199 32 199 31 199 176 200 31 200 177 200 177 201 31 201 29 201 177 202 29 202 178 202 178 203 29 203 19 203 178 204 19 204 179 204 179 205 19 205 20 205 179 206 20 206 144 206 144 207 20 207 1 207 69 208 180 208 60 208 60 209 180 209 181 209 60 210 181 210 51 210 51 211 181 211 182 211 51 212 182 212 52 212 52 213 182 213 183 213 52 214 183 214 53 214 53 215 183 215 184 215 53 216 184 216 61 216 61 217 184 217 185 217 61 218 185 218 46 218 46 219 185 219 186 219 46 220 186 220 47 220 47 221 186 221 187 221 47 222 187 222 36 222 36 223 187 223 188 223 36 224 188 224 48 224 48 225 188 225 189 225 48 226 189 226 49 226 49 227 189 227 190 227 49 228 190 228 50 228 50 229 190 229 191 229 50 230 191 230 42 230 42 231 191 231 192 231 42 232 192 232 43 232 43 233 192 233 193 233 43 234 193 234 54 234 54 235 193 235 194 235 54 236 194 236 55 236 55 237 194 237 195 237 55 238 195 238 56 238 56 239 195 239 196 239 56 240 196 240 62 240 62 241 196 241 197 241 62 242 197 242 63 242 63 243 197 243 198 243 63 244 198 244 64 244 64 245 198 245 199 245 64 246 199 246 70 246 70 247 199 247 200 247 70 248 200 248 71 248 71 249 200 249 201 249 71 250 201 250 67 250 67 251 201 251 202 251 67 252 202 252 66 252 66 253 202 253 203 253 66 254 203 254 65 254 65 255 203 255 204 255 65 256 204 256 44 256 44 257 204 257 205 257 44 258 205 258 37 258 37 259 205 259 206 259 37 260 206 260 38 260 38 261 206 261 207 261 38 262 207 262 39 262 39 263 207 263 208 263 39 264 208 264 40 264 40 265 208 265 209 265 40 266 209 266 41 266 41 267 209 267 210 267 41 268 210 268 45 268 45 269 210 269 211 269 45 270 211 270 57 270 57 271 211 271 212 271 57 272 212 272 58 272 58 273 212 273 213 273 58 274 213 274 59 274 59 275 213 275 214 275 59 276 214 276 68 276 68 277 214 277 215 277 68 278 215 278 69 278 69 279 215 279 180 279 95 280 216 280 96 280 96 281 216 281 217 281 96 282 217 282 97 282 97 283 217 283 218 283 97 284 218 284 98 284 98 285 218 285 219 285 98 286 219 286 74 286 74 287 219 287 220 287 74 288 220 288 99 288 99 289 220 289 221 289 99 290 221 290 83 290 83 291 221 291 222 291 83 292 222 292 84 292 84 293 222 293 223 293 84 294 223 294 91 294 91 295 223 295 224 295 91 296 224 296 92 296 92 297 224 297 225 297 92 298 225 298 93 298 93 299 225 299 226 299 93 300 226 300 100 300 100 301 226 301 227 301 100 302 227 302 101 302 101 303 227 303 228 303 101 304 228 304 102 304 102 305 228 305 229 305 102 306 229 306 85 306 85 307 229 307 230 307 85 308 230 308 77 308 77 309 230 309 231 309 77 310 231 310 78 310 78 311 231 311 232 311 78 312 232 312 79 312 79 313 232 313 233 313 79 314 233 314 86 314 86 315 233 315 234 315 86 316 234 316 87 316 87 317 234 317 235 317 87 318 235 318 88 318 88 319 235 319 236 319 88 320 236 320 89 320 89 321 236 321 237 321 89 322 237 322 90 322 90 323 237 323 238 323 90 324 238 324 72 324 72 325 238 325 239 325 72 326 239 326 73 326 73 327 239 327 240 327 73 328 240 328 75 328 75 329 240 329 241 329 75 330 241 330 76 330 76 331 241 331 242 331 76 332 242 332 80 332 80 333 242 333 243 333 80 334 243 334 81 334 81 335 243 335 244 335 81 336 244 336 82 336 82 337 244 337 245 337 82 338 245 338 103 338 103 339 245 339 246 339 103 340 246 340 104 340 104 341 246 341 247 341 104 342 247 342 105 342 105 343 247 343 248 343 105 344 248 344 106 344 106 345 248 345 249 345 106 346 249 346 107 346 107 347 249 347 250 347 107 348 250 348 94 348 94 349 250 349 251 349 94 350 251 350 95 350 95 351 251 351 216 351 252 352 130 352 253 352 253 353 130 353 142 353 253 354 142 354 254 354 254 355 142 355 119 355 254 356 119 356 255 356 255 357 119 357 125 357 255 358 125 358 256 358 256 359 125 359 141 359 256 360 141 360 257 360 257 361 141 361 110 361 257 362 110 362 258 362 258 363 110 363 116 363 258 364 116 364 259 364 259 365 116 365 113 365 259 366 113 366 260 366 260 367 113 367 124 367 260 368 124 368 261 368 261 369 124 369 123 369 261 370 123 370 262 370 262 371 123 371 121 371 262 372 121 372 263 372 263 373 121 373 120 373 263 374 120 374 264 374 264 375 120 375 140 375 264 376 140 376 265 376 265 377 140 377 139 377 265 378 139 378 266 378 266 379 139 379 138 379 266 380 138 380 267 380 267 381 138 381 137 381 267 382 137 382 268 382 268 383 137 383 136 383 268 384 136 384 269 384 269 385 136 385 135 385 269 386 135 386 270 386 270 387 135 387 134 387 270 388 134 388 271 388 271 389 134 389 133 389 271 390 133 390 272 390 272 391 133 391 129 391 272 392 129 392 273 392 273 393 129 393 128 393 273 394 128 394 274 394 274 395 128 395 127 395 274 396 127 396 275 396 275 397 127 397 126 397 275 398 126 398 276 398 276 399 126 399 122 399 276 400 122 400 277 400 277 401 122 401 115 401 277 402 115 402 278 402 278 403 115 403 114 403 278 404 114 404 279 404 279 405 114 405 112 405 279 406 112 406 280 406 280 407 112 407 111 407 280 408 111 408 281 408 281 409 111 409 109 409 281 410 109 410 282 410 282 411 109 411 108 411 282 412 108 412 283 412 283 413 108 413 118 413 283 414 118 414 284 414 284 415 118 415 117 415 284 416 117 416 285 416 285 417 117 417 143 417 285 418 143 418 286 418 286 419 143 419 132 419 286 420 132 420 287 420 287 421 132 421 131 421 287 422 131 422 252 422 252 423 131 423 130 423 288 424 289 424 164 424 288 425 164 425 290 425 290 426 164 426 165 426 290 427 165 427 291 427 291 428 165 428 166 428 291 429 166 429 292 429 292 430 166 430 167 430 292 431 167 431 293 431 293 432 167 432 168 432 293 433 168 433 294 433 294 434 168 434 169 434 294 435 169 435 295 435 295 436 169 436 170 436 295 437 170 437 296 437 296 438 170 438 171 438 296 439 171 439 297 439 297 440 171 440 172 440 297 441 172 441 298 441 298 442 172 442 173 442 298 443 173 443 299 443 299 444 173 444 174 444 299 445 174 445 300 445 300 446 174 446 175 446 300 447 175 447 301 447 301 448 175 448 176 448 301 449 176 449 302 449 302 450 176 450 177 450 302 451 177 451 303 451 303 452 177 452 178 452 303 453 178 453 304 453 304 454 178 454 179 454 304 455 179 455 305 455 305 456 179 456 144 456 305 457 144 457 306 457 306 458 144 458 145 458 306 459 145 459 307 459 307 460 145 460 146 460 307 461 146 461 308 461 308 462 146 462 147 462 308 463 147 463 309 463 309 464 147 464 148 464 309 465 148 465 310 465 310 466 148 466 149 466 310 467 149 467 311 467 311 468 149 468 150 468 311 469 150 469 312 469 312 470 150 470 151 470 312 471 151 471 313 471 313 472 151 472 152 472 313 473 152 473 314 473 314 474 152 474 153 474 314 475 153 475 315 475 315 476 153 476 154 476 315 477 154 477 316 477 316 478 154 478 155 478 316 479 155 479 317 479 317 480 155 480 156 480 317 481 156 481 318 481 318 482 156 482 157 482 318 483 157 483 319 483 319 484 157 484 158 484 319 485 158 485 320 485 320 486 158 486 159 486 320 487 159 487 321 487 321 488 159 488 160 488 321 489 160 489 322 489 322 490 160 490 161 490 322 491 161 491 323 491 323 492 161 492 162 492 323 493 162 493 289 493 289 494 162 494 163 494 289 495 163 495 164 495 324 496 194 496 325 496 325 497 194 497 193 497 325 498 193 498 326 498 326 499 193 499 192 499 326 500 192 500 327 500 327 501 192 501 191 501 327 502 191 502 328 502 328 503 191 503 190 503 328 504 190 504 329 504 329 505 190 505 189 505 329 506 189 506 330 506 330 507 189 507 188 507 330 508 188 508 331 508 331 509 188 509 187 509 331 510 187 510 332 510 332 511 187 511 186 511 332 512 186 512 333 512 333 513 186 513 185 513 333 514 185 514 334 514 334 515 185 515 184 515 334 516 184 516 335 516 335 517 184 517 183 517 335 518 183 518 336 518 336 519 183 519 182 519 336 520 182 520 337 520 337 521 182 521 181 521 337 522 181 522 338 522 338 523 181 523 180 523 338 524 180 524 339 524 339 525 180 525 215 525 339 526 215 526 340 526 340 527 215 527 214 527 340 528 214 528 341 528 341 529 214 529 213 529 341 530 213 530 342 530 342 531 213 531 212 531 342 532 212 532 343 532 343 533 212 533 211 533 343 534 211 534 344 534 344 535 211 535 210 535 344 536 210 536 345 536 345 537 210 537 209 537 345 538 209 538 346 538 346 539 209 539 208 539 346 540 208 540 347 540 347 541 208 541 207 541 347 542 207 542 348 542 348 543 207 543 206 543 348 544 206 544 349 544 349 545 206 545 205 545 349 546 205 546 350 546 350 547 205 547 204 547 350 548 204 548 351 548 351 549 204 549 203 549 351 550 203 550 352 550 352 551 203 551 202 551 352 552 202 552 353 552 353 553 202 553 201 553 353 554 201 554 354 554 354 555 201 555 200 555 354 556 200 556 355 556 355 557 200 557 199 557 355 558 199 558 356 558 356 559 199 559 198 559 356 560 198 560 357 560 357 561 198 561 197 561 357 562 197 562 358 562 358 563 197 563 196 563 358 564 196 564 359 564 359 565 196 565 195 565 359 566 195 566 324 566 324 567 195 567 194 567 396 640 254 640 397 640 397 641 254 641 255 641 397 642 255 642 398 642 398 643 255 643 256 643 398 644 256 644 399 644 399 645 256 645 257 645 399 646 257 646 400 646 400 647 257 647 258 647 400 648 258 648 401 648 401 649 258 649 259 649 401 650 259 650 402 650 402 651 259 651 260 651 402 652 260 652 403 652 403 653 260 653 261 653 403 654 261 654 404 654 404 655 261 655 262 655 404 656 262 656 405 656 405 657 262 657 263 657 405 658 263 658 406 658 406 659 263 659 264 659 406 660 264 660 407 660 407 661 264 661 265 661 407 662 265 662 408 662 408 663 265 663 266 663 408 664 266 664 409 664 409 665 266 665 267 665 409 666 267 666 410 666 410 667 267 667 268 667 410 668 268 668 411 668 411 669 268 669 269 669 411 670 269 670 412 670 412 671 269 671 270 671 412 672 270 672 413 672 413 673 270 673 271 673 413 674 271 674 414 674 414 675 271 675 272 675 414 676 272 676 415 676 415 677 272 677 273 677 415 678 273 678 416 678 416 679 273 679 274 679 416 680 274 680 417 680 417 681 274 681 275 681 417 682 275 682 418 682 418 683 275 683 276 683 418 684 276 684 419 684 419 685 276 685 277 685 419 686 277 686 420 686 420 687 277 687 278 687 420 688 278 688 421 688 421 689 278 689 279 689 421 690 279 690 422 690 422 691 279 691 280 691 422 692 280 692 423 692 423 693 280 693 281 693 423 694 281 694 424 694 424 695 281 695 282 695 424 696 282 696 425 696 425 697 282 697 283 697 425 698 283 698 426 698 426 699 283 699 284 699 426 700 284 700 427 700 427 701 284 701 285 701 427 702 285 702 428 702 428 703 285 703 286 703 428 704 286 704 429 704 429 705 286 705 287 705 429 706 287 706 430 706 430 707 287 707 252 707 430 708 252 708 431 708 431 709 252 709 253 709 431 710 253 710 396 710 396 711 253 711 254 711 432 712 306 712 433 712 433 713 306 713 307 713 433 714 307 714 434 714 434 715 307 715 308 715 434 716 308 716 435 716 435 717 308 717 309 717 435 718 309 718 436 718 436 719 309 719 310 719 436 720 310 720 437 720 437 721 310 721 311 721 437 722 311 722 438 722 438 723 311 723 312 723 438 724 312 724 439 724 439 725 312 725 313 725 439 726 313 726 440 726 440 727 313 727 314 727 440 728 314 728 441 728 441 729 314 729 315 729 441 730 315 730 442 730 442 731 315 731 316 731 442 732 316 732 443 732 443 733 316 733 317 733 443 734 317 734 444 734 444 735 317 735 318 735 444 736 318 736 445 736 445 737 318 737 319 737 445 738 319 738 446 738 446 739 319 739 320 739 446 740 320 740 447 740 447 741 320 741 321 741 447 742 321 742 448 742 448 743 321 743 322 743 448 744 322 744 449 744 449 745 322 745 323 745 449 746 323 746 450 746 450 747 323 747 289 747 450 748 289 748 451 748 451 749 289 749 288 749 451 750 288 750 452 750 452 751 288 751 290 751 452 752 290 752 453 752 453 753 290 753 291 753 453 754 291 754 454 754 454 755 291 755 292 755 454 756 292 756 455 756 455 757 292 757 293 757 455 758 293 758 456 758 456 759 293 759 294 759 456 760 294 760 457 760 457 761 294 761 295 761 457 762 295 762 458 762 458 763 295 763 296 763 458 764 296 764 459 764 459 765 296 765 297 765 459 766 297 766 460 766 460 767 297 767 298 767 460 768 298 768 461 768 461 769 298 769 299 769 461 770 299 770 462 770 462 771 299 771 300 771 462 772 300 772 463 772 463 773 300 773 301 773 463 774 301 774 464 774 464 775 301 775 302 775 464 776 302 776 465 776 465 777 302 777 303 777 465 778 303 778 466 778 466 779 303 779 304 779 466 780 304 780 467 780 467 781 304 781 305 781 467 782 305 782 432 782 432 783 305 783 306 783 339 784 468 784 338 784 338 785 468 785 469 785 338 786 469 786 337 786 337 787 469 787 470 787 337 788 470 788 336 788 336 789 470 789 471 789 336 790 471 790 335 790 335 791 471 791 472 791 335 792 472 792 334 792 334 793 472 793 473 793 334 794 473 794 333 794 333 795 473 795 474 795 333 796 474 796 332 796 332 797 474 797 475 797 332 798 475 798 331 798 331 799 475 799 476 799 331 800 476 800 330 800 330 801 476 801 477 801 330 802 477 802 329 802 329 803 477 803 478 803 329 804 478 804 328 804 328 805 478 805 479 805 328 806 479 806 327 806 327 807 479 807 480 807 327 808 480 808 326 808 326 809 480 809 481 809 326 810 481 810 325 810 325 811 481 811 482 811 325 812 482 812 324 812 324 813 482 813 483 813 324 814 483 814 359 814 359 815 483 815 484 815 359 816 484 816 358 816 358 817 484 817 485 817 358 818 485 818 357 818 357 819 485 819 486 819 357 820 486 820 356 820 356 821 486 821 487 821 356 822 487 822 355 822 355 823 487 823 488 823 355 824 488 824 354 824 354 825 488 825 489 825 354 826 489 826 353 826 353 827 489 827 490 827 353 828 490 828 352 828 352 829 490 829 491 829 352 830 491 830 351 830 351 831 491 831 492 831 351 832 492 832 350 832 350 833 492 833 493 833 350 834 493 834 349 834 349 835 493 835 494 835 349 836 494 836 348 836 348 837 494 837 495 837 348 838 495 838 347 838 347 839 495 839 496 839 347 840 496 840 346 840 346 841 496 841 497 841 346 842 497 842 345 842 345 843 497 843 498 843 345 844 498 844 344 844 344 845 498 845 499 845 344 846 499 846 343 846 343 847 499 847 500 847 343 848 500 848 342 848 342 849 500 849 501 849 342 850 501 850 341 850 341 851 501 851 502 851 341 852 502 852 340 852 340 853 502 853 503 853 340 854 503 854 339 854 339 855 503 855 468 855 394 856 504 856 393 856 393 857 504 857 505 857 393 858 505 858 392 858 392 859 505 859 506 859 392 860 506 860 391 860 391 861 506 861 507 861 391 862 507 862 390 862 390 863 507 863 508 863 390 864 508 864 389 864 389 865 508 865 509 865 389 866 509 866 388 866 388 867 509 867 510 867 388 868 510 868 387 868 387 869 510 869 511 869 387 870 511 870 386 870 386 871 511 871 512 871 386 872 512 872 385 872 385 873 512 873 513 873 385 874 513 874 384 874 384 875 513 875 514 875 384 876 514 876 383 876 383 877 514 877 515 877 383 878 515 878 382 878 382 879 515 879 516 879 382 880 516 880 381 880 381 881 516 881 517 881 381 882 517 882 380 882 380 883 517 883 518 883 380 884 518 884 379 884 379 885 518 885 519 885 379 886 519 886 378 886 378 887 519 887 520 887 378 888 520 888 377 888 377 889 520 889 521 889 377 890 521 890 376 890 376 891 521 891 522 891 376 892 522 892 375 892 375 893 522 893 523 893 375 894 523 894 374 894 374 895 523 895 524 895 374 896 524 896 373 896 373 897 524 897 525 897 373 898 525 898 372 898 372 899 525 899 526 899 372 900 526 900 371 900 371 901 526 901 527 901 371 902 527 902 370 902 370 903 527 903 528 903 370 904 528 904 369 904 369 905 528 905 529 905 369 906 529 906 368 906 368 907 529 907 530 907 368 908 530 908 367 908 367 909 530 909 531 909 367 910 531 910 366 910 366 911 531 911 532 911 366 912 532 912 365 912 365 913 532 913 533 913 365 914 533 914 364 914 364 915 533 915 534 915 364 916 534 916 363 916 363 917 534 917 535 917 363 918 535 918 362 918 362 919 535 919 536 919 362 920 536 920 361 920 361 921 536 921 537 921 361 922 537 922 360 922 360 923 537 923 538 923 360 924 538 924 395 924 395 925 538 925 539 925 395 926 539 926 394 926 394 927 539 927 504 927 540 928 431 928 541 928 541 929 431 929 396 929 541 930 396 930 542 930 542 931 396 931 397 931 542 932 397 932 543 932 543 933 397 933 398 933 543 934 398 934 544 934 544 935 398 935 399 935 544 936 399 936 545 936 545 937 399 937 400 937 545 938 400 938 546 938 546 939 400 939 401 939 546 940 401 940 547 940 547 941 401 941 402 941 547 942 402 942 548 942 548 943 402 943 403 943 548 944 403 944 549 944 549 945 403 945 404 945 549 946 404 946 550 946 550 947 404 947 405 947 550 948 405 948 551 948 551 949 405 949 406 949 551 950 406 950 552 950 552 951 406 951 407 951 552 952 407 952 553 952 553 953 407 953 408 953 553 954 408 954 554 954 554 955 408 955 409 955 554 956 409 956 555 956 555 957 409 957 410 957 555 958 410 958 556 958 556 959 410 959 411 959 556 960 411 960 557 960 557 961 411 961 412 961 557 962 412 962 558 962 558 963 412 963 413 963 558 964 413 964 559 964 559 965 413 965 414 965 559 966 414 966 560 966 560 967 414 967 415 967 560 968 415 968 561 968 561 969 415 969 416 969 561 970 416 970 562 970 562 971 416 971 417 971 562 972 417 972 563 972 563 973 417 973 418 973 563 974 418 974 564 974 564 975 418 975 419 975 564 976 419 976 565 976 565 977 419 977 420 977 565 978 420 978 566 978 566 979 420 979 421 979 566 980 421 980 567 980 567 981 421 981 422 981 567 982 422 982 568 982 568 983 422 983 423 983 568 984 423 984 569 984 569 985 423 985 424 985 569 986 424 986 570 986 570 987 424 987 425 987 570 988 425 988 571 988 571 989 425 989 426 989 571 990 426 990 572 990 572 991 426 991 427 991 572 992 427 992 573 992 573 993 427 993 428 993 573 994 428 994 574 994 574 995 428 995 429 995 574 996 429 996 575 996 575 997 429 997 430 997 575 998 430 998 540 998 540 999 430 999 431 999 576 1000 577 1000 578 1000 578 1001 577 1001 579 1001 578 1002 579 1002 580 1002 580 1003 579 1003 581 1003 580 1004 581 1004 582 1004 582 1005 581 1005 583 1005 582 1006 583 1006 584 1006 584 1007 583 1007 585 1007 584 1008 585 1008 586 1008 586 1009 585 1009 587 1009 586 1010 587 1010 588 1010 588 1011 587 1011 589 1011 588 1012 589 1012 590 1012 590 1013 589 1013 591 1013 590 1014 591 1014 592 1014 592 1015 591 1015 593 1015 592 1016 593 1016 594 1016 594 1017 593 1017 595 1017 594 1018 595 1018 596 1018 596 1019 595 1019 597 1019 596 1020 597 1020 598 1020 598 1021 597 1021 599 1021 598 1022 599 1022 600 1022 600 1023 599 1023 601 1023 600 1024 601 1024 602 1024 602 1025 601 1025 603 1025 602 1026 603 1026 604 1026 604 1027 603 1027 605 1027 604 1028 605 1028 606 1028 606 1029 605 1029 607 1029 606 1030 607 1030 608 1030 608 1031 607 1031 609 1031 608 1032 609 1032 610 1032 610 1033 609 1033 611 1033 610 1034 611 1034 612 1034 612 1035 611 1035 613 1035 612 1036 613 1036 614 1036 614 1037 613 1037 615 1037 614 1038 615 1038 616 1038 616 1039 615 1039 617 1039 616 1040 617 1040 618 1040 618 1041 617 1041 619 1041 618 1042 619 1042 620 1042 620 1043 619 1043 621 1043 620 1044 621 1044 622 1044 622 1045 621 1045 623 1045 622 1046 623 1046 624 1046 624 1047 623 1047 625 1047 624 1048 625 1048 626 1048 626 1049 625 1049 627 1049 626 1050 627 1050 628 1050 628 1051 627 1051 629 1051 628 1052 629 1052 630 1052 630 1053 629 1053 631 1053 630 1054 631 1054 632 1054 632 1055 631 1055 633 1055 632 1056 633 1056 634 1056 634 1057 633 1057 635 1057 634 1058 635 1058 636 1058 636 1059 635 1059 637 1059 636 1060 637 1060 638 1060 638 1061 637 1061 639 1061 638 1062 639 1062 640 1062 640 1063 639 1063 641 1063 640 1064 641 1064 642 1064 642 1065 641 1065 643 1065 642 1066 643 1066 644 1066 644 1067 643 1067 645 1067 644 1068 645 1068 646 1068 646 1069 645 1069 647 1069 646 1070 647 1070 576 1070 576 1071 647 1071 577 1071 648 1072 649 1072 650 1072 650 1073 649 1073 651 1073 650 1074 651 1074 652 1074 652 1075 651 1075 653 1075 652 1076 653 1076 654 1076 654 1077 653 1077 655 1077 654 1078 655 1078 656 1078 656 1079 655 1079 657 1079 656 1080 657 1080 658 1080 658 1081 657 1081 659 1081 658 1082 659 1082 660 1082 660 1083 659 1083 661 1083 660 1084 661 1084 662 1084 662 1085 661 1085 663 1085 662 1086 663 1086 664 1086 664 1087 663 1087 665 1087 664 1088 665 1088 666 1088 666 1089 665 1089 667 1089 666 1090 667 1090 668 1090 668 1091 667 1091 669 1091 668 1092 669 1092 670 1092 670 1093 669 1093 671 1093 670 1094 671 1094 672 1094 672 1095 671 1095 673 1095 672 1096 673 1096 674 1096 674 1097 673 1097 675 1097 674 1098 675 1098 676 1098 676 1099 675 1099 677 1099 676 1100 677 1100 678 1100 678 1101 677 1101 679 1101 678 1102 679 1102 680 1102 680 1103 679 1103 681 1103 680 1104 681 1104 682 1104 682 1105 681 1105 683 1105 682 1106 683 1106 684 1106 684 1107 683 1107 685 1107 684 1108 685 1108 686 1108 686 1109 685 1109 687 1109 686 1110 687 1110 688 1110 688 1111 687 1111 689 1111 688 1112 689 1112 690 1112 690 1113 689 1113 691 1113 690 1114 691 1114 692 1114 692 1115 691 1115 693 1115 692 1116 693 1116 694 1116 694 1117 693 1117 695 1117 694 1118 695 1118 696 1118 696 1119 695 1119 697 1119 696 1120 697 1120 698 1120 698 1121 697 1121 699 1121 698 1122 699 1122 700 1122 700 1123 699 1123 701 1123 700 1124 701 1124 702 1124 702 1125 701 1125 703 1125 702 1126 703 1126 704 1126 704 1127 703 1127 705 1127 704 1128 705 1128 706 1128 706 1129 705 1129 707 1129 706 1130 707 1130 708 1130 708 1131 707 1131 709 1131 708 1132 709 1132 710 1132 710 1133 709 1133 711 1133 710 1134 711 1134 712 1134 712 1135 711 1135 713 1135 712 1136 713 1136 714 1136 714 1137 713 1137 715 1137 714 1138 715 1138 716 1138 716 1139 715 1139 717 1139 716 1140 717 1140 718 1140 718 1141 717 1141 719 1141 718 1142 719 1142 648 1142 648 1143 719 1143 649 1143

+
+ + + + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +

446 1226 447 1226 804 1226 492 1227 491 1227 805 1227 452 1228 453 1228 495 1228 495 1229 453 1229 454 1229 495 1230 454 1230 455 1230 805 1231 485 1231 484 1231 804 1232 447 1232 806 1232 806 1233 447 1233 448 1233 806 1234 448 1234 807 1234 807 1235 448 1235 449 1235 807 1236 449 1236 805 1236 805 1237 449 1237 450 1237 805 1238 450 1238 451 1238 488 1239 487 1239 805 1239 805 1240 487 1240 486 1240 805 1241 486 1241 485 1241 452 1242 495 1242 451 1242 451 1243 495 1243 494 1243 451 1244 494 1244 805 1244 805 1245 494 1245 493 1245 805 1246 493 1246 492 1246 491 1247 490 1247 805 1247 805 1248 490 1248 489 1248 805 1249 489 1249 488 1249 484 1250 483 1250 805 1250 805 1251 483 1251 482 1251 805 1252 482 1252 769 1252 769 1253 482 1253 481 1253 769 1254 481 1254 480 1254 455 1255 456 1255 495 1255 495 1256 456 1256 457 1256 495 1257 457 1257 458 1257 458 1258 459 1258 495 1258 495 1259 459 1259 460 1259 495 1260 460 1260 734 1260 734 1261 460 1261 461 1261 734 1262 461 1262 462 1262 480 1263 479 1263 769 1263 769 1264 479 1264 478 1264 769 1265 478 1265 770 1265 770 1266 478 1266 477 1266 770 1267 477 1267 772 1267 772 1268 477 1268 476 1268 772 1269 476 1269 774 1269 774 1270 476 1270 475 1270 774 1271 475 1271 776 1271 776 1272 475 1272 474 1272 776 1273 474 1273 778 1273 778 1274 474 1274 473 1274 778 1275 473 1275 780 1275 780 1276 473 1276 472 1276 780 1277 472 1277 782 1277 782 1278 472 1278 471 1278 782 1279 471 1279 784 1279 784 1280 471 1280 470 1280 784 1281 470 1281 786 1281 786 1282 470 1282 469 1282 786 1283 469 1283 788 1283 788 1284 469 1284 468 1284 788 1285 468 1285 790 1285 790 1286 468 1286 503 1286 790 1287 503 1287 792 1287 792 1288 503 1288 502 1288 792 1289 502 1289 794 1289 794 1290 502 1290 501 1290 794 1291 501 1291 796 1291 796 1292 501 1292 500 1292 796 1293 500 1293 798 1293 798 1294 500 1294 499 1294 798 1295 499 1295 800 1295 800 1296 499 1296 498 1296 800 1297 498 1297 802 1297 802 1298 498 1298 497 1298 802 1299 497 1299 734 1299 734 1300 497 1300 496 1300 734 1301 496 1301 495 1301 462 1302 463 1302 734 1302 734 1303 463 1303 464 1303 734 1304 464 1304 730 1304 730 1305 464 1305 465 1305 730 1306 465 1306 466 1306 804 1307 808 1307 446 1307 446 1308 808 1308 809 1308 446 1309 809 1309 445 1309 445 1310 809 1310 810 1310 445 1311 810 1311 444 1311 444 1312 810 1312 811 1312 444 1313 811 1313 443 1313 443 1314 811 1314 812 1314 443 1315 812 1315 442 1315 442 1316 812 1316 813 1316 442 1317 813 1317 441 1317 441 1318 813 1318 814 1318 441 1319 814 1319 440 1319 440 1320 814 1320 815 1320 440 1321 815 1321 439 1321 439 1322 815 1322 816 1322 439 1323 816 1323 438 1323 438 1324 816 1324 817 1324 438 1325 817 1325 437 1325 437 1326 817 1326 818 1326 437 1327 818 1327 436 1327 436 1328 818 1328 819 1328 436 1329 819 1329 435 1329 435 1330 819 1330 820 1330 435 1331 820 1331 434 1331 434 1332 820 1332 821 1332 434 1333 821 1333 433 1333 433 1334 821 1334 822 1334 433 1335 822 1335 432 1335 432 1336 822 1336 730 1336 432 1337 730 1337 467 1337 467 1338 730 1338 466 1338 900 1569 525 1569 899 1569 899 1570 525 1570 524 1570 899 1571 524 1571 523 1571 523 1572 522 1572 899 1572 899 1573 522 1573 521 1573 899 1574 521 1574 898 1574 898 1575 521 1575 520 1575 898 1576 520 1576 897 1576 897 1577 520 1577 519 1577 897 1578 519 1578 896 1578 896 1579 519 1579 518 1579 896 1580 518 1580 895 1580 895 1581 518 1581 517 1581 895 1582 517 1582 894 1582 894 1583 517 1583 516 1583 894 1584 516 1584 893 1584 531 1585 565 1585 737 1585 737 1586 565 1586 566 1586 737 1587 566 1587 567 1587 551 1588 900 1588 550 1588 550 1589 900 1589 901 1589 550 1590 901 1590 549 1590 549 1591 901 1591 902 1591 549 1592 902 1592 548 1592 548 1593 902 1593 903 1593 548 1594 903 1594 547 1594 547 1595 903 1595 904 1595 547 1596 904 1596 546 1596 546 1597 904 1597 905 1597 546 1598 905 1598 545 1598 545 1599 905 1599 906 1599 545 1600 906 1600 544 1600 544 1601 906 1601 907 1601 544 1602 907 1602 543 1602 543 1603 907 1603 908 1603 543 1604 908 1604 542 1604 542 1605 908 1605 909 1605 542 1606 909 1606 541 1606 541 1607 909 1607 910 1607 541 1608 910 1608 540 1608 540 1609 910 1609 911 1609 540 1610 911 1610 575 1610 575 1611 911 1611 912 1611 575 1612 912 1612 574 1612 574 1613 912 1613 913 1613 574 1614 913 1614 573 1614 573 1615 913 1615 914 1615 573 1616 914 1616 572 1616 572 1617 914 1617 915 1617 572 1618 915 1618 571 1618 571 1619 915 1619 916 1619 571 1620 916 1620 570 1620 570 1621 916 1621 917 1621 570 1622 917 1622 569 1622 569 1623 917 1623 737 1623 569 1624 737 1624 568 1624 568 1625 737 1625 567 1625 893 1626 516 1626 892 1626 892 1627 516 1627 515 1627 892 1628 515 1628 891 1628 891 1629 515 1629 514 1629 891 1630 514 1630 890 1630 890 1631 514 1631 513 1631 890 1632 513 1632 889 1632 889 1633 513 1633 512 1633 889 1634 512 1634 888 1634 888 1635 512 1635 511 1635 888 1636 511 1636 887 1636 887 1637 511 1637 510 1637 887 1638 510 1638 886 1638 886 1639 510 1639 509 1639 886 1640 509 1640 885 1640 885 1641 509 1641 508 1641 885 1642 508 1642 884 1642 884 1643 508 1643 507 1643 884 1644 507 1644 883 1644 883 1645 507 1645 506 1645 883 1646 506 1646 882 1646 882 1647 506 1647 505 1647 882 1648 505 1648 881 1648 881 1649 505 1649 504 1649 881 1650 504 1650 725 1650 725 1651 504 1651 539 1651 725 1652 539 1652 538 1652 528 1653 527 1653 900 1653 900 1654 527 1654 526 1654 900 1655 526 1655 525 1655 534 1656 533 1656 737 1656 737 1657 533 1657 532 1657 737 1658 532 1658 531 1658 530 1659 556 1659 557 1659 551 1660 552 1660 900 1660 900 1661 552 1661 553 1661 900 1662 553 1662 554 1662 538 1663 537 1663 725 1663 725 1664 537 1664 536 1664 725 1665 536 1665 737 1665 737 1666 536 1666 535 1666 737 1667 535 1667 534 1667 557 1668 558 1668 530 1668 530 1669 558 1669 559 1669 530 1670 559 1670 531 1670 559 1671 560 1671 531 1671 531 1672 560 1672 561 1672 531 1673 561 1673 562 1673 528 1674 900 1674 529 1674 529 1675 900 1675 554 1675 529 1676 554 1676 530 1676 530 1677 554 1677 555 1677 530 1678 555 1678 556 1678 562 1679 563 1679 531 1679 531 1680 563 1680 564 1680 531 1681 564 1681 565 1681

+
+
+
+
+ + + + + 0.6858805 -0.3173701 0.6548619 7.481132 0.7276338 0.3124686 -0.6106656 -6.50764 -0.01081678 0.8953432 0.4452454 5.343665 0 0 0 1 + + + + -0.2908646 -0.7711008 0.5663932 4.076245 0.9551712 -0.1998834 0.2183912 1.005454 -0.05518906 0.6045247 0.7946723 5.903862 0 0 0 1 + + + + 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/kortex_description/grippers/robotiq_2f_85/meshes/visual/robotiq_85_finger_tip_link.dae b/kortex_description/grippers/robotiq_2f_85/meshes/visual/robotiq_85_finger_tip_link.dae new file mode 100644 index 00000000..3fd6fda5 --- /dev/null +++ b/kortex_description/grippers/robotiq_2f_85/meshes/visual/robotiq_85_finger_tip_link.dae @@ -0,0 +1,142 @@ + + + + + Blender User + Blender 2.74.0 commit date:2015-03-31, commit time:13:39, hash:000dfc0 + + 2015-09-16T11:19:37 + 2015-09-16T11:19:37 + + Z_UP + + + + + + + + + 0 0 0 1 + + + 0 0 0 1 + + + 0.04 0.04 0.04 1 + + + 0.5 0.5 0.5 1 + + + 50 + + + 1 + + + + + + + + + + + 0 0 0 1 + + + 0 0 0 1 + + + 0.44 0.44 0.44 1 + + + 0.5 0.5 0.5 1 + + + 50 + + + 1 1 1 1 + + + 0.2 + + + 1 + + + + + + + + + + + + + + + + + + + -0.007383942 -0.02282512 0.007499992 -0.006515681 -0.02290111 0.007499992 -0.01084572 -0.02040094 0.007499992 -0.004015624 -0.02223134 0.007499992 -0.00330168 -0.02173149 0.007499992 -0.00268507 -0.01468735 0.007499992 -0.003301322 -0.01407104 0.007499992 -0.004015266 -0.01357108 0.007499992 -0.004805147 -0.01320272 0.007499992 -0.005647003 -0.01297712 0.007499992 -0.006515204 -0.01290112 0.007499992 -0.007383465 -0.01297706 0.007499992 -0.01034581 -0.02111488 0.007499992 -0.009729564 -0.02173119 0.007499992 -0.00564742 -0.02282518 0.007499992 -0.004805564 -0.02259963 0.007499992 -0.01143944 -0.01703268 0.007499992 -0.01151543 -0.01790088 0.007499992 -0.01143956 -0.01876914 0.007499992 -0.009015619 -0.02223116 0.007499992 -0.008225739 -0.02259951 0.007499992 -0.002685368 -0.02111524 0.007499992 -0.002185463 -0.02040129 0.007499992 -0.001817047 -0.01961141 0.007499992 -0.001591444 -0.01876956 0.007499992 -0.001515448 -0.01790136 0.007499992 -0.001591384 -0.0170331 0.007499992 -0.001816928 -0.01619124 0.007499992 -0.002185225 -0.0154013 0.007499992 -0.008225321 -0.0132026 0.007499992 -0.009015262 -0.0135709 0.007499992 -0.009729206 -0.01407074 0.007499992 -0.01034551 -0.014687 0.007499992 -0.01084548 -0.01540094 0.007499992 -0.01121401 -0.019611 0.007499992 -0.01121383 -0.01619082 0.007499992 0.003214061 0.003830075 0.007499992 0.002500176 0.004329979 0.007499992 -0.002500176 -0.004329979 0.007499992 0.001710295 0.004698336 0.007499992 0.003830313 0.003213763 0.007499992 -0.001710295 -0.004698336 0.007499992 -8.6846e-4 -0.004923999 0.007499992 8.6846e-4 0.004923999 0.007499992 2.22638e-7 0.004999995 0.007499992 -8.68022e-4 0.004924058 0.007499992 0.003830075 -0.003214061 0.007499992 0.004329979 -0.002500176 0.007499992 -2.22495e-7 -0.004999995 0.007499992 8.68021e-4 -0.004924058 0.007499992 0.001709878 -0.004698514 0.007499992 -0.001709878 0.004698514 0.007499992 -0.002499759 0.004330217 0.007499992 -0.003214061 -0.003830075 0.007499992 -0.003213763 0.003830313 0.007499992 -0.003830075 0.003214061 0.007499992 0.004924058 8.68022e-4 0.007499992 0.004698514 0.001709878 0.007499992 0.004999995 -2.23661e-7 0.007499992 0.004923999 -8.68459e-4 0.007499992 0.004698336 -0.001710295 0.007499992 0.004330217 0.002499759 0.007499992 0.002499759 -0.004330217 0.007499992 0.003213763 -0.003830313 0.007499992 -0.004698336 0.001710295 0.007499992 -0.004698514 -0.001709878 0.007499992 -0.004330217 -0.002499759 0.007499992 -0.004923999 8.6846e-4 0.007499992 -0.004999995 2.21472e-7 0.007499992 -0.004924058 -8.6802e-4 0.007499992 -0.004329979 0.002500176 0.007499992 -0.003830313 -0.003213763 0.007499992 -0.004015624 -0.02223134 -0.007499992 -0.004805564 -0.02259963 -0.007499992 -0.01034551 -0.014687 -0.007499992 -0.009015262 -0.0135709 -0.007499992 -0.008225321 -0.0132026 -0.007499992 -0.002685368 -0.02111524 -0.007499992 -0.001817047 -0.01961141 -0.007499992 -0.002185463 -0.02040129 -0.007499992 -0.004805147 -0.01320272 -0.007499992 -0.005647003 -0.01297712 -0.007499992 -0.00330168 -0.02173149 -0.007499992 -0.007383465 -0.01297706 -0.007499992 -0.006515204 -0.01290112 -0.007499992 -0.00564742 -0.02282518 -0.007499992 -0.006515681 -0.02290111 -0.007499992 -0.007383942 -0.02282512 -0.007499992 -0.008225739 -0.02259951 -0.007499992 -0.009015619 -0.02223116 -0.007499992 -0.009729564 -0.02173119 -0.007499992 -0.009729206 -0.01407074 -0.007499992 -0.004015266 -0.01357108 -0.007499992 -0.003301322 -0.01407104 -0.007499992 -0.00268507 -0.01468735 -0.007499992 -0.001816928 -0.01619124 -0.007499992 -0.001591384 -0.0170331 -0.007499992 -0.001515448 -0.01790136 -0.007499992 -0.002185225 -0.0154013 -0.007499992 -0.001591444 -0.01876956 -0.007499992 -0.01034581 -0.02111488 -0.007499992 -0.01084572 -0.02040094 -0.007499992 -0.01121401 -0.019611 -0.007499992 -0.01143956 -0.01876914 -0.007499992 -0.01151543 -0.01790088 -0.007499992 -0.01084548 -0.01540094 -0.007499992 -0.01143944 -0.01703268 -0.007499992 -0.01121383 -0.01619082 -0.007499992 -2.22495e-7 -0.004999995 -0.007499992 -0.001709878 0.004698514 -0.007499992 8.68021e-4 -0.004924058 -0.007499992 0.001709878 -0.004698514 -0.007499992 -8.68022e-4 0.004924058 -0.007499992 2.22638e-7 0.004999995 -0.007499992 8.6846e-4 0.004923999 -0.007499992 0.004698514 0.001709878 -0.007499992 0.004924058 8.68022e-4 -0.007499992 -8.6846e-4 -0.004923999 -0.007499992 -0.003213763 0.003830313 -0.007499992 -0.002499759 0.004330217 -0.007499992 -0.004698336 0.001710295 -0.007499992 -0.004329979 0.002500176 -0.007499992 -0.004330217 -0.002499759 -0.007499992 -0.001710295 -0.004698336 -0.007499992 -0.002500176 -0.004329979 -0.007499992 -0.003214061 -0.003830075 -0.007499992 -0.004698514 -0.001709878 -0.007499992 -0.004924058 -8.6802e-4 -0.007499992 -0.004999995 2.21472e-7 -0.007499992 -0.003830313 -0.003213763 -0.007499992 -0.003830075 0.003214061 -0.007499992 0.001710295 0.004698336 -0.007499992 0.002500176 0.004329979 -0.007499992 0.003214061 0.003830075 -0.007499992 0.003830313 0.003213763 -0.007499992 0.004330217 0.002499759 -0.007499992 0.004999995 -2.23661e-7 -0.007499992 0.004923999 -8.68459e-4 -0.007499992 0.004698336 -0.001710295 -0.007499992 0.004329979 -0.002500176 -0.007499992 0.003830075 -0.003214061 -0.007499992 0.002499759 -0.004330217 -0.007499992 0.003213763 -0.003830313 -0.007499992 -0.004923999 8.6846e-4 -0.007499992 0.02629935 -0.003999948 5.64357e-4 0.02625 -0.005999982 0 0.02625 -0.003999948 0 0.02629935 -0.005999982 -5.64357e-4 0.02629935 -0.003999948 -5.64357e-4 0.02644598 -0.005999982 -0.001111507 0.02644598 -0.003999948 -0.001111507 0.02668541 -0.005999982 -0.001624941 0.02668541 -0.003999948 -0.001624941 0.02701032 -0.005999982 -0.002089023 0.02701032 -0.003999948 -0.002089023 0.02741092 -0.005999982 -0.002489626 0.02741092 -0.003999948 -0.002489626 0.027875 -0.005999982 -0.002814531 0.027875 -0.003999948 -0.002814531 0.02838844 -0.005999982 -0.003053963 0.02838844 -0.003999948 -0.003053963 0.02893561 -0.005999982 -0.00320059 0.02893561 -0.003999948 -0.00320059 0.02949994 -0.005999982 -0.003249943 0.02949994 -0.003999948 -0.003249943 0.03006434 -0.005999982 -0.00320059 0.03006434 -0.003999948 -0.00320059 0.03061151 -0.005999982 -0.003053963 0.03061151 -0.003999948 -0.003053963 0.03112494 -0.005999982 -0.002814531 0.03112494 -0.003999948 -0.002814531 0.03158903 -0.005999982 -0.002489626 0.03158903 -0.003999948 -0.002489626 0.03198963 -0.005999982 -0.002089023 0.03198963 -0.003999948 -0.002089023 0.03231453 -0.005999982 -0.001624941 0.03231453 -0.003999948 -0.001624941 0.03255397 -0.005999982 -0.001111507 0.03255397 -0.003999948 -0.001111507 0.03270059 -0.005999982 -5.64357e-4 0.03270059 -0.003999948 -5.64357e-4 0.03274995 -0.005999982 0 0.03274995 -0.003999948 0 0.03270059 -0.005999982 5.64357e-4 0.03270059 -0.003999948 5.64357e-4 0.03255397 -0.005999982 0.001111507 0.03255397 -0.003999948 0.001111507 0.03231453 -0.005999982 0.001624941 0.03231453 -0.003999948 0.001624941 0.03198963 -0.005999982 0.002089023 0.03198963 -0.003999948 0.002089023 0.03158903 -0.005999982 0.002489626 0.03158903 -0.003999948 0.002489626 0.03112494 -0.005999982 0.002814531 0.03112494 -0.003999948 0.002814531 0.03061151 -0.005999982 0.003053963 0.03061151 -0.003999948 0.003053963 0.03006434 -0.005999982 0.00320059 0.03006434 -0.003999948 0.00320059 0.02949994 -0.005999982 0.003249943 0.02949994 -0.003999948 0.003249943 0.02893561 -0.005999982 0.00320059 0.02893561 -0.003999948 0.00320059 0.02838844 -0.005999982 0.003053963 0.02838844 -0.003999948 0.003053963 0.027875 -0.005999982 0.002814531 0.027875 -0.003999948 0.002814531 0.02741092 -0.005999982 0.002489626 0.02741092 -0.003999948 0.002489626 0.02701032 -0.005999982 0.002089023 0.02701032 -0.003999948 0.002089023 0.02668541 -0.005999982 0.001624941 0.02668541 -0.003999948 0.001624941 0.02644598 -0.005999982 0.001111507 0.02644598 -0.003999948 0.001111507 0.02629935 -0.005999982 5.64357e-4 0.01029932 -0.003999948 5.64357e-4 0.01024997 -0.005999982 0 0.01024997 -0.003999948 0 0.01029932 -0.005999982 -5.64357e-4 0.01029932 -0.003999948 -5.64357e-4 0.01044595 -0.005999982 -0.001111507 0.01044595 -0.003999948 -0.001111507 0.01068538 -0.005999982 -0.001624941 0.01068538 -0.003999948 -0.001624941 0.01101034 -0.005999982 -0.002089023 0.01101034 -0.003999948 -0.002089023 0.01141089 -0.005999982 -0.002489626 0.01141089 -0.003999948 -0.002489626 0.01187497 -0.005999982 -0.002814531 0.01187497 -0.003999948 -0.002814531 0.0123884 -0.005999982 -0.003053963 0.0123884 -0.003999948 -0.003053963 0.01293563 -0.005999982 -0.00320059 0.01293563 -0.003999948 -0.00320059 0.01349997 -0.005999982 -0.003249943 0.01349997 -0.003999948 -0.003249943 0.01406431 -0.005999982 -0.00320059 0.01406431 -0.003999948 -0.00320059 0.01461154 -0.005999982 -0.003053963 0.01461154 -0.003999948 -0.003053963 0.01512497 -0.005999982 -0.002814531 0.01512497 -0.003999948 -0.002814531 0.01558905 -0.005999982 -0.002489626 0.01558905 -0.003999948 -0.002489626 0.0159896 -0.005999982 -0.002089023 0.0159896 -0.003999948 -0.002089023 0.01631456 -0.005999982 -0.001624941 0.01631456 -0.003999948 -0.001624941 0.01655399 -0.005999982 -0.001111507 0.01655399 -0.003999948 -0.001111507 0.01670062 -0.005999982 -5.64357e-4 0.01670062 -0.003999948 -5.64357e-4 0.01674997 -0.005999982 0 0.01674997 -0.003999948 0 0.01670062 -0.005999982 5.64357e-4 0.01670062 -0.003999948 5.64357e-4 0.01655399 -0.005999982 0.001111507 0.01655399 -0.003999948 0.001111507 0.01631456 -0.005999982 0.001624941 0.01631456 -0.003999948 0.001624941 0.0159896 -0.005999982 0.002089023 0.0159896 -0.003999948 0.002089023 0.01558905 -0.005999982 0.002489626 0.01558905 -0.003999948 0.002489626 0.01512497 -0.005999982 0.002814531 0.01512497 -0.003999948 0.002814531 0.01461154 -0.005999982 0.003053963 0.01461154 -0.003999948 0.003053963 0.01406431 -0.005999982 0.00320059 0.01406431 -0.003999948 0.00320059 0.01349997 -0.005999982 0.003249943 0.01349997 -0.003999948 0.003249943 0.01293563 -0.005999982 0.00320059 0.01293563 -0.003999948 0.00320059 0.0123884 -0.005999982 0.003053963 0.0123884 -0.003999948 0.003053963 0.01187497 -0.005999982 0.002814531 0.01187497 -0.003999948 0.002814531 0.01141089 -0.005999982 0.002489626 0.01141089 -0.003999948 0.002489626 0.01101034 -0.005999982 0.002089023 0.01101034 -0.003999948 0.002089023 0.01068538 -0.005999982 0.001624941 0.01068538 -0.003999948 0.001624941 0.01044595 -0.005999982 0.001111507 0.01044595 -0.003999948 0.001111507 0.01029932 -0.005999982 5.64357e-4 0.03008139 -0.003999948 0.001597464 0.02979516 -0.003999948 0.001674115 0.02949994 -0.003999948 0.001699984 0.02920478 -0.003999948 0.001674115 0.02891856 -0.003999948 0.001597464 0.02864998 -0.003999948 0.001472234 0.02840721 -0.003999948 0.001302242 0.0281977 -0.003999948 0.001092731 0.02802771 -0.003999948 8.5e-4 0.02790248 -0.003999948 5.81434e-4 0.02782583 -0.003999948 2.95202e-4 0.02779996 -0.003999948 0 0.02782583 -0.003999948 -2.95202e-4 0.02790248 -0.003999948 -5.81434e-4 0.02802771 -0.003999948 -8.5e-4 0.0281977 -0.003999948 -0.001092731 0.02840721 -0.003999948 -0.001302242 0.02864998 -0.003999948 -0.001472234 0.02891856 -0.003999948 -0.001597464 0.02920478 -0.003999948 -0.001674115 0.02949994 -0.003999948 -0.001699984 0.02979516 -0.003999948 -0.001674115 0.03008139 -0.003999948 -0.001597464 0.03034996 -0.003999948 -0.001472234 0.03059273 -0.003999948 -0.001302242 0.03080224 -0.003999948 -0.001092731 0.03097224 -0.003999948 -8.5e-4 0.03109747 -0.003999948 -5.81434e-4 0.03117412 -0.003999948 -2.95202e-4 0.03119999 -0.003999948 0 0.03117412 -0.003999948 2.95202e-4 0.03109747 -0.003999948 5.81434e-4 0.03097224 -0.003999948 8.5e-4 0.03080224 -0.003999948 0.001092731 0.03059273 -0.003999948 0.001302242 0.03034996 -0.003999948 0.001472234 0.01379519 -0.003999948 -0.001674115 0.01408141 -0.003999948 -0.001597464 0.01434999 -0.003999948 -0.001472234 0.0145927 -0.003999948 -0.001302242 0.01480227 -0.003999948 -0.001092731 0.0149722 -0.003999948 -8.5e-4 0.01509743 -0.003999948 -5.81434e-4 0.01517415 -0.003999948 -2.95202e-4 0.01519995 -0.003999948 0 0.01517415 -0.003999948 2.95202e-4 0.01509743 -0.003999948 5.81434e-4 0.0149722 -0.003999948 8.5e-4 0.01480227 -0.003999948 0.001092731 0.0145927 -0.003999948 0.001302242 0.01434999 -0.003999948 0.001472234 0.01408141 -0.003999948 0.001597464 0.01379519 -0.003999948 0.001674115 0.01349997 -0.003999948 0.001699984 0.01320475 -0.003999948 0.001674115 0.01291853 -0.003999948 0.001597464 0.01264995 -0.003999948 0.001472234 0.01240724 -0.003999948 0.001302242 0.01219767 -0.003999948 0.001092731 0.01202774 -0.003999948 8.5e-4 0.01190251 -0.003999948 5.81434e-4 0.01182579 -0.003999948 2.95202e-4 0.01179999 -0.003999948 0 0.01182579 -0.003999948 -2.95202e-4 0.01190251 -0.003999948 -5.81434e-4 0.01202774 -0.003999948 -8.5e-4 0.01219767 -0.003999948 -0.001092731 0.01240724 -0.003999948 -0.001302242 0.01264995 -0.003999948 -0.001472234 0.01291853 -0.003999948 -0.001597464 0.01320475 -0.003999948 -0.001674115 0.01349997 -0.003999948 -0.001699984 -0.01151543 -0.01790088 0.006999969 -0.01143956 -0.01876914 0.006999969 -0.01121401 -0.019611 0.006999969 -0.01084572 -0.02040094 0.006999969 -0.01034581 -0.02111488 0.006999969 -0.009729564 -0.02173119 0.006999969 -0.009015619 -0.02223116 0.006999969 -0.008225739 -0.02259951 0.006999969 -0.007383942 -0.02282512 0.006999969 -0.006515681 -0.02290111 0.006999969 -0.00564742 -0.02282518 0.006999969 -0.004805564 -0.02259963 0.006999969 -0.004015624 -0.02223134 0.006999969 -0.00330168 -0.02173149 0.006999969 -0.002685368 -0.02111524 0.006999969 -0.002185463 -0.02040129 0.006999969 -0.001817047 -0.01961141 0.006999969 -0.001591444 -0.01876956 0.006999969 -0.001515448 -0.01790136 0.006999969 -0.001591384 -0.0170331 0.006999969 -0.001816928 -0.01619124 0.006999969 -0.002185225 -0.0154013 0.006999969 -0.00268507 -0.01468735 0.006999969 -0.003301322 -0.01407104 0.006999969 -0.004015266 -0.01357108 0.006999969 -0.004805147 -0.01320272 0.006999969 -0.005647003 -0.01297712 0.006999969 -0.006515204 -0.01290112 0.006999969 -0.007383465 -0.01297706 0.006999969 -0.008225321 -0.0132026 0.006999969 -0.009015262 -0.0135709 0.006999969 -0.009729206 -0.01407074 0.006999969 -0.01034551 -0.014687 0.006999969 -0.01084548 -0.01540094 0.006999969 -0.01121383 -0.01619082 0.006999969 -0.01143944 -0.01703268 0.006999969 0.02361398 -0.005999982 0.006999969 0.02361398 0.000999987 0.006999969 0.02360635 0.000999987 0.006913125 0.02360635 -0.005999982 0.006913125 0.02358382 0.000999987 0.006828963 0.02358382 -0.005999982 0.006828963 0.02354699 10e-4 0.006749987 0.02354699 -0.005999982 0.006749987 0.02349698 0.000999987 0.006678581 0.02349698 -0.005999982 0.006678581 0.02343535 0.000999987 0.00661695 0.02343535 -0.005999982 0.00661695 0.02336394 0.000999987 0.006566941 0.02336394 -0.005999982 0.006566941 0.02328497 0.000999987 0.006530106 0.02328497 -0.005999982 0.006530106 0.0232008 0.000999987 0.006507575 0.0232008 -0.005999982 0.006507575 0.02311396 0.000999987 0.006499946 0.02311396 -0.005999982 0.006499946 0.02302712 0.000999987 0.006507575 0.02302718 -0.005999982 0.006507575 0.02294296 0.000999987 0.006530106 0.02294296 -0.005999982 0.006530106 0.02286398 0.000999987 0.006566941 0.02286398 -0.005999982 0.006566941 0.02279257 10e-4 0.00661695 0.02279257 -0.005999982 0.00661695 0.02273094 9.99999e-4 0.006678581 0.02273094 -0.005999982 0.006678581 0.02268093 0.000999987 0.006749987 0.02268093 -0.005999982 0.006749987 0.0226441 9.99999e-4 0.006828963 0.0226441 -0.005999982 0.006828963 0.02262157 10e-4 0.006913125 0.02262157 -0.005999982 0.006913125 0.022614 0.000999987 0.006999969 0.022614 -0.005999982 0.006999969 -0.004999995 2.21472e-7 0.006999969 -0.004924058 -8.6802e-4 0.006999969 -0.004698514 -0.001709878 0.006999969 -0.004330217 -0.002499759 0.006999969 -0.003830313 -0.003213763 0.006999969 -0.003214061 -0.003830075 0.006999969 -0.002500176 -0.004329979 0.006999969 -0.001710295 -0.004698336 0.006999969 -8.6846e-4 -0.004923999 0.006999969 -2.22495e-7 -0.004999995 0.006999969 8.68021e-4 -0.004924058 0.006999969 0.001709878 -0.004698514 0.006999969 0.002499759 -0.004330217 0.006999969 0.003213763 -0.003830313 0.006999969 0.003830075 -0.003214061 0.006999969 0.004329979 -0.002500176 0.006999969 0.004698336 -0.001710295 0.006999969 0.004923999 -8.68459e-4 0.006999969 0.004999995 -2.23661e-7 0.006999969 0.004924058 8.68022e-4 0.006999969 0.004698514 0.001709878 0.006999969 0.004330217 0.002499759 0.006999969 0.003830313 0.003213763 0.006999969 0.003214061 0.003830075 0.006999969 0.002500176 0.004329979 0.006999969 0.001710295 0.004698336 0.006999969 8.6846e-4 0.004923999 0.006999969 2.22638e-7 0.004999995 0.006999969 -8.68022e-4 0.004924058 0.006999969 -0.001709878 0.004698514 0.006999969 -0.002499759 0.004330217 0.006999969 -0.003213763 0.003830313 0.006999969 -0.003830075 0.003214061 0.006999969 -0.004329979 0.002500176 0.006999969 -0.004698336 0.001710295 0.006999969 -0.004923999 8.6846e-4 0.006999969 -0.001515448 -0.01790136 -0.006999969 -0.001591444 -0.01876956 -0.006999969 -0.001817047 -0.01961141 -0.006999969 -0.002185463 -0.02040129 -0.006999969 -0.002685368 -0.02111524 -0.006999969 -0.00330168 -0.02173149 -0.006999969 -0.004015624 -0.02223134 -0.006999969 -0.004805564 -0.02259963 -0.006999969 -0.00564742 -0.02282518 -0.006999969 -0.006515681 -0.02290111 -0.006999969 -0.007383942 -0.02282512 -0.006999969 -0.008225739 -0.02259951 -0.006999969 -0.009015619 -0.02223116 -0.006999969 -0.009729564 -0.02173119 -0.006999969 -0.01034581 -0.02111488 -0.006999969 -0.01084572 -0.02040094 -0.006999969 -0.01121401 -0.019611 -0.006999969 -0.01143956 -0.01876914 -0.006999969 -0.01151543 -0.01790088 -0.006999969 -0.01143944 -0.01703268 -0.006999969 -0.01121383 -0.01619082 -0.006999969 -0.01084548 -0.01540094 -0.006999969 -0.01034551 -0.014687 -0.006999969 -0.009729206 -0.01407074 -0.006999969 -0.009015262 -0.0135709 -0.006999969 -0.008225321 -0.0132026 -0.006999969 -0.007383465 -0.01297706 -0.006999969 -0.006515204 -0.01290112 -0.006999969 -0.005647003 -0.01297712 -0.006999969 -0.004805147 -0.01320272 -0.006999969 -0.004015266 -0.01357108 -0.006999969 -0.003301322 -0.01407104 -0.006999969 -0.00268507 -0.01468735 -0.006999969 -0.002185225 -0.0154013 -0.006999969 -0.001816928 -0.01619124 -0.006999969 -0.001591384 -0.0170331 -0.006999969 0.004999995 -2.23661e-7 -0.006999969 0.004923999 -8.68459e-4 -0.006999969 0.004698336 -0.001710295 -0.006999969 0.004329979 -0.002500176 -0.006999969 0.003830075 -0.003214061 -0.006999969 0.003213763 -0.003830313 -0.006999969 0.002499759 -0.004330217 -0.006999969 0.001709878 -0.004698514 -0.006999969 8.68021e-4 -0.004924058 -0.006999969 -2.22495e-7 -0.004999995 -0.006999969 -8.6846e-4 -0.004923999 -0.006999969 -0.001710295 -0.004698336 -0.006999969 -0.002500176 -0.004329979 -0.006999969 -0.003214061 -0.003830075 -0.006999969 -0.003830313 -0.003213763 -0.006999969 -0.004330217 -0.002499759 -0.006999969 -0.004698514 -0.001709878 -0.006999969 -0.004924058 -8.6802e-4 -0.006999969 -0.004999995 2.21472e-7 -0.006999969 -0.004923999 8.6846e-4 -0.006999969 -0.004698336 0.001710295 -0.006999969 -0.004329979 0.002500176 -0.006999969 -0.003830075 0.003214061 -0.006999969 -0.003213763 0.003830313 -0.006999969 -0.002499759 0.004330217 -0.006999969 -0.001709878 0.004698514 -0.006999969 -8.68022e-4 0.004924058 -0.006999969 2.22638e-7 0.004999995 -0.006999969 8.6846e-4 0.004923999 -0.006999969 0.001710295 0.004698336 -0.006999969 0.002500176 0.004329979 -0.006999969 0.003214061 0.003830075 -0.006999969 0.003830313 0.003213763 -0.006999969 0.004330217 0.002499759 -0.006999969 0.004698514 0.001709878 -0.006999969 0.004924058 8.68022e-4 -0.006999969 0 0.005999982 -0.006999969 0 0.005999982 0.006999969 0.006999969 0.005999982 -0.006999969 0.006999969 0.005999982 0.006999969 -0.001041889 0.005908846 -0.006999969 -0.001041889 0.005908846 0.006999969 -0.002052068 0.005638122 -0.006999969 -0.002052068 0.005638122 0.006999969 -0.002999961 0.005196094 -0.006999969 -0.002999961 0.005196094 0.006999969 -0.003856718 0.004596233 -0.006999969 -0.003856718 0.004596233 0.006999969 -0.004596233 0.003856718 -0.006999969 -0.004596233 0.003856718 0.006999969 -0.005196094 0.002999961 -0.006999969 -0.005196094 0.002999961 0.006999969 -0.005638122 0.002052068 -0.006999969 -0.005638122 0.002052068 0.006999969 -0.01215362 -0.01584899 0.006999969 -0.01215362 -0.01584899 -0.006999969 -0.01242429 -0.01685923 -0.006999969 -0.01242429 -0.01685923 0.006999969 -0.01251548 -0.01790112 -0.006999969 -0.01251548 -0.01790112 0.006999969 -0.01242429 -0.01894301 -0.006999969 -0.01242429 -0.01894301 0.006999969 -0.01215362 -0.01995325 -0.006999969 -0.01215362 -0.01995325 0.006999969 -0.01171159 -0.02090114 -0.006999969 -0.01171159 -0.02090114 0.006999969 -0.01111173 -0.02175784 -0.006999969 -0.01111173 -0.02175784 0.006999969 -0.01037216 -0.02249741 -0.006999969 -0.01037216 -0.02249741 0.006999969 -0.009515464 -0.02309727 -0.006999969 -0.009515464 -0.02309727 0.006999969 -0.008567571 -0.02353924 -0.006999969 -0.008567571 -0.02353924 0.006999969 -0.007557332 -0.02380996 -0.006999969 -0.007557332 -0.02380996 0.006999969 -0.006515443 -0.0239011 -0.006999969 -0.006515443 -0.0239011 0.006999969 -0.005473554 -0.02380996 -0.006999969 -0.005473554 -0.02380996 0.006999969 -0.004463315 -0.0235393 -0.006999969 -0.004463315 -0.0235393 0.006999969 -0.003515481 -0.02309727 -0.006999969 -0.003515481 -0.02309727 0.006999969 -0.002658724 -0.02249741 -0.006999969 -0.002658724 -0.02249741 0.006999969 -0.001919209 -0.02175784 -0.006999969 -0.001919209 -0.02175784 0.006999969 -0.001319289 -0.02090114 -0.006999969 -0.001319289 -0.02090114 0.006999969 -8.77328e-4 -0.01995325 -0.006999969 -8.77328e-4 -0.01995325 0.006999969 0.002285361 -0.01126378 0.006999969 0.002285361 -0.01126378 -0.006999969 0.009802877 -0.005999982 -0.006999969 0.009802877 -0.005999982 0.006999969 0.00858587 -0.006093084 0.006999969 0.00858587 -0.006093084 -0.006999969 0.007397234 -0.006370246 0.006999969 0.007397234 -0.006370246 -0.006999969 0.006264567 -0.00682497 0.006999969 0.006264567 -0.00682497 -0.006999969 0.005214273 -0.007446765 0.006999969 0.005214273 -0.007446765 -0.006999969 0.004270792 -0.00822103 0.006999969 0.004270792 -0.00822103 -0.006999969 0.003456056 -0.009129881 0.006999969 0.003456056 -0.009129881 -0.006999969 0.00278908 -0.01015204 0.006999969 0.00278908 -0.01015204 -0.006999969 0.022614 -0.005999982 -0.006999969 0.022614 0.000999987 -0.006999969 0.02262157 10e-4 -0.006913125 0.02262157 -0.005999982 -0.006913125 0.0226441 9.99999e-4 -0.006828963 0.0226441 -0.005999982 -0.006828963 0.02268093 0.000999987 -0.006749987 0.02268093 -0.005999982 -0.006749987 0.02273094 9.99999e-4 -0.006678581 0.02273094 -0.005999982 -0.006678581 0.02279257 10e-4 -0.00661695 0.02279257 -0.005999982 -0.00661695 0.02286398 0.000999987 -0.006566941 0.02286398 -0.005999982 -0.006566941 0.02294296 0.000999987 -0.006530106 0.02294296 -0.005999982 -0.006530106 0.02302712 0.000999987 -0.006507575 0.02302718 -0.005999982 -0.006507575 0.02311396 0.000999987 -0.006499946 0.02311396 -0.005999982 -0.006499946 0.0232008 0.000999987 -0.006507575 0.0232008 -0.005999982 -0.006507575 0.02328497 0.000999987 -0.006530106 0.02328497 -0.005999982 -0.006530106 0.02336394 0.000999987 -0.006566941 0.02336394 -0.005999982 -0.006566941 0.02343535 0.000999987 -0.00661695 0.02343535 -0.005999982 -0.00661695 0.02349698 0.000999987 -0.006678581 0.02349698 -0.005999982 -0.006678581 0.02354699 10e-4 -0.006749987 0.02354699 -0.005999982 -0.006749987 0.02358382 0.000999987 -0.006828963 0.02358382 -0.005999982 -0.006828963 0.02360635 0.000999987 -0.006913125 0.02360635 -0.005999982 -0.006913125 0.02361398 0.000999987 -0.006999969 0.02361398 -0.005999982 -0.006999969 0.02667796 -0.005999982 -0.006999969 0.02667796 0.000999987 -0.006999969 0.02668559 0.000999987 -0.006913125 0.02668559 -0.005999982 -0.006913125 0.02670812 0.000999987 -0.006828963 0.02670812 -0.005999982 -0.006828963 0.02674496 9.99999e-4 -0.006749987 0.02674496 -0.005999982 -0.006749987 0.02679497 0.000999987 -0.006678581 0.02679497 -0.005999982 -0.006678581 0.0268566 0.000999987 -0.00661695 0.0268566 -0.005999982 -0.00661695 0.02692794 0.000999987 -0.006566941 0.02692794 -0.005999982 -0.006566941 0.02700698 9.99998e-4 -0.006530106 0.02700698 -0.005999982 -0.006530106 0.02709114 9.99998e-4 -0.006507575 0.02709114 -0.005999982 -0.006507575 0.02717798 0.000999987 -0.006499946 0.02717798 -0.005999982 -0.006499946 0.02726477 0.000999987 -0.006507575 0.02726477 -0.005999982 -0.006507575 0.02734899 0.000999987 -0.006530106 0.02734899 -0.005999982 -0.006530106 0.02742797 0.000999987 -0.006566941 0.02742797 -0.005999982 -0.006566941 0.02749937 9.99999e-4 -0.00661695 0.02749937 -0.005999982 -0.00661695 0.027561 10e-4 -0.006678581 0.027561 -0.005999982 -0.006678581 0.02761101 0.000999987 -0.006749987 0.02761101 -0.005999982 -0.006749987 0.02764779 10e-4 -0.006828963 0.02764785 -0.005999982 -0.006828963 0.02767038 9.99999e-4 -0.006913125 0.02767038 -0.005999982 -0.006913125 0.02767795 0.000999987 -0.006999969 0.02767795 -0.005999982 -0.006999969 0.02767795 -0.005999982 0.006999969 0.02767795 0.000999987 0.006999969 0.02767115 9.99999e-4 0.006917655 0.02767115 -0.005999982 0.006917655 0.02765089 9.99999e-4 0.006837606 0.02765089 -0.005999982 0.006837606 0.02761769 0.000999987 0.006761968 0.02761769 -0.005999982 0.006761968 0.02757257 9.99999e-4 0.006692886 0.02757257 -0.005999982 0.006692886 0.0275166 0.000999987 0.006632089 0.0275166 -0.005999982 0.006632089 0.02745145 0.000999987 0.006581366 0.02745145 -0.005999982 0.006581366 0.02737879 0.000999987 0.006542086 0.02737879 -0.005999982 0.006542086 0.02730071 0.000999987 0.006515264 0.02730071 -0.005999982 0.006515264 0.02721923 0.000999987 0.006501674 0.02721929 -0.005999982 0.006501674 0.02713668 10e-4 0.006501674 0.02713668 -0.005999982 0.006501674 0.0270552 10e-4 0.006515264 0.02705526 -0.005999982 0.006515264 0.02697712 10e-4 0.006542086 0.02697712 -0.005999982 0.006542086 0.02690452 9.99999e-4 0.006581366 0.02690452 -0.005999982 0.006581366 0.02683931 9.99998e-4 0.006632089 0.02683931 -0.005999982 0.006632089 0.0267834 0.000999987 0.006692886 0.0267834 -0.005999982 0.006692886 0.02673822 9.99999e-4 0.006761968 0.02673822 -0.005999982 0.006761968 0.02670508 0.000999987 0.006837606 0.02670508 -0.005999982 0.006837606 0.02668482 0.000999987 0.006917655 0.02668482 -0.005999982 0.006917655 0.02667796 0.000999987 0.006999969 0.02667796 -0.005999982 0.006999969 0.03299999 -0.005999982 -0.006999969 0.01674997 -0.005999982 0 0.02020096 -0.005999982 -7.5e-4 0.02009046 -0.005999982 -5.1303e-4 0.022013 -0.005999982 0.00140953 0.02224999 -0.005999982 0.001299023 0.02246415 -0.005999982 0.001149058 0.02035093 -0.005999982 9.64181e-4 0.02053576 -0.005999982 0.001149058 0.02009046 -0.005999982 5.1303e-4 0.02020096 -0.005999982 7.5e-4 0.02002274 -0.005999982 -2.60472e-4 0.01999998 -0.005999982 0 0.02002274 -0.005999982 2.60472e-4 0.03299999 -0.005999982 0.006999969 0.03274995 -0.005999982 0 0.02074998 -0.005999982 0.001299023 0.02098697 -0.005999982 0.00140953 0.02123951 -0.005999982 0.001477181 0.02149999 -0.005999982 0.00149995 0.02176046 -0.005999982 0.001477181 0.02290952 -0.005999982 5.1303e-4 0.02297717 -0.005999982 2.60472e-4 0.023 -0.005999982 0 0.02279901 -0.005999982 7.5e-4 0.02176046 -0.005999982 -0.001477181 0.02149999 -0.005999982 -0.00149995 0.02123951 -0.005999982 -0.001477181 0.02098697 -0.005999982 -0.00140953 0.02074998 -0.005999982 -0.001299023 0.02053576 -0.005999982 -0.001149058 0.02035093 -0.005999982 -9.64181e-4 0.02264904 -0.005999982 9.64181e-4 0.02297717 -0.005999982 -2.60472e-4 0.02290952 -0.005999982 -5.1303e-4 0.02279901 -0.005999982 -7.5e-4 0.02264904 -0.005999982 -9.64181e-4 0.02246415 -0.005999982 -0.001149058 0.02224999 -0.005999982 -0.001299023 0.022013 -0.005999982 -0.00140953 0.03799998 -0.003999948 0.006999969 0.03799998 -0.003999948 -0.006999969 0.02782577 9.99999e-4 2.95202e-4 0.02779996 0.000999987 0 0.02782577 9.99999e-4 -2.95202e-4 0.02790248 9.99999e-4 -5.81434e-4 0.02802771 0.000999987 -8.5e-4 0.0281977 0.000999987 -0.001092731 0.02840721 9.99999e-4 -0.001302242 0.02864998 10e-4 -0.001472234 0.02891856 9.99999e-4 -0.001597464 0.02920478 0.000999987 -0.001674115 0.02949994 9.99999e-4 -0.001699984 0.02979516 0.000999987 -0.001674115 0.03008139 9.99999e-4 -0.001597464 0.03034996 9.99999e-4 -0.001472234 0.03059273 9.99999e-4 -0.001302242 0.03080224 0.000999987 -0.001092731 0.03097224 0.000999987 -8.5e-4 0.03109747 9.99999e-4 -5.81434e-4 0.03117412 9.99999e-4 -2.95202e-4 0.03119999 0.000999987 0 0.03117412 9.99999e-4 2.95202e-4 0.03109747 9.99999e-4 5.81434e-4 0.03097224 0.000999987 8.5e-4 0.03080224 0.000999987 0.001092731 0.03059273 9.99999e-4 0.001302242 0.03034996 9.99999e-4 0.001472234 0.03008139 9.99999e-4 0.001597464 0.02979516 0.000999987 0.001674115 0.02949994 9.99999e-4 0.001699984 0.02920478 0.000999987 0.001674115 0.02891856 9.99999e-4 0.001597464 0.02864998 10e-4 0.001472234 0.02840721 9.99999e-4 0.001302242 0.0281977 0.000999987 0.001092731 0.02802771 0.000999987 8.5e-4 0.02790248 9.99999e-4 5.81434e-4 0.01182579 10e-4 2.95202e-4 0.01179999 0.000999987 0 0.01182579 10e-4 -2.95202e-4 0.01190251 0.000999987 -5.81434e-4 0.01202774 9.99998e-4 -8.5e-4 0.01219767 0.000999987 -0.001092731 0.01240724 10e-4 -0.001302242 0.01264995 0.000999987 -0.001472234 0.01291853 10e-4 -0.001597464 0.01320475 0.000999987 -0.001674115 0.01349997 10e-4 -0.001699984 0.01379519 0.000999987 -0.001674115 0.01408141 10e-4 -0.001597464 0.01434999 9.99999e-4 -0.001472234 0.0145927 10e-4 -0.001302242 0.01480227 0.000999987 -0.001092731 0.0149722 0.000999987 -8.5e-4 0.01509743 9.99999e-4 -5.81434e-4 0.01517415 10e-4 -2.95202e-4 0.01519995 9.99999e-4 0 0.01517415 10e-4 2.95202e-4 0.01509743 9.99999e-4 5.81434e-4 0.0149722 0.000999987 8.5e-4 0.01480227 0.000999987 0.001092731 0.0145927 10e-4 0.001302242 0.01434999 9.99999e-4 0.001472234 0.01408141 10e-4 0.001597464 0.01379519 0.000999987 0.001674115 0.01349997 10e-4 0.001699984 0.01320475 0.000999987 0.001674115 0.01291853 10e-4 0.001597464 0.01264995 0.000999987 0.001472234 0.01240724 10e-4 0.001302242 0.01219767 0.000999987 0.001092731 0.01202774 9.99998e-4 8.5e-4 0.01190251 0.000999987 5.81434e-4 0.023 0.000999987 0 0.02297717 9.99999e-4 -2.60472e-4 0.02290952 0.000999987 -5.1303e-4 0.02279901 9.99999e-4 -7.5e-4 0.02264904 9.99999e-4 -9.64181e-4 0.02246415 9.99999e-4 -0.001149058 0.02224999 0.000999987 -0.001299023 0.022013 0.000999987 -0.00140953 0.02176046 0.000999987 -0.001477181 0.02149999 0.000999987 -0.00149995 0.02123951 0.000999987 -0.001477181 0.02098697 0.000999987 -0.00140953 0.02074998 0.000999987 -0.001299023 0.02053576 9.99999e-4 -0.001149058 0.02035093 0.000999987 -9.64181e-4 0.0202009 9.99999e-4 -7.5e-4 0.02009046 0.000999987 -5.1303e-4 0.02002274 0.000999987 -2.60472e-4 0.01999998 0.000999987 0 0.01999998 -0.005999982 0 0.02002274 0.000999987 2.60472e-4 0.02009046 0.000999987 5.1303e-4 0.0202009 9.99999e-4 7.5e-4 0.02035093 0.000999987 9.64181e-4 0.02053576 9.99999e-4 0.001149058 0.02074998 0.000999987 0.001299023 0.02098697 0.000999987 0.00140953 0.02123951 0.000999987 0.001477181 0.02149999 0.000999987 0.00149995 0.02176046 0.000999987 0.001477181 0.022013 0.000999987 0.00140953 0.02224999 0.000999987 0.001299023 0.02246415 9.99999e-4 0.001149058 0.02264904 9.99999e-4 9.64181e-4 0.02279901 9.99999e-4 7.5e-4 0.02290952 0.000999987 5.1303e-4 0.02297717 9.99999e-4 2.60472e-4 0.006999969 9.99999e-4 0.006999969 0.006999969 9.99999e-4 -0.006999969 0.03799998 0.000999987 -0.006999969 0.03799998 0.000999987 0.006999969 0.03119999 0.000999987 0 0.01519995 9.99999e-4 0 0.01999998 0.000999987 0 -0.007712364 -0.01461213 0.006999969 -0.007123053 -0.01445424 0.006999969 -0.009546637 -0.01965099 0.006999969 -0.005318522 -0.0211901 0.006999969 -0.005907833 -0.02134799 0.006999969 -0.003484308 -0.01615124 0.006999969 -0.006515622 -0.0214011 0.006999969 -0.007123351 -0.02134793 0.006999969 -0.008265316 -0.01486992 0.006999969 -0.006515324 -0.01440113 0.006999969 -0.005907535 -0.0144543 0.006999969 -0.005318224 -0.01461225 0.006999969 -0.007712662 -0.02118998 0.006999969 -0.008265614 -0.02093213 0.006999969 -0.008765339 -0.02058219 0.006999969 -0.009196698 -0.02015078 0.006999969 -0.003834187 -0.01565146 0.006999969 -0.00476557 -0.02093231 0.006999969 -0.003226459 -0.0167042 0.006999969 -0.003068625 -0.01729351 0.006999969 -0.009804427 -0.01909804 0.006999969 -0.00996232 -0.01850873 0.006999969 -0.009196519 -0.01565122 0.006999969 -0.01001548 -0.01790094 0.006999969 -0.00996226 -0.01729321 0.006999969 -0.009804308 -0.0167039 0.006999969 -0.009546458 -0.01615101 0.006999969 -0.008765101 -0.01521986 0.006999969 -0.004765331 -0.0148701 0.006999969 -0.004265606 -0.01522004 0.006999969 -0.003015458 -0.0179013 0.006999969 -0.003068625 -0.01850903 0.006999969 -0.003226578 -0.01909834 0.006999969 -0.003484427 -0.01965123 0.006999969 -0.003834426 -0.02015101 0.006999969 -0.004265844 -0.02058237 0.006999969 -0.003561019 -0.01738029 0.006499946 -0.003696322 -0.0168752 0.006499946 -0.003917336 -0.01640123 0.006499946 -0.004217207 -0.01597285 0.006499946 -0.004586994 -0.01560306 0.006499946 -0.005015313 -0.01530313 0.006499946 -0.005489289 -0.01508206 0.006499946 -0.005994379 -0.01494669 0.006499946 -0.006515324 -0.0149011 0.006499946 -0.007036268 -0.01494669 0.006499946 -0.007541418 -0.015082 0.006499946 -0.008015334 -0.01530295 0.006499946 -0.008443713 -0.01560288 0.006499946 -0.0088135 -0.01597267 0.006499946 -0.00911349 -0.01640099 0.006499946 -0.009334504 -0.0168749 0.006499946 -0.009469866 -0.01738005 0.006499946 -0.009515464 -0.017901 0.006499946 -0.009469926 -0.01842194 0.006499946 -0.009334564 -0.01892703 0.006499946 -0.009113609 -0.01940101 0.006499946 -0.008813679 -0.01982939 0.006499946 -0.008443892 -0.02019917 0.006499946 -0.008015573 -0.02049911 0.006499946 -0.007541656 -0.02072012 0.006499946 -0.007036507 -0.02085554 0.006499946 -0.006515562 -0.02090114 0.006499946 -0.005994617 -0.02085554 0.006499946 -0.005489528 -0.02072024 0.006499946 -0.005015552 -0.02049928 0.006499946 -0.004587173 -0.02019935 0.006499946 -0.004217386 -0.01982957 0.006499946 -0.003917455 -0.01940125 0.006499946 -0.003696441 -0.01892727 0.006499946 -0.003561079 -0.01842218 0.006499946 -0.003515481 -0.01790124 0.006499946 -0.009469866 -0.01738005 -0.006499946 -0.00996226 -0.01729321 -0.006999969 -0.009334504 -0.0168749 -0.006499946 -0.009804308 -0.0167039 -0.006999969 -0.00911349 -0.01640099 -0.006499946 -0.009546458 -0.01615101 -0.006999969 -0.0088135 -0.01597267 -0.006499946 -0.009196519 -0.01565122 -0.006999969 -0.008443713 -0.01560288 -0.006499946 -0.008765101 -0.01521986 -0.006999969 -0.008015334 -0.01530295 -0.006499946 -0.008265316 -0.01486992 -0.006999969 -0.007541418 -0.015082 -0.006499946 -0.007712364 -0.01461213 -0.006999969 -0.007036268 -0.01494669 -0.006499946 -0.007123053 -0.01445424 -0.006999969 -0.006515324 -0.0149011 -0.006499946 -0.006515324 -0.01440113 -0.006999969 -0.005994379 -0.01494669 -0.006499946 -0.005907535 -0.0144543 -0.006999969 -0.005489289 -0.01508206 -0.006499946 -0.005318224 -0.01461225 -0.006999969 -0.005015313 -0.01530313 -0.006499946 -0.004765331 -0.0148701 -0.006999969 -0.004586994 -0.01560306 -0.006499946 -0.004265606 -0.01522004 -0.006999969 -0.004217207 -0.01597285 -0.006499946 -0.003834187 -0.01565146 -0.006999969 -0.003917336 -0.01640123 -0.006499946 -0.003484308 -0.01615124 -0.006999969 -0.003696322 -0.0168752 -0.006499946 -0.003226459 -0.0167042 -0.006999969 -0.003561019 -0.01738029 -0.006499946 -0.003068625 -0.01729351 -0.006999969 -0.003515481 -0.01790124 -0.006499946 -0.003015458 -0.0179013 -0.006999969 -0.003561079 -0.01842218 -0.006499946 -0.003068625 -0.01850903 -0.006999969 -0.003696441 -0.01892727 -0.006499946 -0.003226578 -0.01909834 -0.006999969 -0.003917455 -0.01940125 -0.006499946 -0.003484427 -0.01965123 -0.006999969 -0.004217386 -0.01982957 -0.006499946 -0.003834426 -0.02015101 -0.006999969 -0.004587173 -0.02019935 -0.006499946 -0.004265844 -0.02058237 -0.006999969 -0.005015552 -0.02049928 -0.006499946 -0.00476557 -0.02093231 -0.006999969 -0.005489528 -0.02072024 -0.006499946 -0.005318522 -0.0211901 -0.006999969 -0.005994617 -0.02085554 -0.006499946 -0.005907833 -0.02134799 -0.006999969 -0.006515562 -0.02090114 -0.006499946 -0.006515622 -0.0214011 -0.006999969 -0.007036507 -0.02085554 -0.006499946 -0.007123351 -0.02134793 -0.006999969 -0.007541656 -0.02072012 -0.006499946 -0.007712662 -0.02118998 -0.006999969 -0.008015573 -0.02049911 -0.006499946 -0.008265614 -0.02093213 -0.006999969 -0.008443892 -0.02019917 -0.006499946 -0.008765339 -0.02058219 -0.006999969 -0.008813679 -0.01982939 -0.006499946 -0.009196698 -0.02015078 -0.006999969 -0.009113609 -0.01940101 -0.006499946 -0.009546637 -0.01965099 -0.006999969 -0.009334564 -0.01892703 -0.006499946 -0.009804427 -0.01909804 -0.006999969 -0.009469926 -0.01842194 -0.006499946 -0.00996232 -0.01850873 -0.006999969 -0.009515464 -0.017901 -0.006499946 -0.01001548 -0.01790094 -0.006999969 -0.001750111 -0.003030955 0.006999969 -0.002249836 -0.002681016 0.006999969 0.002249836 0.002681016 0.006999969 1.55868e-7 0.003499984 0.006999969 6.07922e-4 0.003446757 0.006999969 -0.003446757 6.07922e-4 0.006999969 -0.002681255 -0.002249598 0.006999969 -0.003031134 -0.001749813 0.006999969 -0.003288924 -0.00119692 0.006999969 0.001749813 -0.003031134 0.006999969 0.00119692 -0.003288924 0.006999969 6.07616e-4 -0.003446817 0.006999969 -1.55725e-7 -0.003499984 0.006999969 0.001197159 0.003288865 0.006999969 0.001750111 0.003030955 0.006999969 0.002249598 -0.002681255 0.006999969 0.002681255 0.002249598 0.006999969 0.003031134 0.001749813 0.006999969 -6.07922e-4 -0.003446757 0.006999969 -0.001197159 -0.003288865 0.006999969 -0.003446817 -6.07614e-4 0.006999969 -0.003499984 1.54702e-7 0.006999969 -0.002249598 0.002681255 0.006999969 -0.001749813 0.003031134 0.006999969 0.003288924 0.00119692 0.006999969 0.003446817 6.07615e-4 0.006999969 0.002681016 -0.002249836 0.006999969 0.003030955 -0.001750111 0.006999969 -0.003288865 0.001197159 0.006999969 -0.003030955 0.001750111 0.006999969 -0.002681016 0.002249836 0.006999969 -0.00119692 0.003288924 0.006999969 -6.07615e-4 0.003446817 0.006999969 0.003288865 -0.001197159 0.006999969 0.003499984 -1.56891e-7 0.006999969 0.003446757 -6.07921e-4 0.006999969 6.07922e-4 0.003446757 -0.006999969 1.55868e-7 0.003499984 -0.006999969 6.07616e-4 -0.003446817 -0.006999969 -0.002249598 0.002681255 -0.006999969 -0.002681016 0.002249836 -0.006999969 -0.002249836 -0.002681016 -0.006999969 -0.001197159 -0.003288865 -0.006999969 -6.07922e-4 -0.003446757 -0.006999969 -0.00119692 0.003288924 -0.006999969 -0.001749813 0.003031134 -0.006999969 -6.07615e-4 0.003446817 -0.006999969 -1.55725e-7 -0.003499984 -0.006999969 0.00119692 -0.003288924 -0.006999969 0.003031134 0.001749813 -0.006999969 0.002681255 0.002249598 -0.006999969 0.002249836 0.002681016 -0.006999969 0.001750111 0.003030955 -0.006999969 0.001197159 0.003288865 -0.006999969 -0.001750111 -0.003030955 -0.006999969 -0.003288924 -0.00119692 -0.006999969 -0.003446817 -6.07614e-4 -0.006999969 -0.003499984 1.54702e-7 -0.006999969 -0.003031134 -0.001749813 -0.006999969 -0.002681255 -0.002249598 -0.006999969 0.001749813 -0.003031134 -0.006999969 0.002249598 -0.002681255 -0.006999969 0.002681016 -0.002249836 -0.006999969 -0.003030955 0.001750111 -0.006999969 -0.003288865 0.001197159 -0.006999969 -0.003446757 6.07922e-4 -0.006999969 0.003030955 -0.001750111 -0.006999969 0.003288865 -0.001197159 -0.006999969 0.003446757 -6.07921e-4 -0.006999969 0.003499984 -1.56891e-7 -0.006999969 0.003446817 6.07615e-4 -0.006999969 0.003288924 0.00119692 -0.006999969 0.002954423 5.20812e-4 0.006499946 0.00281912 0.001025915 0.006499946 0.002598106 0.001499831 0.006499946 0.002298176 0.00192821 0.006499946 0.001928448 0.002297997 0.006499946 0.00150007 0.002597987 0.006499946 0.001026153 0.002819001 0.006499946 5.21076e-4 0.002954363 0.006499946 1.33612e-7 0.002999961 0.006499946 -5.20813e-4 0.002954423 0.006499946 -0.001025915 0.00281912 0.006499946 -0.001499831 0.002598106 0.006499946 -0.00192821 0.002298176 0.006499946 -0.002297997 0.001928448 0.006499946 -0.002597987 0.00150007 0.006499946 -0.002819001 0.001026153 0.006499946 -0.002954363 5.21075e-4 0.006499946 -0.002999961 1.32446e-7 0.006499946 -0.002954423 -5.20814e-4 0.006499946 -0.00281912 -0.001025915 0.006499946 -0.002598106 -0.001499831 0.006499946 -0.002298176 -0.00192821 0.006499946 -0.001928448 -0.002297997 0.006499946 -0.00150007 -0.002597987 0.006499946 -0.001026153 -0.002819001 0.006499946 -5.21076e-4 -0.002954363 0.006499946 -1.33469e-7 -0.002999961 0.006499946 5.20813e-4 -0.002954423 0.006499946 0.001025915 -0.00281912 0.006499946 0.001499831 -0.002598106 0.006499946 0.00192821 -0.002298176 0.006499946 0.002297997 -0.001928448 0.006499946 0.002597987 -0.00150007 0.006499946 0.002819001 -0.001026153 0.006499946 0.002954363 -5.21077e-4 0.006499946 0.002999961 -1.34635e-7 0.006499946 -0.002954363 5.21075e-4 -0.006499946 -0.002819001 0.001026153 -0.006499946 -0.002597987 0.00150007 -0.006499946 -0.002297997 0.001928448 -0.006499946 -0.00192821 0.002298176 -0.006499946 -0.001499831 0.002598106 -0.006499946 -0.001025915 0.00281912 -0.006499946 -5.20813e-4 0.002954423 -0.006499946 1.33612e-7 0.002999961 -0.006499946 5.21076e-4 0.002954363 -0.006499946 0.001026153 0.002819001 -0.006499946 0.00150007 0.002597987 -0.006499946 0.001928448 0.002297997 -0.006499946 0.002298176 0.00192821 -0.006499946 0.002598106 0.001499831 -0.006499946 0.00281912 0.001025915 -0.006499946 0.002954423 5.20812e-4 -0.006499946 0.002999961 -1.34635e-7 -0.006499946 0.002954363 -5.21077e-4 -0.006499946 0.002819001 -0.001026153 -0.006499946 0.002597987 -0.00150007 -0.006499946 0.002297997 -0.001928448 -0.006499946 0.00192821 -0.002298176 -0.006499946 0.001499831 -0.002598106 -0.006499946 0.001025915 -0.00281912 -0.006499946 5.20813e-4 -0.002954423 -0.006499946 -1.33469e-7 -0.002999961 -0.006499946 -5.21076e-4 -0.002954363 -0.006499946 -0.001026153 -0.002819001 -0.006499946 -0.00150007 -0.002597987 -0.006499946 -0.001928448 -0.002297997 -0.006499946 -0.002298176 -0.00192821 -0.006499946 -0.002598106 -0.001499831 -0.006499946 -0.00281912 -0.001025915 -0.006499946 -0.002954423 -5.20814e-4 -0.006499946 -0.002999961 1.32446e-7 -0.006499946 0.03949999 0.007799983 0.01099997 0.006999969 0.007799983 0.01099997 0.03949999 0.000999987 0.01099997 0.006999969 0.000999987 0.01099997 0.04028213 0.000999987 0.0109384 0.04028213 0.007799983 0.0109384 0.04104506 0.000999987 0.01075524 0.04104506 0.007799983 0.01075524 0.04176992 0.000999987 0.01045501 0.04176992 0.007799983 0.01045501 0.04243892 0.000999987 0.01004505 0.04243892 0.007799983 0.01004505 0.0430355 0.000999987 0.009535491 0.0430355 0.007799983 0.009535491 0.04354506 0.000999987 0.008938908 0.04354506 0.007799983 0.008938908 0.04395502 0.000999987 0.008269906 0.04395502 0.007799983 0.008269906 0.04425525 0.000999987 0.007545053 0.04425525 0.007799983 0.007545053 0.04443842 0.000999987 0.006782114 0.04443842 0.007799983 0.006782114 0.04449999 0.000999987 0.005999982 0.04449999 0.007799983 0.005999982 0.04449999 0.007799983 -0.005999982 0.04449999 0.000999987 -0.005999982 0.04443842 0.000999987 -0.006782114 0.04443842 0.007799983 -0.006782114 0.04425525 0.000999987 -0.007545053 0.04425525 0.007799983 -0.007545053 0.04395502 0.000999987 -0.008269906 0.04395502 0.007799983 -0.008269906 0.04354506 0.000999987 -0.008938908 0.04354506 0.007799983 -0.008938908 0.0430355 0.000999987 -0.009535491 0.0430355 0.007799983 -0.009535491 0.04243892 0.000999987 -0.01004505 0.04243892 0.007799983 -0.01004505 0.04176992 0.000999987 -0.01045501 0.04176992 0.007799983 -0.01045501 0.04104506 0.000999987 -0.01075524 0.04104506 0.007799983 -0.01075524 0.04028213 0.000999987 -0.0109384 0.04028213 0.007799983 -0.0109384 0.03949999 0.000999987 -0.01099997 0.03949999 0.007799983 -0.01099997 0.006999969 0.007799983 -0.01099997 0.006999969 0.000999987 -0.01099997 + + + + + + + + + + 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.9961947 0 -0.08715605 0.9961947 0 0.08715605 0.9961947 0 0.08715605 0.9659261 0 0.2588182 0.9659261 0 0.2588182 0.9063063 0 0.4226215 0.9063063 0 0.4226215 0.8191517 0 0.5735769 0.8191517 0 0.5735769 0.7071072 0 0.7071064 0.7071072 0 0.7071064 0.5735768 0 0.8191518 0.5735768 0 0.8191518 0.4226182 0 0.9063078 0.4226182 0 0.9063078 0.2588198 0 0.9659256 0.2588198 0 0.9659256 0.08715581 0 0.9961948 0.08715581 0 0.9961948 -0.08715528 0 0.9961947 -0.08715528 0 0.9961947 -0.2588198 0 0.9659256 -0.2588198 0 0.9659256 -0.4226182 0 0.9063078 -0.4226182 0 0.9063078 -0.5735753 0 0.8191528 -0.5735784 -1.06837e-6 0.8191508 -0.7071072 -1.31709e-6 0.7071064 -0.7071072 -1.31709e-6 0.7071064 -0.8191517 -1.52579e-6 0.5735769 -0.8191517 -1.52579e-6 0.5735769 -0.9063063 -1.68813e-6 0.4226215 -0.9063063 -1.68813e-6 0.4226215 -0.9659261 -1.79918e-6 0.2588182 -0.9659261 -1.79918e-6 0.2588183 -0.9961947 -1.85556e-6 0.08715605 -0.9961947 -1.85556e-6 0.08715605 -0.9961947 -1.85556e-6 -0.08715605 -0.9961947 -1.85556e-6 -0.08715605 -0.9659261 -1.79918e-6 -0.2588182 -0.9659261 -1.79918e-6 -0.2588182 -0.9063063 -1.68813e-6 -0.4226215 -0.9063063 -1.68813e-6 -0.4226215 -0.8191517 -1.52579e-6 -0.5735769 -0.8191517 -1.52579e-6 -0.5735769 -0.7071072 -1.31709e-6 -0.7071064 -0.7071072 -1.31709e-6 -0.7071064 -0.5735753 -1.06837e-6 -0.8191528 -0.5735784 0 -0.8191507 -0.4226182 0 -0.9063078 -0.4226182 0 -0.9063078 -0.2588198 0 -0.9659256 -0.2588198 0 -0.9659256 -0.08715528 0 -0.9961947 -0.08715528 0 -0.9961947 0.08715581 0 -0.9961948 0.08715581 0 -0.9961948 0.2588198 0 -0.9659256 0.2588198 0 -0.9659256 0.4226182 0 -0.9063078 0.4226182 0 -0.9063078 0.5735768 0 -0.8191518 0.5735768 0 -0.8191518 0.7071072 0 -0.7071064 0.7071072 0 -0.7071064 0.8191517 0 -0.5735769 0.8191517 0 -0.5735769 0.9063063 0 -0.4226215 0.9063063 0 -0.4226215 0.9659261 0 -0.2588182 0.9659261 0 -0.2588182 0.9961947 0 -0.08715605 0.9961947 0 -0.08715605 0.9961947 0 0.08715605 0.9961947 0 0.08715605 0.9659261 0 0.2588182 0.9659261 0 0.2588182 0.9063076 0 0.4226188 0.9063076 0 0.4226188 0.8191533 0 0.5735747 0.8191517 -7.62894e-7 0.5735769 0.7071055 -6.58543e-7 0.707108 0.7071072 0 0.7071064 0.5735768 0 0.8191518 0.5735768 0 0.8191518 0.4226182 0 0.9063078 0.4226182 0 0.9063078 0.2588191 0 0.9659259 0.2588191 0 0.9659259 0.08715581 0 0.9961948 0.08715581 0 0.9961948 -0.08715558 0 0.9961948 -0.08715558 0 0.9961948 -0.2588198 0 0.9659256 -0.258819 2.41044e-7 0.9659259 -0.4226182 3.93594e-7 0.9063078 -0.4226182 3.93594e-7 0.9063078 -0.5735753 5.34184e-7 0.8191528 -0.5735768 0 0.8191518 -0.7071072 0 0.7071064 -0.7071072 0 0.7071064 -0.8191517 0 0.5735769 -0.8191518 0 0.5735769 -0.9063088 0 0.4226161 -0.9063076 8.44065e-7 0.4226189 -0.9659252 8.99588e-7 0.2588213 -0.9659261 0 0.2588182 -0.9961947 0 0.08715605 -0.9961947 0 0.08715605 -0.9961947 0 -0.08715605 -0.9961947 0 -0.08715605 -0.9659252 0 -0.2588213 -0.9659261 8.99589e-7 -0.2588182 -0.9063088 8.44066e-7 -0.4226161 -0.9063075 0 -0.4226188 -0.8191518 0 -0.5735769 -0.8191517 0 -0.5735769 -0.7071072 0 -0.7071064 -0.7071072 0 -0.7071064 -0.5735753 0 -0.8191528 -0.5735768 5.34185e-7 -0.8191518 -0.4226182 3.93594e-7 -0.9063078 -0.4226182 3.93594e-7 -0.9063078 -0.2588198 2.41045e-7 -0.9659256 -0.2588191 0 -0.9659259 -0.08715558 0 -0.9961948 -0.08715558 0 -0.9961948 0.08715581 0 -0.9961948 0.08715581 0 -0.9961948 0.2588191 0 -0.9659259 0.2588191 0 -0.9659259 0.4226182 0 -0.9063078 0.4226182 0 -0.9063078 0.5735768 0 -0.8191518 0.5735768 0 -0.8191518 0.7071055 0 -0.707108 0.7071072 -6.58545e-7 -0.7071064 0.8191533 -7.62896e-7 -0.5735747 0.8191517 0 -0.5735769 0.9063076 0 -0.4226188 0.9063076 0 -0.4226188 0.9659261 0 -0.2588182 0.9659261 0 -0.2588182 0.9961947 0 -0.08715605 -4.68106e-6 -1 7.44645e-7 -4.14098e-6 -1 4.25108e-7 4.6341e-6 -1 -1.12218e-6 1.65023e-6 -1 0 6.30979e-6 -1 0 1.5726e-6 -1 8.87416e-7 -4.81651e-6 -1 -2.39161e-7 -3.3356e-6 -1 -2.54936e-7 -3.34694e-6 -1 -2.59064e-7 -9.69476e-7 -1 1.3408e-7 1.02015e-6 -1 1.28279e-6 2.70129e-6 -1 1.87447e-6 5.04678e-6 -1 3.84258e-6 0 -1 1.05857e-6 -4.94068e-7 -1 3.45955e-7 1.65525e-7 -1 8.8755e-7 -3.4282e-6 -1 -5.33695e-6 -3.06872e-6 -1 -4.91769e-6 -1.16519e-6 -1 3.12214e-7 -2.96036e-7 -1 1.78127e-6 -1.14869e-6 -1 -3.05437e-6 1.20171e-6 -1 3.19534e-6 1.20171e-6 -1 3.26e-6 0 -1 -3.3029e-6 -5.82596e-7 -1 -1.56107e-7 -6.00778e-7 -1 -1.86293e-6 -3.25133e-6 -1 5.41942e-6 -3.16123e-6 -1 4.87455e-6 -2.47034e-7 -1 -1.72978e-7 0 -1 -9.7803e-7 3.62933e-6 -1 -5.26003e-6 8.45323e-7 -1 -3.17132e-7 1.38137e-6 -1 -7.66928e-7 2.51235e-6 -1 -2.14431e-6 -2.98708e-6 -1 1.03078e-6 -1.15771e-6 -1 -5.3775e-7 -4.68106e-6 -1 7.44645e-7 -3.40645e-6 -1 0 6.16136e-6 -1 -1.69654e-6 1.65024e-6 -1 0 4.73228e-6 -1 0 1.59888e-6 -1 5.86987e-7 -4.73845e-6 -1 -5.3046e-7 -4.11096e-6 -1 -5.37144e-7 -3.34694e-6 -1 -2.59064e-7 -9.69476e-7 -1 1.3408e-7 1.02015e-6 -1 1.28279e-6 2.7013e-6 -1 1.87447e-6 5.04679e-6 -1 3.84257e-6 8.47508e-7 -1 1.4774e-6 -2.47034e-7 -1 1.72978e-7 4.1256e-7 -1 7.14573e-7 -3.15488e-6 -1 -5.4644e-6 -2.79541e-6 -1 -5.04514e-6 -3.34381e-7 -1 1.71646e-6 -2.96036e-7 -1 1.78127e-6 -1.42261e-6 -1 -4.60783e-6 1.20171e-6 -1 2.37022e-6 1.20171e-6 -1 4.83744e-6 -1.71012e-7 -1 -2.49032e-6 -3.08678e-7 -1 -1.70958e-6 -3.09481e-7 -1 -1.78488e-6 -2.97802e-6 -1 5.54687e-6 -2.88792e-6 -1 5.002e-6 0 -1 0 2.83341e-7 -1 -8.05053e-7 3.84258e-6 -1 -5.04678e-6 1.4774e-6 -1 -8.47507e-7 1.38137e-6 -1 -7.66927e-7 2.51235e-6 -1 -2.14431e-6 -2.98708e-6 -1 1.03078e-6 -1.15771e-6 -1 -5.3775e-7 8.23565e-6 -1 -3.78203e-7 -3.33559e-6 -1 -2.54932e-7 -3.34696e-6 -1 -2.59072e-7 -9.69476e-7 -1 1.34079e-7 1.02015e-6 -1 1.28279e-6 1.89623e-6 -1 1.59113e-6 -4.83354e-6 -1 -4.05582e-6 2.34022e-6 -1 0 4.68256e-7 -1 -2.24624e-6 -2.88792e-6 -1 -5.00202e-6 3.15486e-6 -1 5.46438e-6 -5.3775e-7 -1 1.15771e-6 -3.34381e-7 -1 1.71646e-6 -2.96036e-7 -1 1.78127e-6 -1.14869e-6 -1 -3.05437e-6 9.0128e-7 -1 2.3965e-6 9.0128e-7 -1 3.23372e-6 -1.71012e-7 -1 -2.49032e-6 -3.08678e-7 -1 -1.70957e-6 -3.09481e-7 -1 -1.78488e-6 1.3381e-6 -1 -6.31156e-6 4.12559e-7 -1 -7.14574e-7 -7.88716e-7 -1 1.3661e-6 -2.23042e-6 -1 5.4624e-6 -2.77635e-6 -1 6.11301e-6 1.26416e-6 -1 -1.06075e-6 1.20839e-6 -1 -1.01396e-6 1.79777e-6 -1 -1.73175e-6 -2.9871e-6 -1 1.0308e-6 -1.15771e-6 -1 -5.3775e-7 7.17735e-6 -1 -3.57146e-6 -2.78201e-6 -1 2.32091e-6 -6.05614e-6 -1 2.89823e-6 1.65024e-6 -1 0 6.30974e-6 -1 0 1.5726e-6 -1 8.87414e-7 -6.36997e-6 -1 -5.13073e-7 -3.25753e-6 -1 -5.46231e-7 -1.73721e-6 -1 0 5.76672e-6 -1 1.248e-6 1.03786e-6 -1 -1.48221e-6 -2.98741e-6 -1 -2.89892e-6 5.04678e-6 -1 3.84258e-6 8.47508e-7 -1 1.4774e-6 -2.47035e-7 -1 1.72976e-7 4.12559e-7 -1 7.14574e-7 -3.15486e-6 -1 -5.46438e-6 1.6488e-6 -1 1.38103e-7 1.996e-6 -1 1.09203e-6 -1.44228e-6 -1 -4.71939e-6 7.6874e-7 -1 7.81991e-6 -1.20171e-6 -1 2.58049e-6 -1.20171e-6 -1 -7.9923e-6 -1.71012e-7 -1 -2.49032e-6 -3.08678e-7 -1 -1.70958e-6 -2.36752e-7 -1 5.04241e-6 -7.9146e-7 -1 6.56646e-6 4.12559e-7 -1 -7.14574e-7 0 -1 0 2.83341e-7 -1 -8.05054e-7 3.84257e-6 -1 -5.04678e-6 1.4774e-6 -1 -8.47509e-7 1.72976e-7 -1 2.47035e-7 -2.53502e-6 -1 3.54501e-6 -6.01393e-7 -1 2.42863e-6 5.17261e-6 -1 -2.52209e-6 -6.08531e-6 -1 1.57546e-6 -3.40644e-6 -1 0 6.16132e-6 -1 -1.69653e-6 1.65024e-6 -1 0 -6.30971e-6 -1 0 1.78287e-6 -1 -1.516e-6 -0.9961909 0.0872004 0 -0.9961984 -0.08711236 0 -0.9961984 -0.08711236 0 -0.9659379 -0.2587739 0 -0.9659379 -0.2587739 0 -0.9063251 -0.4225809 0 -0.9063251 -0.4225809 0 -0.8191775 -0.5735401 0 -0.8191775 -0.5735401 0 -0.7071373 -0.7070764 0 -0.7071373 -0.7070764 0 -0.5736181 -0.8191228 0 -0.5736181 -0.8191228 0 -0.4226573 -0.9062896 0 -0.4226573 -0.9062896 0 -0.2588598 -0.965915 0 -0.2588598 -0.965915 0 -0.08719766 -0.996191 0 -0.08719766 -0.996191 0 0.08710789 -0.9961988 0 0.08710789 -0.9961988 0 0.2587742 -0.9659379 0 0.2587742 -0.9659379 0 0.4225761 -0.9063274 0 0.4225761 -0.9063274 0 0.5735453 -0.8191738 0 0.5735453 -0.8191738 0 0.7070751 -0.7071384 0 0.7070751 -0.7071384 0 0.8191258 -0.5736138 0 0.8191258 -0.5736138 0 0.9062885 -0.4226596 0 0.9062885 -0.4226596 0 0.9659142 -0.2588623 0 0.9659142 -0.2588623 0 0.9961909 -0.08719933 0 0.9961909 -0.08719933 0 0.9961988 0.08711022 0 0.9961988 0.08711022 0 0.965937 0.2587778 0 0.965937 0.2587778 0 0.9063276 0.4225757 0 0.9063276 0.4225757 0 0.819177 0.5735408 0 0.819177 0.5735408 0 0.7071375 0.7070761 0 0.7071375 0.7070761 0 0.5736124 0.8191269 0 0.5736124 0.8191269 0 0.4226562 0.9062901 0 0.4226562 0.9062901 0 0.2588689 0.9659125 0 0.2588689 0.9659125 0 0.08719658 0.9961912 0 0.08719658 0.9961912 0 -0.08710795 0.9961988 0 -0.08710795 0.9961988 0 -0.2587823 0.9659357 0 -0.2587823 0.9659357 0 -0.4225758 0.9063276 0 -0.4225758 0.9063276 0 -0.5735396 0.8191778 0 -0.5735396 0.8191778 0 -0.7070748 0.7071388 0 -0.7070748 0.7071388 0 -0.8191259 0.5736137 0 -0.8191259 0.5736137 0 -0.9062897 0.422657 0 -0.9062897 0.422657 0 -0.965914 0.2588632 0 -0.965914 0.2588632 0 -0.9961909 0.0872004 0 -0.996195 2.6508e-7 0.08715248 -0.996195 2.6508e-7 0.08715248 -0.9659178 2.57023e-7 0.2588489 -0.9659285 -2.57026e-7 0.258809 -0.9063145 -2.41163e-7 0.4226037 -0.9063146 -2.41163e-7 0.4226038 -0.8191564 -2.17971e-7 0.5735703 -0.8191363 2.17966e-7 0.573599 -0.7070908 1.88151e-7 0.7071228 -0.7071121 -1.88157e-7 0.7071015 -0.57359 -1.52628e-7 0.8191425 -0.5735699 1.52622e-7 0.8191566 -0.4226152 0 0.9063093 -0.4226316 0 0.9063016 -0.2588244 0 0.9659244 -0.2588137 0 0.9659273 -0.08715152 0 0.9961951 -0.08715528 0 0.9961948 0.08715152 0 0.9961951 0.08715152 0 0.9961951 0.2588244 0 0.9659244 0.2588137 0 0.9659273 0.4226152 0 0.9063093 0.4226316 0 0.9063016 0.5735699 1.52622e-7 0.8191566 0.5735699 1.52622e-7 0.8191567 0.7071121 1.88157e-7 0.7071015 0.7071121 1.88157e-7 0.7071015 0.8191564 2.17971e-7 0.5735703 0.8191564 2.17971e-7 0.5735703 0.9063146 2.41163e-7 0.4226038 0.9062982 -2.41159e-7 0.4226389 0.9659178 -2.57023e-7 0.2588489 0.9659286 2.57026e-7 0.2588091 0.996195 2.6508e-7 0.08715248 0.996195 2.6508e-7 0.08715248 -0.9961908 0.08720016 0 -0.9961986 -0.08711189 0 -0.9961986 -0.08711189 0 -0.9659372 -0.2587763 0 -0.9659372 -0.2587763 0 -0.9063271 -0.4225769 0 -0.9063271 -0.4225769 0 -0.8191783 -0.5735388 0 -0.8191783 -0.5735388 0 -0.7071372 -0.7070763 0 -0.7071372 -0.7070763 0 -0.5736124 -0.8191269 0 -0.5736124 -0.8191269 0 -0.4226606 -0.906288 0 -0.4226606 -0.906288 0 -0.2588598 -0.9659149 0 -0.2588598 -0.9659149 0 -0.08720135 -0.9961908 0 -0.08720135 -0.9961908 0 0.08711272 -0.9961985 0 0.08711272 -0.9961985 0 0.2587736 -0.9659381 0 0.2587736 -0.9659381 0 0.42258 -0.9063256 0 0.42258 -0.9063256 0 0.5735399 -0.8191777 0 0.5735399 -0.8191777 0 0.7070742 -0.7071394 0 0.7070742 -0.7071394 0 0.8191269 -0.5736124 0 0.8191269 -0.5736124 0 0.9062888 -0.4226589 0 0.9062888 -0.4226589 0 0.9659143 -0.2588618 0 0.9659143 -0.2588618 0 0.9961909 -0.0871995 0 0.9961909 -0.0871995 0 0.9961987 0.08711045 0 0.9961987 0.08711045 0 0.9659374 0.2587758 0 0.9659374 0.2587758 0 0.9063264 0.4225783 0 0.9063264 0.4225783 0 0.8191766 0.5735414 0 0.8191766 0.5735414 0 0.7071394 0.7070742 0 0.7071394 0.7070742 0 0.573613 0.8191264 0 0.573613 0.8191264 0 0.4226567 0.9062899 0 0.4226567 0.9062899 0 0.2588641 0.9659138 0 0.2588641 0.9659138 0 0.08720141 0.9961907 0 0.08720141 0.9961907 0 -0.08711266 0.9961984 0 -0.08711266 0.9961984 0 -0.2587783 0.9659368 0 -0.2587783 0.9659368 0 -0.422576 0.9063275 0 -0.422576 0.9063275 0 -0.5735397 0.8191778 0 -0.5735397 0.8191778 0 -0.7070763 0.7071372 0 -0.7070763 0.7071372 0 -0.8191259 0.5736137 0 -0.8191259 0.5736137 0 -0.9062895 0.4226576 0 -0.9062895 0.4226576 0 -0.9659143 0.2588623 0 -0.9659143 0.2588623 0 -0.9961908 0.08720016 0 0.9961988 0.08711022 0 0.9961909 -0.08719933 0 0.9961909 -0.08719933 0 0.9659142 -0.2588623 0 0.9659142 -0.2588623 0 0.9062885 -0.4226596 0 0.9062885 -0.4226596 0 0.8191258 -0.5736138 0 0.8191258 -0.5736138 0 0.7070751 -0.7071384 0 0.7070751 -0.7071384 0 0.5735453 -0.8191738 0 0.5735453 -0.8191738 0 0.4225761 -0.9063274 0 0.4225761 -0.9063274 0 0.2587742 -0.9659379 0 0.2587742 -0.9659379 0 0.08710789 -0.9961988 0 0.08710789 -0.9961988 0 -0.08719766 -0.996191 0 -0.08719766 -0.996191 0 -0.2588598 -0.965915 0 -0.2588598 -0.965915 0 -0.4226573 -0.9062896 0 -0.4226573 -0.9062896 0 -0.5736181 -0.8191228 0 -0.5736181 -0.8191228 0 -0.7071373 -0.7070764 0 -0.7071373 -0.7070764 0 -0.8191775 -0.5735401 0 -0.8191775 -0.5735401 0 -0.9063251 -0.4225809 0 -0.9063251 -0.4225809 0 -0.9659379 -0.2587739 0 -0.9659379 -0.2587739 0 -0.9961984 -0.08711236 0 -0.9961984 -0.08711236 0 -0.9961909 0.0872004 0 -0.9961909 0.0872004 0 -0.965914 0.2588632 0 -0.965914 0.2588632 0 -0.9062897 0.422657 0 -0.9062897 0.422657 0 -0.8191259 0.5736137 0 -0.8191259 0.5736137 0 -0.7070748 0.7071388 0 -0.7070748 0.7071388 0 -0.5735396 0.8191778 0 -0.5735396 0.8191778 0 -0.4225758 0.9063276 0 -0.4225758 0.9063276 0 -0.2587823 0.9659357 0 -0.2587823 0.9659357 0 -0.08710795 0.9961988 0 -0.08710795 0.9961988 0 0.08719658 0.9961912 0 0.08719658 0.9961912 0 0.2588689 0.9659125 0 0.2588689 0.9659125 0 0.4226562 0.9062901 0 0.4226562 0.9062901 0 0.5736124 0.8191269 0 0.5736124 0.8191269 0 0.7071375 0.7070761 0 0.7071375 0.7070761 0 0.819177 0.5735408 0 0.819177 0.5735408 0 0.9063276 0.4225757 0 0.9063276 0.4225757 0 0.965937 0.2587778 0 0.965937 0.2587778 0 0.9961988 0.08711022 0 0.9961987 0.08711045 0 0.9961909 -0.0871995 0 0.9961909 -0.0871995 0 0.9659143 -0.2588618 0 0.9659143 -0.2588618 0 0.9062888 -0.4226589 0 0.9062888 -0.4226589 0 0.8191269 -0.5736124 0 0.8191269 -0.5736124 0 0.7070742 -0.7071394 0 0.7070742 -0.7071394 0 0.5735399 -0.8191777 0 0.5735399 -0.8191777 0 0.42258 -0.9063256 0 0.42258 -0.9063256 0 0.2587736 -0.9659381 0 0.2587736 -0.9659381 0 0.08711272 -0.9961985 0 0.08711272 -0.9961985 0 -0.08720135 -0.9961908 0 -0.08720135 -0.9961908 0 -0.2588598 -0.9659149 0 -0.2588598 -0.9659149 0 -0.4226606 -0.906288 0 -0.4226606 -0.906288 0 -0.5736124 -0.8191269 0 -0.5736124 -0.8191269 0 -0.7071372 -0.7070763 0 -0.7071372 -0.7070763 0 -0.8191783 -0.5735388 0 -0.8191783 -0.5735388 0 -0.9063271 -0.4225769 0 -0.9063271 -0.4225769 0 -0.9659372 -0.2587763 0 -0.9659372 -0.2587763 0 -0.9961986 -0.08711189 0 -0.9961986 -0.08711189 0 -0.9961908 0.08720016 0 -0.9961908 0.08720016 0 -0.9659143 0.2588623 0 -0.9659143 0.2588623 0 -0.9062895 0.4226576 0 -0.9062895 0.4226576 0 -0.8191259 0.5736137 0 -0.8191259 0.5736137 0 -0.7070763 0.7071372 0 -0.7070763 0.7071372 0 -0.5735397 0.8191778 0 -0.5735397 0.8191778 0 -0.422576 0.9063275 0 -0.422576 0.9063275 0 -0.2587783 0.9659368 0 -0.2587783 0.9659368 0 -0.08711266 0.9961984 0 -0.08711266 0.9961984 0 0.08720141 0.9961907 0 0.08720141 0.9961907 0 0.2588641 0.9659138 0 0.2588641 0.9659138 0 0.4226567 0.9062899 0 0.4226567 0.9062899 0 0.573613 0.8191264 0 0.573613 0.8191264 0 0.7071394 0.7070742 0 0.7071394 0.7070742 0 0.8191766 0.5735414 0 0.8191766 0.5735414 0 0.9063264 0.4225783 0 0.9063264 0.4225783 0 0.9659374 0.2587758 0 0.9659374 0.2587758 0 0.9961987 0.08711045 0 -1.99569e-7 1 0 -1.99569e-7 1 0 -0.08715504 0.9961947 0 -0.08715504 0.9961947 0 -0.2588185 0.9659261 0 -0.2588185 0.9659261 0 -0.4226195 0.9063072 0 -0.4226195 0.9063072 0 -0.5735769 0.8191516 0 -0.5735769 0.8191516 0 -0.707107 0.7071067 0 -0.707107 0.7071067 0 -0.8191509 0.573578 0 -0.8191509 0.573578 0 -0.9063081 0.4226178 0 -0.9063081 0.4226178 0 -0.9396926 0.3420202 0 -0.9396926 0.3420202 0 -0.9659261 0.2588182 0 -0.9659261 0.2588182 0 -0.9961947 0.0871551 0 -0.9961947 0.0871551 0 -0.9961947 -0.08715575 0 -0.9961947 -0.08715575 0 -0.9659255 -0.2588199 0 -0.9659255 -0.2588199 0 -0.9063084 -0.4226171 0 -0.9063084 -0.4226171 0 -0.8191516 -0.5735771 0 -0.8191516 -0.5735771 0 -0.7071068 -0.7071068 0 -0.7071068 -0.7071068 0 -0.573575 -0.819153 0 -0.573575 -0.819153 0 -0.4226188 -0.9063076 0 -0.4226188 -0.9063076 0 -0.2588223 -0.965925 0 -0.2588223 -0.965925 0 -0.08715456 -0.9961947 0 -0.08715456 -0.9961947 0 0.08715814 -0.9961946 0 0.08715814 -0.9961946 0 0.2588155 -0.9659268 0 0.2588155 -0.9659268 0 0.4226159 -0.9063089 0 0.4226159 -0.9063089 0 0.5735795 -0.8191499 0 0.5735795 -0.8191499 0 0.7071071 -0.7071065 0 0.7071071 -0.7071065 0 0.8191512 -0.5735777 0 0.8191512 -0.5735777 0 0.9063079 -0.4226179 0 0.9063079 -0.4226179 0 0.9396927 -0.34202 0 0.9396927 -0.34202 0 0.07628405 -0.9970862 0 0.07628405 -0.9970862 0 0.2270765 -0.9738768 0 0.2270765 -0.9738768 0 0.3725843 -0.9279984 0 0.3725843 -0.9279984 0 0.5094157 -0.8605205 0 0.5094157 -0.8605205 0 0.6343933 -0.7730105 0 0.6343933 -0.7730105 0 0.7446038 -0.6675066 0 0.7446038 -0.6675066 0 0.8374794 -0.5464688 0 0.8374794 -0.5464688 0 0.9108638 -0.412707 0 0.9108638 -0.412707 0 0.996195 2.6508e-7 -0.08715248 0.996195 2.6508e-7 -0.08715248 0.9659178 2.57023e-7 -0.2588489 0.9659286 -2.57026e-7 -0.2588091 0.9063146 -2.41163e-7 -0.4226038 0.9062982 2.41159e-7 -0.4226389 0.8191564 2.17971e-7 -0.5735703 0.8191564 2.17971e-7 -0.5735703 0.7071121 1.88157e-7 -0.7071015 0.7071121 1.88157e-7 -0.7071015 0.5735699 1.52622e-7 -0.8191566 0.5735699 1.52622e-7 -0.8191566 0.4226152 0 -0.9063093 0.4226316 0 -0.9063016 0.2588244 0 -0.9659244 0.2588137 0 -0.9659273 0.08715152 0 -0.9961951 0.08715152 0 -0.996195 -0.08715152 0 -0.9961951 -0.08715528 0 -0.9961948 -0.2588244 0 -0.9659244 -0.2588137 0 -0.9659273 -0.4226152 0 -0.9063093 -0.4226316 0 -0.9063016 -0.57359 1.52628e-7 -0.8191425 -0.5735699 -1.52622e-7 -0.8191566 -0.7070907 -1.88151e-7 -0.7071228 -0.7071122 1.88157e-7 -0.7071015 -0.8191564 2.17971e-7 -0.5735703 -0.8191362 -2.17966e-7 -0.573599 -0.9063146 -2.41163e-7 -0.4226038 -0.9063145 -2.41163e-7 -0.4226037 -0.9659178 -2.57023e-7 -0.258849 -0.9659286 2.57026e-7 -0.2588091 -0.996195 2.6508e-7 -0.08715248 -0.996195 2.6508e-7 -0.08715248 0.996195 2.6508e-7 -0.08715248 0.996195 2.6508e-7 -0.08715248 0.9659285 2.57026e-7 -0.258809 0.9659286 2.57026e-7 -0.2588091 0.9062982 2.41159e-7 -0.4226389 0.9063146 -2.41163e-7 -0.4226038 0.8191564 -2.17971e-7 -0.5735703 0.8191362 2.17966e-7 -0.573599 0.7071121 1.88157e-7 -0.7071015 0.7071122 1.88157e-7 -0.7071015 0.57357 1.52622e-7 -0.8191567 0.57359 -1.52628e-7 -0.8191426 0.4226315 0 -0.9063015 0.4226152 0 -0.9063093 0.2588137 0 -0.9659273 0.2588137 0 -0.9659273 0.08715152 0 -0.9961951 0.08715528 0 -0.9961947 -0.08715528 0 -0.9961947 -0.08715158 0 -0.9961951 -0.2588137 0 -0.9659273 -0.2588244 0 -0.9659245 -0.4226315 0 -0.9063015 -0.4226152 0 -0.9063091 -0.57357 -1.52622e-7 -0.8191567 -0.5735699 -1.52622e-7 -0.8191566 -0.7071121 -1.88157e-7 -0.7071015 -0.7071121 -1.88157e-7 -0.7071015 -0.8191362 -2.17966e-7 -0.5735989 -0.8191564 2.17971e-7 -0.5735703 -0.9063146 2.41163e-7 -0.4226038 -0.9062982 -2.41159e-7 -0.4226389 -0.9659286 -2.57026e-7 -0.2588091 -0.9659286 -2.57026e-7 -0.2588091 -0.996195 -2.6508e-7 -0.08715248 -0.996195 -2.6508e-7 -0.08715248 -0.9965866 -2.65184e-7 0.08255404 -0.9965829 2.65183e-7 0.08259886 -0.9693973 2.57949e-7 0.2454973 -0.969408 -2.57952e-7 0.2454549 -0.915781 -2.43682e-7 0.401678 -0.9157643 2.43678e-7 0.4017158 -0.8371521 2.2276e-7 0.5469703 -0.8371727 -2.22765e-7 0.5469386 -0.7357349 -1.95773e-7 0.6772695 -0.7357125 1.95767e-7 0.677294 -0.6142135 1.63437e-7 0.7891399 -0.6142135 1.63437e-7 0.7891399 -0.4759402 1.26644e-7 0.8794777 -0.475959 -1.26649e-7 0.8794676 -0.324699 0 0.9458174 -0.324699 0 0.9458174 -0.1645947 0 0.9863613 -0.1645947 0 0.9863613 0 0 1 0 0 1 0.1645947 0 0.9863613 0.1645947 0 0.9863613 0.324699 0 0.9458174 0.324699 0 0.9458174 0.4759402 1.26644e-7 0.8794777 0.4759402 1.26644e-7 0.8794777 0.6142135 1.63437e-7 0.7891399 0.6142135 1.63437e-7 0.7891399 0.7357349 1.95773e-7 0.6772695 0.7357349 1.95773e-7 0.6772695 0.8371727 2.22765e-7 0.5469386 0.8371521 -2.2276e-7 0.5469703 0.9157643 -2.43678e-7 0.4017158 0.915781 2.43682e-7 0.401678 0.9693973 2.57949e-7 0.2454973 0.9693974 2.57949e-7 0.2454972 0.9965866 2.65184e-7 0.08255404 0.9965866 2.65184e-7 0.08255404 2.62492e-7 -1 5.38622e-6 1.22825e-5 -1 -1.09672e-5 -7.5989e-7 -1 5.29677e-6 -9.0737e-7 -1 0 -9.0737e-7 -1 3.34312e-5 -4.13067e-6 -1 1.26618e-6 -6.64951e-7 -1 -1.02646e-5 2.61692e-6 -1 4.03966e-5 0 -1 -5.36007e-6 -1.97787e-7 -1 -1.97058e-5 8.94268e-7 -1 2.39979e-5 8.94268e-7 -1 -3.29484e-5 1.56166e-6 -1 -7.63248e-7 6.59744e-7 -1 -5.41496e-7 7.5144e-7 -1 -5.56551e-7 6.59744e-7 -1 5.41496e-7 0 -1 5.36007e-6 0 -1 0 -3.87179e-6 -1 1.00253e-5 -1.20261e-5 -1 3.21786e-5 2.15463e-6 -1 -5.7652e-6 0 -1 -1.10633e-5 -1.46329e-7 -1 0 4.86288e-6 -1 -3.1863e-6 2.40334e-6 -1 2.26509e-6 -3.08309e-6 -1 -2.7451e-6 0 -1 -2.48921e-7 4.10552e-6 -1 5.84454e-6 2.47344e-6 -1 2.19987e-6 7.5144e-7 -1 5.56551e-7 1.56166e-6 -1 7.63248e-7 -4.13067e-6 -1 -1.26618e-6 4.86288e-6 -1 3.1863e-6 1.45617e-6 -1 1.31177e-6 -3.75768e-6 -1 -4.59645e-6 6.45525e-6 -1 8.65674e-6 -4.55246e-7 -1 -9.68692e-7 -2.16788e-6 -1 -4.61291e-6 1.73611e-5 -1 1.44442e-5 2.74346e-5 -1 8.41181e-5 -5.42474e-6 -1 -1.70623e-5 -2.41504e-6 -1 -3.69049e-6 -4.28888e-6 -1 1.77016e-6 1.33014e-6 -1 -3.65868e-6 -2.16788e-6 -1 4.61291e-6 1.13624e-5 -1 -2.41774e-5 -3.03854e-7 -1 1.29335e-6 -1.21755e-5 -1 2.4087e-5 2.74401e-7 -1 -4.19621e-7 1.03692e-5 -1 -4.74287e-6 -1.59967e-4 -1 7.0663e-5 8.41128e-6 -1 -3.71555e-6 -1.47956e-5 -1 1.14139e-6 1.50356e-5 -1 -1.1599e-6 -3.12458e-6 -1 0 1.50356e-5 -1 1.1599e-6 -1.47956e-5 -1 -1.14139e-6 1.33014e-6 -1 3.65868e-6 2.15463e-6 -1 5.7652e-6 -1.20261e-5 -1 -3.21786e-5 -1.24565e-6 -1 -2.17756e-6 2.4561e-6 -1 3.79039e-6 -1.08804e-5 -1 -1.98381e-5 -1.4195e-6 -1 -3.45133e-6 1.1773e-6 -1 1.52832e-6 1.47151e-6 -1 0 1.84957e-6 -1 -4.75343e-7 1.00297e-6 -1 -3.01167e-7 1.23551e-6 -1 -3.30821e-7 -1.55463e-5 -1 9.40249e-7 2.00917e-5 -1 -7.17552e-7 0 -1 0 2.00917e-5 -1 7.17552e-7 -3.88674e-7 -1 -1.11145e-6 -1.49065e-5 -1 -1.66301e-5 1.10022e-5 -1 1.1863e-5 1.47157e-6 -1 2.04221e-6 1.88931e-6 -1 2.73275e-6 -8.4899e-6 -1 -1.58053e-5 2.20111e-6 -1 1.11217e-6 -5.8845e-6 -1 -3.60466e-6 5.56795e-6 -1 2.81334e-6 0 -1 2.543e-7 -5.38193e-7 -1 0 9.17357e-6 -1 -3.78623e-6 -1.66075e-5 -1 6.11621e-6 0 -1 3.94325e-7 -1.86887e-6 -1 9.27113e-7 1.40318e-5 -1 -3.08956e-6 5.55142e-6 -1 -1.3866e-6 -2.70913e-6 -1 -2.42786e-6 4.27486e-6 -1 3.20973e-6 0 -1 -2.19216e-7 -8.93046e-6 -1 -7.25663e-6 0 -1 0 0 -1 0 -1.02321e-5 -1 -1.2557e-5 1.5802e-6 -1 -8.00624e-7 -1.67895e-5 -1 -2.08564e-5 5.16595e-7 -1 6.41727e-7 1.55503e-5 -1 2.22245e-5 8.03661e-7 -1 1.52125e-6 1.33746e-6 -1 2.38913e-6 1.00971e-5 -1 1.24969e-5 -4.14225e-7 -1 -2.93299e-7 -1.94496e-6 -1 -2.2674e-5 2.01773e-7 -1 7.53044e-7 1.67365e-7 -1 3.58901e-7 1.72796e-6 -1 -8.88422e-7 -7.5989e-7 -1 0 -8.99828e-7 -1 -5.28453e-6 -1.55463e-5 -1 -9.40249e-7 1.23551e-6 -1 3.30821e-7 1.00297e-6 -1 3.01167e-7 6.58426e-7 -1 5.0403e-7 -2.1399e-5 -1 -1.63811e-5 3.28405e-7 -1 7.73499e-7 4.21085e-6 -1 3.30116e-6 -1.67274e-7 -1 3.58706e-7 -6.15363e-6 -1 -3.49266e-6 7.14065e-6 -1 4.20022e-6 3.88062e-5 -1 2.20256e-5 0 -1 0 0 -1 0 8.0493e-6 -1 -7.06273e-6 1.09172e-5 -1 -9.79733e-6 -5.46358e-6 -1 4.51091e-6 1.18411e-6 -1 0 0 -1 0 3.93507e-6 -1 0 -5.22153e-6 -1 1.61928e-6 -5.14524e-7 -1 8.41567e-7 1.66161e-7 -1 6.20109e-7 -2.98525e-6 -1 1.56243e-6 4.87668e-6 -1 -2.18405e-6 4.96527e-6 -1 -2.22372e-6 2.62492e-7 -1 -5.68001e-6 2.65646e-7 -1 -5.88423e-6 0 -1 0 3.56524e-7 -1 1.11582e-5 0 -1 0 -1.2723e-5 -1 1.17526e-5 4.16844e-5 -1 -3.93594e-5 -1.07098e-5 -1 9.56294e-6 0 -1 0 0 -1 0 -1.77372e-6 -1 2.61503e-7 0 -1 -1.73437e-7 0 -1 -1.66178e-7 1.3171e-5 -1 1.29275e-5 -2.01523e-6 -1 -2.60004e-6 -1.68029e-7 -1 -6.27098e-7 -2.87277e-5 -1 -3.2108e-5 3.11639e-5 -1 3.51918e-5 -3.70119e-7 -1 -5.03169e-7 7.00607e-6 -1 9.52462e-6 -3.00558e-6 -1 -4.27869e-6 7.44393e-7 -1 3.26305e-6 -8.75634e-7 -1 -2.78728e-6 -1.0063e-6 -1 -3.38852e-6 4.03957e-7 -1 3.67224e-7 1.49595e-5 -1 2.30643e-6 -1.6816e-5 -1 -1.49283e-6 -1.46758e-6 -1 -2.11662e-5 4.5511e-7 -1 1.86724e-5 -8.55959e-7 -1 -3.51185e-5 -5.11152e-6 -1 -3.12833e-6 1.97888e-6 -1 1.31353e-6 -3.47776e-6 -1 -2.30845e-6 -1.98415e-6 -1 -1.55142e-5 -2.60756e-6 -1 -2.17118e-5 2.83827e-6 -1 4.09351e-5 0 -1 -2.52588e-7 1.42837e-6 -1 1.17398e-6 -1.47516e-6 -1 -1.04348e-6 8.19631e-6 -1 6.92483e-6 4.02174e-6 -1 3.57135e-6 -2.43396e-5 -1 -2.09964e-5 -8.3134e-6 -1 -7.45646e-6 -1.50218e-6 -1 -1.27493e-6 8.39372e-6 -1 8.18581e-6 0 -1 -1.8576e-7 0 -1 -2.14646e-7 4.81335e-5 -1 8.96079e-5 7.02014e-7 -1 5.06767e-7 3.62312e-6 -1 3.22173e-5 -1.36798e-5 -1 -1.16238e-4 -4.06712e-7 -1 -1.18471e-6 -1.83207e-5 -1 -1.65937e-5 1.67464e-5 -1 1.60024e-5 -1.21297e-5 -1 -1.15908e-5 1.27813e-5 -1 1.1227e-5 -2.84358e-5 -1 -2.77314e-5 0.3713909 -0.9284766 0 0.3713909 -0.9284766 0 0.9961946 3.71111e-7 -0.08715778 0.9961946 3.71111e-7 0.08715778 0.9961946 3.71111e-7 0.08715778 0.9659254 3.59835e-7 0.2588208 0.9659254 3.59835e-7 0.2588208 0.9063093 3.37627e-7 0.4226149 0.9063094 3.37626e-7 0.4226149 0.8191482 3.05156e-7 0.5735821 0.8191482 3.05156e-7 0.5735821 0.7071072 2.63418e-7 0.7071064 0.7071072 2.63418e-7 0.7071064 0.5735809 2.13676e-7 0.819149 0.573575 -2.13673e-7 0.8191531 0.4226161 -1.57437e-7 0.9063088 0.422621 1.57439e-7 0.9063066 0.2588186 0 0.9659259 0.2588187 0 0.9659259 0.08715653 0 0.9961946 0.08715546 0 0.9961947 -0.08715546 0 0.9961947 -0.08715653 0 0.9961946 -0.2588186 0 0.9659259 -0.2588186 0 0.9659259 -0.4226161 -1.57437e-7 0.9063088 -0.4226161 -1.57437e-7 0.9063088 -0.5735809 -2.13676e-7 0.819149 -0.573575 2.13673e-7 0.8191531 -0.7071072 2.63418e-7 0.7071064 -0.7071072 2.63418e-7 0.7071064 -0.8191482 3.05157e-7 0.5735821 -0.819154 -3.05159e-7 0.5735735 -0.9063093 -3.37627e-7 0.4226149 -0.9063093 -3.37627e-7 0.4226149 -0.9659254 -3.59835e-7 0.2588208 -0.9659254 -3.59835e-7 0.2588208 -0.9961946 -3.71111e-7 0.08715778 -0.9961945 -3.71111e-7 0.08715778 -0.9961945 -3.71111e-7 -0.08715778 -0.9961946 -3.71111e-7 -0.08715778 -0.9659254 -3.59835e-7 -0.2588208 -0.9659254 -3.59835e-7 -0.2588208 -0.9063093 -3.37627e-7 -0.4226149 -0.9063093 -3.37627e-7 -0.4226149 -0.8191482 -3.05157e-7 -0.5735821 -0.819154 3.05159e-7 -0.5735735 -0.7071072 2.63418e-7 -0.7071064 -0.7071072 2.63418e-7 -0.7071064 -0.5735809 2.13676e-7 -0.819149 -0.573575 -2.13673e-7 -0.8191531 -0.4226161 -1.57437e-7 -0.9063088 -0.4226161 -1.57437e-7 -0.9063088 -0.2588186 0 -0.9659259 -0.2588186 0 -0.9659259 -0.08715546 0 -0.9961947 -0.08715653 0 -0.9961946 0.08715653 0 -0.9961947 0.08715546 0 -0.9961947 0.2588187 0 -0.9659259 0.2588186 0 -0.9659259 0.4226161 1.57437e-7 -0.9063088 0.422621 -1.57439e-7 -0.9063066 0.5735809 -2.13676e-7 -0.819149 0.573575 2.13673e-7 -0.8191531 0.7071072 2.63418e-7 -0.7071064 0.7071072 2.63418e-7 -0.7071064 0.8191482 3.05156e-7 -0.5735821 0.8191482 3.05156e-7 -0.5735821 0.9063094 3.37626e-7 -0.4226149 0.9063093 3.37627e-7 -0.4226149 0.9659254 3.59835e-7 -0.2588208 0.9659254 3.59835e-7 -0.2588208 0.9961946 3.71111e-7 -0.08715778 0.9961945 1.85556e-7 -0.08715778 0.9961951 1.85556e-7 0.08715152 0.9961946 -1.85556e-7 0.08715778 0.9659254 -1.79918e-7 0.2588208 0.9659254 -1.79918e-7 0.2588208 0.9063069 -1.68813e-7 0.4226201 0.9063093 1.68813e-7 0.4226149 0.8191511 1.52579e-7 0.5735778 0.8191511 1.52579e-7 0.5735778 0.7071072 1.31709e-7 0.7071064 0.7071072 1.31709e-7 0.7071064 0.5735779 0 0.819151 0.573575 0 0.8191531 0.4226185 0 0.9063076 0.4226185 0 0.9063076 0.2588186 0 0.9659259 0.2588187 0 0.9659259 0.08715599 0 0.9961947 0.08715599 0 0.9961947 -0.08715546 0 0.9961947 -0.08715599 0 0.9961947 -0.2588187 0 0.9659259 -0.2588186 0 0.9659259 -0.4226185 0 0.9063076 -0.4226185 0 0.9063076 -0.5735779 0 0.819151 -0.573575 0 0.8191531 -0.7071072 1.31709e-7 0.7071064 -0.7071072 1.31709e-7 0.7071064 -0.8191511 1.52579e-7 0.5735778 -0.8191541 -1.52579e-7 0.5735736 -0.9063069 -1.68813e-7 0.4226201 -0.9063069 -1.68813e-7 0.4226201 -0.9659269 -1.79918e-7 0.2588149 -0.9659254 1.79918e-7 0.2588208 -0.9961946 1.85556e-7 0.08715778 -0.9961951 -1.85556e-7 0.08715152 -0.9961946 -1.85556e-7 -0.08715778 -0.9961951 1.85556e-7 -0.08715152 -0.9659269 1.79918e-7 -0.2588149 -0.9659254 -1.79918e-7 -0.2588208 -0.9063069 -1.68813e-7 -0.4226201 -0.9063069 -1.68813e-7 -0.4226201 -0.8191511 -1.52579e-7 -0.5735778 -0.8191541 1.52579e-7 -0.5735736 -0.7071072 1.31709e-7 -0.7071064 -0.7071072 1.31709e-7 -0.7071064 -0.5735779 0 -0.819151 -0.573575 0 -0.8191531 -0.4226185 0 -0.9063076 -0.4226185 0 -0.9063076 -0.2588186 0 -0.9659259 -0.2588187 0 -0.9659259 -0.08715546 0 -0.9961947 -0.08715599 0 -0.9961946 0.08715599 0 -0.9961946 0.08715599 0 -0.9961947 0.2588187 0 -0.9659259 0.2588186 0 -0.9659259 0.4226185 0 -0.9063076 0.4226185 0 -0.9063076 0.5735779 0 -0.819151 0.573575 0 -0.8191531 0.7071072 1.31709e-7 -0.7071064 0.7071072 1.31709e-7 -0.7071064 0.8191511 1.52579e-7 -0.5735778 0.8191511 1.52579e-7 -0.5735778 0.9063069 1.68813e-7 -0.4226201 0.9063093 -1.68813e-7 -0.4226149 0.9659254 -1.79918e-7 -0.2588208 0.9659254 -1.79918e-7 -0.2588208 0.9961951 -1.85556e-7 -0.08715158 -0.996195 -2.6508e-7 -0.08715277 -0.996195 -2.6508e-7 0.08715277 -0.996195 -2.6508e-7 0.08715277 -0.965925 -2.57025e-7 0.2588223 -0.9659249 -2.57025e-7 0.2588223 -0.9063097 -2.41162e-7 0.4226143 -0.9063096 -2.41162e-7 0.4226143 -0.8191498 -2.17969e-7 0.5735798 -0.8191498 -2.17969e-7 0.5735798 -0.707112 -1.88157e-7 0.7071015 -0.7071049 1.88155e-7 0.7071087 -0.5735757 1.52624e-7 0.8191525 -0.5735757 1.52624e-7 0.8191526 -0.4226188 0 0.9063076 -0.4226188 0 0.9063075 -0.2588173 0 0.9659263 -0.2588208 0 0.9659253 -0.08715587 0 0.9961947 -0.08715587 0 0.9961947 0.08715587 0 0.9961947 0.08715587 0 0.9961947 0.2588208 0 0.9659253 0.2588172 0 0.9659262 0.4226134 0 0.9063102 0.4226188 0 0.9063075 0.5735824 1.52626e-7 0.8191479 0.5735757 -1.52624e-7 0.8191526 0.7071049 -1.88155e-7 0.7071087 0.707112 1.88157e-7 0.7071015 0.8191498 2.17969e-7 0.5735798 0.8191498 2.17969e-7 0.5735798 0.9063096 2.41162e-7 0.4226142 0.9063096 2.41162e-7 0.4226143 0.965925 2.57025e-7 0.2588223 0.965925 2.57025e-7 0.2588223 0.996195 2.6508e-7 0.08715277 0.996195 2.6508e-7 0.08715277 0.996195 2.6508e-7 -0.08715277 0.996195 2.6508e-7 -0.08715277 0.965925 2.57025e-7 -0.2588223 0.965925 2.57025e-7 -0.2588223 0.9063096 2.41162e-7 -0.4226142 0.9063096 2.41162e-7 -0.4226142 0.8191498 2.17969e-7 -0.5735798 0.8191498 2.17969e-7 -0.5735798 0.7071049 1.88155e-7 -0.7071087 0.707112 -1.88157e-7 -0.7071015 0.5735824 -1.52626e-7 -0.8191479 0.5735757 1.52624e-7 -0.8191526 0.4226133 0 -0.90631 0.4226188 0 -0.9063076 0.2588208 0 -0.9659253 0.2588172 0 -0.9659262 0.08715587 0 -0.9961947 0.08715587 0 -0.9961947 -0.08715587 0 -0.9961947 -0.08715587 0 -0.9961947 -0.2588173 0 -0.9659263 -0.2588208 0 -0.9659253 -0.4226188 0 -0.9063075 -0.4226188 0 -0.9063076 -0.5735757 1.52624e-7 -0.8191525 -0.5735757 1.52624e-7 -0.8191525 -0.707112 1.88157e-7 -0.7071015 -0.7071049 -1.88155e-7 -0.7071087 -0.8191498 -2.17969e-7 -0.5735798 -0.8191498 -2.17969e-7 -0.5735798 -0.9063096 -2.41162e-7 -0.4226142 -0.9063097 -2.41162e-7 -0.4226143 -0.9659249 -2.57025e-7 -0.2588223 -0.965925 -2.57025e-7 -0.2588223 -0.996195 -2.6508e-7 -0.08715277 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 1 1.86264e-7 0 1 1.86264e-7 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 3.45593e-5 1 2.07069e-5 0 1 3.88935e-5 -1.3421e-6 1 1.38048e-7 1.19891e-6 1 1.63109e-5 -9.7708e-6 1 -8.0257e-6 0 1 -4.28684e-7 -1.87184e-6 1 -2.56557e-5 1.59849e-6 1 1.20171e-5 6.56162e-7 1 3.93216e-6 -8.6246e-6 1 -6.73054e-7 -3.11911e-6 1 -3.6789e-7 -7.66245e-5 1 -3.57606e-6 2.66785e-7 1 1.03029e-5 2.66785e-7 1 -3.33174e-7 1.85297e-5 1 -2.32241e-6 -3.49896e-6 1 2.82597e-7 -1.18233e-5 1 1.42228e-6 0 1 -5.24403e-7 6.93474e-6 1 -1.95462e-6 -1.05032e-6 1 -3.1717e-5 0 1 -4.03157e-6 -1.51372e-7 1 -1.24861e-5 5.09409e-6 1 4.12667e-6 -1.01692e-6 1 -5.40946e-7 -2.65357e-7 1 0 -7.17596e-6 1 4.57141e-6 4.64862e-6 1 -3.53687e-6 -1.01692e-6 1 5.40946e-7 5.09409e-6 1 -4.12667e-6 -9.7708e-6 1 8.0257e-6 4.7202e-6 1 -4.72475e-6 -1.25565e-6 1 9.46451e-7 5.01727e-6 1 3.50462e-6 -1.07482e-6 1 -9.32148e-7 -8.72992e-7 1 -8.08012e-7 -4.00701e-6 1 -4.88235e-6 2.49962e-7 1 3.04567e-7 -4.6145e-6 1 -2.72468e-6 -1.07187e-5 1 -6.2824e-6 1.71529e-7 1 0 -2.12863e-7 1 -2.10489e-5 1.43555e-6 1 1.99638e-5 0 1 0 -1.52002e-5 1 6.83863e-6 -1.13781e-6 1 9.1527e-7 0 1 -2.55407e-7 2.08429e-6 1 2.03733e-6 -8.67141e-7 1 -8.16368e-7 -4.93929e-7 1 4.06565e-6 -2.58445e-7 1 -4.2651e-6 -2.47517e-7 1 -1.16966e-5 -4.93929e-7 1 4.06565e-6 -2.6465e-7 1 -4.04559e-6 -2.6465e-7 1 1.25164e-5 4.09873e-7 1 -1.23357e-5 4.09873e-7 1 2.67196e-5 0 1 2.80489e-7 -5.00529e-6 1 -2.99981e-7 -1.98567e-5 1 -1.54863e-6 3.72151e-5 1 2.01269e-6 7.92187e-6 1 -1.39191e-5 0 1 -1.35337e-7 8.84131e-6 1 -1.34578e-6 2.70127e-6 1 -2.24909e-7 4.29862e-6 1 4.93107e-6 -1.13781e-6 1 -9.1527e-7 -2.38772e-7 1 0 9.96555e-6 1 -9.54778e-6 -8.06751e-6 1 7.97005e-6 4.29862e-6 1 -4.93107e-6 2.49962e-7 1 -3.04567e-7 -4.00701e-6 1 4.88235e-6 -8.72992e-7 1 8.08012e-7 1.46732e-6 1 -2.4308e-6 0 1 -4.45437e-7 6.31385e-6 1 2.31325e-6 -3.1946e-7 1 -1.25311e-5 -4.56821e-7 1 -2.08463e-5 0 1 4.78096e-7 -1.69704e-5 1 9.31442e-6 -6.19644e-6 1 3.21205e-6 6.51175e-6 1 -2.19816e-6 -2.45439e-6 1 1.05785e-6 -6.98066e-6 1 2.78763e-6 1.39846e-7 1 5.21922e-7 2.85177e-6 1 -3.91463e-7 2.65227e-6 1 -3.3658e-7 -4.26969e-5 1 1.29405e-5 0 1 1.20944e-6 2.25603e-7 1 -6.83033e-6 1.53388e-6 1 -2.28807e-6 3.99957e-6 1 -6.3238e-6 -5.10175e-6 1 9.29987e-6 -1.54807e-5 1 2.8935e-5 2.22489e-5 1 -4.12058e-5 0 1 3.25386e-7 -1.25565e-6 1 -9.46451e-7 4.7202e-6 1 4.72475e-6 -9.50692e-7 1 -1.22393e-5 1.54251e-6 1 1.15271e-5 -2.01807e-7 1 0 -5.00529e-6 1 2.99981e-7 3.71171e-6 1 -6.95986e-7 -5.50306e-6 1 -4.36943e-6 -2.19721e-6 1 -1.60915e-6 1.95465e-7 1 3.42722e-7 -5.11181e-6 1 -4.34356e-6 4.73993e-6 1 4.14942e-6 -7.66047e-6 1 -7.45108e-6 1.94833e-5 1 1.73395e-5 -4.17136e-7 1 -1.86558e-5 1.7577e-6 1 2.64075e-5 -3.20039e-6 1 -4.51007e-5 -9.69498e-6 1 5.41707e-6 3.17423e-5 1 -1.75426e-5 3.1285e-6 1 -1.13164e-6 6.4762e-6 1 -2.91912e-6 -1.55295e-6 1 -2.99077e-6 -3.42936e-6 1 -6.74601e-6 -5.09312e-6 1 -1.00189e-5 -4.37918e-7 1 -5.60813e-6 0 1 -1.20944e-6 -9.81301e-6 1 -3.45867e-6 2.38296e-6 1 1.9128e-5 2.02751e-6 1 1.55944e-5 2.56821e-6 1 2.05061e-5 1.32572e-6 1 1.72381e-7 -2.18287e-6 1 -5.86458e-7 2.70127e-6 1 2.24909e-7 8.84131e-6 1 1.34578e-6 3.7604e-6 1 6.47297e-7 0 1 4.03157e-6 0 1 -2.54622e-7 5.97545e-6 1 1.08442e-5 2.22489e-5 1 4.12058e-5 -1.13415e-5 1 -2.12401e-5 1.18437e-5 1 2.26886e-5 4.3407e-7 1 0 1.36086e-6 1 2.29041e-7 1.75715e-6 1 3.49898e-7 -1.31247e-5 1 2.04086e-5 1.34606e-5 1 -2.15565e-5 0 1 1.46707e-7 -1.04956e-5 1 4.61643e-6 -6.23751e-6 1 2.73548e-6 -2.52364e-6 1 9.091e-7 1.35257e-6 1 -1.34351e-7 4.16932e-7 1 1.64272e-7 3.51772e-7 1 -2.33279e-7 9.94035e-7 1 9.88339e-6 2.59617e-7 1 2.42555e-6 -1.40975e-6 1 -7.25845e-7 -1.31366e-6 1 -6.92549e-7 -7.03749e-6 1 -2.57553e-6 -2.68458e-6 1 -8.63491e-7 -5.39425e-6 1 -1.87988e-6 3.20024e-5 1 1.07792e-5 -2.44701e-5 1 -7.58721e-6 2.45514e-5 1 7.70411e-6 -6.14641e-6 1 -2.64014e-6 6.55309e-6 1 1.72562e-6 -1.10603e-4 1 -3.18605e-5 2.04232e-5 1 6.46177e-6 -5.93351e-6 1 4.33946e-5 -9.90475e-7 1 7.70156e-6 2.59617e-7 1 -2.42555e-6 0 1 0 -1.71358e-5 1 -3.51121e-5 8.12304e-6 1 1.62184e-5 1.34089e-6 1 0 -2.20885e-6 1 5.30741e-7 0 1 0 0 1 0 1.75979e-6 1 -3.1968e-7 9.94035e-7 1 -9.88339e-6 3.51772e-7 1 2.33279e-7 2.25603e-7 1 6.83033e-6 -4.37918e-7 1 5.60813e-6 0 1 -2.74753e-6 0 1 -3.95026e-6 -4.85064e-7 1 3.61795e-6 -4.85064e-7 1 3.98602e-6 0 1 -3.57747e-6 0 1 2.74753e-6 -3.7275e-6 1 1.67262e-6 -1.07557e-5 1 4.493e-6 7.95488e-6 1 -3.54728e-6 -2.01446e-7 1 3.6637e-6 6.06953e-7 1 -3.80068e-6 5.09033e-5 0.9999998 -6.49438e-4 0 1 1.89964e-7 -1.11023e-5 1 -4.98804e-6 -3.78089e-6 1 -1.7871e-6 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.6843208 -0.1833292 0.7057586 -0.6843217 -0.1833323 0.7057572 -0.6420906 -0.2993783 0.7057566 -0.6420906 -0.2993776 0.7057569 -0.5803503 -0.4063264 0.7057566 -0.5803506 -0.4063228 0.7057583 -0.5009754 -0.5009274 0.7057588 -0.5009739 -0.5009323 0.7057563 -0.4063749 -0.5803174 0.7057557 -0.4063766 -0.580314 0.7057576 -0.2994385 -0.6420612 0.7057577 -0.2994346 -0.6420668 0.7057543 -0.1833854 -0.6843109 0.7057537 -0.1833957 -0.6843008 0.7057608 -0.06177496 -0.7057514 0.705761 -0.06177067 -0.7057544 0.7057585 0.06171208 -0.7057598 0.7057583 0.06170773 -0.7057578 0.7057608 0.1833227 -0.68432 0.7057612 0.1833369 -0.6843237 0.705754 0.2993836 -0.6420913 0.7057537 0.2993757 -0.6420906 0.7057576 0.4063224 -0.5803515 0.7057579 0.4063256 -0.5803512 0.7057563 0.5009316 -0.5009744 0.7057565 0.5009287 -0.5009753 0.705758 0.5803131 -0.4063774 0.7057577 0.5803158 -0.4063761 0.7057564 0.6420648 -0.2994341 0.7057563 0.6420638 -0.2994348 0.7057569 0.6843059 -0.1833908 0.7057573 0.6843041 -0.1833925 0.7057584 0.7057543 -0.06177765 0.7057581 0.7057548 -0.06177681 0.7057576 0.7057603 0.0617147 0.7057576 0.7057603 0.06171458 0.7057576 0.6843215 0.1833317 0.7057574 0.6843213 0.1833307 0.7057579 0.6420894 0.2993771 0.705758 0.6420894 0.2993763 0.7057585 0.5803482 0.4063255 0.7057589 0.5803482 0.4063256 0.7057587 0.5009752 0.5009272 0.705759 0.5009735 0.5009334 0.7057558 0.406381 0.5803134 0.7057555 0.4063825 0.5803102 0.7057573 0.2994309 0.6420652 0.7057574 0.2994326 0.6420627 0.7057589 0.1833932 0.6843034 0.7057591 0.183389 0.6843075 0.7057562 0.06177669 0.7057566 0.7057559 0.06178039 0.7057541 0.7057581 -0.06171333 0.7057597 0.7057582 -0.0617178 0.7057617 0.7057558 -0.1833339 0.6843229 0.7057556 -0.1833274 0.6843212 0.7057589 -0.2993715 0.6420907 0.7057592 -0.2993754 0.6420911 0.7057573 -0.4063296 0.5803474 0.7057572 -0.4063308 0.5803472 0.7057566 -0.5009316 0.5009744 0.7057565 -0.5009283 0.5009753 0.7057582 -0.5803132 0.4063768 0.705758 -0.5803117 0.4063776 0.7057588 -0.6420626 0.2994338 0.7057585 -0.6420626 0.2994337 0.7057585 -0.6843045 0.1833925 0.7057582 -0.6843054 0.1833913 0.7057574 -0.7057545 0.06177788 0.7057577 -0.7057547 0.06177759 0.7057576 -0.7057603 -0.06171476 0.7057576 -0.7057598 -0.06171375 0.705758 0.6843047 -0.1833905 -0.7057586 0.6843053 -0.1833928 -0.7057574 0.6420642 -0.2994339 -0.7057569 0.6420643 -0.299435 -0.7057564 0.5803144 -0.4063783 -0.7057563 0.5803147 -0.4063754 -0.7057577 0.5009305 -0.5009734 -0.7057581 0.5009297 -0.5009762 -0.7057566 0.4063233 -0.5803529 -0.7057561 0.4063248 -0.58035 -0.7057577 0.2993819 -0.6420875 -0.705758 0.2993772 -0.6420939 -0.705754 0.1833248 -0.6843275 -0.7057534 0.1833352 -0.6843173 -0.7057607 0.06171184 -0.7057573 -0.7057609 0.06170791 -0.7057599 -0.7057585 -0.0617752 -0.7057542 -0.7057583 -0.06177049 -0.7057521 -0.7057608 -0.1833835 -0.6843035 -0.7057614 -0.1833974 -0.6843071 -0.7057542 -0.29944 -0.6420645 -0.7057541 -0.2994332 -0.6420639 -0.7057574 -0.4063739 -0.5803158 -0.7057577 -0.4063774 -0.5803154 -0.7057559 -0.5009773 -0.5009294 -0.7057561 -0.5009723 -0.5009307 -0.7057586 -0.5803488 -0.4063253 -0.7057584 -0.580352 -0.4063238 -0.7057567 -0.6420903 -0.2993781 -0.7057569 -0.6420909 -0.2993777 -0.7057566 -0.6843225 -0.1833297 -0.7057569 -0.6843203 -0.1833319 -0.7057586 -0.7057597 -0.0617147 -0.7057581 -0.7057604 -0.06171381 -0.7057576 -0.7057548 0.06177794 -0.7057576 -0.7057545 0.06177759 -0.7057577 -0.6843051 0.1833927 -0.7057574 -0.6843048 0.1833912 -0.7057582 -0.6420626 0.2994338 -0.7057585 -0.6420626 0.2994337 -0.7057585 -0.5803126 0.4063763 -0.7057589 -0.5803124 0.406378 -0.7057581 -0.5009303 0.5009732 -0.7057583 -0.5009294 0.5009764 -0.7057566 -0.4063299 0.580348 -0.7057566 -0.4063305 0.5803469 -0.7057572 -0.2993724 0.6420927 -0.7057573 -0.2993746 0.6420895 -0.7057591 -0.183333 0.6843194 -0.7057591 -0.1833282 0.6843241 -0.7057558 -0.06171351 0.7057624 -0.7057556 -0.06171762 0.7057595 -0.7057581 0.06177651 0.7057542 -0.7057583 0.06178057 0.705756 -0.705756 0.183394 0.6843064 -0.705756 0.1833883 0.684305 -0.7057589 0.2994301 0.6420637 -0.7057591 0.2994332 0.6420639 -0.7057574 0.4063799 0.5803118 -0.7057574 0.4063835 0.5803115 -0.7057557 0.5009776 0.5009297 -0.7057556 0.5009714 0.5009314 -0.7057588 0.5803483 0.4063256 -0.7057587 0.5803481 0.4063256 -0.7057589 0.6420891 0.2993769 -0.7057586 0.6420898 0.2993764 -0.7057582 0.684321 0.1833316 -0.7057579 0.6843217 0.1833308 -0.7057574 0.7057603 0.0617147 -0.7057576 0.7057603 0.06171458 -0.7057575 0.7057548 -0.06177771 -0.7057576 0.7057544 -0.06177675 -0.7057581 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -0.9961907 0.08720111 0 -0.9961986 -0.08711194 0 -0.9961986 -0.08711194 0 -0.9659379 -0.2587743 0 -0.9659379 -0.2587743 0 -0.9063259 -0.4225794 0 -0.9063259 -0.4225794 0 -0.8191781 -0.5735391 0 -0.8191781 -0.5735391 0 -0.7071406 -0.707073 0 -0.7071406 -0.707073 0 -0.5736071 -0.8191307 0 -0.5736071 -0.8191307 0 -0.4226651 -0.9062859 0 -0.4226651 -0.9062859 0 -0.2588518 -0.9659171 0 -0.2588518 -0.9659171 0 -0.08719736 -0.996191 0 -0.08719736 -0.996191 0 0.08710831 -0.9961988 0 0.08710831 -0.9961988 0 0.2587661 -0.96594 0 0.2587661 -0.96594 0 0.4225853 -0.9063231 0 0.4225853 -0.9063231 0 0.5735347 -0.8191813 0 0.5735347 -0.8191813 0 0.7070765 -0.7071371 0 0.7070765 -0.7071371 0 0.819127 -0.5736122 0 0.819127 -0.5736122 0 0.9062892 -0.4226582 0 0.9062892 -0.4226582 0 0.9659146 -0.2588607 0 0.9659146 -0.2588607 0 0.9961908 -0.08720082 0 0.9961908 -0.08720082 0 0.9961985 0.08711183 0 0.9961985 0.08711183 0 0.965937 0.2587774 0 0.965937 0.2587774 0 0.9063263 0.4225787 0 0.9063263 0.4225787 0 0.8191777 0.5735398 0 0.8191777 0.5735398 0 0.7071406 0.707073 0 0.7071406 0.707073 0 0.5736155 0.8191248 0 0.5736155 0.8191248 0 0.4226541 0.906291 0 0.4226541 0.906291 0 0.2588647 0.9659136 0 0.2588647 0.9659136 0 0.08719921 0.9961909 0 0.08719921 0.9961909 0 -0.08710998 0.9961987 0 -0.08710998 0.9961987 0 -0.2587798 0.9659363 0 -0.2587798 0.9659363 0 -0.4225715 0.9063296 0 -0.4225715 0.9063296 0 -0.5735443 0.8191746 0 -0.5735443 0.8191746 0 -0.7070765 0.7071371 0 -0.7070765 0.7071371 0 -0.8191274 0.5736116 0 -0.8191274 0.5736116 0 -0.9062888 0.4226589 0 -0.9062888 0.4226589 0 -0.965914 0.2588634 0 -0.965914 0.2588634 0 -0.9961907 0.08720111 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -0.6843207 -0.1833307 0.7057585 -0.6843211 -0.1833322 0.7057577 -0.6420912 -0.2993744 0.7057577 -0.6420914 -0.2993764 0.7057567 -0.5803486 -0.4063296 0.7057563 -0.5803491 -0.4063245 0.7057587 -0.5009748 -0.5009276 0.705759 -0.5009742 -0.5009297 0.705758 -0.4063774 -0.5803129 0.705758 -0.4063773 -0.5803132 0.7057578 -0.2994349 -0.6420629 0.7057577 -0.2994335 -0.6420649 0.7057566 -0.1833897 -0.6843071 0.7057564 -0.1833926 -0.6843043 0.7057583 -0.06177985 -0.7057536 0.7057585 -0.0617752 -0.7057569 0.7057557 0.06171727 -0.7057621 0.7057555 0.06171226 -0.7057599 0.7057583 0.1833283 -0.6843214 0.7057585 0.1833319 -0.6843223 0.7057566 0.2993783 -0.6420906 0.7057567 0.2993766 -0.6420904 0.7057574 0.4063253 -0.58035 0.7057574 0.4063246 -0.5803501 0.705758 0.5009311 -0.500973 0.7057577 0.5009297 -0.5009735 0.7057586 0.5803111 -0.4063792 0.7057585 0.5803149 -0.4063773 0.7057563 0.642065 -0.2994332 0.7057566 0.6420645 -0.2994336 0.7057569 0.684306 -0.1833917 0.705757 0.6843055 -0.1833921 0.7057573 0.7057552 -0.06177777 0.7057572 0.7057555 -0.06177741 0.7057569 0.7057609 0.06171494 0.7057569 0.7057608 0.06171476 0.705757 0.6843225 0.1833308 0.7057567 0.6843223 0.1833302 0.705757 0.6420904 0.2993778 0.705757 0.6420903 0.2993763 0.7057577 0.5803495 0.4063255 0.7057579 0.5803493 0.4063274 0.7057569 0.500974 0.5009319 0.7057566 0.5009748 0.5009291 0.705758 0.4063768 0.5803133 0.7057581 0.4063763 0.5803143 0.7057574 0.2994352 0.642063 0.7057574 0.2994368 0.6420608 0.7057588 0.1833935 0.6843032 0.7057592 0.1833889 0.6843077 0.705756 0.06177538 0.7057569 0.7057557 0.06177949 0.7057541 0.7057582 -0.06171238 0.7057597 0.7057583 -0.06171673 0.7057617 0.7057559 -0.1833334 0.6843227 0.7057558 -0.1833273 0.6843211 0.7057589 -0.2993775 0.6420882 0.7057589 -0.2993797 0.6420884 0.705758 -0.4063258 0.5803492 0.7057579 -0.4063253 0.5803493 0.7057582 -0.5009281 0.5009754 0.7057582 -0.5009305 0.5009748 0.705757 -0.5803132 0.4063784 0.7057572 -0.5803123 0.4063788 0.7057577 -0.6420637 0.2994333 0.7057577 -0.642064 0.2994332 0.7057576 -0.6843053 0.1833918 0.7057576 -0.6843048 0.1833922 0.7057578 -0.7057542 0.06177735 0.7057582 -0.7057542 0.06177741 0.7057582 -0.7057595 -0.06171458 0.7057582 -0.7057596 -0.06171429 0.7057584 0.6843057 -0.1833916 -0.7057573 0.6843058 -0.1833922 -0.705757 0.6420647 -0.2994331 -0.7057569 0.6420647 -0.2994337 -0.7057566 0.580313 -0.4063805 -0.7057561 0.5803133 -0.4063763 -0.7057583 0.5009306 -0.5009724 -0.7057587 0.5009301 -0.5009739 -0.7057579 0.4063252 -0.5803496 -0.7057579 0.4063248 -0.5803503 -0.7057576 0.2993779 -0.6420898 -0.7057576 0.2993769 -0.6420911 -0.7057567 0.1833289 -0.6843233 -0.7057565 0.1833315 -0.6843207 -0.7057583 0.06171709 -0.7057592 -0.7057585 0.06171244 -0.7057624 -0.7057557 -0.06178003 -0.7057567 -0.7057555 -0.06177496 -0.7057543 -0.7057583 -0.1833892 -0.684305 -0.7057585 -0.183393 -0.684306 -0.7057565 -0.2994355 -0.642064 -0.7057565 -0.2994331 -0.6420638 -0.7057577 -0.4063776 -0.580313 -0.7057579 -0.4063772 -0.580313 -0.705758 -0.5009756 -0.5009285 -0.7057579 -0.5009736 -0.500929 -0.7057589 -0.5803464 -0.406328 -0.7057589 -0.5803509 -0.4063258 -0.7057564 -0.6420922 -0.2993748 -0.7057566 -0.6420906 -0.299376 -0.7057577 -0.6843215 -0.1833308 -0.7057577 -0.6843204 -0.183332 -0.7057585 -0.7057594 -0.06171458 -0.7057585 -0.7057598 -0.06171429 -0.7057582 -0.7057542 0.06177735 -0.7057582 -0.7057542 0.06177741 -0.7057582 -0.684305 0.1833918 -0.7057579 -0.6843051 0.1833922 -0.7057576 -0.6420638 0.2994334 -0.7057575 -0.6420638 0.2994331 -0.7057576 -0.5803127 0.4063782 -0.7057577 -0.5803126 0.4063791 -0.7057573 -0.5009291 0.5009764 -0.7057569 -0.5009297 0.5009741 -0.705758 -0.4063256 0.580349 -0.7057581 -0.4063254 0.5803495 -0.7057579 -0.299378 0.6420893 -0.7057578 -0.2993792 0.6420876 -0.7057589 -0.1833325 0.6843194 -0.7057592 -0.183328 0.6843239 -0.705756 -0.06171256 0.7057623 -0.7057558 -0.06171655 0.7057595 -0.7057581 0.06177514 0.7057543 -0.7057583 0.06177973 0.7057563 -0.7057558 0.1833944 0.6843065 -0.7057557 0.1833881 0.6843049 -0.7057589 0.2994347 0.6420617 -0.7057589 0.2994374 0.642062 -0.7057576 0.4063772 0.5803138 -0.7057574 0.406376 0.5803139 -0.705758 0.5009729 0.5009308 -0.7057581 0.5009757 0.50093 -0.7057567 0.5803504 0.4063261 -0.7057567 0.5803485 0.4063268 -0.7057577 0.6420896 0.2993775 -0.7057577 0.6420909 0.2993766 -0.705757 0.6843221 0.1833308 -0.705757 0.6843225 0.1833304 -0.7057568 0.7057608 0.061715 -0.705757 0.705761 0.06171476 -0.7057569 0.7057555 -0.06177771 -0.7057569 0.7057552 -0.06177735 -0.7057571 -0.9961908 0.0872004 0 -0.9961985 -0.08711183 0 -0.9961985 -0.08711183 0 -0.9659373 -0.2587763 0 -0.9659373 -0.2587763 0 -0.9063282 -0.4225745 0 -0.9063282 -0.4225745 0 -0.8191751 -0.5735434 0 -0.8191751 -0.5735434 0 -0.7071401 -0.7070736 0 -0.7071401 -0.7070736 0 -0.5736124 -0.8191269 0 -0.5736124 -0.8191269 0 -0.4226601 -0.9062882 0 -0.4226601 -0.9062882 0 -0.2588589 -0.9659151 0 -0.2588589 -0.9659151 0 -0.08720391 -0.9961906 0 -0.08720391 -0.9961906 0 0.08711534 -0.9961982 0 0.08711534 -0.9961982 0 0.258773 -0.9659383 0 0.258773 -0.9659383 0 0.4225794 -0.9063259 0 0.4225794 -0.9063259 0 0.5735386 -0.8191787 0 0.5735386 -0.8191787 0 0.7070772 -0.7071364 0 0.7070772 -0.7071364 0 0.8191249 -0.5736153 0 0.8191249 -0.5736153 0 0.9062897 -0.422657 0 0.9062897 -0.422657 0 0.9659144 -0.2588618 0 0.9659144 -0.2588618 0 0.9961907 -0.08720082 0 0.9961907 -0.08720082 0 0.9961986 0.08711224 0 0.9961986 0.08711224 0 0.9659374 0.2587759 0 0.9659374 0.2587759 0 0.9063261 0.422579 0 0.9063261 0.422579 0 0.8191784 0.5735388 0 0.8191784 0.5735388 0 0.7071365 0.707077 0 0.7071365 0.707077 0 0.5736116 0.8191275 0 0.5736116 0.8191275 0 0.4226604 0.9062881 0 0.4226604 0.9062881 0 0.2588652 0.9659135 0 0.2588652 0.9659135 0 0.0871973 0.9961911 0 0.0871973 0.9961911 0 -0.08710873 0.9961988 0 -0.08710873 0.9961988 0 -0.2587792 0.9659366 0 -0.2587792 0.9659366 0 -0.4225799 0.9063257 0 -0.4225799 0.9063257 0 -0.5735394 0.8191781 0 -0.5735394 0.8191781 0 -0.7070734 0.7071403 0 -0.7070734 0.7071403 0 -0.8191263 0.5736131 0 -0.8191263 0.5736131 0 -0.9062893 0.4226578 0 -0.9062893 0.4226578 0 -0.9659143 0.2588623 0 -0.9659143 0.2588623 0 -0.9961908 0.0872004 0 0 0 1 0 0 1 0.07845968 0 0.9969173 0.07845968 0 0.9969173 0.2334445 0 0.9723702 0.2334445 0 0.9723702 0.3826821 0 0.9238801 0.3826821 0 0.9238801 0.5224992 0 0.8526398 0.5224992 0 0.8526398 0.6494494 0 0.7604048 0.6494494 0 0.7604048 0.7604052 0 0.6494489 0.7604052 0 0.6494489 0.8526411 0 0.5224969 0.8526411 0 0.5224969 0.9238791 0 0.3826845 0.9238791 0 0.3826845 0.9723693 0 0.2334479 0.9723693 0 0.2334479 0.9969176 0 0.07845705 0.9969176 0 0.07845705 1 0 0 1 0 0 0.9969176 0 -0.07845705 0.9969176 0 -0.07845705 0.9723693 0 -0.2334479 0.9723693 0 -0.2334479 0.9238791 0 -0.3826845 0.9238791 0 -0.3826845 0.8526411 0 -0.5224969 0.8526411 0 -0.5224969 0.7604052 0 -0.6494489 0.7604052 0 -0.6494489 0.6494494 0 -0.7604048 0.6494494 0 -0.7604048 0.5224992 0 -0.8526398 0.5224992 0 -0.8526398 0.3826821 0 -0.9238801 0.3826821 0 -0.9238801 0.2334445 0 -0.9723702 0.2334445 0 -0.9723702 0.07845968 0 -0.9969173 0.07845968 0 -0.9969173 0 0 -1 0 0 -1 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 + + + + + + + + + + + + + + + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +

144 136 145 136 146 136 146 137 145 137 147 137 146 138 147 138 148 138 148 139 147 139 149 139 148 140 149 140 150 140 150 141 149 141 151 141 150 142 151 142 152 142 152 143 151 143 153 143 152 144 153 144 154 144 154 145 153 145 155 145 154 146 155 146 156 146 156 147 155 147 157 147 156 148 157 148 158 148 158 149 157 149 159 149 158 150 159 150 160 150 160 151 159 151 161 151 160 152 161 152 162 152 162 153 161 153 163 153 162 154 163 154 164 154 164 155 163 155 165 155 164 156 165 156 166 156 166 157 165 157 167 157 166 158 167 158 168 158 168 159 167 159 169 159 168 160 169 160 170 160 170 161 169 161 171 161 170 162 171 162 172 162 172 163 171 163 173 163 172 164 173 164 174 164 174 165 173 165 175 165 174 166 175 166 176 166 176 167 175 167 177 167 176 168 177 168 178 168 178 169 177 169 179 169 178 170 179 170 180 170 180 171 179 171 181 171 180 172 181 172 182 172 182 173 181 173 183 173 182 174 183 174 184 174 184 175 183 175 185 175 184 176 185 176 186 176 186 177 185 177 187 177 186 178 187 178 188 178 188 179 187 179 189 179 188 180 189 180 190 180 190 181 189 181 191 181 190 182 191 182 192 182 192 183 191 183 193 183 192 184 193 184 194 184 194 185 193 185 195 185 194 186 195 186 196 186 196 187 195 187 197 187 196 188 197 188 198 188 198 189 197 189 199 189 198 190 199 190 200 190 200 191 199 191 201 191 200 192 201 192 202 192 202 193 201 193 203 193 202 194 203 194 204 194 204 195 203 195 205 195 204 196 205 196 206 196 206 197 205 197 207 197 206 198 207 198 208 198 208 199 207 199 209 199 208 200 209 200 210 200 210 201 209 201 211 201 210 202 211 202 212 202 212 203 211 203 213 203 212 204 213 204 214 204 214 205 213 205 215 205 214 206 215 206 144 206 144 207 215 207 145 207 216 208 217 208 218 208 218 209 217 209 219 209 218 210 219 210 220 210 220 211 219 211 221 211 220 212 221 212 222 212 222 213 221 213 223 213 222 214 223 214 224 214 224 215 223 215 225 215 224 216 225 216 226 216 226 217 225 217 227 217 226 218 227 218 228 218 228 219 227 219 229 219 228 220 229 220 230 220 230 221 229 221 231 221 230 222 231 222 232 222 232 223 231 223 233 223 232 224 233 224 234 224 234 225 233 225 235 225 234 226 235 226 236 226 236 227 235 227 237 227 236 228 237 228 238 228 238 229 237 229 239 229 238 230 239 230 240 230 240 231 239 231 241 231 240 232 241 232 242 232 242 233 241 233 243 233 242 234 243 234 244 234 244 235 243 235 245 235 244 236 245 236 246 236 246 237 245 237 247 237 246 238 247 238 248 238 248 239 247 239 249 239 248 240 249 240 250 240 250 241 249 241 251 241 250 242 251 242 252 242 252 243 251 243 253 243 252 244 253 244 254 244 254 245 253 245 255 245 254 246 255 246 256 246 256 247 255 247 257 247 256 248 257 248 258 248 258 249 257 249 259 249 258 250 259 250 260 250 260 251 259 251 261 251 260 252 261 252 262 252 262 253 261 253 263 253 262 254 263 254 264 254 264 255 263 255 265 255 264 256 265 256 266 256 266 257 265 257 267 257 266 258 267 258 268 258 268 259 267 259 269 259 268 260 269 260 270 260 270 261 269 261 271 261 270 262 271 262 272 262 272 263 271 263 273 263 272 264 273 264 274 264 274 265 273 265 275 265 274 266 275 266 276 266 276 267 275 267 277 267 276 268 277 268 278 268 278 269 277 269 279 269 278 270 279 270 280 270 280 271 279 271 281 271 280 272 281 272 282 272 282 273 281 273 283 273 282 274 283 274 284 274 284 275 283 275 285 275 284 276 285 276 286 276 286 277 285 277 287 277 286 278 287 278 216 278 216 279 287 279 217 279 288 280 196 280 289 280 289 281 196 281 198 281 289 282 198 282 290 282 290 283 198 283 200 283 290 284 200 284 291 284 291 285 200 285 202 285 291 286 202 286 292 286 292 287 202 287 204 287 292 288 204 288 293 288 293 289 204 289 206 289 293 290 206 290 294 290 294 291 206 291 208 291 294 292 208 292 295 292 295 293 208 293 210 293 295 294 210 294 296 294 296 295 210 295 212 295 296 296 212 296 297 296 297 297 212 297 214 297 297 298 214 298 298 298 298 299 214 299 144 299 298 300 144 300 299 300 299 301 144 301 146 301 299 302 146 302 300 302 300 303 146 303 148 303 300 304 148 304 301 304 301 305 148 305 150 305 301 306 150 306 302 306 302 307 150 307 152 307 302 308 152 308 303 308 303 309 152 309 154 309 303 310 154 310 304 310 304 311 154 311 156 311 304 312 156 312 305 312 305 313 156 313 158 313 305 314 158 314 306 314 306 315 158 315 160 315 306 316 160 316 307 316 307 317 160 317 162 317 307 318 162 318 308 318 308 319 162 319 164 319 308 320 164 320 309 320 309 321 164 321 166 321 309 322 166 322 310 322 310 323 166 323 168 323 310 324 168 324 311 324 311 325 168 325 170 325 311 326 170 326 312 326 312 327 170 327 172 327 312 328 172 328 313 328 313 329 172 329 174 329 313 330 174 330 314 330 314 331 174 331 176 331 314 332 176 332 315 332 315 333 176 333 178 333 315 334 178 334 316 334 316 335 178 335 180 335 316 336 180 336 317 336 317 337 180 337 182 337 317 338 182 338 318 338 318 339 182 339 184 339 318 340 184 340 319 340 319 341 184 341 186 341 319 342 186 342 320 342 320 343 186 343 188 343 320 344 188 344 321 344 321 345 188 345 190 345 321 346 190 346 322 346 322 347 190 347 192 347 322 348 192 348 323 348 323 349 192 349 194 349 323 350 194 350 288 350 288 351 194 351 196 351 324 352 238 352 325 352 325 353 238 353 240 353 325 354 240 354 326 354 326 355 240 355 242 355 326 356 242 356 327 356 327 357 242 357 244 357 327 358 244 358 328 358 328 359 244 359 246 359 328 360 246 360 329 360 329 361 246 361 248 361 329 362 248 362 330 362 330 363 248 363 250 363 330 364 250 364 331 364 331 365 250 365 252 365 331 366 252 366 332 366 332 367 252 367 254 367 332 368 254 368 333 368 333 369 254 369 256 369 333 370 256 370 334 370 334 371 256 371 258 371 334 372 258 372 335 372 335 373 258 373 260 373 335 374 260 374 336 374 336 375 260 375 262 375 336 376 262 376 337 376 337 377 262 377 264 377 337 378 264 378 338 378 338 379 264 379 266 379 338 380 266 380 339 380 339 381 266 381 268 381 339 382 268 382 340 382 340 383 268 383 270 383 340 384 270 384 341 384 341 385 270 385 272 385 341 386 272 386 342 386 342 387 272 387 274 387 342 388 274 388 343 388 343 389 274 389 276 389 343 390 276 390 344 390 344 391 276 391 278 391 344 392 278 392 345 392 345 393 278 393 280 393 345 394 280 394 346 394 346 395 280 395 282 395 346 396 282 396 347 396 347 397 282 397 284 397 347 398 284 398 348 398 348 399 284 399 286 399 348 400 286 400 349 400 349 401 286 401 216 401 349 402 216 402 350 402 350 403 216 403 218 403 350 404 218 404 351 404 351 405 218 405 220 405 351 406 220 406 352 406 352 407 220 407 222 407 352 408 222 408 353 408 353 409 222 409 224 409 353 410 224 410 354 410 354 411 224 411 226 411 354 412 226 412 355 412 355 413 226 413 228 413 355 414 228 414 356 414 356 415 228 415 230 415 356 416 230 416 357 416 357 417 230 417 232 417 357 418 232 418 358 418 358 419 232 419 234 419 358 420 234 420 359 420 359 421 234 421 236 421 359 422 236 422 324 422 324 423 236 423 238 423 16 424 360 424 17 424 17 425 360 425 361 425 17 426 361 426 18 426 18 427 361 427 362 427 18 428 362 428 34 428 34 429 362 429 363 429 34 430 363 430 2 430 2 431 363 431 364 431 2 432 364 432 12 432 12 433 364 433 365 433 12 434 365 434 13 434 13 435 365 435 366 435 13 436 366 436 19 436 19 437 366 437 367 437 19 438 367 438 20 438 20 439 367 439 368 439 20 440 368 440 0 440 0 441 368 441 369 441 0 442 369 442 1 442 1 443 369 443 370 443 1 444 370 444 14 444 14 445 370 445 371 445 14 446 371 446 15 446 15 447 371 447 372 447 15 448 372 448 3 448 3 449 372 449 373 449 3 450 373 450 4 450 4 451 373 451 374 451 4 452 374 452 21 452 21 453 374 453 375 453 21 454 375 454 22 454 22 455 375 455 376 455 22 456 376 456 23 456 23 457 376 457 377 457 23 458 377 458 24 458 24 459 377 459 378 459 24 460 378 460 25 460 25 461 378 461 379 461 25 462 379 462 26 462 26 463 379 463 380 463 26 464 380 464 27 464 27 465 380 465 381 465 27 466 381 466 28 466 28 467 381 467 382 467 28 468 382 468 5 468 5 469 382 469 383 469 5 470 383 470 6 470 6 471 383 471 384 471 6 472 384 472 7 472 7 473 384 473 385 473 7 474 385 474 8 474 8 475 385 475 386 475 8 476 386 476 9 476 9 477 386 477 387 477 9 478 387 478 10 478 10 479 387 479 388 479 10 480 388 480 11 480 11 481 388 481 389 481 11 482 389 482 29 482 29 483 389 483 390 483 29 484 390 484 30 484 30 485 390 485 391 485 30 486 391 486 31 486 31 487 391 487 392 487 31 488 392 488 32 488 32 489 392 489 393 489 32 490 393 490 33 490 33 491 393 491 394 491 33 492 394 492 35 492 35 493 394 493 395 493 35 494 395 494 16 494 16 495 395 495 360 495 396 496 397 496 398 496 396 497 398 497 399 497 399 498 398 498 400 498 399 499 400 499 401 499 401 500 400 500 402 500 401 501 402 501 403 501 403 502 402 502 404 502 403 503 404 503 405 503 405 504 404 504 406 504 405 505 406 505 407 505 407 506 406 506 408 506 407 507 408 507 409 507 409 508 408 508 410 508 409 509 410 509 411 509 411 510 410 510 412 510 411 511 412 511 413 511 413 512 412 512 414 512 413 513 414 513 415 513 415 514 414 514 416 514 415 515 416 515 417 515 417 516 416 516 418 516 417 517 418 517 419 517 419 518 418 518 420 518 419 519 420 519 421 519 421 520 420 520 422 520 421 521 422 521 423 521 423 522 422 522 424 522 423 523 424 523 425 523 425 524 424 524 426 524 425 525 426 525 427 525 427 526 426 526 428 526 427 527 428 527 429 527 429 528 428 528 430 528 429 529 430 529 431 529 431 530 430 530 432 530 431 531 432 531 433 531 67 532 434 532 68 532 68 533 434 533 435 533 68 534 435 534 69 534 69 535 435 535 436 535 69 536 436 536 65 536 65 537 436 537 437 537 65 538 437 538 66 538 66 539 437 539 438 539 66 540 438 540 71 540 71 541 438 541 439 541 71 542 439 542 53 542 53 543 439 543 440 543 53 544 440 544 38 544 38 545 440 545 441 545 38 546 441 546 41 546 41 547 441 547 442 547 41 548 442 548 42 548 42 549 442 549 443 549 42 550 443 550 48 550 48 551 443 551 444 551 48 552 444 552 49 552 49 553 444 553 445 553 49 554 445 554 50 554 50 555 445 555 446 555 50 556 446 556 62 556 62 557 446 557 447 557 62 558 447 558 63 558 63 559 447 559 448 559 63 560 448 560 46 560 46 561 448 561 449 561 46 562 449 562 47 562 47 563 449 563 450 563 47 564 450 564 60 564 60 565 450 565 451 565 60 566 451 566 59 566 59 567 451 567 452 567 59 568 452 568 58 568 58 569 452 569 453 569 58 570 453 570 56 570 56 571 453 571 454 571 56 572 454 572 57 572 57 573 454 573 455 573 57 574 455 574 61 574 61 575 455 575 456 575 61 576 456 576 40 576 40 577 456 577 457 577 40 578 457 578 36 578 36 579 457 579 458 579 36 580 458 580 37 580 37 581 458 581 459 581 37 582 459 582 39 582 39 583 459 583 460 583 39 584 460 584 43 584 43 585 460 585 461 585 43 586 461 586 44 586 44 587 461 587 462 587 44 588 462 588 45 588 45 589 462 589 463 589 45 590 463 590 51 590 51 591 463 591 464 591 51 592 464 592 52 592 52 593 464 593 465 593 52 594 465 594 54 594 54 595 465 595 466 595 54 596 466 596 55 596 55 597 466 597 467 597 55 598 467 598 70 598 70 599 467 599 468 599 70 600 468 600 64 600 64 601 468 601 469 601 64 602 469 602 67 602 67 603 469 603 434 603 96 604 470 604 97 604 97 605 470 605 471 605 97 606 471 606 99 606 99 607 471 607 472 607 99 608 472 608 78 608 78 609 472 609 473 609 78 610 473 610 79 610 79 611 473 611 474 611 79 612 474 612 77 612 77 613 474 613 475 613 77 614 475 614 82 614 82 615 475 615 476 615 82 616 476 616 72 616 72 617 476 617 477 617 72 618 477 618 73 618 73 619 477 619 478 619 73 620 478 620 85 620 85 621 478 621 479 621 85 622 479 622 86 622 86 623 479 623 480 623 86 624 480 624 87 624 87 625 480 625 481 625 87 626 481 626 88 626 88 627 481 627 482 627 88 628 482 628 89 628 89 629 482 629 483 629 89 630 483 630 90 630 90 631 483 631 484 631 90 632 484 632 100 632 100 633 484 633 485 633 100 634 485 634 101 634 101 635 485 635 486 635 101 636 486 636 102 636 102 637 486 637 487 637 102 638 487 638 103 638 103 639 487 639 488 639 103 640 488 640 104 640 104 641 488 641 489 641 104 642 489 642 106 642 106 643 489 643 490 643 106 644 490 644 107 644 107 645 490 645 491 645 107 646 491 646 105 646 105 647 491 647 492 647 105 648 492 648 74 648 74 649 492 649 493 649 74 650 493 650 91 650 91 651 493 651 494 651 91 652 494 652 75 652 75 653 494 653 495 653 75 654 495 654 76 654 76 655 495 655 496 655 76 656 496 656 83 656 83 657 496 657 497 657 83 658 497 658 84 658 84 659 497 659 498 659 84 660 498 660 81 660 81 661 498 661 499 661 81 662 499 662 80 662 80 663 499 663 500 663 80 664 500 664 92 664 92 665 500 665 501 665 92 666 501 666 93 666 93 667 501 667 502 667 93 668 502 668 94 668 94 669 502 669 503 669 94 670 503 670 98 670 98 671 503 671 504 671 98 672 504 672 95 672 95 673 504 673 505 673 95 674 505 674 96 674 96 675 505 675 470 675 116 676 506 676 136 676 136 677 506 677 507 677 136 678 507 678 137 678 137 679 507 679 508 679 137 680 508 680 138 680 138 681 508 681 509 681 138 682 509 682 139 682 139 683 509 683 510 683 139 684 510 684 140 684 140 685 510 685 511 685 140 686 511 686 142 686 142 687 511 687 512 687 142 688 512 688 141 688 141 689 512 689 513 689 141 690 513 690 111 690 111 691 513 691 514 691 111 692 514 692 110 692 110 693 514 693 515 693 110 694 515 694 108 694 108 695 515 695 516 695 108 696 516 696 117 696 117 697 516 697 517 697 117 698 517 698 123 698 123 699 517 699 518 699 123 700 518 700 124 700 124 701 518 701 519 701 124 702 519 702 125 702 125 703 519 703 520 703 125 704 520 704 129 704 129 705 520 705 521 705 129 706 521 706 122 706 122 707 521 707 522 707 122 708 522 708 126 708 126 709 522 709 523 709 126 710 523 710 127 710 127 711 523 711 524 711 127 712 524 712 128 712 128 713 524 713 525 713 128 714 525 714 143 714 143 715 525 715 526 715 143 716 526 716 120 716 120 717 526 717 527 717 120 718 527 718 121 718 121 719 527 719 528 719 121 720 528 720 130 720 130 721 528 721 529 721 130 722 529 722 118 722 118 723 529 723 530 723 118 724 530 724 119 724 119 725 530 725 531 725 119 726 531 726 109 726 109 727 531 727 532 727 109 728 532 728 112 728 112 729 532 729 533 729 112 730 533 730 113 730 113 731 533 731 534 731 113 732 534 732 114 732 114 733 534 733 535 733 114 734 535 734 131 734 131 735 535 735 536 735 131 736 536 736 132 736 132 737 536 737 537 737 132 738 537 738 133 738 133 739 537 739 538 739 133 740 538 740 134 740 134 741 538 741 539 741 134 742 539 742 135 742 135 743 539 743 540 743 135 744 540 744 115 744 115 745 540 745 541 745 115 746 541 746 116 746 116 747 541 747 506 747 542 748 543 748 544 748 544 749 543 749 545 749 543 750 542 750 546 750 543 751 546 751 547 751 547 752 546 752 548 752 547 753 548 753 549 753 549 754 548 754 550 754 549 755 550 755 551 755 551 756 550 756 552 756 551 757 552 757 553 757 553 758 552 758 554 758 553 759 554 759 555 759 555 760 554 760 556 760 555 761 556 761 557 761 557 762 556 762 558 762 557 763 558 763 559 763 559 764 558 764 560 764 560 765 558 765 561 765 560 766 561 766 562 766 560 767 562 767 563 767 563 768 562 768 564 768 563 769 564 769 565 769 565 770 564 770 566 770 565 771 566 771 567 771 567 772 566 772 568 772 567 773 568 773 569 773 569 774 568 774 570 774 569 775 570 775 571 775 571 776 570 776 572 776 571 777 572 777 573 777 573 778 572 778 574 778 573 779 574 779 575 779 575 780 574 780 576 780 575 781 576 781 577 781 577 782 576 782 578 782 577 783 578 783 579 783 579 784 578 784 580 784 579 785 580 785 581 785 581 786 580 786 582 786 581 787 582 787 583 787 583 788 582 788 584 788 583 789 584 789 585 789 585 790 584 790 586 790 585 791 586 791 587 791 587 792 586 792 588 792 587 793 588 793 589 793 589 794 588 794 590 794 589 795 590 795 591 795 591 796 590 796 592 796 591 797 592 797 593 797 593 798 592 798 594 798 593 799 594 799 595 799 595 800 594 800 596 800 595 801 596 801 597 801 597 802 596 802 598 802 598 803 596 803 599 803 600 804 601 804 602 804 600 805 602 805 603 805 603 806 602 806 604 806 603 807 604 807 605 807 605 808 604 808 606 808 605 809 606 809 607 809 607 810 606 810 608 810 607 811 608 811 609 811 609 812 608 812 610 812 609 813 610 813 611 813 611 814 610 814 612 814 611 815 612 815 613 815 613 816 612 816 614 816 613 817 614 817 615 817 615 818 614 818 598 818 615 819 598 819 599 819 616 820 617 820 618 820 616 821 618 821 619 821 619 822 618 822 620 822 619 823 620 823 621 823 621 824 620 824 622 824 621 825 622 825 623 825 623 826 622 826 624 826 623 827 624 827 625 827 625 828 624 828 626 828 625 829 626 829 627 829 627 830 626 830 628 830 627 831 628 831 629 831 629 832 628 832 630 832 629 833 630 833 631 833 631 834 630 834 632 834 631 835 632 835 633 835 633 836 632 836 634 836 633 837 634 837 635 837 635 838 634 838 636 838 635 839 636 839 637 839 637 840 636 840 638 840 637 841 638 841 639 841 639 842 638 842 640 842 639 843 640 843 641 843 641 844 640 844 642 844 641 845 642 845 643 845 643 846 642 846 644 846 643 847 644 847 645 847 645 848 644 848 646 848 645 849 646 849 647 849 647 850 646 850 648 850 647 851 648 851 649 851 649 852 648 852 650 852 649 853 650 853 651 853 651 854 650 854 652 854 651 855 652 855 653 855 654 856 655 856 656 856 654 857 656 857 657 857 657 858 656 858 658 858 657 859 658 859 659 859 659 860 658 860 660 860 659 861 660 861 661 861 661 862 660 862 662 862 661 863 662 863 663 863 663 864 662 864 664 864 663 865 664 865 665 865 665 866 664 866 666 866 665 867 666 867 667 867 667 868 666 868 668 868 667 869 668 869 669 869 669 870 668 870 670 870 669 871 670 871 671 871 671 872 670 872 672 872 671 873 672 873 673 873 673 874 672 874 674 874 673 875 674 875 675 875 675 876 674 876 676 876 675 877 676 877 677 877 677 878 676 878 678 878 677 879 678 879 679 879 679 880 678 880 680 880 679 881 680 881 681 881 681 882 680 882 682 882 681 883 682 883 683 883 683 884 682 884 684 884 683 885 684 885 685 885 685 886 684 886 686 886 685 887 686 887 687 887 687 888 686 888 688 888 687 889 688 889 689 889 689 890 688 890 690 890 689 891 690 891 691 891 692 892 693 892 694 892 692 893 694 893 695 893 695 894 694 894 696 894 695 895 696 895 697 895 697 896 696 896 698 896 697 897 698 897 699 897 699 898 698 898 700 898 699 899 700 899 701 899 701 900 700 900 702 900 701 901 702 901 703 901 703 902 702 902 704 902 703 903 704 903 705 903 705 904 704 904 706 904 705 905 706 905 707 905 707 906 706 906 708 906 707 907 708 907 709 907 709 908 708 908 710 908 709 909 710 909 711 909 711 910 710 910 712 910 711 911 712 911 713 911 713 912 712 912 714 912 713 913 714 913 715 913 715 914 714 914 716 914 715 915 716 915 717 915 717 916 716 916 718 916 717 917 718 917 719 917 719 918 718 918 720 918 719 919 720 919 721 919 721 920 720 920 722 920 721 921 722 921 723 921 723 922 722 922 724 922 723 923 724 923 725 923 725 924 724 924 726 924 725 925 726 925 727 925 727 926 726 926 728 926 727 927 728 927 729 927 729 928 728 928 730 928 729 929 730 929 731 929 689 930 691 930 732 930 683 931 685 931 169 931 653 932 654 932 651 932 651 933 654 933 657 933 651 934 657 934 659 934 229 935 227 935 600 935 641 936 643 936 659 936 659 937 643 937 645 937 600 938 616 938 619 938 645 939 647 939 659 939 659 940 647 940 649 940 659 941 649 941 651 941 227 942 225 942 600 942 600 943 225 943 223 943 600 944 223 944 221 944 283 945 281 945 601 945 433 946 601 946 431 946 431 947 601 947 275 947 431 948 275 948 429 948 429 949 275 949 273 949 429 950 273 950 271 950 619 951 621 951 600 951 600 952 621 952 231 952 600 953 231 953 229 953 251 954 627 954 733 954 733 955 627 955 255 955 631 956 633 956 257 956 734 957 735 957 263 957 207 958 205 958 405 958 283 959 601 959 285 959 281 960 279 960 601 960 601 961 279 961 277 961 601 962 277 962 275 962 251 963 249 963 627 963 627 964 249 964 247 964 627 965 247 965 625 965 241 966 239 966 621 966 621 967 239 967 237 967 257 968 633 968 259 968 736 969 737 969 145 969 145 970 737 970 738 970 401 971 203 971 201 971 423 972 739 972 740 972 271 973 269 973 429 973 429 974 269 974 267 974 429 975 267 975 427 975 427 976 267 976 265 976 427 977 265 977 425 977 425 978 265 978 741 978 425 979 741 979 423 979 423 980 741 980 742 980 423 981 742 981 739 981 221 982 219 982 600 982 600 983 219 983 217 983 600 984 217 984 601 984 601 985 217 985 287 985 601 986 287 986 285 986 237 987 235 987 621 987 621 988 235 988 233 988 621 989 233 989 231 989 735 990 743 990 263 990 263 991 743 991 744 991 263 992 744 992 265 992 265 993 744 993 745 993 265 994 745 994 741 994 153 995 151 995 671 995 191 996 189 996 746 996 746 997 189 997 187 997 746 998 187 998 185 998 185 999 183 999 746 999 746 1000 183 1000 747 1000 746 1001 747 1001 732 1001 732 1002 747 1002 179 1002 203 1003 401 1003 205 1003 205 1004 401 1004 403 1004 205 1005 403 1005 405 1005 201 1006 199 1006 401 1006 401 1007 199 1007 197 1007 401 1008 197 1008 195 1008 215 1009 213 1009 411 1009 411 1010 213 1010 211 1010 215 1011 411 1011 145 1011 145 1012 411 1012 413 1012 145 1013 413 1013 736 1013 740 1014 748 1014 423 1014 423 1015 748 1015 749 1015 423 1016 749 1016 750 1016 750 1017 751 1017 423 1017 423 1018 751 1018 752 1018 423 1019 752 1019 421 1019 255 1020 627 1020 257 1020 257 1021 627 1021 629 1021 257 1022 629 1022 631 1022 259 1023 633 1023 261 1023 261 1024 633 1024 635 1024 261 1025 635 1025 637 1025 663 1026 263 1026 261 1026 163 1027 161 1027 681 1027 625 1028 247 1028 623 1028 623 1029 247 1029 245 1029 623 1030 245 1030 621 1030 621 1031 245 1031 243 1031 621 1032 243 1032 241 1032 663 1033 261 1033 661 1033 661 1034 261 1034 637 1034 661 1035 637 1035 659 1035 659 1036 637 1036 639 1036 659 1037 639 1037 641 1037 163 1038 681 1038 165 1038 731 1039 396 1039 729 1039 729 1040 396 1040 399 1040 179 1041 177 1041 732 1041 732 1042 177 1042 175 1042 732 1043 175 1043 173 1043 207 1044 405 1044 209 1044 209 1045 405 1045 407 1045 209 1046 407 1046 211 1046 211 1047 407 1047 409 1047 211 1048 409 1048 411 1048 753 1049 754 1049 667 1049 667 1050 754 1050 755 1050 753 1051 667 1051 756 1051 756 1052 667 1052 669 1052 756 1053 669 1053 671 1053 683 1054 169 1054 681 1054 681 1055 169 1055 167 1055 681 1056 167 1056 165 1056 153 1057 671 1057 155 1057 155 1058 671 1058 673 1058 155 1059 673 1059 157 1059 157 1060 673 1060 675 1060 157 1061 675 1061 159 1061 159 1062 675 1062 677 1062 159 1063 677 1063 161 1063 161 1064 677 1064 679 1064 161 1065 679 1065 681 1065 692 1066 695 1066 746 1066 746 1067 695 1067 697 1067 746 1068 697 1068 191 1068 689 1069 732 1069 687 1069 687 1070 732 1070 173 1070 687 1071 173 1071 685 1071 685 1072 173 1072 171 1072 685 1073 171 1073 169 1073 413 1074 415 1074 736 1074 736 1075 415 1075 417 1075 736 1076 417 1076 752 1076 752 1077 417 1077 419 1077 752 1078 419 1078 421 1078 757 1079 758 1079 663 1079 663 1080 758 1080 759 1080 663 1081 759 1081 760 1081 760 1082 761 1082 663 1082 663 1083 761 1083 762 1083 663 1084 762 1084 263 1084 263 1085 762 1085 763 1085 263 1086 763 1086 734 1086 738 1087 764 1087 145 1087 145 1088 764 1088 756 1088 145 1089 756 1089 147 1089 147 1090 756 1090 671 1090 147 1091 671 1091 149 1091 149 1092 671 1092 151 1092 723 1093 725 1093 399 1093 399 1094 725 1094 727 1094 399 1095 727 1095 729 1095 755 1096 765 1096 667 1096 667 1097 765 1097 766 1097 667 1098 766 1098 767 1098 717 1099 719 1099 399 1099 399 1100 719 1100 721 1100 399 1101 721 1101 723 1101 193 1102 711 1102 713 1102 767 1103 768 1103 667 1103 667 1104 768 1104 769 1104 667 1105 769 1105 665 1105 665 1106 769 1106 770 1106 665 1107 770 1107 663 1107 663 1108 770 1108 771 1108 663 1109 771 1109 757 1109 705 1110 707 1110 193 1110 193 1111 707 1111 709 1111 193 1112 709 1112 711 1112 195 1113 193 1113 401 1113 401 1114 193 1114 713 1114 401 1115 713 1115 399 1115 399 1116 713 1116 715 1116 399 1117 715 1117 717 1117 697 1118 699 1118 191 1118 191 1119 699 1119 701 1119 191 1120 701 1120 193 1120 193 1121 701 1121 703 1121 193 1122 703 1122 705 1122 746 1123 732 1123 772 1123 772 1124 732 1124 773 1124 774 1125 299 1125 775 1125 775 1126 299 1126 300 1126 775 1127 300 1127 776 1127 776 1128 300 1128 301 1128 776 1129 301 1129 777 1129 777 1130 301 1130 302 1130 777 1131 302 1131 778 1131 778 1132 302 1132 303 1132 778 1133 303 1133 779 1133 779 1134 303 1134 304 1134 779 1135 304 1135 780 1135 780 1136 304 1136 305 1136 780 1137 305 1137 781 1137 781 1138 305 1138 306 1138 781 1139 306 1139 782 1139 782 1140 306 1140 307 1140 782 1141 307 1141 783 1141 783 1142 307 1142 308 1142 783 1143 308 1143 784 1143 784 1144 308 1144 309 1144 784 1145 309 1145 785 1145 785 1146 309 1146 310 1146 785 1147 310 1147 786 1147 786 1148 310 1148 311 1148 786 1149 311 1149 787 1149 787 1150 311 1150 312 1150 787 1151 312 1151 788 1151 788 1152 312 1152 313 1152 788 1153 313 1153 789 1153 789 1154 313 1154 314 1154 789 1155 314 1155 790 1155 790 1156 314 1156 315 1156 790 1157 315 1157 791 1157 791 1158 315 1158 316 1158 791 1159 316 1159 792 1159 792 1160 316 1160 317 1160 792 1161 317 1161 793 1161 793 1162 317 1162 318 1162 793 1163 318 1163 794 1163 794 1164 318 1164 319 1164 794 1165 319 1165 795 1165 795 1166 319 1166 320 1166 795 1167 320 1167 796 1167 796 1168 320 1168 321 1168 796 1169 321 1169 797 1169 797 1170 321 1170 322 1170 797 1171 322 1171 798 1171 798 1172 322 1172 323 1172 798 1173 323 1173 799 1173 799 1174 323 1174 288 1174 799 1175 288 1175 800 1175 800 1176 288 1176 289 1176 800 1177 289 1177 801 1177 801 1178 289 1178 290 1178 801 1179 290 1179 802 1179 802 1180 290 1180 291 1180 802 1181 291 1181 803 1181 803 1182 291 1182 292 1182 803 1183 292 1183 804 1183 804 1184 292 1184 293 1184 804 1185 293 1185 805 1185 805 1186 293 1186 294 1186 805 1187 294 1187 806 1187 806 1188 294 1188 295 1188 806 1189 295 1189 807 1189 807 1190 295 1190 296 1190 807 1191 296 1191 808 1191 808 1192 296 1192 297 1192 808 1193 297 1193 809 1193 809 1194 297 1194 298 1194 809 1195 298 1195 774 1195 774 1196 298 1196 299 1196 810 1197 350 1197 811 1197 811 1198 350 1198 351 1198 811 1199 351 1199 812 1199 812 1200 351 1200 352 1200 812 1201 352 1201 813 1201 813 1202 352 1202 353 1202 813 1203 353 1203 814 1203 814 1204 353 1204 354 1204 814 1205 354 1205 815 1205 815 1206 354 1206 355 1206 815 1207 355 1207 816 1207 816 1208 355 1208 356 1208 816 1209 356 1209 817 1209 817 1210 356 1210 357 1210 817 1211 357 1211 818 1211 818 1212 357 1212 358 1212 818 1213 358 1213 819 1213 819 1214 358 1214 359 1214 819 1215 359 1215 820 1215 820 1216 359 1216 324 1216 820 1217 324 1217 821 1217 821 1218 324 1218 325 1218 821 1219 325 1219 822 1219 822 1220 325 1220 326 1220 822 1221 326 1221 823 1221 823 1222 326 1222 327 1222 823 1223 327 1223 824 1223 824 1224 327 1224 328 1224 824 1225 328 1225 825 1225 825 1226 328 1226 329 1226 825 1227 329 1227 826 1227 826 1228 329 1228 330 1228 826 1229 330 1229 827 1229 827 1230 330 1230 331 1230 827 1231 331 1231 828 1231 828 1232 331 1232 332 1232 828 1233 332 1233 829 1233 829 1234 332 1234 333 1234 829 1235 333 1235 830 1235 830 1236 333 1236 334 1236 830 1237 334 1237 831 1237 831 1238 334 1238 335 1238 831 1239 335 1239 832 1239 832 1240 335 1240 336 1240 832 1241 336 1241 833 1241 833 1242 336 1242 337 1242 833 1243 337 1243 834 1243 834 1244 337 1244 338 1244 834 1245 338 1245 835 1245 835 1246 338 1246 339 1246 835 1247 339 1247 836 1247 836 1248 339 1248 340 1248 836 1249 340 1249 837 1249 837 1250 340 1250 341 1250 837 1251 341 1251 838 1251 838 1252 341 1252 342 1252 838 1253 342 1253 839 1253 839 1254 342 1254 343 1254 839 1255 343 1255 840 1255 840 1256 343 1256 344 1256 840 1257 344 1257 841 1257 841 1258 344 1258 345 1258 841 1259 345 1259 842 1259 842 1260 345 1260 346 1260 842 1261 346 1261 843 1261 843 1262 346 1262 347 1262 843 1263 347 1263 844 1263 844 1264 347 1264 348 1264 844 1265 348 1265 845 1265 845 1266 348 1266 349 1266 845 1267 349 1267 810 1267 810 1268 349 1268 350 1268 754 1269 846 1269 755 1269 755 1270 846 1270 847 1270 755 1271 847 1271 765 1271 765 1272 847 1272 848 1272 765 1273 848 1273 766 1273 766 1274 848 1274 849 1274 766 1275 849 1275 767 1275 767 1276 849 1276 850 1276 767 1277 850 1277 768 1277 768 1278 850 1278 851 1278 768 1279 851 1279 769 1279 769 1280 851 1280 852 1280 769 1281 852 1281 770 1281 770 1282 852 1282 853 1282 770 1283 853 1283 771 1283 771 1284 853 1284 854 1284 771 1285 854 1285 757 1285 757 1286 854 1286 855 1286 757 1287 855 1287 758 1287 758 1288 855 1288 856 1288 758 1289 856 1289 759 1289 759 1290 856 1290 857 1290 759 1291 857 1291 760 1291 760 1292 857 1292 858 1292 760 1293 858 1293 761 1293 761 1294 858 1294 859 1294 761 1295 859 1295 762 1295 762 1296 859 1296 860 1296 762 1297 860 1297 763 1297 763 1298 860 1298 861 1298 763 1299 861 1299 734 1299 734 1300 861 1300 862 1300 734 1301 862 1301 735 1301 735 1302 862 1302 863 1302 735 1303 863 1303 743 1303 743 1304 863 1304 864 1304 743 1305 864 1305 865 1305 865 1306 864 1306 866 1306 865 1307 866 1307 745 1307 745 1308 866 1308 867 1308 745 1309 867 1309 741 1309 741 1310 867 1310 868 1310 741 1311 868 1311 742 1311 742 1312 868 1312 869 1312 742 1313 869 1313 739 1313 739 1314 869 1314 870 1314 739 1315 870 1315 740 1315 740 1316 870 1316 871 1316 740 1317 871 1317 748 1317 748 1318 871 1318 872 1318 748 1319 872 1319 749 1319 749 1320 872 1320 873 1320 749 1321 873 1321 750 1321 750 1322 873 1322 874 1322 750 1323 874 1323 751 1323 751 1324 874 1324 875 1324 751 1325 875 1325 752 1325 752 1326 875 1326 876 1326 752 1327 876 1327 736 1327 736 1328 876 1328 877 1328 736 1329 877 1329 737 1329 737 1330 877 1330 878 1330 737 1331 878 1331 738 1331 738 1332 878 1332 879 1332 738 1333 879 1333 764 1333 764 1334 879 1334 880 1334 764 1335 880 1335 756 1335 756 1336 880 1336 881 1336 756 1337 881 1337 753 1337 753 1338 881 1338 882 1338 753 1339 882 1339 754 1339 754 1340 882 1340 846 1340 731 1341 730 1341 396 1341 396 1342 730 1342 397 1342 455 1343 454 1343 883 1343 883 1344 454 1344 453 1344 883 1345 453 1345 452 1345 447 1346 446 1346 378 1346 378 1347 446 1347 445 1347 450 1348 449 1348 378 1348 378 1349 449 1349 448 1349 378 1350 448 1350 447 1350 459 1351 545 1351 460 1351 460 1352 545 1352 543 1352 459 1353 458 1353 545 1353 545 1354 458 1354 457 1354 545 1355 457 1355 883 1355 883 1356 457 1356 456 1356 883 1357 456 1357 455 1357 391 1358 390 1358 559 1358 382 1359 381 1359 443 1359 443 1360 381 1360 380 1360 436 1361 435 1361 388 1361 386 1362 385 1362 441 1362 445 1363 444 1363 378 1363 378 1364 444 1364 443 1364 378 1365 443 1365 379 1365 379 1366 443 1366 380 1366 441 1367 385 1367 442 1367 442 1368 385 1368 384 1368 442 1369 384 1369 443 1369 443 1370 384 1370 383 1370 443 1371 383 1371 382 1371 441 1372 440 1372 386 1372 386 1373 440 1373 439 1373 386 1374 439 1374 387 1374 387 1375 439 1375 438 1375 387 1376 438 1376 388 1376 388 1377 438 1377 437 1377 388 1378 437 1378 436 1378 390 1379 389 1379 559 1379 559 1380 389 1380 388 1380 559 1381 388 1381 434 1381 434 1382 388 1382 435 1382 598 1383 614 1383 450 1383 450 1384 614 1384 612 1384 450 1385 612 1385 610 1385 610 1386 608 1386 450 1386 450 1387 608 1387 606 1387 450 1388 606 1388 451 1388 451 1389 606 1389 604 1389 451 1390 604 1390 602 1390 602 1391 601 1391 451 1391 451 1392 601 1392 433 1392 451 1393 433 1393 452 1393 452 1394 433 1394 432 1394 452 1395 432 1395 883 1395 560 1396 393 1396 559 1396 559 1397 393 1397 392 1397 559 1398 392 1398 391 1398 434 1399 469 1399 559 1399 559 1400 469 1400 468 1400 559 1401 468 1401 557 1401 557 1402 468 1402 467 1402 557 1403 467 1403 555 1403 555 1404 467 1404 466 1404 555 1405 466 1405 553 1405 553 1406 466 1406 465 1406 553 1407 465 1407 551 1407 551 1408 465 1408 464 1408 551 1409 464 1409 549 1409 549 1410 464 1410 463 1410 549 1411 463 1411 547 1411 547 1412 463 1412 462 1412 547 1413 462 1413 543 1413 543 1414 462 1414 461 1414 543 1415 461 1415 460 1415 450 1416 378 1416 598 1416 598 1417 378 1417 377 1417 598 1418 377 1418 597 1418 597 1419 377 1419 376 1419 597 1420 376 1420 595 1420 595 1421 376 1421 375 1421 595 1422 375 1422 593 1422 593 1423 375 1423 374 1423 593 1424 374 1424 591 1424 591 1425 374 1425 373 1425 591 1426 373 1426 589 1426 589 1427 373 1427 372 1427 589 1428 372 1428 587 1428 587 1429 372 1429 371 1429 587 1430 371 1430 585 1430 585 1431 371 1431 370 1431 585 1432 370 1432 583 1432 583 1433 370 1433 369 1433 583 1434 369 1434 581 1434 581 1435 369 1435 368 1435 581 1436 368 1436 579 1436 579 1437 368 1437 367 1437 579 1438 367 1438 577 1438 577 1439 367 1439 366 1439 577 1440 366 1440 575 1440 575 1441 366 1441 365 1441 575 1442 365 1442 573 1442 573 1443 365 1443 364 1443 573 1444 364 1444 571 1444 571 1445 364 1445 363 1445 571 1446 363 1446 569 1446 569 1447 363 1447 362 1447 569 1448 362 1448 567 1448 567 1449 362 1449 361 1449 567 1450 361 1450 565 1450 565 1451 361 1451 360 1451 565 1452 360 1452 563 1452 563 1453 360 1453 395 1453 563 1454 395 1454 560 1454 560 1455 395 1455 394 1455 560 1456 394 1456 393 1456 883 1457 884 1457 545 1457 545 1458 884 1458 544 1458 507 1459 506 1459 884 1459 603 1460 605 1460 884 1460 884 1461 605 1461 607 1461 607 1462 609 1462 884 1462 884 1463 609 1463 611 1463 884 1464 611 1464 613 1464 494 1465 493 1465 524 1465 507 1466 884 1466 508 1466 514 1467 471 1467 470 1467 617 1468 616 1468 884 1468 884 1469 616 1469 600 1469 884 1470 600 1470 603 1470 613 1471 615 1471 884 1471 884 1472 615 1472 599 1472 884 1473 599 1473 472 1473 472 1474 599 1474 596 1474 472 1475 596 1475 594 1475 470 1476 505 1476 514 1476 514 1477 505 1477 504 1477 514 1478 504 1478 503 1478 523 1479 522 1479 496 1479 496 1480 522 1480 521 1480 523 1481 496 1481 524 1481 524 1482 496 1482 495 1482 524 1483 495 1483 494 1483 508 1484 884 1484 509 1484 509 1485 884 1485 472 1485 509 1486 472 1486 510 1486 542 1487 533 1487 546 1487 546 1488 533 1488 532 1488 546 1489 532 1489 548 1489 548 1490 532 1490 531 1490 548 1491 531 1491 550 1491 550 1492 531 1492 530 1492 550 1493 530 1493 552 1493 552 1494 530 1494 529 1494 552 1495 529 1495 554 1495 554 1496 529 1496 528 1496 554 1497 528 1497 556 1497 556 1498 528 1498 527 1498 556 1499 527 1499 558 1499 502 1500 501 1500 516 1500 516 1501 501 1501 500 1501 516 1502 500 1502 517 1502 517 1503 500 1503 499 1503 517 1504 499 1504 518 1504 518 1505 499 1505 498 1505 518 1506 498 1506 519 1506 519 1507 498 1507 520 1507 493 1508 492 1508 524 1508 524 1509 492 1509 561 1509 524 1510 561 1510 525 1510 525 1511 561 1511 558 1511 525 1512 558 1512 526 1512 526 1513 558 1513 527 1513 514 1514 513 1514 471 1514 471 1515 513 1515 512 1515 471 1516 512 1516 472 1516 472 1517 512 1517 511 1517 472 1518 511 1518 510 1518 544 1519 538 1519 537 1519 537 1520 536 1520 544 1520 544 1521 536 1521 535 1521 544 1522 535 1522 542 1522 542 1523 535 1523 534 1523 542 1524 534 1524 533 1524 502 1525 516 1525 503 1525 503 1526 516 1526 515 1526 503 1527 515 1527 514 1527 520 1528 498 1528 521 1528 521 1529 498 1529 497 1529 521 1530 497 1530 496 1530 492 1531 491 1531 561 1531 561 1532 491 1532 490 1532 561 1533 490 1533 562 1533 562 1534 490 1534 489 1534 562 1535 489 1535 564 1535 564 1536 489 1536 488 1536 564 1537 488 1537 566 1537 566 1538 488 1538 487 1538 566 1539 487 1539 568 1539 568 1540 487 1540 486 1540 568 1541 486 1541 570 1541 570 1542 486 1542 485 1542 570 1543 485 1543 572 1543 572 1544 485 1544 484 1544 572 1545 484 1545 574 1545 574 1546 484 1546 483 1546 574 1547 483 1547 576 1547 576 1548 483 1548 482 1548 576 1549 482 1549 578 1549 578 1550 482 1550 481 1550 578 1551 481 1551 580 1551 580 1552 481 1552 480 1552 580 1553 480 1553 582 1553 582 1554 480 1554 479 1554 582 1555 479 1555 584 1555 584 1556 479 1556 478 1556 584 1557 478 1557 586 1557 586 1558 478 1558 477 1558 586 1559 477 1559 588 1559 588 1560 477 1560 476 1560 588 1561 476 1561 590 1561 590 1562 476 1562 475 1562 590 1563 475 1563 592 1563 592 1564 475 1564 474 1564 592 1565 474 1565 594 1565 594 1566 474 1566 473 1566 594 1567 473 1567 472 1567 506 1568 541 1568 884 1568 884 1569 541 1569 540 1569 884 1570 540 1570 544 1570 544 1571 540 1571 539 1571 544 1572 539 1572 538 1572 653 1573 652 1573 654 1573 654 1574 652 1574 655 1574 691 1575 690 1575 732 1575 732 1576 690 1576 885 1576 732 1577 885 1577 773 1577 772 1578 773 1578 886 1578 886 1579 773 1579 885 1579 772 1580 886 1580 746 1580 746 1581 886 1581 693 1581 746 1582 693 1582 692 1582 668 1583 666 1583 846 1583 885 1584 690 1584 688 1584 780 1585 781 1585 670 1585 644 1586 642 1586 658 1586 843 1587 844 1587 883 1587 668 1588 846 1588 670 1588 402 1589 400 1589 712 1589 712 1590 400 1590 398 1590 712 1591 398 1591 714 1591 642 1592 640 1592 846 1592 846 1593 640 1593 638 1593 846 1594 638 1594 847 1594 775 1595 846 1595 882 1595 846 1596 775 1596 670 1596 670 1597 775 1597 776 1597 670 1598 776 1598 777 1598 777 1599 778 1599 670 1599 670 1600 778 1600 779 1600 670 1601 779 1601 780 1601 644 1602 658 1602 646 1602 432 1603 430 1603 883 1603 883 1604 430 1604 428 1604 844 1605 845 1605 883 1605 883 1606 845 1606 810 1606 883 1607 810 1607 884 1607 884 1608 810 1608 811 1608 811 1609 812 1609 884 1609 884 1610 812 1610 813 1610 884 1611 813 1611 814 1611 814 1612 815 1612 884 1612 884 1613 815 1613 816 1613 884 1614 816 1614 817 1614 775 1615 410 1615 774 1615 774 1616 410 1616 809 1616 787 1617 788 1617 885 1617 885 1618 788 1618 789 1618 885 1619 789 1619 790 1619 666 1620 664 1620 846 1620 846 1621 664 1621 662 1621 846 1622 662 1622 642 1622 642 1623 662 1623 660 1623 642 1624 660 1624 658 1624 854 1625 853 1625 632 1625 869 1626 868 1626 420 1626 794 1627 795 1627 886 1627 712 1628 804 1628 402 1628 402 1629 804 1629 805 1629 402 1630 805 1630 806 1630 397 1631 730 1631 398 1631 398 1632 730 1632 728 1632 398 1633 728 1633 726 1633 655 1634 652 1634 656 1634 656 1635 652 1635 650 1635 656 1636 650 1636 658 1636 658 1637 650 1637 648 1637 658 1638 648 1638 646 1638 850 1639 638 1639 636 1639 850 1640 849 1640 638 1640 638 1641 849 1641 848 1641 638 1642 848 1642 847 1642 428 1643 838 1643 839 1643 410 1644 878 1644 412 1644 412 1645 878 1645 877 1645 412 1646 877 1646 414 1646 790 1647 791 1647 885 1647 885 1648 791 1648 792 1648 885 1649 792 1649 886 1649 886 1650 792 1650 887 1650 886 1651 887 1651 794 1651 795 1652 796 1652 886 1652 886 1653 796 1653 797 1653 886 1654 797 1654 798 1654 798 1655 799 1655 886 1655 886 1656 799 1656 800 1656 886 1657 800 1657 693 1657 693 1658 800 1658 801 1658 688 1659 686 1659 885 1659 885 1660 686 1660 684 1660 885 1661 684 1661 787 1661 787 1662 684 1662 682 1662 678 1663 784 1663 785 1663 784 1664 678 1664 783 1664 783 1665 678 1665 676 1665 783 1666 676 1666 782 1666 782 1667 676 1667 674 1667 782 1668 674 1668 781 1668 781 1669 674 1669 672 1669 781 1670 672 1670 670 1670 830 1671 831 1671 868 1671 868 1672 831 1672 832 1672 835 1673 836 1673 428 1673 428 1674 836 1674 837 1674 428 1675 837 1675 838 1675 839 1676 840 1676 428 1676 428 1677 840 1677 841 1677 428 1678 841 1678 883 1678 883 1679 841 1679 842 1679 883 1680 842 1680 843 1680 882 1681 881 1681 775 1681 775 1682 881 1682 880 1682 775 1683 880 1683 410 1683 410 1684 880 1684 879 1684 410 1685 879 1685 878 1685 809 1686 410 1686 808 1686 808 1687 410 1687 408 1687 808 1688 408 1688 807 1688 807 1689 408 1689 406 1689 807 1690 406 1690 806 1690 806 1691 406 1691 404 1691 806 1692 404 1692 402 1692 726 1693 724 1693 398 1693 398 1694 724 1694 722 1694 398 1695 722 1695 720 1695 682 1696 680 1696 787 1696 787 1697 680 1697 678 1697 787 1698 678 1698 786 1698 786 1699 678 1699 785 1699 630 1700 628 1700 818 1700 818 1701 628 1701 626 1701 818 1702 626 1702 624 1702 862 1703 861 1703 828 1703 828 1704 861 1704 827 1704 803 1705 704 1705 702 1705 720 1706 718 1706 398 1706 398 1707 718 1707 716 1707 398 1708 716 1708 714 1708 632 1709 853 1709 634 1709 634 1710 853 1710 852 1710 634 1711 852 1711 636 1711 636 1712 852 1712 851 1712 636 1713 851 1713 850 1713 617 1714 884 1714 618 1714 618 1715 884 1715 817 1715 618 1716 817 1716 620 1716 620 1717 817 1717 818 1717 620 1718 818 1718 622 1718 622 1719 818 1719 624 1719 857 1720 856 1720 632 1720 632 1721 856 1721 855 1721 632 1722 855 1722 854 1722 428 1723 426 1723 835 1723 835 1724 426 1724 424 1724 835 1725 424 1725 868 1725 868 1726 424 1726 422 1726 868 1727 422 1727 420 1727 418 1728 874 1728 420 1728 420 1729 874 1729 873 1729 420 1730 873 1730 872 1730 832 1731 833 1731 868 1731 868 1732 833 1732 834 1732 868 1733 834 1733 835 1733 712 1734 710 1734 804 1734 804 1735 710 1735 708 1735 804 1736 708 1736 803 1736 803 1737 708 1737 706 1737 803 1738 706 1738 704 1738 702 1739 700 1739 803 1739 803 1740 700 1740 698 1740 803 1741 698 1741 696 1741 801 1742 802 1742 693 1742 693 1743 802 1743 803 1743 693 1744 803 1744 694 1744 694 1745 803 1745 696 1745 821 1746 822 1746 861 1746 861 1747 822 1747 823 1747 861 1748 823 1748 824 1748 630 1749 818 1749 632 1749 632 1750 818 1750 819 1750 632 1751 819 1751 820 1751 414 1752 877 1752 416 1752 416 1753 877 1753 876 1753 416 1754 876 1754 418 1754 418 1755 876 1755 875 1755 418 1756 875 1756 874 1756 824 1757 825 1757 861 1757 861 1758 825 1758 826 1758 861 1759 826 1759 827 1759 868 1760 867 1760 830 1760 830 1761 867 1761 866 1761 830 1762 866 1762 888 1762 888 1763 866 1763 889 1763 888 1764 889 1764 828 1764 828 1765 889 1765 863 1765 828 1766 863 1766 862 1766 872 1767 871 1767 420 1767 420 1768 871 1768 870 1768 420 1769 870 1769 869 1769 861 1770 860 1770 821 1770 821 1771 860 1771 859 1771 821 1772 859 1772 820 1772 820 1773 859 1773 632 1773 632 1774 859 1774 858 1774 632 1775 858 1775 857 1775 890 1776 891 1776 892 1776 893 1777 894 1777 895 1777 895 1778 894 1778 896 1778 895 1779 896 1779 897 1779 890 1780 892 1780 898 1780 891 1781 899 1781 892 1781 892 1782 899 1782 900 1782 892 1783 900 1783 901 1783 897 1784 902 1784 895 1784 895 1785 902 1785 903 1785 895 1786 903 1786 904 1786 904 1787 905 1787 895 1787 895 1788 905 1788 892 1788 895 1789 892 1789 906 1789 893 1790 895 1790 907 1790 907 1791 895 1791 908 1791 907 1792 908 1792 909 1792 910 1793 911 1793 912 1793 912 1794 911 1794 913 1794 913 1795 914 1795 912 1795 912 1796 914 1796 915 1796 912 1797 915 1797 916 1797 910 1798 912 1798 892 1798 892 1799 912 1799 917 1799 892 1800 917 1800 898 1800 901 1801 918 1801 892 1801 892 1802 918 1802 919 1802 892 1803 919 1803 906 1803 909 1804 920 1804 907 1804 907 1805 920 1805 921 1805 907 1806 921 1806 922 1806 922 1807 923 1807 907 1807 907 1808 923 1808 924 1808 907 1809 924 1809 925 1809 926 1810 909 1810 927 1810 927 1811 909 1811 908 1811 927 1812 908 1812 928 1812 928 1813 908 1813 895 1813 928 1814 895 1814 929 1814 929 1815 895 1815 906 1815 929 1816 906 1816 930 1816 930 1817 906 1817 919 1817 930 1818 919 1818 931 1818 931 1819 919 1819 918 1819 931 1820 918 1820 932 1820 932 1821 918 1821 901 1821 932 1822 901 1822 933 1822 933 1823 901 1823 900 1823 933 1824 900 1824 934 1824 934 1825 900 1825 899 1825 934 1826 899 1826 935 1826 935 1827 899 1827 891 1827 935 1828 891 1828 936 1828 936 1829 891 1829 890 1829 936 1830 890 1830 937 1830 937 1831 890 1831 898 1831 937 1832 898 1832 938 1832 938 1833 898 1833 917 1833 938 1834 917 1834 939 1834 939 1835 917 1835 912 1835 939 1836 912 1836 940 1836 940 1837 912 1837 916 1837 940 1838 916 1838 941 1838 941 1839 916 1839 915 1839 941 1840 915 1840 942 1840 942 1841 915 1841 914 1841 942 1842 914 1842 943 1842 943 1843 914 1843 913 1843 943 1844 913 1844 944 1844 944 1845 913 1845 911 1845 944 1846 911 1846 945 1846 945 1847 911 1847 910 1847 945 1848 910 1848 946 1848 946 1849 910 1849 892 1849 946 1850 892 1850 947 1850 947 1851 892 1851 905 1851 947 1852 905 1852 948 1852 948 1853 905 1853 904 1853 948 1854 904 1854 949 1854 949 1855 904 1855 903 1855 949 1856 903 1856 950 1856 950 1857 903 1857 902 1857 950 1858 902 1858 951 1858 951 1859 902 1859 897 1859 951 1860 897 1860 952 1860 952 1861 897 1861 896 1861 952 1862 896 1862 953 1862 953 1863 896 1863 894 1863 953 1864 894 1864 954 1864 954 1865 894 1865 893 1865 954 1866 893 1866 955 1866 955 1867 893 1867 907 1867 955 1868 907 1868 956 1868 956 1869 907 1869 925 1869 956 1870 925 1870 957 1870 957 1871 925 1871 924 1871 957 1872 924 1872 958 1872 958 1873 924 1873 923 1873 958 1874 923 1874 959 1874 959 1875 923 1875 922 1875 959 1876 922 1876 960 1876 960 1877 922 1877 921 1877 960 1878 921 1878 961 1878 961 1879 921 1879 920 1879 961 1880 920 1880 926 1880 926 1881 920 1881 909 1881 962 1882 963 1882 964 1882 964 1883 963 1883 965 1883 964 1884 965 1884 966 1884 966 1885 965 1885 967 1885 966 1886 967 1886 968 1886 968 1887 967 1887 969 1887 968 1888 969 1888 970 1888 970 1889 969 1889 971 1889 970 1890 971 1890 972 1890 972 1891 971 1891 973 1891 972 1892 973 1892 974 1892 974 1893 973 1893 975 1893 974 1894 975 1894 976 1894 976 1895 975 1895 977 1895 976 1896 977 1896 978 1896 978 1897 977 1897 979 1897 978 1898 979 1898 980 1898 980 1899 979 1899 981 1899 980 1900 981 1900 982 1900 982 1901 981 1901 983 1901 982 1902 983 1902 984 1902 984 1903 983 1903 985 1903 984 1904 985 1904 986 1904 986 1905 985 1905 987 1905 986 1906 987 1906 988 1906 988 1907 987 1907 989 1907 988 1908 989 1908 990 1908 990 1909 989 1909 991 1909 990 1910 991 1910 992 1910 992 1911 991 1911 993 1911 992 1912 993 1912 994 1912 994 1913 993 1913 995 1913 994 1914 995 1914 996 1914 996 1915 995 1915 997 1915 996 1916 997 1916 998 1916 998 1917 997 1917 999 1917 998 1918 999 1918 1000 1918 1000 1919 999 1919 1001 1919 1000 1920 1001 1920 1002 1920 1002 1921 1001 1921 1003 1921 1002 1922 1003 1922 1004 1922 1004 1923 1003 1923 1005 1923 1004 1924 1005 1924 1006 1924 1006 1925 1005 1925 1007 1925 1006 1926 1007 1926 1008 1926 1008 1927 1007 1927 1009 1927 1008 1928 1009 1928 1010 1928 1010 1929 1009 1929 1011 1929 1010 1930 1011 1930 1012 1930 1012 1931 1011 1931 1013 1931 1012 1932 1013 1932 1014 1932 1014 1933 1013 1933 1015 1933 1014 1934 1015 1934 1016 1934 1016 1935 1015 1935 1017 1935 1016 1936 1017 1936 1018 1936 1018 1937 1017 1937 1019 1937 1018 1938 1019 1938 1020 1938 1020 1939 1019 1939 1021 1939 1020 1940 1021 1940 1022 1940 1022 1941 1021 1941 1023 1941 1022 1942 1023 1942 1024 1942 1024 1943 1023 1943 1025 1943 1024 1944 1025 1944 1026 1944 1026 1945 1025 1945 1027 1945 1026 1946 1027 1946 1028 1946 1028 1947 1027 1947 1029 1947 1028 1948 1029 1948 1030 1948 1030 1949 1029 1949 1031 1949 1030 1950 1031 1950 1032 1950 1032 1951 1031 1951 1033 1951 1032 1952 1033 1952 962 1952 962 1953 1033 1953 963 1953 1021 1954 1019 1954 1007 1954 1007 1955 1019 1955 1017 1955 1007 1956 1017 1956 1015 1956 1015 1957 1013 1957 1007 1957 1007 1958 1013 1958 1011 1958 1007 1959 1011 1959 1009 1959 1001 1960 1025 1960 1003 1960 1003 1961 1025 1961 1005 1961 983 1962 981 1962 971 1962 971 1963 981 1963 979 1963 979 1964 977 1964 971 1964 971 1965 977 1965 975 1965 971 1966 975 1966 973 1966 1005 1967 1025 1967 1007 1967 1007 1968 1025 1968 1023 1968 1007 1969 1023 1969 1021 1969 1001 1970 999 1970 1025 1970 1025 1971 999 1971 997 1971 1025 1972 997 1972 995 1972 989 1973 987 1973 971 1973 971 1974 987 1974 985 1974 971 1975 985 1975 983 1975 971 1976 969 1976 989 1976 989 1977 969 1977 967 1977 989 1978 967 1978 965 1978 995 1979 993 1979 1025 1979 1025 1980 993 1980 991 1980 1025 1981 991 1981 989 1981 965 1982 963 1982 989 1982 989 1983 963 1983 1033 1983 989 1984 1033 1984 1031 1984 1031 1985 1029 1985 989 1985 989 1986 1029 1986 1027 1986 989 1987 1027 1987 1025 1987 998 1988 961 1988 996 1988 996 1989 961 1989 926 1989 996 1990 926 1990 994 1990 994 1991 926 1991 927 1991 994 1992 927 1992 992 1992 992 1993 927 1993 928 1993 992 1994 928 1994 990 1994 990 1995 928 1995 929 1995 990 1996 929 1996 988 1996 988 1997 929 1997 930 1997 988 1998 930 1998 986 1998 986 1999 930 1999 931 1999 986 2000 931 2000 984 2000 984 2001 931 2001 932 2001 984 2002 932 2002 982 2002 982 2003 932 2003 933 2003 982 2004 933 2004 980 2004 980 2005 933 2005 934 2005 980 2006 934 2006 978 2006 978 2007 934 2007 935 2007 978 2008 935 2008 976 2008 976 2009 935 2009 936 2009 976 2010 936 2010 974 2010 974 2011 936 2011 937 2011 974 2012 937 2012 972 2012 972 2013 937 2013 938 2013 972 2014 938 2014 970 2014 970 2015 938 2015 939 2015 970 2016 939 2016 968 2016 968 2017 939 2017 940 2017 968 2018 940 2018 966 2018 966 2019 940 2019 941 2019 966 2020 941 2020 964 2020 964 2021 941 2021 942 2021 964 2022 942 2022 962 2022 962 2023 942 2023 943 2023 962 2024 943 2024 1032 2024 1032 2025 943 2025 944 2025 1032 2026 944 2026 1030 2026 1030 2027 944 2027 945 2027 1030 2028 945 2028 1028 2028 1028 2029 945 2029 946 2029 1028 2030 946 2030 1026 2030 1026 2031 946 2031 947 2031 1026 2032 947 2032 1024 2032 1024 2033 947 2033 948 2033 1024 2034 948 2034 1022 2034 1022 2035 948 2035 949 2035 1022 2036 949 2036 1020 2036 1020 2037 949 2037 950 2037 1020 2038 950 2038 1018 2038 1018 2039 950 2039 951 2039 1018 2040 951 2040 1016 2040 1016 2041 951 2041 952 2041 1016 2042 952 2042 1014 2042 1014 2043 952 2043 953 2043 1014 2044 953 2044 1012 2044 1012 2045 953 2045 954 2045 1012 2046 954 2046 1010 2046 1010 2047 954 2047 955 2047 1010 2048 955 2048 1008 2048 1008 2049 955 2049 956 2049 1008 2050 956 2050 1006 2050 1006 2051 956 2051 957 2051 1006 2052 957 2052 1004 2052 1004 2053 957 2053 958 2053 1004 2054 958 2054 1002 2054 1002 2055 958 2055 959 2055 1002 2056 959 2056 1000 2056 1000 2057 959 2057 960 2057 1000 2058 960 2058 998 2058 998 2059 960 2059 961 2059 1034 2060 1035 2060 1036 2060 1037 2061 1038 2061 1039 2061 1035 2062 1040 2062 1036 2062 1036 2063 1040 2063 1041 2063 1036 2064 1041 2064 1042 2064 1043 2065 1044 2065 1036 2065 1036 2066 1044 2066 1045 2066 1036 2067 1045 2067 1046 2067 1038 2068 1047 2068 1039 2068 1039 2069 1047 2069 1048 2069 1039 2070 1048 2070 1036 2070 1043 2071 1036 2071 1049 2071 1049 2072 1036 2072 1050 2072 1049 2073 1050 2073 1051 2073 1046 2074 1052 2074 1036 2074 1036 2075 1052 2075 1053 2075 1036 2076 1053 2076 1034 2076 1042 2077 1054 2077 1036 2077 1036 2078 1054 2078 1055 2078 1036 2079 1055 2079 1039 2079 1039 2080 1056 2080 1057 2080 1051 2081 1058 2081 1049 2081 1049 2082 1058 2082 1059 2082 1049 2083 1059 2083 1060 2083 1060 2084 1059 2084 1061 2084 1062 2085 1063 2085 1039 2085 1039 2086 1063 2086 1064 2086 1039 2087 1064 2087 1056 2087 1057 2088 1065 2088 1039 2088 1039 2089 1065 2089 1066 2089 1039 2090 1066 2090 1037 2090 1061 2091 1059 2091 1067 2091 1067 2092 1059 2092 1068 2092 1067 2093 1068 2093 1069 2093 1070 2094 1071 2094 1072 2094 1073 2095 1074 2095 1075 2095 1076 2096 1077 2096 1078 2096 1073 2097 1075 2097 1079 2097 1071 2098 1080 2098 1072 2098 1072 2099 1080 2099 1078 2099 1072 2100 1078 2100 1081 2100 1081 2101 1078 2101 1077 2101 1082 2102 1083 2102 1072 2102 1072 2103 1083 2103 1084 2103 1072 2104 1084 2104 1085 2104 1085 2105 1086 2105 1072 2105 1072 2106 1086 2106 1087 2106 1072 2107 1087 2107 1070 2107 1079 2108 1075 2108 1078 2108 1078 2109 1075 2109 1088 2109 1078 2110 1088 2110 1076 2110 1089 2111 1074 2111 1090 2111 1090 2112 1074 2112 1091 2112 1089 2113 1092 2113 1074 2113 1074 2114 1092 2114 1093 2114 1074 2115 1093 2115 1075 2115 1082 2116 1094 2116 1083 2116 1083 2117 1094 2117 1095 2117 1083 2118 1095 2118 1096 2118 1097 2119 1098 2119 1074 2119 1074 2120 1098 2120 1099 2120 1074 2121 1099 2121 1091 2121 1096 2122 1100 2122 1083 2122 1083 2123 1100 2123 1101 2123 1083 2124 1101 2124 1102 2124 1102 2125 1103 2125 1083 2125 1083 2126 1103 2126 1104 2126 1083 2127 1104 2127 1105 2127 1106 2128 1059 2128 1107 2128 1107 2129 1059 2129 1058 2129 1107 2130 1058 2130 1108 2130 1108 2131 1058 2131 1051 2131 1108 2132 1051 2132 1109 2132 1109 2133 1051 2133 1050 2133 1109 2134 1050 2134 1110 2134 1110 2135 1050 2135 1036 2135 1110 2136 1036 2136 1111 2136 1111 2137 1036 2137 1048 2137 1111 2138 1048 2138 1112 2138 1112 2139 1048 2139 1047 2139 1112 2140 1047 2140 1113 2140 1113 2141 1047 2141 1038 2141 1113 2142 1038 2142 1114 2142 1114 2143 1038 2143 1037 2143 1114 2144 1037 2144 1115 2144 1115 2145 1037 2145 1066 2145 1115 2146 1066 2146 1116 2146 1116 2147 1066 2147 1065 2147 1116 2148 1065 2148 1117 2148 1117 2149 1065 2149 1057 2149 1117 2150 1057 2150 1118 2150 1118 2151 1057 2151 1056 2151 1118 2152 1056 2152 1119 2152 1119 2153 1056 2153 1064 2153 1119 2154 1064 2154 1120 2154 1120 2155 1064 2155 1063 2155 1120 2156 1063 2156 1121 2156 1121 2157 1063 2157 1062 2157 1121 2158 1062 2158 1122 2158 1122 2159 1062 2159 1039 2159 1122 2160 1039 2160 1123 2160 1123 2161 1039 2161 1055 2161 1123 2162 1055 2162 1124 2162 1124 2163 1055 2163 1054 2163 1124 2164 1054 2164 1125 2164 1125 2165 1054 2165 1042 2165 1125 2166 1042 2166 1126 2166 1126 2167 1042 2167 1041 2167 1126 2168 1041 2168 1127 2168 1127 2169 1041 2169 1040 2169 1127 2170 1040 2170 1128 2170 1128 2171 1040 2171 1035 2171 1128 2172 1035 2172 1129 2172 1129 2173 1035 2173 1034 2173 1129 2174 1034 2174 1130 2174 1130 2175 1034 2175 1053 2175 1130 2176 1053 2176 1131 2176 1131 2177 1053 2177 1052 2177 1131 2178 1052 2178 1132 2178 1132 2179 1052 2179 1046 2179 1132 2180 1046 2180 1133 2180 1133 2181 1046 2181 1045 2181 1133 2182 1045 2182 1134 2182 1134 2183 1045 2183 1044 2183 1134 2184 1044 2184 1135 2184 1135 2185 1044 2185 1043 2185 1135 2186 1043 2186 1136 2186 1136 2187 1043 2187 1049 2187 1136 2188 1049 2188 1137 2188 1137 2189 1049 2189 1060 2189 1137 2190 1060 2190 1138 2190 1138 2191 1060 2191 1061 2191 1138 2192 1061 2192 1139 2192 1139 2193 1061 2193 1067 2193 1139 2194 1067 2194 1140 2194 1140 2195 1067 2195 1069 2195 1140 2196 1069 2196 1141 2196 1141 2197 1069 2197 1068 2197 1141 2198 1068 2198 1106 2198 1106 2199 1068 2199 1059 2199 1142 2200 1099 2200 1143 2200 1143 2201 1099 2201 1098 2201 1143 2202 1098 2202 1144 2202 1144 2203 1098 2203 1097 2203 1144 2204 1097 2204 1145 2204 1145 2205 1097 2205 1074 2205 1145 2206 1074 2206 1146 2206 1146 2207 1074 2207 1073 2207 1146 2208 1073 2208 1147 2208 1147 2209 1073 2209 1079 2209 1147 2210 1079 2210 1148 2210 1148 2211 1079 2211 1078 2211 1148 2212 1078 2212 1149 2212 1149 2213 1078 2213 1080 2213 1149 2214 1080 2214 1150 2214 1150 2215 1080 2215 1071 2215 1150 2216 1071 2216 1151 2216 1151 2217 1071 2217 1070 2217 1151 2218 1070 2218 1152 2218 1152 2219 1070 2219 1087 2219 1152 2220 1087 2220 1153 2220 1153 2221 1087 2221 1086 2221 1153 2222 1086 2222 1154 2222 1154 2223 1086 2223 1085 2223 1154 2224 1085 2224 1155 2224 1155 2225 1085 2225 1084 2225 1155 2226 1084 2226 1156 2226 1156 2227 1084 2227 1083 2227 1156 2228 1083 2228 1157 2228 1157 2229 1083 2229 1105 2229 1157 2230 1105 2230 1158 2230 1158 2231 1105 2231 1104 2231 1158 2232 1104 2232 1159 2232 1159 2233 1104 2233 1103 2233 1159 2234 1103 2234 1160 2234 1160 2235 1103 2235 1102 2235 1160 2236 1102 2236 1161 2236 1161 2237 1102 2237 1101 2237 1161 2238 1101 2238 1162 2238 1162 2239 1101 2239 1100 2239 1162 2240 1100 2240 1163 2240 1163 2241 1100 2241 1096 2241 1163 2242 1096 2242 1164 2242 1164 2243 1096 2243 1095 2243 1164 2244 1095 2244 1165 2244 1165 2245 1095 2245 1094 2245 1165 2246 1094 2246 1166 2246 1166 2247 1094 2247 1082 2247 1166 2248 1082 2248 1167 2248 1167 2249 1082 2249 1072 2249 1167 2250 1072 2250 1168 2250 1168 2251 1072 2251 1081 2251 1168 2252 1081 2252 1169 2252 1169 2253 1081 2253 1077 2253 1169 2254 1077 2254 1170 2254 1170 2255 1077 2255 1076 2255 1170 2256 1076 2256 1171 2256 1171 2257 1076 2257 1088 2257 1171 2258 1088 2258 1172 2258 1172 2259 1088 2259 1075 2259 1172 2260 1075 2260 1173 2260 1173 2261 1075 2261 1093 2261 1173 2262 1093 2262 1174 2262 1174 2263 1093 2263 1092 2263 1174 2264 1092 2264 1175 2264 1175 2265 1092 2265 1089 2265 1175 2266 1089 2266 1176 2266 1176 2267 1089 2267 1090 2267 1176 2268 1090 2268 1177 2268 1177 2269 1090 2269 1091 2269 1177 2270 1091 2270 1142 2270 1142 2271 1091 2271 1099 2271 1160 2272 1141 2272 1159 2272 1159 2273 1141 2273 1106 2273 1159 2274 1106 2274 1158 2274 1158 2275 1106 2275 1107 2275 1158 2276 1107 2276 1157 2276 1157 2277 1107 2277 1108 2277 1157 2278 1108 2278 1156 2278 1156 2279 1108 2279 1109 2279 1156 2280 1109 2280 1155 2280 1155 2281 1109 2281 1110 2281 1155 2282 1110 2282 1154 2282 1154 2283 1110 2283 1111 2283 1154 2284 1111 2284 1153 2284 1153 2285 1111 2285 1112 2285 1153 2286 1112 2286 1152 2286 1152 2287 1112 2287 1113 2287 1152 2288 1113 2288 1151 2288 1151 2289 1113 2289 1114 2289 1151 2290 1114 2290 1150 2290 1150 2291 1114 2291 1115 2291 1150 2292 1115 2292 1149 2292 1149 2293 1115 2293 1116 2293 1149 2294 1116 2294 1148 2294 1148 2295 1116 2295 1117 2295 1148 2296 1117 2296 1147 2296 1147 2297 1117 2297 1118 2297 1147 2298 1118 2298 1146 2298 1146 2299 1118 2299 1119 2299 1146 2300 1119 2300 1145 2300 1145 2301 1119 2301 1120 2301 1145 2302 1120 2302 1144 2302 1144 2303 1120 2303 1121 2303 1144 2304 1121 2304 1143 2304 1143 2305 1121 2305 1122 2305 1143 2306 1122 2306 1142 2306 1142 2307 1122 2307 1123 2307 1142 2308 1123 2308 1177 2308 1177 2309 1123 2309 1124 2309 1177 2310 1124 2310 1176 2310 1176 2311 1124 2311 1125 2311 1176 2312 1125 2312 1175 2312 1175 2313 1125 2313 1126 2313 1175 2314 1126 2314 1174 2314 1174 2315 1126 2315 1127 2315 1174 2316 1127 2316 1173 2316 1173 2317 1127 2317 1128 2317 1173 2318 1128 2318 1172 2318 1172 2319 1128 2319 1129 2319 1172 2320 1129 2320 1171 2320 1171 2321 1129 2321 1130 2321 1171 2322 1130 2322 1170 2322 1170 2323 1130 2323 1131 2323 1170 2324 1131 2324 1169 2324 1169 2325 1131 2325 1132 2325 1169 2326 1132 2326 1168 2326 1168 2327 1132 2327 1133 2327 1168 2328 1133 2328 1167 2328 1167 2329 1133 2329 1134 2329 1167 2330 1134 2330 1166 2330 1166 2331 1134 2331 1135 2331 1166 2332 1135 2332 1165 2332 1165 2333 1135 2333 1136 2333 1165 2334 1136 2334 1164 2334 1164 2335 1136 2335 1137 2335 1164 2336 1137 2336 1163 2336 1163 2337 1137 2337 1138 2337 1163 2338 1138 2338 1162 2338 1162 2339 1138 2339 1139 2339 1162 2340 1139 2340 1161 2340 1161 2341 1139 2341 1140 2341 1161 2342 1140 2342 1160 2342 1160 2343 1140 2343 1141 2343

+
+ + + + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +

0 0 1 0 2 0 2 1 3 1 4 1 5 2 6 2 2 2 2 3 6 3 7 3 2 4 7 4 8 4 8 5 9 5 2 5 2 6 9 6 10 6 2 7 10 7 11 7 2 8 12 8 13 8 1 9 14 9 2 9 2 10 14 10 15 10 2 11 15 11 3 11 16 12 17 12 18 12 13 13 19 13 2 13 2 14 19 14 20 14 2 15 20 15 0 15 4 16 21 16 2 16 2 17 21 17 22 17 2 18 22 18 23 18 23 19 24 19 2 19 2 20 24 20 25 20 2 21 25 21 26 21 26 22 27 22 2 22 2 23 27 23 28 23 2 24 28 24 5 24 11 25 29 25 2 25 2 26 29 26 30 26 2 27 30 27 31 27 31 28 32 28 2 28 2 29 32 29 33 29 2 30 33 30 34 30 34 31 33 31 18 31 18 32 33 32 35 32 18 33 35 33 16 33 36 34 37 34 38 34 38 35 37 35 39 35 36 36 38 36 40 36 40 37 38 37 41 37 40 38 41 38 42 38 39 39 43 39 38 39 38 40 43 40 44 40 38 41 44 41 45 41 46 42 47 42 40 42 42 43 48 43 40 43 40 44 48 44 49 44 40 45 49 45 50 45 45 46 51 46 38 46 38 47 51 47 52 47 38 48 52 48 53 48 53 49 52 49 54 49 53 50 54 50 55 50 56 51 57 51 58 51 58 52 57 52 59 52 47 53 60 53 40 53 40 54 60 54 59 54 40 55 59 55 61 55 61 56 59 56 57 56 50 57 62 57 40 57 40 58 62 58 63 58 40 59 63 59 46 59 64 60 65 60 66 60 64 61 67 61 65 61 65 62 67 62 68 62 65 63 68 63 69 63 55 64 70 64 53 64 53 65 70 65 64 65 53 66 64 66 71 66 71 67 64 67 66 67 72 68 73 68 74 68 75 69 76 69 77 69 78 70 79 70 80 70 80 71 79 71 77 71 80 72 77 72 81 72 72 73 74 73 82 73 76 74 83 74 77 74 77 75 83 75 84 75 77 76 84 76 81 76 73 77 85 77 74 77 74 78 85 78 86 78 74 79 86 79 87 79 87 80 88 80 74 80 74 81 88 81 89 81 74 82 89 82 90 82 82 83 74 83 77 83 77 84 74 84 91 84 77 85 91 85 75 85 80 86 92 86 78 86 78 87 92 87 93 87 78 88 93 88 94 88 95 89 96 89 97 89 94 90 98 90 78 90 78 91 98 91 95 91 78 92 95 92 99 92 99 93 95 93 97 93 90 94 100 94 74 94 74 95 100 95 101 95 74 96 101 96 102 96 102 97 103 97 74 97 74 98 103 98 104 98 74 99 104 99 105 99 105 100 104 100 106 100 105 101 106 101 107 101 108 102 109 102 110 102 110 103 109 103 111 103 109 104 112 104 111 104 111 105 112 105 113 105 111 106 113 106 114 106 115 107 116 107 111 107 117 108 118 108 108 108 108 109 118 109 119 109 108 110 119 110 109 110 120 111 121 111 122 111 117 112 123 112 118 112 118 113 123 113 124 113 118 114 124 114 125 114 126 115 127 115 128 115 125 116 129 116 118 116 118 117 129 117 122 117 118 118 122 118 130 118 130 119 122 119 121 119 114 120 131 120 111 120 111 121 131 121 132 121 111 122 132 122 133 122 133 123 134 123 111 123 111 124 134 124 135 124 111 125 135 125 115 125 116 126 136 126 111 126 111 127 136 127 137 127 111 128 137 128 138 128 138 129 139 129 111 129 111 130 139 130 140 130 111 131 140 131 141 131 141 132 140 132 142 132 126 133 128 133 122 133 122 134 128 134 143 134 122 135 143 135 120 135 1178 2344 1179 2344 1180 2344 1180 2345 1179 2345 1181 2345 1178 2346 1180 2346 1182 2346 1178 2347 1182 2347 1183 2347 1183 2348 1182 2348 1184 2348 1183 2349 1184 2349 1185 2349 1185 2350 1184 2350 1186 2350 1185 2351 1186 2351 1187 2351 1187 2352 1186 2352 1188 2352 1187 2353 1188 2353 1189 2353 1189 2354 1188 2354 1190 2354 1189 2355 1190 2355 1191 2355 1191 2356 1190 2356 1192 2356 1191 2357 1192 2357 1193 2357 1193 2358 1192 2358 1194 2358 1193 2359 1194 2359 1195 2359 1195 2360 1194 2360 1196 2360 1195 2361 1196 2361 1197 2361 1197 2362 1196 2362 1198 2362 1197 2363 1198 2363 1199 2363 1199 2364 1198 2364 1200 2364 1199 2365 1200 2365 1201 2365 1202 2366 1201 2366 1203 2366 1203 2367 1201 2367 1200 2367 1202 2368 1203 2368 1204 2368 1202 2369 1204 2369 1205 2369 1205 2370 1204 2370 1206 2370 1205 2371 1206 2371 1207 2371 1207 2372 1206 2372 1208 2372 1207 2373 1208 2373 1209 2373 1209 2374 1208 2374 1210 2374 1209 2375 1210 2375 1211 2375 1211 2376 1210 2376 1212 2376 1211 2377 1212 2377 1213 2377 1213 2378 1212 2378 1214 2378 1213 2379 1214 2379 1215 2379 1215 2380 1214 2380 1216 2380 1215 2381 1216 2381 1217 2381 1217 2382 1216 2382 1218 2382 1217 2383 1218 2383 1219 2383 1219 2384 1218 2384 1220 2384 1219 2385 1220 2385 1221 2385 1221 2386 1220 2386 1222 2386 1221 2387 1222 2387 1223 2387 1224 2388 1223 2388 1225 2388 1225 2389 1223 2389 1222 2389 1179 2390 1224 2390 1181 2390 1181 2391 1224 2391 1225 2391 1224 2392 1179 2392 1223 2392 1223 2393 1179 2393 1178 2393 1202 2394 1223 2394 1201 2394 1201 2395 1223 2395 1178 2395 1201 2396 1178 2396 1183 2396 1183 2397 1185 2397 1201 2397 1201 2398 1185 2398 1187 2398 1201 2399 1187 2399 1189 2399 1189 2400 1191 2400 1201 2400 1201 2401 1191 2401 1193 2401 1201 2402 1193 2402 1199 2402 1199 2403 1193 2403 1195 2403 1199 2404 1195 2404 1197 2404 1219 2405 1207 2405 1217 2405 1217 2406 1207 2406 1209 2406 1209 2407 1211 2407 1217 2407 1217 2408 1211 2408 1213 2408 1217 2409 1213 2409 1215 2409 1202 2410 1205 2410 1223 2410 1223 2411 1205 2411 1207 2411 1223 2412 1207 2412 1221 2412 1221 2413 1207 2413 1219 2413 1203 2414 1225 2414 1222 2414 1225 2415 1203 2415 1181 2415 1181 2416 1203 2416 1200 2416 1181 2417 1200 2417 1180 2417 1220 2418 1206 2418 1222 2418 1222 2419 1206 2419 1204 2419 1222 2420 1204 2420 1203 2420 1210 2421 1216 2421 1212 2421 1212 2422 1216 2422 1214 2422 1220 2423 1218 2423 1206 2423 1206 2424 1218 2424 1216 2424 1206 2425 1216 2425 1208 2425 1208 2426 1216 2426 1210 2426 1186 2427 1192 2427 1188 2427 1188 2428 1192 2428 1190 2428 1196 2429 1194 2429 1182 2429 1182 2430 1194 2430 1192 2430 1182 2431 1192 2431 1184 2431 1184 2432 1192 2432 1186 2432 1180 2433 1200 2433 1182 2433 1182 2434 1200 2434 1198 2434 1182 2435 1198 2435 1196 2435

+
+
+
+
+ + + + + 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/kortex_description/grippers/robotiq_2f_85/meshes/visual/robotiq_85_inner_knuckle_link.dae b/kortex_description/grippers/robotiq_2f_85/meshes/visual/robotiq_85_inner_knuckle_link.dae new file mode 100644 index 00000000..779f2446 --- /dev/null +++ b/kortex_description/grippers/robotiq_2f_85/meshes/visual/robotiq_85_inner_knuckle_link.dae @@ -0,0 +1,241 @@ + + + + + Blender User + Blender 2.74.0 commit date:2015-03-31, commit time:13:39, hash:000dfc0 + + 2015-09-16T11:03:09 + 2015-09-16T11:03:09 + + Z_UP + + + + + + + 49.13434 + 1.777778 + 0.1 + 100 + + + + + + 0 + 0 + 0 + + + + + + + + + 1 1 1 + 1 + 0 + 0.00111109 + + + + + 0.000999987 + 1 + 0.1 + 0.1 + 1 + 1 + 1 + 2 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 2880 + 2 + 30.002 + 1.000799 + 0.04999995 + 29.99998 + 1 + 2 + 0 + 0 + 1 + 1 + 1 + 1 + 8192 + 1 + 1 + 0 + 1 + 1 + 1 + 3 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 3 + 0.15 + 75 + 1 + 1 + 0 + 1 + 1 + 0 + + + + + + + + + + + + 0 0 0 1 + + + 0 0 0 1 + + + 0.04 0.04 0.04 1 + + + 0.5 0.5 0.5 1 + + + 50 + + + 1 + + + + + + + + + + + 0 0 0 1 + + + 0 0 0 1 + + + 0.44 0.44 0.44 1 + + + 0.5 0.5 0.5 1 + + + 50 + + + 1 1 1 1 + + + 0.3 + + + 1 + + + + + + + + + + + + + + + + + + + 0.04147106 -0.03565269 0.01349997 0.04115682 -0.03595459 0.01349997 0.04460811 -0.03954607 0.01349997 0.04089981 -0.03630656 0.01349997 0.04424625 -0.0397889 0.01349997 0.04492229 -0.03924417 0.01349997 0.0451793 -0.0388922 0.01349997 0.04183292 -0.03540986 0.01349997 0.04223144 -0.03523361 0.01349997 0.04308933 -0.03509986 0.01349997 0.04549247 -0.03808242 0.01349997 0.04553908 -0.03764915 0.01349997 0.04537129 -0.03850102 0.01349997 0.04265451 -0.03512918 0.01349997 0.04384768 -0.03996515 0.01349997 0.04070782 -0.03669774 0.01349997 0.0405867 -0.03711634 0.01349997 0.04054009 -0.03754961 0.01349997 0.04056942 -0.03798443 0.01349997 0.04067379 -0.0384075 0.01349997 0.04255652 -0.04005229 0.01349997 0.04298979 -0.0400989 0.01349997 0.0434246 -0.04006958 0.01349997 0.04109287 -0.03916794 0.01349997 0.04139482 -0.03948211 0.01349997 0.04174673 -0.03973913 0.01349997 0.04540538 -0.03679126 0.01349997 0.04433244 -0.03545963 0.01349997 0.04394119 -0.03526765 0.01349997 0.04085004 -0.03880602 0.01349997 0.04213792 -0.03993111 0.01349997 0.04522907 -0.03639274 0.01349997 0.0449863 -0.03603082 0.01349997 0.04468435 -0.03571665 0.01349997 0.04550975 -0.03721433 0.01349997 0.04352259 -0.03514647 0.01349997 0.04089981 -0.03630656 -0.01349997 0.04115682 -0.03595459 -0.01349997 0.04460811 -0.03954607 -0.01349997 0.04147106 -0.03565269 -0.01349997 0.04492229 -0.03924417 -0.01349997 0.0451793 -0.0388922 -0.01349997 0.04054009 -0.03754961 -0.01349997 0.0405867 -0.03711634 -0.01349997 0.04384768 -0.03996515 -0.01349997 0.04183292 -0.03540986 -0.01349997 0.04223144 -0.03523361 -0.01349997 0.04537129 -0.03850102 -0.01349997 0.04549247 -0.03808242 -0.01349997 0.04424625 -0.0397889 -0.01349997 0.04070782 -0.03669774 -0.01349997 0.04265451 -0.03512918 -0.01349997 0.04308933 -0.03509986 -0.01349997 0.04553908 -0.03764915 -0.01349997 0.04550975 -0.03721433 -0.01349997 0.04255652 -0.04005229 -0.01349997 0.04067379 -0.0384075 -0.01349997 0.04298979 -0.0400989 -0.01349997 0.0434246 -0.04006958 -0.01349997 0.04056942 -0.03798443 -0.01349997 0.04174673 -0.03973913 -0.01349997 0.04139482 -0.03948211 -0.01349997 0.04109287 -0.03916794 -0.01349997 0.04394119 -0.03526765 -0.01349997 0.04433244 -0.03545963 -0.01349997 0.04540538 -0.03679126 -0.01349997 0.04213792 -0.03993111 -0.01349997 0.04085004 -0.03880602 -0.01349997 0.04352259 -0.03514647 -0.01349997 0.04468435 -0.03571665 -0.01349997 0.0449863 -0.03603082 -0.01349997 0.04522907 -0.03639274 -0.01349997 0.04174673 -0.03973913 0.01269996 0.04139482 -0.03948211 0.01269996 0.04109287 -0.03916794 0.01269996 0.04085004 -0.03880602 0.01269996 0.04067379 -0.0384075 0.01269996 0.04056942 -0.03798443 0.01269996 0.04054009 -0.03754961 0.01269996 0.0405867 -0.03711634 0.01269996 0.04070782 -0.03669774 0.01269996 0.04089981 -0.03630656 0.01269996 0.04115682 -0.03595459 0.01269996 0.04147106 -0.03565269 0.01269996 0.04183292 -0.03540986 0.01269996 0.04223144 -0.03523361 0.01269996 0.04265451 -0.03512918 0.01269996 0.04308933 -0.03509986 0.01269996 0.04352259 -0.03514647 0.01269996 0.04394119 -0.03526765 0.01269996 0.04433244 -0.03545963 0.01269996 0.04468435 -0.03571665 0.01269996 0.0449863 -0.03603082 0.01269996 0.04522907 -0.03639274 0.01269996 0.04540538 -0.03679126 0.01269996 0.04550975 -0.03721433 0.01269996 0.04553908 -0.03764915 0.01269996 0.04549247 -0.03808242 0.01269996 0.04537129 -0.03850102 0.01269996 0.0451793 -0.0388922 0.01269996 0.04492229 -0.03924417 0.01269996 0.04460811 -0.03954607 0.01269996 0.04424625 -0.0397889 0.01269996 0.04384768 -0.03996515 0.01269996 0.0434246 -0.04006958 0.01269996 0.04298979 -0.0400989 0.01269996 0.04255652 -0.04005229 0.01269996 0.04213792 -0.03993111 0.01269996 0.04139482 -0.03948211 -0.01269996 0.04109287 -0.03916794 -0.01269996 0.04085004 -0.03880602 -0.01269996 0.04067379 -0.0384075 -0.01269996 0.04056942 -0.03798443 -0.01269996 0.04054009 -0.03754961 -0.01269996 0.0405867 -0.03711634 -0.01269996 0.04070782 -0.03669774 -0.01269996 0.04089981 -0.03630656 -0.01269996 0.04115682 -0.03595459 -0.01269996 0.04147106 -0.03565269 -0.01269996 0.04183292 -0.03540986 -0.01269996 0.04223144 -0.03523361 -0.01269996 0.04265451 -0.03512918 -0.01269996 0.04308933 -0.03509986 -0.01269996 0.04352259 -0.03514647 -0.01269996 0.04394119 -0.03526765 -0.01269996 0.04433244 -0.03545963 -0.01269996 0.04468435 -0.03571665 -0.01269996 0.0449863 -0.03603082 -0.01269996 0.04522907 -0.03639274 -0.01269996 0.04540538 -0.03679126 -0.01269996 0.04550975 -0.03721433 -0.01269996 0.04553908 -0.03764915 -0.01269996 0.04549247 -0.03808242 -0.01269996 0.04537129 -0.03850102 -0.01269996 0.0451793 -0.0388922 -0.01269996 0.04492229 -0.03924417 -0.01269996 0.04460811 -0.03954607 -0.01269996 0.04424625 -0.0397889 -0.01269996 0.04384768 -0.03996515 -0.01269996 0.0434246 -0.04006958 -0.01269996 0.04298979 -0.0400989 -0.01269996 0.04255652 -0.04005229 -0.01269996 0.04213792 -0.03993111 -0.01269996 0.04174673 -0.03973913 -0.01269996 0.04257583 -0.03995418 0.01269996 0.04217398 -0.03983783 0.01269996 0.04179841 -0.03965353 0.01269996 0.04146057 -0.03940683 0.01269996 0.04117071 -0.03910517 0.01269996 0.04093766 -0.0387578 0.01269996 0.04076844 -0.03837519 0.01269996 0.04066818 -0.03796899 0.01269996 0.04064005 -0.03755164 0.01269996 0.04068481 -0.03713566 0.01269996 0.0408011 -0.0367338 0.01269996 0.0409854 -0.03635823 0.01269996 0.0412321 -0.03602039 0.01269996 0.04153376 -0.03573054 0.01269996 0.0418812 -0.03549742 0.01269996 0.0422638 -0.0353282 0.01269996 0.04266995 -0.03522801 0.01269996 0.04308736 -0.03519988 0.01269996 0.04350328 -0.03524458 0.01269996 0.04390513 -0.03536093 0.01269996 0.0442807 -0.03554522 0.01269996 0.04461854 -0.03579193 0.01269996 0.0449084 -0.03609359 0.01269996 0.04514151 -0.03644096 0.01269996 0.04531073 -0.03682357 0.01269996 0.04541093 -0.03722977 0.01269996 0.04543912 -0.03764712 0.01269996 0.04539436 -0.0380631 0.01269996 0.04527807 -0.03846496 0.01269996 0.04509371 -0.03884053 0.01269996 0.04484701 -0.03917837 0.01269996 0.04454535 -0.03946822 0.01269996 0.04419797 -0.03970134 0.01269996 0.04381537 -0.03987056 0.01269996 0.04340922 -0.03997075 0.01269996 0.04299181 -0.03999888 0.01269996 0.04541093 -0.03722977 -0.01269996 0.04531073 -0.03682357 -0.01269996 0.04514151 -0.03644096 -0.01269996 0.0449084 -0.03609359 -0.01269996 0.04461854 -0.03579193 -0.01269996 0.0442807 -0.03554522 -0.01269996 0.04390513 -0.03536093 -0.01269996 0.04350328 -0.03524458 -0.01269996 0.04308736 -0.03519988 -0.01269996 0.04266995 -0.03522801 -0.01269996 0.0422638 -0.0353282 -0.01269996 0.0418812 -0.03549742 -0.01269996 0.04153376 -0.03573054 -0.01269996 0.0412321 -0.03602039 -0.01269996 0.0409854 -0.03635823 -0.01269996 0.0408011 -0.0367338 -0.01269996 0.04068481 -0.03713566 -0.01269996 0.04064005 -0.03755164 -0.01269996 0.04066818 -0.03796899 -0.01269996 0.04076844 -0.03837519 -0.01269996 0.04093766 -0.0387578 -0.01269996 0.04117071 -0.03910517 -0.01269996 0.04146057 -0.03940683 -0.01269996 0.04179841 -0.03965353 -0.01269996 0.04217398 -0.03983783 -0.01269996 0.04257583 -0.03995418 -0.01269996 0.04299181 -0.03999888 -0.01269996 0.04340922 -0.03997075 -0.01269996 0.04381537 -0.03987056 -0.01269996 0.04419797 -0.03970134 -0.01269996 0.04454535 -0.03946822 -0.01269996 0.04484701 -0.03917837 -0.01269996 0.04509371 -0.03884053 -0.01269996 0.04527807 -0.03846496 -0.01269996 0.04539436 -0.0380631 -0.01269996 0.04543912 -0.03764712 -0.01269996 0.04179841 -0.03965353 0.01199996 0.04146057 -0.03940683 0.01199996 0.04117071 -0.03910517 0.01199996 0.04093766 -0.0387578 0.01199996 0.04076844 -0.03837519 0.01199996 0.04066818 -0.03796899 0.01199996 0.04064005 -0.03755164 0.01199996 0.04068481 -0.03713566 0.01199996 0.0408011 -0.0367338 0.01199996 0.0409854 -0.03635823 0.01199996 0.0412321 -0.03602039 0.01199996 0.04153376 -0.03573054 0.01199996 0.0418812 -0.03549742 0.01199996 0.0422638 -0.0353282 0.01199996 0.04266995 -0.03522801 0.01199996 0.04308736 -0.03519988 0.01199996 0.04350328 -0.03524458 0.01199996 0.04390513 -0.03536093 0.01199996 0.0442807 -0.03554522 0.01199996 0.04461854 -0.03579193 0.01199996 0.0449084 -0.03609359 0.01199996 0.04514151 -0.03644096 0.01199996 0.04531073 -0.03682357 0.01199996 0.04541093 -0.03722977 0.01199996 0.04543912 -0.03764712 0.01199996 0.04539436 -0.0380631 0.01199996 0.04527807 -0.03846496 0.01199996 0.04509371 -0.03884053 0.01199996 0.04484701 -0.03917837 0.01199996 0.04454535 -0.03946822 0.01199996 0.04419797 -0.03970134 0.01199996 0.04381537 -0.03987056 0.01199996 0.04340922 -0.03997075 0.01199996 0.04299181 -0.03999888 0.01199996 0.04257583 -0.03995418 0.01199996 0.04217398 -0.03983783 0.01199996 0.04146057 -0.03940683 -0.01199996 0.04117071 -0.03910517 -0.01199996 0.04093766 -0.0387578 -0.01199996 0.04076844 -0.03837519 -0.01199996 0.04066818 -0.03796899 -0.01199996 0.04064005 -0.03755164 -0.01199996 0.04068481 -0.03713566 -0.01199996 0.0408011 -0.0367338 -0.01199996 0.0409854 -0.03635823 -0.01199996 0.0412321 -0.03602039 -0.01199996 0.04153376 -0.03573054 -0.01199996 0.0418812 -0.03549742 -0.01199996 0.0422638 -0.0353282 -0.01199996 0.04266995 -0.03522801 -0.01199996 0.04308736 -0.03519988 -0.01199996 0.04350328 -0.03524458 -0.01199996 0.04390513 -0.03536093 -0.01199996 0.0442807 -0.03554522 -0.01199996 0.04461854 -0.03579193 -0.01199996 0.0449084 -0.03609359 -0.01199996 0.04514151 -0.03644096 -0.01199996 0.04531073 -0.03682357 -0.01199996 0.04541093 -0.03722977 -0.01199996 0.04543912 -0.03764712 -0.01199996 0.04539436 -0.0380631 -0.01199996 0.04527807 -0.03846496 -0.01199996 0.04509371 -0.03884053 -0.01199996 0.04484701 -0.03917837 -0.01199996 0.04454535 -0.03946822 -0.01199996 0.04419797 -0.03970134 -0.01199996 0.04381537 -0.03987056 -0.01199996 0.04340922 -0.03997075 -0.01199996 0.04299181 -0.03999888 -0.01199996 0.04257583 -0.03995418 -0.01199996 0.04217398 -0.03983783 -0.01199996 0.04179841 -0.03965353 -0.01199996 0.04174673 -0.03973913 -0.007499992 0.04139482 -0.03948211 0.007499992 0.04139482 -0.03948211 -0.007499992 0.04109287 -0.03916794 0.007499992 0.04109287 -0.03916794 -0.007499992 0.04085004 -0.03880602 0.007499992 0.04085004 -0.03880602 -0.007499992 0.04067379 -0.0384075 0.007499992 0.04067379 -0.0384075 -0.007499992 0.04056942 -0.03798443 0.007499992 0.04056942 -0.03798443 -0.007499992 0.04054009 -0.03754961 0.007499992 0.04054009 -0.03754961 -0.007499992 0.0405867 -0.03711634 0.007499992 0.0405867 -0.03711634 -0.007499992 0.04070782 -0.03669774 0.007499992 0.04070782 -0.03669774 -0.007499992 0.04089981 -0.03630656 0.007499992 0.04089981 -0.03630656 -0.007499992 0.04115682 -0.03595459 0.007499992 0.04115682 -0.03595459 -0.007499992 0.04147106 -0.03565269 0.007499992 0.04147106 -0.03565269 -0.007499992 0.04183292 -0.03540986 0.007499992 0.04183292 -0.03540986 -0.007499992 0.04223144 -0.03523361 0.007499992 0.04223144 -0.03523361 -0.007499992 0.04265451 -0.03512918 0.007499992 0.04265451 -0.03512918 -0.007499992 0.04308933 -0.03509986 0.007499992 0.04308933 -0.03509986 -0.007499992 0.04352259 -0.03514647 0.007499992 0.04352259 -0.03514647 -0.007499992 0.04394119 -0.03526765 0.007499992 0.04394119 -0.03526765 -0.007499992 0.04433244 -0.03545963 0.007499992 0.04433244 -0.03545963 -0.007499992 0.04468435 -0.03571665 0.007499992 0.04468435 -0.03571665 -0.007499992 0.0449863 -0.03603082 0.007499992 0.0449863 -0.03603082 -0.007499992 0.04522907 -0.03639274 0.007499992 0.04522907 -0.03639274 -0.007499992 0.04540538 -0.03679126 0.007499992 0.04540538 -0.03679126 -0.007499992 0.04550975 -0.03721433 0.007499992 0.04550975 -0.03721433 -0.007499992 0.04553908 -0.03764915 0.007499992 0.04553908 -0.03764915 -0.007499992 0.04549247 -0.03808242 0.007499992 0.04549247 -0.03808242 -0.007499992 0.04537129 -0.03850102 0.007499992 0.04537129 -0.03850102 -0.007499992 0.0451793 -0.0388922 0.007499992 0.0451793 -0.0388922 -0.007499992 0.04492229 -0.03924417 0.007499992 0.04492229 -0.03924417 -0.007499992 0.04460811 -0.03954607 0.007499992 0.04460811 -0.03954607 -0.007499992 0.04424625 -0.0397889 0.007499992 0.04424625 -0.0397889 -0.007499992 0.04384768 -0.03996515 0.007499992 0.04384768 -0.03996515 -0.007499992 0.0434246 -0.04006958 0.007499992 0.0434246 -0.04006958 -0.007499992 0.04298979 -0.0400989 0.007499992 0.04298979 -0.0400989 -0.007499992 0.04255652 -0.04005229 0.007499992 0.04255652 -0.04005229 -0.007499992 0.04213792 -0.03993111 0.007499992 0.04213792 -0.03993111 -0.007499992 0.04174673 -0.03973913 0.007499992 0.01269537 -0.01272523 -0.01699995 0.01284635 -0.01288235 -0.01199996 0.01284635 -0.01288235 -0.01699995 0.0130223 -0.01301085 -0.01199996 0.0130223 -0.01301085 -0.01699995 0.01321792 -0.01310688 -0.01199996 0.01321792 -0.01310688 -0.01699995 0.01342719 -0.01316744 -0.01199996 0.01342719 -0.01316744 -0.01699995 0.01364386 -0.01319074 -0.01199996 0.01364386 -0.01319074 -0.01699995 0.01386123 -0.01317608 -0.01199996 0.01386123 -0.01317608 -0.01699995 0.01407277 -0.01312386 -0.01199996 0.01407277 -0.01312386 -0.01699995 0.01427203 -0.01303577 -0.01199996 0.01427203 -0.01303577 -0.01699995 0.01445299 -0.01291435 -0.01199996 0.01445299 -0.01291435 -0.01699995 0.01461011 -0.01276338 -0.01199996 0.01461011 -0.01276338 -0.01699995 0.01473861 -0.01258742 -0.01199996 0.01473861 -0.01258742 -0.01699995 0.01483458 -0.0123918 -0.01199996 0.01483458 -0.0123918 -0.01699995 0.01489514 -0.01218253 -0.01199996 0.01489514 -0.01218253 -0.01699995 0.01491844 -0.01196587 -0.01199996 0.01491844 -0.01196587 -0.01699995 0.01490378 -0.01174849 -0.01199996 0.01490378 -0.01174849 -0.01699995 0.01485162 -0.01153695 -0.01199996 0.01485162 -0.01153695 -0.01699995 0.01476347 -0.01133763 -0.01199996 0.01476347 -0.01133763 -0.01699995 0.01464205 -0.01115673 -0.01199996 0.01464205 -0.01115673 -0.01699995 0.01449108 -0.01099961 -0.01199996 0.01449108 -0.01099961 -0.01699995 0.01431512 -0.01087111 -0.01199996 0.01431512 -0.01087111 -0.01699995 0.01411956 -0.01077514 -0.01199996 0.01411956 -0.01077514 -0.01699995 0.01391023 -0.01071453 -0.01199996 0.01391023 -0.01071453 -0.01699995 0.01369357 -0.01069122 -0.01199996 0.01369357 -0.01069122 -0.01699995 0.01347619 -0.01070588 -0.01199996 0.01347619 -0.01070588 -0.01699995 0.01326465 -0.0107581 -0.01199996 0.01326465 -0.0107581 -0.01699995 0.01306539 -0.01084625 -0.01199996 0.01306539 -0.01084625 -0.01699995 0.01288443 -0.01096761 -0.01199996 0.01288443 -0.01096761 -0.01699995 0.01272732 -0.01111859 -0.01199996 0.01272732 -0.01111859 -0.01699995 0.01259881 -0.01129454 -0.01199996 0.01259881 -0.01129454 -0.01699995 0.01250284 -0.01149016 -0.01199996 0.01250284 -0.01149016 -0.01699995 0.01244229 -0.01169949 -0.01199996 0.01244229 -0.01169949 -0.01699995 0.01241898 -0.0119161 -0.01199996 0.01241898 -0.0119161 -0.01699995 0.01243364 -0.01213353 -0.01199996 0.01243364 -0.01213353 -0.01699995 0.0124858 -0.01234507 -0.01199996 0.0124858 -0.01234507 -0.01699995 0.01257395 -0.01254433 -0.01199996 0.01257395 -0.01254433 -0.01699995 0.01269537 -0.01272523 -0.01199996 0.02115011 -0.01682889 -0.01199996 0.02109301 -0.01679229 -0.01699995 0.02126902 -0.0169208 -0.01199769 0.02126902 -0.0169208 -0.01699995 0.02138906 -0.01704096 -0.01198977 0.02141422 -0.01707082 -0.01198714 0.0214194 -0.01707828 -0.01198631 0.02141994 -0.01707792 -0.01699995 0.02152407 -0.01722848 -0.01197022 0.02154135 -0.01725882 -0.01699995 0.02153933 -0.01725983 -0.0119661 0.02160996 -0.01740485 -0.01194709 0.02162951 -0.01745808 -0.01699995 0.02161848 -0.0174272 -0.01194393 0.02167856 -0.01767003 -0.01190817 0.02167224 -0.01761668 -0.01191616 0.02168172 -0.01766961 -0.01699995 0.02165812 -0.01756691 -0.01192349 0.02162742 -0.01745867 -0.01193934 0.02169573 -0.01781564 -0.01188629 0.02169638 -0.01788705 -0.01699995 0.02169245 -0.01788687 -0.01187604 0.02168619 -0.01802319 -0.01185643 0.02167308 -0.01810365 -0.01699995 0.02166926 -0.01810288 -0.0118463 0.02164483 -0.0182181 -0.01183164 0.02161246 -0.01831299 -0.01699995 0.02160835 -0.01831138 -0.01182234 0.02156817 -0.01841408 -0.01181209 0.0215165 -0.01850861 -0.01699995 0.02151328 -0.0185067 -0.01180648 0.02146935 -0.01858085 -0.01180201 0.02138799 -0.01868456 -0.01699995 0.02144712 -0.01861143 -0.011801 0.02117669 -0.01887679 -0.01180934 0.02122873 -0.01883292 -0.01180642 0.02123087 -0.01883554 -0.01699995 0.02132326 -0.01875323 -0.011801 0.02138531 -0.01868218 -0.011801 0.02079361 -0.01906299 -0.01185351 0.02084952 -0.01904201 -0.01184618 0.02085065 -0.01904505 -0.01699995 0.02097702 -0.01899403 -0.01182961 0.02104991 -0.01895689 -0.01699995 0.02104818 -0.0189538 -0.01182216 0.02114373 -0.01889973 -0.01181215 0.02037751 -0.01911026 -0.01191478 0.02042168 -0.01910912 -0.01190817 0.02042174 -0.01911193 -0.01699995 0.02057796 -0.01910525 -0.01188486 0.02063912 -0.01909726 -0.01699995 0.02063852 -0.01909393 -0.01187598 0.02077186 -0.01906913 -0.01185655 0.02031731 -0.01910173 -0.01192337 0.02020508 -0.01908862 -0.01699995 0.02020549 -0.01908588 -0.01193928 0.01980018 -0.01893204 -0.01699995 0.0198009 -0.01893067 -0.01198613 0.0199958 -0.019028 -0.01699995 0.01995068 -0.01900959 -0.01197165 0.01997655 -0.01902043 -0.01196873 0.01999622 -0.01902663 -0.01196628 0.02016645 -0.01908034 -0.01194483 0.02109301 -0.01679229 -0.01199996 0.02089744 -0.01669627 -0.01199996 0.02089744 -0.01669627 -0.01699995 0.02068811 -0.01663571 -0.01199996 0.02068811 -0.01663571 -0.01699995 0.02047151 -0.01661241 -0.01199996 0.02047151 -0.01661241 -0.01699995 0.02025407 -0.01662707 -0.01199996 0.02025407 -0.01662707 -0.01699995 0.02004253 -0.01667928 -0.01199996 0.02004253 -0.01667928 -0.01699995 0.01984328 -0.01676738 -0.01199996 0.01984328 -0.01676738 -0.01699995 0.01966232 -0.01688879 -0.01199996 0.01966232 -0.01688879 -0.01699995 0.01950526 -0.01703977 -0.01199996 0.01950526 -0.01703977 -0.01699995 0.01937675 -0.01721572 -0.01199996 0.01937675 -0.01721572 -0.01699995 0.01928073 -0.01741135 -0.01199996 0.01928073 -0.01741135 -0.01699995 0.01922017 -0.01762062 -0.01199996 0.01922017 -0.01762062 -0.01699995 0.01919686 -0.01783728 -0.01199996 0.01919686 -0.01783728 -0.01699995 0.01921153 -0.01805466 -0.01199996 0.01921153 -0.01805466 -0.01699995 0.01926374 -0.0182662 -0.01199996 0.01926374 -0.0182662 -0.01699995 0.01935184 -0.01846551 -0.01199996 0.01935184 -0.01846551 -0.01699995 0.01947325 -0.01864641 -0.01199996 0.01947325 -0.01864641 -0.01699995 0.01951718 -0.01869803 -0.01199996 0.01962423 -0.01880353 -0.01699995 0.01962423 -0.01880353 -0.01199769 0.01978045 -0.01891988 -0.0119881 0.01951718 -0.01869803 0.01199996 0.01947325 -0.01864641 0.01699995 0.01962423 -0.01880353 0.01199769 0.01962423 -0.01880353 0.01699995 0.01975947 -0.01890635 0.01198977 0.01979243 -0.01892733 0.01198714 0.01980048 -0.01893144 0.01198631 0.01980018 -0.01893204 0.01699995 0.01996338 -0.01901501 0.01197022 0.0199958 -0.019028 0.01699995 0.01999652 -0.01902592 0.0119661 0.0201497 -0.0190764 0.01194709 0.02020508 -0.01908862 0.01699995 0.02017301 -0.01908183 0.01194393 0.02042168 -0.01910877 0.01190817 0.02036798 -0.01910966 0.01191616 0.02042174 -0.01911193 0.01699995 0.02031677 -0.01910239 0.01192349 0.02020537 -0.01908648 0.01193934 0.02056831 -0.0191062 0.01188629 0.02063912 -0.01909726 0.01699995 0.0206384 -0.01909339 0.01187604 0.02077269 -0.01906889 0.01185643 0.02085065 -0.01904505 0.01699995 0.02084934 -0.01904141 0.0118463 0.02096027 -0.01900172 0.01183164 0.02104991 -0.01895689 0.01699995 0.02104777 -0.01895302 0.01182234 0.02114421 -0.01889944 0.01181209 0.02123087 -0.01883554 0.01699995 0.02122855 -0.01883262 0.01180648 0.02129614 -0.01877909 0.01180201 0.02138799 -0.01868456 0.01699995 0.0213235 -0.01875299 0.011801 0.02155011 -0.01844936 0.01180934 0.02151364 -0.01850676 0.01180642 0.0215165 -0.01850861 0.01699995 0.02144736 -0.01861119 0.011801 0.02138531 -0.01868224 0.011801 0.02168321 -0.01804476 0.01185351 0.02166986 -0.01810294 0.01184618 0.02167308 -0.01810365 0.01699995 0.02163946 -0.01823574 0.01182961 0.02161246 -0.01831299 0.01699995 0.02160912 -0.01831161 0.01182216 0.02156841 -0.0184136 0.01181215 0.02167409 -0.01762604 0.01191478 0.02167892 -0.01766997 0.01190817 0.02168172 -0.01766961 0.01699995 0.02169609 -0.01782536 0.01188486 0.02169638 -0.01788705 0.01699995 0.02169299 -0.01788687 0.01187598 0.02168631 -0.01802235 0.01185655 0.02165758 -0.01756751 0.01192337 0.02162951 -0.01745808 0.01699995 0.02162683 -0.01745885 0.01193928 0.02141994 -0.01707792 0.01699995 0.02141869 -0.01707881 0.01198613 0.02154135 -0.01725882 0.01699995 0.02151703 -0.01721662 0.01197165 0.02153122 -0.01724082 0.01196873 0.02154004 -0.01725947 0.01196628 0.02161616 -0.01742094 0.01194483 0.01947325 -0.01864641 0.01199996 0.01935184 -0.01846551 0.01199996 0.01935184 -0.01846551 0.01699995 0.01926374 -0.0182662 0.01199996 0.01926374 -0.0182662 0.01699995 0.01921153 -0.01805466 0.01199996 0.01921153 -0.01805466 0.01699995 0.01919686 -0.01783728 0.01199996 0.01919686 -0.01783728 0.01699995 0.01922017 -0.01762062 0.01199996 0.01922017 -0.01762062 0.01699995 0.01928073 -0.01741135 0.01199996 0.01928073 -0.01741135 0.01699995 0.01937675 -0.01721572 0.01199996 0.01937675 -0.01721572 0.01699995 0.01950526 -0.01703977 0.01199996 0.01950526 -0.01703977 0.01699995 0.01966232 -0.01688879 0.01199996 0.01966232 -0.01688879 0.01699995 0.01984328 -0.01676738 0.01199996 0.01984328 -0.01676738 0.01699995 0.02004253 -0.01667928 0.01199996 0.02004253 -0.01667928 0.01699995 0.02025407 -0.01662707 0.01199996 0.02025407 -0.01662707 0.01699995 0.02047151 -0.01661241 0.01199996 0.02047151 -0.01661241 0.01699995 0.02068811 -0.01663571 0.01199996 0.02068811 -0.01663571 0.01699995 0.02089744 -0.01669627 0.01199996 0.02089744 -0.01669627 0.01699995 0.02109301 -0.01679229 0.01199996 0.02109301 -0.01679229 0.01699995 0.02115011 -0.01682889 0.01199996 0.02126902 -0.0169208 0.01699995 0.02126902 -0.0169208 0.01199769 0.02140527 -0.01705998 0.0119881 0.01269537 -0.01272523 0.01199996 0.01284635 -0.01288235 0.01699995 0.01284635 -0.01288235 0.01199996 0.0130223 -0.01301085 0.01699995 0.0130223 -0.01301085 0.01199996 0.01321792 -0.01310688 0.01699995 0.01321792 -0.01310688 0.01199996 0.01342719 -0.01316744 0.01699995 0.01342719 -0.01316744 0.01199996 0.01364386 -0.01319074 0.01699995 0.01364386 -0.01319074 0.01199996 0.01386123 -0.01317608 0.01699995 0.01386123 -0.01317608 0.01199996 0.01407277 -0.01312386 0.01699995 0.01407277 -0.01312386 0.01199996 0.01427203 -0.01303577 0.01699995 0.01427203 -0.01303577 0.01199996 0.01445299 -0.01291435 0.01699995 0.01445299 -0.01291435 0.01199996 0.01461011 -0.01276338 0.01699995 0.01461011 -0.01276338 0.01199996 0.01473861 -0.01258742 0.01699995 0.01473861 -0.01258742 0.01199996 0.01483458 -0.0123918 0.01699995 0.01483458 -0.0123918 0.01199996 0.01489514 -0.01218253 0.01699995 0.01489514 -0.01218253 0.01199996 0.01491844 -0.01196587 0.01699995 0.01491844 -0.01196587 0.01199996 0.01490378 -0.01174849 0.01699995 0.01490378 -0.01174849 0.01199996 0.01485162 -0.01153695 0.01699995 0.01485162 -0.01153695 0.01199996 0.01476347 -0.01133763 0.01699995 0.01476347 -0.01133763 0.01199996 0.01464205 -0.01115673 0.01699995 0.01464205 -0.01115673 0.01199996 0.01449108 -0.01099961 0.01699995 0.01449108 -0.01099961 0.01199996 0.01431512 -0.01087111 0.01699995 0.01431512 -0.01087111 0.01199996 0.01411956 -0.01077514 0.01699995 0.01411956 -0.01077514 0.01199996 0.01391023 -0.01071453 0.01699995 0.01391023 -0.01071453 0.01199996 0.01369357 -0.01069122 0.01699995 0.01369357 -0.01069122 0.01199996 0.01347619 -0.01070588 0.01699995 0.01347619 -0.01070588 0.01199996 0.01326465 -0.0107581 0.01699995 0.01326465 -0.0107581 0.01199996 0.01306539 -0.01084625 0.01699995 0.01306539 -0.01084625 0.01199996 0.01288443 -0.01096761 0.01699995 0.01288443 -0.01096761 0.01199996 0.01272732 -0.01111859 0.01699995 0.01272732 -0.01111859 0.01199996 0.01259881 -0.01129454 0.01699995 0.01259881 -0.01129454 0.01199996 0.01250284 -0.01149016 0.01699995 0.01250284 -0.01149016 0.01199996 0.01244229 -0.01169949 0.01699995 0.01244229 -0.01169949 0.01199996 0.01241898 -0.0119161 0.01699995 0.01241898 -0.0119161 0.01199996 0.01243364 -0.01213353 0.01699995 0.01243364 -0.01213353 0.01199996 0.0124858 -0.01234507 0.01699995 0.0124858 -0.01234507 0.01199996 0.01257395 -0.01254433 0.01699995 0.01257395 -0.01254433 0.01199996 0.01269537 -0.01272523 0.01699995 0.03362232 -0.02140539 0.01395118 0.03380966 -0.02156907 0.01347845 0.03501689 -0.02262371 0.007306993 0.03332954 -0.02114963 0.0146898 0.04698699 -0.03308081 0.01199996 0.04698699 -0.03308081 0.007499992 0.03584116 -0.02334374 0.01199996 0.03584116 -0.02334374 0.007499992 0.03544026 -0.02299356 0.01204454 0.03542268 -0.02297818 0.007451355 0.03505057 -0.0226531 0.0121771 0.03405362 -0.02178221 0.01305371 0.03434741 -0.02203887 0.01268881 0.03468286 -0.02233189 0.01239383 0.02428108 -0.01324486 -0.01199996 0.02493494 -0.01381611 -0.01192402 0.03015536 -0.01837664 -0.01699995 0.03248929 -0.0204156 -0.01592367 0.02716565 -0.01576483 -0.01021391 0.03294837 -0.02081662 -0.0153535 0.02754211 -0.01609373 -0.009499967 0.03332954 -0.02114963 -0.0146898 0.03505057 -0.0226531 -0.0121771 0.03468286 -0.02233189 -0.01239383 0.02781951 -0.01633602 -0.008710086 0.03434741 -0.02203887 -0.01268881 0.02798938 -0.01648443 0.00786823 0.0342921 -0.02199047 0.006751298 0.03399503 -0.02173101 0.006356894 0.03399503 -0.02173101 -0.006356894 0.0342921 -0.02199047 -0.006751298 0.03501689 -0.02262371 -0.007306993 0.03542268 -0.02297818 -0.007451355 0.03139072 -0.01945585 0.01672327 0.03196525 -0.01995778 0.01638454 0.03463619 -0.02229112 0.007071256 0.03248929 -0.0204156 0.01592367 0.03294837 -0.02081662 0.0153535 0.02556896 -0.01436996 -0.01169842 0.02616381 -0.01488965 -0.01133012 0.0307818 -0.01892387 -0.01693028 0.0267015 -0.01535934 -0.01083022 0.03139072 -0.01945585 -0.01672327 0.03196525 -0.01995778 -0.01638454 0.03463619 -0.02229112 -0.007071256 0.02781951 -0.01633602 0.008710086 0.02754211 -0.01609373 0.009499967 0.03015536 -0.01837664 0.01699995 0.02716565 -0.01576483 0.01021391 0.01238733 -0.002854526 0.01763665 0.01271426 -0.003140091 0.01736354 0.003947436 0.004518568 0.01199996 0.01306986 -0.003450751 0.01716333 0.0307818 -0.01892387 0.01693028 0.003947436 0.004518568 -0.01199996 0.01238733 -0.002854526 -0.01763665 0.01209747 -0.002601265 -0.01797556 0.0267015 -0.01535934 0.01083022 0.02616381 -0.01488965 0.01133012 0.02556896 -0.01436996 0.01169842 0.02493494 -0.01381611 0.01192402 0.02428108 -0.01324486 0.01199996 0.01382994 -0.004114747 0.01699995 0.01344496 -0.003778457 0.01704108 0.01382994 -0.004114747 -0.01699995 0.01344496 -0.003778457 -0.01704108 0.01306986 -0.003450751 -0.01716333 0.01271426 -0.003140091 -0.01736354 0.03405362 -0.02178221 -0.01305371 0.03380966 -0.02156907 -0.01347845 0.03362232 -0.02140539 -0.01395118 0.04698699 -0.03308081 -0.007499992 0.04698699 -0.03308081 -0.01199996 0.03584116 -0.02334374 -0.007499992 0.03584116 -0.02334374 -0.01199996 0.03544026 -0.02299356 -0.01204454 0.003947436 0.004518568 0.01949995 0.009390473 -2.36489e-4 0.01949995 0.03375411 -0.02152049 0.005899965 0.03357654 -0.0213654 0.005394458 0.0280466 -0.01653444 0.006999969 0.009992063 -7.62006e-4 0.01943576 0.01057815 -0.001273989 0.01924479 0.01113373 -0.00175935 0.01893186 0.01164454 -0.00220561 -0.01850515 0.01113373 -0.00175935 -0.01893186 0.01057815 -0.001273989 -0.01924479 0.01164454 -0.00220561 0.01850515 0.01209747 -0.002601265 0.01797556 0.009992063 -7.62006e-4 -0.01943576 0.009390473 -2.36489e-4 -0.01949995 0.003947436 0.004518568 -0.01949995 0.03346782 -0.02127045 0.004855632 0.03343123 -0.02123844 0.004299998 0.0280466 -0.01653444 -0.006999969 0.03343123 -0.02123844 -0.004299998 0.03346782 -0.02127045 -0.004855632 0.02798938 -0.01648443 -0.00786823 0.03357654 -0.0213654 -0.005394458 0.03375411 -0.02152049 -0.005899965 0.02794629 -0.03238093 0.01199996 0.04771167 -0.03383493 0.01199996 0.04829442 -0.03470337 0.01199996 0.04871743 -0.0356599 0.01199996 0.04896795 -0.03667533 0.01199996 0.04903841 -0.03771883 0.01199996 0.04892653 -0.03875869 0.01199996 0.04863578 -0.03976333 0.01199996 0.04817497 -0.04070222 0.01199996 0.04755818 -0.04154682 0.01199996 0.04680407 -0.04227149 0.01199996 0.04593557 -0.04285424 0.01199996 0.04497909 -0.04327726 0.01199996 0.04396367 -0.04352778 0.01199996 0.04292017 -0.04359817 0.01199996 0.0418803 -0.04348629 0.01199996 0.04087561 -0.0431956 0.01199996 0.03993672 -0.0427348 0.01199996 0.03909212 -0.04211795 0.01199996 0.04771167 -0.03383493 0.007499992 0.04829442 -0.03470337 0.007499992 0.04871743 -0.0356599 0.007499992 0.04896795 -0.03667533 0.007499992 0.04903841 -0.03771883 0.007499992 0.04892653 -0.03875869 0.007499992 0.04863578 -0.03976333 0.007499992 0.04817497 -0.04070222 0.007499992 0.04755818 -0.04154682 0.007499992 0.04680407 -0.04227149 0.007499992 0.04593557 -0.04285424 0.007499992 0.04497909 -0.04327726 0.007499992 0.04396367 -0.04352778 0.007499992 0.04292017 -0.04359817 0.007499992 0.0418803 -0.04348629 0.007499992 0.04087561 -0.0431956 0.007499992 0.03993672 -0.0427348 0.007499992 0.03909212 -0.04211795 0.007499992 0.02794629 -0.03238093 0.007499992 0.0275278 -0.03201538 0.007451355 0.02712202 -0.03166091 0.007306993 0.02674132 -0.03132832 0.007071256 0.02639722 -0.03102767 0.006751298 0.02610015 -0.03076821 0.006356894 0.02585923 -0.03055769 0.005899965 0.02568167 -0.0304026 0.005394458 0.02557295 -0.03030765 0.004855632 0.02553635 -0.03027564 0.004299998 0.02553635 -0.03027564 -0.004299998 0.02557295 -0.03030765 -0.004855632 0.02568167 -0.0304026 -0.005394458 0.02585923 -0.03055769 -0.005899965 0.02610015 -0.03076821 -0.006356894 0.02639722 -0.03102767 -0.006751298 0.02674132 -0.03132832 -0.007071256 0.02712202 -0.03166091 -0.007306993 0.0275278 -0.03201538 -0.007451355 0.02794629 -0.03238093 -0.007499992 0.03909212 -0.04211795 -0.007499992 0.03993672 -0.0427348 -0.007499992 0.04087561 -0.0431956 -0.007499992 0.0418803 -0.04348629 -0.007499992 0.04292017 -0.04359817 -0.007499992 0.04396367 -0.04352778 -0.007499992 0.04497909 -0.04327726 -0.007499992 0.04593557 -0.04285424 -0.007499992 0.04680407 -0.04227149 -0.007499992 0.04755818 -0.04154682 -0.007499992 0.04817497 -0.04070222 -0.007499992 0.04863578 -0.03976333 -0.007499992 0.04892653 -0.03875869 -0.007499992 0.04903841 -0.03771883 -0.007499992 0.04896795 -0.03667533 -0.007499992 0.04871743 -0.0356599 -0.007499992 0.04829442 -0.03470337 -0.007499992 0.04771167 -0.03383493 -0.007499992 0.04771167 -0.03383493 -0.01199996 0.04829442 -0.03470337 -0.01199996 0.04871743 -0.0356599 -0.01199996 0.04896795 -0.03667533 -0.01199996 0.04903841 -0.03771883 -0.01199996 0.04892653 -0.03875869 -0.01199996 0.04863578 -0.03976333 -0.01199996 0.04817497 -0.04070222 -0.01199996 0.04755818 -0.04154682 -0.01199996 0.04680407 -0.04227149 -0.01199996 0.04593557 -0.04285424 -0.01199996 0.04497909 -0.04327726 -0.01199996 0.04396367 -0.04352778 -0.01199996 0.04292017 -0.04359817 -0.01199996 0.0418803 -0.04348629 -0.01199996 0.04087561 -0.0431956 -0.01199996 0.03993672 -0.0427348 -0.01199996 0.03909212 -0.04211795 -0.01199996 0.02794629 -0.03238093 -0.01199996 0.02754539 -0.0320307 -0.01204454 0.02715563 -0.03169023 -0.0121771 0.02678793 -0.03136903 -0.01239383 0.02645254 -0.03107601 -0.01268881 0.02615875 -0.03081935 -0.01305371 0.02591478 -0.03060626 -0.01347845 0.02572745 -0.03044259 -0.01395118 0.02543467 -0.03018683 -0.0146898 0.02505344 -0.02985382 -0.0153535 0.02459442 -0.0294528 -0.01592367 0.02407032 -0.02899491 -0.01638454 0.02349585 -0.02849304 -0.01672327 0.02288687 -0.02796107 -0.01693028 0.02226048 -0.02741384 -0.01699995 0.005935072 -0.01315194 -0.01699995 0.005550086 -0.01281565 -0.01704108 0.005174994 -0.01248794 -0.01716333 0.004819393 -0.01217728 -0.01736354 0.004492461 -0.01189172 -0.01763665 0.004202604 -0.01163846 -0.01797556 0.003749668 -0.0112428 -0.01850515 0.003238856 -0.01079654 -0.01893186 0.002683281 -0.01031118 -0.01924479 0.002097189 -0.009799182 -0.01943576 0.001495599 -0.009273648 -0.01949995 -0.003947436 -0.004518568 -0.01949995 0.003102779 0.005135357 -0.01949995 0.002163887 0.00559616 -0.01949995 -0.00467211 -0.00376445 -0.01949995 -0.005254805 -0.002895951 -0.01949995 -0.005677878 -0.001939475 -0.01949995 -0.005928397 -9.24074e-4 -0.01949995 -0.00599879 1.19422e-4 -0.01949995 -0.005886912 0.00115925 -0.01949995 -0.00559616 0.002163887 -0.01949995 -0.005135357 0.003102779 -0.01949995 -0.002895951 0.005254805 -0.01949995 -0.001939475 0.005677878 -0.01949995 -0.004518568 0.003947436 -0.01949995 -0.00376445 0.00467211 -0.01949995 -9.24074e-4 0.005928397 -0.01949995 1.19422e-4 0.00599879 -0.01949995 0.00115925 0.005886912 -0.01949995 -0.003947436 -0.004518568 -0.01199996 -0.00467211 -0.00376445 -0.01199996 -0.005254805 -0.002895951 -0.01199996 -0.005677878 -0.001939475 -0.01199996 -0.005928397 -9.24074e-4 -0.01199996 -0.00599879 1.19422e-4 -0.01199996 -0.005886912 0.00115925 -0.01199996 -0.00559616 0.002163887 -0.01199996 -0.005135357 0.003102779 -0.01199996 -0.004518568 0.003947436 -0.01199996 -0.00376445 0.00467211 -0.01199996 -0.002895951 0.005254805 -0.01199996 -0.001939475 0.005677878 -0.01199996 -9.24074e-4 0.005928397 -0.01199996 1.19422e-4 0.00599879 -0.01199996 0.00115925 0.005886912 -0.01199996 0.002163887 0.00559616 -0.01199996 0.003102779 0.005135357 -0.01199996 0.01638621 -0.02228206 -0.01199996 0.01704007 -0.02285331 -0.01192402 0.01767408 -0.02340716 -0.01169842 0.01826894 -0.02392685 -0.01133012 0.01880663 -0.02439653 -0.01083022 0.01927071 -0.02480202 -0.01021391 0.01964724 -0.02513086 -0.009499967 0.01992458 -0.02537322 -0.008710086 0.02009451 -0.02552163 -0.00786823 0.02015167 -0.02557158 -0.006999969 0.02015167 -0.02557158 0.006999969 0.01767408 -0.02340716 0.01169842 0.01704007 -0.02285331 0.01192402 0.01638621 -0.02228206 0.01199996 0.02009451 -0.02552163 0.00786823 0.01992458 -0.02537322 0.008710086 0.01964724 -0.02513086 0.009499967 0.01927071 -0.02480202 0.01021391 0.01880663 -0.02439653 0.01083022 0.01826894 -0.02392685 0.01133012 -0.003947436 -0.004518568 0.01199996 0.00115925 0.005886912 0.01199996 0.002163887 0.00559616 0.01199996 -0.005254805 -0.002895951 0.01199996 -0.005677878 -0.001939475 0.01199996 -0.00559616 0.002163887 0.01199996 -0.005135357 0.003102779 0.01199996 -0.004518568 0.003947436 0.01199996 -0.00376445 0.00467211 0.01199996 0.003102779 0.005135357 0.01199996 -0.002895951 0.005254805 0.01199996 -0.001939475 0.005677878 0.01199996 -0.00467211 -0.00376445 0.01199996 1.19422e-4 0.00599879 0.01199996 -9.24074e-4 0.005928397 0.01199996 -0.005928397 -9.24074e-4 0.01199996 -0.00599879 1.19422e-4 0.01199996 -0.005886912 0.00115925 0.01199996 -0.003947436 -0.004518568 0.01949995 -0.00467211 -0.00376445 0.01949995 -0.005254805 -0.002895951 0.01949995 -0.005677878 -0.001939475 0.01949995 -0.005928397 -9.24074e-4 0.01949995 -0.00599879 1.19422e-4 0.01949995 -0.005886912 0.00115925 0.01949995 -0.00559616 0.002163887 0.01949995 -0.005135357 0.003102779 0.01949995 -0.004518568 0.003947436 0.01949995 -0.00376445 0.00467211 0.01949995 -0.002895951 0.005254805 0.01949995 -0.001939475 0.005677878 0.01949995 -9.24074e-4 0.005928397 0.01949995 1.19422e-4 0.00599879 0.01949995 0.00115925 0.005886912 0.01949995 0.002163887 0.00559616 0.01949995 0.003102779 0.005135357 0.01949995 0.001495599 -0.009273648 0.01949995 0.002097189 -0.009799182 0.01943576 0.002683281 -0.01031118 0.01924479 0.003238856 -0.01079654 0.01893186 0.003749668 -0.0112428 0.01850515 0.004202604 -0.01163846 0.01797556 0.004492461 -0.01189172 0.01763665 0.004819393 -0.01217728 0.01736354 0.005174994 -0.01248794 0.01716333 0.005550086 -0.01281565 0.01704108 0.005935072 -0.01315194 0.01699995 0.02226048 -0.02741384 0.01699995 0.02288687 -0.02796107 0.01693028 0.02349585 -0.02849304 0.01672327 0.02407032 -0.02899491 0.01638454 0.02459442 -0.0294528 0.01592367 0.02505344 -0.02985382 0.0153535 0.02543467 -0.03018683 0.0146898 0.02572745 -0.03044259 0.01395118 0.02591478 -0.03060626 0.01347845 0.02615875 -0.03081935 0.01305371 0.02645254 -0.03107601 0.01268881 0.02678793 -0.03136903 0.01239383 0.02715563 -0.03169023 0.0121771 0.02754539 -0.0320307 0.01204454 + + + + + + + + + + 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.5897712 -0.8075704 0 -0.7210378 -0.6928958 0 -0.7210378 -0.6928958 0 -0.8304093 -0.5571538 0 -0.8304093 -0.5571538 0 -0.9145401 -0.4044951 0 -0.9145401 -0.4044951 0 -0.9708846 -0.2395475 0 -0.9708846 -0.2395475 0 -0.9977326 -0.06730312 0 -0.9977326 -0.06730312 0 -0.9942634 0.1069593 0 -0.9942634 0.1069593 0 -0.9605832 0.2779927 0 -0.9605832 0.2779927 0 -0.8977144 0.4405779 0 -0.8977144 0.4405779 0 -0.8075745 0.5897656 0 -0.8075745 0.5897656 0 -0.6928914 0.721042 0 -0.6928914 0.721042 0 -0.5571597 0.8304054 0 -0.5571597 0.8304054 0 -0.4045023 0.914537 0 -0.4045023 0.914537 0 -0.2395313 0.9708886 0 -0.2395313 0.9708886 0 -0.06731158 0.9977321 0 -0.06731158 0.9977321 0 0.1069593 0.9942634 0 0.1069593 0.9942634 0 0.2779927 0.9605832 0 0.2779927 0.9605832 0 0.4405745 0.897716 0 0.4405745 0.897716 0 0.5897697 0.8075715 0 0.5897697 0.8075715 0 0.7210418 0.6928915 0 0.7210418 0.6928915 0 0.8304066 0.5571578 0 0.8304066 0.5571578 0 0.9145384 0.4044991 0 0.9145384 0.4044991 0 0.9708862 0.2395414 0 0.9708862 0.2395414 0 0.9977321 0.06731158 0 0.9977321 0.06731158 0 0.9942625 -0.1069678 0 0.9942625 -0.1069678 0 0.9605832 -0.2779927 0 0.9605832 -0.2779927 0 0.8977195 -0.4405676 0 0.8977195 -0.4405676 0 0.8075704 -0.5897712 0 0.8075704 -0.5897712 0 0.6928914 -0.721042 0 0.6928914 -0.721042 0 0.5571538 -0.8304093 0 0.5571538 -0.8304093 0 0.4045023 -0.914537 0 0.4045023 -0.914537 0 0.2395394 -0.9708866 0 0.2395394 -0.9708866 0 0.06731158 -0.9977321 0 0.06731158 -0.9977321 0 -0.1069687 -0.9942623 0 -0.1069687 -0.9942623 0 -0.2779904 -0.9605839 0 -0.2779904 -0.9605839 0 -0.440571 -0.8977178 0 -0.440571 -0.8977178 0 -0.5897712 -0.8075704 0 -0.5897712 -0.8075704 0 -0.7210378 -0.6928958 0 -0.7210378 -0.6928958 0 -0.8304093 -0.5571538 0 -0.8304093 -0.5571538 0 -0.9145401 -0.4044951 0 -0.9145401 -0.4044951 0 -0.9708846 -0.2395475 0 -0.9708846 -0.2395475 0 -0.9977326 -0.06730312 0 -0.9977326 -0.06730312 0 -0.9942634 0.1069593 0 -0.9942634 0.1069593 0 -0.9605832 0.2779927 0 -0.9605832 0.2779927 0 -0.8977144 0.4405779 0 -0.8977144 0.4405779 0 -0.8075745 0.5897656 0 -0.8075745 0.5897656 0 -0.6928914 0.721042 0 -0.6928914 0.721042 0 -0.5571597 0.8304054 0 -0.5571597 0.8304054 0 -0.4045023 0.914537 0 -0.4045023 0.914537 0 -0.2395313 0.9708886 0 -0.2395313 0.9708886 0 -0.06731158 0.9977321 0 -0.06731158 0.9977321 0 0.1069593 0.9942634 0 0.1069593 0.9942634 0 0.2779927 0.9605832 0 0.2779927 0.9605832 0 0.4405745 0.897716 0 0.4405745 0.897716 0 0.5897697 0.8075715 0 0.5897697 0.8075715 0 0.7210418 0.6928915 0 0.7210418 0.6928915 0 0.8304066 0.5571578 0 0.8304066 0.5571578 0 0.9145384 0.4044991 0 0.9145384 0.4044991 0 0.9708862 0.2395414 0 0.9708862 0.2395414 0 0.9977321 0.06731158 0 0.9977321 0.06731158 0 0.9942625 -0.1069678 0 0.9942625 -0.1069678 0 0.9605832 -0.2779927 0 0.9605832 -0.2779927 0 0.8977195 -0.4405676 0 0.8977195 -0.4405676 0 0.8075704 -0.5897712 0 0.8075704 -0.5897712 0 0.6928914 -0.721042 0 0.6928914 -0.721042 0 0.5571538 -0.8304093 0 0.5571538 -0.8304093 0 0.4045023 -0.914537 0 0.4045023 -0.914537 0 0.2395394 -0.9708866 0 0.2395394 -0.9708866 0 0.06731158 -0.9977321 0 0.06731158 -0.9977321 0 -0.1069687 -0.9942623 0 -0.1069687 -0.9942623 0 -0.2779904 -0.9605839 0 -0.2779904 -0.9605839 0 -0.440571 -0.8977178 0 -0.440571 -0.8977178 0 -0.5897712 -0.8075704 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -0.5897701 -0.8075712 0 -0.7210408 -0.6928926 0 -0.7210408 -0.6928926 0 -0.8304082 -0.5571555 0 -0.8304082 -0.5571555 0 -0.9145382 -0.4044994 0 -0.9145382 -0.4044994 0 -0.9708869 -0.2395383 0 -0.9708869 -0.2395383 0 -0.9977321 -0.06731092 0 -0.9977321 -0.06731092 0 -0.9942628 0.1069651 0 -0.9942628 0.1069651 0 -0.9605842 0.2779891 0 -0.9605842 0.2779891 0 -0.8977134 0.4405798 0 -0.8977134 0.4405798 0 -0.8075755 0.5897643 0 -0.8075755 0.5897643 0 -0.6928973 0.7210363 0 -0.6928973 0.7210363 0 -0.5571555 0.8304082 0 -0.5571555 0.8304082 0 -0.4044961 0.9145398 0 -0.4044961 0.9145398 0 -0.2395403 0.9708864 0 -0.2395403 0.9708864 0 -0.06731092 0.9977321 0 -0.06731092 0.9977321 0 0.1069641 0.9942628 0 0.1069641 0.9942628 0 0.2779973 0.9605819 0 0.2779973 0.9605819 0 0.4405654 0.8977205 0 0.4405654 0.8977205 0 0.5897701 0.8075712 0 0.5897701 0.8075712 0 0.7210408 0.6928926 0 0.7210408 0.6928926 0 0.8304041 0.5571616 0 0.8304041 0.5571616 0 0.914543 0.4044887 0 0.914543 0.4044887 0 0.9708844 0.2395487 0 0.9708844 0.2395487 0 0.9977321 0.06731092 0 0.9977321 0.06731092 0 0.9942619 -0.1069729 0 0.9942619 -0.1069729 0 0.9605842 -0.2779891 0 0.9605842 -0.2779891 0 0.897717 -0.4405726 0 0.897717 -0.4405726 0 0.8075712 -0.5897701 0 0.8075712 -0.5897701 0 0.6928926 -0.7210408 0 0.6928926 -0.7210408 0 0.5571616 -0.8304041 0 0.5571616 -0.8304041 0 0.404492 -0.9145416 0 0.404492 -0.9145416 0 0.2395466 -0.9708848 0 0.2395466 -0.9708848 0 0.06731092 -0.9977321 0 0.06731092 -0.9977321 0 -0.1069641 -0.9942628 0 -0.1069641 -0.9942628 0 -0.2779973 -0.9605819 0 -0.2779973 -0.9605819 0 -0.4405726 -0.897717 0 -0.4405726 -0.897717 0 -0.5897701 -0.8075712 0 -0.5897701 -0.8075712 0 -0.7210408 -0.6928926 0 -0.7210408 -0.6928926 0 -0.8304082 -0.5571555 0 -0.8304082 -0.5571555 0 -0.9145382 -0.4044994 0 -0.9145382 -0.4044994 0 -0.9708869 -0.2395383 0 -0.9708869 -0.2395383 0 -0.9977321 -0.06731092 0 -0.9977321 -0.06731092 0 -0.9942628 0.1069651 0 -0.9942628 0.1069651 0 -0.9605842 0.2779891 0 -0.9605842 0.2779891 0 -0.8977134 0.4405798 0 -0.8977134 0.4405798 0 -0.8075755 0.5897643 0 -0.8075755 0.5897643 0 -0.6928973 0.7210363 0 -0.6928973 0.7210363 0 -0.5571555 0.8304082 0 -0.5571555 0.8304082 0 -0.4044961 0.9145398 0 -0.4044961 0.9145398 0 -0.2395403 0.9708864 0 -0.2395403 0.9708864 0 -0.06731092 0.9977321 0 -0.06731092 0.9977321 0 0.1069641 0.9942628 0 0.1069641 0.9942628 0 0.2779973 0.9605819 0 0.2779973 0.9605819 0 0.4405654 0.8977205 0 0.4405654 0.8977205 0 0.5897701 0.8075712 0 0.5897701 0.8075712 0 0.7210408 0.6928926 0 0.7210408 0.6928926 0 0.8304041 0.5571616 0 0.8304041 0.5571616 0 0.914543 0.4044887 0 0.914543 0.4044887 0 0.9708844 0.2395487 0 0.9708844 0.2395487 0 0.9977321 0.06731092 0 0.9977321 0.06731092 0 0.9942619 -0.1069729 0 0.9942619 -0.1069729 0 0.9605842 -0.2779891 0 0.9605842 -0.2779891 0 0.897717 -0.4405726 0 0.897717 -0.4405726 0 0.8075712 -0.5897701 0 0.8075712 -0.5897701 0 0.6928926 -0.7210408 0 0.6928926 -0.7210408 0 0.5571616 -0.8304041 0 0.5571616 -0.8304041 0 0.404492 -0.9145416 0 0.404492 -0.9145416 0 0.2395466 -0.9708848 0 0.2395466 -0.9708848 0 0.06731092 -0.9977321 0 0.06731092 -0.9977321 0 -0.1069641 -0.9942628 0 -0.1069641 -0.9942628 0 -0.2779973 -0.9605819 0 -0.2779973 -0.9605819 0 -0.4405726 -0.897717 0 -0.4405726 -0.897717 0 -0.5897701 -0.8075712 0 -0.5897712 -0.8075704 0 -0.7210377 -0.6928958 0 -0.7210377 -0.6928958 0 -0.8304093 -0.5571539 0 -0.8304093 -0.5571539 0 -0.9145402 -0.4044952 0 -0.9145402 -0.4044952 0 -0.9708847 -0.2395475 0 -0.9708847 -0.2395475 0 -0.9977325 -0.06730312 0 -0.9977325 -0.06730312 0 -0.9942634 0.1069593 0 -0.9942634 0.1069593 0 -0.9605832 0.2779927 0 -0.9605832 0.2779927 0 -0.8977144 0.4405779 0 -0.8977144 0.4405779 0 -0.8075745 0.5897656 0 -0.8075745 0.5897656 0 -0.6928914 0.721042 0 -0.6928914 0.721042 0 -0.5571598 0.8304054 0 -0.5571598 0.8304054 0 -0.4045023 0.9145369 0 -0.4045023 0.9145369 0 -0.2395313 0.9708887 0 -0.2395313 0.9708887 0 -0.06731158 0.997732 0 -0.06731158 0.997732 0 0.1069593 0.9942634 0 0.1069593 0.9942634 0 0.2779927 0.9605832 0 0.2779927 0.9605832 0 0.4405745 0.897716 0 0.4405745 0.897716 0 0.5897697 0.8075715 0 0.5897697 0.8075715 0 0.7210418 0.6928915 0 0.7210418 0.6928915 0 0.8304067 0.5571579 0 0.8304067 0.5571579 0 0.9145384 0.4044991 0 0.9145384 0.4044991 0 0.9708861 0.2395414 0 0.9708861 0.2395414 0 0.997732 0.06731158 0 0.997732 0.06731158 0 0.9942625 -0.1069678 0 0.9942625 -0.1069678 0 0.9605832 -0.2779927 0 0.9605832 -0.2779927 0 0.8977195 -0.4405676 0 0.8977195 -0.4405676 0 0.8075704 -0.5897712 0 0.8075704 -0.5897712 0 0.6928914 -0.721042 0 0.6928914 -0.721042 0 0.5571539 -0.8304093 0 0.5571539 -0.8304093 0 0.4045023 -0.9145369 0 0.4045023 -0.9145369 0 0.2395395 -0.9708867 0 0.2395395 -0.9708867 0 0.06731158 -0.997732 0 0.06731158 -0.997732 0 -0.1069687 -0.9942624 0 -0.1069687 -0.9942624 0 -0.2779904 -0.9605839 0 -0.2779904 -0.9605839 0 -0.440571 -0.8977178 0 -0.440571 -0.8977178 0 -0.5897712 -0.8075704 0 0.721042 0.6928914 0 0.5897676 0.807573 0 0.5897676 0.807573 0 0.4405745 0.8977162 0 0.4405745 0.8977162 0 0.2779887 0.9605844 0 0.2779887 0.9605844 0 0.106972 0.9942621 0 0.106972 0.9942621 0 -0.06731158 0.9977321 0 -0.06731158 0.9977321 0 -0.2395434 0.9708856 0 -0.2395434 0.9708856 0 -0.4044987 0.9145386 0 -0.4044987 0.9145386 0 -0.5571588 0.830406 0 -0.5571588 0.830406 0 -0.6928893 0.7210441 0 -0.6928893 0.7210441 0 -0.807576 0.5897635 0 -0.807576 0.5897635 0 -0.8977161 0.4405744 0 -0.8977161 0.4405744 0 -0.9605823 0.2779955 0 -0.9605823 0.2779955 0 -0.9942624 0.1069687 0 -0.9942624 0.1069687 0 -0.9977321 -0.06731158 0 -0.9977321 -0.06731158 0 -0.9708849 -0.2395464 0 -0.9708849 -0.2395464 0 -0.9145417 -0.4044916 0 -0.9145417 -0.4044916 0 -0.8304053 -0.5571598 0 -0.8304053 -0.5571598 0 -0.7210398 -0.6928936 0 -0.7210398 -0.6928936 0 -0.5897676 -0.807573 0 -0.5897676 -0.807573 0 -0.4405762 -0.8977152 0 -0.4405762 -0.8977152 0 -0.2779915 -0.9605835 0 -0.2779915 -0.9605835 0 -0.1069644 -0.9942629 0 -0.1069644 -0.9942629 0 0.06730675 -0.9977324 0 0.06730675 -0.9977324 0 0.2395445 -0.9708854 0 0.2395445 -0.9708854 0 0.4044936 -0.9145408 0 0.4044936 -0.9145408 0 0.5571637 -0.8304026 0 0.5571637 -0.8304026 0 0.6928871 -0.7210461 0 0.6928871 -0.7210461 0 0.8075765 -0.5897628 0 0.8075765 -0.5897628 0 0.8977152 -0.4405762 0 0.8977152 -0.4405762 0 0.9605835 -0.2779915 0 0.9605835 -0.2779915 0 0.9942624 -0.1069687 0 0.9942624 -0.1069687 0 0.9977318 0.06731557 0 0.9977318 0.06731557 0 0.9708867 0.2395395 0 0.9708867 0.2395395 0 0.9145401 0.4044951 0 0.9145401 0.4044951 0 0.8304053 0.5571598 0 0.8304053 0.5571598 0 0.721042 0.6928914 0 -0.6114582 -0.7912757 0.001181721 -0.5897656 -0.8075745 0 -0.7075617 -0.7066516 0 -0.7642616 -0.6449002 0.002840101 -0.8207955 -0.5711832 0.006684958 -0.7210418 -0.6928915 -1.31014e-4 -0.8204656 -0.571696 -1.32732e-4 -0.8304066 -0.5571578 5.08344e-4 -0.8990692 -0.4378063 -4.47479e-4 -0.8990768 -0.4377907 -4.47479e-4 -0.9145413 -0.4044919 7.24732e-4 -0.934154 -0.3568699 1.4702e-4 -0.9931031 -0.1172429 -6.20314e-4 -0.962049 -0.2728748 0.001058757 -0.9708842 -0.2395495 3.43341e-4 -0.9619922 -0.2730769 -4.25393e-4 -0.9619959 -0.2730635 -4.25393e-4 -0.9931001 -0.1172684 -6.20314e-4 -0.9977322 -0.06730306 8.18979e-4 -0.998948 0.04584944 -7.60919e-4 -0.9989476 0.04585802 -7.60919e-4 -0.9942622 0.1069677 8.65944e-4 -0.9782689 0.207339 -7.45568e-4 -0.9782622 0.2073706 -7.45568e-4 -0.9605827 0.2779926 9.14426e-4 -0.9312538 0.3643702 -8.54906e-4 -0.9312567 0.364363 -8.54906e-4 -0.897719 0.4405674 9.16853e-4 -0.8603176 0.5097578 -7.15901e-4 -0.8603181 0.5097572 -7.15901e-4 -0.8075712 0.5897694 8.75187e-4 -0.8093921 0.5872678 9.53583e-4 -0.644571 0.7645441 -6.48764e-4 -0.6445758 0.7645401 -6.48764e-4 -0.6928955 0.7210374 8.98319e-4 -0.7530058 0.6580136 -6.82764e-4 -0.7530086 0.6580104 -6.82764e-4 -0.3519672 0.936012 -6.32348e-4 -0.3519787 0.9360077 -6.32348e-4 -0.404499 0.914538 8.62694e-4 -0.4923945 0.8703718 -6.94465e-4 -0.5571537 0.8304091 -6.92468e-4 -0.4926475 0.8702253 0.002493143 -0.5710095 0.8209432 5.66946e-4 -0.02493 0.9996891 -5.43767e-4 -0.02491015 0.9996896 -5.43767e-4 -0.06731158 0.9977318 7.54009e-4 -0.1831332 0.983088 -6.53373e-4 -0.2395414 0.9708859 -6.52281e-4 -0.1834589 0.9830257 0.001785635 -0.2690529 0.9631254 3.81158e-4 0.1401086 0.9901357 8.94418e-4 0.1069678 0.9942625 2.04356e-4 0.1402847 0.9901111 -5.42743e-4 0.4405676 0.8977194 -3.13116e-4 0.4661263 0.8847177 9.32801e-4 0.3864365 0.922316 8.02719e-5 0.3010179 0.9536184 -2.93392e-4 0.2779927 0.9605832 -2.93304e-4 0.3009502 0.9536396 7.44724e-4 0.1402928 0.9901099 -5.42743e-4 -0.5401673 -0.8415577 0 -0.4405745 -0.8977162 0 -0.4405745 -0.8977162 0 -0.2779927 -0.9605832 0 -0.2779927 -0.9605832 0 -0.1069602 -0.9942633 0 -0.1069602 -0.9942633 0 0.06731158 -0.9977321 0 0.06731158 -0.9977321 0 0.2395313 -0.9708886 0 0.2395313 -0.9708886 0 0.4044991 -0.9145383 0 0.4044991 -0.9145383 0 0.5571578 -0.8304066 0 0.5571578 -0.8304066 0 0.6928958 -0.7210377 0 0.6928958 -0.7210377 0 0.8075745 -0.5897656 0 0.8075745 -0.5897656 0 0.8977144 -0.4405779 0 0.8977144 -0.4405779 0 0.9605809 -0.2780005 0 0.9605809 -0.2780005 0 0.9942634 -0.1069593 0 0.9942634 -0.1069593 0 0.9977321 0.06731158 0 0.9977321 0.06731158 0 0.9708867 0.2395395 0 0.9708867 0.2395395 0 0.9145401 0.4044951 0 0.9145401 0.4044951 0 0.8304053 0.5571598 0 0.8304053 0.5571598 0 0.7613838 0.6483013 0 0.7210417 0.6928912 8.14971e-4 0.7019876 0.7121891 0 0.5897712 0.8075704 0 0.5972024 0.8020907 4.02178e-4 0.4662252 0.884666 -3.13245e-4 0.7019746 0.712201 -0.0011819 0.721042 0.6928914 0 0.6052078 0.7960675 0 0.5364195 0.8439468 -0.002839386 0.4558751 0.8900187 -0.006679773 0.5897712 0.8075705 1.31123e-4 0.4563083 0.8898218 1.32758e-4 0.4405676 0.8977194 -5.08281e-4 0.3130525 0.9497357 4.47689e-4 0.3130649 0.9497317 4.47689e-4 0.2779926 0.9605829 -7.24449e-4 0.2281967 0.9736151 -1.47073e-4 -0.01721322 0.9998517 6.20149e-4 0.141223 0.9899773 -0.001059472 0.1069678 0.9942625 -3.43062e-4 0.1413717 0.9899565 4.25371e-4 0.1414009 0.9899523 4.25371e-4 -0.01718223 0.9998522 6.20149e-4 -0.06731158 0.9977317 -8.18978e-4 -0.1795962 0.9837401 7.60863e-4 -0.1796268 0.9837346 7.60863e-4 -0.2395414 0.9708858 -8.65665e-4 -0.3368759 0.9415487 7.4615e-4 -0.3368719 0.9415502 7.4615e-4 -0.404499 0.914538 -9.14353e-4 -0.4861388 0.8738813 8.5464e-4 -0.4861598 0.8738695 8.5464e-4 -0.5571537 0.8304089 -9.16753e-4 -0.6206899 0.7840558 7.15895e-4 -0.6206979 0.7840495 7.15895e-4 -0.6928955 0.7210375 -8.75093e-4 -0.690667 0.7231723 -9.53284e-4 -0.8441917 0.5360412 6.48802e-4 -0.8441922 0.5360404 6.48803e-4 -0.8075712 0.5897694 -8.98375e-4 -0.7531892 0.6578037 6.82798e-4 -0.7531839 0.6578096 6.82798e-4 -0.9748021 0.2230706 6.32207e-4 -0.9748038 0.2230629 6.32207e-4 -0.9605828 0.2779926 -8.62849e-4 -0.9286256 0.3710176 6.94196e-4 -0.8977193 0.4405675 6.92187e-4 -0.9285029 0.3713167 -0.002492606 -0.8902088 0.4555523 -5.67171e-4 -0.9939741 -0.109614 5.43627e-4 -0.993977 -0.1095877 5.43627e-4 -0.9977322 -0.06730306 -7.54298e-4 -0.9987775 0.04942607 6.52933e-4 -0.9942623 0.1069677 6.51829e-4 -0.998759 0.04977226 -0.001785695 -0.9905397 0.1372265 -3.81791e-4 -0.9623524 -0.2718035 -8.93886e-4 -0.9708842 -0.2395495 -2.04528e-4 -0.9622932 -0.272014 5.42733e-4 -0.8304066 -0.5571578 3.12637e-4 -0.8140946 -0.5807316 -9.32919e-4 -0.8620631 -0.5068011 -8.02517e-5 -0.9045415 -0.4263856 2.93317e-4 -0.9145416 -0.404492 2.93231e-4 -0.904577 -0.4263094 -7.44838e-4 -0.9622979 -0.2719973 5.42733e-4 0.7613838 0.6483013 0 0.8304053 0.5571598 0 0.8304053 0.5571598 0 0.9145401 0.4044951 0 0.9145401 0.4044951 0 0.9708867 0.2395395 0 0.9708867 0.2395395 0 0.9977321 0.06731158 0 0.9977321 0.06731158 0 0.9942634 -0.1069593 0 0.9942634 -0.1069593 0 0.9605809 -0.2780005 0 0.9605809 -0.2780005 0 0.8977144 -0.4405779 0 0.8977144 -0.4405779 0 0.8075745 -0.5897656 0 0.8075745 -0.5897656 0 0.6928958 -0.7210377 0 0.6928958 -0.7210377 0 0.5571578 -0.8304066 0 0.5571578 -0.8304066 0 0.4044991 -0.9145383 0 0.4044991 -0.9145383 0 0.2395313 -0.9708886 0 0.2395313 -0.9708886 0 0.06731158 -0.9977321 0 0.06731158 -0.9977321 0 -0.1069602 -0.9942633 0 -0.1069602 -0.9942633 0 -0.2779927 -0.9605832 0 -0.2779927 -0.9605832 0 -0.4405745 -0.8977162 0 -0.4405745 -0.8977162 0 -0.5401673 -0.8415577 0 -0.5897653 -0.8075742 -8.14865e-4 -0.6114447 -0.7912873 0 -0.7210418 -0.6928915 0 -0.7146102 -0.699523 -4.02392e-4 -0.8139902 -0.5808786 3.12754e-4 0.721042 0.6928914 0 0.5897676 0.807573 0 0.5897676 0.807573 0 0.4405745 0.8977162 0 0.4405745 0.8977162 0 0.2779887 0.9605844 0 0.2779887 0.9605844 0 0.106972 0.9942621 0 0.106972 0.9942621 0 -0.06731158 0.9977321 0 -0.06731158 0.9977321 0 -0.2395434 0.9708856 0 -0.2395434 0.9708856 0 -0.4044987 0.9145386 0 -0.4044987 0.9145386 0 -0.5571588 0.830406 0 -0.5571588 0.830406 0 -0.6928893 0.7210441 0 -0.6928893 0.7210441 0 -0.807576 0.5897635 0 -0.807576 0.5897635 0 -0.8977161 0.4405744 0 -0.8977161 0.4405744 0 -0.9605823 0.2779955 0 -0.9605823 0.2779955 0 -0.9942624 0.1069687 0 -0.9942624 0.1069687 0 -0.9977321 -0.06731158 0 -0.9977321 -0.06731158 0 -0.9708849 -0.2395464 0 -0.9708849 -0.2395464 0 -0.9145417 -0.4044916 0 -0.9145417 -0.4044916 0 -0.8304053 -0.5571598 0 -0.8304053 -0.5571598 0 -0.7210398 -0.6928936 0 -0.7210398 -0.6928936 0 -0.5897676 -0.807573 0 -0.5897676 -0.807573 0 -0.4405762 -0.8977152 0 -0.4405762 -0.8977152 0 -0.2779915 -0.9605835 0 -0.2779915 -0.9605835 0 -0.1069644 -0.9942629 0 -0.1069644 -0.9942629 0 0.06730675 -0.9977324 0 0.06730675 -0.9977324 0 0.2395445 -0.9708854 0 0.2395445 -0.9708854 0 0.4044936 -0.9145408 0 0.4044936 -0.9145408 0 0.5571637 -0.8304026 0 0.5571637 -0.8304026 0 0.6928871 -0.7210461 0 0.6928871 -0.7210461 0 0.8075765 -0.5897628 0 0.8075765 -0.5897628 0 0.8977152 -0.4405762 0 0.8977152 -0.4405762 0 0.9605835 -0.2779915 0 0.9605835 -0.2779915 0 0.9942624 -0.1069687 0 0.9942624 -0.1069687 0 0.9977318 0.06731557 0 0.9977318 0.06731557 0 0.9708867 0.2395395 0 0.9708867 0.2395395 0 0.9145401 0.4044951 0 0.9145401 0.4044951 0 0.8304053 0.5571598 0 0.8304053 0.5571598 0 0.721042 0.6928914 0 0.6579039 0.7531019 -1.05994e-6 0.6579098 0.7530966 9.35685e-7 0.6579075 0.7530987 0 0.6579075 0.7530987 0 0.6579069 0.7530993 0 0.6579059 0.7531001 -1.55967e-7 0.6579086 0.7530978 -1.71289e-7 0.657908 0.7530984 3.44916e-7 0.6579059 0.7531002 -2.722e-7 0.6579076 0.7530986 0 0.6579075 0.7530987 0 0.6579045 0.7531013 -7.29863e-7 0.6579069 0.7530993 -1.15214e-6 0.6579077 0.7530986 7.26515e-7 0.6579067 0.7530995 -1.44027e-6 0.6579082 0.7530981 1.177e-6 0.6579062 0.7530999 -4.15709e-6 0.6579075 0.7530989 0 0.6579074 0.7530989 7.59642e-7 0.6579074 0.7530988 -6.82806e-7 0.6579077 0.7530986 2.87745e-7 0.6579086 0.7530978 5.39199e-7 0.657906 0.7531002 -7.50627e-7 0.6579066 0.7530996 -4.4174e-7 0.6579084 0.7530978 4.76764e-7 0.657911 0.7530958 1.59152e-6 0.6579076 0.7530987 1.94772e-7 0.6579075 0.7530987 0 0.657907 0.7530993 -7.15401e-7 0.6579075 0.7530987 2.25327e-7 0.6579073 0.7530989 -3.00447e-7 0.6579075 0.7530988 2.28313e-7 0.657908 0.7530983 7.94795e-7 0.6579067 0.7530993 -7.54628e-7 0.6579074 0.7530989 0 0.6579104 0.7530964 8.03793e-7 0.6579067 0.7530995 2.72453e-7 0.6579087 0.7530977 -6.30046e-7 0.6579061 0.7530999 9.76806e-7 0.6579072 0.753099 4.12846e-7 0.6579077 0.7530986 -8.88279e-7 0.6579073 0.753099 -5.18766e-7 0.6579073 0.7530989 0 0.6579095 0.7530971 1.41221e-6 0.6579068 0.7530993 -5.21778e-7 0.6579071 0.753099 -2.96057e-7 0.6579073 0.753099 -4.95283e-7 0.6579075 0.7530987 -1.37204e-7 0.6579075 0.7530987 -1.5277e-7 0.6579075 0.7530987 -1.41426e-7 0.6579076 0.7530987 -1.94772e-7 0.6579069 0.7530993 1.15214e-6 0.6579074 0.7530989 0 0.6579074 0.7530989 0 0.657907 0.7530992 -2.3506e-6 0.6579077 0.7530986 -1.79544e-6 0.6579074 0.7530989 0 0.6579074 0.7530989 -2.68514e-7 0.6579079 0.7530985 1.24876e-6 0.6579073 0.753099 -5.61076e-7 0.6579077 0.7530986 8.88279e-7 0.6579072 0.753099 -4.12846e-7 0.657907 0.7530992 -1.30192e-6 0.6579076 0.7530987 0 0.657908 0.7530983 9.05053e-7 0.6579072 0.753099 -1.2006e-6 0.6579077 0.7530986 2.06874e-7 0.6579075 0.7530987 0 0.6579075 0.7530987 0 0.6579059 0.7531002 0 0.657907 0.7530993 1.62668e-7 0.6579086 0.7530978 1.71289e-7 0.6579074 0.7530989 0 0.6579068 0.7530994 -3.1126e-6 0.6579079 0.7530983 2.84631e-6 0.6579071 0.753099 0 0.6579076 0.7530987 -1.409e-7 0.6579074 0.7530989 0 0.6579074 0.7530988 0 0.6579075 0.7530987 2.43832e-7 0.6579074 0.7530989 0 0.6579074 0.7530988 0 0.6579074 0.7530989 0 0.6579075 0.7530987 -2.43832e-7 0.6579073 0.753099 4.57184e-7 0.6579074 0.7530989 0 0.6579076 0.7530987 1.409e-7 0.6579074 0.7530989 0 0.6579069 0.7530992 -1.91373e-6 0.6579071 0.7530991 -1.19799e-6 0.6579074 0.7530989 0 0.6579075 0.7530989 0 0.6579071 0.753099 1.19453e-6 0.6579073 0.7530989 2.9882e-7 0.6579068 0.7530994 1.86676e-6 0.657907 0.7530992 6.39624e-7 0.6579082 0.7530981 -2.70381e-6 0.6579066 0.7530995 2.98131e-6 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0.7210416 0.6928918 0 0.7210416 0.6928918 0 0.8304049 0.5571604 0 0.8304049 0.5571604 0 0.9145395 0.4044966 0 0.9145395 0.4044966 0 0.9708867 0.2395391 0 0.9708867 0.2395391 0 0.9977319 0.06731307 0 0.9977319 0.06731307 0 0.9942625 -0.1069675 0 0.9942625 -0.1069675 0 0.9605844 -0.2779886 0 0.9605844 -0.2779886 0 0.8977145 -0.4405776 0 0.8977145 -0.4405776 0 0.807575 -0.5897649 0 0.807575 -0.5897649 0 0.6928918 -0.7210416 0 0.6928918 -0.7210416 0 0.5571604 -0.8304049 0 0.5571604 -0.8304049 0 0.4044936 -0.9145408 0 0.4044936 -0.9145408 0 0.2395416 -0.9708861 0 0.2395416 -0.9708861 0 0.06730949 -0.9977322 0 0.06730949 -0.9977322 0 -0.1069679 -0.9942625 0 -0.1069679 -0.9942625 0 -0.2779919 -0.9605835 0 -0.2779919 -0.9605835 0 -0.4405733 -0.8977166 0 -0.4405733 -0.8977166 0 -0.5897666 -0.8075737 0 -0.5897666 -0.8075737 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.06563663 -0.0573402 -0.9961947 0.06563633 -0.0573399 -0.9961947 0.1949159 -0.1702786 -0.9659259 0.1949164 -0.170279 -0.9659258 0.3182741 -0.2780444 -0.9063072 0.3182742 -0.2780445 -0.9063073 0.431959 -0.3773595 -0.8191527 0.4319601 -0.3773605 -0.8191516 0.5325199 -0.4652097 -0.7071085 0.5325199 -0.4652097 -0.7071085 0.6169023 -0.5389261 -0.5735766 0.6169013 -0.5389252 -0.5735785 0.6825414 -0.5962684 -0.4226122 0.6825408 -0.5962677 -0.4226142 0.7274369 -0.635489 -0.2588233 0.7274369 -0.6354891 -0.258823 0.7502332 -0.6554039 -0.08715462 0.7502331 -0.6554039 -0.08715528 0.7530989 -0.6579073 0 0.7530989 -0.6579073 0 0.7502332 -0.6554039 0.08715462 0.7502332 -0.6554039 0.08715522 0.7274369 -0.635489 0.2588233 0.7274369 -0.6354891 0.258823 0.6825416 -0.5962684 0.4226123 0.6825407 -0.5962678 0.4226143 0.6169024 -0.5389261 0.5735766 0.6169017 -0.5389257 0.5735778 0.5325199 -0.4652097 0.7071085 0.5325199 -0.4652097 0.7071085 0.4319589 -0.3773596 0.8191527 0.4319598 -0.3773602 0.8191521 0.3182741 -0.2780444 0.9063072 0.3182739 -0.2780442 0.9063075 0.1949159 -0.1702786 0.965926 0.1949165 -0.170279 0.9659258 0.06563663 -0.05734014 0.9961947 0.06563627 -0.05733984 0.9961948 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0.7210416 0.6928918 0 0.7210416 0.6928918 0 0.8304049 0.5571604 0 0.8304049 0.5571604 0 0.9145395 0.4044966 0 0.9145395 0.4044966 0 0.9708867 0.2395391 0 0.9708867 0.2395391 0 0.9977319 0.06731307 0 0.9977319 0.06731307 0 0.9942625 -0.1069675 0 0.9942625 -0.1069675 0 0.9605844 -0.2779886 0 0.9605844 -0.2779886 0 0.8977145 -0.4405776 0 0.8977145 -0.4405776 0 0.807575 -0.5897649 0 0.807575 -0.5897649 0 0.6928918 -0.7210416 0 0.6928918 -0.7210416 0 0.5571604 -0.8304049 0 0.5571604 -0.8304049 0 0.4044936 -0.9145408 0 0.4044936 -0.9145408 0 0.2395416 -0.9708861 0 0.2395416 -0.9708861 0 0.06730949 -0.9977322 0 0.06730949 -0.9977322 0 -0.1069679 -0.9942625 0 -0.1069679 -0.9942625 0 -0.2779919 -0.9605835 0 -0.2779919 -0.9605835 0 -0.4405733 -0.8977166 0 -0.4405733 -0.8977166 0 -0.5897666 -0.8075737 0 -0.5897666 -0.8075737 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.06285864 -0.05491334 -0.9965106 0.06285876 -0.05491346 -0.9965106 0.1868255 -0.1632109 -0.9687406 0.1868247 -0.1632102 -0.9687409 0.3055837 -0.2669581 -0.9139759 0.305583 -0.2669574 -0.9139764 0.4158316 -0.3632705 -0.8337378 0.4158308 -0.3632698 -0.8337385 0.5144832 -0.4494525 -0.7302737 0.5144841 -0.4494534 -0.7302725 0.5988054 -0.5231165 -0.6064497 0.5988053 -0.5231164 -0.6064499 0.6664364 -0.582199 -0.4657326 0.6664366 -0.5821991 -0.4657323 0.6664378 -0.5822001 -0.4657294 0.6664376 -0.5822 -0.4657295 0.5988035 -0.5231148 -0.6064531 0.5988042 -0.5231156 -0.6064516 0.5144877 -0.4494566 -0.730268 0.5144871 -0.449456 -0.7302685 0.4158278 -0.3632673 -0.8337411 0.4158281 -0.3632676 -0.8337408 0.3055849 -0.2669591 -0.9139753 0.3055854 -0.2669596 -0.913975 0.1868255 -0.1632109 -0.9687407 0.1868252 -0.1632106 -0.9687408 0.06285965 -0.05491417 -0.9965104 0.06285965 -0.05491417 -0.9965105 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.06034845 -0.05272042 -0.9967842 0.06034833 -0.0527203 -0.9967841 0.1794972 -0.1568088 -0.9711806 0.1794971 -0.1568087 -0.9711807 0.294037 -0.2568708 -0.92063 0.2940367 -0.2568705 -0.9206302 0.4010203 -0.3503315 -0.8464341 0.4010198 -0.350331 -0.8464345 0.4977046 -0.4347949 -0.7504956 0.4977047 -0.434795 -0.7504954 0.4977053 -0.4347955 -0.7504948 0.4977049 -0.4347952 -0.7504951 0.401022 -0.3503329 -0.8464328 0.4010217 -0.3503327 -0.8464329 0.2940347 -0.2568688 -0.9206312 0.294035 -0.256869 -0.9206311 0.1794978 -0.1568093 -0.9711804 0.1794978 -0.1568093 -0.9711804 0.06035012 -0.05272185 -0.9967839 0.06035012 -0.05272185 -0.9967839 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.7210408 -0.6928926 0 -0.7210408 -0.6928926 0 -0.8304062 -0.5571585 0 -0.8304062 -0.5571585 0 -0.9145399 -0.4044957 0 -0.9145399 -0.4044957 0 -0.9708859 -0.2395424 0 -0.9708859 -0.2395424 0 -0.9977322 -0.06731033 0 -0.9977322 -0.06731033 0 -0.9942626 0.1069663 0 -0.9942626 0.1069663 0 -0.9605831 0.2779932 0 -0.9605831 0.2779932 0 -0.8977165 0.4405735 0 -0.8977165 0.4405735 0 -0.8075736 0.5897668 0 -0.8075736 0.5897668 0 -0.6928926 0.7210408 0 -0.6928926 0.7210408 0 -0.5571585 0.8304062 0 -0.5571585 0.8304062 0 -0.4044957 0.9145399 0 -0.4044957 0.9145399 0 -0.2395424 0.9708859 0 -0.2395424 0.9708859 0 -0.06731033 0.9977322 0 -0.06731033 0.9977322 0 0.1069663 0.9942626 0 0.1069663 0.9942626 0 0.2779932 0.9605831 0 0.2779932 0.9605831 0 0.4405735 0.8977165 0 0.4405735 0.8977165 0 0.5897668 0.8075736 0 0.5897668 0.8075736 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -0.1250338 0.1090511 0.9861412 -0.09753507 0.08629411 0.9914839 -0.09753328 0.08629274 0.9914841 -0.08113807 0.07376074 0.9939699 -0.06419169 0.06095427 0.9960744 -0.06418484 0.06094944 0.996075 -0.06312632 0.0602138 0.9961875 -0.03657317 0.03339815 0.9987727 -0.01130044 0.009872078 0.9998875 -0.1612966 0.1279584 0.9785755 -0.1790176 0.148203 0.9726195 -0.1790207 0.1482065 0.9726183 -0.1939049 0.1642616 0.9671705 -0.1939147 0.1642718 0.967167 -0.2055678 0.1763122 0.9626296 -0.2055656 0.1763098 0.9626306 -0.2143429 0.1850934 0.9590608 -0.2143347 0.1850853 0.9590641 -0.2197414 0.1904048 0.9567967 -0.2340149 0.204442 0.9504949 -0.2339953 0.2044267 0.950503 -0.2139141 0.1888555 0.9584228 -0.2138819 0.1888308 0.9584349 -0.2092539 0.1852945 0.9601451 -0.2029207 0.1804769 0.9624194 -0.2029275 0.180482 0.9624171 -0.1903657 0.1712066 0.9666691 -0.1903453 0.1711919 0.9666758 -0.1820803 0.1653499 0.9692813 -0.1713899 0.1578323 0.9724785 -0.1713927 0.1578343 0.9724776 -0.1496235 0.1433914 0.9782903 -0.1496171 0.1433873 0.9782918 -0.1943597 0.170915 0.9659256 -0.1250333 0.1090509 0.9861412 -0.1250254 0.109044 0.9861431 -0.04125654 0.0250011 0.9988358 -0.067137 0.05562311 0.9961921 -0.01130026 0.009871959 0.9998874 -0.05555152 0.04074382 0.9976241 -0.07089698 0.05737805 0.9958321 -0.07089132 0.05737185 0.9958327 -0.09655702 0.08308011 0.991854 -0.09657227 0.08309519 0.9918513 -0.1112318 0.09669512 0.9890791 -0.124761 0.1091365 0.9861662 -0.124749 0.1091256 0.9861689 -0.1948449 0.1703608 0.9659259 -0.1417103 0.1040588 0.9844237 -0.1612908 0.1279515 0.9785774 -0.2340828 0.2044948 0.9504668 -0.3182739 0.2780441 0.9063075 -0.3182739 0.2780441 0.9063075 -0.4319595 0.3773599 0.8191523 -0.4319596 0.37736 0.8191522 -0.5325209 0.4652104 0.7071073 -0.5325204 0.46521 0.7071079 -0.616903 0.5389267 0.5735754 -0.6169029 0.5389266 0.5735756 -0.6825398 0.596267 0.422617 -0.6825401 0.5962672 0.422616 -0.7274373 0.6354894 0.2588207 -0.727437 0.6354892 0.258822 -0.7502329 0.6554037 0.0871576 -0.7502329 0.6554037 0.0871576 -0.7530988 0.6579074 0 -0.7530988 0.6579074 0 -0.1248561 0.1092529 -0.9861414 -0.09861201 0.08506006 -0.9914841 -0.09860837 0.08505648 -0.9914847 -0.08399498 0.07050019 -0.9939692 -0.06902366 0.05542272 -0.9960744 -0.06901907 0.05541771 -0.9960749 -0.06814688 0.05446648 -0.9961875 -0.03800803 0.03175598 -0.9987727 -0.01130032 0.009871959 -0.9998874 -0.1484627 0.1426476 -0.9785757 -0.1708998 0.157486 -0.9726209 -0.1709115 0.157494 -0.9726176 -0.1888256 0.1700906 -0.9671681 -0.1888233 0.1700889 -0.9671689 -0.2023183 0.1800183 -0.9626321 -0.202331 0.1800279 -0.9626278 -0.2122026 0.1875371 -0.9590619 -0.2122043 0.1875385 -0.9590613 -0.2182097 0.1921877 -0.9567907 -0.234018 0.2044313 -0.9504964 -0.2158722 0.1866054 -0.9584245 -0.2158508 0.1865843 -0.9584335 -0.2117059 0.1824542 -0.9601516 -0.206107 0.1768513 -0.9624154 -0.2060969 0.176841 -0.9624195 -0.1952217 0.1656423 -0.9666702 -0.1952142 0.1656343 -0.9666729 -0.1882985 0.1582113 -0.9692847 -0.179425 0.1486401 -0.9724776 -0.1794246 0.1486397 -0.9724777 -0.1621896 0.1290087 -0.9782899 -0.1621781 0.128995 -0.9782937 -0.1954723 0.1696425 -0.9659255 -0.1248599 0.1092559 -0.9861406 -0.1248477 0.1092452 -0.9861432 -0.03031569 0.03752452 -0.9988358 -0.06413686 0.05905765 -0.9961921 -0.01130044 0.009872078 -0.9998875 -0.04783535 0.04957515 -0.9976242 -0.0663734 0.06254273 -0.9958328 -0.06637406 0.06254321 -0.9958327 -0.09530133 0.08452689 -0.9918533 -0.09531366 0.08453649 -0.9918512 -0.1107513 0.09722977 -0.9890806 -0.1249015 0.108969 -0.986167 -0.1248948 0.1089634 -0.9861685 -0.1949872 0.1701968 -0.9659259 -0.1221476 0.126448 -0.9844242 -0.1484578 0.1426445 -0.978577 -0.7502329 0.6554037 -0.0871576 -0.7502329 0.6554037 -0.0871576 -0.7274373 0.6354895 -0.2588207 -0.7274371 0.6354892 -0.2588219 -0.6825398 0.5962669 -0.422617 -0.6825404 0.5962675 -0.4226155 -0.616903 0.5389266 -0.5735754 -0.6169028 0.5389265 -0.5735757 -0.5325208 0.4652104 -0.7071073 -0.5325205 0.46521 -0.7071079 -0.4319595 0.3773599 -0.8191523 -0.4319596 0.37736 -0.8191522 -0.3182739 0.2780441 -0.9063075 -0.3182739 0.2780441 -0.9063075 -0.2340822 0.2044942 -0.9504671 -0.2340493 0.2044621 -0.950482 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.7210408 -0.6928926 0 -0.7210408 -0.6928926 0 -0.8304062 -0.5571585 0 -0.8304062 -0.5571585 0 -0.9145399 -0.4044957 0 -0.9145399 -0.4044957 0 -0.9708859 -0.2395424 0 -0.9708859 -0.2395424 0 -0.9977322 -0.06731033 0 -0.9977322 -0.06731033 0 -0.9942626 0.1069663 0 -0.9942626 0.1069663 0 -0.9605831 0.2779932 0 -0.9605831 0.2779932 0 -0.8977165 0.4405735 0 -0.8977165 0.4405735 0 -0.8075736 0.5897668 0 -0.8075736 0.5897668 0 -0.6928926 0.7210408 0 -0.6928926 0.7210408 0 -0.5571585 0.8304062 0 -0.5571585 0.8304062 0 -0.4044957 0.9145399 0 -0.4044957 0.9145399 0 -0.2395424 0.9708859 0 -0.2395424 0.9708859 0 -0.06731033 0.9977322 0 -0.06731033 0.9977322 0 0.1069663 0.9942626 0 0.1069663 0.9942626 0 0.2779932 0.9605831 0 0.2779932 0.9605831 0 0.4405735 0.8977165 0 0.4405735 0.8977165 0 0.5897668 0.8075736 0 0.5897668 0.8075736 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0.06035012 -0.05272185 0.9967839 0.06035017 -0.05272191 0.9967839 0.1794978 -0.1568093 0.9711804 0.1794978 -0.1568093 0.9711804 0.2940347 -0.2568688 0.9206314 0.2940348 -0.2568688 0.9206312 0.401022 -0.3503329 0.8464327 0.4010217 -0.3503327 0.8464329 0.4977053 -0.4347955 0.7504948 0.4977055 -0.4347957 0.7504944 0.4977046 -0.4347949 0.7504956 0.4977052 -0.4347954 0.7504948 0.4010204 -0.3503315 0.8464341 0.4010201 -0.3503313 0.8464341 0.294037 -0.2568708 0.92063 0.2940374 -0.2568711 0.9206299 0.1794972 -0.1568088 0.9711806 0.1794973 -0.1568089 0.9711805 0.06034845 -0.05272042 0.9967842 0.06034851 -0.05272048 0.9967842 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0.06285965 -0.05491417 0.9965104 0.06285965 -0.05491423 0.9965104 0.1868255 -0.1632108 0.9687407 0.1868251 -0.1632105 0.9687408 0.3055849 -0.2669591 0.9139752 0.3055854 -0.2669595 0.913975 0.4158278 -0.3632673 0.8337411 0.4158282 -0.3632676 0.8337408 0.5144877 -0.4494565 0.7302679 0.5144874 -0.4494563 0.7302683 0.5988034 -0.5231148 0.6064531 0.5988041 -0.5231153 0.6064522 0.6664378 -0.5822001 0.4657294 0.6664376 -0.5822 0.4657295 0.6664364 -0.582199 0.4657326 0.6664361 -0.5821987 0.4657332 0.5988054 -0.5231165 0.6064497 0.5988053 -0.5231164 0.6064499 0.5144831 -0.4494525 0.7302737 0.5144841 -0.4494533 0.7302724 0.4158316 -0.3632705 0.8337377 0.4158307 -0.3632698 0.8337385 0.3055838 -0.266958 0.913976 0.305583 -0.2669574 0.9139763 0.1868256 -0.1632109 0.9687406 0.1868247 -0.1632102 0.9687409 0.06285864 -0.05491334 0.9965105 0.06285876 -0.05491346 0.9965106 -0.6579108 -0.7530958 -4.06916e-7 -0.6579072 -0.753099 -1.84343e-7 -0.6579077 -0.7530985 -2.11831e-7 -0.6579073 -0.7530989 0 -0.6579077 -0.7530986 0 -0.6579034 -0.7531024 1.46198e-6 -0.6579074 -0.7530989 2.15584e-7 -0.6579074 -0.7530989 -2.68514e-7 -0.6579074 -0.7530987 2.20369e-7 -0.6579072 -0.753099 -2.7268e-7 -0.6579074 -0.7530987 2.1214e-7 -0.6579075 -0.7530987 2.20668e-7 -0.6579074 -0.7530987 0 -0.6579074 -0.7530987 -2.1214e-7 -0.6579096 -0.7530969 0 -0.6579048 -0.753101 4.69323e-7 -0.6579091 -0.7530974 -4.56333e-7 -0.6579088 -0.7530976 -5.84803e-7 -0.6579077 -0.7530986 0 -0.6579067 -0.7530994 3.37545e-7 -0.657906 -0.7531001 5.87986e-7 -0.657908 -0.7530984 -2.58027e-7 -0.6579074 -0.7530989 1.40255e-7 -0.657907 -0.7530993 -1.15597e-6 -0.6579077 -0.7530986 7.23875e-7 -0.6579078 -0.7530986 9.23523e-6 -0.6579071 -0.7530992 1.23107e-6 -0.6579056 -0.7531004 5.50049e-6 -0.6579049 -0.7531009 1.07238e-5 -0.6579074 -0.7530987 -5.67357e-7 -0.6579074 -0.7530987 0 -0.6579087 -0.7530977 -4.09635e-6 -0.6579071 -0.753099 1.92571e-7 -0.6579084 -0.753098 -5.92115e-7 -0.6579068 -0.7530993 5.21778e-7 -0.6579074 -0.7530987 0 -0.6579074 -0.7530987 0 -0.6579056 -0.7531003 0 -0.6579089 -0.7530976 5.17049e-7 -0.6579045 -0.7531014 4.87187e-7 -0.6579073 -0.753099 -2.10575e-6 -0.6579074 -0.7530987 7.13235e-7 -0.6579075 -0.7530987 6.07713e-7 -0.6579079 -0.7530985 -1.37425e-6 -0.6579065 -0.7530997 2.62633e-6 -0.6579089 -0.7530976 -5.48255e-6 -0.6579077 -0.7530986 -4.08757e-7 -0.657907 -0.7530992 7.87059e-7 -0.6579079 -0.7530984 -1.12962e-6 -0.6579074 -0.7530989 -2.05975e-7 -0.6579075 -0.7530988 -3.98971e-7 -0.6579073 -0.7530989 0 -0.6579068 -0.7530994 9.53835e-7 -0.6579074 -0.7530989 -2.77104e-7 -0.6579074 -0.7530987 -2.71592e-7 -0.6579069 -0.7530993 3.96245e-7 -0.6579068 -0.7530994 2.56252e-7 -0.6579082 -0.7530982 -8.13949e-7 -0.6579072 -0.753099 2.31815e-7 -0.6579074 -0.7530989 0 -0.6579073 -0.7530989 0 -0.6579074 -0.7530989 0 -0.657907 -0.7530992 -2.91559e-7 -0.6579083 -0.7530981 7.12064e-7 -0.6579073 -0.753099 0 -0.6579073 -0.7530989 0 -0.6579074 -0.7530989 -8.73992e-7 -0.6579077 -0.7530986 -7.23875e-7 -0.6579069 -0.7530992 1.15597e-6 -0.6579074 -0.7530989 -1.40255e-7 -0.6579074 -0.7530989 0 -0.6579072 -0.753099 -3.62817e-7 -0.6579077 -0.7530986 5.05305e-7 -0.6579073 -0.7530989 -8.53899e-7 -0.6579075 -0.7530988 3.67266e-7 -0.6579074 -0.7530989 -2.90875e-7 -0.6579072 -0.753099 2.33726e-7 -0.6579072 -0.753099 1.84343e-7 -0.6579074 -0.7530989 -1.67822e-7 -0.6579074 -0.7530989 0 -0.6579077 -0.7530987 0 -0.6579073 -0.753099 1.79544e-6 -0.6579074 -0.7530989 0 -0.6579073 -0.7530989 0 -0.6579074 -0.7530989 0 -0.6579077 -0.7530986 -5.05305e-7 -0.6579072 -0.753099 3.62817e-7 -0.6579074 -0.7530989 0 -0.6579071 -0.7530992 -1.95445e-6 -0.6579083 -0.753098 3.39662e-6 -0.6579073 -0.7530989 0 -0.6579073 -0.7530989 0 -0.6579082 -0.753098 -3.39662e-6 -0.6579075 -0.7530988 0 -0.657907 -0.7530992 1.90592e-6 -0.6579077 -0.7530986 -1.27925e-6 -0.6579074 -0.7530988 -3.91502e-7 -0.6579071 -0.7530991 7.32696e-7 + + + + + + + + + + + + + + + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +

216 356 147 356 217 356 217 357 147 357 148 357 217 358 148 358 218 358 218 359 148 359 149 359 218 360 149 360 219 360 219 361 149 361 150 361 219 362 150 362 220 362 220 363 150 363 151 363 220 364 151 364 221 364 221 365 151 365 152 365 221 366 152 366 222 366 222 367 152 367 153 367 222 368 153 368 223 368 223 369 153 369 154 369 223 370 154 370 224 370 224 371 154 371 155 371 224 372 155 372 225 372 225 373 155 373 156 373 225 374 156 374 226 374 226 375 156 375 157 375 226 376 157 376 227 376 227 377 157 377 158 377 227 378 158 378 228 378 228 379 158 379 159 379 228 380 159 380 229 380 229 381 159 381 160 381 229 382 160 382 230 382 230 383 160 383 161 383 230 384 161 384 231 384 231 385 161 385 162 385 231 386 162 386 232 386 232 387 162 387 163 387 232 388 163 388 233 388 233 389 163 389 164 389 233 390 164 390 234 390 234 391 164 391 165 391 234 392 165 392 235 392 235 393 165 393 166 393 235 394 166 394 236 394 236 395 166 395 167 395 236 396 167 396 237 396 237 397 167 397 168 397 237 398 168 398 238 398 238 399 168 399 169 399 238 400 169 400 239 400 239 401 169 401 170 401 239 402 170 402 240 402 240 403 170 403 171 403 240 404 171 404 241 404 241 405 171 405 172 405 241 406 172 406 242 406 242 407 172 407 173 407 242 408 173 408 243 408 243 409 173 409 174 409 243 410 174 410 244 410 244 411 174 411 175 411 244 412 175 412 245 412 245 413 175 413 176 413 245 414 176 414 246 414 246 415 176 415 177 415 246 416 177 416 247 416 247 417 177 417 178 417 247 418 178 418 248 418 248 419 178 419 179 419 248 420 179 420 249 420 249 421 179 421 144 421 249 422 144 422 250 422 250 423 144 423 145 423 250 424 145 424 251 424 251 425 145 425 146 425 251 426 146 426 216 426 216 427 146 427 147 427 203 428 252 428 202 428 202 429 252 429 253 429 202 430 253 430 201 430 201 431 253 431 254 431 201 432 254 432 200 432 200 433 254 433 255 433 200 434 255 434 199 434 199 435 255 435 256 435 199 436 256 436 198 436 198 437 256 437 257 437 198 438 257 438 197 438 197 439 257 439 258 439 197 440 258 440 196 440 196 441 258 441 259 441 196 442 259 442 195 442 195 443 259 443 260 443 195 444 260 444 194 444 194 445 260 445 261 445 194 446 261 446 193 446 193 447 261 447 262 447 193 448 262 448 192 448 192 449 262 449 263 449 192 450 263 450 191 450 191 451 263 451 264 451 191 452 264 452 190 452 190 453 264 453 265 453 190 454 265 454 189 454 189 455 265 455 266 455 189 456 266 456 188 456 188 457 266 457 267 457 188 458 267 458 187 458 187 459 267 459 268 459 187 460 268 460 186 460 186 461 268 461 269 461 186 462 269 462 185 462 185 463 269 463 270 463 185 464 270 464 184 464 184 465 270 465 271 465 184 466 271 466 183 466 183 467 271 467 272 467 183 468 272 468 182 468 182 469 272 469 273 469 182 470 273 470 181 470 181 471 273 471 274 471 181 472 274 472 180 472 180 473 274 473 275 473 180 474 275 474 215 474 215 475 275 475 276 475 215 476 276 476 214 476 214 477 276 477 277 477 214 478 277 478 213 478 213 479 277 479 278 479 213 480 278 480 212 480 212 481 278 481 279 481 212 482 279 482 211 482 211 483 279 483 280 483 211 484 280 484 210 484 210 485 280 485 281 485 210 486 281 486 209 486 209 487 281 487 282 487 209 488 282 488 208 488 208 489 282 489 283 489 208 490 283 490 207 490 207 491 283 491 284 491 207 492 284 492 206 492 206 493 284 493 285 493 206 494 285 494 205 494 205 495 285 495 286 495 205 496 286 496 204 496 204 497 286 497 287 497 204 498 287 498 203 498 203 499 287 499 252 499 360 572 361 572 362 572 362 573 361 573 363 573 362 574 363 574 364 574 364 575 363 575 365 575 364 576 365 576 366 576 366 577 365 577 367 577 366 578 367 578 368 578 368 579 367 579 369 579 368 580 369 580 370 580 370 581 369 581 371 581 370 582 371 582 372 582 372 583 371 583 373 583 372 584 373 584 374 584 374 585 373 585 375 585 374 586 375 586 376 586 376 587 375 587 377 587 376 588 377 588 378 588 378 589 377 589 379 589 378 590 379 590 380 590 380 591 379 591 381 591 380 592 381 592 382 592 382 593 381 593 383 593 382 594 383 594 384 594 384 595 383 595 385 595 384 596 385 596 386 596 386 597 385 597 387 597 386 598 387 598 388 598 388 599 387 599 389 599 388 600 389 600 390 600 390 601 389 601 391 601 390 602 391 602 392 602 392 603 391 603 393 603 392 604 393 604 394 604 394 605 393 605 395 605 394 606 395 606 396 606 396 607 395 607 397 607 396 608 397 608 398 608 398 609 397 609 399 609 398 610 399 610 400 610 400 611 399 611 401 611 400 612 401 612 402 612 402 613 401 613 403 613 402 614 403 614 404 614 404 615 403 615 405 615 404 616 405 616 406 616 406 617 405 617 407 617 406 618 407 618 408 618 408 619 407 619 409 619 408 620 409 620 410 620 410 621 409 621 411 621 410 622 411 622 412 622 412 623 411 623 413 623 412 624 413 624 414 624 414 625 413 625 415 625 414 626 415 626 416 626 416 627 415 627 417 627 416 628 417 628 418 628 418 629 417 629 419 629 418 630 419 630 420 630 420 631 419 631 421 631 420 632 421 632 422 632 422 633 421 633 423 633 422 634 423 634 424 634 424 635 423 635 425 635 424 636 425 636 426 636 426 637 425 637 427 637 426 638 427 638 428 638 428 639 427 639 429 639 428 640 429 640 430 640 430 641 429 641 431 641 430 642 431 642 360 642 360 643 431 643 361 643 432 644 433 644 434 644 434 645 433 645 435 645 434 646 435 646 436 646 436 647 435 647 437 647 437 648 435 648 438 648 438 649 435 649 439 649 438 650 439 650 440 650 440 651 439 651 441 651 440 652 441 652 442 652 442 653 441 653 443 653 443 654 441 654 444 654 443 655 444 655 445 655 446 656 447 656 448 656 448 657 447 657 449 657 448 658 449 658 444 658 444 659 449 659 450 659 444 660 450 660 445 660 446 661 448 661 451 661 451 662 448 662 452 662 451 663 452 663 453 663 453 664 452 664 454 664 454 665 452 665 455 665 454 666 455 666 456 666 456 667 455 667 457 667 457 668 455 668 458 668 457 669 458 669 459 669 459 670 458 670 460 670 460 671 458 671 461 671 460 672 461 672 462 672 462 673 461 673 463 673 463 674 461 674 464 674 463 675 464 675 465 675 466 676 467 676 468 676 468 677 467 677 469 677 468 678 469 678 464 678 464 679 469 679 470 679 464 680 470 680 465 680 471 681 472 681 473 681 473 682 472 682 474 682 473 683 474 683 475 683 475 684 474 684 476 684 475 685 476 685 468 685 468 686 476 686 477 686 468 687 477 687 466 687 478 688 479 688 480 688 480 689 479 689 481 689 480 690 481 690 482 690 482 691 481 691 483 691 482 692 483 692 473 692 473 693 483 693 484 693 473 694 484 694 471 694 478 695 480 695 485 695 485 696 480 696 486 696 485 697 486 697 487 697 488 698 489 698 490 698 490 699 489 699 491 699 491 700 492 700 490 700 490 701 492 701 493 701 490 702 493 702 486 702 486 703 493 703 494 703 486 704 494 704 487 704 432 705 495 705 433 705 433 706 495 706 496 706 433 707 496 707 497 707 497 708 496 708 498 708 497 709 498 709 499 709 499 710 498 710 500 710 499 711 500 711 501 711 501 712 500 712 502 712 501 713 502 713 503 713 503 714 502 714 504 714 503 715 504 715 505 715 505 716 504 716 506 716 505 717 506 717 507 717 507 718 506 718 508 718 507 719 508 719 509 719 509 720 508 720 510 720 509 721 510 721 511 721 511 722 510 722 512 722 511 723 512 723 513 723 513 724 512 724 514 724 513 725 514 725 515 725 515 726 514 726 516 726 515 727 516 727 517 727 517 728 516 728 518 728 517 729 518 729 519 729 519 730 518 730 520 730 519 731 520 731 521 731 521 732 520 732 522 732 521 733 522 733 523 733 523 734 522 734 524 734 523 735 524 735 525 735 525 736 524 736 526 736 525 737 526 737 527 737 527 738 526 738 528 738 527 739 528 739 529 739 529 740 528 740 530 740 529 741 530 741 488 741 488 742 530 742 531 742 488 743 531 743 489 743 532 744 533 744 534 744 534 745 533 745 535 745 534 746 535 746 536 746 536 747 535 747 537 747 537 748 535 748 538 748 538 749 535 749 539 749 538 750 539 750 540 750 540 751 539 751 541 751 540 752 541 752 542 752 542 753 541 753 543 753 543 754 541 754 544 754 543 755 544 755 545 755 546 756 547 756 548 756 548 757 547 757 549 757 548 758 549 758 544 758 544 759 549 759 550 759 544 760 550 760 545 760 546 761 548 761 551 761 551 762 548 762 552 762 551 763 552 763 553 763 553 764 552 764 554 764 554 765 552 765 555 765 554 766 555 766 556 766 556 767 555 767 557 767 557 768 555 768 558 768 557 769 558 769 559 769 559 770 558 770 560 770 560 771 558 771 561 771 560 772 561 772 562 772 562 773 561 773 563 773 563 774 561 774 564 774 563 775 564 775 565 775 566 776 567 776 568 776 568 777 567 777 569 777 568 778 569 778 564 778 564 779 569 779 570 779 564 780 570 780 565 780 571 781 572 781 573 781 573 782 572 782 574 782 573 783 574 783 575 783 575 784 574 784 576 784 575 785 576 785 568 785 568 786 576 786 577 786 568 787 577 787 566 787 578 788 579 788 580 788 580 789 579 789 581 789 580 790 581 790 582 790 582 791 581 791 583 791 582 792 583 792 573 792 573 793 583 793 584 793 573 794 584 794 571 794 578 795 580 795 585 795 585 796 580 796 586 796 585 797 586 797 587 797 588 798 589 798 590 798 590 799 589 799 591 799 591 800 592 800 590 800 590 801 592 801 593 801 590 802 593 802 586 802 586 803 593 803 594 803 586 804 594 804 587 804 532 805 595 805 533 805 533 806 595 806 596 806 533 807 596 807 597 807 597 808 596 808 598 808 597 809 598 809 599 809 599 810 598 810 600 810 599 811 600 811 601 811 601 812 600 812 602 812 601 813 602 813 603 813 603 814 602 814 604 814 603 815 604 815 605 815 605 816 604 816 606 816 605 817 606 817 607 817 607 818 606 818 608 818 607 819 608 819 609 819 609 820 608 820 610 820 609 821 610 821 611 821 611 822 610 822 612 822 611 823 612 823 613 823 613 824 612 824 614 824 613 825 614 825 615 825 615 826 614 826 616 826 615 827 616 827 617 827 617 828 616 828 618 828 617 829 618 829 619 829 619 830 618 830 620 830 619 831 620 831 621 831 621 832 620 832 622 832 621 833 622 833 623 833 623 834 622 834 624 834 623 835 624 835 625 835 625 836 624 836 626 836 625 837 626 837 627 837 627 838 626 838 628 838 627 839 628 839 629 839 629 840 628 840 630 840 629 841 630 841 588 841 588 842 630 842 631 842 588 843 631 843 589 843 632 844 633 844 634 844 634 845 633 845 635 845 634 846 635 846 636 846 636 847 635 847 637 847 636 848 637 848 638 848 638 849 637 849 639 849 638 850 639 850 640 850 640 851 639 851 641 851 640 852 641 852 642 852 642 853 641 853 643 853 642 854 643 854 644 854 644 855 643 855 645 855 644 856 645 856 646 856 646 857 645 857 647 857 646 858 647 858 648 858 648 859 647 859 649 859 648 860 649 860 650 860 650 861 649 861 651 861 650 862 651 862 652 862 652 863 651 863 653 863 652 864 653 864 654 864 654 865 653 865 655 865 654 866 655 866 656 866 656 867 655 867 657 867 656 868 657 868 658 868 658 869 657 869 659 869 658 870 659 870 660 870 660 871 659 871 661 871 660 872 661 872 662 872 662 873 661 873 663 873 662 874 663 874 664 874 664 875 663 875 665 875 664 876 665 876 666 876 666 877 665 877 667 877 666 878 667 878 668 878 668 879 667 879 669 879 668 880 669 880 670 880 670 881 669 881 671 881 670 882 671 882 672 882 672 883 671 883 673 883 672 884 673 884 674 884 674 885 673 885 675 885 674 886 675 886 676 886 676 887 675 887 677 887 676 888 677 888 678 888 678 889 677 889 679 889 678 890 679 890 680 890 680 891 679 891 681 891 680 892 681 892 682 892 682 893 681 893 683 893 682 894 683 894 684 894 684 895 683 895 685 895 684 896 685 896 686 896 686 897 685 897 687 897 686 898 687 898 688 898 688 899 687 899 689 899 688 900 689 900 690 900 690 901 689 901 691 901 690 902 691 902 692 902 692 903 691 903 693 903 692 904 693 904 694 904 694 905 693 905 695 905 694 906 695 906 696 906 696 907 695 907 697 907 696 908 697 908 698 908 698 909 697 909 699 909 698 910 699 910 700 910 700 911 699 911 701 911 700 912 701 912 702 912 702 913 701 913 703 913 702 914 703 914 632 914 632 915 703 915 633 915 704 916 705 916 706 916 704 917 706 917 707 917 708 918 709 918 710 918 710 919 709 919 711 919 710 920 711 920 712 920 712 921 711 921 713 921 712 922 713 922 714 922 705 923 715 923 706 923 706 924 715 924 716 924 706 925 716 925 713 925 713 926 716 926 717 926 713 927 717 927 714 927 718 928 719 928 720 928 721 929 722 929 723 929 723 930 722 930 724 930 723 931 724 931 725 931 726 932 727 932 728 932 728 933 727 933 729 933 730 934 731 934 732 934 728 935 733 935 734 935 735 936 736 936 726 936 737 937 738 937 739 937 739 938 738 938 740 938 739 939 740 939 706 939 706 940 740 940 741 940 706 941 741 941 707 941 719 942 742 942 720 942 720 943 742 943 743 943 720 944 743 944 744 944 744 945 743 945 745 945 744 946 745 946 746 946 746 947 745 947 722 947 746 948 722 948 747 948 747 949 722 949 721 949 728 950 734 950 726 950 726 951 734 951 748 951 726 952 748 952 735 952 749 953 750 953 751 953 751 954 750 954 752 954 753 955 754 955 755 955 755 956 754 956 756 956 730 957 749 957 731 957 731 958 749 958 751 958 731 959 751 959 739 959 739 960 751 960 757 960 739 961 757 961 737 961 758 962 759 962 760 962 752 963 761 963 751 963 751 964 761 964 762 964 751 965 762 965 763 965 763 966 764 966 751 966 751 967 764 967 765 967 751 968 765 968 766 968 766 969 765 969 755 969 766 970 755 970 767 970 767 971 755 971 756 971 718 972 720 972 758 972 758 973 720 973 768 973 758 974 768 974 769 974 769 975 770 975 758 975 758 976 770 976 771 976 758 977 771 977 759 977 729 978 772 978 728 978 728 979 772 979 773 979 728 980 773 980 724 980 724 981 773 981 774 981 724 982 774 982 725 982 775 983 776 983 777 983 777 984 776 984 778 984 777 985 778 985 736 985 736 986 778 986 779 986 736 987 779 987 726 987 755 988 780 988 781 988 732 989 782 989 730 989 730 990 782 990 783 990 730 991 783 991 784 991 781 992 785 992 755 992 755 993 785 993 786 993 755 994 786 994 787 994 760 995 788 995 758 995 758 996 788 996 789 996 758 997 789 997 790 997 787 998 791 998 755 998 755 999 791 999 792 999 755 1000 792 1000 753 1000 790 1001 793 1001 758 1001 758 1002 793 1002 794 1002 758 1003 794 1003 795 1003 783 1004 796 1004 784 1004 784 1005 796 1005 797 1005 784 1006 797 1006 798 1006 797 1007 799 1007 798 1007 798 1008 799 1008 800 1008 798 1009 800 1009 801 1009 801 1010 800 1010 802 1010 801 1011 802 1011 728 1011 728 1012 802 1012 803 1012 728 1013 803 1013 733 1013 229 1014 230 1014 710 1014 221 1015 222 1015 804 1015 804 1016 222 1016 223 1016 804 1017 223 1017 224 1017 229 1018 710 1018 228 1018 224 1019 225 1019 804 1019 804 1020 225 1020 226 1020 804 1021 226 1021 710 1021 710 1022 226 1022 227 1022 710 1023 227 1023 228 1023 230 1024 231 1024 710 1024 710 1025 231 1025 232 1025 710 1026 232 1026 708 1026 708 1027 232 1027 233 1027 233 1028 234 1028 708 1028 708 1029 234 1029 235 1029 708 1030 235 1030 805 1030 805 1031 235 1031 236 1031 805 1032 236 1032 806 1032 806 1033 236 1033 237 1033 806 1034 237 1034 807 1034 807 1035 237 1035 238 1035 807 1036 238 1036 808 1036 808 1037 238 1037 239 1037 808 1038 239 1038 809 1038 809 1039 239 1039 240 1039 809 1040 240 1040 810 1040 810 1041 240 1041 241 1041 810 1042 241 1042 811 1042 811 1043 241 1043 242 1043 811 1044 242 1044 812 1044 812 1045 242 1045 243 1045 812 1046 243 1046 813 1046 813 1047 243 1047 244 1047 813 1048 244 1048 814 1048 814 1049 244 1049 245 1049 814 1050 245 1050 815 1050 815 1051 245 1051 246 1051 815 1052 246 1052 816 1052 816 1053 246 1053 247 1053 816 1054 247 1054 817 1054 817 1055 247 1055 248 1055 817 1056 248 1056 818 1056 818 1057 248 1057 249 1057 818 1058 249 1058 819 1058 819 1059 249 1059 250 1059 819 1060 250 1060 820 1060 820 1061 250 1061 251 1061 820 1062 251 1062 821 1062 821 1063 251 1063 216 1063 821 1064 216 1064 822 1064 822 1065 216 1065 217 1065 217 1066 218 1066 822 1066 822 1067 218 1067 219 1067 822 1068 219 1068 804 1068 804 1069 219 1069 220 1069 804 1070 220 1070 221 1070 709 1071 708 1071 805 1071 709 1072 805 1072 823 1072 823 1073 805 1073 806 1073 823 1074 806 1074 824 1074 824 1075 806 1075 807 1075 824 1076 807 1076 825 1076 825 1077 807 1077 808 1077 825 1078 808 1078 826 1078 826 1079 808 1079 809 1079 826 1080 809 1080 827 1080 827 1081 809 1081 810 1081 827 1082 810 1082 828 1082 828 1083 810 1083 811 1083 828 1084 811 1084 829 1084 829 1085 811 1085 812 1085 829 1086 812 1086 830 1086 830 1087 812 1087 813 1087 830 1088 813 1088 831 1088 831 1089 813 1089 814 1089 831 1090 814 1090 832 1090 832 1091 814 1091 815 1091 832 1092 815 1092 833 1092 833 1093 815 1093 816 1093 833 1094 816 1094 834 1094 834 1095 816 1095 817 1095 834 1096 817 1096 835 1096 835 1097 817 1097 818 1097 835 1098 818 1098 836 1098 836 1099 818 1099 819 1099 836 1100 819 1100 837 1100 837 1101 819 1101 820 1101 837 1102 820 1102 838 1102 838 1103 820 1103 821 1103 838 1104 821 1104 839 1104 839 1105 821 1105 822 1105 839 1106 822 1106 840 1106 317 1107 315 1107 711 1107 711 1108 315 1108 313 1108 711 1109 313 1109 311 1109 301 1110 299 1110 841 1110 325 1111 709 1111 327 1111 327 1112 709 1112 823 1112 327 1113 823 1113 329 1113 329 1114 823 1114 824 1114 329 1115 824 1115 331 1115 331 1116 824 1116 825 1116 331 1117 825 1117 333 1117 333 1118 825 1118 826 1118 333 1119 826 1119 335 1119 335 1120 826 1120 827 1120 335 1121 827 1121 337 1121 337 1122 827 1122 828 1122 337 1123 828 1123 339 1123 339 1124 828 1124 829 1124 339 1125 829 1125 341 1125 341 1126 829 1126 830 1126 341 1127 830 1127 343 1127 343 1128 830 1128 831 1128 343 1129 831 1129 832 1129 301 1130 841 1130 303 1130 325 1131 323 1131 709 1131 709 1132 323 1132 321 1132 709 1133 321 1133 711 1133 711 1134 321 1134 319 1134 711 1135 319 1135 317 1135 311 1136 309 1136 711 1136 711 1137 309 1137 307 1137 711 1138 307 1138 841 1138 841 1139 307 1139 305 1139 841 1140 305 1140 303 1140 293 1141 840 1141 295 1141 295 1142 840 1142 841 1142 295 1143 841 1143 297 1143 297 1144 841 1144 299 1144 293 1145 291 1145 840 1145 840 1146 291 1146 289 1146 840 1147 289 1147 839 1147 839 1148 289 1148 359 1148 839 1149 359 1149 838 1149 838 1150 359 1150 357 1150 838 1151 357 1151 837 1151 837 1152 357 1152 355 1152 837 1153 355 1153 836 1153 836 1154 355 1154 353 1154 836 1155 353 1155 835 1155 835 1156 353 1156 351 1156 835 1157 351 1157 834 1157 834 1158 351 1158 349 1158 834 1159 349 1159 833 1159 833 1160 349 1160 347 1160 833 1161 347 1161 832 1161 832 1162 347 1162 345 1162 832 1163 345 1163 343 1163 711 1164 841 1164 842 1164 711 1165 842 1165 713 1165 713 1166 842 1166 843 1166 713 1167 843 1167 706 1167 706 1168 843 1168 844 1168 706 1169 844 1169 739 1169 739 1170 844 1170 845 1170 739 1171 845 1171 731 1171 731 1172 845 1172 846 1172 731 1173 846 1173 732 1173 732 1174 846 1174 847 1174 732 1175 847 1175 782 1175 782 1176 847 1176 848 1176 782 1177 848 1177 783 1177 783 1178 848 1178 849 1178 783 1179 849 1179 796 1179 796 1180 849 1180 850 1180 796 1181 850 1181 797 1181 797 1182 850 1182 799 1182 799 1183 850 1183 851 1183 799 1184 851 1184 852 1184 799 1185 852 1185 800 1185 800 1186 852 1186 853 1186 800 1187 853 1187 802 1187 802 1188 853 1188 854 1188 802 1189 854 1189 803 1189 803 1190 854 1190 855 1190 803 1191 855 1191 733 1191 733 1192 855 1192 856 1192 733 1193 856 1193 734 1193 734 1194 856 1194 857 1194 734 1195 857 1195 748 1195 748 1196 857 1196 858 1196 748 1197 858 1197 735 1197 735 1198 858 1198 859 1198 735 1199 859 1199 736 1199 736 1200 859 1200 860 1200 736 1201 860 1201 777 1201 298 1202 300 1202 860 1202 860 1203 300 1203 302 1203 310 1204 312 1204 777 1204 777 1205 312 1205 314 1205 777 1206 314 1206 316 1206 302 1207 304 1207 860 1207 860 1208 304 1208 306 1208 860 1209 306 1209 777 1209 777 1210 306 1210 308 1210 777 1211 308 1211 310 1211 322 1212 775 1212 320 1212 320 1213 775 1213 777 1213 320 1214 777 1214 318 1214 318 1215 777 1215 316 1215 290 1216 861 1216 288 1216 288 1217 861 1217 862 1217 288 1218 862 1218 358 1218 358 1219 862 1219 863 1219 358 1220 863 1220 356 1220 356 1221 863 1221 864 1221 356 1222 864 1222 354 1222 354 1223 864 1223 865 1223 354 1224 865 1224 352 1224 352 1225 865 1225 866 1225 352 1226 866 1226 350 1226 350 1227 866 1227 867 1227 350 1228 867 1228 348 1228 348 1229 867 1229 868 1229 348 1230 868 1230 346 1230 346 1231 868 1231 869 1231 346 1232 869 1232 344 1232 344 1233 869 1233 870 1233 344 1234 870 1234 342 1234 342 1235 870 1235 871 1235 342 1236 871 1236 340 1236 340 1237 871 1237 872 1237 340 1238 872 1238 338 1238 338 1239 872 1239 873 1239 338 1240 873 1240 336 1240 336 1241 873 1241 874 1241 336 1242 874 1242 334 1242 334 1243 874 1243 875 1243 334 1244 875 1244 332 1244 332 1245 875 1245 876 1245 332 1246 876 1246 330 1246 330 1247 876 1247 877 1247 330 1248 877 1248 328 1248 328 1249 877 1249 878 1249 328 1250 878 1250 326 1250 326 1251 878 1251 775 1251 326 1252 775 1252 324 1252 324 1253 775 1253 322 1253 290 1254 292 1254 861 1254 861 1255 292 1255 294 1255 861 1256 294 1256 860 1256 860 1257 294 1257 296 1257 860 1258 296 1258 298 1258 776 1259 775 1259 878 1259 776 1260 878 1260 879 1260 879 1261 878 1261 877 1261 879 1262 877 1262 880 1262 880 1263 877 1263 876 1263 880 1264 876 1264 881 1264 881 1265 876 1265 875 1265 881 1266 875 1266 882 1266 882 1267 875 1267 874 1267 882 1268 874 1268 883 1268 883 1269 874 1269 873 1269 883 1270 873 1270 884 1270 884 1271 873 1271 872 1271 884 1272 872 1272 885 1272 885 1273 872 1273 871 1273 885 1274 871 1274 886 1274 886 1275 871 1275 870 1275 886 1276 870 1276 887 1276 887 1277 870 1277 869 1277 887 1278 869 1278 888 1278 888 1279 869 1279 868 1279 888 1280 868 1280 889 1280 889 1281 868 1281 867 1281 889 1282 867 1282 890 1282 890 1283 867 1283 866 1283 890 1284 866 1284 891 1284 891 1285 866 1285 865 1285 891 1286 865 1286 892 1286 892 1287 865 1287 864 1287 892 1288 864 1288 893 1288 893 1289 864 1289 863 1289 893 1290 863 1290 894 1290 894 1291 863 1291 862 1291 894 1292 862 1292 895 1292 895 1293 862 1293 861 1293 895 1294 861 1294 896 1294 260 1295 259 1295 897 1295 897 1296 259 1296 258 1296 897 1297 258 1297 257 1297 266 1298 265 1298 778 1298 778 1299 265 1299 264 1299 257 1300 256 1300 897 1300 897 1301 256 1301 255 1301 897 1302 255 1302 896 1302 896 1303 255 1303 254 1303 264 1304 263 1304 778 1304 778 1305 263 1305 262 1305 778 1306 262 1306 897 1306 897 1307 262 1307 261 1307 897 1308 261 1308 260 1308 270 1309 776 1309 271 1309 271 1310 776 1310 879 1310 271 1311 879 1311 272 1311 272 1312 879 1312 880 1312 272 1313 880 1313 273 1313 273 1314 880 1314 881 1314 273 1315 881 1315 274 1315 274 1316 881 1316 882 1316 274 1317 882 1317 275 1317 275 1318 882 1318 883 1318 275 1319 883 1319 276 1319 276 1320 883 1320 884 1320 276 1321 884 1321 277 1321 277 1322 884 1322 885 1322 277 1323 885 1323 278 1323 278 1324 885 1324 886 1324 278 1325 886 1325 279 1325 279 1326 886 1326 887 1326 279 1327 887 1327 280 1327 280 1328 887 1328 888 1328 280 1329 888 1329 281 1329 281 1330 888 1330 889 1330 281 1331 889 1331 282 1331 282 1332 889 1332 890 1332 282 1333 890 1333 283 1333 283 1334 890 1334 891 1334 283 1335 891 1335 284 1335 284 1336 891 1336 892 1336 284 1337 892 1337 285 1337 285 1338 892 1338 893 1338 285 1339 893 1339 286 1339 286 1340 893 1340 894 1340 286 1341 894 1341 287 1341 287 1342 894 1342 895 1342 287 1343 895 1343 252 1343 252 1344 895 1344 896 1344 252 1345 896 1345 253 1345 253 1346 896 1346 254 1346 270 1347 269 1347 776 1347 776 1348 269 1348 268 1348 776 1349 268 1349 778 1349 778 1350 268 1350 267 1350 778 1351 267 1351 266 1351 778 1352 897 1352 898 1352 778 1353 898 1353 779 1353 779 1354 898 1354 899 1354 779 1355 899 1355 726 1355 726 1356 899 1356 900 1356 726 1357 900 1357 727 1357 727 1358 900 1358 901 1358 727 1359 901 1359 729 1359 729 1360 901 1360 902 1360 729 1361 902 1361 772 1361 772 1362 902 1362 903 1362 772 1363 903 1363 773 1363 773 1364 903 1364 904 1364 773 1365 904 1365 774 1365 774 1366 904 1366 905 1366 774 1367 905 1367 725 1367 725 1368 905 1368 906 1368 725 1369 906 1369 723 1369 723 1370 906 1370 907 1370 723 1371 907 1371 721 1371 721 1372 907 1372 908 1372 721 1373 908 1373 747 1373 747 1374 908 1374 909 1374 747 1375 909 1375 746 1375 746 1376 909 1376 910 1376 746 1377 910 1377 744 1377 744 1378 910 1378 911 1378 744 1379 911 1379 720 1379 511 1380 364 1380 509 1380 509 1381 364 1381 366 1381 509 1382 366 1382 368 1382 368 1383 370 1383 509 1383 509 1384 370 1384 372 1384 509 1385 372 1385 374 1385 380 1386 433 1386 497 1386 497 1387 499 1387 380 1387 380 1388 499 1388 501 1388 380 1389 501 1389 503 1389 374 1390 376 1390 509 1390 509 1391 376 1391 378 1391 509 1392 378 1392 507 1392 507 1393 378 1393 380 1393 507 1394 380 1394 505 1394 505 1395 380 1395 503 1395 418 1396 912 1396 416 1396 416 1397 912 1397 768 1397 482 1398 473 1398 911 1398 404 1399 406 1399 768 1399 768 1400 406 1400 408 1400 768 1401 408 1401 410 1401 410 1402 412 1402 768 1402 768 1403 412 1403 414 1403 768 1404 414 1404 416 1404 473 1405 475 1405 911 1405 911 1406 475 1406 468 1406 911 1407 468 1407 720 1407 720 1408 468 1408 464 1408 720 1409 464 1409 461 1409 418 1410 420 1410 912 1410 912 1411 420 1411 422 1411 912 1412 422 1412 424 1412 388 1413 390 1413 720 1413 519 1414 521 1414 912 1414 912 1415 521 1415 523 1415 461 1416 458 1416 720 1416 720 1417 458 1417 455 1417 720 1418 455 1418 452 1418 424 1419 426 1419 912 1419 912 1420 426 1420 428 1420 912 1421 428 1421 430 1421 488 1422 490 1422 911 1422 523 1423 525 1423 912 1423 912 1424 525 1424 527 1424 912 1425 527 1425 911 1425 911 1426 527 1426 529 1426 911 1427 529 1427 488 1427 490 1428 486 1428 911 1428 911 1429 486 1429 480 1429 911 1430 480 1430 482 1430 452 1431 448 1431 720 1431 720 1432 448 1432 444 1432 720 1433 444 1433 441 1433 398 1434 400 1434 768 1434 768 1435 400 1435 402 1435 768 1436 402 1436 404 1436 430 1437 360 1437 912 1437 912 1438 360 1438 362 1438 912 1439 362 1439 364 1439 441 1440 439 1440 720 1440 720 1441 439 1441 435 1441 720 1442 435 1442 433 1442 511 1443 513 1443 364 1443 364 1444 513 1444 515 1444 364 1445 515 1445 912 1445 912 1446 515 1446 517 1446 912 1447 517 1447 519 1447 380 1448 382 1448 433 1448 433 1449 382 1449 384 1449 433 1450 384 1450 720 1450 720 1451 384 1451 386 1451 720 1452 386 1452 388 1452 390 1453 392 1453 720 1453 720 1454 392 1454 394 1454 720 1455 394 1455 768 1455 768 1456 394 1456 396 1456 768 1457 396 1457 398 1457 768 1458 912 1458 913 1458 768 1459 913 1459 769 1459 769 1460 913 1460 914 1460 769 1461 914 1461 770 1461 770 1462 914 1462 915 1462 770 1463 915 1463 771 1463 771 1464 915 1464 916 1464 771 1465 916 1465 759 1465 759 1466 916 1466 917 1466 759 1467 917 1467 760 1467 760 1468 917 1468 918 1468 760 1469 918 1469 788 1469 788 1470 918 1470 919 1470 788 1471 919 1471 789 1471 789 1472 919 1472 920 1472 789 1473 920 1473 790 1473 790 1474 920 1474 921 1474 790 1475 921 1475 793 1475 793 1476 921 1476 922 1476 793 1477 922 1477 794 1477 794 1478 922 1478 795 1478 795 1479 922 1479 923 1479 795 1480 923 1480 924 1480 924 1481 923 1481 925 1481 925 1482 923 1482 926 1482 925 1483 926 1483 927 1483 927 1484 928 1484 925 1484 925 1485 928 1485 929 1485 925 1486 929 1486 930 1486 930 1487 931 1487 925 1487 925 1488 931 1488 932 1488 925 1489 932 1489 933 1489 925 1490 934 1490 935 1490 933 1491 936 1491 925 1491 925 1492 936 1492 937 1492 925 1493 937 1493 934 1493 935 1494 938 1494 925 1494 925 1495 938 1495 939 1495 925 1496 939 1496 940 1496 923 1497 941 1497 942 1497 923 1498 942 1498 926 1498 926 1499 942 1499 943 1499 926 1500 943 1500 927 1500 927 1501 943 1501 944 1501 927 1502 944 1502 928 1502 928 1503 944 1503 945 1503 928 1504 945 1504 929 1504 929 1505 945 1505 946 1505 929 1506 946 1506 930 1506 930 1507 946 1507 947 1507 930 1508 947 1508 931 1508 931 1509 947 1509 948 1509 931 1510 948 1510 932 1510 932 1511 948 1511 949 1511 932 1512 949 1512 933 1512 933 1513 949 1513 950 1513 933 1514 950 1514 936 1514 936 1515 950 1515 951 1515 936 1516 951 1516 937 1516 937 1517 951 1517 952 1517 937 1518 952 1518 934 1518 934 1519 952 1519 953 1519 934 1520 953 1520 935 1520 935 1521 953 1521 954 1521 935 1522 954 1522 938 1522 938 1523 954 1523 955 1523 938 1524 955 1524 939 1524 939 1525 955 1525 956 1525 939 1526 956 1526 940 1526 940 1527 956 1527 957 1527 940 1528 957 1528 925 1528 925 1529 957 1529 958 1529 925 1530 958 1530 924 1530 924 1531 958 1531 758 1531 924 1532 758 1532 795 1532 518 1533 516 1533 941 1533 506 1534 504 1534 758 1534 512 1535 944 1535 943 1535 957 1536 956 1536 508 1536 959 1537 528 1537 526 1537 952 1538 415 1538 953 1538 953 1539 415 1539 413 1539 953 1540 413 1540 954 1540 952 1541 951 1541 415 1541 415 1542 951 1542 950 1542 415 1543 950 1543 949 1543 526 1544 524 1544 959 1544 959 1545 524 1545 522 1545 959 1546 522 1546 941 1546 941 1547 522 1547 520 1547 941 1548 520 1548 518 1548 943 1549 942 1549 512 1549 512 1550 942 1550 941 1550 512 1551 941 1551 514 1551 514 1552 941 1552 516 1552 506 1553 758 1553 508 1553 508 1554 758 1554 958 1554 508 1555 958 1555 957 1555 432 1556 718 1556 495 1556 495 1557 718 1557 496 1557 949 1558 948 1558 415 1558 415 1559 948 1559 947 1559 415 1560 947 1560 417 1560 504 1561 502 1561 758 1561 758 1562 502 1562 500 1562 758 1563 500 1563 718 1563 718 1564 500 1564 498 1564 718 1565 498 1565 496 1565 411 1566 409 1566 956 1566 956 1567 409 1567 407 1567 956 1568 407 1568 405 1568 375 1569 373 1569 512 1569 391 1570 389 1570 508 1570 508 1571 389 1571 387 1571 508 1572 387 1572 385 1572 385 1573 383 1573 508 1573 508 1574 383 1574 381 1574 508 1575 381 1575 510 1575 510 1576 381 1576 379 1576 510 1577 379 1577 512 1577 512 1578 379 1578 377 1578 512 1579 377 1579 375 1579 411 1580 956 1580 413 1580 413 1581 956 1581 955 1581 413 1582 955 1582 954 1582 431 1583 429 1583 944 1583 405 1584 403 1584 956 1584 956 1585 403 1585 401 1585 956 1586 401 1586 399 1586 373 1587 371 1587 512 1587 512 1588 371 1588 369 1588 512 1589 369 1589 367 1589 429 1590 427 1590 944 1590 944 1591 427 1591 425 1591 944 1592 425 1592 423 1592 423 1593 421 1593 944 1593 944 1594 421 1594 419 1594 944 1595 419 1595 945 1595 945 1596 419 1596 417 1596 945 1597 417 1597 946 1597 946 1598 417 1598 947 1598 399 1599 397 1599 956 1599 956 1600 397 1600 395 1600 956 1601 395 1601 508 1601 508 1602 395 1602 393 1602 508 1603 393 1603 391 1603 367 1604 365 1604 512 1604 512 1605 365 1605 363 1605 512 1606 363 1606 944 1606 944 1607 363 1607 361 1607 944 1608 361 1608 431 1608 487 1609 494 1609 960 1609 494 1610 493 1610 960 1610 960 1611 493 1611 492 1611 960 1612 492 1612 491 1612 491 1613 489 1613 960 1613 960 1614 489 1614 531 1614 960 1615 531 1615 959 1615 959 1616 531 1616 530 1616 959 1617 530 1617 528 1617 446 1618 451 1618 742 1618 451 1619 453 1619 742 1619 742 1620 453 1620 454 1620 742 1621 454 1621 456 1621 456 1622 457 1622 742 1622 742 1623 457 1623 459 1623 742 1624 459 1624 460 1624 460 1625 462 1625 742 1625 742 1626 462 1626 463 1626 742 1627 463 1627 465 1627 465 1628 470 1628 961 1628 961 1629 470 1629 469 1629 961 1630 469 1630 467 1630 467 1631 466 1631 961 1631 961 1632 466 1632 477 1632 961 1633 477 1633 476 1633 476 1634 474 1634 961 1634 961 1635 474 1635 472 1635 961 1636 472 1636 471 1636 471 1637 484 1637 961 1637 961 1638 484 1638 483 1638 961 1639 483 1639 481 1639 481 1640 479 1640 961 1640 961 1641 479 1641 478 1641 961 1642 478 1642 960 1642 960 1643 478 1643 485 1643 960 1644 485 1644 487 1644 436 1645 719 1645 434 1645 434 1646 719 1646 718 1646 434 1647 718 1647 432 1647 436 1648 437 1648 719 1648 719 1649 437 1649 438 1649 719 1650 438 1650 440 1650 440 1651 442 1651 719 1651 719 1652 442 1652 443 1652 719 1653 443 1653 445 1653 445 1654 450 1654 719 1654 719 1655 450 1655 449 1655 719 1656 449 1656 742 1656 742 1657 449 1657 447 1657 742 1658 447 1658 446 1658 465 1659 961 1659 742 1659 742 1660 961 1660 962 1660 742 1661 962 1661 743 1661 743 1662 962 1662 963 1662 743 1663 963 1663 745 1663 745 1664 963 1664 964 1664 745 1665 964 1665 722 1665 722 1666 964 1666 965 1666 722 1667 965 1667 724 1667 724 1668 965 1668 966 1668 724 1669 966 1669 728 1669 728 1670 966 1670 967 1670 728 1671 967 1671 801 1671 801 1672 967 1672 968 1672 801 1673 968 1673 798 1673 969 1674 784 1674 968 1674 968 1675 784 1675 798 1675 587 1676 594 1676 764 1676 594 1677 593 1677 764 1677 764 1678 593 1678 592 1678 764 1679 592 1679 591 1679 591 1680 589 1680 764 1680 764 1681 589 1681 631 1681 764 1682 631 1682 765 1682 765 1683 631 1683 630 1683 765 1684 630 1684 628 1684 546 1685 551 1685 970 1685 551 1686 553 1686 970 1686 970 1687 553 1687 554 1687 970 1688 554 1688 556 1688 556 1689 557 1689 970 1689 970 1690 557 1690 559 1690 970 1691 559 1691 560 1691 560 1692 562 1692 970 1692 970 1693 562 1693 563 1693 970 1694 563 1694 565 1694 570 1695 569 1695 763 1695 763 1696 569 1696 567 1696 567 1697 566 1697 763 1697 763 1698 566 1698 577 1698 763 1699 577 1699 576 1699 576 1700 574 1700 763 1700 763 1701 574 1701 572 1701 763 1702 572 1702 571 1702 571 1703 584 1703 763 1703 763 1704 584 1704 583 1704 763 1705 583 1705 581 1705 581 1706 579 1706 763 1706 763 1707 579 1707 578 1707 763 1708 578 1708 764 1708 764 1709 578 1709 585 1709 764 1710 585 1710 587 1710 536 1711 971 1711 534 1711 534 1712 971 1712 972 1712 534 1713 972 1713 532 1713 536 1714 537 1714 971 1714 971 1715 537 1715 538 1715 971 1716 538 1716 540 1716 540 1717 542 1717 971 1717 971 1718 542 1718 543 1718 971 1719 543 1719 545 1719 545 1720 550 1720 971 1720 971 1721 550 1721 549 1721 971 1722 549 1722 970 1722 970 1723 549 1723 547 1723 970 1724 547 1724 546 1724 784 1725 969 1725 973 1725 784 1726 973 1726 730 1726 730 1727 973 1727 974 1727 730 1728 974 1728 749 1728 749 1729 974 1729 975 1729 749 1730 975 1730 750 1730 750 1731 975 1731 976 1731 750 1732 976 1732 752 1732 752 1733 976 1733 977 1733 752 1734 977 1734 761 1734 761 1735 977 1735 978 1735 761 1736 978 1736 762 1736 762 1737 978 1737 970 1737 762 1738 970 1738 763 1738 763 1739 970 1739 565 1739 763 1740 565 1740 570 1740 606 1741 604 1741 979 1741 618 1742 616 1742 755 1742 532 1743 972 1743 595 1743 595 1744 972 1744 596 1744 765 1745 628 1745 626 1745 604 1746 602 1746 979 1746 979 1747 602 1747 600 1747 979 1748 600 1748 972 1748 972 1749 600 1749 598 1749 972 1750 598 1750 596 1750 626 1751 624 1751 765 1751 765 1752 624 1752 622 1752 765 1753 622 1753 755 1753 755 1754 622 1754 620 1754 755 1755 620 1755 618 1755 612 1756 980 1756 981 1756 648 1757 650 1757 608 1757 982 1758 983 1758 608 1758 656 1759 658 1759 612 1759 984 1760 985 1760 688 1760 688 1761 985 1761 986 1761 688 1762 986 1762 987 1762 696 1763 698 1763 983 1763 981 1764 988 1764 612 1764 612 1765 988 1765 755 1765 612 1766 755 1766 614 1766 614 1767 755 1767 616 1767 608 1768 650 1768 610 1768 610 1769 650 1769 652 1769 610 1770 652 1770 612 1770 612 1771 652 1771 654 1771 612 1772 654 1772 656 1772 987 1773 989 1773 688 1773 688 1774 989 1774 990 1774 688 1775 990 1775 686 1775 606 1776 979 1776 608 1776 608 1777 979 1777 991 1777 608 1778 991 1778 982 1778 658 1779 660 1779 612 1779 612 1780 660 1780 662 1780 612 1781 662 1781 664 1781 672 1782 674 1782 980 1782 674 1783 676 1783 980 1783 980 1784 676 1784 678 1784 980 1785 678 1785 680 1785 690 1786 692 1786 983 1786 983 1787 692 1787 694 1787 983 1788 694 1788 696 1788 680 1789 682 1789 980 1789 980 1790 682 1790 684 1790 980 1791 684 1791 992 1791 992 1792 684 1792 686 1792 992 1793 686 1793 993 1793 993 1794 686 1794 990 1794 983 1795 994 1795 690 1795 690 1796 994 1796 995 1796 690 1797 995 1797 688 1797 688 1798 995 1798 996 1798 688 1799 996 1799 984 1799 640 1800 642 1800 608 1800 664 1801 666 1801 612 1801 612 1802 666 1802 668 1802 612 1803 668 1803 980 1803 980 1804 668 1804 670 1804 980 1805 670 1805 672 1805 698 1806 700 1806 983 1806 983 1807 700 1807 702 1807 983 1808 702 1808 632 1808 642 1809 644 1809 608 1809 608 1810 644 1810 646 1810 608 1811 646 1811 648 1811 632 1812 634 1812 983 1812 983 1813 634 1813 636 1813 983 1814 636 1814 608 1814 608 1815 636 1815 638 1815 608 1816 638 1816 640 1816 979 1817 997 1817 998 1817 979 1818 998 1818 991 1818 991 1819 998 1819 999 1819 991 1820 999 1820 982 1820 982 1821 999 1821 1000 1821 982 1822 1000 1822 983 1822 983 1823 1000 1823 1001 1823 983 1824 1001 1824 994 1824 994 1825 1001 1825 1002 1825 994 1826 1002 1826 995 1826 995 1827 1002 1827 1003 1827 995 1828 1003 1828 996 1828 996 1829 1003 1829 1004 1829 996 1830 1004 1830 984 1830 984 1831 1004 1831 1005 1831 984 1832 1005 1832 985 1832 985 1833 1005 1833 1006 1833 985 1834 1006 1834 986 1834 986 1835 1006 1835 1007 1835 986 1836 1007 1836 987 1836 987 1837 1007 1837 1008 1837 987 1838 1008 1838 989 1838 989 1839 1008 1839 1009 1839 989 1840 1009 1840 990 1840 990 1841 1009 1841 1010 1841 990 1842 1010 1842 993 1842 993 1843 1010 1843 1011 1843 993 1844 1011 1844 992 1844 992 1845 1011 1845 1012 1845 992 1846 1012 1846 980 1846 980 1847 1012 1847 1013 1847 980 1848 1013 1848 981 1848 981 1849 1013 1849 1014 1849 981 1850 1014 1850 988 1850 988 1851 1014 1851 780 1851 988 1852 780 1852 755 1852 999 1853 998 1853 997 1853 1015 1854 781 1854 997 1854 997 1855 781 1855 780 1855 997 1856 780 1856 1014 1856 1014 1857 1013 1857 997 1857 997 1858 1013 1858 1012 1858 997 1859 1012 1859 1011 1859 1011 1860 1010 1860 997 1860 997 1861 1010 1861 1009 1861 997 1862 1009 1862 1008 1862 1008 1863 1007 1863 997 1863 997 1864 1007 1864 1006 1864 997 1865 1006 1865 1005 1865 1005 1866 1004 1866 997 1866 997 1867 1004 1867 1003 1867 997 1868 1003 1868 1002 1868 1002 1869 1001 1869 997 1869 997 1870 1001 1870 1000 1870 997 1871 1000 1871 999 1871 781 1872 1015 1872 1016 1872 781 1873 1016 1873 785 1873 785 1874 1016 1874 1017 1874 785 1875 1017 1875 786 1875 786 1876 1017 1876 1018 1876 786 1877 1018 1877 787 1877 787 1878 1018 1878 1019 1878 787 1879 1019 1879 791 1879 791 1880 1019 1880 1020 1880 791 1881 1020 1881 792 1881 792 1882 1020 1882 1021 1882 792 1883 1021 1883 753 1883 753 1884 1021 1884 1022 1884 753 1885 1022 1885 754 1885 754 1886 1022 1886 1023 1886 754 1887 1023 1887 756 1887 756 1888 1023 1888 1024 1888 756 1889 1024 1889 767 1889 767 1890 1024 1890 1025 1890 767 1891 1025 1891 766 1891 667 1892 665 1892 611 1892 611 1893 665 1893 663 1893 611 1894 663 1894 661 1894 647 1895 645 1895 609 1895 661 1896 659 1896 611 1896 611 1897 659 1897 657 1897 611 1898 657 1898 655 1898 655 1899 653 1899 611 1899 611 1900 653 1900 651 1900 611 1901 651 1901 609 1901 609 1902 651 1902 649 1902 609 1903 649 1903 647 1903 645 1904 643 1904 609 1904 609 1905 643 1905 641 1905 609 1906 641 1906 639 1906 685 1907 683 1907 766 1907 766 1908 683 1908 681 1908 766 1909 681 1909 679 1909 561 1910 1026 1910 564 1910 564 1911 1026 1911 751 1911 564 1912 751 1912 568 1912 568 1913 751 1913 575 1913 619 1914 621 1914 766 1914 766 1915 621 1915 623 1915 561 1916 558 1916 1026 1916 1026 1917 558 1917 555 1917 1026 1918 555 1918 552 1918 679 1919 677 1919 766 1919 766 1920 677 1920 675 1920 766 1921 675 1921 673 1921 693 1922 1025 1922 695 1922 695 1923 1025 1923 697 1923 693 1924 691 1924 1025 1924 1025 1925 691 1925 689 1925 1025 1926 689 1926 766 1926 766 1927 689 1927 687 1927 766 1928 687 1928 685 1928 673 1929 671 1929 766 1929 766 1930 671 1930 669 1930 766 1931 669 1931 667 1931 588 1932 590 1932 751 1932 751 1933 590 1933 586 1933 751 1934 586 1934 580 1934 552 1935 548 1935 1026 1935 1026 1936 548 1936 544 1936 1026 1937 544 1937 541 1937 541 1938 539 1938 1026 1938 1026 1939 539 1939 535 1939 1026 1940 535 1940 1025 1940 1025 1941 535 1941 533 1941 1025 1942 533 1942 597 1942 703 1943 701 1943 1025 1943 1025 1944 701 1944 699 1944 1025 1945 699 1945 697 1945 611 1946 613 1946 667 1946 667 1947 613 1947 615 1947 667 1948 615 1948 766 1948 766 1949 615 1949 617 1949 766 1950 617 1950 619 1950 623 1951 625 1951 766 1951 766 1952 625 1952 627 1952 766 1953 627 1953 751 1953 751 1954 627 1954 629 1954 751 1955 629 1955 588 1955 580 1956 582 1956 751 1956 751 1957 582 1957 573 1957 751 1958 573 1958 575 1958 597 1959 599 1959 1025 1959 1025 1960 599 1960 601 1960 1025 1961 601 1961 603 1961 603 1962 605 1962 1025 1962 1025 1963 605 1963 607 1963 1025 1964 607 1964 609 1964 639 1965 637 1965 609 1965 609 1966 637 1966 635 1966 609 1967 635 1967 1025 1967 1025 1968 635 1968 633 1968 1025 1969 633 1969 703 1969 751 1970 1026 1970 1027 1970 751 1971 1027 1971 757 1971 757 1972 1027 1972 1028 1972 757 1973 1028 1973 737 1973 737 1974 1028 1974 1029 1974 737 1975 1029 1975 738 1975 738 1976 1029 1976 1030 1976 738 1977 1030 1977 740 1977 740 1978 1030 1978 1031 1978 740 1979 1031 1979 741 1979 741 1980 1031 1980 1032 1980 741 1981 1032 1981 707 1981 707 1982 1032 1982 1033 1982 707 1983 1033 1983 704 1983 704 1984 1033 1984 1034 1984 704 1985 1034 1985 705 1985 705 1986 1034 1986 1035 1986 705 1987 1035 1987 715 1987 715 1988 1035 1988 1036 1988 715 1989 1036 1989 716 1989 716 1990 1036 1990 1037 1990 716 1991 1037 1991 717 1991 717 1992 1037 1992 1038 1992 717 1993 1038 1993 714 1993 714 1994 1038 1994 1039 1994 714 1995 1039 1995 712 1995 712 1996 1039 1996 804 1996 712 1997 804 1997 710 1997 1038 1998 1037 1998 842 1998 972 1999 971 1999 1026 1999 1026 2000 845 2000 844 2000 979 2001 1024 2001 1023 2001 1035 2002 1034 2002 843 2002 843 2003 1034 2003 1033 2003 972 2004 1026 2004 979 2004 979 2005 1026 2005 1025 2005 979 2006 1025 2006 1024 2006 971 2007 970 2007 1026 2007 1026 2008 970 2008 978 2008 1026 2009 978 2009 977 2009 896 2010 861 2010 860 2010 911 2011 962 2011 961 2011 842 2012 1037 2012 843 2012 843 2013 1037 2013 1036 2013 843 2014 1036 2014 1035 2014 1033 2015 1032 2015 843 2015 843 2016 1032 2016 1031 2016 843 2017 1031 2017 844 2017 844 2018 1031 2018 1030 2018 844 2019 1030 2019 1029 2019 1023 2020 1022 2020 979 2020 979 2021 1022 2021 1021 2021 979 2022 1021 2022 1020 2022 967 2023 859 2023 858 2023 966 2024 899 2024 967 2024 967 2025 899 2025 898 2025 860 2026 859 2026 896 2026 896 2027 859 2027 967 2027 896 2028 967 2028 897 2028 897 2029 967 2029 898 2029 1029 2030 1028 2030 844 2030 844 2031 1028 2031 1027 2031 844 2032 1027 2032 1026 2032 840 2033 822 2033 841 2033 841 2034 822 2034 804 2034 841 2035 804 2035 842 2035 842 2036 804 2036 1039 2036 842 2037 1039 2037 1038 2037 858 2038 857 2038 967 2038 967 2039 857 2039 856 2039 967 2040 856 2040 855 2040 902 2041 901 2041 966 2041 966 2042 901 2042 900 2042 966 2043 900 2043 899 2043 908 2044 907 2044 964 2044 964 2045 907 2045 906 2045 964 2046 906 2046 965 2046 906 2047 905 2047 965 2047 965 2048 905 2048 904 2048 965 2049 904 2049 966 2049 966 2050 904 2050 903 2050 966 2051 903 2051 902 2051 962 2052 911 2052 963 2052 963 2053 911 2053 910 2053 963 2054 910 2054 964 2054 964 2055 910 2055 909 2055 964 2056 909 2056 908 2056 1017 2057 1016 2057 979 2057 979 2058 1016 2058 1015 2058 979 2059 1015 2059 997 2059 977 2060 976 2060 1026 2060 1026 2061 976 2061 975 2061 1026 2062 975 2062 845 2062 845 2063 975 2063 974 2063 845 2064 974 2064 846 2064 917 2065 916 2065 941 2065 941 2066 916 2066 915 2066 941 2067 915 2067 914 2067 1020 2068 1019 2068 979 2068 979 2069 1019 2069 1018 2069 979 2070 1018 2070 1017 2070 855 2071 854 2071 967 2071 967 2072 854 2072 853 2072 967 2073 853 2073 968 2073 961 2074 960 2074 911 2074 911 2075 960 2075 959 2075 911 2076 959 2076 912 2076 912 2077 959 2077 941 2077 912 2078 941 2078 913 2078 913 2079 941 2079 914 2079 923 2080 922 2080 941 2080 941 2081 922 2081 921 2081 941 2082 921 2082 920 2082 920 2083 919 2083 941 2083 941 2084 919 2084 918 2084 941 2085 918 2085 917 2085 853 2086 852 2086 968 2086 968 2087 852 2087 851 2087 968 2088 851 2088 969 2088 851 2089 850 2089 969 2089 969 2090 850 2090 849 2090 969 2091 849 2091 973 2091 973 2092 849 2092 848 2092 973 2093 848 2093 974 2093 974 2094 848 2094 847 2094 974 2095 847 2095 846 2095

+
+ + + + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +

0 0 1 0 2 0 2 1 1 1 3 1 2 2 3 2 4 2 2 3 5 3 0 3 0 4 5 4 6 4 0 5 6 5 7 5 7 6 6 6 8 6 9 7 10 7 11 7 6 8 12 8 8 8 8 9 12 9 10 9 8 10 10 10 13 10 13 11 10 11 9 11 4 12 3 12 14 12 14 13 3 13 15 13 14 14 15 14 16 14 16 15 17 15 14 15 14 16 17 16 18 16 14 17 18 17 19 17 20 18 21 18 19 18 19 19 21 19 22 19 19 20 22 20 14 20 23 21 24 21 25 21 26 22 27 22 28 22 19 23 29 23 20 23 20 24 29 24 23 24 20 25 23 25 30 25 30 26 23 26 25 26 31 27 32 27 26 27 26 28 32 28 33 28 26 29 33 29 27 29 11 30 34 30 9 30 9 31 34 31 26 31 9 32 26 32 35 32 35 33 26 33 28 33 36 34 37 34 38 34 38 35 37 35 39 35 38 36 39 36 40 36 40 37 39 37 41 37 42 38 43 38 44 38 39 39 45 39 41 39 41 40 45 40 46 40 41 41 46 41 47 41 47 42 46 42 48 42 38 43 49 43 36 43 36 44 49 44 44 44 36 45 44 45 50 45 50 46 44 46 43 46 46 47 51 47 48 47 48 48 51 48 52 48 48 49 52 49 53 49 53 50 52 50 54 50 55 51 56 51 57 51 57 52 56 52 58 52 58 53 56 53 44 53 44 54 56 54 59 54 44 55 59 55 42 55 60 56 61 56 62 56 63 57 64 57 65 57 55 58 66 58 56 58 56 59 66 59 60 59 56 60 60 60 67 60 67 61 60 61 62 61 54 62 52 62 65 62 65 63 52 63 68 63 65 64 68 64 63 64 64 65 69 65 65 65 65 66 69 66 70 66 65 67 70 67 71 67 72 68 24 68 73 68 73 69 24 69 23 69 73 70 23 70 74 70 74 71 23 71 29 71 74 72 29 72 75 72 75 73 29 73 19 73 75 74 19 74 76 74 76 75 19 75 18 75 76 76 18 76 77 76 77 77 18 77 17 77 77 78 17 78 78 78 78 79 17 79 16 79 78 80 16 80 79 80 79 81 16 81 15 81 79 82 15 82 80 82 80 83 15 83 3 83 80 84 3 84 81 84 81 85 3 85 1 85 81 86 1 86 82 86 82 87 1 87 0 87 82 88 0 88 83 88 83 89 0 89 7 89 83 90 7 90 84 90 84 91 7 91 8 91 84 92 8 92 85 92 85 93 8 93 13 93 85 94 13 94 86 94 86 95 13 95 9 95 86 96 9 96 87 96 87 97 9 97 35 97 87 98 35 98 88 98 88 99 35 99 28 99 88 100 28 100 89 100 89 101 28 101 27 101 89 102 27 102 90 102 90 103 27 103 33 103 90 104 33 104 91 104 91 105 33 105 32 105 91 106 32 106 92 106 92 107 32 107 31 107 92 108 31 108 93 108 93 109 31 109 26 109 93 110 26 110 94 110 94 111 26 111 34 111 94 112 34 112 95 112 95 113 34 113 11 113 95 114 11 114 96 114 96 115 11 115 10 115 96 116 10 116 97 116 97 117 10 117 12 117 97 118 12 118 98 118 98 119 12 119 6 119 98 120 6 120 99 120 99 121 6 121 5 121 99 122 5 122 100 122 100 123 5 123 2 123 100 124 2 124 101 124 101 125 2 125 4 125 101 126 4 126 102 126 102 127 4 127 14 127 102 128 14 128 103 128 103 129 14 129 22 129 103 130 22 130 104 130 104 131 22 131 21 131 104 132 21 132 105 132 105 133 21 133 20 133 105 134 20 134 106 134 106 135 20 135 30 135 106 136 30 136 107 136 107 137 30 137 25 137 107 138 25 138 72 138 72 139 25 139 24 139 60 140 108 140 61 140 61 141 108 141 109 141 61 142 109 142 62 142 62 143 109 143 110 143 62 144 110 144 67 144 67 145 110 145 111 145 67 146 111 146 56 146 56 147 111 147 112 147 56 148 112 148 59 148 59 149 112 149 113 149 59 150 113 150 42 150 42 151 113 151 114 151 42 152 114 152 43 152 43 153 114 153 115 153 43 154 115 154 50 154 50 155 115 155 116 155 50 156 116 156 36 156 36 157 116 157 117 157 36 158 117 158 37 158 37 159 117 159 118 159 37 160 118 160 39 160 39 161 118 161 119 161 39 162 119 162 45 162 45 163 119 163 120 163 45 164 120 164 46 164 46 165 120 165 121 165 46 166 121 166 51 166 51 167 121 167 122 167 51 168 122 168 52 168 52 169 122 169 123 169 52 170 123 170 68 170 68 171 123 171 124 171 68 172 124 172 63 172 63 173 124 173 125 173 63 174 125 174 64 174 64 175 125 175 126 175 64 176 126 176 69 176 69 177 126 177 127 177 69 178 127 178 70 178 70 179 127 179 128 179 70 180 128 180 71 180 71 181 128 181 129 181 71 182 129 182 65 182 65 183 129 183 130 183 65 184 130 184 54 184 54 185 130 185 131 185 54 186 131 186 53 186 53 187 131 187 132 187 53 188 132 188 48 188 48 189 132 189 133 189 48 190 133 190 47 190 47 191 133 191 134 191 47 192 134 192 41 192 41 193 134 193 135 193 41 194 135 194 40 194 40 195 135 195 136 195 40 196 136 196 38 196 38 197 136 197 137 197 38 198 137 198 49 198 49 199 137 199 138 199 49 200 138 200 44 200 44 201 138 201 139 201 44 202 139 202 58 202 58 203 139 203 140 203 58 204 140 204 57 204 57 205 140 205 141 205 57 206 141 206 55 206 55 207 141 207 142 207 55 208 142 208 66 208 66 209 142 209 143 209 66 210 143 210 60 210 60 211 143 211 108 211 144 212 106 212 145 212 145 213 106 213 107 213 145 214 107 214 146 214 146 215 107 215 72 215 146 216 72 216 147 216 147 217 72 217 73 217 147 218 73 218 148 218 148 219 73 219 74 219 148 220 74 220 149 220 149 221 74 221 75 221 149 222 75 222 150 222 150 223 75 223 76 223 150 224 76 224 151 224 151 225 76 225 77 225 151 226 77 226 152 226 152 227 77 227 78 227 152 228 78 228 153 228 153 229 78 229 79 229 153 230 79 230 154 230 154 231 79 231 80 231 154 232 80 232 155 232 155 233 80 233 81 233 155 234 81 234 156 234 156 235 81 235 82 235 156 236 82 236 157 236 157 237 82 237 83 237 157 238 83 238 158 238 158 239 83 239 84 239 158 240 84 240 159 240 159 241 84 241 85 241 159 242 85 242 160 242 160 243 85 243 86 243 160 244 86 244 161 244 161 245 86 245 87 245 161 246 87 246 162 246 162 247 87 247 88 247 162 248 88 248 163 248 163 249 88 249 89 249 163 250 89 250 164 250 164 251 89 251 90 251 164 252 90 252 165 252 165 253 90 253 91 253 165 254 91 254 166 254 166 255 91 255 92 255 166 256 92 256 167 256 167 257 92 257 93 257 167 258 93 258 168 258 168 259 93 259 94 259 168 260 94 260 169 260 169 261 94 261 95 261 169 262 95 262 170 262 170 263 95 263 96 263 170 264 96 264 171 264 171 265 96 265 97 265 171 266 97 266 172 266 172 267 97 267 98 267 172 268 98 268 173 268 173 269 98 269 99 269 173 270 99 270 174 270 174 271 99 271 100 271 174 272 100 272 175 272 175 273 100 273 101 273 175 274 101 274 176 274 176 275 101 275 102 275 176 276 102 276 177 276 177 277 102 277 103 277 177 278 103 278 178 278 178 279 103 279 104 279 178 280 104 280 179 280 179 281 104 281 105 281 179 282 105 282 144 282 144 283 105 283 106 283 180 284 130 284 181 284 181 285 130 285 129 285 181 286 129 286 182 286 182 287 129 287 128 287 182 288 128 288 183 288 183 289 128 289 127 289 183 290 127 290 184 290 184 291 127 291 126 291 184 292 126 292 185 292 185 293 126 293 125 293 185 294 125 294 186 294 186 295 125 295 124 295 186 296 124 296 187 296 187 297 124 297 123 297 187 298 123 298 188 298 188 299 123 299 122 299 188 300 122 300 189 300 189 301 122 301 121 301 189 302 121 302 190 302 190 303 121 303 120 303 190 304 120 304 191 304 191 305 120 305 119 305 191 306 119 306 192 306 192 307 119 307 118 307 192 308 118 308 193 308 193 309 118 309 117 309 193 310 117 310 194 310 194 311 117 311 116 311 194 312 116 312 195 312 195 313 116 313 115 313 195 314 115 314 196 314 196 315 115 315 114 315 196 316 114 316 197 316 197 317 114 317 113 317 197 318 113 318 198 318 198 319 113 319 112 319 198 320 112 320 199 320 199 321 112 321 111 321 199 322 111 322 200 322 200 323 111 323 110 323 200 324 110 324 201 324 201 325 110 325 109 325 201 326 109 326 202 326 202 327 109 327 108 327 202 328 108 328 203 328 203 329 108 329 143 329 203 330 143 330 204 330 204 331 143 331 142 331 204 332 142 332 205 332 205 333 142 333 141 333 205 334 141 334 206 334 206 335 141 335 140 335 206 336 140 336 207 336 207 337 140 337 139 337 207 338 139 338 208 338 208 339 139 339 138 339 208 340 138 340 209 340 209 341 138 341 137 341 209 342 137 342 210 342 210 343 137 343 136 343 210 344 136 344 211 344 211 345 136 345 135 345 211 346 135 346 212 346 212 347 135 347 134 347 212 348 134 348 213 348 213 349 134 349 133 349 213 350 133 350 214 350 214 351 133 351 132 351 214 352 132 352 215 352 215 353 132 353 131 353 215 354 131 354 180 354 180 355 131 355 130 355 288 500 289 500 290 500 290 501 289 501 291 501 290 502 291 502 292 502 292 503 291 503 293 503 292 504 293 504 294 504 294 505 293 505 295 505 294 506 295 506 296 506 296 507 295 507 297 507 296 508 297 508 298 508 298 509 297 509 299 509 298 510 299 510 300 510 300 511 299 511 301 511 300 512 301 512 302 512 302 513 301 513 303 513 302 514 303 514 304 514 304 515 303 515 305 515 304 516 305 516 306 516 306 517 305 517 307 517 306 518 307 518 308 518 308 519 307 519 309 519 308 520 309 520 310 520 310 521 309 521 311 521 310 522 311 522 312 522 312 523 311 523 313 523 312 524 313 524 314 524 314 525 313 525 315 525 314 526 315 526 316 526 316 527 315 527 317 527 316 528 317 528 318 528 318 529 317 529 319 529 318 530 319 530 320 530 320 531 319 531 321 531 320 532 321 532 322 532 322 533 321 533 323 533 322 534 323 534 324 534 324 535 323 535 325 535 324 536 325 536 326 536 326 537 325 537 327 537 326 538 327 538 328 538 328 539 327 539 329 539 328 540 329 540 330 540 330 541 329 541 331 541 330 542 331 542 332 542 332 543 331 543 333 543 332 544 333 544 334 544 334 545 333 545 335 545 334 546 335 546 336 546 336 547 335 547 337 547 336 548 337 548 338 548 338 549 337 549 339 549 338 550 339 550 340 550 340 551 339 551 341 551 340 552 341 552 342 552 342 553 341 553 343 553 342 554 343 554 344 554 344 555 343 555 345 555 344 556 345 556 346 556 346 557 345 557 347 557 346 558 347 558 348 558 348 559 347 559 349 559 348 560 349 560 350 560 350 561 349 561 351 561 350 562 351 562 352 562 352 563 351 563 353 563 352 564 353 564 354 564 354 565 353 565 355 565 354 566 355 566 356 566 356 567 355 567 357 567 356 568 357 568 358 568 358 569 357 569 359 569 358 570 359 570 288 570 288 571 359 571 289 571

+
+
+
+
+ + + + + 0.6858805 -0.3173701 0.6548619 7.481132 0.7276338 0.3124686 -0.6106656 -6.50764 -0.01081678 0.8953432 0.4452454 5.343665 0 0 0 1 + + + + -0.2908646 -0.7711008 0.5663932 4.076245 0.9551712 -0.1998834 0.2183912 1.005454 -0.05518906 0.6045247 0.7946723 5.903862 0 0 0 1 + + + + 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/kortex_description/grippers/robotiq_2f_85/meshes/visual/robotiq_85_knuckle_link.dae b/kortex_description/grippers/robotiq_2f_85/meshes/visual/robotiq_85_knuckle_link.dae new file mode 100644 index 00000000..151cd474 --- /dev/null +++ b/kortex_description/grippers/robotiq_2f_85/meshes/visual/robotiq_85_knuckle_link.dae @@ -0,0 +1,241 @@ + + + + + Blender User + Blender 2.74.0 commit date:2015-03-31, commit time:13:39, hash:000dfc0 + + 2015-09-02T16:33:57 + 2015-09-02T16:33:57 + + Z_UP + + + + + + + 49.13434 + 1.777778 + 0.1 + 100 + + + + + + 0 + 0 + 0 + + + + + + + + + 1 1 1 + 1 + 0 + 0.00111109 + + + + + 0.000999987 + 1 + 0.1 + 0.1 + 1 + 1 + 1 + 2 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 2880 + 2 + 30.002 + 1.000799 + 0.04999995 + 29.99998 + 1 + 2 + 0 + 0 + 1 + 1 + 1 + 1 + 8192 + 1 + 1 + 0 + 1 + 1 + 1 + 3 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 3 + 0.15 + 75 + 1 + 1 + 0 + 1 + 1 + 0 + + + + + + + + + + + + 0 0 0 1 + + + 0 0 0 1 + + + 0.04 0.04 0.04 1 + + + 0.5 0.5 0.5 1 + + + 50 + + + 1 + + + + + + + + + + + 0 0 0 1 + + + 0 0 0 1 + + + 0.44 0.44 0.44 1 + + + 0.5 0.5 0.5 1 + + + 50 + + + 1 1 1 1 + + + 0.2 + + + 1 + + + + + + + + + + + + + + + + + + + 0.00660336 -0.02682268 -0.01199996 0.006513416 -0.02680891 -0.01199996 0.006860733 -0.0228393 -0.01199996 0.00617671 -0.02671867 -0.01199996 0.007544755 -0.02295994 -0.01199996 0.00786072 -0.02310723 -0.01199996 0.006860733 -0.02683931 -0.01199996 0.008146286 -0.0233072 -0.01199996 0.008830368 -0.02449202 -0.01199996 0.008860707 -0.02483928 -0.01199996 0.007544755 -0.02671867 -0.01199996 0.007208049 -0.0228697 -0.01199996 0.00839281 -0.02355372 -0.01199996 0.008592784 -0.02383929 -0.01199996 0.007208049 -0.02680891 -0.01199996 0.005860745 -0.02657133 -0.01199996 0.00557518 -0.02637141 -0.01199996 0.005328655 -0.02612489 -0.01199996 0.005128681 -0.02583932 -0.01199996 0.004981338 -0.02552336 -0.01199996 0.006513416 -0.0228697 -0.01199996 0.00617671 -0.02295994 -0.01199996 0.008740127 -0.02415525 -0.01199996 0.008830368 -0.02518659 -0.01199996 0.008740127 -0.02552336 -0.01199996 0.008592784 -0.02583932 -0.01199996 0.00839281 -0.02612489 -0.01199996 0.008146286 -0.02637141 -0.01199996 0.00786072 -0.02657133 -0.01199996 0.004891097 -0.02518659 -0.01199996 0.004860758 -0.02483928 -0.01199996 0.004891097 -0.02449202 -0.01199996 0.005128681 -0.02383929 -0.01199996 0.005328655 -0.02355372 -0.01199996 0.00557518 -0.0233072 -0.01199996 0.004981338 -0.02415525 -0.01199996 0.005860745 -0.02310723 -0.01199996 -0.00900954 -0.03061777 -0.004999995 -0.008783936 -0.02977591 -0.004999995 -0.002375364 -0.02678757 -0.004999995 -0.005795598 -0.03618448 -0.004999995 -0.006585478 -0.03581613 -0.004999995 -0.007299423 -0.03531622 -0.004999995 -0.001585483 -0.02715587 -0.004999995 -8.71587e-4 -0.02765578 -0.004999995 -2.55301e-4 -0.02827209 -0.004999995 -0.008415639 -0.02898603 -0.004999995 -0.007915735 -0.02827209 -0.004999995 -0.003217279 -0.02656197 -0.004999995 -0.004085481 -0.03648602 -0.004999995 6.12938e-4 -0.02977591 -0.004999995 -0.003217279 -0.03641003 -0.004999995 -0.002375364 -0.03618448 -0.004999995 2.44603e-4 -0.02898603 -0.004999995 -0.004953742 -0.03641003 -0.004999995 -0.007915735 -0.03469997 -0.004999995 -0.008415639 -0.03398603 -0.004999995 -0.008783936 -0.03319609 -0.004999995 -0.00900954 -0.03235423 -0.004999995 -0.009085476 -0.03148603 -0.004999995 8.38515e-4 -0.03061777 -0.004999995 9.14474e-4 -0.03148603 -0.004999995 8.38515e-4 -0.03235423 -0.004999995 -0.005795598 -0.02678757 -0.004999995 -0.006585478 -0.02715587 -0.004999995 -0.007299423 -0.02765578 -0.004999995 -0.004953742 -0.02656197 -0.004999995 -0.004085481 -0.02648603 -0.004999995 6.12938e-4 -0.03319609 -0.004999995 2.44603e-4 -0.03398603 -0.004999995 -0.001585483 -0.03581613 -0.004999995 -2.55301e-4 -0.03469997 -0.004999995 -8.71587e-4 -0.03531622 -0.004999995 0.005892753 -0.02673047 -0.01187551 0.005774259 -0.02671509 -0.01182669 0.005327343 -0.0266571 -0.01161515 0.005115866 -0.02662968 -0.0115 0.004945635 -0.02644628 -0.0115 0.006900548 -0.02686125 -0.01197767 0.00686109 -0.02685612 -0.01198059 0.007189154 -0.02689868 -0.01191455 0.007225334 -0.02690339 -0.01190221 0.007443904 -0.02693176 -0.01182776 0.007634639 -0.02695649 -0.01174128 0.007765531 -0.02697348 -0.01168191 0.008090913 -0.02701568 -0.0115 0.005534768 -0.02668404 -0.01172816 0.00651288 -0.02681094 -0.01199316 0.006305396 -0.026784 -0.01197755 0.006158471 -0.02676492 -0.01194489 0.00600326 -0.02674478 -0.01191043 0.004374444 -0.02468228 -0.0115 0.004398703 -0.02440518 -0.0115 0.004438042 -0.02425837 -0.0115 0.004511475 -0.02398425 -0.0115 0.004573345 -0.02385163 -0.0115 0.004695653 -0.02358931 -0.0115 0.004776418 -0.02347403 -0.0115 0.004945635 -0.02323234 -0.0115 0.005041182 -0.02313679 -0.0115 0.005253791 -0.02292418 -0.0115 0.005359828 -0.02284991 -0.0115 0.005610704 -0.02267426 -0.0115 0.005722999 -0.02262187 -0.0115 0.006005704 -0.02249008 -0.0115 0.006119906 -0.02245944 -0.0115 0.006426632 -0.02237731 -0.0115 0.006538808 -0.02236747 -0.0115 0.006860733 -0.02233928 -0.0115 0.006967306 -0.02234864 -0.0115 0.007294833 -0.02237731 -0.0115 0.007392764 -0.02240353 -0.0115 0.007715761 -0.02249008 -0.0115 0.007802546 -0.02253055 -0.0115 0.008110761 -0.02267426 -0.0115 0.008184552 -0.02272593 -0.0115 0.008467733 -0.02292418 -0.0115 0.008527457 -0.02298396 -0.0115 0.00877583 -0.02323234 -0.0115 0.008821129 -0.02329695 -0.0115 0.009025812 -0.02358931 -0.0115 0.009056746 -0.02365571 -0.0115 0.00920999 -0.02398425 -0.0115 0.009227454 -0.02404963 -0.0115 0.009322762 -0.02440518 -0.0115 0.009328186 -0.02446699 -0.0115 0.00936073 -0.02483928 -0.0115 0.009355843 -0.02489554 -0.0115 0.009322762 -0.02527344 -0.0115 0.009309589 -0.02532249 -0.0115 0.00920999 -0.02569437 -0.0115 0.009190857 -0.02573531 -0.0115 0.009025812 -0.02608931 -0.0115 0.009003102 -0.02612173 -0.0115 0.00877583 -0.02644628 -0.0115 0.008751809 -0.0264703 -0.0115 0.008467733 -0.02675443 -0.0115 0.008444488 -0.02677071 -0.0115 0.008110761 -0.02700436 -0.0115 0.00484234 -0.02629876 -0.0115 0.004695653 -0.02608931 -0.0115 0.004621922 -0.02593117 -0.0115 0.004511475 -0.02569437 -0.0115 0.004467785 -0.02553123 -0.0115 0.004398703 -0.02527344 -0.0115 0.004384458 -0.02511084 -0.0115 0.004360735 -0.02483928 -0.0115 -0.004085481 -0.03648602 -0.004499971 -0.004953742 -0.03641003 -0.004499971 -0.005795598 -0.03618448 -0.004499971 -0.006585478 -0.03581613 -0.004499971 -0.007299423 -0.03531622 -0.004499971 -0.007915735 -0.03469997 -0.004499971 -0.008415639 -0.03398603 -0.004499971 -0.008783936 -0.03319609 -0.004499971 -0.00900954 -0.03235423 -0.004499971 -0.009085476 -0.03148603 -0.004499971 -0.00900954 -0.03061777 -0.004499971 -0.008783936 -0.02977591 -0.004499971 -0.008415639 -0.02898603 -0.004499971 -0.007915735 -0.02827209 -0.004499971 -0.007299423 -0.02765578 -0.004499971 -0.006585478 -0.02715587 -0.004499971 -0.005795598 -0.02678757 -0.004499971 -0.004953742 -0.02656197 -0.004499971 -0.004085481 -0.02648603 -0.004499971 -0.003217279 -0.02656197 -0.004499971 -0.002375364 -0.02678757 -0.004499971 -0.001585483 -0.02715587 -0.004499971 -8.71587e-4 -0.02765578 -0.004499971 -2.55301e-4 -0.02827209 -0.004499971 2.44603e-4 -0.02898603 -0.004499971 6.12938e-4 -0.02977591 -0.004499971 8.38515e-4 -0.03061777 -0.004499971 9.14474e-4 -0.03148603 -0.004499971 8.38515e-4 -0.03235423 -0.004499971 6.12938e-4 -0.03319609 -0.004499971 2.44603e-4 -0.03398603 -0.004499971 -2.55301e-4 -0.03469997 -0.004499971 -8.71587e-4 -0.03531622 -0.004499971 -0.001585483 -0.03581613 -0.004499971 -0.002375364 -0.03618448 -0.004499971 -0.003217279 -0.03641003 -0.004499971 0.008090913 -0.02701568 -0.004499971 0.005115866 -0.02662968 -0.004499971 0.008445799 -0.02677261 -0.004499971 0.008753776 -0.02647221 -0.004499971 0.009005665 -0.02612352 -0.004499971 0.009194076 -0.0257368 -0.004499971 0.009313404 -0.02532351 -0.004499971 0.009360074 -0.0248959 -0.004499971 0.009332776 -0.02446657 -0.004499971 0.009232282 -0.02404832 -0.004499971 0.009061574 -0.02365344 -0.004499971 0.008825719 -0.02329373 -0.004499971 0.008531689 -0.02297973 -0.004499971 0.008188128 -0.02272081 -0.004499971 0.007805347 -0.02252465 -0.004499971 0.007394552 -0.02239698 -0.004499971 0.006967961 -0.0223416 -0.004499971 0.006538152 -0.0223602 -0.004499971 0.006117939 -0.02245217 -0.004499971 0.005719721 -0.02261489 -0.004499971 0.005355298 -0.02284342 -0.004499971 0.0050354 -0.02313107 -0.004499971 0.004769563 -0.02346926 -0.004499971 0.004565656 -0.02384799 -0.004499971 0.004429697 -0.02425616 -0.004499971 0.004365742 -0.0246815 -0.004499971 0.004375576 -0.02511161 -0.004499971 0.004459083 -0.02553361 -0.004499971 0.004613637 -0.02593505 -0.004499971 0.004834771 -0.026304 -0.004499971 0.006513416 -0.02680891 0.01199996 0.00660336 -0.02682268 0.01199996 0.006860733 -0.0228393 0.01199996 0.006860733 -0.02683931 0.01199996 0.006513416 -0.0228697 0.01199996 0.00617671 -0.02295994 0.01199996 0.00617671 -0.02671867 0.01199996 0.005860745 -0.02657133 0.01199996 0.004981338 -0.02415525 0.01199996 0.005128681 -0.02583932 0.01199996 0.005328655 -0.02612489 0.01199996 0.007208049 -0.02680891 0.01199996 0.007544755 -0.02671867 0.01199996 0.007208049 -0.0228697 0.01199996 0.00786072 -0.02657133 0.01199996 0.008146286 -0.02637141 0.01199996 0.00839281 -0.02612489 0.01199996 0.008592784 -0.02583932 0.01199996 0.007544755 -0.02295994 0.01199996 0.008830368 -0.02518659 0.01199996 0.008860707 -0.02483928 0.01199996 0.008830368 -0.02449202 0.01199996 0.005860745 -0.02310723 0.01199996 0.00557518 -0.0233072 0.01199996 0.005328655 -0.02355372 0.01199996 0.004891097 -0.02449202 0.01199996 0.004860758 -0.02483928 0.01199996 0.004981338 -0.02552336 0.01199996 0.004891097 -0.02518659 0.01199996 0.005128681 -0.02383929 0.01199996 0.00557518 -0.02637141 0.01199996 0.008740127 -0.02415525 0.01199996 0.008592784 -0.02383929 0.01199996 0.00839281 -0.02355372 0.01199996 0.008740127 -0.02552336 0.01199996 0.008146286 -0.0233072 0.01199996 0.00786072 -0.02310723 0.01199996 -0.00410211 -0.006278693 0.005499958 -0.003012657 -0.006868243 0.005499958 0.003012716 0.006868243 0.005499958 0.006596028 0.003569602 0.005499958 0.005918502 0.004606544 0.005499958 -0.007499992 0 0.005499958 -0.007397711 -0.001234412 0.005499958 -0.007093608 -0.002435207 0.005499958 -0.006596028 -0.003569602 0.005499958 -0.005918502 -0.004606544 0.005499958 -0.005079567 -0.005517899 0.005499958 0.007093608 0.002435207 0.005499958 -0.001841127 -0.007270455 0.005499958 -6.19344e-4 -0.007474362 0.005499958 0.005079567 0.005517899 0.005499958 0.00410211 0.006278693 0.005499958 6.19345e-4 0.007474362 0.005499958 -6.19344e-4 0.007474362 0.005499958 -0.007397711 0.001234412 0.005499958 -0.001841127 0.007270455 0.005499958 -0.003012657 0.006868243 0.005499958 -0.005079567 0.005517899 0.005499958 -0.005918502 0.004606544 0.005499958 -0.006596028 0.003569602 0.005499958 0.001841127 -0.007270455 0.005499958 0.005918502 -0.004606544 0.005499958 0.006596028 -0.003569602 0.005499958 0.007093608 -0.002435207 0.005499958 0.007397651 -0.001234412 0.005499958 0.007499992 0 0.005499958 6.19345e-4 -0.007474362 0.005499958 0.007397651 0.001234412 0.005499958 0.001841127 0.007270455 0.005499958 -0.00410211 0.006278693 0.005499958 -0.007093608 0.002435207 0.005499958 0.003012716 -0.006868243 0.005499958 0.00410211 -0.006278693 0.005499958 0.005079567 -0.005517899 0.005499958 -0.00410211 -0.006278693 -0.005499958 -0.005079567 -0.005517899 -0.005499958 0.005079567 0.005517899 -0.005499958 -0.005918502 -0.004606544 -0.005499958 -0.006596028 -0.003569602 -0.005499958 -0.007093608 -0.002435207 -0.005499958 -0.007397711 -0.001234412 -0.005499958 -0.007499992 0 -0.005499958 -0.00410211 0.006278693 -0.005499958 -0.003012657 0.006868243 -0.005499958 -0.003012657 -0.006868243 -0.005499958 0.005918502 0.004606544 -0.005499958 0.006596028 0.003569602 -0.005499958 0.007093608 0.002435207 -0.005499958 0.007397651 0.001234412 -0.005499958 0.007499992 0 -0.005499958 0.006596028 -0.003569602 -0.005499958 0.005918502 -0.004606544 -0.005499958 0.001841127 -0.007270455 -0.005499958 0.007093608 -0.002435207 -0.005499958 6.19345e-4 -0.007474362 -0.005499958 -6.19344e-4 -0.007474362 -0.005499958 -0.007397711 0.001234412 -0.005499958 -0.007093608 0.002435207 -0.005499958 -0.006596028 0.003569602 -0.005499958 -0.005918502 0.004606544 -0.005499958 -0.005079567 0.005517899 -0.005499958 -0.001841127 0.007270455 -0.005499958 0.003012716 0.006868243 -0.005499958 0.00410211 0.006278693 -0.005499958 -6.19344e-4 0.007474362 -0.005499958 6.19345e-4 0.007474362 -0.005499958 0.001841127 0.007270455 -0.005499958 0.005079567 -0.005517899 -0.005499958 0.00410211 -0.006278693 -0.005499958 0.003012716 -0.006868243 -0.005499958 0.007397651 -0.001234412 -0.005499958 -0.001841127 -0.007270455 -0.005499958 -0.007596909 -0.0363512 -0.004499971 0.01178145 -0.03354483 -0.004499971 0.01281088 -0.0256114 -0.004499971 -0.00674802 -0.0368629 -0.004499971 -0.005826532 -0.03722786 -0.004499971 -0.00485754 -0.03743612 -0.004499971 0.005059242 -0.03872293 -0.004499971 -0.008149862 -0.02680289 -0.004499971 0.006069779 -0.01820385 -0.004499971 0.005205333 -0.01759302 -0.004499971 0.002991855 -0.01191329 -0.004499971 0.002943634 -0.01297062 -0.004499971 0.003071665 -0.01402133 -0.004499971 0.00337249 -0.01503616 -0.004499971 0.003837645 -0.01598691 -0.004499971 0.004454314 -0.01684719 -0.004499971 -0.00410211 -0.006278693 -0.004499971 -0.003012657 -0.006868243 -0.004499971 -0.001841127 -0.007270455 -0.004499971 -0.007992804 -0.02636748 -0.004499971 -0.007900238 -0.02591395 -0.004499971 -0.005418598 -0.006788849 -0.004499971 -0.008349895 -0.03570675 -0.004499971 -0.008986532 -0.03494715 -0.004499971 -0.009489476 -0.03409314 -0.004499971 -0.009844958 -0.03316789 -0.004499971 -0.01004326 -0.03219681 -0.004499971 -0.01007896 -0.03120636 -0.004499971 -0.009951174 -0.03022348 -0.004499971 -0.009663283 -0.02927511 -0.004499971 -0.009223222 -0.02838701 -0.004499971 -0.008642971 -0.02758353 -0.004499971 -0.008368134 -0.02721107 -0.004499971 0.006104171 -0.03876656 -0.004499971 0.007140874 -0.03862816 -0.004499971 0.008137762 -0.03831177 -0.004499971 -6.19344e-4 -0.007474362 -0.004499971 6.19345e-4 -0.007474362 -0.004499971 0.001841127 -0.007270455 -0.004499971 0.003506541 -0.007946908 -0.004499971 0.003012716 -0.006868243 -0.004499971 0.003606796 -0.007466554 -0.004499971 -0.005442559 -0.005810558 -0.004499971 -0.005566179 -0.005335628 -0.004499971 -0.005079567 -0.005517899 -0.004499971 -0.005761027 -0.004885196 -0.004499971 -0.005918502 -0.004606544 -0.004499971 -0.006022393 -0.004469871 -0.004499971 -0.005392968 -0.00629878 -0.004499971 0.009064555 -0.03782713 -0.004499971 0.009893119 -0.03718888 -0.004499971 0.01155698 -0.03456634 -0.004499971 0.01115852 -0.03553336 -0.004499971 0.01059824 -0.03641647 -0.004499971 0.007023632 -0.01866257 -0.004499971 0.004682183 -0.005858898 -0.004499971 0.004323422 -0.006193757 -0.004499971 0.00410211 -0.006278693 -0.004499971 0.004020094 -0.006579518 -0.004499971 0.003779351 -0.007007122 -0.004499971 0.01285642 -0.0246123 -0.004499971 0.01273542 -0.02361953 -0.004499971 0.01245123 -0.02266067 -0.004499971 0.01201164 -0.02176231 -0.004499971 0.01142901 -0.02094942 -0.004499971 0.01071941 -0.02024465 -0.004499971 0.009902596 -0.01966756 -0.004499971 0.009001314 -0.01923412 -0.004499971 0.008040487 -0.01895642 -0.004499971 -0.007915735 -0.02827209 0.004999995 -0.004085481 -0.03648602 0.004999995 -0.003217279 -0.03641003 0.004999995 -0.002375364 -0.03618448 0.004999995 -0.001585483 -0.03581613 0.004999995 -8.71587e-4 -0.03531622 0.004999995 -2.55301e-4 -0.03469997 0.004999995 2.44603e-4 -0.03398603 0.004999995 6.12938e-4 -0.03319609 0.004999995 8.38515e-4 -0.03235423 0.004999995 9.14474e-4 -0.03148603 0.004999995 8.38515e-4 -0.03061777 0.004999995 -0.008415639 -0.02898603 0.004999995 -0.008783936 -0.02977591 0.004999995 -0.00900954 -0.03061777 0.004999995 6.12938e-4 -0.02977591 0.004999995 2.44603e-4 -0.02898603 0.004999995 -2.55301e-4 -0.02827209 0.004999995 -0.002375364 -0.02678757 0.004999995 -0.003217279 -0.02656197 0.004999995 -0.004085481 -0.02648603 0.004999995 -0.004953742 -0.02656197 0.004999995 -0.005795598 -0.02678757 0.004999995 -0.006585478 -0.02715587 0.004999995 -0.007299423 -0.02765578 0.004999995 -0.009085476 -0.03148603 0.004999995 -0.00900954 -0.03235423 0.004999995 -0.008783936 -0.03319609 0.004999995 -8.71587e-4 -0.02765578 0.004999995 -0.001585483 -0.02715587 0.004999995 -0.008415639 -0.03398603 0.004999995 -0.005795598 -0.03618448 0.004999995 -0.004953742 -0.03641003 0.004999995 -0.007915735 -0.03469997 0.004999995 -0.007299423 -0.03531622 0.004999995 -0.006585478 -0.03581613 0.004999995 0.007672011 -0.02696132 0.01172816 0.008090913 -0.02701568 0.0115 0.008110761 -0.02700436 0.0115 0.007632851 -0.02695626 0.01174426 0.007224857 -0.02690333 0.0119037 0.007313966 -0.02691489 0.01187551 0.00686109 -0.02685612 0.01198059 0.006901323 -0.02686136 0.01197755 0.007203519 -0.02690052 0.01191043 0.006306231 -0.02678412 0.01197767 0.00651288 -0.02681094 0.01199316 0.006017565 -0.02674669 0.01191455 0.00615859 -0.02676498 0.01194536 0.005762815 -0.0267136 0.01182776 0.00577712 -0.02671545 0.01183265 0.004945635 -0.02644628 0.0115 0.005115866 -0.02662968 0.0115 0.005330681 -0.02665752 0.0116201 0.005441188 -0.02667188 0.01168191 0.00936073 -0.02483928 0.0115 0.009328186 -0.02446699 0.0115 0.009322762 -0.02440518 0.0115 0.009227454 -0.02404963 0.0115 0.00920999 -0.02398425 0.0115 0.009056746 -0.02365571 0.0115 0.009025812 -0.02358931 0.0115 0.008821129 -0.02329695 0.0115 0.00877583 -0.02323234 0.0115 0.008527457 -0.02298396 0.0115 0.008467733 -0.02292418 0.0115 0.008184552 -0.02272593 0.0115 0.008110761 -0.02267426 0.0115 0.007802546 -0.02253055 0.0115 0.007715761 -0.02249008 0.0115 0.007392764 -0.02240353 0.0115 0.007294833 -0.02237731 0.0115 0.006967306 -0.02234864 0.0115 0.006860733 -0.02233928 0.0115 0.006538808 -0.02236747 0.0115 0.006426632 -0.02237731 0.0115 0.006119906 -0.02245944 0.0115 0.006005704 -0.02249008 0.0115 0.005722999 -0.02262187 0.0115 0.005610704 -0.02267426 0.0115 0.005359828 -0.02284991 0.0115 0.005253791 -0.02292418 0.0115 0.005041182 -0.02313679 0.0115 0.004945635 -0.02323234 0.0115 0.004776418 -0.02347403 0.0115 0.004695653 -0.02358931 0.0115 0.004573345 -0.02385163 0.0115 0.004511475 -0.02398425 0.0115 0.004438042 -0.02425837 0.0115 0.004398703 -0.02440518 0.0115 0.004374444 -0.02468228 0.0115 0.004360735 -0.02483928 0.0115 0.004384458 -0.02511084 0.0115 0.004398703 -0.02527344 0.0115 0.004467785 -0.02553123 0.0115 0.004511475 -0.02569437 0.0115 0.004621922 -0.02593117 0.0115 0.004695653 -0.02608931 0.0115 0.00484234 -0.02629876 0.0115 0.008444488 -0.02677071 0.0115 0.008467733 -0.02675443 0.0115 0.008751809 -0.0264703 0.0115 0.00877583 -0.02644628 0.0115 0.009003102 -0.02612173 0.0115 0.009025812 -0.02608931 0.0115 0.009190857 -0.02573531 0.0115 0.00920999 -0.02569437 0.0115 0.009309589 -0.02532249 0.0115 0.009322762 -0.02527344 0.0115 0.009355843 -0.02489554 0.0115 0.002991855 -0.01191329 0.004499971 0.003506541 -0.007946908 0.004499971 0.008040487 -0.01895642 0.004499971 0.007023632 -0.01866257 0.004499971 0.006069779 -0.01820385 0.004499971 0.005205333 -0.01759302 0.004499971 0.004454314 -0.01684719 0.004499971 0.003837645 -0.01598691 0.004499971 0.00337249 -0.01503616 0.004499971 0.003071665 -0.01402133 0.004499971 0.002943634 -0.01297062 0.004499971 0.01281088 -0.0256114 0.004499971 0.01285642 -0.0246123 0.004499971 0.01273542 -0.02361953 0.004499971 0.01245123 -0.02266067 0.004499971 0.01201164 -0.02176231 0.004499971 0.01142901 -0.02094942 0.004499971 0.01071941 -0.02024465 0.004499971 0.009902596 -0.01966756 0.004499971 0.009001314 -0.01923412 0.004499971 0.01178145 -0.03354483 0.004499971 0.005059242 -0.03872293 0.004499971 0.006104171 -0.03876656 0.004499971 0.007140874 -0.03862816 0.004499971 0.008137762 -0.03831177 0.004499971 0.009064555 -0.03782713 0.004499971 0.009893119 -0.03718888 0.004499971 0.01059824 -0.03641647 0.004499971 0.01115852 -0.03553336 0.004499971 0.01155698 -0.03456634 0.004499971 -0.00485754 -0.03743612 0.004499971 -0.008642971 -0.02758353 0.004499971 -0.009223222 -0.02838701 0.004499971 -0.009663283 -0.02927511 0.004499971 -0.009951174 -0.03022348 0.004499971 -0.01007896 -0.03120636 0.004499971 -0.01004326 -0.03219681 0.004499971 -0.009844958 -0.03316789 0.004499971 -0.009489476 -0.03409314 0.004499971 -0.008986532 -0.03494715 0.004499971 -0.008349895 -0.03570675 0.004499971 -0.007596909 -0.0363512 0.004499971 -0.00674802 -0.0368629 0.004499971 -0.005826532 -0.03722786 0.004499971 -0.007900238 -0.02591395 0.004499971 -0.007992804 -0.02636748 0.004499971 -0.008149862 -0.02680289 0.004499971 -0.008368134 -0.02721107 0.004499971 -0.005418598 -0.006788849 0.004499971 -0.006022393 -0.004469871 0.004499971 -0.005761027 -0.004885196 0.004499971 -0.005566179 -0.005335628 0.004499971 -0.005442559 -0.005810558 0.004499971 -0.005392968 -0.00629878 0.004499971 0.00410211 -0.006278693 0.004499971 0.004682183 -0.005858898 0.004499971 -0.005918502 -0.004606544 0.004499971 -0.005079567 -0.005517899 0.004499971 -0.00410211 -0.006278693 0.004499971 -0.003012657 -0.006868243 0.004499971 -0.001841127 -0.007270455 0.004499971 -6.19344e-4 -0.007474362 0.004499971 6.19345e-4 -0.007474362 0.004499971 0.001841127 -0.007270455 0.004499971 0.003012716 -0.006868243 0.004499971 0.003606796 -0.007466554 0.004499971 0.003779351 -0.007007122 0.004499971 0.004020094 -0.006579518 0.004499971 0.004323422 -0.006193757 0.004499971 -0.004085481 -0.02648603 0.004499971 -0.004953742 -0.02656197 0.004499971 -0.005795598 -0.02678757 0.004499971 -0.006585478 -0.02715587 0.004499971 -0.007299423 -0.02765578 0.004499971 -0.007915735 -0.02827209 0.004499971 -0.008415639 -0.02898603 0.004499971 -0.008783936 -0.02977591 0.004499971 -0.00900954 -0.03061777 0.004499971 -0.009085476 -0.03148603 0.004499971 -0.00900954 -0.03235423 0.004499971 -0.008783936 -0.03319609 0.004499971 -0.008415639 -0.03398603 0.004499971 -0.007915735 -0.03469997 0.004499971 -0.007299423 -0.03531622 0.004499971 -0.006585478 -0.03581613 0.004499971 -0.005795598 -0.03618448 0.004499971 -0.004953742 -0.03641003 0.004499971 -0.004085481 -0.03648602 0.004499971 -0.003217279 -0.03641003 0.004499971 -0.002375364 -0.03618448 0.004499971 -0.001585483 -0.03581613 0.004499971 -8.71587e-4 -0.03531622 0.004499971 -2.55301e-4 -0.03469997 0.004499971 2.44603e-4 -0.03398603 0.004499971 6.12938e-4 -0.03319609 0.004499971 8.38515e-4 -0.03235423 0.004499971 9.14474e-4 -0.03148603 0.004499971 8.38515e-4 -0.03061777 0.004499971 6.12938e-4 -0.02977591 0.004499971 2.44603e-4 -0.02898603 0.004499971 -2.55301e-4 -0.02827209 0.004499971 -8.71587e-4 -0.02765578 0.004499971 -0.001585483 -0.02715587 0.004499971 -0.002375364 -0.02678757 0.004499971 -0.003217279 -0.02656197 0.004499971 0.008090913 -0.02701568 0.004499971 0.008445799 -0.02677261 0.004499971 0.008753776 -0.02647221 0.004499971 0.009005665 -0.02612352 0.004499971 0.009194076 -0.0257368 0.004499971 0.009313404 -0.02532351 0.004499971 0.009360074 -0.0248959 0.004499971 0.009332776 -0.02446657 0.004499971 0.009232282 -0.02404832 0.004499971 0.009061574 -0.02365344 0.004499971 0.008825719 -0.02329373 0.004499971 0.008531689 -0.02297973 0.004499971 0.008188128 -0.02272081 0.004499971 0.007805347 -0.02252465 0.004499971 0.007394552 -0.02239698 0.004499971 0.006967961 -0.0223416 0.004499971 0.006538152 -0.0223602 0.004499971 0.006117939 -0.02245217 0.004499971 0.005719721 -0.02261489 0.004499971 0.005355298 -0.02284342 0.004499971 0.0050354 -0.02313107 0.004499971 0.004769563 -0.02346926 0.004499971 0.004565656 -0.02384799 0.004499971 0.004429697 -0.02425616 0.004499971 0.004365742 -0.0246815 0.004499971 0.004375576 -0.02511161 0.004499971 0.004459083 -0.02553361 0.004499971 0.004613637 -0.02593505 0.004499971 0.004834771 -0.026304 0.004499971 0.005115866 -0.02662968 0.004499971 + + + + + + + + + + 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.3664376 -0.617987 -0.6955685 -0.4730314 -0.4390828 -0.7638373 -0.04878199 -0.7546039 -0.6543648 -0.04876059 -0.7546045 -0.6543657 0.08747637 -0.6281834 -0.7731323 0.06078362 -0.6946971 -0.7167297 0.1481787 -0.6978495 -0.700749 0.1481565 -0.6978539 -0.7007494 0.1790702 -0.6682995 -0.7220178 0.2301641 -0.6752811 -0.7007283 0.2301794 -0.6752756 -0.7007286 0.2959547 -0.634676 -0.7138607 0.3133338 -0.6336333 -0.7073407 -0.5049243 -0.5049243 -0.7000735 -0.4125627 -0.58921 -0.6947112 -0.37309 -0.5808444 -0.7234803 -0.4532172 -0.5508182 -0.700852 -0.1446494 -0.9456464 -0.2912551 -0.1446359 -0.9456486 -0.2912546 -0.1557562 -0.58129 -0.7986502 -0.2399206 -0.7028324 -0.6696751 -0.3139679 -0.6733044 -0.6693919 -0.2469772 -0.5969932 -0.7632832 -0.3081002 -0.6239304 -0.7181818 -0.7057569 0.06174719 -0.7057581 -0.7057567 0.06174552 -0.7057585 -0.6843109 0.1833679 -0.7057583 -0.6843135 0.1833613 -0.7057576 -0.6843136 0.1833608 -0.7057576 -0.6420788 0.2994006 -0.7057577 -0.6420776 0.2994027 -0.705758 -0.6420773 0.2994042 -0.7057577 -0.5803261 0.4063596 -0.7057574 -0.58033 0.4063552 -0.7057568 -0.5803326 0.4063482 -0.7057586 -0.5009466 0.5009564 -0.7057586 -0.500952 0.5009519 -0.705758 -0.5009519 0.5009519 -0.705758 -0.4063564 0.5803272 -0.7057583 -0.4063522 0.5803296 -0.7057588 -0.4063501 0.5803321 -0.7057579 -0.2994102 0.6420741 -0.705758 -0.2994058 0.6420758 -0.7057584 -0.2994019 0.6420791 -0.7057572 -0.1833631 0.6843138 -0.7057567 -0.1833614 0.6843141 -0.7057569 -0.1833662 0.6843113 -0.7057584 -0.06172794 0.7057589 -0.7057577 -0.06174385 0.7057587 -0.7057566 -0.06174898 0.7057567 -0.705758 0.06174015 0.7057571 -0.7057584 0.06174361 0.7057567 -0.7057588 0.06174463 0.7057568 -0.7057585 0.1833844 0.6843072 -0.7057575 0.1833615 0.6843149 -0.7057561 0.1833599 0.6843148 -0.7057567 0.2994086 0.6420762 -0.7057567 0.2994061 0.6420776 -0.7057566 0.2994026 0.6420781 -0.7057577 0.4063568 0.5803278 -0.7057575 0.406353 0.5803307 -0.7057573 0.4063508 0.5803315 -0.705758 0.500952 0.500952 -0.705758 0.500952 0.5009519 -0.705758 0.5009519 0.5009519 -0.705758 0.5803292 0.4063542 -0.7057579 0.5803291 0.4063545 -0.7057578 0.5803295 0.4063542 -0.7057577 0.6420818 0.2993957 -0.7057573 0.6420785 0.2994032 -0.705757 0.6420772 0.2994045 -0.7057575 0.6843124 0.1833648 -0.7057578 0.6843131 0.1833612 -0.7057579 0.684314 0.1833598 -0.7057573 0.7057558 0.06176209 -0.7057579 0.7057569 0.06174719 -0.7057582 0.7057583 0.06174373 -0.705757 0.7057586 -0.06173634 -0.7057574 0.7057575 -0.06174784 -0.7057575 0.7057576 -0.06174844 -0.7057573 0.6843191 -0.1833368 -0.7057583 0.6843124 -0.183361 -0.7057586 0.6843127 -0.1833636 -0.7057577 0.6420766 -0.2994061 -0.7057574 0.6420781 -0.299403 -0.7057575 0.6420781 -0.2994026 -0.7057576 0.5803253 -0.406361 -0.7057573 0.5803321 -0.4063512 -0.7057574 0.5803311 -0.4063544 -0.7057563 0.5009533 -0.5009533 -0.7057561 0.5009533 -0.5009533 -0.7057561 0.5009533 -0.5009533 -0.7057561 0.4063807 -0.5803114 -0.7057574 0.4063483 -0.5803347 -0.7057568 0.4063501 -0.5803322 -0.7057579 0.3507876 -0.6139648 -0.7071034 -0.4938 -0.5086986 -0.7052568 -0.5803315 -0.4063522 -0.7057573 -0.5803319 -0.4063512 -0.7057575 -0.5803307 -0.4063523 -0.7057577 -0.6420783 -0.2994021 -0.7057576 -0.6420781 -0.299403 -0.7057575 -0.6420777 -0.2994036 -0.7057576 -0.684314 -0.1833595 -0.7057576 -0.6843137 -0.1833613 -0.7057573 -0.6843114 -0.1833657 -0.7057583 -0.7057566 -0.06174618 -0.7057585 -0.7057566 -0.06174772 -0.7057583 -0.7057584 -0.06174248 -0.7057571 -0.7057585 0.06173938 -0.7057572 0.08715265 -0.996195 0 -0.08715301 -0.996195 0 -0.08715301 -0.996195 0 -0.258825 -0.9659242 0 -0.258825 -0.9659242 0 -0.4226166 -0.9063086 0 -0.4226166 -0.9063086 0 -0.5735745 -0.8191534 0 -0.5735745 -0.8191534 0 -0.707107 -0.7071065 0 -0.707107 -0.7071065 0 -0.8191521 -0.5735765 0 -0.8191521 -0.5735765 0 -0.9063078 -0.4226185 0 -0.9063078 -0.4226185 0 -0.9659261 -0.2588181 0 -0.9659261 -0.2588181 0 -0.9961946 -0.08715689 0 -0.9961946 -0.08715689 0 -0.9961946 0.08715689 0 -0.9961946 0.08715689 0 -0.9659264 0.2588171 0 -0.9659264 0.2588171 0 -0.9063069 0.4226201 0 -0.9063069 0.4226201 0 -0.8191521 0.5735765 0 -0.8191521 0.5735765 0 -0.7071092 0.7071044 0 -0.7071092 0.7071044 0 -0.5735745 0.8191534 0 -0.5735745 0.8191534 0 -0.4226166 0.9063086 0 -0.4226166 0.9063086 0 -0.258821 0.9659253 0 -0.258821 0.9659253 0 -0.08715301 0.996195 0 -0.08715301 0.996195 0 0.08715265 0.996195 0 0.08715265 0.996195 0 0.258821 0.9659253 0 0.258821 0.9659253 0 0.4226166 0.9063086 0 0.4226166 0.9063086 0 0.5735765 0.819152 0 0.5735765 0.819152 0 0.7071068 0.7071068 0 0.7071068 0.7071068 0 0.8191521 0.5735765 0 0.8191521 0.5735765 0 0.9063086 0.4226166 0 0.9063086 0.4226166 0 0.9659253 0.258821 0 0.9659253 0.258821 0 0.9961949 0.08715265 0 0.9961949 0.08715265 0 0.9961949 -0.08715265 0 0.9961949 -0.08715265 0 0.965925 -0.2588221 0 0.965925 -0.2588221 0 0.9063093 -0.4226149 0 0.9063093 -0.4226149 0 0.8191521 -0.5735765 0 0.8191521 -0.5735765 0 0.7071046 -0.7071089 0 0.7071046 -0.7071089 0 0.5735765 -0.819152 0 0.5735765 -0.819152 0 0.4226166 -0.9063086 0 0.4226166 -0.9063086 0 0.258825 -0.9659242 0 0.258825 -0.9659242 0 0.08715265 -0.996195 0 -0.1286783 -0.9916864 0 -0.1286777 -0.9916865 0 -0.1286743 -0.991687 -1.51489e-6 -0.1286731 -0.9916871 -1.95867e-6 -0.1286747 -0.9916868 -1.4035e-6 -0.1286882 -0.9916851 2.95148e-6 -0.1286799 -0.9916862 4.4257e-7 -0.1286768 -0.9916866 -4.61258e-7 -0.1286787 -0.9916864 0 -0.1286727 -0.9916872 -1.4213e-6 -0.1286847 -0.9916855 1.16583e-6 -0.1286827 -0.9916858 7.6982e-7 -0.1286798 -0.9916862 0 -0.1286915 -0.9916847 1.00722e-6 -0.1286695 -0.9916875 -4.08369e-7 -0.1286931 -0.9916845 2.49778e-6 -0.1286708 -0.9916874 -1.1162e-6 -0.1286708 -0.9916874 -1.11504e-6 0.4960862 -0.8682733 0 0.565142 -0.8249936 2.65647e-4 0.5735737 -0.8191539 -3.31304e-4 0.6982075 -0.7158954 -3.26956e-4 0.5735903 -0.8190864 0.009578764 0.7071068 -0.7071068 -3.91365e-4 0.8105947 -0.5856075 -3.86379e-4 0.7070757 -0.7070757 0.009384751 0.8191505 -0.5735784 -4.49716e-4 0.8191434 -0.5735886 -4.49716e-4 0.8989901 -0.4379686 4.43182e-4 0.9063094 -0.4226143 -5.05935e-4 0.9063072 -0.4226192 -5.05935e-4 0.9607599 -0.2773805 4.98775e-4 0.9659247 -0.2588225 -5.60649e-4 0.9659348 -0.2587849 -5.60649e-4 0.9940896 -0.1085608 5.52203e-4 0.9961942 -0.08715945 -6.13261e-4 0.9961957 -0.08714234 -6.13261e-4 0.9979842 0.06346029 6.04357e-4 0.9961947 0.08715283 -6.64309e-4 0.9961925 0.08717882 -6.64309e-4 0.9723306 0.2336086 6.54402e-4 0.9659261 0.258817 -7.13491e-4 0.9659242 0.2588241 -7.13491e-4 0.9178896 0.3968353 7.02862e-4 0.9063081 0.422617 -7.60936e-4 0.906314 0.4226042 -7.60936e-4 0.8362731 0.5483127 7.49523e-4 0.8191497 0.5735792 -8.06785e-4 0.8191496 0.5735794 -8.06785e-4 0.7298904 0.6835638 7.93795e-4 0.7071065 0.7071065 -8.50463e-4 0.7071065 0.7071065 -8.50463e-4 0.601904 0.798568 8.36781e-4 0.5735746 0.8191528 -8.9263e-4 0.5735828 0.8191472 -8.9263e-4 0.4560932 0.8899315 8.77786e-4 0.4226142 0.9063092 -9.32957e-4 0.4226222 0.9063055 -9.32957e-4 0.2967779 0.9549461 9.16855e-4 0.2588168 0.9659259 -9.71353e-4 0.2588517 0.9659166 -9.71352e-4 0.1286782 0.9916859 9.54731e-4 0.08715415 0.9961943 -0.001007497 0.08714789 0.9961949 -0.001007497 -0.04323929 0.9990642 9.90247e-4 -0.08716028 0.9961937 -0.001042246 -0.08713054 0.9961964 -0.001042246 -0.2138584 0.9768641 0.001024484 -0.2588263 0.9659233 -0.001075446 -0.2588212 0.9659246 -0.001075446 -0.3781637 0.9257381 0.001055896 -0.4226129 0.9063096 -0.001106262 -0.4226251 0.906304 -0.001106262 -0.5312637 0.8472058 0.001086354 -0.5735734 0.8191534 -0.001135587 -0.5735826 0.8191468 -0.001135587 -0.6686366 0.7435886 0.001114726 -0.7071063 0.7071063 -0.001163363 -0.7070994 0.7071132 -0.001163363 -0.7862132 0.6179543 0.001141488 -0.8191549 0.5735713 -0.001189053 -0.8191443 0.5735863 -0.001189053 -0.8805106 0.4740249 0.001166284 -0.9063079 0.4226163 -0.001212775 -0.9063103 0.4226113 -0.001212775 -0.9487385 0.31606 0.001189112 -0.9659252 0.2588183 -0.001235008 -0.9659225 0.2588286 -0.001235008 -0.9888758 0.1487384 0.00121057 -0.9961939 0.0871554 -0.001255095 -0.9961948 0.08714663 -0.001255095 -0.9997349 -0.0229879 0.001229703 -0.9961943 -0.08715093 -0.001273572 -0.9961938 -0.08715641 -0.001273572 -0.9809938 -0.1940355 0.001247525 -0.9659233 -0.2588254 -0.00129038 -0.9659257 -0.2588164 -0.00129038 -0.9332085 -0.359333 0.001263141 -0.9063082 -0.4226155 -0.001305162 -0.9063091 -0.4226133 -0.001305162 -0.8577909 -0.5139973 0.001277327 -0.7329176 -0.6803175 0 -0.7569817 -0.6534349 0.001289427 -0.8191515 -0.5735757 -0.001317918 -0.8191511 -0.5735762 -0.001317918 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0.3307942 -0.5789715 0.7452297 0.3006971 -0.6448461 0.702677 0.183743 -0.6857382 0.7042739 0.1511203 -0.6502197 0.744565 0.2007679 -0.6822552 0.7030079 -0.04881614 -0.7554645 0.6533685 -0.0487942 -0.7554651 0.6533694 0.05760324 -0.6583486 0.7505058 0.06738847 -0.6990633 0.7118773 0.1327839 -0.6961094 0.7055495 -0.1555766 -0.5806198 0.7991724 -0.1445985 -0.9454291 0.2919847 -0.1446158 -0.9454264 0.291985 -0.2865328 -0.6144698 0.7350686 -0.2379384 -0.7005717 0.672744 -0.2379585 -0.7005644 0.6727446 -0.404996 -0.5784036 0.7081155 -0.3221905 -0.6317098 0.7050788 -0.322155 -0.6317291 0.7050777 -0.518576 -0.4813588 0.7066629 -0.4684775 -0.5141556 0.7184517 -0.5030764 -0.5030764 0.7027292 -0.4634507 -0.5383782 0.7038199 -0.3982305 -0.5771359 0.7129703 0.7057582 0.06174731 0.7057569 0.705757 0.06174367 0.7057582 0.7057557 0.06176209 0.7057579 0.6843137 0.1833612 0.7057574 0.6843135 0.1833597 0.7057579 0.6843122 0.1833648 0.7057578 0.6420779 0.299403 0.7057576 0.6420778 0.2994047 0.705757 0.6420818 0.2993957 0.7057573 0.5803293 0.4063547 0.7057577 0.5803294 0.406354 0.7057579 0.5803292 0.4063542 0.7057579 0.5009519 0.500952 0.7057579 0.5009519 0.5009519 0.705758 0.500952 0.500952 0.705758 0.4063526 0.5803301 0.7057582 0.4063512 0.5803321 0.7057572 0.4063568 0.5803278 0.7057575 0.2994056 0.6420766 0.7057577 0.2994031 0.6420792 0.7057565 0.2994086 0.6420762 0.7057567 0.1833615 0.6843143 0.7057567 0.1833601 0.6843153 0.7057561 0.1833844 0.6843072 0.7057575 0.06174367 0.7057569 0.7057584 0.06174457 0.7057564 0.7057587 0.06174015 0.7057572 0.7057585 -0.06174373 0.705757 0.7057583 -0.06174916 0.7057586 0.7057562 -0.06172794 0.7057589 0.7057577 -0.183361 0.6843124 0.7057586 -0.1833667 0.6843132 0.7057565 -0.1833631 0.6843138 0.7057567 -0.2994064 0.6420772 0.7057568 -0.2994012 0.6420775 0.7057588 -0.2994102 0.6420741 0.705758 -0.4063528 0.5803304 0.7057578 -0.4063495 0.5803312 0.705759 -0.4063564 0.5803272 0.7057583 -0.5009519 0.500952 0.705758 -0.5009519 0.5009519 0.705758 -0.5009466 0.5009564 0.7057586 -0.5803282 0.4063539 0.7057589 -0.5803347 0.4063496 0.7057561 -0.5803261 0.4063596 0.7057574 -0.6420779 0.2994028 0.7057576 -0.6420768 0.2994039 0.7057582 -0.6420788 0.2994006 0.7057577 -0.6843135 0.1833612 0.7057576 -0.6843137 0.1833609 0.7057574 -0.6843109 0.1833679 0.7057583 -0.7057565 0.06174707 0.7057586 -0.7057572 0.06174552 0.7057579 -0.7057585 0.06173938 0.7057572 -0.7057582 -0.0617479 0.7057569 -0.7057565 -0.0617423 0.705759 -0.7057566 -0.06174618 0.7057585 -0.6843124 -0.183361 0.7057586 -0.6843131 -0.1833661 0.7057567 -0.684314 -0.1833595 0.7057576 -0.6420779 -0.299403 0.7057576 -0.6420779 -0.2994037 0.7057574 -0.6420783 -0.2994021 0.7057576 -0.5803316 -0.4063509 0.7057578 -0.5803312 -0.4063526 0.7057572 -0.5803315 -0.4063522 0.7057573 0.2250622 -0.6281021 0.7448723 0.3044596 -0.6394331 0.7059955 0.4063476 -0.5803337 0.705758 0.4063507 -0.580333 0.7057568 0.4063807 -0.5803114 0.7057574 0.5009533 -0.5009533 0.7057561 0.5009533 -0.5009533 0.7057561 0.5009533 -0.5009533 0.7057561 0.5803329 -0.4063519 0.7057563 0.5803303 -0.4063538 0.7057574 0.5803253 -0.406361 0.7057573 0.6420779 -0.2994028 0.7057576 0.6420782 -0.2994027 0.7057575 0.6420766 -0.2994061 0.7057575 0.6843135 -0.1833612 0.7057576 0.6843118 -0.1833634 0.7057586 0.6843191 -0.1833368 0.7057584 0.7057576 -0.06174796 0.7057573 0.7057574 -0.06174844 0.7057574 0.7057586 -0.06173634 0.7057574 0.9916865 -0.1286773 0 0.9916865 -0.1286773 0 0.2776608 0.9606792 0 0.2776608 0.9606792 0 0.4333765 0.9012131 0 0.4333765 0.9012131 0 0.5770513 0.816708 0 0.5770513 0.816708 0 0.7046962 0.7095092 0 0.7046962 0.7095092 0 0.8127592 0.5825998 0 0.8127592 0.5825998 0 0.8982425 0.4395001 0 0.8982425 0.4395001 0 0.9587681 0.2841897 0 0.9587681 0.2841897 0 0.992654 0.120988 0 0.992654 0.120988 0 0.9989606 -0.04558163 0 0.9989606 -0.04558163 0 0.9989606 -0.04557913 0 0.9989606 -0.04557913 0 0.992654 0.1209873 0 0.992654 0.1209873 0 0.9587675 0.2841918 0 0.9587675 0.2841918 0 0.8982426 0.4395 0 0.8982426 0.4395 0 0.8127606 0.5825979 0 0.8127606 0.5825979 0 0.7046946 0.7095108 0 0.7046946 0.7095108 0 0.5770543 0.8167058 0 0.5770543 0.8167058 0 0.4333732 0.9012145 0 0.4333732 0.9012145 0 0.2776584 0.9606799 0 0.2776584 0.9606799 0 0.9916865 -0.128678 0 0.9916865 -0.128678 0 -0.04175978 -0.9991277 0 -0.04175978 -0.9991277 0 0.1323748 -0.9911997 0 0.1323748 -0.9911997 0 0.3024843 -0.9531543 0 0.3024843 -0.9531543 0 0.4633984 -0.88615 0 0.4633984 -0.88615 0 0.6102394 -0.792217 0 0.6102394 -0.792217 0 0.7385348 -0.6742154 0 0.7385348 -0.6742154 0 0.8443918 -0.5357262 0 0.8443918 -0.5357262 0 0.9245916 -0.3809597 0 0.9245916 -0.3809597 0 0.9766978 -0.2146194 0 0.9766978 -0.2146194 0 -0.1286775 -0.9916865 0 -0.1286775 -0.9916865 0 -0.8107021 0.5854589 0 -0.8107021 0.5854589 0 -0.8960227 0.4440084 0 -0.8960227 0.4440084 0 -0.9568908 0.2904481 0 -0.9568908 0.2904481 0 -0.9916506 0.1289548 0 -0.9916506 0.1289548 0 -0.9993499 -0.03605282 0 -0.9993499 -0.03605282 0 -0.9797803 -0.2000762 0 -0.9797803 -0.2000762 0 -0.9334738 -0.3586459 0 -0.9334738 -0.3586459 0 -0.8617005 -0.507417 0 -0.8617005 -0.507417 0 -0.7664079 -0.6423542 0 -0.7664079 -0.6423542 0 -0.6502014 -0.7597619 0 -0.6502014 -0.7597619 0 -0.5162612 -0.8564311 0 -0.5162612 -0.8564311 0 -0.3682261 -0.9297363 0 -0.3682261 -0.9297363 0 -0.2101453 -0.9776702 0 -0.2101453 -0.9776702 0 -0.9797834 0.2000612 0 -0.9797834 0.2000612 0 -0.9406713 0.3393193 0 -0.9406713 0.3393193 0 -0.8818746 0.471484 0 -0.8818746 0.471484 0 -0.8046272 0.5937803 0 -0.8046272 0.5937803 0 -0.9916864 0.128678 0 -0.9916864 0.128678 0 -0.8463257 -0.5326657 0 -0.8463257 -0.5326657 0 -0.917823 -0.39699 0 -0.917823 -0.39699 0 -0.9677301 -0.2519889 0 -0.9677301 -0.2519889 0 -0.9948818 -0.1010466 0 -0.9948818 -0.1010466 0 -0.9986337 0.05225759 0 -0.9986337 0.05225759 0 -0.7930409 -0.6028053 -0.08781832 -0.8371039 -0.5469074 0.0122177 -0.8371665 -0.5469483 0 -0.7357231 -0.6772825 0 -0.7357231 -0.6772825 0 -0.6142127 -0.7891406 0 -0.6142127 -0.7891406 0 -0.4759467 -0.8794742 0 -0.4759467 -0.8794742 0 -0.3247015 -0.9458166 0 -0.3247015 -0.9458166 0 -0.164594 -0.9863614 0 -0.164594 -0.9863614 0 0 -1 0 0 -1 0 0.1645945 -0.9863613 0 0.1645945 -0.9863613 0 0.3247006 -0.9458168 0 0.3247006 -0.9458168 0 0.4759469 -0.8794741 0 0.4759469 -0.8794741 0 0.5857416 -0.8093455 0.04320389 0.5862891 -0.8101019 0 0.6140217 -0.7888935 -0.02499145 0.6511873 -0.758917 0 -0.7961166 -0.6051432 0 -0.7357231 -0.6772825 0 -0.7357231 -0.6772825 0 -0.6142127 -0.7891406 0 -0.6142127 -0.7891406 0 -0.4759467 -0.8794742 0 -0.4759467 -0.8794742 0 -0.3247015 -0.9458166 0 -0.3247015 -0.9458166 0 -0.164594 -0.9863614 0 -0.164594 -0.9863614 0 0 -1 0 0 -1 0 0.1645945 -0.9863613 0 0.1645945 -0.9863613 0 0.3247006 -0.9458168 0 0.3247006 -0.9458168 0 0.4759469 -0.8794741 0 0.4759469 -0.8794741 0 0.6142135 -0.78914 0 0.6511874 -0.7589171 0 0.7357231 -0.6772825 0 0.7357231 -0.6772825 0 0.8371664 -0.5469483 0 0.8371664 -0.5469483 0 0.9157733 -0.4016955 0 0.9157733 -0.4016955 0 0.9694004 -0.2454853 0 0.9694004 -0.2454853 0 0.9965846 -0.0825783 0 0.9965846 -0.0825783 0 0.9965845 0.08257842 0 0.9965845 0.08257842 0 0.9694003 0.2454857 0 0.9694003 0.2454857 0 0.9157736 0.401695 0 0.9157736 0.401695 0 0.8371664 0.5469484 0 0.8371664 0.5469484 0 0.7357231 0.6772825 0 0.7357231 0.6772825 0 0.6142134 0.78914 0 0.6142134 0.78914 0 0.475948 0.8794734 0 0.475948 0.8794734 0 0.3246992 0.9458174 0 0.3246992 0.9458174 0 0.1645945 0.9863613 0 0.1645945 0.9863613 0 0 1 0 0 1 0 -0.1645941 0.9863615 0 -0.1645941 0.9863615 0 -0.3247002 0.9458171 0 -0.3247002 0.9458171 0 -0.4759478 0.8794735 0 -0.4759478 0.8794735 0 -0.6142127 0.7891405 0 -0.6142127 0.7891405 0 -0.7357231 0.6772825 0 -0.7357231 0.6772825 0 -0.8371664 0.5469484 0 -0.8371664 0.5469484 0 -0.9157736 0.401695 0 -0.9157736 0.401695 0 -0.9694003 0.2454857 0 -0.9694003 0.2454857 0 -0.9965845 0.08257842 0 -0.9965845 0.08257842 0 -0.9965846 -0.0825783 0 -0.9965846 -0.0825783 0 -0.9694004 -0.2454853 0 -0.9694004 -0.2454853 0 -0.9157733 -0.4016955 0 -0.9157733 -0.4016955 0 -0.8433719 -0.5373303 0 -0.8433719 -0.5373303 0 0.9789 -0.20434 0 0.9789 -0.20434 0 0.9361444 -0.3516159 0 0.9361444 -0.3516159 0 0.8713719 -0.490623 0 0.8713719 -0.490623 0 0.7861116 -0.6180847 0 0.7861116 -0.6180847 0 0.6823523 -0.7310234 0 0.6823523 -0.7310234 0 0.08715265 0.996195 0 -0.08715301 0.996195 0 -0.08715301 0.996195 0 -0.258821 0.9659253 0 -0.258821 0.9659253 0 -0.4226166 0.9063086 0 -0.4226166 0.9063086 0 -0.5735745 0.8191534 0 -0.5735745 0.8191534 0 -0.7071092 0.7071044 0 -0.7071092 0.7071044 0 -0.8191521 0.5735765 0 -0.8191521 0.5735765 0 -0.9063069 0.4226201 0 -0.9063069 0.4226201 0 -0.9659264 0.2588171 0 -0.9659264 0.2588171 0 -0.9961946 0.08715689 0 -0.9961946 0.08715689 0 -0.9961946 -0.08715689 0 -0.9961946 -0.08715689 0 -0.9659261 -0.2588181 0 -0.9659261 -0.2588181 0 -0.9063078 -0.4226185 0 -0.9063078 -0.4226185 0 -0.8191521 -0.5735765 0 -0.8191521 -0.5735765 0 -0.707107 -0.7071065 0 -0.707107 -0.7071065 0 -0.5735745 -0.8191534 0 -0.5735745 -0.8191534 0 -0.4226166 -0.9063086 0 -0.4226166 -0.9063086 0 -0.258825 -0.9659242 0 -0.258825 -0.9659242 0 -0.08715301 -0.996195 0 -0.08715301 -0.996195 0 0.08715265 -0.996195 0 0.08715265 -0.996195 0 0.258825 -0.9659242 0 0.258825 -0.9659242 0 0.4226166 -0.9063086 0 0.4226166 -0.9063086 0 0.5735765 -0.819152 0 0.5735765 -0.819152 0 0.7071046 -0.7071089 0 0.7071046 -0.7071089 0 0.8191521 -0.5735765 0 0.8191521 -0.5735765 0 0.9063093 -0.4226149 0 0.9063093 -0.4226149 0 0.965925 -0.2588221 0 0.965925 -0.2588221 0 0.9961949 -0.08715265 0 0.9961949 -0.08715265 0 0.9961949 0.08715265 0 0.9961949 0.08715265 0 0.9659253 0.258821 0 0.9659253 0.258821 0 0.9063086 0.4226166 0 0.9063086 0.4226166 0 0.8191521 0.5735765 0 0.8191521 0.5735765 0 0.7071068 0.7071068 0 0.7071068 0.7071068 0 0.5735765 0.819152 0 0.5735765 0.819152 0 0.4226166 0.9063086 0 0.4226166 0.9063086 0 0.258821 0.9659253 0 0.258821 0.9659253 0 0.08715265 0.996195 0 0.4960862 -0.8682733 0 0.565142 -0.8249936 -2.65647e-4 0.5735737 -0.8191539 3.31303e-4 0.5736165 -0.8191239 3.31303e-4 0.6982075 -0.7158955 -3.26586e-4 0.7071068 -0.7071068 3.91364e-4 0.7071067 -0.7071067 3.91364e-4 0.8105947 -0.5856075 -3.8579e-4 0.8191506 -0.5735784 4.49716e-4 0.8191434 -0.5735886 4.49716e-4 0.8989901 -0.4379686 -4.43182e-4 0.9063095 -0.4226144 5.05935e-4 0.9063072 -0.4226192 5.05935e-4 0.9607599 -0.2773805 -4.98775e-4 0.9659247 -0.2588225 5.60649e-4 0.9659348 -0.2587849 5.60649e-4 0.9940896 -0.1085608 -5.52203e-4 0.9961942 -0.08715951 6.13261e-4 0.9961957 -0.08714234 6.13261e-4 0.9979842 0.06346029 -6.04357e-4 0.9961947 0.08715283 6.64309e-4 0.9961925 0.08717882 6.64309e-4 0.9723305 0.2336086 -6.54402e-4 0.9659261 0.258817 7.13491e-4 0.9659243 0.2588241 7.13491e-4 0.9178896 0.3968353 -7.02862e-4 0.9063081 0.422617 7.60936e-4 0.906314 0.4226042 7.60936e-4 0.8362731 0.5483127 -7.49523e-4 0.8191497 0.5735791 8.06785e-4 0.8191497 0.5735794 8.06785e-4 0.7298904 0.6835638 -7.93795e-4 0.7071065 0.7071065 8.50463e-4 0.7071065 0.7071065 8.50463e-4 0.601904 0.798568 -8.36781e-4 0.5735746 0.8191528 8.9263e-4 0.5735827 0.8191472 8.9263e-4 0.4560933 0.8899315 -8.77786e-4 0.4226142 0.9063091 9.32957e-4 0.4226222 0.9063054 9.32957e-4 0.296778 0.9549461 -9.16855e-4 0.2588168 0.9659259 9.71353e-4 0.2588517 0.9659166 9.71352e-4 0.1286782 0.9916859 -9.54731e-4 0.08715415 0.9961944 0.001007497 0.08714789 0.9961949 0.001007497 -0.04323929 0.9990642 -9.90247e-4 -0.08716028 0.9961937 0.001042246 -0.08713054 0.9961964 0.001042246 -0.2138584 0.9768641 -0.001024484 -0.2588263 0.9659233 0.001075446 -0.2588213 0.9659247 0.001075446 -0.3781637 0.9257382 -0.001055896 -0.4226129 0.9063096 0.001106262 -0.422625 0.906304 0.001106262 -0.5312638 0.8472058 -0.001086354 -0.5735734 0.8191534 0.001135587 -0.5735827 0.8191469 0.001135587 -0.6686366 0.7435886 -0.001114726 -0.7071063 0.7071063 0.001163363 -0.7070994 0.7071132 0.001163363 -0.7862132 0.6179542 -0.001141488 -0.8191549 0.5735713 0.001189053 -0.8191443 0.5735863 0.001189053 -0.8805108 0.4740249 -0.001166284 -0.9063079 0.4226164 0.001212775 -0.9063103 0.4226114 0.001212775 -0.9487385 0.31606 -0.001189112 -0.9659252 0.2588183 0.001235008 -0.9659225 0.2588286 0.001235008 -0.9888759 0.1487384 -0.00121057 -0.9961939 0.0871554 0.001255095 -0.9961948 0.08714663 0.001255095 -0.9997349 -0.0229879 -0.001229703 -0.9961943 -0.08715093 0.001273572 -0.9961938 -0.08715641 0.001273572 -0.9809938 -0.1940355 -0.001247525 -0.9659233 -0.2588254 0.00129038 -0.9659257 -0.2588164 0.00129038 -0.9332085 -0.359333 -0.001263141 -0.9063082 -0.4226154 0.001305162 -0.9063091 -0.4226133 0.001305162 -0.8577909 -0.5139973 -0.001277327 -0.8191511 -0.5735762 0.001317918 -0.8191515 -0.5735757 0.001317918 -0.7569817 -0.6534349 -0.001289427 -0.7329176 -0.6803175 0 -0.1286171 -0.9916943 3.79086e-6 -0.1286813 -0.991686 0 -0.1286848 -0.9916856 -1.16588e-6 -0.1286664 -0.991688 2.76628e-6 -0.1286907 -0.9916847 -3.14225e-6 -0.1286756 -0.9916867 8.41631e-7 -0.1286733 -0.991687 1.50475e-6 -0.1286724 -0.9916871 0 -0.1286777 -0.9916865 1.64992e-7 -0.1286869 -0.9916853 -7.04636e-7 -0.1286746 -0.9916868 6.16674e-7 -0.1287031 -0.9916832 -2.78181e-6 -0.1287659 -0.991675 -2.82074e-5 -0.128672 -0.9916871 2.12719e-6 -0.1286882 -0.9916852 -3.94805e-6 -0.1286776 -0.9916864 3.24892e-7 -0.1286523 -0.9916898 4.42422e-6 -0.12868 -0.9916862 -2.09114e-7 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 + + + + + + + + + + + + + + + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +

51 179 147 179 49 179 49 180 147 180 148 180 49 181 148 181 54 181 54 182 148 182 149 182 54 183 149 183 40 183 40 184 149 184 150 184 40 185 150 185 41 185 41 186 150 186 151 186 41 187 151 187 42 187 42 188 151 188 152 188 42 189 152 189 55 189 55 190 152 190 153 190 55 191 153 191 56 191 56 192 153 192 154 192 56 193 154 193 57 193 57 194 154 194 155 194 57 195 155 195 58 195 58 196 155 196 156 196 58 197 156 197 59 197 59 198 156 198 157 198 59 199 157 199 37 199 37 200 157 200 158 200 37 201 158 201 38 201 38 202 158 202 159 202 38 203 159 203 46 203 46 204 159 204 160 204 46 205 160 205 47 205 47 206 160 206 161 206 47 207 161 207 65 207 65 208 161 208 162 208 65 209 162 209 64 209 64 210 162 210 163 210 64 211 163 211 63 211 63 212 163 212 164 212 63 213 164 213 66 213 66 214 164 214 165 214 66 215 165 215 67 215 67 216 165 216 166 216 67 217 166 217 48 217 48 218 166 218 167 218 48 219 167 219 39 219 39 220 167 220 168 220 39 221 168 221 43 221 43 222 168 222 169 222 43 223 169 223 44 223 44 224 169 224 170 224 44 225 170 225 45 225 45 226 170 226 171 226 45 227 171 227 53 227 53 228 171 228 172 228 53 229 172 229 50 229 50 230 172 230 173 230 50 231 173 231 60 231 60 232 173 232 174 232 60 233 174 233 61 233 61 234 174 234 175 234 61 235 175 235 62 235 62 236 175 236 176 236 62 237 176 237 68 237 68 238 176 238 177 238 68 239 177 239 69 239 69 240 177 240 178 240 69 241 178 241 71 241 71 242 178 242 179 242 71 243 179 243 72 243 72 244 179 244 180 244 72 245 180 245 70 245 70 246 180 246 181 246 70 247 181 247 52 247 52 248 181 248 182 248 52 249 182 249 51 249 51 250 182 250 147 250 152 463 151 463 326 463 175 464 174 464 327 464 327 465 174 465 183 465 187 466 328 466 186 466 186 467 328 467 327 467 186 468 327 468 185 468 185 469 327 469 183 469 207 470 208 470 173 470 173 471 208 471 209 471 173 472 209 472 210 472 326 473 151 473 329 473 329 474 151 474 150 474 329 475 150 475 330 475 330 476 150 476 149 476 330 477 149 477 331 477 210 478 211 478 173 478 173 479 211 479 212 479 173 480 212 480 174 480 174 481 212 481 184 481 174 482 184 482 183 482 172 483 205 483 173 483 173 484 205 484 206 484 173 485 206 485 207 485 181 486 180 486 332 486 149 487 148 487 331 487 331 488 148 488 147 488 331 489 147 489 332 489 332 490 147 490 182 490 332 491 182 491 181 491 162 492 161 492 333 492 334 493 169 493 335 493 335 494 169 494 168 494 166 495 336 495 167 495 167 496 336 496 337 496 167 497 337 497 338 497 338 498 339 498 167 498 167 499 339 499 340 499 167 500 340 500 168 500 168 501 340 501 341 501 168 502 341 502 335 502 342 503 343 503 165 503 165 504 343 504 344 504 165 505 344 505 166 505 333 506 345 506 162 506 162 507 345 507 346 507 162 508 346 508 163 508 163 509 346 509 347 509 163 510 347 510 164 510 326 511 348 511 152 511 152 512 348 512 349 512 152 513 349 513 153 513 153 514 349 514 350 514 153 515 350 515 154 515 154 516 350 516 351 516 154 517 351 517 155 517 155 518 351 518 352 518 155 519 352 519 156 519 156 520 352 520 353 520 156 521 353 521 157 521 157 522 353 522 354 522 157 523 354 523 158 523 158 524 354 524 355 524 158 525 355 525 159 525 159 526 355 526 356 526 159 527 356 527 160 527 160 528 356 528 357 528 160 529 357 529 161 529 161 530 357 530 358 530 161 531 358 531 333 531 180 532 179 532 332 532 332 533 179 533 178 533 332 534 178 534 359 534 359 535 178 535 177 535 359 536 177 536 360 536 360 537 177 537 361 537 344 538 362 538 166 538 166 539 362 539 363 539 166 540 363 540 336 540 336 541 363 541 364 541 336 542 364 542 365 542 365 543 364 543 366 543 365 544 366 544 367 544 368 545 369 545 370 545 370 546 369 546 371 546 370 547 371 547 372 547 372 548 371 548 373 548 368 549 370 549 374 549 374 550 370 550 342 550 374 551 342 551 347 551 347 552 342 552 165 552 347 553 165 553 164 553 361 554 177 554 375 554 375 555 177 555 176 555 375 556 176 556 376 556 327 557 377 557 175 557 175 558 377 558 378 558 175 559 378 559 176 559 176 560 378 560 379 560 176 561 379 561 376 561 380 562 200 562 201 562 334 563 380 563 169 563 169 564 380 564 204 564 169 565 204 565 170 565 170 566 204 566 205 566 170 567 205 567 171 567 171 568 205 568 172 568 381 569 382 569 383 569 383 570 382 570 384 570 383 571 384 571 366 571 366 572 384 572 385 572 366 573 385 573 367 573 187 574 188 574 328 574 328 575 188 575 189 575 328 576 189 576 386 576 386 577 189 577 190 577 386 578 190 578 387 578 387 579 190 579 191 579 387 580 191 580 388 580 388 581 191 581 192 581 388 582 192 582 389 582 389 583 192 583 193 583 389 584 193 584 390 584 390 585 193 585 194 585 390 586 194 586 391 586 391 587 194 587 195 587 391 588 195 588 392 588 392 589 195 589 196 589 392 590 196 590 393 590 393 591 196 591 197 591 393 592 197 592 394 592 394 593 197 593 198 593 394 594 198 594 380 594 380 595 198 595 199 595 380 596 199 596 200 596 201 597 202 597 380 597 380 598 202 598 203 598 380 599 203 599 204 599 505 744 336 744 506 744 506 745 336 745 365 745 507 746 394 746 380 746 507 747 380 747 508 747 508 748 380 748 334 748 508 749 334 749 509 749 509 750 334 750 335 750 509 751 335 751 510 751 510 752 335 752 341 752 510 753 341 753 511 753 511 754 341 754 340 754 511 755 340 755 512 755 512 756 340 756 339 756 512 757 339 757 513 757 513 758 339 758 338 758 513 759 338 759 514 759 514 760 338 760 337 760 514 761 337 761 515 761 515 762 337 762 336 762 515 763 336 763 505 763 516 764 328 764 386 764 516 765 386 765 517 765 517 766 386 766 387 766 517 767 387 767 518 767 518 768 387 768 388 768 518 769 388 769 519 769 519 770 388 770 389 770 519 771 389 771 520 771 520 772 389 772 390 772 520 773 390 773 521 773 521 774 390 774 391 774 521 775 391 775 522 775 522 776 391 776 392 776 522 777 392 777 523 777 523 778 392 778 393 778 523 779 393 779 524 779 524 780 393 780 394 780 524 781 394 781 507 781 525 782 327 782 516 782 516 783 327 783 328 783 526 784 332 784 359 784 526 785 359 785 527 785 527 786 359 786 360 786 527 787 360 787 528 787 528 788 360 788 361 788 528 789 361 789 529 789 529 790 361 790 375 790 529 791 375 791 530 791 530 792 375 792 376 792 530 793 376 793 531 793 531 794 376 794 379 794 531 795 379 795 532 795 532 796 379 796 378 796 532 797 378 797 533 797 533 798 378 798 377 798 533 799 377 799 534 799 534 800 377 800 327 800 534 801 327 801 525 801 535 802 331 802 526 802 526 803 331 803 332 803 536 804 357 804 356 804 536 805 356 805 537 805 537 806 356 806 355 806 537 807 355 807 538 807 538 808 355 808 354 808 538 809 354 809 539 809 539 810 354 810 353 810 539 811 353 811 540 811 540 812 353 812 352 812 540 813 352 813 541 813 541 814 352 814 351 814 541 815 351 815 542 815 542 816 351 816 350 816 542 817 350 817 543 817 543 818 350 818 349 818 543 819 349 819 544 819 544 820 349 820 348 820 544 821 348 821 545 821 545 822 348 822 326 822 545 823 326 823 546 823 546 824 326 824 329 824 546 825 329 825 547 825 547 826 329 826 330 826 547 827 330 827 548 827 548 828 330 828 331 828 548 829 331 829 535 829 549 830 346 830 345 830 549 831 345 831 550 831 550 832 345 832 333 832 550 833 333 833 551 833 551 834 333 834 358 834 551 835 358 835 552 835 552 836 358 836 357 836 552 837 357 837 536 837 346 838 549 838 347 838 347 839 549 839 553 839 554 840 373 840 371 840 554 841 371 841 555 841 555 842 371 842 369 842 555 843 369 843 556 843 556 844 369 844 368 844 556 845 368 845 557 845 557 846 368 846 374 846 557 847 374 847 558 847 558 848 374 848 347 848 558 849 347 849 553 849 372 850 373 850 292 850 259 851 258 851 554 851 292 852 291 852 372 852 372 853 291 853 289 853 372 854 289 854 370 854 370 855 289 855 288 855 370 856 288 856 342 856 342 857 288 857 298 857 342 858 298 858 343 858 343 859 298 859 325 859 343 860 325 860 344 860 344 861 325 861 309 861 344 862 309 862 362 862 362 863 309 863 308 863 362 864 308 864 363 864 363 865 308 865 306 865 363 866 306 866 364 866 364 867 306 867 323 867 364 868 323 868 366 868 366 869 323 869 322 869 366 870 322 870 383 870 559 871 560 871 287 871 383 872 322 872 381 872 381 873 322 873 321 873 381 874 321 874 560 874 554 875 561 875 259 875 259 876 561 876 562 876 259 877 562 877 260 877 260 878 562 878 563 878 260 879 563 879 250 879 250 880 563 880 564 880 250 881 564 881 251 881 251 882 564 882 565 882 251 883 565 883 262 883 262 884 565 884 566 884 262 885 566 885 263 885 263 886 566 886 567 886 263 887 567 887 280 887 280 888 567 888 568 888 280 889 568 889 274 889 274 890 568 890 569 890 274 891 569 891 285 891 285 892 569 892 559 892 285 893 559 893 286 893 286 894 559 894 287 894 560 895 321 895 287 895 287 896 321 896 305 896 287 897 305 897 275 897 275 898 305 898 304 898 275 899 304 899 276 899 276 900 304 900 307 900 276 901 307 901 277 901 277 902 307 902 324 902 277 903 324 903 278 903 278 904 324 904 303 904 278 905 303 905 279 905 279 906 303 906 302 906 279 907 302 907 281 907 281 908 302 908 301 908 281 909 301 909 261 909 261 910 301 910 300 910 261 911 300 911 253 911 253 912 300 912 299 912 253 913 299 913 254 913 254 914 299 914 290 914 254 915 290 915 264 915 264 916 290 916 317 916 264 917 317 917 265 917 265 918 317 918 316 918 265 919 316 919 252 919 252 920 316 920 320 920 252 921 320 921 282 921 282 922 320 922 319 922 282 923 319 923 266 923 266 924 319 924 318 924 266 925 318 925 267 925 267 926 318 926 315 926 267 927 315 927 269 927 269 928 315 928 297 928 269 929 297 929 270 929 270 930 297 930 296 930 270 931 296 931 283 931 283 932 296 932 314 932 283 933 314 933 271 933 271 934 314 934 313 934 271 935 313 935 272 935 272 936 313 936 312 936 272 937 312 937 273 937 273 938 312 938 311 938 273 939 311 939 284 939 284 940 311 940 310 940 284 941 310 941 268 941 268 942 310 942 295 942 268 943 295 943 255 943 255 944 295 944 294 944 255 945 294 945 256 945 256 946 294 946 293 946 256 947 293 947 257 947 257 948 293 948 292 948 257 949 292 949 258 949 258 950 292 950 373 950 258 951 373 951 554 951 506 952 365 952 367 952 506 953 367 953 570 953 570 954 367 954 385 954 570 955 385 955 571 955 571 956 385 956 384 956 571 957 384 957 572 957 572 958 384 958 382 958 572 959 382 959 573 959 573 960 382 960 381 960 573 961 381 961 560 961 414 962 574 962 415 962 415 963 574 963 575 963 415 964 575 964 416 964 416 965 575 965 576 965 416 966 576 966 417 966 417 967 576 967 577 967 417 968 577 968 418 968 418 969 577 969 578 969 418 970 578 970 419 970 419 971 578 971 579 971 419 972 579 972 395 972 395 973 579 973 580 973 395 974 580 974 407 974 407 975 580 975 581 975 407 976 581 976 408 976 408 977 581 977 582 977 408 978 582 978 409 978 409 979 582 979 583 979 409 980 583 980 420 980 420 981 583 981 584 981 420 982 584 982 421 982 421 983 584 983 585 983 421 984 585 984 422 984 422 985 585 985 586 985 422 986 586 986 425 986 425 987 586 987 587 987 425 988 587 988 428 988 428 989 587 989 588 989 428 990 588 990 429 990 429 991 588 991 589 991 429 992 589 992 430 992 430 993 589 993 590 993 430 994 590 994 426 994 426 995 590 995 591 995 426 996 591 996 427 996 427 997 591 997 592 997 427 998 592 998 396 998 396 999 592 999 593 999 396 1000 593 1000 397 1000 397 1001 593 1001 594 1001 397 1002 594 1002 398 1002 398 1003 594 1003 595 1003 398 1004 595 1004 399 1004 399 1005 595 1005 596 1005 399 1006 596 1006 400 1006 400 1007 596 1007 597 1007 400 1008 597 1008 401 1008 401 1009 597 1009 598 1009 401 1010 598 1010 402 1010 402 1011 598 1011 599 1011 402 1012 599 1012 403 1012 403 1013 599 1013 600 1013 403 1014 600 1014 404 1014 404 1015 600 1015 601 1015 404 1016 601 1016 405 1016 405 1017 601 1017 602 1017 405 1018 602 1018 406 1018 406 1019 602 1019 603 1019 406 1020 603 1020 410 1020 410 1021 603 1021 604 1021 410 1022 604 1022 411 1022 411 1023 604 1023 605 1023 411 1024 605 1024 412 1024 412 1025 605 1025 606 1025 412 1026 606 1026 423 1026 423 1027 606 1027 607 1027 423 1028 607 1028 424 1028 424 1029 607 1029 608 1029 424 1030 608 1030 413 1030 413 1031 608 1031 609 1031 413 1032 609 1032 414 1032 414 1033 609 1033 574 1033 630 1139 629 1139 553 1139 634 1140 633 1140 549 1140 549 1141 633 1141 632 1141 549 1142 632 1142 553 1142 553 1143 632 1143 631 1143 553 1144 631 1144 630 1144 615 1145 614 1145 516 1145 516 1146 614 1146 613 1146 516 1147 613 1147 525 1147 595 1148 594 1148 526 1148 526 1149 594 1149 593 1149 526 1150 593 1150 535 1150 628 1151 627 1151 511 1151 598 1152 597 1152 526 1152 526 1153 597 1153 596 1153 526 1154 596 1154 595 1154 576 1155 549 1155 577 1155 577 1156 549 1156 550 1156 577 1157 550 1157 578 1157 563 1158 553 1158 564 1158 564 1159 553 1159 629 1159 564 1160 629 1160 565 1160 565 1161 629 1161 628 1161 511 1162 512 1162 628 1162 628 1163 512 1163 513 1163 628 1164 513 1164 565 1164 565 1165 513 1165 514 1165 565 1166 514 1166 515 1166 550 1167 551 1167 578 1167 578 1168 551 1168 552 1168 578 1169 552 1169 579 1169 579 1170 552 1170 536 1170 579 1171 536 1171 580 1171 580 1172 536 1172 537 1172 580 1173 537 1173 581 1173 581 1174 537 1174 538 1174 581 1175 538 1175 582 1175 582 1176 538 1176 539 1176 582 1177 539 1177 583 1177 583 1178 539 1178 540 1178 583 1179 540 1179 584 1179 584 1180 540 1180 541 1180 584 1181 541 1181 585 1181 585 1182 541 1182 542 1182 585 1183 542 1183 586 1183 608 1184 607 1184 634 1184 603 1185 602 1185 639 1185 639 1186 602 1186 601 1186 601 1187 600 1187 639 1187 639 1188 600 1188 599 1188 639 1189 599 1189 598 1189 554 1190 555 1190 561 1190 561 1191 555 1191 562 1191 555 1192 556 1192 562 1192 562 1193 556 1193 557 1193 562 1194 557 1194 563 1194 563 1195 557 1195 558 1195 563 1196 558 1196 553 1196 569 1197 506 1197 570 1197 615 1198 516 1198 616 1198 616 1199 516 1199 517 1199 616 1200 517 1200 617 1200 617 1201 517 1201 518 1201 617 1202 518 1202 618 1202 618 1203 518 1203 519 1203 618 1204 519 1204 619 1204 619 1205 519 1205 520 1205 619 1206 520 1206 620 1206 620 1207 520 1207 521 1207 620 1208 521 1208 621 1208 621 1209 521 1209 522 1209 621 1210 522 1210 622 1210 622 1211 522 1211 523 1211 622 1212 523 1212 623 1212 623 1213 523 1213 524 1213 623 1214 524 1214 624 1214 624 1215 524 1215 507 1215 624 1216 507 1216 625 1216 625 1217 507 1217 508 1217 625 1218 508 1218 626 1218 626 1219 508 1219 509 1219 626 1220 509 1220 627 1220 627 1221 509 1221 510 1221 627 1222 510 1222 511 1222 526 1223 527 1223 598 1223 598 1224 527 1224 528 1224 598 1225 528 1225 639 1225 639 1226 528 1226 529 1226 532 1227 610 1227 531 1227 531 1228 610 1228 639 1228 531 1229 639 1229 530 1229 530 1230 639 1230 529 1230 593 1231 592 1231 535 1231 535 1232 592 1232 591 1232 535 1233 591 1233 548 1233 548 1234 591 1234 590 1234 548 1235 590 1235 547 1235 547 1236 590 1236 589 1236 547 1237 589 1237 546 1237 546 1238 589 1238 588 1238 546 1239 588 1239 545 1239 545 1240 588 1240 587 1240 545 1241 587 1241 544 1241 544 1242 587 1242 586 1242 544 1243 586 1243 543 1243 543 1244 586 1244 542 1244 576 1245 575 1245 549 1245 549 1246 575 1246 574 1246 549 1247 574 1247 634 1247 634 1248 574 1248 609 1248 634 1249 609 1249 608 1249 506 1250 569 1250 505 1250 613 1251 612 1251 525 1251 525 1252 612 1252 611 1252 525 1253 611 1253 534 1253 534 1254 611 1254 610 1254 534 1255 610 1255 533 1255 533 1256 610 1256 532 1256 569 1257 568 1257 505 1257 505 1258 568 1258 567 1258 505 1259 567 1259 515 1259 515 1260 567 1260 566 1260 515 1261 566 1261 565 1261 607 1262 606 1262 634 1262 634 1263 606 1263 605 1263 634 1264 605 1264 635 1264 635 1265 605 1265 636 1265 570 1266 571 1266 569 1266 569 1267 571 1267 572 1267 569 1268 572 1268 559 1268 559 1269 572 1269 573 1269 559 1270 573 1270 560 1270 603 1271 639 1271 604 1271 604 1272 639 1272 638 1272 604 1273 638 1273 605 1273 605 1274 638 1274 637 1274 605 1275 637 1275 636 1275

+
+ + + + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +

0 0 1 0 2 0 2 1 1 1 3 1 4 2 5 2 6 2 6 3 5 3 7 3 8 4 9 4 10 4 0 5 2 5 6 5 6 6 2 6 11 6 6 7 11 7 4 7 7 8 12 8 6 8 6 9 12 9 13 9 6 10 13 10 14 10 3 11 15 11 2 11 2 12 15 12 16 12 2 13 16 13 17 13 17 14 18 14 2 14 2 15 18 15 19 15 2 16 19 16 20 16 20 17 19 17 21 17 14 18 13 18 10 18 10 19 13 19 22 19 10 20 22 20 8 20 23 21 24 21 9 21 9 22 24 22 25 22 9 23 25 23 26 23 26 24 27 24 9 24 9 25 27 25 28 25 9 26 28 26 10 26 19 27 29 27 21 27 21 28 29 28 30 28 21 29 30 29 31 29 32 30 33 30 34 30 31 31 35 31 21 31 21 32 35 32 32 32 21 33 32 33 36 33 36 34 32 34 34 34 37 35 38 35 39 35 40 36 41 36 39 36 39 37 41 37 42 37 39 38 43 38 40 38 40 39 43 39 44 39 40 40 44 40 45 40 38 41 46 41 39 41 39 42 46 42 47 42 39 43 47 43 48 43 49 44 50 44 51 44 51 45 50 45 52 45 45 46 53 46 40 46 40 47 53 47 50 47 40 48 50 48 54 48 54 49 50 49 49 49 42 50 55 50 39 50 39 51 55 51 56 51 39 52 56 52 57 52 57 53 58 53 39 53 39 54 58 54 59 54 39 55 59 55 37 55 50 56 60 56 52 56 52 57 60 57 61 57 52 58 61 58 62 58 63 59 47 59 64 59 64 60 47 60 65 60 63 61 66 61 47 61 47 62 66 62 67 62 47 63 67 63 48 63 62 64 68 64 52 64 52 65 68 65 69 65 52 66 69 66 70 66 70 67 69 67 71 67 70 68 71 68 72 68 73 69 74 69 15 69 75 70 76 70 77 70 78 71 79 71 6 71 6 72 79 72 0 72 78 73 6 73 80 73 80 74 6 74 14 74 80 75 14 75 81 75 81 76 14 76 82 76 82 77 14 77 10 77 82 78 10 78 83 78 83 79 10 79 84 79 84 80 10 80 28 80 84 81 28 81 85 81 17 82 16 82 75 82 15 83 74 83 16 83 16 84 74 84 86 84 16 85 86 85 75 85 0 86 87 86 1 86 1 87 87 87 88 87 1 88 88 88 3 88 3 89 88 89 89 89 3 90 89 90 15 90 15 91 89 91 90 91 15 92 90 92 73 92 31 93 30 93 91 93 91 94 92 94 31 94 31 95 92 95 93 95 31 96 93 96 35 96 93 97 94 97 35 97 35 98 94 98 95 98 35 99 95 99 32 99 95 100 96 100 32 100 32 101 96 101 97 101 32 102 97 102 33 102 97 103 98 103 33 103 33 104 98 104 99 104 33 105 99 105 34 105 99 106 100 106 34 106 34 107 100 107 101 107 34 108 101 108 36 108 101 109 102 109 36 109 36 110 102 110 103 110 36 111 103 111 21 111 103 112 104 112 21 112 21 113 104 113 105 113 21 114 105 114 20 114 105 115 106 115 20 115 20 116 106 116 107 116 20 117 107 117 2 117 107 118 108 118 2 118 2 119 108 119 109 119 2 120 109 120 11 120 109 121 110 121 11 121 11 122 110 122 111 122 11 123 111 123 4 123 111 124 112 124 4 124 4 125 112 125 113 125 4 126 113 126 5 126 113 127 114 127 5 127 5 128 114 128 115 128 5 129 115 129 7 129 115 130 116 130 7 130 7 131 116 131 117 131 7 132 117 132 12 132 117 133 118 133 12 133 12 134 118 134 119 134 12 135 119 135 13 135 119 136 120 136 13 136 13 137 120 137 121 137 13 138 121 138 22 138 121 139 122 139 22 139 22 140 122 140 123 140 22 141 123 141 8 141 123 142 124 142 8 142 8 143 124 143 125 143 8 144 125 144 9 144 125 145 126 145 9 145 9 146 126 146 127 146 9 147 127 147 23 147 127 148 128 148 23 148 23 149 128 149 129 149 23 150 129 150 24 150 129 151 130 151 24 151 24 152 130 152 131 152 24 153 131 153 25 153 131 154 132 154 25 154 25 155 132 155 133 155 25 156 133 156 26 156 133 157 134 157 26 157 26 158 134 158 135 158 26 159 135 159 27 159 135 160 136 160 27 160 27 161 136 161 137 161 27 162 137 162 28 162 28 163 137 163 138 163 28 164 138 164 85 164 75 165 77 165 17 165 17 166 77 166 139 166 17 167 139 167 18 167 139 168 140 168 18 168 18 169 140 169 141 169 18 170 141 170 19 170 141 171 142 171 19 171 19 172 142 172 143 172 19 173 143 173 29 173 143 174 144 174 29 174 29 175 144 175 145 175 29 176 145 176 30 176 30 177 145 177 146 177 30 178 146 178 91 178 84 251 85 251 183 251 184 252 76 252 183 252 183 253 76 253 75 253 75 254 86 254 183 254 183 255 86 255 74 255 183 256 74 256 73 256 73 257 90 257 183 257 183 258 90 258 89 258 183 259 89 259 88 259 88 260 87 260 183 260 183 261 87 261 0 261 183 262 0 262 79 262 81 263 82 263 183 263 183 264 82 264 83 264 183 265 83 265 84 265 79 266 78 266 183 266 183 267 78 267 80 267 183 268 80 268 81 268 183 269 85 269 138 269 183 270 138 270 185 270 185 271 138 271 137 271 185 272 137 272 186 272 137 273 136 273 186 273 186 274 136 274 135 274 186 275 135 275 187 275 187 276 135 276 134 276 134 277 133 277 187 277 187 278 133 278 132 278 187 279 132 279 188 279 132 280 131 280 188 280 188 281 131 281 130 281 188 282 130 282 189 282 130 283 129 283 189 283 189 284 129 284 128 284 189 285 128 285 190 285 128 286 127 286 190 286 190 287 127 287 126 287 190 288 126 288 191 288 126 289 125 289 191 289 191 290 125 290 124 290 191 291 124 291 192 291 124 292 123 292 192 292 192 293 123 293 122 293 192 294 122 294 193 294 122 295 121 295 193 295 193 296 121 296 120 296 193 297 120 297 194 297 120 298 119 298 194 298 194 299 119 299 118 299 194 300 118 300 195 300 118 301 117 301 195 301 195 302 117 302 116 302 195 303 116 303 196 303 116 304 115 304 196 304 196 305 115 305 114 305 196 306 114 306 197 306 114 307 113 307 197 307 197 308 113 308 112 308 197 309 112 309 198 309 112 310 111 310 198 310 198 311 111 311 110 311 198 312 110 312 199 312 110 313 109 313 199 313 199 314 109 314 108 314 199 315 108 315 200 315 108 316 107 316 200 316 200 317 107 317 106 317 200 318 106 318 201 318 106 319 105 319 201 319 201 320 105 320 104 320 201 321 104 321 202 321 104 322 103 322 202 322 202 323 103 323 102 323 202 324 102 324 203 324 102 325 101 325 203 325 203 326 101 326 100 326 203 327 100 327 204 327 100 328 99 328 204 328 204 329 99 329 98 329 204 330 98 330 205 330 98 331 97 331 205 331 205 332 97 332 96 332 205 333 96 333 206 333 96 334 95 334 206 334 206 335 95 335 94 335 206 336 94 336 207 336 94 337 93 337 207 337 207 338 93 338 92 338 207 339 92 339 208 339 92 340 91 340 208 340 208 341 91 341 146 341 208 342 146 342 209 342 146 343 145 343 209 343 209 344 145 344 144 344 209 345 144 345 210 345 144 346 143 346 210 346 210 347 143 347 142 347 210 348 142 348 211 348 142 349 141 349 211 349 211 350 141 350 140 350 211 351 140 351 212 351 76 352 184 352 77 352 77 353 184 353 212 353 77 354 212 354 139 354 139 355 212 355 140 355 213 356 214 356 215 356 215 357 214 357 216 357 215 358 217 358 213 358 213 359 217 359 218 359 213 360 218 360 219 360 219 361 218 361 220 361 221 362 222 362 223 362 216 363 224 363 215 363 215 364 224 364 225 364 215 365 225 365 226 365 226 366 225 366 227 366 226 367 227 367 228 367 228 368 229 368 226 368 226 369 229 369 230 369 226 370 230 370 231 370 232 371 233 371 234 371 218 372 235 372 220 372 220 373 235 373 236 373 220 374 236 374 237 374 221 375 238 375 222 375 222 376 238 376 239 376 222 377 239 377 240 377 240 378 239 378 241 378 237 379 242 379 220 379 220 380 242 380 221 380 220 381 221 381 243 381 243 382 221 382 223 382 244 383 245 383 230 383 230 384 245 384 246 384 244 385 230 385 234 385 234 386 230 386 247 386 234 387 247 387 232 387 246 388 248 388 230 388 230 389 248 389 249 389 230 390 249 390 231 390 250 391 251 391 252 391 253 392 254 392 251 392 255 393 256 393 252 393 252 394 256 394 257 394 252 395 257 395 258 395 258 396 259 396 252 396 252 397 259 397 260 397 252 398 260 398 250 398 253 399 251 399 261 399 261 400 251 400 262 400 261 401 262 401 263 401 254 402 264 402 251 402 251 403 264 403 265 403 251 404 265 404 252 404 266 405 267 405 268 405 268 406 267 406 269 406 268 407 269 407 270 407 271 408 272 408 273 408 274 409 275 409 276 409 276 410 277 410 274 410 274 411 277 411 278 411 274 412 278 412 279 412 263 413 280 413 261 413 261 414 280 414 274 414 261 415 274 415 281 415 281 416 274 416 279 416 255 417 252 417 268 417 268 418 252 418 282 418 268 419 282 419 266 419 270 420 283 420 268 420 268 421 283 421 271 421 268 422 271 422 284 422 284 423 271 423 273 423 285 424 286 424 274 424 274 425 286 425 287 425 274 426 287 426 275 426 288 427 289 427 290 427 290 428 289 428 291 428 290 429 291 429 292 429 292 430 293 430 290 430 290 431 293 431 294 431 290 432 294 432 295 432 296 433 297 433 290 433 288 434 290 434 298 434 298 435 290 435 299 435 298 436 299 436 300 436 300 437 301 437 298 437 298 438 301 438 302 438 298 439 302 439 303 439 304 440 305 440 306 440 304 441 306 441 307 441 307 442 306 442 308 442 307 443 308 443 309 443 295 444 310 444 290 444 290 445 310 445 311 445 290 446 311 446 312 446 312 447 313 447 290 447 290 448 313 448 314 448 290 449 314 449 296 449 315 450 316 450 297 450 297 451 316 451 317 451 297 452 317 452 290 452 315 453 318 453 316 453 316 454 318 454 319 454 316 455 319 455 320 455 305 456 321 456 306 456 306 457 321 457 322 457 306 458 322 458 323 458 303 459 324 459 298 459 298 460 324 460 307 460 298 461 307 461 325 461 325 462 307 462 309 462 395 600 396 600 397 600 397 601 398 601 395 601 395 602 398 602 399 602 395 603 399 603 400 603 400 604 401 604 395 604 395 605 401 605 402 605 395 606 402 606 403 606 403 607 404 607 395 607 395 608 404 608 405 608 395 609 405 609 406 609 395 610 407 610 396 610 396 611 407 611 408 611 396 612 408 612 409 612 406 613 410 613 395 613 395 614 410 614 411 614 395 615 411 615 412 615 413 616 414 616 395 616 395 617 414 617 415 617 395 618 415 618 416 618 416 619 417 619 395 619 395 620 417 620 418 620 395 621 418 621 419 621 409 622 420 622 396 622 396 623 420 623 421 623 396 624 421 624 422 624 412 625 423 625 395 625 395 626 423 626 424 626 395 627 424 627 413 627 425 628 426 628 422 628 422 629 426 629 427 629 422 630 427 630 396 630 425 631 428 631 426 631 426 632 428 632 429 632 426 633 429 633 430 633 431 634 432 634 433 634 227 635 225 635 434 635 224 636 435 636 225 636 225 637 435 637 436 637 225 638 436 638 434 638 214 639 437 639 216 639 216 640 437 640 438 640 216 641 438 641 224 641 224 642 438 642 439 642 224 643 439 643 435 643 219 644 440 644 213 644 213 645 440 645 441 645 213 646 441 646 214 646 220 647 442 647 219 647 219 648 442 648 443 648 219 649 443 649 440 649 243 650 444 650 220 650 220 651 444 651 445 651 220 652 445 652 442 652 446 653 447 653 223 653 223 654 447 654 448 654 223 655 448 655 243 655 243 656 448 656 449 656 243 657 449 657 444 657 234 658 233 658 450 658 450 659 451 659 234 659 234 660 451 660 452 660 234 661 452 661 244 661 452 662 453 662 244 662 244 663 453 663 454 663 244 664 454 664 245 664 454 665 455 665 245 665 245 666 455 666 456 666 245 667 456 667 246 667 456 668 457 668 246 668 246 669 457 669 458 669 246 670 458 670 248 670 458 671 459 671 248 671 248 672 459 672 460 672 248 673 460 673 249 673 460 674 461 674 249 674 249 675 461 675 462 675 249 676 462 676 231 676 462 677 463 677 231 677 231 678 463 678 464 678 231 679 464 679 226 679 464 680 465 680 226 680 226 681 465 681 466 681 226 682 466 682 215 682 466 683 467 683 215 683 215 684 467 684 468 684 215 685 468 685 217 685 468 686 469 686 217 686 217 687 469 687 470 687 217 688 470 688 218 688 470 689 471 689 218 689 218 690 471 690 472 690 218 691 472 691 235 691 472 692 473 692 235 692 235 693 473 693 474 693 235 694 474 694 236 694 474 695 475 695 236 695 236 696 475 696 476 696 236 697 476 697 237 697 476 698 477 698 237 698 237 699 477 699 478 699 237 700 478 700 242 700 478 701 479 701 242 701 242 702 479 702 480 702 242 703 480 703 221 703 480 704 481 704 221 704 221 705 481 705 482 705 221 706 482 706 238 706 482 707 483 707 238 707 238 708 483 708 484 708 238 709 484 709 239 709 484 710 485 710 239 710 239 711 485 711 486 711 239 712 486 712 241 712 486 713 487 713 241 713 241 714 487 714 488 714 241 715 488 715 240 715 488 716 489 716 240 716 240 717 489 717 490 717 240 718 490 718 222 718 490 719 491 719 222 719 222 720 491 720 492 720 222 721 492 721 223 721 223 722 492 722 493 722 223 723 493 723 446 723 434 724 431 724 227 724 227 725 431 725 433 725 227 726 433 726 228 726 433 727 494 727 228 727 228 728 494 728 495 728 228 729 495 729 229 729 495 730 496 730 229 730 229 731 496 731 497 731 229 732 497 732 230 732 497 733 498 733 230 733 230 734 498 734 499 734 230 735 499 735 247 735 499 736 500 736 247 736 247 737 500 737 501 737 247 738 501 738 232 738 501 739 502 739 232 739 232 740 502 740 503 740 232 741 503 741 233 741 233 742 503 742 504 742 233 743 504 743 450 743 432 1034 610 1034 433 1034 433 1035 610 1035 611 1035 433 1036 611 1036 494 1036 494 1037 611 1037 495 1037 495 1038 611 1038 612 1038 495 1039 612 1039 496 1039 496 1040 612 1040 497 1040 497 1041 612 1041 613 1041 497 1042 613 1042 498 1042 498 1043 613 1043 499 1043 499 1044 613 1044 614 1044 499 1045 614 1045 500 1045 500 1046 614 1046 501 1046 501 1047 614 1047 615 1047 501 1048 615 1048 502 1048 502 1049 615 1049 503 1049 503 1050 615 1050 616 1050 503 1051 616 1051 504 1051 504 1052 616 1052 450 1052 450 1053 616 1053 617 1053 450 1054 617 1054 451 1054 451 1055 617 1055 452 1055 452 1056 617 1056 618 1056 452 1057 618 1057 453 1057 453 1058 618 1058 454 1058 454 1059 618 1059 619 1059 454 1060 619 1060 455 1060 455 1061 619 1061 456 1061 456 1062 619 1062 620 1062 456 1063 620 1063 457 1063 457 1064 620 1064 458 1064 458 1065 620 1065 621 1065 458 1066 621 1066 459 1066 459 1067 621 1067 460 1067 460 1068 621 1068 622 1068 460 1069 622 1069 461 1069 461 1070 622 1070 462 1070 462 1071 622 1071 623 1071 462 1072 623 1072 463 1072 463 1073 623 1073 464 1073 464 1074 623 1074 624 1074 464 1075 624 1075 465 1075 465 1076 624 1076 466 1076 466 1077 624 1077 625 1077 466 1078 625 1078 467 1078 467 1079 625 1079 468 1079 468 1080 625 1080 626 1080 468 1081 626 1081 469 1081 469 1082 626 1082 470 1082 470 1083 626 1083 627 1083 470 1084 627 1084 471 1084 471 1085 627 1085 472 1085 472 1086 627 1086 628 1086 472 1087 628 1087 473 1087 473 1088 628 1088 474 1088 474 1089 628 1089 629 1089 474 1090 629 1090 475 1090 475 1091 629 1091 476 1091 476 1092 629 1092 630 1092 476 1093 630 1093 477 1093 477 1094 630 1094 478 1094 478 1095 630 1095 631 1095 478 1096 631 1096 479 1096 479 1097 631 1097 480 1097 480 1098 631 1098 632 1098 480 1099 632 1099 481 1099 481 1100 632 1100 482 1100 482 1101 632 1101 633 1101 482 1102 633 1102 483 1102 483 1103 633 1103 484 1103 484 1104 633 1104 634 1104 484 1105 634 1105 485 1105 485 1106 634 1106 486 1106 486 1107 634 1107 635 1107 486 1108 635 1108 487 1108 487 1109 635 1109 488 1109 488 1110 635 1110 636 1110 488 1111 636 1111 489 1111 489 1112 636 1112 490 1112 490 1113 636 1113 637 1113 490 1114 637 1114 491 1114 491 1115 637 1115 492 1115 492 1116 637 1116 638 1116 492 1117 638 1117 493 1117 493 1118 638 1118 446 1118 446 1119 638 1119 639 1119 446 1120 639 1120 447 1120 434 1121 610 1121 431 1121 431 1122 610 1122 432 1122 214 1123 441 1123 610 1123 610 1124 441 1124 440 1124 440 1125 443 1125 610 1125 610 1126 443 1126 442 1126 610 1127 442 1127 445 1127 447 1128 639 1128 448 1128 448 1129 639 1129 610 1129 434 1130 436 1130 610 1130 610 1131 436 1131 435 1131 610 1132 435 1132 439 1132 445 1133 444 1133 610 1133 610 1134 444 1134 449 1134 610 1135 449 1135 448 1135 439 1136 438 1136 610 1136 610 1137 438 1137 437 1137 610 1138 437 1138 214 1138

+
+
+
+
+ + + + + 0.6858805 -0.3173701 0.6548619 7.481132 0.7276338 0.3124686 -0.6106656 -6.50764 -0.01081678 0.8953432 0.4452454 5.343665 0 0 0 1 + + + + -0.2908646 -0.7711008 0.5663932 4.076245 0.9551712 -0.1998834 0.2183912 1.005454 -0.05518906 0.6045247 0.7946723 5.903862 0 0 0 1 + + + + 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/kortex_description/grippers/robotiq_2f_85/readme.md b/kortex_description/grippers/robotiq_2f_85/readme.md new file mode 100644 index 00000000..ae6811f7 --- /dev/null +++ b/kortex_description/grippers/robotiq_2f_85/readme.md @@ -0,0 +1,18 @@ +This ROS package was cloned from https://github.com/waypointrobotics/robotiq_85_gripper into ros_kortex to use the description files for the Robotiq 2f 85 gripper. Only the robotiq_85_description folder was copied (along with this readme and the LICENSE file from the original repo). +The repository was cloned at commit 7e09b0d4d90179cf4809193914c7f6d44a9140a6. + +The xacro files were modified to allow proper simulation of the gripper in Gazebo. + +The original readme file follows: + +# robotiq_85_gripper +Common packages for the Robotiq 85 Gripper provided by Stanley Innovation + +Defaults to 'ttyUSB0' and 115200 baud rate + +Single gripper and left gripper (in dual gripper configuration) need to be configured as device 9 using the Robotiq User Interface +Right gripper (in dual gripper configuration) need to be configured as device 9 using the Robotiq User Interface + + +start with: +roslaunch robotiq_85_bringup robotiq_85.launch run_test:=true \ No newline at end of file diff --git a/kortex_description/grippers/robotiq_2f_85/urdf/robotiq_2f_85_macro.xacro b/kortex_description/grippers/robotiq_2f_85/urdf/robotiq_2f_85_macro.xacro new file mode 100644 index 00000000..975d2335 --- /dev/null +++ b/kortex_description/grippers/robotiq_2f_85/urdf/robotiq_2f_85_macro.xacro @@ -0,0 +1,335 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 100000 + 100000 + 100000000.0 + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 100000 + 100000 + 100000000.0 + 1.0 + + + + + + + + + + + + + + + + + + + + + + 1 + 100000 + 100000 + 100000000.0 + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 100000 + 100000 + 100000000.0 + 1.0 + + + + + + + + + + + + + + + + + + + + + + 1 + 100000 + 100000 + 100000000.0 + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 100000 + 100000 + 100000000.0 + 1.0 + + + + + + + + + + + + + + + + + + + + + + 1 + 100000 + 100000 + 100000000.0 + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 100000 + 100000 + 100000000.0 + 1.0 + + + + + + + + + + + + + + + + + + + + + + 1 + 100000 + 100000 + 100000000.0 + 1.0 + + + + diff --git a/kortex_description/grippers/robotiq_2f_85/urdf/robotiq_2f_85_transmission_macro.xacro b/kortex_description/grippers/robotiq_2f_85/urdf/robotiq_2f_85_transmission_macro.xacro new file mode 100644 index 00000000..30d4bd9f --- /dev/null +++ b/kortex_description/grippers/robotiq_2f_85/urdf/robotiq_2f_85_transmission_macro.xacro @@ -0,0 +1,78 @@ + + + + + + + transmission_interface/SimpleTransmission + + hardware_interface/PositionJointInterface + + + 1 + hardware_interface/PositionJointInterface + + + + + + gripper_finger1_joint + gripper_finger2_joint + 1.0 + 0.0 + 5.0 + + + + gripper_finger1_joint + gripper_finger2_inner_knuckle_joint + 1.0 + 0.0 + 5.0 + + + + gripper_finger1_joint + gripper_finger1_inner_knuckle_joint + 1.0 + 0.0 + 5.0 + + + + gripper_finger1_joint + gripper_finger1_finger_tip_joint + -1.0 + 0.0 + 5.0 + + + + gripper_finger1_joint + gripper_finger2_finger_tip_joint + -1.0 + 0.0 + 5.0 + + + + + + my_robotiq_gripper + bracelet_link + gripper_finger1_finger_tip_link + gripper_finger2_finger_tip_link + + 100 + 10 + 3 + 10 + 0.001 + false + __default_topic__ + + + + + + diff --git a/kortex_description/package.xml b/kortex_description/package.xml index 2ec5a3e2..10560d2e 100644 --- a/kortex_description/package.xml +++ b/kortex_description/package.xml @@ -1,12 +1,11 @@ kortex_description - 1.0.0 + 2.0.0

URDF Description package for Kortex-compatible robots

This package contains configuration data, 3D models and launch files for Kortex-compatible arms and grippers

- me BSD catkin diff --git a/kortex_description/readme.md b/kortex_description/readme.md index f766fbcb..205f3768 100644 --- a/kortex_description/readme.md +++ b/kortex_description/readme.md @@ -11,8 +11,15 @@ * --> # Kortex Description -This package contains the URDF (Unified Robot Description Format) and STL files for the Kortex-compatible robots and end-effectors. +This package contains the URDF (Unified Robot Description Format), STL and configuration files for the Kortex-compatible robots. - +## Usage - +To load the description of a robot, you simply have to load the **ARM.xacro** or the **ARM_GRIPPER.xacro** file, with **ARM** being your arm's name (gen3), and if you have a gripper, **GRIPPER** being your gripper's name (robotiq_2f_85). + +**Arguments**: +- **sim** : If this argument is true, the Gazebo-specific files will be loaded. The default value is **false **. + +For example, if you want to load for simulation the Gen3 description with a Robotiq 2-F 85 gripper as the gripper, you would put in your launch file : + + \ No newline at end of file diff --git a/kortex_description/robots/gen3.xacro b/kortex_description/robots/gen3.xacro index e9d63d8f..e08409c1 100644 --- a/kortex_description/robots/gen3.xacro +++ b/kortex_description/robots/gen3.xacro @@ -5,8 +5,9 @@ + - + - + \ No newline at end of file diff --git a/kortex_description/robots/gen3_robotiq_2f_85.xacro b/kortex_description/robots/gen3_robotiq_2f_85.xacro new file mode 100644 index 00000000..d4213c31 --- /dev/null +++ b/kortex_description/robots/gen3_robotiq_2f_85.xacro @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/kortex_description/robots/kortex_robot.xacro b/kortex_description/robots/kortex_robot.xacro index d510897f..85e5dce9 100644 --- a/kortex_description/robots/kortex_robot.xacro +++ b/kortex_description/robots/kortex_robot.xacro @@ -2,11 +2,12 @@ - + + @@ -14,17 +15,52 @@ - + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + true + + + - + \ No newline at end of file diff --git a/kortex_device_manager/CMakeLists.txt b/kortex_device_manager/CMakeLists.txt deleted file mode 100644 index 3629e59c..00000000 --- a/kortex_device_manager/CMakeLists.txt +++ /dev/null @@ -1,39 +0,0 @@ - -cmake_minimum_required(VERSION 2.8.3) -project(kortex_device_manager) - -add_compile_options(-std=c++11) -add_definitions(-D_OS_UNIX) - -## find catkin and any catkin packages -find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation) - -file(GLOB_RECURSE cpp_list RELATIVE ${PROJECT_SOURCE_DIR} "src/*.cpp") - -## declare ROS messages and services -add_message_files(DIRECTORY msg) -add_message_files(DIRECTORY msg/non_generated) -add_service_files(DIRECTORY srv) - -## generate added messages and services -generate_messages(DEPENDENCIES std_msgs) - -## declare a catkin package -catkin_package() - -include_directories(include ${catkin_INCLUDE_DIRS}) -include_directories(include ${PROJECT_SOURCE_DIR}/src) -include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include) -include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/client) -include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/client_stubs) -include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/messages) -include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/common) -include_directories(include ${PROJECT_SOURCE_DIR}/src/util) - -link_directories(${PROJECT_SOURCE_DIR}/../kortex_api/lib/release) - -add_executable(${PROJECT_NAME} ${cpp_list}) - -target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES} KortexApi gcov) - -add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}_gencpp) diff --git a/kortex_device_manager/RosGeneration.py b/kortex_device_manager/RosGeneration.py deleted file mode 100644 index 26aeaad9..00000000 --- a/kortex_device_manager/RosGeneration.py +++ /dev/null @@ -1,223 +0,0 @@ -#!/usr/bin/env python -### -# KINOVA (R) KORTEX (TM) -# -# Copyright (c) 2018 Kinova inc. All rights reserved. -# -# This software may be modified and distributed -# under the terms of the BSD 3-Clause license. -# -# Refer to the LICENSE file for details. -# -### - -import sys - -from google.protobuf.compiler import plugin_pb2 as plugin -from google.protobuf import json_format as json_f - -import jinja2 - -import itertools -import json -import types -import os -import sys - -from collections import OrderedDict - -from google.protobuf.descriptor_pb2 import DescriptorProto, EnumDescriptorProto, ServiceDescriptorProto, FieldDescriptorProto, OneofDescriptorProto - -# Class that holds a protobuf message and other details needed by the generator(Jinja2 template) -class DetailedMessage: - def __init__(self, message=None): - self.message = message - self.HasOneOf = "false" - self.oneOfList = [] - -# Class that holds a protobuf service and some other details needed by the generator(Jinja2 template) -class DetailedPackage: - def __init__(self, service=None): - self.name = "NoName" - self.service = service - -# Jinja2 function to render a file from a template -def render(tpl_path, context): - path, filename = os.path.split(tpl_path) - return jinja2.Environment(loader=jinja2.FileSystemLoader(path or './')).get_template(filename).render(**context) - -# main plugin function -def generate_code(request, response): - - # The context is the object sent to the Jinja2 template. - context = types.SimpleNamespace() - context.serviceVersion = 1 - - context.detailedPackages = [] - - MainFilePath = os.path.join(".", "src/main.cpp") - function_list = [] - fileIndex = 0 - file_map = OrderedDict() - - for proto_file in request.proto_file: - file_map[proto_file.name] = proto_file - - for filename, proto_file in file_map.items(): - context.detailedPackages.append(DetailedPackage()) - context.detailedPackages[fileIndex].name = proto_file.package.split(".")[-1] - context.detailedPackages[fileIndex].filename = proto_file.name.split(".")[0] - context.detailedPackages[fileIndex].namespace = proto_file.package.replace(".", "::") - context.detailedPackages[fileIndex].HasRPC = 0 - context.detailedPackages[fileIndex].HasMessage = 0 - - HeaderFilePath = os.path.join(".", "src/node.h") - CppFilePath = os.path.join(".", "src/node.cpp") - - # We use lower case to respect ROS standard coding style. - CppProtoConverterFilePath = os.path.join(".", "src/{}_proto_converter.cpp".format(proto_file.name.split(".")[0].lower())) - HeaderProtoConverterFilePath = os.path.join(".", "src/{}_proto_converter.h".format(proto_file.name.split(".")[0].lower())) - CppRosConverterFilePath = os.path.join(".", "src/{}_ros_converter.cpp".format(proto_file.name.split(".")[0].lower())) - HeaderRosConverterFilePath = os.path.join(".", "src/{}_ros_converter.h".format(proto_file.name.split(".")[0].lower())) - - list_detailedMessage = [] - list_detailedMethod = [] - - # for every item in the current proto file - for item, package in traverse(proto_file): - context.HasOneOf = 0 - - - if isinstance(item, EnumDescriptorProto): - context.item = item - - ros_enumPath = os.path.join(".", "msg/{}.msg".format(item.name)) - - with open(ros_enumPath, 'wt') as serviceFile: - serviceFile.write(render("./templates/ros_enum.jinja2", context.__dict__)) - # if this is a message - if isinstance(item, DescriptorProto): - tempMessage = DetailedMessage(item) - context.detailedPackages[fileIndex].HasMessage = 1 - - for member in item.field: - # If a member is part of a oneof, it will have this additional field. - if member.HasField("oneof_index"): - context.HasOneOf = 1 - tempMessage.HasOneOf = "true" - else: - context.HasOneOf = 0 - tempMessage.HasOneOf = "false" - - context.item = item - - # If the proto file contains a ONEOF we need to generate a separate file to handle it. - if context.HasOneOf == 1: - - # This line gets the list of ONEOF that is in the current message. - oneOfList = item.ListFields()[-1][1] - - tempMessage.oneOfList = item.ListFields()[-1][1] - ros_oneofPath = os.path.join(".", "msg/{}_{}.msg".format(item.name, oneOfList[0].name)) - - with open(ros_oneofPath, 'wt') as serviceFile: - serviceFile.write(render("./templates/ros_oneof.jinja2", context.__dict__)) - - - list_detailedMessage.append(tempMessage) - ros_messagePath = os.path.join(".", "msg/{}.msg".format(item.name)) - - # We call Jinja2 to generate a ROS message. - with open(ros_messagePath, 'wt') as serviceFile: - serviceFile.write(render("./templates/ros_message.jinja2", context.__dict__)) - - # if this is a service (a group of methods) - if isinstance(item, ServiceDescriptorProto): - for idx, method in enumerate(item.method): - context.item = method - if "Topic" not in method.name: - function_list.append(method.name) - ros_servicePath = os.path.join(".", "srv/{}.srv".format(method.name)) - else: - function_list.append("OnNotification{}".format(method.name)) - ros_servicePath = os.path.join(".", "srv/OnNotification{}.srv".format(method.name)) - - with open(ros_servicePath, 'wt') as serviceFile: - serviceFile.write(render("./templates/ros_service.jinja2", context.__dict__)) - - context.detailedPackages[fileIndex].service = item - context.detailedPackages[fileIndex].HasRPC = 1 - - context.currentPackageName = context.detailedPackages[fileIndex].name - context.currentNamespace = proto_file.package.replace(".", "::") - context.currentFilename = context.detailedPackages[fileIndex].filename - context.item = list_detailedMessage - - if context.detailedPackages[fileIndex].HasMessage == 1: - # We call Jinja2 to generate a proto/ROS converter for every protobuf message. - with open(CppProtoConverterFilePath, 'wt') as converterFile: - converterFile.write(render("./templates/proto_converter.cpp.jinja2", context.__dict__)) - with open(HeaderProtoConverterFilePath, 'wt') as converterFile: - converterFile.write(render("./templates/proto_converter.h.jinja2", context.__dict__)) - with open(CppRosConverterFilePath, 'wt') as converterFile: - converterFile.write(render("./templates/ros_converter.cpp.jinja2", context.__dict__)) - with open(HeaderRosConverterFilePath, 'wt') as converterFile: - converterFile.write(render("./templates/ros_converter.h.jinja2", context.__dict__)) - - fileIndex = fileIndex + 1 - - context.list_function = function_list - - # We use Jinja2 to generate the ROS node. - with open(HeaderFilePath, 'wt') as nodeFile: - nodeFile.write(render("./templates/NodeServices.h.jinja2", context.__dict__)) - with open(CppFilePath, 'wt') as nodeFile: - nodeFile.write(render("./templates/NodeServices.cpp.jinja2", context.__dict__)) - with open(MainFilePath, 'wt') as mainFile: - mainFile.write(render("./templates/main.jinja2", context.__dict__)) - -def traverse(proto_file): - # recursive function that browses a protobof item - def _traverse(package, items): - for item in items: - yield item, package - - if isinstance(item, DescriptorProto): - for enum in item.enum_type: - yield enum, package - - for nested in item.nested_type: - nested_package = package + item.name - - for nested_item in _traverse(nested, nested_package): - yield nested_item, nested_package - if isinstance(item, ServiceDescriptorProto): - for rpc in item.method: - yield rpc, package - - # returns a list of everything found in the proto file - return itertools.chain( - _traverse(proto_file.package, proto_file.enum_type), - _traverse(proto_file.package, proto_file.message_type), - _traverse(proto_file.package, proto_file.service), - ) - -if __name__ == '__main__': - # reads request message from stdin - data = sys.stdin.buffer.read() - - # parses request - request = plugin.CodeGeneratorRequest() - request.ParseFromString(data) - - # creates response - response = plugin.CodeGeneratorResponse() - - # generates code - generate_code(request, response) - - # serialises response message - output = response.SerializeToString() - - # writes to stdout - sys.stdout.buffer.write(output) \ No newline at end of file diff --git a/kortex_device_manager/kortex_device_manager.sh b/kortex_device_manager/kortex_device_manager.sh deleted file mode 100755 index 011eee96..00000000 --- a/kortex_device_manager/kortex_device_manager.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -python3 -u RosGeneration.py - diff --git a/kortex_device_manager/msg/ArmState.msg b/kortex_device_manager/msg/ArmState.msg deleted file mode 100644 index 9d9db128..00000000 --- a/kortex_device_manager/msg/ArmState.msg +++ /dev/null @@ -1,22 +0,0 @@ - -uint32 ARMSTATE_UNSPECIFIED = 0 - -uint32 ARMSTATE_BASE_INITIALIZATION = 1 - -uint32 ARMSTATE_IDLE = 2 - -uint32 ARMSTATE_INITIALIZATION = 3 - -uint32 ARMSTATE_IN_FAULT = 4 - -uint32 ARMSTATE_MAINTENANCE = 5 - -uint32 ARMSTATE_SERVOING_LOW_LEVEL = 6 - -uint32 ARMSTATE_SERVOING_READY = 7 - -uint32 ARMSTATE_SERVOING_PLAYING_SEQUENCE = 8 - -uint32 ARMSTATE_SERVOING_MANUALLY_CONTROLLED = 9 - -uint32 ARMSTATE_RESERVED = 255 diff --git a/kortex_device_manager/msg/Connection.msg b/kortex_device_manager/msg/Connection.msg deleted file mode 100644 index ca08b6c8..00000000 --- a/kortex_device_manager/msg/Connection.msg +++ /dev/null @@ -1,5 +0,0 @@ - - -UserProfileHandle user_handle -string connection_information -uint32 connection_identifier \ No newline at end of file diff --git a/kortex_device_manager/msg/DeviceHandle.msg b/kortex_device_manager/msg/DeviceHandle.msg deleted file mode 100644 index 49f84366..00000000 --- a/kortex_device_manager/msg/DeviceHandle.msg +++ /dev/null @@ -1,5 +0,0 @@ - - -uint32 device_type -uint32 device_identifier -uint32 order \ No newline at end of file diff --git a/kortex_device_manager/msg/DeviceTypes.msg b/kortex_device_manager/msg/DeviceTypes.msg deleted file mode 100644 index 5a55df07..00000000 --- a/kortex_device_manager/msg/DeviceTypes.msg +++ /dev/null @@ -1,14 +0,0 @@ - -uint32 UNSPECIFIED_DEVICE_TYPE = 0 - -uint32 BASE = 1 - -uint32 VISION = 2 - -uint32 BIG_ACTUATOR = 3 - -uint32 SMALL_ACTUATOR = 4 - -uint32 INTERCONNECT = 5 - -uint32 GRIPPER = 6 diff --git a/kortex_device_manager/msg/Empty.msg b/kortex_device_manager/msg/Empty.msg deleted file mode 100644 index e69de29b..00000000 diff --git a/kortex_device_manager/msg/IPv4Settings.msg b/kortex_device_manager/msg/IPv4Settings.msg deleted file mode 100644 index 5be19d99..00000000 --- a/kortex_device_manager/msg/IPv4Settings.msg +++ /dev/null @@ -1,4 +0,0 @@ - -uint32 ipv4_address -uint32 ipv4_subnet_mask -uint32 ipv4_default_gateway \ No newline at end of file diff --git a/kortex_device_manager/msg/NotificationHandle.msg b/kortex_device_manager/msg/NotificationHandle.msg deleted file mode 100644 index bd72812b..00000000 --- a/kortex_device_manager/msg/NotificationHandle.msg +++ /dev/null @@ -1,2 +0,0 @@ - -uint32 identifier \ No newline at end of file diff --git a/kortex_device_manager/msg/NotificationOptions.msg b/kortex_device_manager/msg/NotificationOptions.msg deleted file mode 100644 index 6ff46842..00000000 --- a/kortex_device_manager/msg/NotificationOptions.msg +++ /dev/null @@ -1,5 +0,0 @@ - - -uint32 type -uint32 rate_m_sec -float32 threshold_value \ No newline at end of file diff --git a/kortex_device_manager/msg/NotificationType.msg b/kortex_device_manager/msg/NotificationType.msg deleted file mode 100644 index 881cd9a6..00000000 --- a/kortex_device_manager/msg/NotificationType.msg +++ /dev/null @@ -1,8 +0,0 @@ - -uint32 NOTIFICATION_TYPE_UNSPECIFIED = 0 - -uint32 NOTIFICATION_TYPE_THRESHOLD = 1 - -uint32 NOTIFICATION_TYPE_FIX_RATE = 2 - -uint32 NOTIFICATION_TYPE_EVENT = 3 diff --git a/kortex_device_manager/msg/Permission.msg b/kortex_device_manager/msg/Permission.msg deleted file mode 100644 index c5399e9c..00000000 --- a/kortex_device_manager/msg/Permission.msg +++ /dev/null @@ -1,8 +0,0 @@ - -uint32 NO_PERMISSION = 0 - -uint32 READ_PERMISSION = 1 - -uint32 UPDATE_PERMISSION = 2 - -uint32 DELETE_PERMISSION = 4 diff --git a/kortex_device_manager/msg/SafetyConfiguration.msg b/kortex_device_manager/msg/SafetyConfiguration.msg deleted file mode 100644 index 6f1f0819..00000000 --- a/kortex_device_manager/msg/SafetyConfiguration.msg +++ /dev/null @@ -1,7 +0,0 @@ - - -SafetyHandle handle -float32 error_threshold -float32 warning_threshold - -SafetyEnable enable \ No newline at end of file diff --git a/kortex_device_manager/msg/SafetyEnable.msg b/kortex_device_manager/msg/SafetyEnable.msg deleted file mode 100644 index 771f7400..00000000 --- a/kortex_device_manager/msg/SafetyEnable.msg +++ /dev/null @@ -1,4 +0,0 @@ - - -SafetyHandle handle -bool enable \ No newline at end of file diff --git a/kortex_device_manager/msg/SafetyHandle.msg b/kortex_device_manager/msg/SafetyHandle.msg deleted file mode 100644 index bd72812b..00000000 --- a/kortex_device_manager/msg/SafetyHandle.msg +++ /dev/null @@ -1,2 +0,0 @@ - -uint32 identifier \ No newline at end of file diff --git a/kortex_device_manager/msg/SafetyInformation.msg b/kortex_device_manager/msg/SafetyInformation.msg deleted file mode 100644 index 66be9094..00000000 --- a/kortex_device_manager/msg/SafetyInformation.msg +++ /dev/null @@ -1,16 +0,0 @@ - - -SafetyHandle handle -bool can_change_safety_state -bool has_warning_threshold -bool has_error_threshold - -uint32 limit_type -float32 default_warning_threshold -float32 default_error_threshold -float32 upper_hard_limit -float32 lower_hard_limit - -uint32 status - -uint32 unit \ No newline at end of file diff --git a/kortex_device_manager/msg/SafetyNotification.msg b/kortex_device_manager/msg/SafetyNotification.msg deleted file mode 100644 index 36d88894..00000000 --- a/kortex_device_manager/msg/SafetyNotification.msg +++ /dev/null @@ -1,11 +0,0 @@ - - -SafetyHandle safety_handle - -uint32 value - -Timestamp timestamp - -UserProfileHandle user_handle - -Connection connection \ No newline at end of file diff --git a/kortex_device_manager/msg/SafetyStatusValue.msg b/kortex_device_manager/msg/SafetyStatusValue.msg deleted file mode 100644 index 74ffcfcd..00000000 --- a/kortex_device_manager/msg/SafetyStatusValue.msg +++ /dev/null @@ -1,8 +0,0 @@ - -uint32 SAFETY_STATUS_UNSPECIFIED = 0 - -uint32 SAFETY_STATUS_WARNING = 1 - -uint32 SAFETY_STATUS_ERROR = 2 - -uint32 SAFETY_STATUS_NORMAL = 3 diff --git a/kortex_device_manager/msg/SafetyThreshold.msg b/kortex_device_manager/msg/SafetyThreshold.msg deleted file mode 100644 index b50b25e3..00000000 --- a/kortex_device_manager/msg/SafetyThreshold.msg +++ /dev/null @@ -1,4 +0,0 @@ - - -SafetyHandle handle -float32 value \ No newline at end of file diff --git a/kortex_device_manager/msg/Timestamp.msg b/kortex_device_manager/msg/Timestamp.msg deleted file mode 100644 index 5e60508c..00000000 --- a/kortex_device_manager/msg/Timestamp.msg +++ /dev/null @@ -1,3 +0,0 @@ - -uint32 sec -uint32 usec \ No newline at end of file diff --git a/kortex_device_manager/msg/Unit.msg b/kortex_device_manager/msg/Unit.msg deleted file mode 100644 index c019aeba..00000000 --- a/kortex_device_manager/msg/Unit.msg +++ /dev/null @@ -1,28 +0,0 @@ - -uint32 UNSPECIFIED_UNIT = 0 - -uint32 CELSIUS = 1 - -uint32 AMPERE = 2 - -uint32 VOLT = 3 - -uint32 METER_PER_SECOND = 4 - -uint32 DEGREE_PER_SECOND = 5 - -uint32 METER_PER_SECOND_2 = 6 - -uint32 DEGREE_PER_SECOND_2 = 7 - -uint32 NEWTON = 8 - -uint32 NEWTON_METER = 9 - -uint32 KILOGRAM = 10 - -uint32 DEGREE = 11 - -uint32 TICK = 12 - -uint32 DEGREE_PER_MILLISECOND = 13 diff --git a/kortex_device_manager/msg/UserProfileHandle.msg b/kortex_device_manager/msg/UserProfileHandle.msg deleted file mode 100644 index 3038380d..00000000 --- a/kortex_device_manager/msg/UserProfileHandle.msg +++ /dev/null @@ -1,3 +0,0 @@ - -uint32 identifier -uint32 permission \ No newline at end of file diff --git a/kortex_device_manager/msg/non_generated/KortexError.msg b/kortex_device_manager/msg/non_generated/KortexError.msg deleted file mode 100644 index 45392615..00000000 --- a/kortex_device_manager/msg/non_generated/KortexError.msg +++ /dev/null @@ -1,3 +0,0 @@ -string description -uint32 code -uint32 subCode \ No newline at end of file diff --git a/kortex_device_manager/package.xml b/kortex_device_manager/package.xml deleted file mode 100644 index 9c848b67..00000000 --- a/kortex_device_manager/package.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - kortex_device_manager - 1.0.0 - The kortex package that act as a device manager. - - KINOVA - - BSD - - catkin - roscpp - rospy - std_msgs - roscpp - rospy - std_msgs - roscpp - rospy - std_msgs - message_generation - message_runtime - - - - - - - - diff --git a/kortex_device_manager/protos/Common.options b/kortex_device_manager/protos/Common.options deleted file mode 100644 index fe8e4afe..00000000 --- a/kortex_device_manager/protos/Common.options +++ /dev/null @@ -1,16 +0,0 @@ -// -// KINOVA (R) KORTEX (TM) -// -// Copyright (c) 2018 Kinova inc. All rights reserved. -// -// This software may be modified and distributed -// under the terms of the BSD 3-Clause license. -// -// Refer to the LICENSE file for details. -// -// - -Kinova.Api.Common.DeviceTypes long_names:false -Kinova.Api.Common.SafetyStatusValue long_names:false -Kinova.Api.Common.NotificationType long_names:false -Kinova.Api.Common.Unit long_names:false \ No newline at end of file diff --git a/kortex_device_manager/protos/Common.proto b/kortex_device_manager/protos/Common.proto deleted file mode 100644 index ee69ed74..00000000 --- a/kortex_device_manager/protos/Common.proto +++ /dev/null @@ -1,140 +0,0 @@ -/* - * KINOVA (R) KORTEX (TM) - * - * Copyright (c) 2018 Kinova inc. All rights reserved. - * - * This software may be modified and distributed - * under the terms of the BSD 3-Clause license. - * - * Refer to the LICENSE file for details. - * - */ - -syntax = "proto3"; - -package Kinova.Api.Common; - -// List of admissible device types -enum DeviceTypes { - UNSPECIFIED_DEVICE_TYPE = 0; // Unspecified device type - BASE = 1; // Base module - VISION = 2; // Vision module - BIG_ACTUATOR = 3; // Big actuator module - SMALL_ACTUATOR = 4; // Small actuator module - INTERCONNECT = 5; // Interconnect module - GRIPPER = 6; // Gripper module -} - -// Identifies a device -message DeviceHandle { - DeviceTypes device_type = 1; // Device type - uint32 device_identifier = 2; // Unique device identifier (used with other services) - uint32 order = 3; // Unique value indicating the order of that device versus the others to facilitate representation -} - -// List of admissible safety statuses -enum SafetyStatusValue { - SAFETY_STATUS_UNSPECIFIED = 0; // Unspecified safety status - SAFETY_STATUS_WARNING = 1; // Warning safety reached - SAFETY_STATUS_ERROR = 2; // Error safety reached - SAFETY_STATUS_NORMAL = 3; // Safety is off -} - -// List of admissible permissions. Used as bitfields -enum Permission { - NO_PERMISSION = 0; // No permission - READ_PERMISSION = 1; // Read permission. Refers to an entity that can be read - UPDATE_PERMISSION = 2; // Update permission. Refers to an entity that can be modified - DELETE_PERMISSION = 4; // Delete permission. Refers to an entity that can be deleted -} - -// List of admissible notification types -enum NotificationType { - NOTIFICATION_TYPE_UNSPECIFIED = 0; // Unspecified notification - NOTIFICATION_TYPE_THRESHOLD = 1; // Threshold notification. Refers to a notification sent beyond a specific threshold (future) - NOTIFICATION_TYPE_FIX_RATE = 2; // Fix rate notification. Refers to a notification sent at a predetermined fix rate (future) - NOTIFICATION_TYPE_EVENT = 3; // Event type notification. Refers to a notification sent in response to an event -} - -// List of admissible units used throughout API methods -enum Unit { - UNSPECIFIED_UNIT = 0; // Unspecified unit - CELSIUS = 1; // Degree Celsius - AMPERE = 2; // Ampere - VOLT = 3; // Volt - METER_PER_SECOND = 4; // Meter per second - DEGREE_PER_SECOND = 5; // Degree per second - METER_PER_SECOND_2 = 6; // Meter per second squared - DEGREE_PER_SECOND_2 = 7; // Degree per second squared - NEWTON = 8; // Newton - NEWTON_METER =9; // Newton * meter - KILOGRAM = 10; // Kilogram - DEGREE = 11; // Degree - TICK = 12; // Tick - DEGREE_PER_MILLISECOND = 13;// Degre per millisecond -} - -// Message used when no information needs to be exchanged between client application and robot, and vice versa -message Empty { -} - -// Specifies options associated to a notification -message NotificationOptions { - NotificationType type = 1; // Type of notification - uint32 rate_m_sec = 2; // Rate value (in meters per second) (if applicable) - float threshold_value = 3; // Threshold value (if applicable) -} - -// Identifies a safety -message SafetyHandle { - uint32 identifier = 1; // Safety identifier -} - -// Identifies a notification -message NotificationHandle { - uint32 identifier = 1; // Notification identifier -} - -// Message that contains a safety event -message SafetyNotification { - SafetyHandle safety_handle = 1; // Safety handle - SafetyStatusValue value = 2; // New safety status - Timestamp timestamp = 3; // Event timestamp - UserProfileHandle user_handle = 4; // User that caused the safety event - Connection connection = 5; // Connection that caused the safety event -} - -// Timestamp based on Epoch (00:00:00 Thursday, January 1, 1970) -message Timestamp { - uint32 sec = 1; // Number of seconds that have elapsed since Epoch - uint32 usec = 2; // Number of microseconds that have elapsed since the last second (0-999999) -} - -// Identifies a user profile -message UserProfileHandle { - uint32 identifier = 1; // User profile identifier - fixed32 permission = 2; // Must use 'Permission' as bitwise -} - -// Idenfities a connection -message Connection { - UserProfileHandle user_handle = 1; // User profile handle, or set to zero if no user logged in - string connection_information = 2; // Connection info (e.g. IP address with port number) - uint32 connection_identifier = 3; // Connection identifier -} - -// List of admissible arm states -enum ArmState -{ - ARMSTATE_UNSPECIFIED = 0; // Unspecified arm state - ARMSTATE_BASE_INITIALIZATION = 1; // Cannot be reported as the Base initialization must be completed before allowing user connection - ARMSTATE_IDLE = 2; // Base initialization succeeded - ARMSTATE_INITIALIZATION = 3; // Arm is being initialized - ARMSTATE_IN_FAULT = 4; // Arm is in fault - ARMSTATE_MAINTENANCE = 5; // Arm is in maintenance - ARMSTATE_SERVOING_LOW_LEVEL = 6; // Arm is in low-level servoing mode - ARMSTATE_SERVOING_READY = 7; // Arm is ready to be controlled - ARMSTATE_SERVOING_PLAYING_SEQUENCE = 8; // Arm is currently being controlled via a sequence - ARMSTATE_SERVOING_MANUALLY_CONTROLLED = 9; // Arm is currently being controlled manually - ARMSTATE_RESERVED = 255; // For debugging, this state must never be reported outside the base. this means that a state is not mapped correctly -} \ No newline at end of file diff --git a/kortex_device_manager/protos/DeviceConfig.proto b/kortex_device_manager/protos/DeviceConfig.proto deleted file mode 100644 index a25986c1..00000000 --- a/kortex_device_manager/protos/DeviceConfig.proto +++ /dev/null @@ -1,259 +0,0 @@ -/* - * KINOVA (R) KORTEX (TM) - * - * Copyright (c) 2018 Kinova inc. All rights reserved. - * - * This software may be modified and distributed - * under the terms of the BSD 3-Clause license. - * - * Refer to the LICENSE file for details. - * - */ - -syntax = "proto3"; - -import public "Common.proto"; - -package Kinova.Api.DeviceConfig; - -// Service to get and set device configuration information -service DeviceConfig {//@PROXY_ID=9 @ERROR=Kinova.Api.Error - - // Returns the run mode for the device (future) - rpc GetRunMode (Kinova.Api.Common.Empty) returns (RunMode); //@RPC_ID=1 - - // Sets the run mode for the device (future) - rpc SetRunMode (RunMode) returns (Kinova.Api.Common.Empty); //@RPC_ID=2 - - // Returns the type for the device - rpc GetDeviceType (Kinova.Api.Common.Empty) returns (DeviceType); //@RPC_ID=3 - - // Returns the device firmware version - rpc GetFirmwareVersion (Kinova.Api.Common.Empty) returns (FirmwareVersion); //@RPC_ID=4 - - // Returns the device bootloader version - rpc GetBootloaderVersion (Kinova.Api.Common.Empty) returns (BootloaderVersion); //@RPC_ID=5 - - // Returns the device model number - rpc GetModelNumber (Kinova.Api.Common.Empty) returns (ModelNumber); //@RPC_ID=6 - - // Returns the device part number - rpc GetPartNumber (Kinova.Api.Common.Empty) returns (PartNumber); //@RPC_ID=7 - - // Returns the device serial number - rpc GetSerialNumber (Kinova.Api.Common.Empty) returns (SerialNumber); //@RPC_ID=8 - - // Returns the device MAC address - rpc GetMACAddress (Kinova.Api.Common.Empty) returns (MACAddress); //@RPC_ID=9 - - // Returns the device IPv4 settings (not implemented on Base) - rpc GetIPv4Settings (Kinova.Api.Common.Empty) returns (IPv4Settings); //@RPC_ID=10 - - // Configures the device IPv4 settings (not implemented on Base) - rpc SetIPv4Settings (IPv4Settings) returns (Kinova.Api.Common.Empty); //@RPC_ID=11 - - // Returns the device part number revision - rpc GetPartNumberRevision (Kinova.Api.Common.Empty) returns (PartNumberRevision); //@RPC_ID=12 - - // Returns the result on the device power on self test (future) - rpc GetPowerOnSelfTestResult (Kinova.Api.Common.Empty) returns (PowerOnSelfTestResult); //@RPC_ID=13 - - // Sends a request to the device to reboot - rpc RebootRequest (RebootRqst) returns (Kinova.Api.Common.Empty); //@RPC_ID=14 - - // Enables (disable) the specified safety (future) - rpc SetSafetyEnable (SafetyEnable) returns (Kinova.Api.Common.Empty); //@RPC_ID=15 - - // Sets the Error threshold for the specified safety (future) - rpc SetSafetyErrorThreshold (SafetyThreshold) returns (Kinova.Api.Common.Empty); //@RPC_ID=16 - - // Sets the Warning threshold for the specified safety (future) - rpc SetSafetyWarningThreshold (SafetyThreshold) returns (Kinova.Api.Common.Empty); //@RPC_ID=17 - - // Configures the specified safety (i.e. sets error and warning thresholds) (future) - rpc SetSafetyConfiguration (SafetyConfiguration) returns (Kinova.Api.Common.Empty); //@RPC_ID=18 - - // Retrieves configuration about the specified safety - rpc GetSafetyConfiguration (Kinova.Api.Common.SafetyHandle) returns (SafetyConfiguration); //@RPC_ID=19 - - // Retrieves information about the specified safety - rpc GetSafetyInformation (Kinova.Api.Common.SafetyHandle) returns (SafetyInformation); //@RPC_ID=20 - - // Indicates if specified safety is enabled (or disabled) - rpc GetSafetyEnable (Kinova.Api.Common.SafetyHandle) returns (SafetyEnable); //@RPC_ID=21 - - // Indicates if the specified safety is raised - rpc GetSafetyStatus (Kinova.Api.Common.SafetyHandle) returns (SafetyStatus); //@RPC_ID=22 - - // Clear all safety status for this device if they are no longer raised - rpc ClearAllSafetyStatus (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty); //@RPC_ID=23 - - // Clear a specific safety status if it is no longer raised - rpc ClearSafetyStatus (Kinova.Api.Common.SafetyHandle) returns (Kinova.Api.Common.Empty); //@RPC_ID=24 - - // Gets configuration on every safeties - rpc GetAllSafetyConfiguration (Kinova.Api.Common.Empty) returns (SafetyConfigurationList); //@RPC_ID=25 - - // Gets information on every safeties - rpc GetAllSafetyInformation (Kinova.Api.Common.Empty) returns (SafetyInformationList); //@RPC_ID=26 - - // Puts back all safety configuration to factory defaults (future) - rpc ResetSafetyDefaults (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty); //@RPC_ID=27 - - // Subscribes to safety notifications (future) - rpc SafetyTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle); //@RPC_ID=28 @PUB_SUB=Kinova.Api.Common.SafetyNotification - - // Sets the device model number (intented for Kinova Production) (future) - rpc SetModelNumber (ModelNumber) returns (Kinova.Api.Common.Empty); //@RPC_ID=29 - - // Sets the device part number (intented for Kinova Production) (future) - rpc SetPartNumber (PartNumber) returns (Kinova.Api.Common.Empty); //@RPC_ID=30 - - // Sets the device part number revision (intented for Kinova Production) (future) - rpc SetPartNumberRevision (PartNumberRevision) returns (Kinova.Api.Common.Empty); //@RPC_ID=31 - - // Sets the device serial number (intented for Kinova Production) (future) - rpc SetSerialNumber (SerialNumber) returns (Kinova.Api.Common.Empty); //@RPC_ID=32 - - // Sets the device MAC address (intented for Kinova Production) (future) - rpc SetMACAddress (MACAddress) returns (Kinova.Api.Common.Empty); //@RPC_ID=33 -} - -// Enumeration used to identify DeviceConfig current version -enum ServiceVersion { - RESERVED_0 = 0; // Reserved - CURRENT_VERSION = 1; // Current version -} - -// Options for the run mode for the device -enum RunModes { - RUN_MODE = 0; - CALIBRATION_MODE = 1; // calibration mode - CONFIGURATION_MODE = 2; // configuration mode - DEBUG_MODE = 3; // debug mode - TUNING_MODE = 4; // tuning mode -} - -// Message specifying the device type -message DeviceType { - Kinova.Api.Common.DeviceTypes device_type = 1; // Device type -} - - -// Message specifying the run mode -message RunMode { - RunModes run_mode = 1; // Run mode -} - -// Message specifying the firmware version for the device -message FirmwareVersion { - uint32 firmware_version = 1; // Firmware version -} - -// Message specifying the bootloader version for the device -message BootloaderVersion { - uint32 bootloader_version = 1; // Bootloader version -} - -// Message specifying the model number for the device -message ModelNumber { - string model_number = 1; // Model number of size 25 including null character -} - -// String specifiying the part number for the device -message PartNumber { - string part_number = 1; // Part number of size 25 including null character -} - -// String specifying the serial number for the device -message SerialNumber { - string serial_number = 1; // Serial number of size 25 including null character -} - -// MAC address for the device -message MACAddress { - bytes mac_address = 1; // MAC address -} - -// Message containing the IPv4 settings for the device, including address, subnet mask, and default gateway -message IPv4Settings { - uint32 ipv4_address = 1; // IPv4Address - uint32 ipv4_subnet_mask = 2; // IPv4SubnetMask - uint32 ipv4_default_gateway = 3; // IPv4DefaultGateway -} - -// String specifying part number revision for the device -message PartNumberRevision { - string part_number_revision = 1; // Part number revision -} - -// Result of power on self test -message PowerOnSelfTestResult { - uint32 power_on_self_test_result = 1; // Power on self test result -} - -// Reboot request with bootloader delay -message RebootRqst { - uint32 delay = 1; // Bootloader delay -} - -// Types of safeties limits -enum SafetyLimitType { - UNSPECIFIED_SAFETY_LIMIT_TYPE = 0; - MINIMAL_LIMIT = 1; // Safety that will kick in below a certain Minimum threshold (e.g. Minimum temperature safety) - MAXIMAL_LIMIT = 2; // Safety that will kick in above a certain Maximum threshold (e.g. Maximum voltage safety) - EVENT_LIMIT = 3; // Safety that will kick in in reaction to a specific event (e.g. motor drive fault) - -} - -// Information about a particular safety -message SafetyInformation { - Kinova.Api.Common.SafetyHandle handle = 1; // Safety handle that this information is about - bool can_change_safety_state = 2; // True if related safety configuration can be modified - bool has_warning_threshold = 3; // True if safety status can go in Warning - bool has_error_threshold = 4; // True if safety status can go in Error - SafetyLimitType limit_type = 5; // Safety limit type - float default_warning_threshold = 6; // Default warning threshold (if 'limit_type' is either MINIMAL_LIMIT or MAXIMAL_LIMIT and 'has_warning_threshold' is true) - float default_error_threshold = 7; // Default error threshold (if 'limit_type' is either MINIMAL_LIMIT or MAXIMAL_LIMIT and 'has_error_threshold' is true) - float upper_hard_limit = 8; // Maximal threshold value (if 'limit_type' is either MINIMAL_LIMIT or MAXIMAL_LIMIT) - float lower_hard_limit = 9; // Minimal threshold value (if 'limit_type' is either MINIMAL_LIMIT or MAXIMAL_LIMIT) - Kinova.Api.Common.SafetyStatusValue status = 11;// Current Safety status - Kinova.Api.Common.Unit unit = 12; // Unit that the safety status is in -} - - -// Array of safety information -message SafetyInformationList { - repeated SafetyInformation information = 1; -} - -// Enable or disable a specific safety -message SafetyEnable { - Kinova.Api.Common.SafetyHandle handle = 1; // Identifies safety to enable or disable - bool enable = 2; // Safety enable state -} - -// Configure threshold of a specific safety -message SafetyThreshold { - Kinova.Api.Common.SafetyHandle handle = 1; // Identifies safety to configure - float value = 2; // Safety threshold value -} - -// Configure a safety -message SafetyConfiguration { - Kinova.Api.Common.SafetyHandle handle = 1; // Identifies safety to configure - float error_threshold = 2; // Safety error threshold value - float warning_threshold = 3; // Safety warning threshold value - SafetyEnable enable = 4; // Safety enable state -} - -// Array of safety configuration -message SafetyConfigurationList { - repeated SafetyConfiguration configuration = 1; // Safety configuration -} - -// Provides safety status -message SafetyStatus { - Kinova.Api.Common.SafetyStatusValue value = 1; // Safety status (e.g. in error, warning or normal state) -} - diff --git a/kortex_device_manager/readme.md b/kortex_device_manager/readme.md deleted file mode 100644 index 8566e772..00000000 --- a/kortex_device_manager/readme.md +++ /dev/null @@ -1,133 +0,0 @@ - - -# Kortex Device Manager - -## Overview -This package implements a ROS node that allows basic communication with every device supported by the Kortex framework. Use this package if you want to: - -* List all the devices available on a specific Gen3 robot. -* Retrieve generic information of a given device. -* Get the firmware version of a given device. -* Get the serial number of a given device. -* Set the IPv4 settings of a given device. -* Get the safety information of a given device. - -### License - -The source code is released under a [BSD 3-Clause license](../LICENSE). - -**Author: Kinova inc.
-Affiliation: [Kinova inc.](https://www.kinovarobotics.com/)
-Maintainer: Kinova inc. support@kinovarobotics.com** - -This package has been tested under ROS Kinetic and Ubuntu 16.04. - -## Installation - -### Building from Source - -#### Dependencies - -- [Robot Operating System (ROS)](http://wiki.ros.org) robotics middleware -- [protobuf](https://developers.google.com/protocol-buffers/) - -```cpp -git clone https://github.com/protocolbuffers/protobuf --branch 3.5.1.1 (you must use this specific version) -``` -Follow these [instructions](https://github.com/protocolbuffers/protobuf/blob/master/src/README.md) to build and install protobuf and its compiler. - -#### Building - -To build from source, clone the latest version from this repository into your catkin workspace and compile the package using - - cd catkin_workspace/src - git clone https://github.com/Kinovarobotics/ros_kortex.git - cd ../ - sudo ./src/ros_kortex/build.sh - -## Usage - -### Launch file -The launch file for this node can be found in the [kortex_bringup](../kortex_bringup/readme.md) package. - -### Starting with rosrun - -rosrun kortex\_device\_manager kortex\_device\_manager 192.168.1.10 - -The command above would run the kortex\_device\_manager node on a Gen3 robot with IP address 192.168.1.10. - -## Nodes - -### Published Topics - -* **`/KortexError`** -

Every Kortex error will be published here.

- - | Type | Name | Description | - |:---:|:---:|:---:| - | uint32 | code | Error code, see enum in the ErrorCodes class. | - | uint32 | subcode | Sub error code, see enum in the ErrorCodes class. | - | string | description | Details of the error. | - -### Services -Most of the services supported by this node are generated from the [C++ Kortex API](https://github.com/Kinovarobotics/kortex). You can find the documentation [here](https://github.com/Kinovarobotics/kortex/blob/master/api_cpp/doc/markdown/index.md). - -Example: -If you want to call the ROS service **`GetActuatorCount`** generated by the C++ method [GetActuatorCount](https://github.com/Kinovarobotics/kortex/blob/master/api_cpp/doc/markdown/references/summary_DeviceManager.md), you would initialize your service as follows: - - ros::ServiceClient client_ClearSafetyStatus = n.serviceClient("ClearSafetyStatus"); - -### Messages -Most of the messages supported by this node are generated from the [ C++ Kortex API](https://github.com/Kinovarobotics/kortex). You can find the documentation [here](https://github.com/Kinovarobotics/kortex/blob/master/api_cpp/doc/markdown/index.md). - -#### Non-generated - -* **`KortexError`** -

Represents a Kortex API error.

- -### Protos files -The folder **protos** contains the protobuf files from where the MSG, SRV and source files are generated. The content of this folder should not be modified. - -### Template files -The folder **templates** contains all the JINJA2 files needed by the protoc generator. For more details on the generation process, see the **generation** section. - -| Filename | Description | -|:---:|:---:| -| main.jinja2 | Used to generate src/main.cpp | -| NodeServices.cpp.jinja2 | Used to generate src/node.cpp | -| NodeServices.h.jinja2 | Used to generate src/node.h | -| proto_converterCPP.jinja2 | Used to generate every src/*_proto\_converter.cpp file | -| proto_converterHeader.jinja2 | Used to generate every src/*_proto\_converter.h file | -| ros_converterCPP.jinja2 | Used to generate every src/*_ros\_converter.cpp file | -| ros_converterHeader.jinja2 | Used to generate every src/*_proto\_converter.h file | -| ros_enum.jinja2 | Use to generated every msg/*.msg file that represents a protobuf enum | -| ros_message.jinja2 | Used to generate every msg/*.msg file that represents a protobuf message | -| ros_oneof.jinja2 | Used to generate every msg/*.msg file that represents a protobuf oneof | -| ros_service.jinja2 | Used to generate every msg/*.msg file that represents a protobuf RPC | - -## Generation -

-The generation process is based on a custom protobuf plugin. Most of the generation process is in the RosGeneration.py file located in the package root directory. -

- -To launch the generation of this package: - -1. Open a terminal window. -1. Browse to the root directory of this package [YOUR\_ROS\_WORKSPACE]/src/ros\_kortex/kortex\_device\_manager/ -1. Ensure that the file kortex_driver.sh can be executed. If not then chmod +x kortex_device_manager.sh -1. Run this command: protoc --plugin=protoc-gen-custom=kortex_device_manager.sh -I./protos/ --custom_out=./build ./protos/\*.prot -1. The result of the generation will be in the following directories: - * /src - * /msg - * /srv - diff --git a/kortex_device_manager/src/common_proto_converter.cpp b/kortex_device_manager/src/common_proto_converter.cpp deleted file mode 100644 index f6bcd03f..00000000 --- a/kortex_device_manager/src/common_proto_converter.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "common_proto_converter.h" - - -int ToProtoData(kortex_device_manager::DeviceHandle input, DeviceHandle *output) -{ - output->set_device_type((Kinova::Api::Common::DeviceTypes)input.device_type); - output->set_device_identifier(input.device_identifier); - output->set_order(input.order); - - return 0; -} -int ToProtoData(kortex_device_manager::Empty input, Empty *output) -{ - - return 0; -} -int ToProtoData(kortex_device_manager::NotificationOptions input, NotificationOptions *output) -{ - output->set_type((Kinova::Api::Common::NotificationType)input.type); - output->set_rate_m_sec(input.rate_m_sec); - output->set_threshold_value(input.threshold_value); - - return 0; -} -int ToProtoData(kortex_device_manager::SafetyHandle input, SafetyHandle *output) -{ - output->set_identifier(input.identifier); - - return 0; -} -int ToProtoData(kortex_device_manager::NotificationHandle input, NotificationHandle *output) -{ - output->set_identifier(input.identifier); - - return 0; -} -int ToProtoData(kortex_device_manager::SafetyNotification input, SafetyNotification *output) -{ - ToProtoData(input.safety_handle, output->mutable_safety_handle()); - output->set_value((Kinova::Api::Common::SafetyStatusValue)input.value); - ToProtoData(input.timestamp, output->mutable_timestamp()); - ToProtoData(input.user_handle, output->mutable_user_handle()); - ToProtoData(input.connection, output->mutable_connection()); - - return 0; -} -int ToProtoData(kortex_device_manager::Timestamp input, Timestamp *output) -{ - output->set_sec(input.sec); - output->set_usec(input.usec); - - return 0; -} -int ToProtoData(kortex_device_manager::UserProfileHandle input, UserProfileHandle *output) -{ - output->set_identifier(input.identifier); - output->set_permission(input.permission); - - return 0; -} -int ToProtoData(kortex_device_manager::Connection input, Connection *output) -{ - ToProtoData(input.user_handle, output->mutable_user_handle()); - output->set_connection_information(input.connection_information); - output->set_connection_identifier(input.connection_identifier); - - return 0; -} diff --git a/kortex_device_manager/src/common_proto_converter.h b/kortex_device_manager/src/common_proto_converter.h deleted file mode 100644 index c16d8738..00000000 --- a/kortex_device_manager/src/common_proto_converter.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_CommonPROTO_CONVERTER_H_ -#define _KORTEX_CommonPROTO_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "kortex_device_manager/DeviceHandle.h" -#include "kortex_device_manager/Empty.h" -#include "kortex_device_manager/NotificationOptions.h" -#include "kortex_device_manager/SafetyHandle.h" -#include "kortex_device_manager/NotificationHandle.h" -#include "kortex_device_manager/SafetyNotification.h" -#include "kortex_device_manager/Timestamp.h" -#include "kortex_device_manager/UserProfileHandle.h" -#include "kortex_device_manager/Connection.h" - - -using namespace Kinova::Api::Common; - -int ToProtoData(kortex_device_manager::DeviceHandle intput, DeviceHandle *output); -int ToProtoData(kortex_device_manager::Empty intput, Empty *output); -int ToProtoData(kortex_device_manager::NotificationOptions intput, NotificationOptions *output); -int ToProtoData(kortex_device_manager::SafetyHandle intput, SafetyHandle *output); -int ToProtoData(kortex_device_manager::NotificationHandle intput, NotificationHandle *output); -int ToProtoData(kortex_device_manager::SafetyNotification intput, SafetyNotification *output); -int ToProtoData(kortex_device_manager::Timestamp intput, Timestamp *output); -int ToProtoData(kortex_device_manager::UserProfileHandle intput, UserProfileHandle *output); -int ToProtoData(kortex_device_manager::Connection intput, Connection *output); - -#endif \ No newline at end of file diff --git a/kortex_device_manager/src/common_ros_converter.cpp b/kortex_device_manager/src/common_ros_converter.cpp deleted file mode 100644 index bdfd6e33..00000000 --- a/kortex_device_manager/src/common_ros_converter.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "common_ros_converter.h" - - -int ToRosData(DeviceHandle input, kortex_device_manager::DeviceHandle &output) -{ - output.device_type = input.device_type(); - output.device_identifier = input.device_identifier(); - output.order = input.order(); - - return 0; -} -int ToRosData(Empty input, kortex_device_manager::Empty &output) -{ - - return 0; -} -int ToRosData(NotificationOptions input, kortex_device_manager::NotificationOptions &output) -{ - output.type = input.type(); - output.rate_m_sec = input.rate_m_sec(); - output.threshold_value = input.threshold_value(); - - return 0; -} -int ToRosData(SafetyHandle input, kortex_device_manager::SafetyHandle &output) -{ - output.identifier = input.identifier(); - - return 0; -} -int ToRosData(NotificationHandle input, kortex_device_manager::NotificationHandle &output) -{ - output.identifier = input.identifier(); - - return 0; -} -int ToRosData(SafetyNotification input, kortex_device_manager::SafetyNotification &output) -{ - ToRosData(input.safety_handle(), output.safety_handle); - output.value = input.value(); - ToRosData(input.timestamp(), output.timestamp); - ToRosData(input.user_handle(), output.user_handle); - ToRosData(input.connection(), output.connection); - - return 0; -} -int ToRosData(Timestamp input, kortex_device_manager::Timestamp &output) -{ - output.sec = input.sec(); - output.usec = input.usec(); - - return 0; -} -int ToRosData(UserProfileHandle input, kortex_device_manager::UserProfileHandle &output) -{ - output.identifier = input.identifier(); - output.permission = input.permission(); - - return 0; -} -int ToRosData(Connection input, kortex_device_manager::Connection &output) -{ - ToRosData(input.user_handle(), output.user_handle); - output.connection_information = input.connection_information(); - output.connection_identifier = input.connection_identifier(); - - return 0; -} diff --git a/kortex_device_manager/src/common_ros_converter.h b/kortex_device_manager/src/common_ros_converter.h deleted file mode 100644 index 164b3a3f..00000000 --- a/kortex_device_manager/src/common_ros_converter.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_CommonROS_CONVERTER_H_ -#define _KORTEX_CommonROS_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "kortex_device_manager/DeviceHandle.h" -#include "kortex_device_manager/Empty.h" -#include "kortex_device_manager/NotificationOptions.h" -#include "kortex_device_manager/SafetyHandle.h" -#include "kortex_device_manager/NotificationHandle.h" -#include "kortex_device_manager/SafetyNotification.h" -#include "kortex_device_manager/Timestamp.h" -#include "kortex_device_manager/UserProfileHandle.h" -#include "kortex_device_manager/Connection.h" - - -using namespace Kinova::Api::Common; - -int ToRosData(DeviceHandle input, kortex_device_manager::DeviceHandle &output); -int ToRosData(Empty input, kortex_device_manager::Empty &output); -int ToRosData(NotificationOptions input, kortex_device_manager::NotificationOptions &output); -int ToRosData(SafetyHandle input, kortex_device_manager::SafetyHandle &output); -int ToRosData(NotificationHandle input, kortex_device_manager::NotificationHandle &output); -int ToRosData(SafetyNotification input, kortex_device_manager::SafetyNotification &output); -int ToRosData(Timestamp input, kortex_device_manager::Timestamp &output); -int ToRosData(UserProfileHandle input, kortex_device_manager::UserProfileHandle &output); -int ToRosData(Connection input, kortex_device_manager::Connection &output); - -#endif \ No newline at end of file diff --git a/kortex_device_manager/src/deviceconfig_proto_converter.cpp b/kortex_device_manager/src/deviceconfig_proto_converter.cpp deleted file mode 100644 index a3a2d11b..00000000 --- a/kortex_device_manager/src/deviceconfig_proto_converter.cpp +++ /dev/null @@ -1,160 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "deviceconfig_proto_converter.h" - -#include "common_proto_converter.h" - - -int ToProtoData(kortex_device_manager::DeviceType input, DeviceType *output) -{ - output->set_device_type((Kinova::Api::Common::DeviceTypes)input.device_type); - - return 0; -} -int ToProtoData(kortex_device_manager::RunMode input, RunMode *output) -{ - output->set_run_mode((Kinova::Api::DeviceConfig::RunModes)input.run_mode); - - return 0; -} -int ToProtoData(kortex_device_manager::FirmwareVersion input, FirmwareVersion *output) -{ - output->set_firmware_version(input.firmware_version); - - return 0; -} -int ToProtoData(kortex_device_manager::BootloaderVersion input, BootloaderVersion *output) -{ - output->set_bootloader_version(input.bootloader_version); - - return 0; -} -int ToProtoData(kortex_device_manager::ModelNumber input, ModelNumber *output) -{ - output->set_model_number(input.model_number); - - return 0; -} -int ToProtoData(kortex_device_manager::PartNumber input, PartNumber *output) -{ - output->set_part_number(input.part_number); - - return 0; -} -int ToProtoData(kortex_device_manager::SerialNumber input, SerialNumber *output) -{ - output->set_serial_number(input.serial_number); - - return 0; -} -int ToProtoData(kortex_device_manager::MACAddress input, MACAddress *output) -{ - output->set_mac_address(std::string(input.mac_address.begin(), input.mac_address.end())); - - return 0; -} -int ToProtoData(kortex_device_manager::IPv4Settings input, IPv4Settings *output) -{ - output->set_ipv4_address(input.ipv4_address); - output->set_ipv4_subnet_mask(input.ipv4_subnet_mask); - output->set_ipv4_default_gateway(input.ipv4_default_gateway); - - return 0; -} -int ToProtoData(kortex_device_manager::PartNumberRevision input, PartNumberRevision *output) -{ - output->set_part_number_revision(input.part_number_revision); - - return 0; -} -int ToProtoData(kortex_device_manager::PowerOnSelfTestResult input, PowerOnSelfTestResult *output) -{ - output->set_power_on_self_test_result(input.power_on_self_test_result); - - return 0; -} -int ToProtoData(kortex_device_manager::RebootRqst input, RebootRqst *output) -{ - output->set_delay(input.delay); - - return 0; -} -int ToProtoData(kortex_device_manager::SafetyInformation input, SafetyInformation *output) -{ - ToProtoData(input.handle, output->mutable_handle()); - output->set_can_change_safety_state(input.can_change_safety_state); - output->set_has_warning_threshold(input.has_warning_threshold); - output->set_has_error_threshold(input.has_error_threshold); - output->set_limit_type((Kinova::Api::DeviceConfig::SafetyLimitType)input.limit_type); - output->set_default_warning_threshold(input.default_warning_threshold); - output->set_default_error_threshold(input.default_error_threshold); - output->set_upper_hard_limit(input.upper_hard_limit); - output->set_lower_hard_limit(input.lower_hard_limit); - output->set_status((Kinova::Api::Common::SafetyStatusValue)input.status); - output->set_unit((Kinova::Api::Common::Unit)input.unit); - - return 0; -} -int ToProtoData(kortex_device_manager::SafetyInformationList input, SafetyInformationList *output) -{ - output->clear_information(); - for(int i = 0; i < input.information.size(); i++) - { - ToProtoData(input.information[i], output->add_information()); - } - - return 0; -} -int ToProtoData(kortex_device_manager::SafetyEnable input, SafetyEnable *output) -{ - ToProtoData(input.handle, output->mutable_handle()); - output->set_enable(input.enable); - - return 0; -} -int ToProtoData(kortex_device_manager::SafetyThreshold input, SafetyThreshold *output) -{ - ToProtoData(input.handle, output->mutable_handle()); - output->set_value(input.value); - - return 0; -} -int ToProtoData(kortex_device_manager::SafetyConfiguration input, SafetyConfiguration *output) -{ - ToProtoData(input.handle, output->mutable_handle()); - output->set_error_threshold(input.error_threshold); - output->set_warning_threshold(input.warning_threshold); - ToProtoData(input.enable, output->mutable_enable()); - - return 0; -} -int ToProtoData(kortex_device_manager::SafetyConfigurationList input, SafetyConfigurationList *output) -{ - output->clear_configuration(); - for(int i = 0; i < input.configuration.size(); i++) - { - ToProtoData(input.configuration[i], output->add_configuration()); - } - - return 0; -} -int ToProtoData(kortex_device_manager::SafetyStatus input, SafetyStatus *output) -{ - output->set_value((Kinova::Api::Common::SafetyStatusValue)input.value); - - return 0; -} diff --git a/kortex_device_manager/src/deviceconfig_proto_converter.h b/kortex_device_manager/src/deviceconfig_proto_converter.h deleted file mode 100644 index 9be3f0ba..00000000 --- a/kortex_device_manager/src/deviceconfig_proto_converter.h +++ /dev/null @@ -1,86 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_DeviceConfigPROTO_CONVERTER_H_ -#define _KORTEX_DeviceConfigPROTO_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "kortex_device_manager/DeviceType.h" -#include "kortex_device_manager/RunMode.h" -#include "kortex_device_manager/FirmwareVersion.h" -#include "kortex_device_manager/BootloaderVersion.h" -#include "kortex_device_manager/ModelNumber.h" -#include "kortex_device_manager/PartNumber.h" -#include "kortex_device_manager/SerialNumber.h" -#include "kortex_device_manager/MACAddress.h" -#include "kortex_device_manager/IPv4Settings.h" -#include "kortex_device_manager/PartNumberRevision.h" -#include "kortex_device_manager/PowerOnSelfTestResult.h" -#include "kortex_device_manager/RebootRqst.h" -#include "kortex_device_manager/SafetyInformation.h" -#include "kortex_device_manager/SafetyInformationList.h" -#include "kortex_device_manager/SafetyEnable.h" -#include "kortex_device_manager/SafetyThreshold.h" -#include "kortex_device_manager/SafetyConfiguration.h" -#include "kortex_device_manager/SafetyConfigurationList.h" -#include "kortex_device_manager/SafetyStatus.h" - - -using namespace Kinova::Api::DeviceConfig; - -int ToProtoData(kortex_device_manager::DeviceType intput, DeviceType *output); -int ToProtoData(kortex_device_manager::RunMode intput, RunMode *output); -int ToProtoData(kortex_device_manager::FirmwareVersion intput, FirmwareVersion *output); -int ToProtoData(kortex_device_manager::BootloaderVersion intput, BootloaderVersion *output); -int ToProtoData(kortex_device_manager::ModelNumber intput, ModelNumber *output); -int ToProtoData(kortex_device_manager::PartNumber intput, PartNumber *output); -int ToProtoData(kortex_device_manager::SerialNumber intput, SerialNumber *output); -int ToProtoData(kortex_device_manager::MACAddress intput, MACAddress *output); -int ToProtoData(kortex_device_manager::IPv4Settings intput, IPv4Settings *output); -int ToProtoData(kortex_device_manager::PartNumberRevision intput, PartNumberRevision *output); -int ToProtoData(kortex_device_manager::PowerOnSelfTestResult intput, PowerOnSelfTestResult *output); -int ToProtoData(kortex_device_manager::RebootRqst intput, RebootRqst *output); -int ToProtoData(kortex_device_manager::SafetyInformation intput, SafetyInformation *output); -int ToProtoData(kortex_device_manager::SafetyInformationList intput, SafetyInformationList *output); -int ToProtoData(kortex_device_manager::SafetyEnable intput, SafetyEnable *output); -int ToProtoData(kortex_device_manager::SafetyThreshold intput, SafetyThreshold *output); -int ToProtoData(kortex_device_manager::SafetyConfiguration intput, SafetyConfiguration *output); -int ToProtoData(kortex_device_manager::SafetyConfigurationList intput, SafetyConfigurationList *output); -int ToProtoData(kortex_device_manager::SafetyStatus intput, SafetyStatus *output); - -#endif \ No newline at end of file diff --git a/kortex_device_manager/src/deviceconfig_ros_converter.cpp b/kortex_device_manager/src/deviceconfig_ros_converter.cpp deleted file mode 100644 index 1fefb387..00000000 --- a/kortex_device_manager/src/deviceconfig_ros_converter.cpp +++ /dev/null @@ -1,164 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "deviceconfig_ros_converter.h" - -#include "common_ros_converter.h" - - -int ToRosData(DeviceType input, kortex_device_manager::DeviceType &output) -{ - output.device_type = input.device_type(); - - return 0; -} -int ToRosData(RunMode input, kortex_device_manager::RunMode &output) -{ - output.run_mode = input.run_mode(); - - return 0; -} -int ToRosData(FirmwareVersion input, kortex_device_manager::FirmwareVersion &output) -{ - output.firmware_version = input.firmware_version(); - - return 0; -} -int ToRosData(BootloaderVersion input, kortex_device_manager::BootloaderVersion &output) -{ - output.bootloader_version = input.bootloader_version(); - - return 0; -} -int ToRosData(ModelNumber input, kortex_device_manager::ModelNumber &output) -{ - output.model_number = input.model_number(); - - return 0; -} -int ToRosData(PartNumber input, kortex_device_manager::PartNumber &output) -{ - output.part_number = input.part_number(); - - return 0; -} -int ToRosData(SerialNumber input, kortex_device_manager::SerialNumber &output) -{ - output.serial_number = input.serial_number(); - - return 0; -} -int ToRosData(MACAddress input, kortex_device_manager::MACAddress &output) -{ - output.mac_address = std::vector(input.mac_address().begin(), input.mac_address().end()); - - return 0; -} -int ToRosData(IPv4Settings input, kortex_device_manager::IPv4Settings &output) -{ - output.ipv4_address = input.ipv4_address(); - output.ipv4_subnet_mask = input.ipv4_subnet_mask(); - output.ipv4_default_gateway = input.ipv4_default_gateway(); - - return 0; -} -int ToRosData(PartNumberRevision input, kortex_device_manager::PartNumberRevision &output) -{ - output.part_number_revision = input.part_number_revision(); - - return 0; -} -int ToRosData(PowerOnSelfTestResult input, kortex_device_manager::PowerOnSelfTestResult &output) -{ - output.power_on_self_test_result = input.power_on_self_test_result(); - - return 0; -} -int ToRosData(RebootRqst input, kortex_device_manager::RebootRqst &output) -{ - output.delay = input.delay(); - - return 0; -} -int ToRosData(SafetyInformation input, kortex_device_manager::SafetyInformation &output) -{ - ToRosData(input.handle(), output.handle); - output.can_change_safety_state = input.can_change_safety_state(); - output.has_warning_threshold = input.has_warning_threshold(); - output.has_error_threshold = input.has_error_threshold(); - output.limit_type = input.limit_type(); - output.default_warning_threshold = input.default_warning_threshold(); - output.default_error_threshold = input.default_error_threshold(); - output.upper_hard_limit = input.upper_hard_limit(); - output.lower_hard_limit = input.lower_hard_limit(); - output.status = input.status(); - output.unit = input.unit(); - - return 0; -} -int ToRosData(SafetyInformationList input, kortex_device_manager::SafetyInformationList &output) -{ - output.information.clear(); - for(int i = 0; i < input.information_size(); i++) - { - kortex_device_manager::SafetyInformation temp; - ToRosData(input.information(i), temp); - output.information.push_back(temp); - } - - return 0; -} -int ToRosData(SafetyEnable input, kortex_device_manager::SafetyEnable &output) -{ - ToRosData(input.handle(), output.handle); - output.enable = input.enable(); - - return 0; -} -int ToRosData(SafetyThreshold input, kortex_device_manager::SafetyThreshold &output) -{ - ToRosData(input.handle(), output.handle); - output.value = input.value(); - - return 0; -} -int ToRosData(SafetyConfiguration input, kortex_device_manager::SafetyConfiguration &output) -{ - ToRosData(input.handle(), output.handle); - output.error_threshold = input.error_threshold(); - output.warning_threshold = input.warning_threshold(); - ToRosData(input.enable(), output.enable); - - return 0; -} -int ToRosData(SafetyConfigurationList input, kortex_device_manager::SafetyConfigurationList &output) -{ - output.configuration.clear(); - for(int i = 0; i < input.configuration_size(); i++) - { - kortex_device_manager::SafetyConfiguration temp; - ToRosData(input.configuration(i), temp); - output.configuration.push_back(temp); - } - - return 0; -} -int ToRosData(SafetyStatus input, kortex_device_manager::SafetyStatus &output) -{ - output.value = input.value(); - - return 0; -} diff --git a/kortex_device_manager/src/deviceconfig_ros_converter.h b/kortex_device_manager/src/deviceconfig_ros_converter.h deleted file mode 100644 index cc1632c7..00000000 --- a/kortex_device_manager/src/deviceconfig_ros_converter.h +++ /dev/null @@ -1,86 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_DeviceConfigROS_CONVERTER_H_ -#define _KORTEX_DeviceConfigROS_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "kortex_device_manager/DeviceType.h" -#include "kortex_device_manager/RunMode.h" -#include "kortex_device_manager/FirmwareVersion.h" -#include "kortex_device_manager/BootloaderVersion.h" -#include "kortex_device_manager/ModelNumber.h" -#include "kortex_device_manager/PartNumber.h" -#include "kortex_device_manager/SerialNumber.h" -#include "kortex_device_manager/MACAddress.h" -#include "kortex_device_manager/IPv4Settings.h" -#include "kortex_device_manager/PartNumberRevision.h" -#include "kortex_device_manager/PowerOnSelfTestResult.h" -#include "kortex_device_manager/RebootRqst.h" -#include "kortex_device_manager/SafetyInformation.h" -#include "kortex_device_manager/SafetyInformationList.h" -#include "kortex_device_manager/SafetyEnable.h" -#include "kortex_device_manager/SafetyThreshold.h" -#include "kortex_device_manager/SafetyConfiguration.h" -#include "kortex_device_manager/SafetyConfigurationList.h" -#include "kortex_device_manager/SafetyStatus.h" - - -using namespace Kinova::Api::DeviceConfig; - -int ToRosData(DeviceType input, kortex_device_manager::DeviceType &output); -int ToRosData(RunMode input, kortex_device_manager::RunMode &output); -int ToRosData(FirmwareVersion input, kortex_device_manager::FirmwareVersion &output); -int ToRosData(BootloaderVersion input, kortex_device_manager::BootloaderVersion &output); -int ToRosData(ModelNumber input, kortex_device_manager::ModelNumber &output); -int ToRosData(PartNumber input, kortex_device_manager::PartNumber &output); -int ToRosData(SerialNumber input, kortex_device_manager::SerialNumber &output); -int ToRosData(MACAddress input, kortex_device_manager::MACAddress &output); -int ToRosData(IPv4Settings input, kortex_device_manager::IPv4Settings &output); -int ToRosData(PartNumberRevision input, kortex_device_manager::PartNumberRevision &output); -int ToRosData(PowerOnSelfTestResult input, kortex_device_manager::PowerOnSelfTestResult &output); -int ToRosData(RebootRqst input, kortex_device_manager::RebootRqst &output); -int ToRosData(SafetyInformation input, kortex_device_manager::SafetyInformation &output); -int ToRosData(SafetyInformationList input, kortex_device_manager::SafetyInformationList &output); -int ToRosData(SafetyEnable input, kortex_device_manager::SafetyEnable &output); -int ToRosData(SafetyThreshold input, kortex_device_manager::SafetyThreshold &output); -int ToRosData(SafetyConfiguration input, kortex_device_manager::SafetyConfiguration &output); -int ToRosData(SafetyConfigurationList input, kortex_device_manager::SafetyConfigurationList &output); -int ToRosData(SafetyStatus input, kortex_device_manager::SafetyStatus &output); - -#endif \ No newline at end of file diff --git a/kortex_device_manager/src/devicemanager_proto_converter.cpp b/kortex_device_manager/src/devicemanager_proto_converter.cpp deleted file mode 100644 index ec89c604..00000000 --- a/kortex_device_manager/src/devicemanager_proto_converter.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "devicemanager_proto_converter.h" - -#include "common_proto_converter.h" - - -int ToProtoData(kortex_device_manager::DeviceHandles input, DeviceHandles *output) -{ - output->clear_device_handle(); - for(int i = 0; i < input.device_handle.size(); i++) - { - ToProtoData(input.device_handle[i], output->add_device_handle()); - } - - return 0; -} diff --git a/kortex_device_manager/src/devicemanager_proto_converter.h b/kortex_device_manager/src/devicemanager_proto_converter.h deleted file mode 100644 index d04d1eae..00000000 --- a/kortex_device_manager/src/devicemanager_proto_converter.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_DeviceManagerPROTO_CONVERTER_H_ -#define _KORTEX_DeviceManagerPROTO_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "kortex_device_manager/DeviceHandles.h" - - -using namespace Kinova::Api::DeviceManager; - -int ToProtoData(kortex_device_manager::DeviceHandles intput, DeviceHandles *output); - -#endif \ No newline at end of file diff --git a/kortex_device_manager/src/devicemanager_ros_converter.cpp b/kortex_device_manager/src/devicemanager_ros_converter.cpp deleted file mode 100644 index 35027ed0..00000000 --- a/kortex_device_manager/src/devicemanager_ros_converter.cpp +++ /dev/null @@ -1,33 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "devicemanager_ros_converter.h" - -#include "common_ros_converter.h" - - -int ToRosData(DeviceHandles input, kortex_device_manager::DeviceHandles &output) -{ - output.device_handle.clear(); - for(int i = 0; i < input.device_handle_size(); i++) - { - kortex_device_manager::DeviceHandle temp; - ToRosData(input.device_handle(i), temp); - output.device_handle.push_back(temp); - } - - return 0; -} diff --git a/kortex_device_manager/src/devicemanager_ros_converter.h b/kortex_device_manager/src/devicemanager_ros_converter.h deleted file mode 100644 index 2d319260..00000000 --- a/kortex_device_manager/src/devicemanager_ros_converter.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_DeviceManagerROS_CONVERTER_H_ -#define _KORTEX_DeviceManagerROS_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "kortex_device_manager/DeviceHandles.h" - - -using namespace Kinova::Api::DeviceManager; - -int ToRosData(DeviceHandles input, kortex_device_manager::DeviceHandles &output); - -#endif \ No newline at end of file diff --git a/kortex_device_manager/src/main.cpp b/kortex_device_manager/src/main.cpp deleted file mode 100644 index 9585736a..00000000 --- a/kortex_device_manager/src/main.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "node.h" -#include "math_util.h" - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "DeviceManager"); - - ros::NodeHandle n; - bool valid_ip = false; - - if(argc > 1) - { - ROS_INFO("Connecting to IP = %s", argv[1]); - } - else - { - ROS_INFO("You need to provide an IP adresse as a parameter. ex: rosrun package node 192.168.1.1"); - ros::shutdown(); - return 0; - } - - KortexDeviceManager services_object(argv[1], n); - - ros::ServiceServer serviceGetRunMode = n.advertiseService("GetRunMode", &KortexDeviceManager::GetRunMode, &services_object); - ros::ServiceServer serviceSetRunMode = n.advertiseService("SetRunMode", &KortexDeviceManager::SetRunMode, &services_object); - ros::ServiceServer serviceGetDeviceType = n.advertiseService("GetDeviceType", &KortexDeviceManager::GetDeviceType, &services_object); - ros::ServiceServer serviceGetFirmwareVersion = n.advertiseService("GetFirmwareVersion", &KortexDeviceManager::GetFirmwareVersion, &services_object); - ros::ServiceServer serviceGetBootloaderVersion = n.advertiseService("GetBootloaderVersion", &KortexDeviceManager::GetBootloaderVersion, &services_object); - ros::ServiceServer serviceGetModelNumber = n.advertiseService("GetModelNumber", &KortexDeviceManager::GetModelNumber, &services_object); - ros::ServiceServer serviceGetPartNumber = n.advertiseService("GetPartNumber", &KortexDeviceManager::GetPartNumber, &services_object); - ros::ServiceServer serviceGetSerialNumber = n.advertiseService("GetSerialNumber", &KortexDeviceManager::GetSerialNumber, &services_object); - ros::ServiceServer serviceGetMACAddress = n.advertiseService("GetMACAddress", &KortexDeviceManager::GetMACAddress, &services_object); - ros::ServiceServer serviceGetIPv4Settings = n.advertiseService("GetIPv4Settings", &KortexDeviceManager::GetIPv4Settings, &services_object); - ros::ServiceServer serviceSetIPv4Settings = n.advertiseService("SetIPv4Settings", &KortexDeviceManager::SetIPv4Settings, &services_object); - ros::ServiceServer serviceGetPartNumberRevision = n.advertiseService("GetPartNumberRevision", &KortexDeviceManager::GetPartNumberRevision, &services_object); - ros::ServiceServer serviceGetPowerOnSelfTestResult = n.advertiseService("GetPowerOnSelfTestResult", &KortexDeviceManager::GetPowerOnSelfTestResult, &services_object); - ros::ServiceServer serviceRebootRequest = n.advertiseService("RebootRequest", &KortexDeviceManager::RebootRequest, &services_object); - ros::ServiceServer serviceSetSafetyEnable = n.advertiseService("SetSafetyEnable", &KortexDeviceManager::SetSafetyEnable, &services_object); - ros::ServiceServer serviceSetSafetyErrorThreshold = n.advertiseService("SetSafetyErrorThreshold", &KortexDeviceManager::SetSafetyErrorThreshold, &services_object); - ros::ServiceServer serviceSetSafetyWarningThreshold = n.advertiseService("SetSafetyWarningThreshold", &KortexDeviceManager::SetSafetyWarningThreshold, &services_object); - ros::ServiceServer serviceSetSafetyConfiguration = n.advertiseService("SetSafetyConfiguration", &KortexDeviceManager::SetSafetyConfiguration, &services_object); - ros::ServiceServer serviceGetSafetyConfiguration = n.advertiseService("GetSafetyConfiguration", &KortexDeviceManager::GetSafetyConfiguration, &services_object); - ros::ServiceServer serviceGetSafetyInformation = n.advertiseService("GetSafetyInformation", &KortexDeviceManager::GetSafetyInformation, &services_object); - ros::ServiceServer serviceGetSafetyEnable = n.advertiseService("GetSafetyEnable", &KortexDeviceManager::GetSafetyEnable, &services_object); - ros::ServiceServer serviceGetSafetyStatus = n.advertiseService("GetSafetyStatus", &KortexDeviceManager::GetSafetyStatus, &services_object); - ros::ServiceServer serviceClearAllSafetyStatus = n.advertiseService("ClearAllSafetyStatus", &KortexDeviceManager::ClearAllSafetyStatus, &services_object); - ros::ServiceServer serviceClearSafetyStatus = n.advertiseService("ClearSafetyStatus", &KortexDeviceManager::ClearSafetyStatus, &services_object); - ros::ServiceServer serviceGetAllSafetyConfiguration = n.advertiseService("GetAllSafetyConfiguration", &KortexDeviceManager::GetAllSafetyConfiguration, &services_object); - ros::ServiceServer serviceGetAllSafetyInformation = n.advertiseService("GetAllSafetyInformation", &KortexDeviceManager::GetAllSafetyInformation, &services_object); - ros::ServiceServer serviceResetSafetyDefaults = n.advertiseService("ResetSafetyDefaults", &KortexDeviceManager::ResetSafetyDefaults, &services_object); - ros::ServiceServer serviceOnNotificationSafetyTopic = n.advertiseService("OnNotificationSafetyTopic", &KortexDeviceManager::OnNotificationSafetyTopic, &services_object); - ros::ServiceServer serviceSetModelNumber = n.advertiseService("SetModelNumber", &KortexDeviceManager::SetModelNumber, &services_object); - ros::ServiceServer serviceSetPartNumber = n.advertiseService("SetPartNumber", &KortexDeviceManager::SetPartNumber, &services_object); - ros::ServiceServer serviceSetPartNumberRevision = n.advertiseService("SetPartNumberRevision", &KortexDeviceManager::SetPartNumberRevision, &services_object); - ros::ServiceServer serviceSetSerialNumber = n.advertiseService("SetSerialNumber", &KortexDeviceManager::SetSerialNumber, &services_object); - ros::ServiceServer serviceSetMACAddress = n.advertiseService("SetMACAddress", &KortexDeviceManager::SetMACAddress, &services_object); - ros::ServiceServer serviceReadAllDevices = n.advertiseService("ReadAllDevices", &KortexDeviceManager::ReadAllDevices, &services_object); - - - ROS_INFO("Node's services initialized correctly."); - - ros::spin(); - - return 1; -} \ No newline at end of file diff --git a/kortex_device_manager/src/node.cpp b/kortex_device_manager/src/node.cpp deleted file mode 100644 index 42cf25f1..00000000 --- a/kortex_device_manager/src/node.cpp +++ /dev/null @@ -1,1081 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "node.h" -#include "common_ros_converter.h" -#include "common_proto_converter.h" -#include "deviceconfig_ros_converter.h" -#include "deviceconfig_proto_converter.h" -#include "devicemanager_ros_converter.h" -#include "devicemanager_proto_converter.h" -KortexDeviceManager::KortexDeviceManager(char* ip, ros::NodeHandle& n) : m_n(n) -{ - m_transport = new TransportClientUdp(); - m_transport->connect(ip, 10000); - - m_router = new RouterClient(m_transport, [](KError err) { cout << "_________ callback error _________" << err.toString(); }); - - - m_deviceconfig = new DeviceConfig::DeviceConfigClient(m_router); - m_devicemanager = new DeviceManager::DeviceManagerClient(m_router); - m_SessionManager = new SessionManager(m_router); - auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); - - createSessionInfo.set_username("admin"); - createSessionInfo.set_password("admin"); - createSessionInfo.set_session_inactivity_timeout(35000); - - m_SessionManager->CreateSession(createSessionInfo); - std::cout << "\nSession Created\n"; - - m_pub_Error = m_n.advertise("KortexError", 1000); - m_pub_SafetyTopic = m_n.advertise("SafetyTopic", 1000);std::this_thread::sleep_for(std::chrono::milliseconds(2000)); -} - - - - -bool KortexDeviceManager::GetRunMode(kortex_device_manager::GetRunMode::Request &req, kortex_device_manager::GetRunMode::Response &res) -{ - Empty input; - RunMode output; - kortex_device_manager::KortexError result_error; - - try - { - output = m_deviceconfig->GetRunMode(); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool KortexDeviceManager::SetRunMode(kortex_device_manager::SetRunMode::Request &req, kortex_device_manager::SetRunMode::Response &res) -{ - RunMode input; - ToProtoData(req.input, &input); - Empty output; - kortex_device_manager::KortexError result_error; - - try - { - m_deviceconfig->SetRunMode(input); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool KortexDeviceManager::GetDeviceType(kortex_device_manager::GetDeviceType::Request &req, kortex_device_manager::GetDeviceType::Response &res) -{ - Empty input; - DeviceType output; - kortex_device_manager::KortexError result_error; - - try - { - output = m_deviceconfig->GetDeviceType(); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool KortexDeviceManager::GetFirmwareVersion(kortex_device_manager::GetFirmwareVersion::Request &req, kortex_device_manager::GetFirmwareVersion::Response &res) -{ - Empty input; - FirmwareVersion output; - kortex_device_manager::KortexError result_error; - - try - { - output = m_deviceconfig->GetFirmwareVersion(); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool KortexDeviceManager::GetBootloaderVersion(kortex_device_manager::GetBootloaderVersion::Request &req, kortex_device_manager::GetBootloaderVersion::Response &res) -{ - Empty input; - BootloaderVersion output; - kortex_device_manager::KortexError result_error; - - try - { - output = m_deviceconfig->GetBootloaderVersion(); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool KortexDeviceManager::GetModelNumber(kortex_device_manager::GetModelNumber::Request &req, kortex_device_manager::GetModelNumber::Response &res) -{ - Empty input; - ModelNumber output; - kortex_device_manager::KortexError result_error; - - try - { - output = m_deviceconfig->GetModelNumber(); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool KortexDeviceManager::GetPartNumber(kortex_device_manager::GetPartNumber::Request &req, kortex_device_manager::GetPartNumber::Response &res) -{ - Empty input; - PartNumber output; - kortex_device_manager::KortexError result_error; - - try - { - output = m_deviceconfig->GetPartNumber(); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool KortexDeviceManager::GetSerialNumber(kortex_device_manager::GetSerialNumber::Request &req, kortex_device_manager::GetSerialNumber::Response &res) -{ - Empty input; - SerialNumber output; - kortex_device_manager::KortexError result_error; - - try - { - output = m_deviceconfig->GetSerialNumber(); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool KortexDeviceManager::GetMACAddress(kortex_device_manager::GetMACAddress::Request &req, kortex_device_manager::GetMACAddress::Response &res) -{ - Empty input; - MACAddress output; - kortex_device_manager::KortexError result_error; - - try - { - output = m_deviceconfig->GetMACAddress(); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool KortexDeviceManager::GetIPv4Settings(kortex_device_manager::GetIPv4Settings::Request &req, kortex_device_manager::GetIPv4Settings::Response &res) -{ - Empty input; - IPv4Settings output; - kortex_device_manager::KortexError result_error; - - try - { - output = m_deviceconfig->GetIPv4Settings(); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool KortexDeviceManager::SetIPv4Settings(kortex_device_manager::SetIPv4Settings::Request &req, kortex_device_manager::SetIPv4Settings::Response &res) -{ - IPv4Settings input; - ToProtoData(req.input, &input); - Empty output; - kortex_device_manager::KortexError result_error; - - try - { - m_deviceconfig->SetIPv4Settings(input); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool KortexDeviceManager::GetPartNumberRevision(kortex_device_manager::GetPartNumberRevision::Request &req, kortex_device_manager::GetPartNumberRevision::Response &res) -{ - Empty input; - PartNumberRevision output; - kortex_device_manager::KortexError result_error; - - try - { - output = m_deviceconfig->GetPartNumberRevision(); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool KortexDeviceManager::GetPowerOnSelfTestResult(kortex_device_manager::GetPowerOnSelfTestResult::Request &req, kortex_device_manager::GetPowerOnSelfTestResult::Response &res) -{ - Empty input; - PowerOnSelfTestResult output; - kortex_device_manager::KortexError result_error; - - try - { - output = m_deviceconfig->GetPowerOnSelfTestResult(); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool KortexDeviceManager::RebootRequest(kortex_device_manager::RebootRequest::Request &req, kortex_device_manager::RebootRequest::Response &res) -{ - RebootRqst input; - ToProtoData(req.input, &input); - Empty output; - kortex_device_manager::KortexError result_error; - - try - { - m_deviceconfig->RebootRequest(input); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool KortexDeviceManager::SetSafetyEnable(kortex_device_manager::SetSafetyEnable::Request &req, kortex_device_manager::SetSafetyEnable::Response &res) -{ - SafetyEnable input; - ToProtoData(req.input, &input); - Empty output; - kortex_device_manager::KortexError result_error; - - try - { - m_deviceconfig->SetSafetyEnable(input); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool KortexDeviceManager::SetSafetyErrorThreshold(kortex_device_manager::SetSafetyErrorThreshold::Request &req, kortex_device_manager::SetSafetyErrorThreshold::Response &res) -{ - SafetyThreshold input; - ToProtoData(req.input, &input); - Empty output; - kortex_device_manager::KortexError result_error; - - try - { - m_deviceconfig->SetSafetyErrorThreshold(input); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool KortexDeviceManager::SetSafetyWarningThreshold(kortex_device_manager::SetSafetyWarningThreshold::Request &req, kortex_device_manager::SetSafetyWarningThreshold::Response &res) -{ - SafetyThreshold input; - ToProtoData(req.input, &input); - Empty output; - kortex_device_manager::KortexError result_error; - - try - { - m_deviceconfig->SetSafetyWarningThreshold(input); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool KortexDeviceManager::SetSafetyConfiguration(kortex_device_manager::SetSafetyConfiguration::Request &req, kortex_device_manager::SetSafetyConfiguration::Response &res) -{ - SafetyConfiguration input; - ToProtoData(req.input, &input); - Empty output; - kortex_device_manager::KortexError result_error; - - try - { - m_deviceconfig->SetSafetyConfiguration(input); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool KortexDeviceManager::GetSafetyConfiguration(kortex_device_manager::GetSafetyConfiguration::Request &req, kortex_device_manager::GetSafetyConfiguration::Response &res) -{ - SafetyHandle input; - ToProtoData(req.input, &input); - SafetyConfiguration output; - kortex_device_manager::KortexError result_error; - - try - { - output = m_deviceconfig->GetSafetyConfiguration(input); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool KortexDeviceManager::GetSafetyInformation(kortex_device_manager::GetSafetyInformation::Request &req, kortex_device_manager::GetSafetyInformation::Response &res) -{ - SafetyHandle input; - ToProtoData(req.input, &input); - SafetyInformation output; - kortex_device_manager::KortexError result_error; - - try - { - output = m_deviceconfig->GetSafetyInformation(input); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool KortexDeviceManager::GetSafetyEnable(kortex_device_manager::GetSafetyEnable::Request &req, kortex_device_manager::GetSafetyEnable::Response &res) -{ - SafetyHandle input; - ToProtoData(req.input, &input); - SafetyEnable output; - kortex_device_manager::KortexError result_error; - - try - { - output = m_deviceconfig->GetSafetyEnable(input); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool KortexDeviceManager::GetSafetyStatus(kortex_device_manager::GetSafetyStatus::Request &req, kortex_device_manager::GetSafetyStatus::Response &res) -{ - SafetyHandle input; - ToProtoData(req.input, &input); - SafetyStatus output; - kortex_device_manager::KortexError result_error; - - try - { - output = m_deviceconfig->GetSafetyStatus(input); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool KortexDeviceManager::ClearAllSafetyStatus(kortex_device_manager::ClearAllSafetyStatus::Request &req, kortex_device_manager::ClearAllSafetyStatus::Response &res) -{ - Empty input; - Empty output; - kortex_device_manager::KortexError result_error; - - try - { - m_deviceconfig->ClearAllSafetyStatus(); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool KortexDeviceManager::ClearSafetyStatus(kortex_device_manager::ClearSafetyStatus::Request &req, kortex_device_manager::ClearSafetyStatus::Response &res) -{ - SafetyHandle input; - ToProtoData(req.input, &input); - Empty output; - kortex_device_manager::KortexError result_error; - - try - { - m_deviceconfig->ClearSafetyStatus(input); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool KortexDeviceManager::GetAllSafetyConfiguration(kortex_device_manager::GetAllSafetyConfiguration::Request &req, kortex_device_manager::GetAllSafetyConfiguration::Response &res) -{ - Empty input; - SafetyConfigurationList output; - kortex_device_manager::KortexError result_error; - - try - { - output = m_deviceconfig->GetAllSafetyConfiguration(); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool KortexDeviceManager::GetAllSafetyInformation(kortex_device_manager::GetAllSafetyInformation::Request &req, kortex_device_manager::GetAllSafetyInformation::Response &res) -{ - Empty input; - SafetyInformationList output; - kortex_device_manager::KortexError result_error; - - try - { - output = m_deviceconfig->GetAllSafetyInformation(); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool KortexDeviceManager::ResetSafetyDefaults(kortex_device_manager::ResetSafetyDefaults::Request &req, kortex_device_manager::ResetSafetyDefaults::Response &res) -{ - Empty input; - Empty output; - kortex_device_manager::KortexError result_error; - - try - { - m_deviceconfig->ResetSafetyDefaults(); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool KortexDeviceManager::OnNotificationSafetyTopic(kortex_device_manager::OnNotificationSafetyTopic::Request &req, kortex_device_manager::OnNotificationSafetyTopic::Response &res) -{ - NotificationOptions input; - ToProtoData(req.input, &input); - NotificationHandle output; - kortex_device_manager::KortexError result_error; - - try - { - - std::function< void (Kinova::Api::Common::SafetyNotification) > callback = std::bind(&KortexDeviceManager::cb_SafetyTopic, this, std::placeholders::_1); - output = m_deviceconfig->OnNotificationSafetyTopic(callback, input); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} -void KortexDeviceManager::cb_SafetyTopic(Kinova::Api::Common::SafetyNotification notif) -{ - kortex_device_manager::SafetyNotification ros_msg; - ToRosData(notif, ros_msg); - m_pub_SafetyTopic.publish(ros_msg); -} - -bool KortexDeviceManager::SetModelNumber(kortex_device_manager::SetModelNumber::Request &req, kortex_device_manager::SetModelNumber::Response &res) -{ - ModelNumber input; - ToProtoData(req.input, &input); - Empty output; - kortex_device_manager::KortexError result_error; - - try - { - m_deviceconfig->SetModelNumber(input); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool KortexDeviceManager::SetPartNumber(kortex_device_manager::SetPartNumber::Request &req, kortex_device_manager::SetPartNumber::Response &res) -{ - PartNumber input; - ToProtoData(req.input, &input); - Empty output; - kortex_device_manager::KortexError result_error; - - try - { - m_deviceconfig->SetPartNumber(input); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool KortexDeviceManager::SetPartNumberRevision(kortex_device_manager::SetPartNumberRevision::Request &req, kortex_device_manager::SetPartNumberRevision::Response &res) -{ - PartNumberRevision input; - ToProtoData(req.input, &input); - Empty output; - kortex_device_manager::KortexError result_error; - - try - { - m_deviceconfig->SetPartNumberRevision(input); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool KortexDeviceManager::SetSerialNumber(kortex_device_manager::SetSerialNumber::Request &req, kortex_device_manager::SetSerialNumber::Response &res) -{ - SerialNumber input; - ToProtoData(req.input, &input); - Empty output; - kortex_device_manager::KortexError result_error; - - try - { - m_deviceconfig->SetSerialNumber(input); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool KortexDeviceManager::SetMACAddress(kortex_device_manager::SetMACAddress::Request &req, kortex_device_manager::SetMACAddress::Response &res) -{ - MACAddress input; - ToProtoData(req.input, &input); - Empty output; - kortex_device_manager::KortexError result_error; - - try - { - m_deviceconfig->SetMACAddress(input); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - - -bool KortexDeviceManager::ReadAllDevices(kortex_device_manager::ReadAllDevices::Request &req, kortex_device_manager::ReadAllDevices::Response &res) -{ - Empty input; - DeviceHandles output; - kortex_device_manager::KortexError result_error; - - try - { - output = m_devicemanager->ReadAllDevices(); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} diff --git a/kortex_device_manager/src/node.h b/kortex_device_manager/src/node.h deleted file mode 100644 index a3c711a5..00000000 --- a/kortex_device_manager/src/node.h +++ /dev/null @@ -1,143 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_SERVICES_H_ -#define _KORTEX_SERVICES_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include "kortex_device_manager/GetRunMode.h" -#include "kortex_device_manager/SetRunMode.h" -#include "kortex_device_manager/GetDeviceType.h" -#include "kortex_device_manager/GetFirmwareVersion.h" -#include "kortex_device_manager/GetBootloaderVersion.h" -#include "kortex_device_manager/GetModelNumber.h" -#include "kortex_device_manager/GetPartNumber.h" -#include "kortex_device_manager/GetSerialNumber.h" -#include "kortex_device_manager/GetMACAddress.h" -#include "kortex_device_manager/GetIPv4Settings.h" -#include "kortex_device_manager/SetIPv4Settings.h" -#include "kortex_device_manager/GetPartNumberRevision.h" -#include "kortex_device_manager/GetPowerOnSelfTestResult.h" -#include "kortex_device_manager/RebootRequest.h" -#include "kortex_device_manager/SetSafetyEnable.h" -#include "kortex_device_manager/SetSafetyErrorThreshold.h" -#include "kortex_device_manager/SetSafetyWarningThreshold.h" -#include "kortex_device_manager/SetSafetyConfiguration.h" -#include "kortex_device_manager/GetSafetyConfiguration.h" -#include "kortex_device_manager/GetSafetyInformation.h" -#include "kortex_device_manager/GetSafetyEnable.h" -#include "kortex_device_manager/GetSafetyStatus.h" -#include "kortex_device_manager/ClearAllSafetyStatus.h" -#include "kortex_device_manager/ClearSafetyStatus.h" -#include "kortex_device_manager/GetAllSafetyConfiguration.h" -#include "kortex_device_manager/GetAllSafetyInformation.h" -#include "kortex_device_manager/ResetSafetyDefaults.h" -#include "kortex_device_manager/OnNotificationSafetyTopic.h" -#include "kortex_device_manager/SafetyNotification.h" -#include "kortex_device_manager/SetModelNumber.h" -#include "kortex_device_manager/SetPartNumber.h" -#include "kortex_device_manager/SetPartNumberRevision.h" -#include "kortex_device_manager/SetSerialNumber.h" -#include "kortex_device_manager/SetMACAddress.h" -#include "kortex_device_manager/ReadAllDevices.h" -#include "kortex_device_manager/KortexError.h" - -using namespace std; -using namespace Kinova::Api; -using namespace Kinova::Api::Common; -using namespace Kinova::Api::DeviceConfig; -using namespace Kinova::Api::DeviceManager; - -class KortexDeviceManager -{ - public: - KortexDeviceManager(char* ip, ros::NodeHandle& n); - - - bool GetRunMode(kortex_device_manager::GetRunMode::Request &req, kortex_device_manager::GetRunMode::Response &res); - bool SetRunMode(kortex_device_manager::SetRunMode::Request &req, kortex_device_manager::SetRunMode::Response &res); - bool GetDeviceType(kortex_device_manager::GetDeviceType::Request &req, kortex_device_manager::GetDeviceType::Response &res); - bool GetFirmwareVersion(kortex_device_manager::GetFirmwareVersion::Request &req, kortex_device_manager::GetFirmwareVersion::Response &res); - bool GetBootloaderVersion(kortex_device_manager::GetBootloaderVersion::Request &req, kortex_device_manager::GetBootloaderVersion::Response &res); - bool GetModelNumber(kortex_device_manager::GetModelNumber::Request &req, kortex_device_manager::GetModelNumber::Response &res); - bool GetPartNumber(kortex_device_manager::GetPartNumber::Request &req, kortex_device_manager::GetPartNumber::Response &res); - bool GetSerialNumber(kortex_device_manager::GetSerialNumber::Request &req, kortex_device_manager::GetSerialNumber::Response &res); - bool GetMACAddress(kortex_device_manager::GetMACAddress::Request &req, kortex_device_manager::GetMACAddress::Response &res); - bool GetIPv4Settings(kortex_device_manager::GetIPv4Settings::Request &req, kortex_device_manager::GetIPv4Settings::Response &res); - bool SetIPv4Settings(kortex_device_manager::SetIPv4Settings::Request &req, kortex_device_manager::SetIPv4Settings::Response &res); - bool GetPartNumberRevision(kortex_device_manager::GetPartNumberRevision::Request &req, kortex_device_manager::GetPartNumberRevision::Response &res); - bool GetPowerOnSelfTestResult(kortex_device_manager::GetPowerOnSelfTestResult::Request &req, kortex_device_manager::GetPowerOnSelfTestResult::Response &res); - bool RebootRequest(kortex_device_manager::RebootRequest::Request &req, kortex_device_manager::RebootRequest::Response &res); - bool SetSafetyEnable(kortex_device_manager::SetSafetyEnable::Request &req, kortex_device_manager::SetSafetyEnable::Response &res); - bool SetSafetyErrorThreshold(kortex_device_manager::SetSafetyErrorThreshold::Request &req, kortex_device_manager::SetSafetyErrorThreshold::Response &res); - bool SetSafetyWarningThreshold(kortex_device_manager::SetSafetyWarningThreshold::Request &req, kortex_device_manager::SetSafetyWarningThreshold::Response &res); - bool SetSafetyConfiguration(kortex_device_manager::SetSafetyConfiguration::Request &req, kortex_device_manager::SetSafetyConfiguration::Response &res); - bool GetSafetyConfiguration(kortex_device_manager::GetSafetyConfiguration::Request &req, kortex_device_manager::GetSafetyConfiguration::Response &res); - bool GetSafetyInformation(kortex_device_manager::GetSafetyInformation::Request &req, kortex_device_manager::GetSafetyInformation::Response &res); - bool GetSafetyEnable(kortex_device_manager::GetSafetyEnable::Request &req, kortex_device_manager::GetSafetyEnable::Response &res); - bool GetSafetyStatus(kortex_device_manager::GetSafetyStatus::Request &req, kortex_device_manager::GetSafetyStatus::Response &res); - bool ClearAllSafetyStatus(kortex_device_manager::ClearAllSafetyStatus::Request &req, kortex_device_manager::ClearAllSafetyStatus::Response &res); - bool ClearSafetyStatus(kortex_device_manager::ClearSafetyStatus::Request &req, kortex_device_manager::ClearSafetyStatus::Response &res); - bool GetAllSafetyConfiguration(kortex_device_manager::GetAllSafetyConfiguration::Request &req, kortex_device_manager::GetAllSafetyConfiguration::Response &res); - bool GetAllSafetyInformation(kortex_device_manager::GetAllSafetyInformation::Request &req, kortex_device_manager::GetAllSafetyInformation::Response &res); - bool ResetSafetyDefaults(kortex_device_manager::ResetSafetyDefaults::Request &req, kortex_device_manager::ResetSafetyDefaults::Response &res); - bool OnNotificationSafetyTopic(kortex_device_manager::OnNotificationSafetyTopic::Request &req, kortex_device_manager::OnNotificationSafetyTopic::Response &res); - void cb_SafetyTopic(SafetyNotification notif); - bool SetModelNumber(kortex_device_manager::SetModelNumber::Request &req, kortex_device_manager::SetModelNumber::Response &res); - bool SetPartNumber(kortex_device_manager::SetPartNumber::Request &req, kortex_device_manager::SetPartNumber::Response &res); - bool SetPartNumberRevision(kortex_device_manager::SetPartNumberRevision::Request &req, kortex_device_manager::SetPartNumberRevision::Response &res); - bool SetSerialNumber(kortex_device_manager::SetSerialNumber::Request &req, kortex_device_manager::SetSerialNumber::Response &res); - bool SetMACAddress(kortex_device_manager::SetMACAddress::Request &req, kortex_device_manager::SetMACAddress::Response &res); - - bool ReadAllDevices(kortex_device_manager::ReadAllDevices::Request &req, kortex_device_manager::ReadAllDevices::Response &res); - - -private: - TransportClientUdp* m_transport; - RouterClient* m_router; - - DeviceConfigClient* m_deviceconfig; - DeviceManagerClient* m_devicemanager; - - SessionManager* m_SessionManager; - - ros::NodeHandle m_n; - ros::Publisher m_pub_Error; - ros::Publisher m_pub_SafetyTopic; -}; -#endif diff --git a/kortex_device_manager/src/util/diagnostic.h b/kortex_device_manager/src/util/diagnostic.h deleted file mode 100644 index f0199870..00000000 --- a/kortex_device_manager/src/util/diagnostic.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) 2018 Kinova inc. All rights reserved. - * - * This software may be modified and distributed under the - * terms of the BSD 3-Clause license. - * - * Refer to the LICENSE file for details. - * - */ -#include - -struct kortex_error -{ - int error_code; - std::string description; -}; \ No newline at end of file diff --git a/kortex_device_manager/src/util/math_util.h b/kortex_device_manager/src/util/math_util.h deleted file mode 100644 index bf935386..00000000 --- a/kortex_device_manager/src/util/math_util.h +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright (c) 2018 Kinova inc. All rights reserved. - * - * This software may be modified and distributed under the - * terms of the BSD 3-Clause license. - * - * Refer to the LICENSE file for details. - * - */ -#include - -#define TO_RAD(degree) degree * M_PI / 180.0 \ No newline at end of file diff --git a/kortex_device_manager/srv/GetPowerOnSelfTestResult.srv b/kortex_device_manager/srv/GetPowerOnSelfTestResult.srv deleted file mode 100644 index adf306ed..00000000 --- a/kortex_device_manager/srv/GetPowerOnSelfTestResult.srv +++ /dev/null @@ -1,3 +0,0 @@ -Empty input ---- -PowerOnSelfTestResult output \ No newline at end of file diff --git a/kortex_device_manager/srv/SetMACAddress.srv b/kortex_device_manager/srv/SetMACAddress.srv deleted file mode 100644 index 33f6a894..00000000 --- a/kortex_device_manager/srv/SetMACAddress.srv +++ /dev/null @@ -1,3 +0,0 @@ -MACAddress input ---- -Empty output \ No newline at end of file diff --git a/kortex_device_manager/srv/SetModelNumber.srv b/kortex_device_manager/srv/SetModelNumber.srv deleted file mode 100644 index 47eb98c4..00000000 --- a/kortex_device_manager/srv/SetModelNumber.srv +++ /dev/null @@ -1,3 +0,0 @@ -ModelNumber input ---- -Empty output \ No newline at end of file diff --git a/kortex_device_manager/srv/SetPartNumber.srv b/kortex_device_manager/srv/SetPartNumber.srv deleted file mode 100644 index 12321918..00000000 --- a/kortex_device_manager/srv/SetPartNumber.srv +++ /dev/null @@ -1,3 +0,0 @@ -PartNumber input ---- -Empty output \ No newline at end of file diff --git a/kortex_device_manager/srv/SetPartNumberRevision.srv b/kortex_device_manager/srv/SetPartNumberRevision.srv deleted file mode 100644 index 43c27428..00000000 --- a/kortex_device_manager/srv/SetPartNumberRevision.srv +++ /dev/null @@ -1,3 +0,0 @@ -PartNumberRevision input ---- -Empty output \ No newline at end of file diff --git a/kortex_device_manager/srv/SetSerialNumber.srv b/kortex_device_manager/srv/SetSerialNumber.srv deleted file mode 100644 index f00cd0f9..00000000 --- a/kortex_device_manager/srv/SetSerialNumber.srv +++ /dev/null @@ -1,3 +0,0 @@ -SerialNumber input ---- -Empty output \ No newline at end of file diff --git a/kortex_device_manager/templates/NodeServices.cpp.jinja2 b/kortex_device_manager/templates/NodeServices.cpp.jinja2 deleted file mode 100644 index 5bb55a1d..00000000 --- a/kortex_device_manager/templates/NodeServices.cpp.jinja2 +++ /dev/null @@ -1,129 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "node.h" -{% for package in detailedPackages %} -{%- if package.HasMessage == 1 -%} -#include "{{package.filename|lower}}_ros_converter.h" -#include "{{package.filename|lower}}_proto_converter.h" -{%- endif %} -{% endfor -%} - -KortexDeviceManager::KortexDeviceManager(char* ip, ros::NodeHandle& n) : m_n(n) -{ - m_transport = new TransportClientUdp(); - m_transport->connect(ip, 10000); - - m_router = new RouterClient(m_transport, [](KError err) { cout << "_________ callback error _________" << err.toString(); }); - -{% for package in detailedPackages %} - {%- if package.HasRPC == 1 %} - m_{{package.name|lower}} = new {{package.name}}::{{package.name}}Client(m_router); - {%- endif -%} - -{% endfor %} - m_SessionManager = new SessionManager(m_router); - auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); - - createSessionInfo.set_username("admin"); - createSessionInfo.set_password("admin"); - createSessionInfo.set_session_inactivity_timeout(35000); - - m_SessionManager->CreateSession(createSessionInfo); - std::cout << "\nSession Created\n"; - - m_pub_Error = m_n.advertise("KortexError", 1000); -{%- for package in detailedPackages -%} -{%- for method in package.service.method -%} -{%- if 'Topic' in method.name %} - m_pub_{{method.name}} = m_n.advertise("{{method.name}}", 1000); -{%- endif -%} -{%- endfor -%} -{%- endfor -%} - - std::this_thread::sleep_for(std::chrono::milliseconds(2000)); -} - -{% for package in detailedPackages %} -{% for method in package.service.method %} -{%- if 'Topic' in method.name %} -bool KortexDeviceManager::OnNotification{{method.name}}(kortex_device_manager::OnNotification{{method.name}}::Request &req, kortex_device_manager::OnNotification{{method.name}}::Response &res) -{%- else %} -bool KortexDeviceManager::{{method.name}}(kortex_device_manager::{{method.name}}::Request &req, kortex_device_manager::{{method.name}}::Response &res) -{%- endif %} -{ - {%- set splitInputTypeName = method.input_type.split('.') -%} - {% set splitOutputTypeName = method.output_type.split('.') %} - {{splitInputTypeName[4]}} input; - {%- if not method.input_type.split('.')[4] == "Empty" %} - ToProtoData(req.input, &input); - {%- endif %} - {{splitOutputTypeName[4]}} output; - kortex_device_manager::KortexError result_error; - - try - { - {%- if not method.output_type.split('.')[4] == "Empty" %} - {%- if not method.input_type.split('.')[4] == "Empty" %} - {%- if 'Topic' in method.name %} - {% set DetailedTypeName = splitInputTypeName[1:-1] %} - std::function< void ({% for word in DetailedTypeName %}{{word}}::{%- endfor -%}{{method.name|replace("Topic", "")}}Notification) > callback = std::bind(&KortexDeviceManager::cb_{{method.name}}, this, std::placeholders::_1); - output = m_{{package.name|lower}}->OnNotification{{method.name}}(callback, input); - {%- else %} - output = m_{{package.name|lower}}->{{method.name}}(input); - {%- endif %} - {%- else %} - output = m_{{package.name|lower}}->{{method.name}}(); - {%- endif %} - {%- else %} - {%- if not method.input_type.split('.')[4] == "Empty" %} - m_{{package.name|lower}}->{{method.name}}(input); - {%- else %} - m_{{package.name|lower}}->{{method.name}}(); - {%- endif %} - {%- endif %} - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - {%- if not method.output_type.split('.')[4] == "Empty" %} - ToRosData(output, res.output); - {%- endif %} - return true; -} -{%- if 'Topic' in method.name %} -void KortexDeviceManager::cb_{{method.name}}({% for word in DetailedTypeName %}{{word}}::{%- endfor -%}{{method.name|replace("Topic", "")}}Notification notif) -{ - kortex_device_manager::{{method.name|replace("Topic", "")}}Notification ros_msg; - ToRosData(notif, ros_msg); - m_pub_{{method.name}}.publish(ros_msg); -} -{%- endif %} -{% endfor -%} -{% endfor -%} \ No newline at end of file diff --git a/kortex_device_manager/templates/NodeServices.h.jinja2 b/kortex_device_manager/templates/NodeServices.h.jinja2 deleted file mode 100644 index 708af38d..00000000 --- a/kortex_device_manager/templates/NodeServices.h.jinja2 +++ /dev/null @@ -1,104 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_{{packageName}}SERVICES_H_ -#define _KORTEX_{{packageName}}SERVICES_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -{%- for package in detailedPackages %} -#include <{{package.filename}}.pb.h> -{%- endfor %} - -#include -#include - -#include -#include - -{%- for package in detailedPackages %} -{%- if package.HasRPC == 1 %} -#include <{{package.name}}ClientRpc.h> -{%- endif %} -{%- endfor %} -#include -#include - -{%- for package in detailedPackages %} -{%- for method in package.service.method %} -{%- if 'Topic' in method.name %} -#include "kortex_device_manager/OnNotification{{method.name}}.h" -#include "kortex_device_manager/{{method.name|replace("Topic", "")}}Notification.h" -{%- else %} -#include "kortex_device_manager/{{method.name}}.h" -{%- endif %} -{%- endfor %} -{%- endfor %} -#include "kortex_device_manager/KortexError.h" - -using namespace std; -using namespace Kinova::Api; -{%- for package in detailedPackages %} -using namespace {{package.namespace}}; -{%- endfor %} - -class KortexDeviceManager -{ - public: - KortexDeviceManager(char* ip, ros::NodeHandle& n); -{% for package in detailedPackages %} -{%- for method in package.service.method %} -{%- if 'Topic' in method.name %} - bool OnNotification{{method.name}}(kortex_device_manager::OnNotification{{method.name}}::Request &req, kortex_device_manager::OnNotification{{method.name}}::Response &res); - void cb_{{method.name}}({{method.name|replace("Topic", "")}}Notification notif); -{%- else %} - bool {{method.name}}(kortex_device_manager::{{method.name}}::Request &req, kortex_device_manager::{{method.name}}::Response &res); -{%- endif %} -{%- endfor %} -{% endfor %} - -private: - TransportClientUdp* m_transport; - RouterClient* m_router; - {% for package in detailedPackages %} - {%- if package.HasRPC == 1 %} - {{package.name}}Client* m_{{package.name|lower}}; - {%- endif -%} - {% endfor %} - - SessionManager* m_SessionManager; - - ros::NodeHandle m_n; - ros::Publisher m_pub_Error; - - {%- for package in detailedPackages %} - {%- for method in package.service.method %} - {%- if 'Topic' in method.name %} - ros::Publisher m_pub_{{method.name}}; - {%- endif %} - {%- endfor %} - {%- endfor %} -}; -#endif - diff --git a/kortex_device_manager/templates/main.jinja2 b/kortex_device_manager/templates/main.jinja2 deleted file mode 100644 index 612a3662..00000000 --- a/kortex_device_manager/templates/main.jinja2 +++ /dev/null @@ -1,49 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "node.h" -#include "math_util.h" - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "DeviceManager"); - - ros::NodeHandle n; - bool valid_ip = false; - - if(argc > 1) - { - ROS_INFO("Connecting to IP = %s", argv[1]); - } - else - { - ROS_INFO("You need to provide an IP adresse as a parameter. ex: rosrun package node 192.168.1.1"); - ros::shutdown(); - return 0; - } - - KortexDeviceManager services_object(argv[1], n); - - {% for function in list_function -%} - ros::ServiceServer service{{function}} = n.advertiseService("{{function}}", &KortexDeviceManager::{{function}}, &services_object); - {% endfor %} - - ROS_INFO("Node's services initialized correctly."); - - ros::spin(); - - return 1; -} diff --git a/kortex_device_manager/templates/proto_converter.cpp.jinja2 b/kortex_device_manager/templates/proto_converter.cpp.jinja2 deleted file mode 100644 index ac90acfd..00000000 --- a/kortex_device_manager/templates/proto_converter.cpp.jinja2 +++ /dev/null @@ -1,77 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "{{currentPackageName|lower}}_proto_converter.h" -{% if 'Common' not in currentPackageName %} -#include "common_proto_converter.h" -{% endif %} - -{% for detailed_message in item -%} -int ToProtoData(kortex_device_manager::{{detailed_message.message.name}} input, {{detailed_message.message.name}} *output) -{ - {%- for field in detailed_message.message.field %} - {%- if not field.HasField("oneof_index") -%} - {%- if field.label == 3 %} {# Si c'est un repeated #} - {%- if field.type == 11 %} - output->clear_{{field.name|lower}}(); - for(int i = 0; i < input.{{field.name}}.size(); i++) - { - ToProtoData(input.{{field.name}}[i], output->add_{{field.name|lower}}()); - } - {%- else %} - output->clear_{{field.name|lower}}(); - for(int i = 0; i < input.{{field.name|lower}}.size(); i++) - { - output->add_{{field.name|lower}}(input.{{field.name|lower}}[i]); - } - {% endif -%} - {% else -%} - {%- if field.type == 11 %} - ToProtoData(input.{{field.name}}, output->mutable_{{field.name}}()); - {%- elif field.type == 14 %}{# ENUM #} - {%- set list1 = field.type_name.split('.') -%} {# Cette ligne sert à enlever les namespace dans le nom du type #} - output->set_{{field.name}}(({{field.type_name|replace(".", "", 1)|replace(".", "::")}})input.{{field.name}}); - {%- elif field.type == 12 %} - output->set_{{field.name}}(std::string(input.{{field.name}}.begin(), input.{{field.name}}.end())); - {%- else %} - output->set_{{field.name}}(input.{{field.name}}); - {%- endif -%} - {%- endif -%} - {%- endif -%} - {%- endfor -%} - - {% if detailed_message.HasOneOf == "true" %} - - {% for field in detailed_message.message.field %} - {%- if field.HasField("oneof_index") -%} - if(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.size() > 0) - { - {% if field.type == 11 -%} - ToProtoData(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0], output->mutable_{{field.name}}()); - {%- elif field.type == 14 %} - {%- set list1 = field.type_name.split('.') -%} - output->set_{{field.name}}(({{list1[4]}})input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0]); - {%- else %} - output->set_{{field.name}}(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0]); - {%- endif %} - } - {% endif %} - {%- endfor -%} - {% endif %} - - return 0; -} -{% endfor %} diff --git a/kortex_device_manager/templates/proto_converter.h.jinja2 b/kortex_device_manager/templates/proto_converter.h.jinja2 deleted file mode 100644 index b9b0c1c6..00000000 --- a/kortex_device_manager/templates/proto_converter.h.jinja2 +++ /dev/null @@ -1,52 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_{{currentPackageName}}PROTO_CONVERTER_H_ -#define _KORTEX_{{currentPackageName}}PROTO_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include <{{currentFilename}}.pb.h> - -#include -#include - -#include -#include - -#include -#include -#include -#include - -{% for detailed_message in item -%} -#include "kortex_device_manager/{{detailed_message.message.name}}.h" -{% endfor %} - -using namespace {{currentNamespace}}; - -{% for detailed_message in item -%} -int ToProtoData(kortex_device_manager::{{detailed_message.message.name}} intput, {{detailed_message.message.name}} *output); -{% endfor %} -#endif \ No newline at end of file diff --git a/kortex_device_manager/templates/ros_converter.cpp.jinja2 b/kortex_device_manager/templates/ros_converter.cpp.jinja2 deleted file mode 100644 index 8eb6f01e..00000000 --- a/kortex_device_manager/templates/ros_converter.cpp.jinja2 +++ /dev/null @@ -1,86 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "{{currentPackageName|lower}}_ros_converter.h" -{% if 'Common' not in currentPackageName %} -#include "common_ros_converter.h" -{% endif %} - -{% for detailed_message in item -%} -int ToRosData({{detailed_message.message.name}} input, kortex_device_manager::{{detailed_message.message.name}} &output) -{ - {%- for field in detailed_message.message.field %} - {%- if not field.HasField("oneof_index") %} - {%- if field.label == 3 %} {# Si c'est un repeated #} - {% if field.type == 11 %} - {%- set splitTypeName = field.type_name.split('.') -%} - output.{{field.name|lower}}.clear(); - for(int i = 0; i < input.{{field.name|lower}}_size(); i++) - { - kortex_device_manager::{{splitTypeName[4]}} temp; - ToRosData(input.{{field.name}}(i), temp); - output.{{field.name}}.push_back(temp); - } - {%- else %} - output.{{field.name}}.clear(); - for(int i = 0; i < input.{{field.name|lower}}_size(); i++) - { - output.{{field.name}}.push_back(input.{{field.name|lower}}(i)); - } - {%- endif %} - {%- else %} - {%- if field.type == 11 %} - ToRosData(input.{{field.name}}(), output.{{field.name}}); - {%- elif field.type == 14 %} - {%- set list1 = field.type_name.split('.') -%} {# Cette ligne sert à enlever les namespace dans le nom du type #} - output.{{field.name}} = input.{{field.name}}(); - {%- elif field.type == 12 %} - output.{{field.name}} = std::vector(input.{{field.name}}().begin(), input.{{field.name}}().end()); - {%- else %} - output.{{field.name}} = input.{{field.name}}(); - {%- endif %} - {%- endif %} - {%- endif %} - {%- endfor %} - - {% if detailed_message.HasOneOf == "true" %} - auto oneof_type = input.{{detailed_message.message.ListFields()[-1][1][0].name}}_case(); - - switch(oneof_type) - { - {%- for field in detailed_message.message.field -%} - {%- if field.HasField("oneof_index") -%} - {%- set splitTypeName = field.type_name.split('.') %} - {%- set EnumName = field.name.replace("_", " ").title().replace(" ", "") %} - case {{detailed_message.message.name}}::k{{EnumName}}: - { - {%- if field.type == 11 %} - kortex_device_manager::{{splitTypeName[4]}} temp; - ToRosData(input.{{field.name}}(), temp); - output.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.push_back(temp); - {%- elif field.type == 14 %} - output.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.push_back(input.{{field.name}}()); - {% endif %} - break; - } - {% endif %} - {%- endfor %} - } - {% endif -%} - - return 0; -} -{% endfor %} diff --git a/kortex_device_manager/templates/ros_converter.h.jinja2 b/kortex_device_manager/templates/ros_converter.h.jinja2 deleted file mode 100644 index 5f78c4d1..00000000 --- a/kortex_device_manager/templates/ros_converter.h.jinja2 +++ /dev/null @@ -1,52 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_{{currentPackageName}}ROS_CONVERTER_H_ -#define _KORTEX_{{currentPackageName}}ROS_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include <{{currentFilename}}.pb.h> - -#include -#include - -#include -#include - -#include -#include -#include -#include - -{% for detailed_message in item -%} -#include "kortex_device_manager/{{detailed_message.message.name}}.h" -{% endfor %} - -using namespace {{currentNamespace}}; - -{% for detailed_message in item -%} -int ToRosData({{detailed_message.message.name}} input, kortex_device_manager::{{detailed_message.message.name}} &output); -{% endfor %} -#endif \ No newline at end of file diff --git a/kortex_device_manager/templates/ros_enum.jinja2 b/kortex_device_manager/templates/ros_enum.jinja2 deleted file mode 100644 index 164146fc..00000000 --- a/kortex_device_manager/templates/ros_enum.jinja2 +++ /dev/null @@ -1,3 +0,0 @@ -{% for member in item.value %} -uint32 {{member.name}} = {{member.number}} -{% endfor %} diff --git a/kortex_device_manager/templates/ros_message.jinja2 b/kortex_device_manager/templates/ros_message.jinja2 deleted file mode 100644 index 746188b6..00000000 --- a/kortex_device_manager/templates/ros_message.jinja2 +++ /dev/null @@ -1,44 +0,0 @@ -{%- for member in item.field -%} -{%- if not member.HasField("oneof_index") -%} -{%- if member.type == 9 %} {# TYPE_STRING #} -string{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 12 %} {# TYPE_BYTES #} -uint8[] {{member.name}} -{%- elif member.type == 1 %} {# TYPE_DOUBLE #} -float64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 7 %} {# TYPE_FIXED32 #} -uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 6 %} {# TYPE_FIXED64 #} -uint64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 2 %} {# TYPE_FLOAT #} -float32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 5 %} {# TYPE_INT32 #} -int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 3 %} {# TYPE_INT64 #} -int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 15 %} {# TYPE_SFIXED32 #} -int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 16 %} {# TYPE_SFIXED64 #} -int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 17 %} {# TYPE_SINT32 #} -int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 18 %} {# TYPE_SINT64 #} -int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 13 %} {# TYPE_UINT32 #} -uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 4 %} {# TYPE_UINT64 #} -uint64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 14 -%} {# TYPE_ENUM #} -{% set list1 = member.type_name.split('.') %} -uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 8 %} {# TYPE_BOOL #} -bool {{member.name}} -{%- elif member.type == 11 %}{# TYPE MESSAGE #} -{% set list1 = member.type_name.split('.') %} -{{list1[4]}}{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- endif -%} -{%- endif -%} -{%- endfor -%} -{%- if HasOneOf %} -{{item.name}}_{{item.ListFields()[-1][1][0].name}} oneof_{{item.ListFields()[-1][1][0].name}} -{%- endif -%} \ No newline at end of file diff --git a/kortex_device_manager/templates/ros_oneof.jinja2 b/kortex_device_manager/templates/ros_oneof.jinja2 deleted file mode 100644 index 4fac302a..00000000 --- a/kortex_device_manager/templates/ros_oneof.jinja2 +++ /dev/null @@ -1,9 +0,0 @@ -{%- for member in item.field -%} -{% if member.HasField("oneof_index") %} -{% if member.type == 11 %} -{% set list1 = member.type_name.split('.') %}{{list1[4]}}[] {{member.name}} -{%- else -%} -uint32[] {{member.name}} -{%- endif -%} -{%- endif -%} -{% endfor %} \ No newline at end of file diff --git a/kortex_device_manager/templates/ros_service.jinja2 b/kortex_device_manager/templates/ros_service.jinja2 deleted file mode 100644 index cc015cf8..00000000 --- a/kortex_device_manager/templates/ros_service.jinja2 +++ /dev/null @@ -1,5 +0,0 @@ -{% set split_input_type = item.input_type.split('.') %} -{%- set split_output_type = item.output_type.split('.') -%} -{{split_input_type[4]}} input ---- -{{split_output_type[4]}} output \ No newline at end of file diff --git a/kortex_driver/CMakeLists.txt b/kortex_driver/CMakeLists.txt index dfa90f8a..68796b2b 100644 --- a/kortex_driver/CMakeLists.txt +++ b/kortex_driver/CMakeLists.txt @@ -5,16 +5,51 @@ project(kortex_driver) add_compile_options(-std=c++11) add_definitions(-D_OS_UNIX) +# custom bash script to download the API if it has not been downloaded yet +execute_process(COMMAND ./download_kortex_api.bash + WORKING_DIRECTORY ../src/ros_kortex/kortex_api/scripts + RESULT_VARIABLE DOWNLOAD_API_RESULT) + +if(NOT DOWNLOAD_API_RESULT EQUAL 0) + message(FATAL_ERROR "Download of the Kortex API failed") +endif() + ## find catkin and any catkin packages -find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation) +find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation actionlib control_msgs) +find_package(Boost REQUIRED COMPONENTS system) + +file(GLOB_RECURSE generated_files RELATIVE ${PROJECT_SOURCE_DIR} "src/generated/*.cpp") +file(GLOB_RECURSE non_generated_files RELATIVE ${PROJECT_SOURCE_DIR} "src/non-generated/*.cpp") + +# Find all auto-generated subdirectories in msg/generated +file(GLOB children RELATIVE ${PROJECT_SOURCE_DIR}/msg/generated ${PROJECT_SOURCE_DIR}/msg/generated/*) +set(msg_generated_dir_list "") +foreach(child ${children}) + if(IS_DIRECTORY ${PROJECT_SOURCE_DIR}/msg/generated/${child}) + list(APPEND msg_generated_dir_list ${child}) + endif() +endforeach() -file(GLOB_RECURSE cpp_list RELATIVE ${PROJECT_SOURCE_DIR} "src/*.cpp") +# Find all auto-generated subdirectories in srv/generated +file(GLOB children RELATIVE ${PROJECT_SOURCE_DIR}/srv/generated ${PROJECT_SOURCE_DIR}/srv/generated/*) +set(srv_generated_dir_list "") +foreach(child ${children}) + if(IS_DIRECTORY ${PROJECT_SOURCE_DIR}/srv/generated/${child}) + list(APPEND srv_generated_dir_list ${child}) + endif() +endforeach() ## declare ROS messages and services -add_message_files(DIRECTORY msg) add_message_files(DIRECTORY msg/non_generated) -add_service_files(DIRECTORY srv) +add_message_files(DIRECTORY msg/generated) +foreach(sub_dir ${msg_generated_dir_list}) + add_message_files(DIRECTORY msg/generated/${sub_dir}) +endforeach() + add_service_files(DIRECTORY srv/non_generated) +foreach(sub_dir ${srv_generated_dir_list}) + add_service_files(DIRECTORY srv/generated/${sub_dir}) +endforeach() ## generate added messages and services generate_messages(DEPENDENCIES std_msgs) @@ -23,18 +58,21 @@ generate_messages(DEPENDENCIES std_msgs) catkin_package() include_directories(include ${catkin_INCLUDE_DIRS}) +include_directories(include ${Boost_INCLUDE_DIRS}) include_directories(include ${PROJECT_SOURCE_DIR}/src) -include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include) +include_directories(include ${PROJECT_SOURCE_DIR}/include) include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/client) include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/client_stubs) include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/messages) include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/common) -include_directories(include ${PROJECT_SOURCE_DIR}/src/util) +include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include) link_directories(${PROJECT_SOURCE_DIR}/../kortex_api/lib/release) -add_executable(${PROJECT_NAME} ${cpp_list}) - -target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES} KortexApi gcov) +add_library(kortex_driver_generated_files ${generated_files}) +target_link_libraries(kortex_driver_generated_files ${catkin_LIBRARIES} KortexApi gcov) +add_dependencies(kortex_driver_generated_files ${PROJECT_NAME}_gencpp) -add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}_gencpp) +add_executable(kortex_arm_driver ${non_generated_files}) +target_link_libraries(kortex_arm_driver ${catkin_LIBRARIES} KortexApi gcov kortex_driver_generated_files) +add_dependencies(kortex_arm_driver kortex_driver_generated_files) diff --git a/kortex_driver/RosGeneration.py b/kortex_driver/RosGeneration.py deleted file mode 100644 index 26aeaad9..00000000 --- a/kortex_driver/RosGeneration.py +++ /dev/null @@ -1,223 +0,0 @@ -#!/usr/bin/env python -### -# KINOVA (R) KORTEX (TM) -# -# Copyright (c) 2018 Kinova inc. All rights reserved. -# -# This software may be modified and distributed -# under the terms of the BSD 3-Clause license. -# -# Refer to the LICENSE file for details. -# -### - -import sys - -from google.protobuf.compiler import plugin_pb2 as plugin -from google.protobuf import json_format as json_f - -import jinja2 - -import itertools -import json -import types -import os -import sys - -from collections import OrderedDict - -from google.protobuf.descriptor_pb2 import DescriptorProto, EnumDescriptorProto, ServiceDescriptorProto, FieldDescriptorProto, OneofDescriptorProto - -# Class that holds a protobuf message and other details needed by the generator(Jinja2 template) -class DetailedMessage: - def __init__(self, message=None): - self.message = message - self.HasOneOf = "false" - self.oneOfList = [] - -# Class that holds a protobuf service and some other details needed by the generator(Jinja2 template) -class DetailedPackage: - def __init__(self, service=None): - self.name = "NoName" - self.service = service - -# Jinja2 function to render a file from a template -def render(tpl_path, context): - path, filename = os.path.split(tpl_path) - return jinja2.Environment(loader=jinja2.FileSystemLoader(path or './')).get_template(filename).render(**context) - -# main plugin function -def generate_code(request, response): - - # The context is the object sent to the Jinja2 template. - context = types.SimpleNamespace() - context.serviceVersion = 1 - - context.detailedPackages = [] - - MainFilePath = os.path.join(".", "src/main.cpp") - function_list = [] - fileIndex = 0 - file_map = OrderedDict() - - for proto_file in request.proto_file: - file_map[proto_file.name] = proto_file - - for filename, proto_file in file_map.items(): - context.detailedPackages.append(DetailedPackage()) - context.detailedPackages[fileIndex].name = proto_file.package.split(".")[-1] - context.detailedPackages[fileIndex].filename = proto_file.name.split(".")[0] - context.detailedPackages[fileIndex].namespace = proto_file.package.replace(".", "::") - context.detailedPackages[fileIndex].HasRPC = 0 - context.detailedPackages[fileIndex].HasMessage = 0 - - HeaderFilePath = os.path.join(".", "src/node.h") - CppFilePath = os.path.join(".", "src/node.cpp") - - # We use lower case to respect ROS standard coding style. - CppProtoConverterFilePath = os.path.join(".", "src/{}_proto_converter.cpp".format(proto_file.name.split(".")[0].lower())) - HeaderProtoConverterFilePath = os.path.join(".", "src/{}_proto_converter.h".format(proto_file.name.split(".")[0].lower())) - CppRosConverterFilePath = os.path.join(".", "src/{}_ros_converter.cpp".format(proto_file.name.split(".")[0].lower())) - HeaderRosConverterFilePath = os.path.join(".", "src/{}_ros_converter.h".format(proto_file.name.split(".")[0].lower())) - - list_detailedMessage = [] - list_detailedMethod = [] - - # for every item in the current proto file - for item, package in traverse(proto_file): - context.HasOneOf = 0 - - - if isinstance(item, EnumDescriptorProto): - context.item = item - - ros_enumPath = os.path.join(".", "msg/{}.msg".format(item.name)) - - with open(ros_enumPath, 'wt') as serviceFile: - serviceFile.write(render("./templates/ros_enum.jinja2", context.__dict__)) - # if this is a message - if isinstance(item, DescriptorProto): - tempMessage = DetailedMessage(item) - context.detailedPackages[fileIndex].HasMessage = 1 - - for member in item.field: - # If a member is part of a oneof, it will have this additional field. - if member.HasField("oneof_index"): - context.HasOneOf = 1 - tempMessage.HasOneOf = "true" - else: - context.HasOneOf = 0 - tempMessage.HasOneOf = "false" - - context.item = item - - # If the proto file contains a ONEOF we need to generate a separate file to handle it. - if context.HasOneOf == 1: - - # This line gets the list of ONEOF that is in the current message. - oneOfList = item.ListFields()[-1][1] - - tempMessage.oneOfList = item.ListFields()[-1][1] - ros_oneofPath = os.path.join(".", "msg/{}_{}.msg".format(item.name, oneOfList[0].name)) - - with open(ros_oneofPath, 'wt') as serviceFile: - serviceFile.write(render("./templates/ros_oneof.jinja2", context.__dict__)) - - - list_detailedMessage.append(tempMessage) - ros_messagePath = os.path.join(".", "msg/{}.msg".format(item.name)) - - # We call Jinja2 to generate a ROS message. - with open(ros_messagePath, 'wt') as serviceFile: - serviceFile.write(render("./templates/ros_message.jinja2", context.__dict__)) - - # if this is a service (a group of methods) - if isinstance(item, ServiceDescriptorProto): - for idx, method in enumerate(item.method): - context.item = method - if "Topic" not in method.name: - function_list.append(method.name) - ros_servicePath = os.path.join(".", "srv/{}.srv".format(method.name)) - else: - function_list.append("OnNotification{}".format(method.name)) - ros_servicePath = os.path.join(".", "srv/OnNotification{}.srv".format(method.name)) - - with open(ros_servicePath, 'wt') as serviceFile: - serviceFile.write(render("./templates/ros_service.jinja2", context.__dict__)) - - context.detailedPackages[fileIndex].service = item - context.detailedPackages[fileIndex].HasRPC = 1 - - context.currentPackageName = context.detailedPackages[fileIndex].name - context.currentNamespace = proto_file.package.replace(".", "::") - context.currentFilename = context.detailedPackages[fileIndex].filename - context.item = list_detailedMessage - - if context.detailedPackages[fileIndex].HasMessage == 1: - # We call Jinja2 to generate a proto/ROS converter for every protobuf message. - with open(CppProtoConverterFilePath, 'wt') as converterFile: - converterFile.write(render("./templates/proto_converter.cpp.jinja2", context.__dict__)) - with open(HeaderProtoConverterFilePath, 'wt') as converterFile: - converterFile.write(render("./templates/proto_converter.h.jinja2", context.__dict__)) - with open(CppRosConverterFilePath, 'wt') as converterFile: - converterFile.write(render("./templates/ros_converter.cpp.jinja2", context.__dict__)) - with open(HeaderRosConverterFilePath, 'wt') as converterFile: - converterFile.write(render("./templates/ros_converter.h.jinja2", context.__dict__)) - - fileIndex = fileIndex + 1 - - context.list_function = function_list - - # We use Jinja2 to generate the ROS node. - with open(HeaderFilePath, 'wt') as nodeFile: - nodeFile.write(render("./templates/NodeServices.h.jinja2", context.__dict__)) - with open(CppFilePath, 'wt') as nodeFile: - nodeFile.write(render("./templates/NodeServices.cpp.jinja2", context.__dict__)) - with open(MainFilePath, 'wt') as mainFile: - mainFile.write(render("./templates/main.jinja2", context.__dict__)) - -def traverse(proto_file): - # recursive function that browses a protobof item - def _traverse(package, items): - for item in items: - yield item, package - - if isinstance(item, DescriptorProto): - for enum in item.enum_type: - yield enum, package - - for nested in item.nested_type: - nested_package = package + item.name - - for nested_item in _traverse(nested, nested_package): - yield nested_item, nested_package - if isinstance(item, ServiceDescriptorProto): - for rpc in item.method: - yield rpc, package - - # returns a list of everything found in the proto file - return itertools.chain( - _traverse(proto_file.package, proto_file.enum_type), - _traverse(proto_file.package, proto_file.message_type), - _traverse(proto_file.package, proto_file.service), - ) - -if __name__ == '__main__': - # reads request message from stdin - data = sys.stdin.buffer.read() - - # parses request - request = plugin.CodeGeneratorRequest() - request.ParseFromString(data) - - # creates response - response = plugin.CodeGeneratorResponse() - - # generates code - generate_code(request, response) - - # serialises response message - output = response.SerializeToString() - - # writes to stdout - sys.stdout.buffer.write(output) \ No newline at end of file diff --git a/kortex_driver/build/.gitignore b/kortex_driver/build/.gitignore deleted file mode 100644 index e69de29b..00000000 diff --git a/kortex_driver/include/kortex_driver/generated/actuatorconfig_proto_converter.h b/kortex_driver/include/kortex_driver/generated/actuatorconfig_proto_converter.h new file mode 100644 index 00000000..573f7ec8 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/actuatorconfig_proto_converter.h @@ -0,0 +1,81 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_ACTUATORCONFIG_PROTO_CONVERTER_H_ +#define _KORTEX_ACTUATORCONFIG_PROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_proto_converter.h" +#include "kortex_driver/generated/actuatorcyclic_proto_converter.h" +#include "kortex_driver/generated/productconfiguration_proto_converter.h" +#include "kortex_driver/generated/base_proto_converter.h" +#include "kortex_driver/generated/grippercyclic_proto_converter.h" +#include "kortex_driver/generated/interconnectcyclic_proto_converter.h" +#include "kortex_driver/generated/basecyclic_proto_converter.h" +#include "kortex_driver/generated/controlconfig_proto_converter.h" +#include "kortex_driver/generated/deviceconfig_proto_converter.h" +#include "kortex_driver/generated/devicemanager_proto_converter.h" +#include "kortex_driver/generated/interconnectconfig_proto_converter.h" +#include "kortex_driver/generated/visionconfig_proto_converter.h" + + +#include "kortex_driver/AxisPosition.h" +#include "kortex_driver/AxisOffsets.h" +#include "kortex_driver/TorqueCalibration.h" +#include "kortex_driver/TorqueOffset.h" +#include "kortex_driver/ActuatorConfig_ControlModeInformation.h" +#include "kortex_driver/ControlLoop.h" +#include "kortex_driver/LoopSelection.h" +#include "kortex_driver/VectorDriveParameters.h" +#include "kortex_driver/EncoderDerivativeParameters.h" +#include "kortex_driver/ControlLoopParameters.h" +#include "kortex_driver/FrequencyResponse.h" +#include "kortex_driver/StepResponse.h" +#include "kortex_driver/RampResponse.h" +#include "kortex_driver/CustomDataSelection.h" +#include "kortex_driver/CommandModeInformation.h" +#include "kortex_driver/Servoing.h" +#include "kortex_driver/PositionCommand.h" + + +int ToProtoData(kortex_driver::AxisPosition input, Kinova::Api::ActuatorConfig::AxisPosition *output); +int ToProtoData(kortex_driver::AxisOffsets input, Kinova::Api::ActuatorConfig::AxisOffsets *output); +int ToProtoData(kortex_driver::TorqueCalibration input, Kinova::Api::ActuatorConfig::TorqueCalibration *output); +int ToProtoData(kortex_driver::TorqueOffset input, Kinova::Api::ActuatorConfig::TorqueOffset *output); +int ToProtoData(kortex_driver::ActuatorConfig_ControlModeInformation input, Kinova::Api::ActuatorConfig::ControlModeInformation *output); +int ToProtoData(kortex_driver::ControlLoop input, Kinova::Api::ActuatorConfig::ControlLoop *output); +int ToProtoData(kortex_driver::LoopSelection input, Kinova::Api::ActuatorConfig::LoopSelection *output); +int ToProtoData(kortex_driver::VectorDriveParameters input, Kinova::Api::ActuatorConfig::VectorDriveParameters *output); +int ToProtoData(kortex_driver::EncoderDerivativeParameters input, Kinova::Api::ActuatorConfig::EncoderDerivativeParameters *output); +int ToProtoData(kortex_driver::ControlLoopParameters input, Kinova::Api::ActuatorConfig::ControlLoopParameters *output); +int ToProtoData(kortex_driver::FrequencyResponse input, Kinova::Api::ActuatorConfig::FrequencyResponse *output); +int ToProtoData(kortex_driver::StepResponse input, Kinova::Api::ActuatorConfig::StepResponse *output); +int ToProtoData(kortex_driver::RampResponse input, Kinova::Api::ActuatorConfig::RampResponse *output); +int ToProtoData(kortex_driver::CustomDataSelection input, Kinova::Api::ActuatorConfig::CustomDataSelection *output); +int ToProtoData(kortex_driver::CommandModeInformation input, Kinova::Api::ActuatorConfig::CommandModeInformation *output); +int ToProtoData(kortex_driver::Servoing input, Kinova::Api::ActuatorConfig::Servoing *output); +int ToProtoData(kortex_driver::PositionCommand input, Kinova::Api::ActuatorConfig::PositionCommand *output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/actuatorconfig_ros_converter.h b/kortex_driver/include/kortex_driver/generated/actuatorconfig_ros_converter.h new file mode 100644 index 00000000..fdaaf470 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/actuatorconfig_ros_converter.h @@ -0,0 +1,81 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_ACTUATORCONFIG_ROS_CONVERTER_H_ +#define _KORTEX_ACTUATORCONFIG_ROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_ros_converter.h" +#include "kortex_driver/generated/actuatorcyclic_ros_converter.h" +#include "kortex_driver/generated/productconfiguration_ros_converter.h" +#include "kortex_driver/generated/base_ros_converter.h" +#include "kortex_driver/generated/grippercyclic_ros_converter.h" +#include "kortex_driver/generated/interconnectcyclic_ros_converter.h" +#include "kortex_driver/generated/basecyclic_ros_converter.h" +#include "kortex_driver/generated/controlconfig_ros_converter.h" +#include "kortex_driver/generated/deviceconfig_ros_converter.h" +#include "kortex_driver/generated/devicemanager_ros_converter.h" +#include "kortex_driver/generated/interconnectconfig_ros_converter.h" +#include "kortex_driver/generated/visionconfig_ros_converter.h" + + +#include "kortex_driver/AxisPosition.h" +#include "kortex_driver/AxisOffsets.h" +#include "kortex_driver/TorqueCalibration.h" +#include "kortex_driver/TorqueOffset.h" +#include "kortex_driver/ActuatorConfig_ControlModeInformation.h" +#include "kortex_driver/ControlLoop.h" +#include "kortex_driver/LoopSelection.h" +#include "kortex_driver/VectorDriveParameters.h" +#include "kortex_driver/EncoderDerivativeParameters.h" +#include "kortex_driver/ControlLoopParameters.h" +#include "kortex_driver/FrequencyResponse.h" +#include "kortex_driver/StepResponse.h" +#include "kortex_driver/RampResponse.h" +#include "kortex_driver/CustomDataSelection.h" +#include "kortex_driver/CommandModeInformation.h" +#include "kortex_driver/Servoing.h" +#include "kortex_driver/PositionCommand.h" + + +int ToRosData(Kinova::Api::ActuatorConfig::AxisPosition input, kortex_driver::AxisPosition &output); +int ToRosData(Kinova::Api::ActuatorConfig::AxisOffsets input, kortex_driver::AxisOffsets &output); +int ToRosData(Kinova::Api::ActuatorConfig::TorqueCalibration input, kortex_driver::TorqueCalibration &output); +int ToRosData(Kinova::Api::ActuatorConfig::TorqueOffset input, kortex_driver::TorqueOffset &output); +int ToRosData(Kinova::Api::ActuatorConfig::ControlModeInformation input, kortex_driver::ActuatorConfig_ControlModeInformation &output); +int ToRosData(Kinova::Api::ActuatorConfig::ControlLoop input, kortex_driver::ControlLoop &output); +int ToRosData(Kinova::Api::ActuatorConfig::LoopSelection input, kortex_driver::LoopSelection &output); +int ToRosData(Kinova::Api::ActuatorConfig::VectorDriveParameters input, kortex_driver::VectorDriveParameters &output); +int ToRosData(Kinova::Api::ActuatorConfig::EncoderDerivativeParameters input, kortex_driver::EncoderDerivativeParameters &output); +int ToRosData(Kinova::Api::ActuatorConfig::ControlLoopParameters input, kortex_driver::ControlLoopParameters &output); +int ToRosData(Kinova::Api::ActuatorConfig::FrequencyResponse input, kortex_driver::FrequencyResponse &output); +int ToRosData(Kinova::Api::ActuatorConfig::StepResponse input, kortex_driver::StepResponse &output); +int ToRosData(Kinova::Api::ActuatorConfig::RampResponse input, kortex_driver::RampResponse &output); +int ToRosData(Kinova::Api::ActuatorConfig::CustomDataSelection input, kortex_driver::CustomDataSelection &output); +int ToRosData(Kinova::Api::ActuatorConfig::CommandModeInformation input, kortex_driver::CommandModeInformation &output); +int ToRosData(Kinova::Api::ActuatorConfig::Servoing input, kortex_driver::Servoing &output); +int ToRosData(Kinova::Api::ActuatorConfig::PositionCommand input, kortex_driver::PositionCommand &output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/actuatorconfig_services.h b/kortex_driver/include/kortex_driver/generated/actuatorconfig_services.h new file mode 100644 index 00000000..b7b150c3 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/actuatorconfig_services.h @@ -0,0 +1,113 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_ACTUATORCONFIG_SERVICES_H_ +#define _KORTEX_ACTUATORCONFIG_SERVICES_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include "kortex_driver/GetAxisOffsets.h" +#include "kortex_driver/SetAxisOffsets.h" +#include "kortex_driver/SetTorqueOffset.h" +#include "kortex_driver/ActuatorConfig_GetControlMode.h" +#include "kortex_driver/SetControlMode.h" +#include "kortex_driver/GetActivatedControlLoop.h" +#include "kortex_driver/SetActivatedControlLoop.h" +#include "kortex_driver/GetControlLoopParameters.h" +#include "kortex_driver/SetControlLoopParameters.h" +#include "kortex_driver/SelectCustomData.h" +#include "kortex_driver/GetSelectedCustomData.h" +#include "kortex_driver/SetCommandMode.h" +#include "kortex_driver/ActuatorConfig_ClearFaults.h" +#include "kortex_driver/SetServoing.h" +#include "kortex_driver/MoveToPosition.h" +#include "kortex_driver/GetCommandMode.h" +#include "kortex_driver/GetServoing.h" +#include "kortex_driver/GetTorqueOffset.h" + +#include "kortex_driver/KortexError.h" +#include "kortex_driver/SetDeviceID.h" +#include "kortex_driver/SetApiOptions.h" +#include "kortex_driver/ApiOptions.h" + +using namespace std; + +class ActuatorConfigServices +{ + public: + ActuatorConfigServices(ros::NodeHandle& n, Kinova::Api::ActuatorConfig::ActuatorConfigClient* actuatorconfig, uint32_t device_id, uint32_t timeout_ms); + + bool SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res); + bool SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res); + bool GetAxisOffsets(kortex_driver::GetAxisOffsets::Request &req, kortex_driver::GetAxisOffsets::Response &res); + bool SetAxisOffsets(kortex_driver::SetAxisOffsets::Request &req, kortex_driver::SetAxisOffsets::Response &res); + bool SetTorqueOffset(kortex_driver::SetTorqueOffset::Request &req, kortex_driver::SetTorqueOffset::Response &res); + bool ActuatorConfig_GetControlMode(kortex_driver::ActuatorConfig_GetControlMode::Request &req, kortex_driver::ActuatorConfig_GetControlMode::Response &res); + bool SetControlMode(kortex_driver::SetControlMode::Request &req, kortex_driver::SetControlMode::Response &res); + bool GetActivatedControlLoop(kortex_driver::GetActivatedControlLoop::Request &req, kortex_driver::GetActivatedControlLoop::Response &res); + bool SetActivatedControlLoop(kortex_driver::SetActivatedControlLoop::Request &req, kortex_driver::SetActivatedControlLoop::Response &res); + bool GetControlLoopParameters(kortex_driver::GetControlLoopParameters::Request &req, kortex_driver::GetControlLoopParameters::Response &res); + bool SetControlLoopParameters(kortex_driver::SetControlLoopParameters::Request &req, kortex_driver::SetControlLoopParameters::Response &res); + bool SelectCustomData(kortex_driver::SelectCustomData::Request &req, kortex_driver::SelectCustomData::Response &res); + bool GetSelectedCustomData(kortex_driver::GetSelectedCustomData::Request &req, kortex_driver::GetSelectedCustomData::Response &res); + bool SetCommandMode(kortex_driver::SetCommandMode::Request &req, kortex_driver::SetCommandMode::Response &res); + bool ActuatorConfig_ClearFaults(kortex_driver::ActuatorConfig_ClearFaults::Request &req, kortex_driver::ActuatorConfig_ClearFaults::Response &res); + bool SetServoing(kortex_driver::SetServoing::Request &req, kortex_driver::SetServoing::Response &res); + bool MoveToPosition(kortex_driver::MoveToPosition::Request &req, kortex_driver::MoveToPosition::Response &res); + bool GetCommandMode(kortex_driver::GetCommandMode::Request &req, kortex_driver::GetCommandMode::Response &res); + bool GetServoing(kortex_driver::GetServoing::Request &req, kortex_driver::GetServoing::Response &res); + bool GetTorqueOffset(kortex_driver::GetTorqueOffset::Request &req, kortex_driver::GetTorqueOffset::Response &res); + +private: + uint32_t m_current_device_id; + Kinova::Api::RouterClientSendOptions m_api_options; + + Kinova::Api::ActuatorConfig::ActuatorConfigClient* m_actuatorconfig; + + ros::NodeHandle m_n; + ros::Publisher m_pub_Error; + + ros::ServiceServer m_serviceSetDeviceID; + ros::ServiceServer m_serviceSetApiOptions; + + ros::ServiceServer m_serviceGetAxisOffsets; + ros::ServiceServer m_serviceSetAxisOffsets; + ros::ServiceServer m_serviceSetTorqueOffset; + ros::ServiceServer m_serviceActuatorConfig_GetControlMode; + ros::ServiceServer m_serviceSetControlMode; + ros::ServiceServer m_serviceGetActivatedControlLoop; + ros::ServiceServer m_serviceSetActivatedControlLoop; + ros::ServiceServer m_serviceGetControlLoopParameters; + ros::ServiceServer m_serviceSetControlLoopParameters; + ros::ServiceServer m_serviceSelectCustomData; + ros::ServiceServer m_serviceGetSelectedCustomData; + ros::ServiceServer m_serviceSetCommandMode; + ros::ServiceServer m_serviceActuatorConfig_ClearFaults; + ros::ServiceServer m_serviceSetServoing; + ros::ServiceServer m_serviceMoveToPosition; + ros::ServiceServer m_serviceGetCommandMode; + ros::ServiceServer m_serviceGetServoing; + ros::ServiceServer m_serviceGetTorqueOffset; +}; +#endif diff --git a/kortex_driver/include/kortex_driver/generated/actuatorcyclic_proto_converter.h b/kortex_driver/include/kortex_driver/generated/actuatorcyclic_proto_converter.h new file mode 100644 index 00000000..cff91c67 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/actuatorcyclic_proto_converter.h @@ -0,0 +1,55 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_ACTUATORCYCLIC_PROTO_CONVERTER_H_ +#define _KORTEX_ACTUATORCYCLIC_PROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_proto_converter.h" +#include "kortex_driver/generated/actuatorconfig_proto_converter.h" +#include "kortex_driver/generated/productconfiguration_proto_converter.h" +#include "kortex_driver/generated/base_proto_converter.h" +#include "kortex_driver/generated/grippercyclic_proto_converter.h" +#include "kortex_driver/generated/interconnectcyclic_proto_converter.h" +#include "kortex_driver/generated/basecyclic_proto_converter.h" +#include "kortex_driver/generated/controlconfig_proto_converter.h" +#include "kortex_driver/generated/deviceconfig_proto_converter.h" +#include "kortex_driver/generated/devicemanager_proto_converter.h" +#include "kortex_driver/generated/interconnectconfig_proto_converter.h" +#include "kortex_driver/generated/visionconfig_proto_converter.h" + + +#include "kortex_driver/ActuatorCyclic_MessageId.h" +#include "kortex_driver/ActuatorCyclic_Command.h" +#include "kortex_driver/ActuatorCyclic_Feedback.h" +#include "kortex_driver/ActuatorCyclic_CustomData.h" + + +int ToProtoData(kortex_driver::ActuatorCyclic_MessageId input, Kinova::Api::ActuatorCyclic::MessageId *output); +int ToProtoData(kortex_driver::ActuatorCyclic_Command input, Kinova::Api::ActuatorCyclic::Command *output); +int ToProtoData(kortex_driver::ActuatorCyclic_Feedback input, Kinova::Api::ActuatorCyclic::Feedback *output); +int ToProtoData(kortex_driver::ActuatorCyclic_CustomData input, Kinova::Api::ActuatorCyclic::CustomData *output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/actuatorcyclic_ros_converter.h b/kortex_driver/include/kortex_driver/generated/actuatorcyclic_ros_converter.h new file mode 100644 index 00000000..62be5681 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/actuatorcyclic_ros_converter.h @@ -0,0 +1,55 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_ACTUATORCYCLIC_ROS_CONVERTER_H_ +#define _KORTEX_ACTUATORCYCLIC_ROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_ros_converter.h" +#include "kortex_driver/generated/actuatorconfig_ros_converter.h" +#include "kortex_driver/generated/productconfiguration_ros_converter.h" +#include "kortex_driver/generated/base_ros_converter.h" +#include "kortex_driver/generated/grippercyclic_ros_converter.h" +#include "kortex_driver/generated/interconnectcyclic_ros_converter.h" +#include "kortex_driver/generated/basecyclic_ros_converter.h" +#include "kortex_driver/generated/controlconfig_ros_converter.h" +#include "kortex_driver/generated/deviceconfig_ros_converter.h" +#include "kortex_driver/generated/devicemanager_ros_converter.h" +#include "kortex_driver/generated/interconnectconfig_ros_converter.h" +#include "kortex_driver/generated/visionconfig_ros_converter.h" + + +#include "kortex_driver/ActuatorCyclic_MessageId.h" +#include "kortex_driver/ActuatorCyclic_Command.h" +#include "kortex_driver/ActuatorCyclic_Feedback.h" +#include "kortex_driver/ActuatorCyclic_CustomData.h" + + +int ToRosData(Kinova::Api::ActuatorCyclic::MessageId input, kortex_driver::ActuatorCyclic_MessageId &output); +int ToRosData(Kinova::Api::ActuatorCyclic::Command input, kortex_driver::ActuatorCyclic_Command &output); +int ToRosData(Kinova::Api::ActuatorCyclic::Feedback input, kortex_driver::ActuatorCyclic_Feedback &output); +int ToRosData(Kinova::Api::ActuatorCyclic::CustomData input, kortex_driver::ActuatorCyclic_CustomData &output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/base_proto_converter.h b/kortex_driver/include/kortex_driver/generated/base_proto_converter.h new file mode 100644 index 00000000..6872f1be --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/base_proto_converter.h @@ -0,0 +1,333 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_BASE_PROTO_CONVERTER_H_ +#define _KORTEX_BASE_PROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_proto_converter.h" +#include "kortex_driver/generated/actuatorconfig_proto_converter.h" +#include "kortex_driver/generated/actuatorcyclic_proto_converter.h" +#include "kortex_driver/generated/productconfiguration_proto_converter.h" +#include "kortex_driver/generated/grippercyclic_proto_converter.h" +#include "kortex_driver/generated/interconnectcyclic_proto_converter.h" +#include "kortex_driver/generated/basecyclic_proto_converter.h" +#include "kortex_driver/generated/controlconfig_proto_converter.h" +#include "kortex_driver/generated/deviceconfig_proto_converter.h" +#include "kortex_driver/generated/devicemanager_proto_converter.h" +#include "kortex_driver/generated/interconnectconfig_proto_converter.h" +#include "kortex_driver/generated/visionconfig_proto_converter.h" + + +#include "kortex_driver/FullUserProfile.h" +#include "kortex_driver/UserProfile.h" +#include "kortex_driver/UserProfileList.h" +#include "kortex_driver/UserList.h" +#include "kortex_driver/PasswordChange.h" +#include "kortex_driver/SequenceHandle.h" +#include "kortex_driver/AdvancedSequenceHandle.h" +#include "kortex_driver/SequenceTaskHandle.h" +#include "kortex_driver/SequenceTask.h" +#include "kortex_driver/Sequence.h" +#include "kortex_driver/SequenceList.h" +#include "kortex_driver/AppendActionInformation.h" +#include "kortex_driver/ActionHandle.h" +#include "kortex_driver/RequestedActionType.h" +#include "kortex_driver/Action.h" +#include "kortex_driver/SwitchControlMapping.h" +#include "kortex_driver/ChangeTwist.h" +#include "kortex_driver/ChangeJointSpeeds.h" +#include "kortex_driver/ChangeWrench.h" +#include "kortex_driver/EmergencyStop.h" +#include "kortex_driver/Faults.h" +#include "kortex_driver/Delay.h" +#include "kortex_driver/Base_Stop.h" +#include "kortex_driver/ActionList.h" +#include "kortex_driver/Timeout.h" +#include "kortex_driver/Ssid.h" +#include "kortex_driver/CommunicationInterfaceConfiguration.h" +#include "kortex_driver/NetworkHandle.h" +#include "kortex_driver/IPv4Configuration.h" +#include "kortex_driver/IPv4Information.h" +#include "kortex_driver/FullIPv4Configuration.h" +#include "kortex_driver/WifiInformation.h" +#include "kortex_driver/WifiInformationList.h" +#include "kortex_driver/WifiConfiguration.h" +#include "kortex_driver/WifiConfigurationList.h" +#include "kortex_driver/ProtectionZoneHandle.h" +#include "kortex_driver/Base_RotationMatrixRow.h" +#include "kortex_driver/Base_RotationMatrix.h" +#include "kortex_driver/Point.h" +#include "kortex_driver/ZoneShape.h" +#include "kortex_driver/ProtectionZone.h" +#include "kortex_driver/ProtectionZoneList.h" +#include "kortex_driver/CartesianLimitation.h" +#include "kortex_driver/TwistLimitation.h" +#include "kortex_driver/WrenchLimitation.h" +#include "kortex_driver/CartesianLimitationList.h" +#include "kortex_driver/JointLimitation.h" +#include "kortex_driver/JointsLimitationsList.h" +#include "kortex_driver/Query.h" +#include "kortex_driver/ConfigurationChangeNotification.h" +#include "kortex_driver/MappingInfoNotification.h" +#include "kortex_driver/Base_ControlModeInformation.h" +#include "kortex_driver/ControlModeNotification.h" +#include "kortex_driver/ServoingModeInformation.h" +#include "kortex_driver/OperatingModeInformation.h" +#include "kortex_driver/OperatingModeNotification.h" +#include "kortex_driver/ServoingModeNotification.h" +#include "kortex_driver/SequenceInfoNotification.h" +#include "kortex_driver/SequenceInformation.h" +#include "kortex_driver/ProtectionZoneNotification.h" +#include "kortex_driver/ProtectionZoneInformation.h" +#include "kortex_driver/UserNotification.h" +#include "kortex_driver/ControllerHandle.h" +#include "kortex_driver/ControllerElementHandle.h" +#include "kortex_driver/ControllerNotification.h" +#include "kortex_driver/ControllerList.h" +#include "kortex_driver/ControllerState.h" +#include "kortex_driver/ControllerElementState.h" +#include "kortex_driver/ActionNotification.h" +#include "kortex_driver/ActionExecutionState.h" +#include "kortex_driver/RobotEventNotification.h" +#include "kortex_driver/FactoryNotification.h" +#include "kortex_driver/NetworkNotification.h" +#include "kortex_driver/ConfigurationChangeNotificationList.h" +#include "kortex_driver/MappingInfoNotificationList.h" +#include "kortex_driver/ControlModeNotificationList.h" +#include "kortex_driver/OperatingModeNotificationList.h" +#include "kortex_driver/ServoingModeNotificationList.h" +#include "kortex_driver/SequenceInfoNotificationList.h" +#include "kortex_driver/ProtectionZoneNotificationList.h" +#include "kortex_driver/UserNotificationList.h" +#include "kortex_driver/SafetyNotificationList.h" +#include "kortex_driver/ControllerNotificationList.h" +#include "kortex_driver/ActionNotificationList.h" +#include "kortex_driver/RobotEventNotificationList.h" +#include "kortex_driver/NetworkNotificationList.h" +#include "kortex_driver/MappingHandle.h" +#include "kortex_driver/SafetyEvent.h" +#include "kortex_driver/ControllerEvent.h" +#include "kortex_driver/GpioEvent.h" +#include "kortex_driver/MapEvent.h" +#include "kortex_driver/MapElement.h" +#include "kortex_driver/ActivateMapHandle.h" +#include "kortex_driver/Map.h" +#include "kortex_driver/MapHandle.h" +#include "kortex_driver/MapList.h" +#include "kortex_driver/MapGroupHandle.h" +#include "kortex_driver/MapGroup.h" +#include "kortex_driver/MapGroupList.h" +#include "kortex_driver/Mapping.h" +#include "kortex_driver/MappingList.h" +#include "kortex_driver/TransformationMatrix.h" +#include "kortex_driver/TransformationRow.h" +#include "kortex_driver/Pose.h" +#include "kortex_driver/Base_Position.h" +#include "kortex_driver/Orientation.h" +#include "kortex_driver/CartesianSpeed.h" +#include "kortex_driver/CartesianTrajectoryConstraint.h" +#include "kortex_driver/JointTrajectoryConstraint.h" +#include "kortex_driver/Wrench.h" +#include "kortex_driver/Twist.h" +#include "kortex_driver/Admittance.h" +#include "kortex_driver/ConstrainedPose.h" +#include "kortex_driver/ConstrainedPosition.h" +#include "kortex_driver/ConstrainedOrientation.h" +#include "kortex_driver/WrenchCommand.h" +#include "kortex_driver/TwistCommand.h" +#include "kortex_driver/ConstrainedJointAngles.h" +#include "kortex_driver/ConstrainedJointAngle.h" +#include "kortex_driver/JointAngles.h" +#include "kortex_driver/JointAngle.h" +#include "kortex_driver/JointSpeeds.h" +#include "kortex_driver/JointSpeed.h" +#include "kortex_driver/JointTorques.h" +#include "kortex_driver/JointTorque.h" +#include "kortex_driver/GripperCommand.h" +#include "kortex_driver/GripperRequest.h" +#include "kortex_driver/Gripper.h" +#include "kortex_driver/Finger.h" +#include "kortex_driver/SystemTime.h" +#include "kortex_driver/ActuatorInformation.h" +#include "kortex_driver/ArmStateInformation.h" +#include "kortex_driver/ArmStateNotification.h" +#include "kortex_driver/Base_CapSenseConfig.h" +#include "kortex_driver/BridgeList.h" +#include "kortex_driver/BridgeResult.h" +#include "kortex_driver/BridgeIdentifier.h" +#include "kortex_driver/BridgeConfig.h" +#include "kortex_driver/BridgePortConfig.h" +#include "kortex_driver/PreComputedJointTrajectory.h" +#include "kortex_driver/PreComputedJointTrajectoryElement.h" +#include "kortex_driver/TrajectoryErrorElement.h" +#include "kortex_driver/TrajectoryErrorReport.h" + + +int ToProtoData(kortex_driver::FullUserProfile input, Kinova::Api::Base::FullUserProfile *output); +int ToProtoData(kortex_driver::UserProfile input, Kinova::Api::Base::UserProfile *output); +int ToProtoData(kortex_driver::UserProfileList input, Kinova::Api::Base::UserProfileList *output); +int ToProtoData(kortex_driver::UserList input, Kinova::Api::Base::UserList *output); +int ToProtoData(kortex_driver::PasswordChange input, Kinova::Api::Base::PasswordChange *output); +int ToProtoData(kortex_driver::SequenceHandle input, Kinova::Api::Base::SequenceHandle *output); +int ToProtoData(kortex_driver::AdvancedSequenceHandle input, Kinova::Api::Base::AdvancedSequenceHandle *output); +int ToProtoData(kortex_driver::SequenceTaskHandle input, Kinova::Api::Base::SequenceTaskHandle *output); +int ToProtoData(kortex_driver::SequenceTask input, Kinova::Api::Base::SequenceTask *output); +int ToProtoData(kortex_driver::Sequence input, Kinova::Api::Base::Sequence *output); +int ToProtoData(kortex_driver::SequenceList input, Kinova::Api::Base::SequenceList *output); +int ToProtoData(kortex_driver::AppendActionInformation input, Kinova::Api::Base::AppendActionInformation *output); +int ToProtoData(kortex_driver::ActionHandle input, Kinova::Api::Base::ActionHandle *output); +int ToProtoData(kortex_driver::RequestedActionType input, Kinova::Api::Base::RequestedActionType *output); +int ToProtoData(kortex_driver::Action input, Kinova::Api::Base::Action *output); +int ToProtoData(kortex_driver::SwitchControlMapping input, Kinova::Api::Base::SwitchControlMapping *output); +int ToProtoData(kortex_driver::ChangeTwist input, Kinova::Api::Base::ChangeTwist *output); +int ToProtoData(kortex_driver::ChangeJointSpeeds input, Kinova::Api::Base::ChangeJointSpeeds *output); +int ToProtoData(kortex_driver::ChangeWrench input, Kinova::Api::Base::ChangeWrench *output); +int ToProtoData(kortex_driver::EmergencyStop input, Kinova::Api::Base::EmergencyStop *output); +int ToProtoData(kortex_driver::Faults input, Kinova::Api::Base::Faults *output); +int ToProtoData(kortex_driver::Delay input, Kinova::Api::Base::Delay *output); +int ToProtoData(kortex_driver::Base_Stop input, Kinova::Api::Base::Stop *output); +int ToProtoData(kortex_driver::ActionList input, Kinova::Api::Base::ActionList *output); +int ToProtoData(kortex_driver::Timeout input, Kinova::Api::Base::Timeout *output); +int ToProtoData(kortex_driver::Ssid input, Kinova::Api::Base::Ssid *output); +int ToProtoData(kortex_driver::CommunicationInterfaceConfiguration input, Kinova::Api::Base::CommunicationInterfaceConfiguration *output); +int ToProtoData(kortex_driver::NetworkHandle input, Kinova::Api::Base::NetworkHandle *output); +int ToProtoData(kortex_driver::IPv4Configuration input, Kinova::Api::Base::IPv4Configuration *output); +int ToProtoData(kortex_driver::IPv4Information input, Kinova::Api::Base::IPv4Information *output); +int ToProtoData(kortex_driver::FullIPv4Configuration input, Kinova::Api::Base::FullIPv4Configuration *output); +int ToProtoData(kortex_driver::WifiInformation input, Kinova::Api::Base::WifiInformation *output); +int ToProtoData(kortex_driver::WifiInformationList input, Kinova::Api::Base::WifiInformationList *output); +int ToProtoData(kortex_driver::WifiConfiguration input, Kinova::Api::Base::WifiConfiguration *output); +int ToProtoData(kortex_driver::WifiConfigurationList input, Kinova::Api::Base::WifiConfigurationList *output); +int ToProtoData(kortex_driver::ProtectionZoneHandle input, Kinova::Api::Base::ProtectionZoneHandle *output); +int ToProtoData(kortex_driver::Base_RotationMatrixRow input, Kinova::Api::Base::RotationMatrixRow *output); +int ToProtoData(kortex_driver::Base_RotationMatrix input, Kinova::Api::Base::RotationMatrix *output); +int ToProtoData(kortex_driver::Point input, Kinova::Api::Base::Point *output); +int ToProtoData(kortex_driver::ZoneShape input, Kinova::Api::Base::ZoneShape *output); +int ToProtoData(kortex_driver::ProtectionZone input, Kinova::Api::Base::ProtectionZone *output); +int ToProtoData(kortex_driver::ProtectionZoneList input, Kinova::Api::Base::ProtectionZoneList *output); +int ToProtoData(kortex_driver::CartesianLimitation input, Kinova::Api::Base::CartesianLimitation *output); +int ToProtoData(kortex_driver::TwistLimitation input, Kinova::Api::Base::TwistLimitation *output); +int ToProtoData(kortex_driver::WrenchLimitation input, Kinova::Api::Base::WrenchLimitation *output); +int ToProtoData(kortex_driver::CartesianLimitationList input, Kinova::Api::Base::CartesianLimitationList *output); +int ToProtoData(kortex_driver::JointLimitation input, Kinova::Api::Base::JointLimitation *output); +int ToProtoData(kortex_driver::JointsLimitationsList input, Kinova::Api::Base::JointsLimitationsList *output); +int ToProtoData(kortex_driver::Query input, Kinova::Api::Base::Query *output); +int ToProtoData(kortex_driver::ConfigurationChangeNotification input, Kinova::Api::Base::ConfigurationChangeNotification *output); +int ToProtoData(kortex_driver::MappingInfoNotification input, Kinova::Api::Base::MappingInfoNotification *output); +int ToProtoData(kortex_driver::Base_ControlModeInformation input, Kinova::Api::Base::ControlModeInformation *output); +int ToProtoData(kortex_driver::ControlModeNotification input, Kinova::Api::Base::ControlModeNotification *output); +int ToProtoData(kortex_driver::ServoingModeInformation input, Kinova::Api::Base::ServoingModeInformation *output); +int ToProtoData(kortex_driver::OperatingModeInformation input, Kinova::Api::Base::OperatingModeInformation *output); +int ToProtoData(kortex_driver::OperatingModeNotification input, Kinova::Api::Base::OperatingModeNotification *output); +int ToProtoData(kortex_driver::ServoingModeNotification input, Kinova::Api::Base::ServoingModeNotification *output); +int ToProtoData(kortex_driver::SequenceInfoNotification input, Kinova::Api::Base::SequenceInfoNotification *output); +int ToProtoData(kortex_driver::SequenceInformation input, Kinova::Api::Base::SequenceInformation *output); +int ToProtoData(kortex_driver::ProtectionZoneNotification input, Kinova::Api::Base::ProtectionZoneNotification *output); +int ToProtoData(kortex_driver::ProtectionZoneInformation input, Kinova::Api::Base::ProtectionZoneInformation *output); +int ToProtoData(kortex_driver::UserNotification input, Kinova::Api::Base::UserNotification *output); +int ToProtoData(kortex_driver::ControllerHandle input, Kinova::Api::Base::ControllerHandle *output); +int ToProtoData(kortex_driver::ControllerElementHandle input, Kinova::Api::Base::ControllerElementHandle *output); +int ToProtoData(kortex_driver::ControllerNotification input, Kinova::Api::Base::ControllerNotification *output); +int ToProtoData(kortex_driver::ControllerList input, Kinova::Api::Base::ControllerList *output); +int ToProtoData(kortex_driver::ControllerState input, Kinova::Api::Base::ControllerState *output); +int ToProtoData(kortex_driver::ControllerElementState input, Kinova::Api::Base::ControllerElementState *output); +int ToProtoData(kortex_driver::ActionNotification input, Kinova::Api::Base::ActionNotification *output); +int ToProtoData(kortex_driver::ActionExecutionState input, Kinova::Api::Base::ActionExecutionState *output); +int ToProtoData(kortex_driver::RobotEventNotification input, Kinova::Api::Base::RobotEventNotification *output); +int ToProtoData(kortex_driver::FactoryNotification input, Kinova::Api::Base::FactoryNotification *output); +int ToProtoData(kortex_driver::NetworkNotification input, Kinova::Api::Base::NetworkNotification *output); +int ToProtoData(kortex_driver::ConfigurationChangeNotificationList input, Kinova::Api::Base::ConfigurationChangeNotificationList *output); +int ToProtoData(kortex_driver::MappingInfoNotificationList input, Kinova::Api::Base::MappingInfoNotificationList *output); +int ToProtoData(kortex_driver::ControlModeNotificationList input, Kinova::Api::Base::ControlModeNotificationList *output); +int ToProtoData(kortex_driver::OperatingModeNotificationList input, Kinova::Api::Base::OperatingModeNotificationList *output); +int ToProtoData(kortex_driver::ServoingModeNotificationList input, Kinova::Api::Base::ServoingModeNotificationList *output); +int ToProtoData(kortex_driver::SequenceInfoNotificationList input, Kinova::Api::Base::SequenceInfoNotificationList *output); +int ToProtoData(kortex_driver::ProtectionZoneNotificationList input, Kinova::Api::Base::ProtectionZoneNotificationList *output); +int ToProtoData(kortex_driver::UserNotificationList input, Kinova::Api::Base::UserNotificationList *output); +int ToProtoData(kortex_driver::SafetyNotificationList input, Kinova::Api::Base::SafetyNotificationList *output); +int ToProtoData(kortex_driver::ControllerNotificationList input, Kinova::Api::Base::ControllerNotificationList *output); +int ToProtoData(kortex_driver::ActionNotificationList input, Kinova::Api::Base::ActionNotificationList *output); +int ToProtoData(kortex_driver::RobotEventNotificationList input, Kinova::Api::Base::RobotEventNotificationList *output); +int ToProtoData(kortex_driver::NetworkNotificationList input, Kinova::Api::Base::NetworkNotificationList *output); +int ToProtoData(kortex_driver::MappingHandle input, Kinova::Api::Base::MappingHandle *output); +int ToProtoData(kortex_driver::SafetyEvent input, Kinova::Api::Base::SafetyEvent *output); +int ToProtoData(kortex_driver::ControllerEvent input, Kinova::Api::Base::ControllerEvent *output); +int ToProtoData(kortex_driver::GpioEvent input, Kinova::Api::Base::GpioEvent *output); +int ToProtoData(kortex_driver::MapEvent input, Kinova::Api::Base::MapEvent *output); +int ToProtoData(kortex_driver::MapElement input, Kinova::Api::Base::MapElement *output); +int ToProtoData(kortex_driver::ActivateMapHandle input, Kinova::Api::Base::ActivateMapHandle *output); +int ToProtoData(kortex_driver::Map input, Kinova::Api::Base::Map *output); +int ToProtoData(kortex_driver::MapHandle input, Kinova::Api::Base::MapHandle *output); +int ToProtoData(kortex_driver::MapList input, Kinova::Api::Base::MapList *output); +int ToProtoData(kortex_driver::MapGroupHandle input, Kinova::Api::Base::MapGroupHandle *output); +int ToProtoData(kortex_driver::MapGroup input, Kinova::Api::Base::MapGroup *output); +int ToProtoData(kortex_driver::MapGroupList input, Kinova::Api::Base::MapGroupList *output); +int ToProtoData(kortex_driver::Mapping input, Kinova::Api::Base::Mapping *output); +int ToProtoData(kortex_driver::MappingList input, Kinova::Api::Base::MappingList *output); +int ToProtoData(kortex_driver::TransformationMatrix input, Kinova::Api::Base::TransformationMatrix *output); +int ToProtoData(kortex_driver::TransformationRow input, Kinova::Api::Base::TransformationRow *output); +int ToProtoData(kortex_driver::Pose input, Kinova::Api::Base::Pose *output); +int ToProtoData(kortex_driver::Base_Position input, Kinova::Api::Base::Position *output); +int ToProtoData(kortex_driver::Orientation input, Kinova::Api::Base::Orientation *output); +int ToProtoData(kortex_driver::CartesianSpeed input, Kinova::Api::Base::CartesianSpeed *output); +int ToProtoData(kortex_driver::CartesianTrajectoryConstraint input, Kinova::Api::Base::CartesianTrajectoryConstraint *output); +int ToProtoData(kortex_driver::JointTrajectoryConstraint input, Kinova::Api::Base::JointTrajectoryConstraint *output); +int ToProtoData(kortex_driver::Wrench input, Kinova::Api::Base::Wrench *output); +int ToProtoData(kortex_driver::Twist input, Kinova::Api::Base::Twist *output); +int ToProtoData(kortex_driver::Admittance input, Kinova::Api::Base::Admittance *output); +int ToProtoData(kortex_driver::ConstrainedPose input, Kinova::Api::Base::ConstrainedPose *output); +int ToProtoData(kortex_driver::ConstrainedPosition input, Kinova::Api::Base::ConstrainedPosition *output); +int ToProtoData(kortex_driver::ConstrainedOrientation input, Kinova::Api::Base::ConstrainedOrientation *output); +int ToProtoData(kortex_driver::WrenchCommand input, Kinova::Api::Base::WrenchCommand *output); +int ToProtoData(kortex_driver::TwistCommand input, Kinova::Api::Base::TwistCommand *output); +int ToProtoData(kortex_driver::ConstrainedJointAngles input, Kinova::Api::Base::ConstrainedJointAngles *output); +int ToProtoData(kortex_driver::ConstrainedJointAngle input, Kinova::Api::Base::ConstrainedJointAngle *output); +int ToProtoData(kortex_driver::JointAngles input, Kinova::Api::Base::JointAngles *output); +int ToProtoData(kortex_driver::JointAngle input, Kinova::Api::Base::JointAngle *output); +int ToProtoData(kortex_driver::JointSpeeds input, Kinova::Api::Base::JointSpeeds *output); +int ToProtoData(kortex_driver::JointSpeed input, Kinova::Api::Base::JointSpeed *output); +int ToProtoData(kortex_driver::JointTorques input, Kinova::Api::Base::JointTorques *output); +int ToProtoData(kortex_driver::JointTorque input, Kinova::Api::Base::JointTorque *output); +int ToProtoData(kortex_driver::GripperCommand input, Kinova::Api::Base::GripperCommand *output); +int ToProtoData(kortex_driver::GripperRequest input, Kinova::Api::Base::GripperRequest *output); +int ToProtoData(kortex_driver::Gripper input, Kinova::Api::Base::Gripper *output); +int ToProtoData(kortex_driver::Finger input, Kinova::Api::Base::Finger *output); +int ToProtoData(kortex_driver::SystemTime input, Kinova::Api::Base::SystemTime *output); +int ToProtoData(kortex_driver::ActuatorInformation input, Kinova::Api::Base::ActuatorInformation *output); +int ToProtoData(kortex_driver::ArmStateInformation input, Kinova::Api::Base::ArmStateInformation *output); +int ToProtoData(kortex_driver::ArmStateNotification input, Kinova::Api::Base::ArmStateNotification *output); +int ToProtoData(kortex_driver::Base_CapSenseConfig input, Kinova::Api::Base::CapSenseConfig *output); +int ToProtoData(kortex_driver::BridgeList input, Kinova::Api::Base::BridgeList *output); +int ToProtoData(kortex_driver::BridgeResult input, Kinova::Api::Base::BridgeResult *output); +int ToProtoData(kortex_driver::BridgeIdentifier input, Kinova::Api::Base::BridgeIdentifier *output); +int ToProtoData(kortex_driver::BridgeConfig input, Kinova::Api::Base::BridgeConfig *output); +int ToProtoData(kortex_driver::BridgePortConfig input, Kinova::Api::Base::BridgePortConfig *output); +int ToProtoData(kortex_driver::PreComputedJointTrajectory input, Kinova::Api::Base::PreComputedJointTrajectory *output); +int ToProtoData(kortex_driver::PreComputedJointTrajectoryElement input, Kinova::Api::Base::PreComputedJointTrajectoryElement *output); +int ToProtoData(kortex_driver::TrajectoryErrorElement input, Kinova::Api::Base::TrajectoryErrorElement *output); +int ToProtoData(kortex_driver::TrajectoryErrorReport input, Kinova::Api::Base::TrajectoryErrorReport *output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/base_ros_converter.h b/kortex_driver/include/kortex_driver/generated/base_ros_converter.h new file mode 100644 index 00000000..3709bc08 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/base_ros_converter.h @@ -0,0 +1,333 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_BASE_ROS_CONVERTER_H_ +#define _KORTEX_BASE_ROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_ros_converter.h" +#include "kortex_driver/generated/actuatorconfig_ros_converter.h" +#include "kortex_driver/generated/actuatorcyclic_ros_converter.h" +#include "kortex_driver/generated/productconfiguration_ros_converter.h" +#include "kortex_driver/generated/grippercyclic_ros_converter.h" +#include "kortex_driver/generated/interconnectcyclic_ros_converter.h" +#include "kortex_driver/generated/basecyclic_ros_converter.h" +#include "kortex_driver/generated/controlconfig_ros_converter.h" +#include "kortex_driver/generated/deviceconfig_ros_converter.h" +#include "kortex_driver/generated/devicemanager_ros_converter.h" +#include "kortex_driver/generated/interconnectconfig_ros_converter.h" +#include "kortex_driver/generated/visionconfig_ros_converter.h" + + +#include "kortex_driver/FullUserProfile.h" +#include "kortex_driver/UserProfile.h" +#include "kortex_driver/UserProfileList.h" +#include "kortex_driver/UserList.h" +#include "kortex_driver/PasswordChange.h" +#include "kortex_driver/SequenceHandle.h" +#include "kortex_driver/AdvancedSequenceHandle.h" +#include "kortex_driver/SequenceTaskHandle.h" +#include "kortex_driver/SequenceTask.h" +#include "kortex_driver/Sequence.h" +#include "kortex_driver/SequenceList.h" +#include "kortex_driver/AppendActionInformation.h" +#include "kortex_driver/ActionHandle.h" +#include "kortex_driver/RequestedActionType.h" +#include "kortex_driver/Action.h" +#include "kortex_driver/SwitchControlMapping.h" +#include "kortex_driver/ChangeTwist.h" +#include "kortex_driver/ChangeJointSpeeds.h" +#include "kortex_driver/ChangeWrench.h" +#include "kortex_driver/EmergencyStop.h" +#include "kortex_driver/Faults.h" +#include "kortex_driver/Delay.h" +#include "kortex_driver/Base_Stop.h" +#include "kortex_driver/ActionList.h" +#include "kortex_driver/Timeout.h" +#include "kortex_driver/Ssid.h" +#include "kortex_driver/CommunicationInterfaceConfiguration.h" +#include "kortex_driver/NetworkHandle.h" +#include "kortex_driver/IPv4Configuration.h" +#include "kortex_driver/IPv4Information.h" +#include "kortex_driver/FullIPv4Configuration.h" +#include "kortex_driver/WifiInformation.h" +#include "kortex_driver/WifiInformationList.h" +#include "kortex_driver/WifiConfiguration.h" +#include "kortex_driver/WifiConfigurationList.h" +#include "kortex_driver/ProtectionZoneHandle.h" +#include "kortex_driver/Base_RotationMatrixRow.h" +#include "kortex_driver/Base_RotationMatrix.h" +#include "kortex_driver/Point.h" +#include "kortex_driver/ZoneShape.h" +#include "kortex_driver/ProtectionZone.h" +#include "kortex_driver/ProtectionZoneList.h" +#include "kortex_driver/CartesianLimitation.h" +#include "kortex_driver/TwistLimitation.h" +#include "kortex_driver/WrenchLimitation.h" +#include "kortex_driver/CartesianLimitationList.h" +#include "kortex_driver/JointLimitation.h" +#include "kortex_driver/JointsLimitationsList.h" +#include "kortex_driver/Query.h" +#include "kortex_driver/ConfigurationChangeNotification.h" +#include "kortex_driver/MappingInfoNotification.h" +#include "kortex_driver/Base_ControlModeInformation.h" +#include "kortex_driver/ControlModeNotification.h" +#include "kortex_driver/ServoingModeInformation.h" +#include "kortex_driver/OperatingModeInformation.h" +#include "kortex_driver/OperatingModeNotification.h" +#include "kortex_driver/ServoingModeNotification.h" +#include "kortex_driver/SequenceInfoNotification.h" +#include "kortex_driver/SequenceInformation.h" +#include "kortex_driver/ProtectionZoneNotification.h" +#include "kortex_driver/ProtectionZoneInformation.h" +#include "kortex_driver/UserNotification.h" +#include "kortex_driver/ControllerHandle.h" +#include "kortex_driver/ControllerElementHandle.h" +#include "kortex_driver/ControllerNotification.h" +#include "kortex_driver/ControllerList.h" +#include "kortex_driver/ControllerState.h" +#include "kortex_driver/ControllerElementState.h" +#include "kortex_driver/ActionNotification.h" +#include "kortex_driver/ActionExecutionState.h" +#include "kortex_driver/RobotEventNotification.h" +#include "kortex_driver/FactoryNotification.h" +#include "kortex_driver/NetworkNotification.h" +#include "kortex_driver/ConfigurationChangeNotificationList.h" +#include "kortex_driver/MappingInfoNotificationList.h" +#include "kortex_driver/ControlModeNotificationList.h" +#include "kortex_driver/OperatingModeNotificationList.h" +#include "kortex_driver/ServoingModeNotificationList.h" +#include "kortex_driver/SequenceInfoNotificationList.h" +#include "kortex_driver/ProtectionZoneNotificationList.h" +#include "kortex_driver/UserNotificationList.h" +#include "kortex_driver/SafetyNotificationList.h" +#include "kortex_driver/ControllerNotificationList.h" +#include "kortex_driver/ActionNotificationList.h" +#include "kortex_driver/RobotEventNotificationList.h" +#include "kortex_driver/NetworkNotificationList.h" +#include "kortex_driver/MappingHandle.h" +#include "kortex_driver/SafetyEvent.h" +#include "kortex_driver/ControllerEvent.h" +#include "kortex_driver/GpioEvent.h" +#include "kortex_driver/MapEvent.h" +#include "kortex_driver/MapElement.h" +#include "kortex_driver/ActivateMapHandle.h" +#include "kortex_driver/Map.h" +#include "kortex_driver/MapHandle.h" +#include "kortex_driver/MapList.h" +#include "kortex_driver/MapGroupHandle.h" +#include "kortex_driver/MapGroup.h" +#include "kortex_driver/MapGroupList.h" +#include "kortex_driver/Mapping.h" +#include "kortex_driver/MappingList.h" +#include "kortex_driver/TransformationMatrix.h" +#include "kortex_driver/TransformationRow.h" +#include "kortex_driver/Pose.h" +#include "kortex_driver/Base_Position.h" +#include "kortex_driver/Orientation.h" +#include "kortex_driver/CartesianSpeed.h" +#include "kortex_driver/CartesianTrajectoryConstraint.h" +#include "kortex_driver/JointTrajectoryConstraint.h" +#include "kortex_driver/Wrench.h" +#include "kortex_driver/Twist.h" +#include "kortex_driver/Admittance.h" +#include "kortex_driver/ConstrainedPose.h" +#include "kortex_driver/ConstrainedPosition.h" +#include "kortex_driver/ConstrainedOrientation.h" +#include "kortex_driver/WrenchCommand.h" +#include "kortex_driver/TwistCommand.h" +#include "kortex_driver/ConstrainedJointAngles.h" +#include "kortex_driver/ConstrainedJointAngle.h" +#include "kortex_driver/JointAngles.h" +#include "kortex_driver/JointAngle.h" +#include "kortex_driver/JointSpeeds.h" +#include "kortex_driver/JointSpeed.h" +#include "kortex_driver/JointTorques.h" +#include "kortex_driver/JointTorque.h" +#include "kortex_driver/GripperCommand.h" +#include "kortex_driver/GripperRequest.h" +#include "kortex_driver/Gripper.h" +#include "kortex_driver/Finger.h" +#include "kortex_driver/SystemTime.h" +#include "kortex_driver/ActuatorInformation.h" +#include "kortex_driver/ArmStateInformation.h" +#include "kortex_driver/ArmStateNotification.h" +#include "kortex_driver/Base_CapSenseConfig.h" +#include "kortex_driver/BridgeList.h" +#include "kortex_driver/BridgeResult.h" +#include "kortex_driver/BridgeIdentifier.h" +#include "kortex_driver/BridgeConfig.h" +#include "kortex_driver/BridgePortConfig.h" +#include "kortex_driver/PreComputedJointTrajectory.h" +#include "kortex_driver/PreComputedJointTrajectoryElement.h" +#include "kortex_driver/TrajectoryErrorElement.h" +#include "kortex_driver/TrajectoryErrorReport.h" + + +int ToRosData(Kinova::Api::Base::FullUserProfile input, kortex_driver::FullUserProfile &output); +int ToRosData(Kinova::Api::Base::UserProfile input, kortex_driver::UserProfile &output); +int ToRosData(Kinova::Api::Base::UserProfileList input, kortex_driver::UserProfileList &output); +int ToRosData(Kinova::Api::Base::UserList input, kortex_driver::UserList &output); +int ToRosData(Kinova::Api::Base::PasswordChange input, kortex_driver::PasswordChange &output); +int ToRosData(Kinova::Api::Base::SequenceHandle input, kortex_driver::SequenceHandle &output); +int ToRosData(Kinova::Api::Base::AdvancedSequenceHandle input, kortex_driver::AdvancedSequenceHandle &output); +int ToRosData(Kinova::Api::Base::SequenceTaskHandle input, kortex_driver::SequenceTaskHandle &output); +int ToRosData(Kinova::Api::Base::SequenceTask input, kortex_driver::SequenceTask &output); +int ToRosData(Kinova::Api::Base::Sequence input, kortex_driver::Sequence &output); +int ToRosData(Kinova::Api::Base::SequenceList input, kortex_driver::SequenceList &output); +int ToRosData(Kinova::Api::Base::AppendActionInformation input, kortex_driver::AppendActionInformation &output); +int ToRosData(Kinova::Api::Base::ActionHandle input, kortex_driver::ActionHandle &output); +int ToRosData(Kinova::Api::Base::RequestedActionType input, kortex_driver::RequestedActionType &output); +int ToRosData(Kinova::Api::Base::Action input, kortex_driver::Action &output); +int ToRosData(Kinova::Api::Base::SwitchControlMapping input, kortex_driver::SwitchControlMapping &output); +int ToRosData(Kinova::Api::Base::ChangeTwist input, kortex_driver::ChangeTwist &output); +int ToRosData(Kinova::Api::Base::ChangeJointSpeeds input, kortex_driver::ChangeJointSpeeds &output); +int ToRosData(Kinova::Api::Base::ChangeWrench input, kortex_driver::ChangeWrench &output); +int ToRosData(Kinova::Api::Base::EmergencyStop input, kortex_driver::EmergencyStop &output); +int ToRosData(Kinova::Api::Base::Faults input, kortex_driver::Faults &output); +int ToRosData(Kinova::Api::Base::Delay input, kortex_driver::Delay &output); +int ToRosData(Kinova::Api::Base::Stop input, kortex_driver::Base_Stop &output); +int ToRosData(Kinova::Api::Base::ActionList input, kortex_driver::ActionList &output); +int ToRosData(Kinova::Api::Base::Timeout input, kortex_driver::Timeout &output); +int ToRosData(Kinova::Api::Base::Ssid input, kortex_driver::Ssid &output); +int ToRosData(Kinova::Api::Base::CommunicationInterfaceConfiguration input, kortex_driver::CommunicationInterfaceConfiguration &output); +int ToRosData(Kinova::Api::Base::NetworkHandle input, kortex_driver::NetworkHandle &output); +int ToRosData(Kinova::Api::Base::IPv4Configuration input, kortex_driver::IPv4Configuration &output); +int ToRosData(Kinova::Api::Base::IPv4Information input, kortex_driver::IPv4Information &output); +int ToRosData(Kinova::Api::Base::FullIPv4Configuration input, kortex_driver::FullIPv4Configuration &output); +int ToRosData(Kinova::Api::Base::WifiInformation input, kortex_driver::WifiInformation &output); +int ToRosData(Kinova::Api::Base::WifiInformationList input, kortex_driver::WifiInformationList &output); +int ToRosData(Kinova::Api::Base::WifiConfiguration input, kortex_driver::WifiConfiguration &output); +int ToRosData(Kinova::Api::Base::WifiConfigurationList input, kortex_driver::WifiConfigurationList &output); +int ToRosData(Kinova::Api::Base::ProtectionZoneHandle input, kortex_driver::ProtectionZoneHandle &output); +int ToRosData(Kinova::Api::Base::RotationMatrixRow input, kortex_driver::Base_RotationMatrixRow &output); +int ToRosData(Kinova::Api::Base::RotationMatrix input, kortex_driver::Base_RotationMatrix &output); +int ToRosData(Kinova::Api::Base::Point input, kortex_driver::Point &output); +int ToRosData(Kinova::Api::Base::ZoneShape input, kortex_driver::ZoneShape &output); +int ToRosData(Kinova::Api::Base::ProtectionZone input, kortex_driver::ProtectionZone &output); +int ToRosData(Kinova::Api::Base::ProtectionZoneList input, kortex_driver::ProtectionZoneList &output); +int ToRosData(Kinova::Api::Base::CartesianLimitation input, kortex_driver::CartesianLimitation &output); +int ToRosData(Kinova::Api::Base::TwistLimitation input, kortex_driver::TwistLimitation &output); +int ToRosData(Kinova::Api::Base::WrenchLimitation input, kortex_driver::WrenchLimitation &output); +int ToRosData(Kinova::Api::Base::CartesianLimitationList input, kortex_driver::CartesianLimitationList &output); +int ToRosData(Kinova::Api::Base::JointLimitation input, kortex_driver::JointLimitation &output); +int ToRosData(Kinova::Api::Base::JointsLimitationsList input, kortex_driver::JointsLimitationsList &output); +int ToRosData(Kinova::Api::Base::Query input, kortex_driver::Query &output); +int ToRosData(Kinova::Api::Base::ConfigurationChangeNotification input, kortex_driver::ConfigurationChangeNotification &output); +int ToRosData(Kinova::Api::Base::MappingInfoNotification input, kortex_driver::MappingInfoNotification &output); +int ToRosData(Kinova::Api::Base::ControlModeInformation input, kortex_driver::Base_ControlModeInformation &output); +int ToRosData(Kinova::Api::Base::ControlModeNotification input, kortex_driver::ControlModeNotification &output); +int ToRosData(Kinova::Api::Base::ServoingModeInformation input, kortex_driver::ServoingModeInformation &output); +int ToRosData(Kinova::Api::Base::OperatingModeInformation input, kortex_driver::OperatingModeInformation &output); +int ToRosData(Kinova::Api::Base::OperatingModeNotification input, kortex_driver::OperatingModeNotification &output); +int ToRosData(Kinova::Api::Base::ServoingModeNotification input, kortex_driver::ServoingModeNotification &output); +int ToRosData(Kinova::Api::Base::SequenceInfoNotification input, kortex_driver::SequenceInfoNotification &output); +int ToRosData(Kinova::Api::Base::SequenceInformation input, kortex_driver::SequenceInformation &output); +int ToRosData(Kinova::Api::Base::ProtectionZoneNotification input, kortex_driver::ProtectionZoneNotification &output); +int ToRosData(Kinova::Api::Base::ProtectionZoneInformation input, kortex_driver::ProtectionZoneInformation &output); +int ToRosData(Kinova::Api::Base::UserNotification input, kortex_driver::UserNotification &output); +int ToRosData(Kinova::Api::Base::ControllerHandle input, kortex_driver::ControllerHandle &output); +int ToRosData(Kinova::Api::Base::ControllerElementHandle input, kortex_driver::ControllerElementHandle &output); +int ToRosData(Kinova::Api::Base::ControllerNotification input, kortex_driver::ControllerNotification &output); +int ToRosData(Kinova::Api::Base::ControllerList input, kortex_driver::ControllerList &output); +int ToRosData(Kinova::Api::Base::ControllerState input, kortex_driver::ControllerState &output); +int ToRosData(Kinova::Api::Base::ControllerElementState input, kortex_driver::ControllerElementState &output); +int ToRosData(Kinova::Api::Base::ActionNotification input, kortex_driver::ActionNotification &output); +int ToRosData(Kinova::Api::Base::ActionExecutionState input, kortex_driver::ActionExecutionState &output); +int ToRosData(Kinova::Api::Base::RobotEventNotification input, kortex_driver::RobotEventNotification &output); +int ToRosData(Kinova::Api::Base::FactoryNotification input, kortex_driver::FactoryNotification &output); +int ToRosData(Kinova::Api::Base::NetworkNotification input, kortex_driver::NetworkNotification &output); +int ToRosData(Kinova::Api::Base::ConfigurationChangeNotificationList input, kortex_driver::ConfigurationChangeNotificationList &output); +int ToRosData(Kinova::Api::Base::MappingInfoNotificationList input, kortex_driver::MappingInfoNotificationList &output); +int ToRosData(Kinova::Api::Base::ControlModeNotificationList input, kortex_driver::ControlModeNotificationList &output); +int ToRosData(Kinova::Api::Base::OperatingModeNotificationList input, kortex_driver::OperatingModeNotificationList &output); +int ToRosData(Kinova::Api::Base::ServoingModeNotificationList input, kortex_driver::ServoingModeNotificationList &output); +int ToRosData(Kinova::Api::Base::SequenceInfoNotificationList input, kortex_driver::SequenceInfoNotificationList &output); +int ToRosData(Kinova::Api::Base::ProtectionZoneNotificationList input, kortex_driver::ProtectionZoneNotificationList &output); +int ToRosData(Kinova::Api::Base::UserNotificationList input, kortex_driver::UserNotificationList &output); +int ToRosData(Kinova::Api::Base::SafetyNotificationList input, kortex_driver::SafetyNotificationList &output); +int ToRosData(Kinova::Api::Base::ControllerNotificationList input, kortex_driver::ControllerNotificationList &output); +int ToRosData(Kinova::Api::Base::ActionNotificationList input, kortex_driver::ActionNotificationList &output); +int ToRosData(Kinova::Api::Base::RobotEventNotificationList input, kortex_driver::RobotEventNotificationList &output); +int ToRosData(Kinova::Api::Base::NetworkNotificationList input, kortex_driver::NetworkNotificationList &output); +int ToRosData(Kinova::Api::Base::MappingHandle input, kortex_driver::MappingHandle &output); +int ToRosData(Kinova::Api::Base::SafetyEvent input, kortex_driver::SafetyEvent &output); +int ToRosData(Kinova::Api::Base::ControllerEvent input, kortex_driver::ControllerEvent &output); +int ToRosData(Kinova::Api::Base::GpioEvent input, kortex_driver::GpioEvent &output); +int ToRosData(Kinova::Api::Base::MapEvent input, kortex_driver::MapEvent &output); +int ToRosData(Kinova::Api::Base::MapElement input, kortex_driver::MapElement &output); +int ToRosData(Kinova::Api::Base::ActivateMapHandle input, kortex_driver::ActivateMapHandle &output); +int ToRosData(Kinova::Api::Base::Map input, kortex_driver::Map &output); +int ToRosData(Kinova::Api::Base::MapHandle input, kortex_driver::MapHandle &output); +int ToRosData(Kinova::Api::Base::MapList input, kortex_driver::MapList &output); +int ToRosData(Kinova::Api::Base::MapGroupHandle input, kortex_driver::MapGroupHandle &output); +int ToRosData(Kinova::Api::Base::MapGroup input, kortex_driver::MapGroup &output); +int ToRosData(Kinova::Api::Base::MapGroupList input, kortex_driver::MapGroupList &output); +int ToRosData(Kinova::Api::Base::Mapping input, kortex_driver::Mapping &output); +int ToRosData(Kinova::Api::Base::MappingList input, kortex_driver::MappingList &output); +int ToRosData(Kinova::Api::Base::TransformationMatrix input, kortex_driver::TransformationMatrix &output); +int ToRosData(Kinova::Api::Base::TransformationRow input, kortex_driver::TransformationRow &output); +int ToRosData(Kinova::Api::Base::Pose input, kortex_driver::Pose &output); +int ToRosData(Kinova::Api::Base::Position input, kortex_driver::Base_Position &output); +int ToRosData(Kinova::Api::Base::Orientation input, kortex_driver::Orientation &output); +int ToRosData(Kinova::Api::Base::CartesianSpeed input, kortex_driver::CartesianSpeed &output); +int ToRosData(Kinova::Api::Base::CartesianTrajectoryConstraint input, kortex_driver::CartesianTrajectoryConstraint &output); +int ToRosData(Kinova::Api::Base::JointTrajectoryConstraint input, kortex_driver::JointTrajectoryConstraint &output); +int ToRosData(Kinova::Api::Base::Wrench input, kortex_driver::Wrench &output); +int ToRosData(Kinova::Api::Base::Twist input, kortex_driver::Twist &output); +int ToRosData(Kinova::Api::Base::Admittance input, kortex_driver::Admittance &output); +int ToRosData(Kinova::Api::Base::ConstrainedPose input, kortex_driver::ConstrainedPose &output); +int ToRosData(Kinova::Api::Base::ConstrainedPosition input, kortex_driver::ConstrainedPosition &output); +int ToRosData(Kinova::Api::Base::ConstrainedOrientation input, kortex_driver::ConstrainedOrientation &output); +int ToRosData(Kinova::Api::Base::WrenchCommand input, kortex_driver::WrenchCommand &output); +int ToRosData(Kinova::Api::Base::TwistCommand input, kortex_driver::TwistCommand &output); +int ToRosData(Kinova::Api::Base::ConstrainedJointAngles input, kortex_driver::ConstrainedJointAngles &output); +int ToRosData(Kinova::Api::Base::ConstrainedJointAngle input, kortex_driver::ConstrainedJointAngle &output); +int ToRosData(Kinova::Api::Base::JointAngles input, kortex_driver::JointAngles &output); +int ToRosData(Kinova::Api::Base::JointAngle input, kortex_driver::JointAngle &output); +int ToRosData(Kinova::Api::Base::JointSpeeds input, kortex_driver::JointSpeeds &output); +int ToRosData(Kinova::Api::Base::JointSpeed input, kortex_driver::JointSpeed &output); +int ToRosData(Kinova::Api::Base::JointTorques input, kortex_driver::JointTorques &output); +int ToRosData(Kinova::Api::Base::JointTorque input, kortex_driver::JointTorque &output); +int ToRosData(Kinova::Api::Base::GripperCommand input, kortex_driver::GripperCommand &output); +int ToRosData(Kinova::Api::Base::GripperRequest input, kortex_driver::GripperRequest &output); +int ToRosData(Kinova::Api::Base::Gripper input, kortex_driver::Gripper &output); +int ToRosData(Kinova::Api::Base::Finger input, kortex_driver::Finger &output); +int ToRosData(Kinova::Api::Base::SystemTime input, kortex_driver::SystemTime &output); +int ToRosData(Kinova::Api::Base::ActuatorInformation input, kortex_driver::ActuatorInformation &output); +int ToRosData(Kinova::Api::Base::ArmStateInformation input, kortex_driver::ArmStateInformation &output); +int ToRosData(Kinova::Api::Base::ArmStateNotification input, kortex_driver::ArmStateNotification &output); +int ToRosData(Kinova::Api::Base::CapSenseConfig input, kortex_driver::Base_CapSenseConfig &output); +int ToRosData(Kinova::Api::Base::BridgeList input, kortex_driver::BridgeList &output); +int ToRosData(Kinova::Api::Base::BridgeResult input, kortex_driver::BridgeResult &output); +int ToRosData(Kinova::Api::Base::BridgeIdentifier input, kortex_driver::BridgeIdentifier &output); +int ToRosData(Kinova::Api::Base::BridgeConfig input, kortex_driver::BridgeConfig &output); +int ToRosData(Kinova::Api::Base::BridgePortConfig input, kortex_driver::BridgePortConfig &output); +int ToRosData(Kinova::Api::Base::PreComputedJointTrajectory input, kortex_driver::PreComputedJointTrajectory &output); +int ToRosData(Kinova::Api::Base::PreComputedJointTrajectoryElement input, kortex_driver::PreComputedJointTrajectoryElement &output); +int ToRosData(Kinova::Api::Base::TrajectoryErrorElement input, kortex_driver::TrajectoryErrorElement &output); +int ToRosData(Kinova::Api::Base::TrajectoryErrorReport input, kortex_driver::TrajectoryErrorReport &output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/base_services.h b/kortex_driver/include/kortex_driver/generated/base_services.h new file mode 100644 index 00000000..34ad68b6 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/base_services.h @@ -0,0 +1,485 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_BASE_SERVICES_H_ +#define _KORTEX_BASE_SERVICES_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include "kortex_driver/CreateUserProfile.h" +#include "kortex_driver/UpdateUserProfile.h" +#include "kortex_driver/ReadUserProfile.h" +#include "kortex_driver/DeleteUserProfile.h" +#include "kortex_driver/ReadAllUserProfiles.h" +#include "kortex_driver/ReadAllUsers.h" +#include "kortex_driver/ChangePassword.h" +#include "kortex_driver/CreateSequence.h" +#include "kortex_driver/UpdateSequence.h" +#include "kortex_driver/ReadSequence.h" +#include "kortex_driver/DeleteSequence.h" +#include "kortex_driver/ReadAllSequences.h" +#include "kortex_driver/DeleteSequenceTask.h" +#include "kortex_driver/DeleteAllSequenceTasks.h" +#include "kortex_driver/PlaySequence.h" +#include "kortex_driver/PlayAdvancedSequence.h" +#include "kortex_driver/StopSequence.h" +#include "kortex_driver/PauseSequence.h" +#include "kortex_driver/ResumeSequence.h" +#include "kortex_driver/CreateProtectionZone.h" +#include "kortex_driver/UpdateProtectionZone.h" +#include "kortex_driver/ReadProtectionZone.h" +#include "kortex_driver/DeleteProtectionZone.h" +#include "kortex_driver/ReadAllProtectionZones.h" +#include "kortex_driver/CreateMapping.h" +#include "kortex_driver/ReadMapping.h" +#include "kortex_driver/ReadAllMappings.h" +#include "kortex_driver/CreateMap.h" +#include "kortex_driver/ReadAllMaps.h" +#include "kortex_driver/ActivateMap.h" +#include "kortex_driver/CreateAction.h" +#include "kortex_driver/ReadAction.h" +#include "kortex_driver/ReadAllActions.h" +#include "kortex_driver/DeleteAction.h" +#include "kortex_driver/UpdateAction.h" +#include "kortex_driver/ExecuteActionFromReference.h" +#include "kortex_driver/ExecuteAction.h" +#include "kortex_driver/PauseAction.h" +#include "kortex_driver/StopAction.h" +#include "kortex_driver/ResumeAction.h" +#include "kortex_driver/GetIPv4Configuration.h" +#include "kortex_driver/SetIPv4Configuration.h" +#include "kortex_driver/SetCommunicationInterfaceEnable.h" +#include "kortex_driver/IsCommunicationInterfaceEnable.h" +#include "kortex_driver/GetAvailableWifi.h" +#include "kortex_driver/GetWifiInformation.h" +#include "kortex_driver/AddWifiConfiguration.h" +#include "kortex_driver/DeleteWifiConfiguration.h" +#include "kortex_driver/GetAllConfiguredWifis.h" +#include "kortex_driver/ConnectWifi.h" +#include "kortex_driver/DisconnectWifi.h" +#include "kortex_driver/GetConnectedWifiInformation.h" +#include "kortex_driver/Base_Unsubscribe.h" +#include "kortex_driver/OnNotificationConfigurationChangeTopic.h" +#include "kortex_driver/ConfigurationChangeNotification.h" +#include "kortex_driver/OnNotificationMappingInfoTopic.h" +#include "kortex_driver/MappingInfoNotification.h" +#include "kortex_driver/OnNotificationControlModeTopic.h" +#include "kortex_driver/ControlModeNotification.h" +#include "kortex_driver/OnNotificationOperatingModeTopic.h" +#include "kortex_driver/OperatingModeNotification.h" +#include "kortex_driver/OnNotificationSequenceInfoTopic.h" +#include "kortex_driver/SequenceInfoNotification.h" +#include "kortex_driver/OnNotificationProtectionZoneTopic.h" +#include "kortex_driver/ProtectionZoneNotification.h" +#include "kortex_driver/OnNotificationUserTopic.h" +#include "kortex_driver/UserNotification.h" +#include "kortex_driver/OnNotificationControllerTopic.h" +#include "kortex_driver/ControllerNotification.h" +#include "kortex_driver/OnNotificationActionTopic.h" +#include "kortex_driver/ActionNotification.h" +#include "kortex_driver/OnNotificationRobotEventTopic.h" +#include "kortex_driver/RobotEventNotification.h" +#include "kortex_driver/PlayCartesianTrajectory.h" +#include "kortex_driver/PlayCartesianTrajectoryPosition.h" +#include "kortex_driver/PlayCartesianTrajectoryOrientation.h" +#include "kortex_driver/Stop.h" +#include "kortex_driver/GetMeasuredCartesianPose.h" +#include "kortex_driver/SendWrenchCommand.h" +#include "kortex_driver/SendWrenchJoystickCommand.h" +#include "kortex_driver/SendTwistJoystickCommand.h" +#include "kortex_driver/SendTwistCommand.h" +#include "kortex_driver/PlayJointTrajectory.h" +#include "kortex_driver/PlaySelectedJointTrajectory.h" +#include "kortex_driver/GetMeasuredJointAngles.h" +#include "kortex_driver/SendJointSpeedsCommand.h" +#include "kortex_driver/SendSelectedJointSpeedCommand.h" +#include "kortex_driver/SendGripperCommand.h" +#include "kortex_driver/GetMeasuredGripperMovement.h" +#include "kortex_driver/SetAdmittance.h" +#include "kortex_driver/SetOperatingMode.h" +#include "kortex_driver/ApplyEmergencyStop.h" +#include "kortex_driver/Base_ClearFaults.h" +#include "kortex_driver/Base_GetControlMode.h" +#include "kortex_driver/GetOperatingMode.h" +#include "kortex_driver/SetServoingMode.h" +#include "kortex_driver/GetServoingMode.h" +#include "kortex_driver/OnNotificationServoingModeTopic.h" +#include "kortex_driver/ServoingModeNotification.h" +#include "kortex_driver/RestoreFactorySettings.h" +#include "kortex_driver/OnNotificationFactoryTopic.h" +#include "kortex_driver/FactoryNotification.h" +#include "kortex_driver/GetAllConnectedControllers.h" +#include "kortex_driver/GetControllerState.h" +#include "kortex_driver/GetActuatorCount.h" +#include "kortex_driver/StartWifiScan.h" +#include "kortex_driver/GetConfiguredWifi.h" +#include "kortex_driver/OnNotificationNetworkTopic.h" +#include "kortex_driver/NetworkNotification.h" +#include "kortex_driver/GetArmState.h" +#include "kortex_driver/OnNotificationArmStateTopic.h" +#include "kortex_driver/ArmStateNotification.h" +#include "kortex_driver/GetIPv4Information.h" +#include "kortex_driver/SetWifiCountryCode.h" +#include "kortex_driver/GetWifiCountryCode.h" +#include "kortex_driver/Base_SetCapSenseConfig.h" +#include "kortex_driver/Base_GetCapSenseConfig.h" +#include "kortex_driver/GetAllJointsSpeedHardLimitation.h" +#include "kortex_driver/GetAllJointsTorqueHardLimitation.h" +#include "kortex_driver/GetTwistHardLimitation.h" +#include "kortex_driver/GetWrenchHardLimitation.h" +#include "kortex_driver/SendJointSpeedsJoystickCommand.h" +#include "kortex_driver/SendSelectedJointSpeedJoystickCommand.h" +#include "kortex_driver/EnableBridge.h" +#include "kortex_driver/DisableBridge.h" +#include "kortex_driver/GetBridgeList.h" +#include "kortex_driver/GetBridgeConfig.h" +#include "kortex_driver/PlayPreComputedJointTrajectory.h" +#include "kortex_driver/GetProductConfiguration.h" +#include "kortex_driver/UpdateDegreeOfFreedomConfiguration.h" +#include "kortex_driver/UpdateBaseTypeConfiguration.h" +#include "kortex_driver/UpdateEndEffectorTypeConfiguration.h" +#include "kortex_driver/UpdateVisionModuleTypeConfiguration.h" +#include "kortex_driver/UpdateInterfaceModuleTypeConfiguration.h" +#include "kortex_driver/UpdateArmLateralityConfiguration.h" +#include "kortex_driver/UpdateWristTypeConfiguration.h" +#include "kortex_driver/RestoreFactoryProductConfiguration.h" +#include "kortex_driver/GetTrajectoryErrorReport.h" +#include "kortex_driver/GetAllJointsSpeedSoftLimitation.h" +#include "kortex_driver/GetAllJointsTorqueSoftLimitation.h" +#include "kortex_driver/GetTwistSoftLimitation.h" +#include "kortex_driver/GetWrenchSoftLimitation.h" + +#include "kortex_driver/KortexError.h" +#include "kortex_driver/SetDeviceID.h" +#include "kortex_driver/SetApiOptions.h" +#include "kortex_driver/ApiOptions.h" + +using namespace std; + +class BaseServices +{ + public: + BaseServices(ros::NodeHandle& n, Kinova::Api::Base::BaseClient* base, uint32_t device_id, uint32_t timeout_ms); + + bool SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res); + bool SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res); + bool CreateUserProfile(kortex_driver::CreateUserProfile::Request &req, kortex_driver::CreateUserProfile::Response &res); + bool UpdateUserProfile(kortex_driver::UpdateUserProfile::Request &req, kortex_driver::UpdateUserProfile::Response &res); + bool ReadUserProfile(kortex_driver::ReadUserProfile::Request &req, kortex_driver::ReadUserProfile::Response &res); + bool DeleteUserProfile(kortex_driver::DeleteUserProfile::Request &req, kortex_driver::DeleteUserProfile::Response &res); + bool ReadAllUserProfiles(kortex_driver::ReadAllUserProfiles::Request &req, kortex_driver::ReadAllUserProfiles::Response &res); + bool ReadAllUsers(kortex_driver::ReadAllUsers::Request &req, kortex_driver::ReadAllUsers::Response &res); + bool ChangePassword(kortex_driver::ChangePassword::Request &req, kortex_driver::ChangePassword::Response &res); + bool CreateSequence(kortex_driver::CreateSequence::Request &req, kortex_driver::CreateSequence::Response &res); + bool UpdateSequence(kortex_driver::UpdateSequence::Request &req, kortex_driver::UpdateSequence::Response &res); + bool ReadSequence(kortex_driver::ReadSequence::Request &req, kortex_driver::ReadSequence::Response &res); + bool DeleteSequence(kortex_driver::DeleteSequence::Request &req, kortex_driver::DeleteSequence::Response &res); + bool ReadAllSequences(kortex_driver::ReadAllSequences::Request &req, kortex_driver::ReadAllSequences::Response &res); + bool DeleteSequenceTask(kortex_driver::DeleteSequenceTask::Request &req, kortex_driver::DeleteSequenceTask::Response &res); + bool DeleteAllSequenceTasks(kortex_driver::DeleteAllSequenceTasks::Request &req, kortex_driver::DeleteAllSequenceTasks::Response &res); + bool PlaySequence(kortex_driver::PlaySequence::Request &req, kortex_driver::PlaySequence::Response &res); + bool PlayAdvancedSequence(kortex_driver::PlayAdvancedSequence::Request &req, kortex_driver::PlayAdvancedSequence::Response &res); + bool StopSequence(kortex_driver::StopSequence::Request &req, kortex_driver::StopSequence::Response &res); + bool PauseSequence(kortex_driver::PauseSequence::Request &req, kortex_driver::PauseSequence::Response &res); + bool ResumeSequence(kortex_driver::ResumeSequence::Request &req, kortex_driver::ResumeSequence::Response &res); + bool CreateProtectionZone(kortex_driver::CreateProtectionZone::Request &req, kortex_driver::CreateProtectionZone::Response &res); + bool UpdateProtectionZone(kortex_driver::UpdateProtectionZone::Request &req, kortex_driver::UpdateProtectionZone::Response &res); + bool ReadProtectionZone(kortex_driver::ReadProtectionZone::Request &req, kortex_driver::ReadProtectionZone::Response &res); + bool DeleteProtectionZone(kortex_driver::DeleteProtectionZone::Request &req, kortex_driver::DeleteProtectionZone::Response &res); + bool ReadAllProtectionZones(kortex_driver::ReadAllProtectionZones::Request &req, kortex_driver::ReadAllProtectionZones::Response &res); + bool CreateMapping(kortex_driver::CreateMapping::Request &req, kortex_driver::CreateMapping::Response &res); + bool ReadMapping(kortex_driver::ReadMapping::Request &req, kortex_driver::ReadMapping::Response &res); + bool ReadAllMappings(kortex_driver::ReadAllMappings::Request &req, kortex_driver::ReadAllMappings::Response &res); + bool CreateMap(kortex_driver::CreateMap::Request &req, kortex_driver::CreateMap::Response &res); + bool ReadAllMaps(kortex_driver::ReadAllMaps::Request &req, kortex_driver::ReadAllMaps::Response &res); + bool ActivateMap(kortex_driver::ActivateMap::Request &req, kortex_driver::ActivateMap::Response &res); + bool CreateAction(kortex_driver::CreateAction::Request &req, kortex_driver::CreateAction::Response &res); + bool ReadAction(kortex_driver::ReadAction::Request &req, kortex_driver::ReadAction::Response &res); + bool ReadAllActions(kortex_driver::ReadAllActions::Request &req, kortex_driver::ReadAllActions::Response &res); + bool DeleteAction(kortex_driver::DeleteAction::Request &req, kortex_driver::DeleteAction::Response &res); + bool UpdateAction(kortex_driver::UpdateAction::Request &req, kortex_driver::UpdateAction::Response &res); + bool ExecuteActionFromReference(kortex_driver::ExecuteActionFromReference::Request &req, kortex_driver::ExecuteActionFromReference::Response &res); + bool ExecuteAction(kortex_driver::ExecuteAction::Request &req, kortex_driver::ExecuteAction::Response &res); + bool PauseAction(kortex_driver::PauseAction::Request &req, kortex_driver::PauseAction::Response &res); + bool StopAction(kortex_driver::StopAction::Request &req, kortex_driver::StopAction::Response &res); + bool ResumeAction(kortex_driver::ResumeAction::Request &req, kortex_driver::ResumeAction::Response &res); + bool GetIPv4Configuration(kortex_driver::GetIPv4Configuration::Request &req, kortex_driver::GetIPv4Configuration::Response &res); + bool SetIPv4Configuration(kortex_driver::SetIPv4Configuration::Request &req, kortex_driver::SetIPv4Configuration::Response &res); + bool SetCommunicationInterfaceEnable(kortex_driver::SetCommunicationInterfaceEnable::Request &req, kortex_driver::SetCommunicationInterfaceEnable::Response &res); + bool IsCommunicationInterfaceEnable(kortex_driver::IsCommunicationInterfaceEnable::Request &req, kortex_driver::IsCommunicationInterfaceEnable::Response &res); + bool GetAvailableWifi(kortex_driver::GetAvailableWifi::Request &req, kortex_driver::GetAvailableWifi::Response &res); + bool GetWifiInformation(kortex_driver::GetWifiInformation::Request &req, kortex_driver::GetWifiInformation::Response &res); + bool AddWifiConfiguration(kortex_driver::AddWifiConfiguration::Request &req, kortex_driver::AddWifiConfiguration::Response &res); + bool DeleteWifiConfiguration(kortex_driver::DeleteWifiConfiguration::Request &req, kortex_driver::DeleteWifiConfiguration::Response &res); + bool GetAllConfiguredWifis(kortex_driver::GetAllConfiguredWifis::Request &req, kortex_driver::GetAllConfiguredWifis::Response &res); + bool ConnectWifi(kortex_driver::ConnectWifi::Request &req, kortex_driver::ConnectWifi::Response &res); + bool DisconnectWifi(kortex_driver::DisconnectWifi::Request &req, kortex_driver::DisconnectWifi::Response &res); + bool GetConnectedWifiInformation(kortex_driver::GetConnectedWifiInformation::Request &req, kortex_driver::GetConnectedWifiInformation::Response &res); + bool Base_Unsubscribe(kortex_driver::Base_Unsubscribe::Request &req, kortex_driver::Base_Unsubscribe::Response &res); + bool OnNotificationConfigurationChangeTopic(kortex_driver::OnNotificationConfigurationChangeTopic::Request &req, kortex_driver::OnNotificationConfigurationChangeTopic::Response &res); + void cb_ConfigurationChangeTopic(Kinova::Api::Base::ConfigurationChangeNotification notif); + bool OnNotificationMappingInfoTopic(kortex_driver::OnNotificationMappingInfoTopic::Request &req, kortex_driver::OnNotificationMappingInfoTopic::Response &res); + void cb_MappingInfoTopic(Kinova::Api::Base::MappingInfoNotification notif); + bool OnNotificationControlModeTopic(kortex_driver::OnNotificationControlModeTopic::Request &req, kortex_driver::OnNotificationControlModeTopic::Response &res); + void cb_ControlModeTopic(Kinova::Api::Base::ControlModeNotification notif); + bool OnNotificationOperatingModeTopic(kortex_driver::OnNotificationOperatingModeTopic::Request &req, kortex_driver::OnNotificationOperatingModeTopic::Response &res); + void cb_OperatingModeTopic(Kinova::Api::Base::OperatingModeNotification notif); + bool OnNotificationSequenceInfoTopic(kortex_driver::OnNotificationSequenceInfoTopic::Request &req, kortex_driver::OnNotificationSequenceInfoTopic::Response &res); + void cb_SequenceInfoTopic(Kinova::Api::Base::SequenceInfoNotification notif); + bool OnNotificationProtectionZoneTopic(kortex_driver::OnNotificationProtectionZoneTopic::Request &req, kortex_driver::OnNotificationProtectionZoneTopic::Response &res); + void cb_ProtectionZoneTopic(Kinova::Api::Base::ProtectionZoneNotification notif); + bool OnNotificationUserTopic(kortex_driver::OnNotificationUserTopic::Request &req, kortex_driver::OnNotificationUserTopic::Response &res); + void cb_UserTopic(Kinova::Api::Base::UserNotification notif); + bool OnNotificationControllerTopic(kortex_driver::OnNotificationControllerTopic::Request &req, kortex_driver::OnNotificationControllerTopic::Response &res); + void cb_ControllerTopic(Kinova::Api::Base::ControllerNotification notif); + bool OnNotificationActionTopic(kortex_driver::OnNotificationActionTopic::Request &req, kortex_driver::OnNotificationActionTopic::Response &res); + void cb_ActionTopic(Kinova::Api::Base::ActionNotification notif); + bool OnNotificationRobotEventTopic(kortex_driver::OnNotificationRobotEventTopic::Request &req, kortex_driver::OnNotificationRobotEventTopic::Response &res); + void cb_RobotEventTopic(Kinova::Api::Base::RobotEventNotification notif); + bool PlayCartesianTrajectory(kortex_driver::PlayCartesianTrajectory::Request &req, kortex_driver::PlayCartesianTrajectory::Response &res); + bool PlayCartesianTrajectoryPosition(kortex_driver::PlayCartesianTrajectoryPosition::Request &req, kortex_driver::PlayCartesianTrajectoryPosition::Response &res); + bool PlayCartesianTrajectoryOrientation(kortex_driver::PlayCartesianTrajectoryOrientation::Request &req, kortex_driver::PlayCartesianTrajectoryOrientation::Response &res); + bool Stop(kortex_driver::Stop::Request &req, kortex_driver::Stop::Response &res); + bool GetMeasuredCartesianPose(kortex_driver::GetMeasuredCartesianPose::Request &req, kortex_driver::GetMeasuredCartesianPose::Response &res); + bool SendWrenchCommand(kortex_driver::SendWrenchCommand::Request &req, kortex_driver::SendWrenchCommand::Response &res); + bool SendWrenchJoystickCommand(kortex_driver::SendWrenchJoystickCommand::Request &req, kortex_driver::SendWrenchJoystickCommand::Response &res); + bool SendTwistJoystickCommand(kortex_driver::SendTwistJoystickCommand::Request &req, kortex_driver::SendTwistJoystickCommand::Response &res); + bool SendTwistCommand(kortex_driver::SendTwistCommand::Request &req, kortex_driver::SendTwistCommand::Response &res); + bool PlayJointTrajectory(kortex_driver::PlayJointTrajectory::Request &req, kortex_driver::PlayJointTrajectory::Response &res); + bool PlaySelectedJointTrajectory(kortex_driver::PlaySelectedJointTrajectory::Request &req, kortex_driver::PlaySelectedJointTrajectory::Response &res); + bool GetMeasuredJointAngles(kortex_driver::GetMeasuredJointAngles::Request &req, kortex_driver::GetMeasuredJointAngles::Response &res); + bool SendJointSpeedsCommand(kortex_driver::SendJointSpeedsCommand::Request &req, kortex_driver::SendJointSpeedsCommand::Response &res); + bool SendSelectedJointSpeedCommand(kortex_driver::SendSelectedJointSpeedCommand::Request &req, kortex_driver::SendSelectedJointSpeedCommand::Response &res); + bool SendGripperCommand(kortex_driver::SendGripperCommand::Request &req, kortex_driver::SendGripperCommand::Response &res); + bool GetMeasuredGripperMovement(kortex_driver::GetMeasuredGripperMovement::Request &req, kortex_driver::GetMeasuredGripperMovement::Response &res); + bool SetAdmittance(kortex_driver::SetAdmittance::Request &req, kortex_driver::SetAdmittance::Response &res); + bool SetOperatingMode(kortex_driver::SetOperatingMode::Request &req, kortex_driver::SetOperatingMode::Response &res); + bool ApplyEmergencyStop(kortex_driver::ApplyEmergencyStop::Request &req, kortex_driver::ApplyEmergencyStop::Response &res); + bool Base_ClearFaults(kortex_driver::Base_ClearFaults::Request &req, kortex_driver::Base_ClearFaults::Response &res); + bool Base_GetControlMode(kortex_driver::Base_GetControlMode::Request &req, kortex_driver::Base_GetControlMode::Response &res); + bool GetOperatingMode(kortex_driver::GetOperatingMode::Request &req, kortex_driver::GetOperatingMode::Response &res); + bool SetServoingMode(kortex_driver::SetServoingMode::Request &req, kortex_driver::SetServoingMode::Response &res); + bool GetServoingMode(kortex_driver::GetServoingMode::Request &req, kortex_driver::GetServoingMode::Response &res); + bool OnNotificationServoingModeTopic(kortex_driver::OnNotificationServoingModeTopic::Request &req, kortex_driver::OnNotificationServoingModeTopic::Response &res); + void cb_ServoingModeTopic(Kinova::Api::Base::ServoingModeNotification notif); + bool RestoreFactorySettings(kortex_driver::RestoreFactorySettings::Request &req, kortex_driver::RestoreFactorySettings::Response &res); + bool OnNotificationFactoryTopic(kortex_driver::OnNotificationFactoryTopic::Request &req, kortex_driver::OnNotificationFactoryTopic::Response &res); + void cb_FactoryTopic(Kinova::Api::Base::FactoryNotification notif); + bool GetAllConnectedControllers(kortex_driver::GetAllConnectedControllers::Request &req, kortex_driver::GetAllConnectedControllers::Response &res); + bool GetControllerState(kortex_driver::GetControllerState::Request &req, kortex_driver::GetControllerState::Response &res); + bool GetActuatorCount(kortex_driver::GetActuatorCount::Request &req, kortex_driver::GetActuatorCount::Response &res); + bool StartWifiScan(kortex_driver::StartWifiScan::Request &req, kortex_driver::StartWifiScan::Response &res); + bool GetConfiguredWifi(kortex_driver::GetConfiguredWifi::Request &req, kortex_driver::GetConfiguredWifi::Response &res); + bool OnNotificationNetworkTopic(kortex_driver::OnNotificationNetworkTopic::Request &req, kortex_driver::OnNotificationNetworkTopic::Response &res); + void cb_NetworkTopic(Kinova::Api::Base::NetworkNotification notif); + bool GetArmState(kortex_driver::GetArmState::Request &req, kortex_driver::GetArmState::Response &res); + bool OnNotificationArmStateTopic(kortex_driver::OnNotificationArmStateTopic::Request &req, kortex_driver::OnNotificationArmStateTopic::Response &res); + void cb_ArmStateTopic(Kinova::Api::Base::ArmStateNotification notif); + bool GetIPv4Information(kortex_driver::GetIPv4Information::Request &req, kortex_driver::GetIPv4Information::Response &res); + bool SetWifiCountryCode(kortex_driver::SetWifiCountryCode::Request &req, kortex_driver::SetWifiCountryCode::Response &res); + bool GetWifiCountryCode(kortex_driver::GetWifiCountryCode::Request &req, kortex_driver::GetWifiCountryCode::Response &res); + bool Base_SetCapSenseConfig(kortex_driver::Base_SetCapSenseConfig::Request &req, kortex_driver::Base_SetCapSenseConfig::Response &res); + bool Base_GetCapSenseConfig(kortex_driver::Base_GetCapSenseConfig::Request &req, kortex_driver::Base_GetCapSenseConfig::Response &res); + bool GetAllJointsSpeedHardLimitation(kortex_driver::GetAllJointsSpeedHardLimitation::Request &req, kortex_driver::GetAllJointsSpeedHardLimitation::Response &res); + bool GetAllJointsTorqueHardLimitation(kortex_driver::GetAllJointsTorqueHardLimitation::Request &req, kortex_driver::GetAllJointsTorqueHardLimitation::Response &res); + bool GetTwistHardLimitation(kortex_driver::GetTwistHardLimitation::Request &req, kortex_driver::GetTwistHardLimitation::Response &res); + bool GetWrenchHardLimitation(kortex_driver::GetWrenchHardLimitation::Request &req, kortex_driver::GetWrenchHardLimitation::Response &res); + bool SendJointSpeedsJoystickCommand(kortex_driver::SendJointSpeedsJoystickCommand::Request &req, kortex_driver::SendJointSpeedsJoystickCommand::Response &res); + bool SendSelectedJointSpeedJoystickCommand(kortex_driver::SendSelectedJointSpeedJoystickCommand::Request &req, kortex_driver::SendSelectedJointSpeedJoystickCommand::Response &res); + bool EnableBridge(kortex_driver::EnableBridge::Request &req, kortex_driver::EnableBridge::Response &res); + bool DisableBridge(kortex_driver::DisableBridge::Request &req, kortex_driver::DisableBridge::Response &res); + bool GetBridgeList(kortex_driver::GetBridgeList::Request &req, kortex_driver::GetBridgeList::Response &res); + bool GetBridgeConfig(kortex_driver::GetBridgeConfig::Request &req, kortex_driver::GetBridgeConfig::Response &res); + bool PlayPreComputedJointTrajectory(kortex_driver::PlayPreComputedJointTrajectory::Request &req, kortex_driver::PlayPreComputedJointTrajectory::Response &res); + bool GetProductConfiguration(kortex_driver::GetProductConfiguration::Request &req, kortex_driver::GetProductConfiguration::Response &res); + bool UpdateDegreeOfFreedomConfiguration(kortex_driver::UpdateDegreeOfFreedomConfiguration::Request &req, kortex_driver::UpdateDegreeOfFreedomConfiguration::Response &res); + bool UpdateBaseTypeConfiguration(kortex_driver::UpdateBaseTypeConfiguration::Request &req, kortex_driver::UpdateBaseTypeConfiguration::Response &res); + bool UpdateEndEffectorTypeConfiguration(kortex_driver::UpdateEndEffectorTypeConfiguration::Request &req, kortex_driver::UpdateEndEffectorTypeConfiguration::Response &res); + bool UpdateVisionModuleTypeConfiguration(kortex_driver::UpdateVisionModuleTypeConfiguration::Request &req, kortex_driver::UpdateVisionModuleTypeConfiguration::Response &res); + bool UpdateInterfaceModuleTypeConfiguration(kortex_driver::UpdateInterfaceModuleTypeConfiguration::Request &req, kortex_driver::UpdateInterfaceModuleTypeConfiguration::Response &res); + bool UpdateArmLateralityConfiguration(kortex_driver::UpdateArmLateralityConfiguration::Request &req, kortex_driver::UpdateArmLateralityConfiguration::Response &res); + bool UpdateWristTypeConfiguration(kortex_driver::UpdateWristTypeConfiguration::Request &req, kortex_driver::UpdateWristTypeConfiguration::Response &res); + bool RestoreFactoryProductConfiguration(kortex_driver::RestoreFactoryProductConfiguration::Request &req, kortex_driver::RestoreFactoryProductConfiguration::Response &res); + bool GetTrajectoryErrorReport(kortex_driver::GetTrajectoryErrorReport::Request &req, kortex_driver::GetTrajectoryErrorReport::Response &res); + bool GetAllJointsSpeedSoftLimitation(kortex_driver::GetAllJointsSpeedSoftLimitation::Request &req, kortex_driver::GetAllJointsSpeedSoftLimitation::Response &res); + bool GetAllJointsTorqueSoftLimitation(kortex_driver::GetAllJointsTorqueSoftLimitation::Request &req, kortex_driver::GetAllJointsTorqueSoftLimitation::Response &res); + bool GetTwistSoftLimitation(kortex_driver::GetTwistSoftLimitation::Request &req, kortex_driver::GetTwistSoftLimitation::Response &res); + bool GetWrenchSoftLimitation(kortex_driver::GetWrenchSoftLimitation::Request &req, kortex_driver::GetWrenchSoftLimitation::Response &res); + +private: + uint32_t m_current_device_id; + Kinova::Api::RouterClientSendOptions m_api_options; + + Kinova::Api::Base::BaseClient* m_base; + + ros::NodeHandle m_n; + ros::Publisher m_pub_Error; + ros::Publisher m_pub_ConfigurationChangeTopic; + ros::Publisher m_pub_MappingInfoTopic; + ros::Publisher m_pub_ControlModeTopic; + ros::Publisher m_pub_OperatingModeTopic; + ros::Publisher m_pub_SequenceInfoTopic; + ros::Publisher m_pub_ProtectionZoneTopic; + ros::Publisher m_pub_UserTopic; + ros::Publisher m_pub_ControllerTopic; + ros::Publisher m_pub_ActionTopic; + ros::Publisher m_pub_RobotEventTopic; + ros::Publisher m_pub_ServoingModeTopic; + ros::Publisher m_pub_FactoryTopic; + ros::Publisher m_pub_NetworkTopic; + ros::Publisher m_pub_ArmStateTopic; + + ros::ServiceServer m_serviceSetDeviceID; + ros::ServiceServer m_serviceSetApiOptions; + + ros::ServiceServer m_serviceCreateUserProfile; + ros::ServiceServer m_serviceUpdateUserProfile; + ros::ServiceServer m_serviceReadUserProfile; + ros::ServiceServer m_serviceDeleteUserProfile; + ros::ServiceServer m_serviceReadAllUserProfiles; + ros::ServiceServer m_serviceReadAllUsers; + ros::ServiceServer m_serviceChangePassword; + ros::ServiceServer m_serviceCreateSequence; + ros::ServiceServer m_serviceUpdateSequence; + ros::ServiceServer m_serviceReadSequence; + ros::ServiceServer m_serviceDeleteSequence; + ros::ServiceServer m_serviceReadAllSequences; + ros::ServiceServer m_serviceDeleteSequenceTask; + ros::ServiceServer m_serviceDeleteAllSequenceTasks; + ros::ServiceServer m_servicePlaySequence; + ros::ServiceServer m_servicePlayAdvancedSequence; + ros::ServiceServer m_serviceStopSequence; + ros::ServiceServer m_servicePauseSequence; + ros::ServiceServer m_serviceResumeSequence; + ros::ServiceServer m_serviceCreateProtectionZone; + ros::ServiceServer m_serviceUpdateProtectionZone; + ros::ServiceServer m_serviceReadProtectionZone; + ros::ServiceServer m_serviceDeleteProtectionZone; + ros::ServiceServer m_serviceReadAllProtectionZones; + ros::ServiceServer m_serviceCreateMapping; + ros::ServiceServer m_serviceReadMapping; + ros::ServiceServer m_serviceReadAllMappings; + ros::ServiceServer m_serviceCreateMap; + ros::ServiceServer m_serviceReadAllMaps; + ros::ServiceServer m_serviceActivateMap; + ros::ServiceServer m_serviceCreateAction; + ros::ServiceServer m_serviceReadAction; + ros::ServiceServer m_serviceReadAllActions; + ros::ServiceServer m_serviceDeleteAction; + ros::ServiceServer m_serviceUpdateAction; + ros::ServiceServer m_serviceExecuteActionFromReference; + ros::ServiceServer m_serviceExecuteAction; + ros::ServiceServer m_servicePauseAction; + ros::ServiceServer m_serviceStopAction; + ros::ServiceServer m_serviceResumeAction; + ros::ServiceServer m_serviceGetIPv4Configuration; + ros::ServiceServer m_serviceSetIPv4Configuration; + ros::ServiceServer m_serviceSetCommunicationInterfaceEnable; + ros::ServiceServer m_serviceIsCommunicationInterfaceEnable; + ros::ServiceServer m_serviceGetAvailableWifi; + ros::ServiceServer m_serviceGetWifiInformation; + ros::ServiceServer m_serviceAddWifiConfiguration; + ros::ServiceServer m_serviceDeleteWifiConfiguration; + ros::ServiceServer m_serviceGetAllConfiguredWifis; + ros::ServiceServer m_serviceConnectWifi; + ros::ServiceServer m_serviceDisconnectWifi; + ros::ServiceServer m_serviceGetConnectedWifiInformation; + ros::ServiceServer m_serviceBase_Unsubscribe; + ros::ServiceServer m_serviceOnNotificationConfigurationChangeTopic; + ros::ServiceServer m_serviceOnNotificationMappingInfoTopic; + ros::ServiceServer m_serviceOnNotificationControlModeTopic; + ros::ServiceServer m_serviceOnNotificationOperatingModeTopic; + ros::ServiceServer m_serviceOnNotificationSequenceInfoTopic; + ros::ServiceServer m_serviceOnNotificationProtectionZoneTopic; + ros::ServiceServer m_serviceOnNotificationUserTopic; + ros::ServiceServer m_serviceOnNotificationControllerTopic; + ros::ServiceServer m_serviceOnNotificationActionTopic; + ros::ServiceServer m_serviceOnNotificationRobotEventTopic; + ros::ServiceServer m_servicePlayCartesianTrajectory; + ros::ServiceServer m_servicePlayCartesianTrajectoryPosition; + ros::ServiceServer m_servicePlayCartesianTrajectoryOrientation; + ros::ServiceServer m_serviceStop; + ros::ServiceServer m_serviceGetMeasuredCartesianPose; + ros::ServiceServer m_serviceSendWrenchCommand; + ros::ServiceServer m_serviceSendWrenchJoystickCommand; + ros::ServiceServer m_serviceSendTwistJoystickCommand; + ros::ServiceServer m_serviceSendTwistCommand; + ros::ServiceServer m_servicePlayJointTrajectory; + ros::ServiceServer m_servicePlaySelectedJointTrajectory; + ros::ServiceServer m_serviceGetMeasuredJointAngles; + ros::ServiceServer m_serviceSendJointSpeedsCommand; + ros::ServiceServer m_serviceSendSelectedJointSpeedCommand; + ros::ServiceServer m_serviceSendGripperCommand; + ros::ServiceServer m_serviceGetMeasuredGripperMovement; + ros::ServiceServer m_serviceSetAdmittance; + ros::ServiceServer m_serviceSetOperatingMode; + ros::ServiceServer m_serviceApplyEmergencyStop; + ros::ServiceServer m_serviceBase_ClearFaults; + ros::ServiceServer m_serviceBase_GetControlMode; + ros::ServiceServer m_serviceGetOperatingMode; + ros::ServiceServer m_serviceSetServoingMode; + ros::ServiceServer m_serviceGetServoingMode; + ros::ServiceServer m_serviceOnNotificationServoingModeTopic; + ros::ServiceServer m_serviceRestoreFactorySettings; + ros::ServiceServer m_serviceOnNotificationFactoryTopic; + ros::ServiceServer m_serviceGetAllConnectedControllers; + ros::ServiceServer m_serviceGetControllerState; + ros::ServiceServer m_serviceGetActuatorCount; + ros::ServiceServer m_serviceStartWifiScan; + ros::ServiceServer m_serviceGetConfiguredWifi; + ros::ServiceServer m_serviceOnNotificationNetworkTopic; + ros::ServiceServer m_serviceGetArmState; + ros::ServiceServer m_serviceOnNotificationArmStateTopic; + ros::ServiceServer m_serviceGetIPv4Information; + ros::ServiceServer m_serviceSetWifiCountryCode; + ros::ServiceServer m_serviceGetWifiCountryCode; + ros::ServiceServer m_serviceBase_SetCapSenseConfig; + ros::ServiceServer m_serviceBase_GetCapSenseConfig; + ros::ServiceServer m_serviceGetAllJointsSpeedHardLimitation; + ros::ServiceServer m_serviceGetAllJointsTorqueHardLimitation; + ros::ServiceServer m_serviceGetTwistHardLimitation; + ros::ServiceServer m_serviceGetWrenchHardLimitation; + ros::ServiceServer m_serviceSendJointSpeedsJoystickCommand; + ros::ServiceServer m_serviceSendSelectedJointSpeedJoystickCommand; + ros::ServiceServer m_serviceEnableBridge; + ros::ServiceServer m_serviceDisableBridge; + ros::ServiceServer m_serviceGetBridgeList; + ros::ServiceServer m_serviceGetBridgeConfig; + ros::ServiceServer m_servicePlayPreComputedJointTrajectory; + ros::ServiceServer m_serviceGetProductConfiguration; + ros::ServiceServer m_serviceUpdateDegreeOfFreedomConfiguration; + ros::ServiceServer m_serviceUpdateBaseTypeConfiguration; + ros::ServiceServer m_serviceUpdateEndEffectorTypeConfiguration; + ros::ServiceServer m_serviceUpdateVisionModuleTypeConfiguration; + ros::ServiceServer m_serviceUpdateInterfaceModuleTypeConfiguration; + ros::ServiceServer m_serviceUpdateArmLateralityConfiguration; + ros::ServiceServer m_serviceUpdateWristTypeConfiguration; + ros::ServiceServer m_serviceRestoreFactoryProductConfiguration; + ros::ServiceServer m_serviceGetTrajectoryErrorReport; + ros::ServiceServer m_serviceGetAllJointsSpeedSoftLimitation; + ros::ServiceServer m_serviceGetAllJointsTorqueSoftLimitation; + ros::ServiceServer m_serviceGetTwistSoftLimitation; + ros::ServiceServer m_serviceGetWrenchSoftLimitation; +}; +#endif diff --git a/kortex_driver/include/kortex_driver/generated/basecyclic_proto_converter.h b/kortex_driver/include/kortex_driver/generated/basecyclic_proto_converter.h new file mode 100644 index 00000000..7d5b660e --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/basecyclic_proto_converter.h @@ -0,0 +1,61 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_BASECYCLIC_PROTO_CONVERTER_H_ +#define _KORTEX_BASECYCLIC_PROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_proto_converter.h" +#include "kortex_driver/generated/actuatorconfig_proto_converter.h" +#include "kortex_driver/generated/actuatorcyclic_proto_converter.h" +#include "kortex_driver/generated/productconfiguration_proto_converter.h" +#include "kortex_driver/generated/base_proto_converter.h" +#include "kortex_driver/generated/grippercyclic_proto_converter.h" +#include "kortex_driver/generated/interconnectcyclic_proto_converter.h" +#include "kortex_driver/generated/controlconfig_proto_converter.h" +#include "kortex_driver/generated/deviceconfig_proto_converter.h" +#include "kortex_driver/generated/devicemanager_proto_converter.h" +#include "kortex_driver/generated/interconnectconfig_proto_converter.h" +#include "kortex_driver/generated/visionconfig_proto_converter.h" + + +#include "kortex_driver/ActuatorCommand.h" +#include "kortex_driver/ActuatorFeedback.h" +#include "kortex_driver/ActuatorCustomData.h" +#include "kortex_driver/BaseFeedback.h" +#include "kortex_driver/BaseCyclic_CustomData.h" +#include "kortex_driver/BaseCyclic_Command.h" +#include "kortex_driver/BaseCyclic_Feedback.h" + + +int ToProtoData(kortex_driver::ActuatorCommand input, Kinova::Api::BaseCyclic::ActuatorCommand *output); +int ToProtoData(kortex_driver::ActuatorFeedback input, Kinova::Api::BaseCyclic::ActuatorFeedback *output); +int ToProtoData(kortex_driver::ActuatorCustomData input, Kinova::Api::BaseCyclic::ActuatorCustomData *output); +int ToProtoData(kortex_driver::BaseFeedback input, Kinova::Api::BaseCyclic::BaseFeedback *output); +int ToProtoData(kortex_driver::BaseCyclic_CustomData input, Kinova::Api::BaseCyclic::CustomData *output); +int ToProtoData(kortex_driver::BaseCyclic_Command input, Kinova::Api::BaseCyclic::Command *output); +int ToProtoData(kortex_driver::BaseCyclic_Feedback input, Kinova::Api::BaseCyclic::Feedback *output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/basecyclic_ros_converter.h b/kortex_driver/include/kortex_driver/generated/basecyclic_ros_converter.h new file mode 100644 index 00000000..dde72627 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/basecyclic_ros_converter.h @@ -0,0 +1,61 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_BASECYCLIC_ROS_CONVERTER_H_ +#define _KORTEX_BASECYCLIC_ROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_ros_converter.h" +#include "kortex_driver/generated/actuatorconfig_ros_converter.h" +#include "kortex_driver/generated/actuatorcyclic_ros_converter.h" +#include "kortex_driver/generated/productconfiguration_ros_converter.h" +#include "kortex_driver/generated/base_ros_converter.h" +#include "kortex_driver/generated/grippercyclic_ros_converter.h" +#include "kortex_driver/generated/interconnectcyclic_ros_converter.h" +#include "kortex_driver/generated/controlconfig_ros_converter.h" +#include "kortex_driver/generated/deviceconfig_ros_converter.h" +#include "kortex_driver/generated/devicemanager_ros_converter.h" +#include "kortex_driver/generated/interconnectconfig_ros_converter.h" +#include "kortex_driver/generated/visionconfig_ros_converter.h" + + +#include "kortex_driver/ActuatorCommand.h" +#include "kortex_driver/ActuatorFeedback.h" +#include "kortex_driver/ActuatorCustomData.h" +#include "kortex_driver/BaseFeedback.h" +#include "kortex_driver/BaseCyclic_CustomData.h" +#include "kortex_driver/BaseCyclic_Command.h" +#include "kortex_driver/BaseCyclic_Feedback.h" + + +int ToRosData(Kinova::Api::BaseCyclic::ActuatorCommand input, kortex_driver::ActuatorCommand &output); +int ToRosData(Kinova::Api::BaseCyclic::ActuatorFeedback input, kortex_driver::ActuatorFeedback &output); +int ToRosData(Kinova::Api::BaseCyclic::ActuatorCustomData input, kortex_driver::ActuatorCustomData &output); +int ToRosData(Kinova::Api::BaseCyclic::BaseFeedback input, kortex_driver::BaseFeedback &output); +int ToRosData(Kinova::Api::BaseCyclic::CustomData input, kortex_driver::BaseCyclic_CustomData &output); +int ToRosData(Kinova::Api::BaseCyclic::Command input, kortex_driver::BaseCyclic_Command &output); +int ToRosData(Kinova::Api::BaseCyclic::Feedback input, kortex_driver::BaseCyclic_Feedback &output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/common_proto_converter.h b/kortex_driver/include/kortex_driver/generated/common_proto_converter.h new file mode 100644 index 00000000..8fef504b --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/common_proto_converter.h @@ -0,0 +1,71 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_COMMON_PROTO_CONVERTER_H_ +#define _KORTEX_COMMON_PROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/actuatorconfig_proto_converter.h" +#include "kortex_driver/generated/actuatorcyclic_proto_converter.h" +#include "kortex_driver/generated/productconfiguration_proto_converter.h" +#include "kortex_driver/generated/base_proto_converter.h" +#include "kortex_driver/generated/grippercyclic_proto_converter.h" +#include "kortex_driver/generated/interconnectcyclic_proto_converter.h" +#include "kortex_driver/generated/basecyclic_proto_converter.h" +#include "kortex_driver/generated/controlconfig_proto_converter.h" +#include "kortex_driver/generated/deviceconfig_proto_converter.h" +#include "kortex_driver/generated/devicemanager_proto_converter.h" +#include "kortex_driver/generated/interconnectconfig_proto_converter.h" +#include "kortex_driver/generated/visionconfig_proto_converter.h" + + +#include "kortex_driver/DeviceHandle.h" +#include "kortex_driver/Empty.h" +#include "kortex_driver/NotificationOptions.h" +#include "kortex_driver/SafetyHandle.h" +#include "kortex_driver/NotificationHandle.h" +#include "kortex_driver/SafetyNotification.h" +#include "kortex_driver/Timestamp.h" +#include "kortex_driver/UserProfileHandle.h" +#include "kortex_driver/Connection.h" +#include "kortex_driver/UARTConfiguration.h" +#include "kortex_driver/UARTDeviceIdentification.h" +#include "kortex_driver/CountryCode.h" + + +int ToProtoData(kortex_driver::DeviceHandle input, Kinova::Api::Common::DeviceHandle *output); +int ToProtoData(kortex_driver::Empty input, Kinova::Api::Common::Empty *output); +int ToProtoData(kortex_driver::NotificationOptions input, Kinova::Api::Common::NotificationOptions *output); +int ToProtoData(kortex_driver::SafetyHandle input, Kinova::Api::Common::SafetyHandle *output); +int ToProtoData(kortex_driver::NotificationHandle input, Kinova::Api::Common::NotificationHandle *output); +int ToProtoData(kortex_driver::SafetyNotification input, Kinova::Api::Common::SafetyNotification *output); +int ToProtoData(kortex_driver::Timestamp input, Kinova::Api::Common::Timestamp *output); +int ToProtoData(kortex_driver::UserProfileHandle input, Kinova::Api::Common::UserProfileHandle *output); +int ToProtoData(kortex_driver::Connection input, Kinova::Api::Common::Connection *output); +int ToProtoData(kortex_driver::UARTConfiguration input, Kinova::Api::Common::UARTConfiguration *output); +int ToProtoData(kortex_driver::UARTDeviceIdentification input, Kinova::Api::Common::UARTDeviceIdentification *output); +int ToProtoData(kortex_driver::CountryCode input, Kinova::Api::Common::CountryCode *output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/common_ros_converter.h b/kortex_driver/include/kortex_driver/generated/common_ros_converter.h new file mode 100644 index 00000000..0f1147b6 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/common_ros_converter.h @@ -0,0 +1,71 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_COMMON_ROS_CONVERTER_H_ +#define _KORTEX_COMMON_ROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/actuatorconfig_ros_converter.h" +#include "kortex_driver/generated/actuatorcyclic_ros_converter.h" +#include "kortex_driver/generated/productconfiguration_ros_converter.h" +#include "kortex_driver/generated/base_ros_converter.h" +#include "kortex_driver/generated/grippercyclic_ros_converter.h" +#include "kortex_driver/generated/interconnectcyclic_ros_converter.h" +#include "kortex_driver/generated/basecyclic_ros_converter.h" +#include "kortex_driver/generated/controlconfig_ros_converter.h" +#include "kortex_driver/generated/deviceconfig_ros_converter.h" +#include "kortex_driver/generated/devicemanager_ros_converter.h" +#include "kortex_driver/generated/interconnectconfig_ros_converter.h" +#include "kortex_driver/generated/visionconfig_ros_converter.h" + + +#include "kortex_driver/DeviceHandle.h" +#include "kortex_driver/Empty.h" +#include "kortex_driver/NotificationOptions.h" +#include "kortex_driver/SafetyHandle.h" +#include "kortex_driver/NotificationHandle.h" +#include "kortex_driver/SafetyNotification.h" +#include "kortex_driver/Timestamp.h" +#include "kortex_driver/UserProfileHandle.h" +#include "kortex_driver/Connection.h" +#include "kortex_driver/UARTConfiguration.h" +#include "kortex_driver/UARTDeviceIdentification.h" +#include "kortex_driver/CountryCode.h" + + +int ToRosData(Kinova::Api::Common::DeviceHandle input, kortex_driver::DeviceHandle &output); +int ToRosData(Kinova::Api::Common::Empty input, kortex_driver::Empty &output); +int ToRosData(Kinova::Api::Common::NotificationOptions input, kortex_driver::NotificationOptions &output); +int ToRosData(Kinova::Api::Common::SafetyHandle input, kortex_driver::SafetyHandle &output); +int ToRosData(Kinova::Api::Common::NotificationHandle input, kortex_driver::NotificationHandle &output); +int ToRosData(Kinova::Api::Common::SafetyNotification input, kortex_driver::SafetyNotification &output); +int ToRosData(Kinova::Api::Common::Timestamp input, kortex_driver::Timestamp &output); +int ToRosData(Kinova::Api::Common::UserProfileHandle input, kortex_driver::UserProfileHandle &output); +int ToRosData(Kinova::Api::Common::Connection input, kortex_driver::Connection &output); +int ToRosData(Kinova::Api::Common::UARTConfiguration input, kortex_driver::UARTConfiguration &output); +int ToRosData(Kinova::Api::Common::UARTDeviceIdentification input, kortex_driver::UARTDeviceIdentification &output); +int ToRosData(Kinova::Api::Common::CountryCode input, kortex_driver::CountryCode &output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/controlconfig_proto_converter.h b/kortex_driver/include/kortex_driver/generated/controlconfig_proto_converter.h new file mode 100644 index 00000000..bce9a462 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/controlconfig_proto_converter.h @@ -0,0 +1,61 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_CONTROLCONFIG_PROTO_CONVERTER_H_ +#define _KORTEX_CONTROLCONFIG_PROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_proto_converter.h" +#include "kortex_driver/generated/actuatorconfig_proto_converter.h" +#include "kortex_driver/generated/actuatorcyclic_proto_converter.h" +#include "kortex_driver/generated/productconfiguration_proto_converter.h" +#include "kortex_driver/generated/base_proto_converter.h" +#include "kortex_driver/generated/grippercyclic_proto_converter.h" +#include "kortex_driver/generated/interconnectcyclic_proto_converter.h" +#include "kortex_driver/generated/basecyclic_proto_converter.h" +#include "kortex_driver/generated/deviceconfig_proto_converter.h" +#include "kortex_driver/generated/devicemanager_proto_converter.h" +#include "kortex_driver/generated/interconnectconfig_proto_converter.h" +#include "kortex_driver/generated/visionconfig_proto_converter.h" + + +#include "kortex_driver/GravityVector.h" +#include "kortex_driver/ControlConfig_Position.h" +#include "kortex_driver/PayloadInformation.h" +#include "kortex_driver/CartesianTransform.h" +#include "kortex_driver/ToolConfiguration.h" +#include "kortex_driver/ControlConfigurationNotification.h" +#include "kortex_driver/CartesianReferenceFrameInfo.h" + + +int ToProtoData(kortex_driver::GravityVector input, Kinova::Api::ControlConfig::GravityVector *output); +int ToProtoData(kortex_driver::ControlConfig_Position input, Kinova::Api::ControlConfig::Position *output); +int ToProtoData(kortex_driver::PayloadInformation input, Kinova::Api::ControlConfig::PayloadInformation *output); +int ToProtoData(kortex_driver::CartesianTransform input, Kinova::Api::ControlConfig::CartesianTransform *output); +int ToProtoData(kortex_driver::ToolConfiguration input, Kinova::Api::ControlConfig::ToolConfiguration *output); +int ToProtoData(kortex_driver::ControlConfigurationNotification input, Kinova::Api::ControlConfig::ControlConfigurationNotification *output); +int ToProtoData(kortex_driver::CartesianReferenceFrameInfo input, Kinova::Api::ControlConfig::CartesianReferenceFrameInfo *output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/controlconfig_ros_converter.h b/kortex_driver/include/kortex_driver/generated/controlconfig_ros_converter.h new file mode 100644 index 00000000..ec8cd96f --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/controlconfig_ros_converter.h @@ -0,0 +1,61 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_CONTROLCONFIG_ROS_CONVERTER_H_ +#define _KORTEX_CONTROLCONFIG_ROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_ros_converter.h" +#include "kortex_driver/generated/actuatorconfig_ros_converter.h" +#include "kortex_driver/generated/actuatorcyclic_ros_converter.h" +#include "kortex_driver/generated/productconfiguration_ros_converter.h" +#include "kortex_driver/generated/base_ros_converter.h" +#include "kortex_driver/generated/grippercyclic_ros_converter.h" +#include "kortex_driver/generated/interconnectcyclic_ros_converter.h" +#include "kortex_driver/generated/basecyclic_ros_converter.h" +#include "kortex_driver/generated/deviceconfig_ros_converter.h" +#include "kortex_driver/generated/devicemanager_ros_converter.h" +#include "kortex_driver/generated/interconnectconfig_ros_converter.h" +#include "kortex_driver/generated/visionconfig_ros_converter.h" + + +#include "kortex_driver/GravityVector.h" +#include "kortex_driver/ControlConfig_Position.h" +#include "kortex_driver/PayloadInformation.h" +#include "kortex_driver/CartesianTransform.h" +#include "kortex_driver/ToolConfiguration.h" +#include "kortex_driver/ControlConfigurationNotification.h" +#include "kortex_driver/CartesianReferenceFrameInfo.h" + + +int ToRosData(Kinova::Api::ControlConfig::GravityVector input, kortex_driver::GravityVector &output); +int ToRosData(Kinova::Api::ControlConfig::Position input, kortex_driver::ControlConfig_Position &output); +int ToRosData(Kinova::Api::ControlConfig::PayloadInformation input, kortex_driver::PayloadInformation &output); +int ToRosData(Kinova::Api::ControlConfig::CartesianTransform input, kortex_driver::CartesianTransform &output); +int ToRosData(Kinova::Api::ControlConfig::ToolConfiguration input, kortex_driver::ToolConfiguration &output); +int ToRosData(Kinova::Api::ControlConfig::ControlConfigurationNotification input, kortex_driver::ControlConfigurationNotification &output); +int ToRosData(Kinova::Api::ControlConfig::CartesianReferenceFrameInfo input, kortex_driver::CartesianReferenceFrameInfo &output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/controlconfig_services.h b/kortex_driver/include/kortex_driver/generated/controlconfig_services.h new file mode 100644 index 00000000..83ecfdd1 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/controlconfig_services.h @@ -0,0 +1,92 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_CONTROLCONFIG_SERVICES_H_ +#define _KORTEX_CONTROLCONFIG_SERVICES_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include "kortex_driver/SetGravityVector.h" +#include "kortex_driver/GetGravityVector.h" +#include "kortex_driver/SetPayloadInformation.h" +#include "kortex_driver/GetPayloadInformation.h" +#include "kortex_driver/SetToolConfiguration.h" +#include "kortex_driver/GetToolConfiguration.h" +#include "kortex_driver/OnNotificationControlConfigurationTopic.h" +#include "kortex_driver/ControlConfigurationNotification.h" +#include "kortex_driver/ControlConfig_Unsubscribe.h" +#include "kortex_driver/SetCartesianReferenceFrame.h" +#include "kortex_driver/GetCartesianReferenceFrame.h" + +#include "kortex_driver/KortexError.h" +#include "kortex_driver/SetDeviceID.h" +#include "kortex_driver/SetApiOptions.h" +#include "kortex_driver/ApiOptions.h" + +using namespace std; + +class ControlConfigServices +{ + public: + ControlConfigServices(ros::NodeHandle& n, Kinova::Api::ControlConfig::ControlConfigClient* controlconfig, uint32_t device_id, uint32_t timeout_ms); + + bool SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res); + bool SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res); + bool SetGravityVector(kortex_driver::SetGravityVector::Request &req, kortex_driver::SetGravityVector::Response &res); + bool GetGravityVector(kortex_driver::GetGravityVector::Request &req, kortex_driver::GetGravityVector::Response &res); + bool SetPayloadInformation(kortex_driver::SetPayloadInformation::Request &req, kortex_driver::SetPayloadInformation::Response &res); + bool GetPayloadInformation(kortex_driver::GetPayloadInformation::Request &req, kortex_driver::GetPayloadInformation::Response &res); + bool SetToolConfiguration(kortex_driver::SetToolConfiguration::Request &req, kortex_driver::SetToolConfiguration::Response &res); + bool GetToolConfiguration(kortex_driver::GetToolConfiguration::Request &req, kortex_driver::GetToolConfiguration::Response &res); + bool OnNotificationControlConfigurationTopic(kortex_driver::OnNotificationControlConfigurationTopic::Request &req, kortex_driver::OnNotificationControlConfigurationTopic::Response &res); + void cb_ControlConfigurationTopic(Kinova::Api::ControlConfig::ControlConfigurationNotification notif); + bool ControlConfig_Unsubscribe(kortex_driver::ControlConfig_Unsubscribe::Request &req, kortex_driver::ControlConfig_Unsubscribe::Response &res); + bool SetCartesianReferenceFrame(kortex_driver::SetCartesianReferenceFrame::Request &req, kortex_driver::SetCartesianReferenceFrame::Response &res); + bool GetCartesianReferenceFrame(kortex_driver::GetCartesianReferenceFrame::Request &req, kortex_driver::GetCartesianReferenceFrame::Response &res); + +private: + uint32_t m_current_device_id; + Kinova::Api::RouterClientSendOptions m_api_options; + + Kinova::Api::ControlConfig::ControlConfigClient* m_controlconfig; + + ros::NodeHandle m_n; + ros::Publisher m_pub_Error; + ros::Publisher m_pub_ControlConfigurationTopic; + + ros::ServiceServer m_serviceSetDeviceID; + ros::ServiceServer m_serviceSetApiOptions; + + ros::ServiceServer m_serviceSetGravityVector; + ros::ServiceServer m_serviceGetGravityVector; + ros::ServiceServer m_serviceSetPayloadInformation; + ros::ServiceServer m_serviceGetPayloadInformation; + ros::ServiceServer m_serviceSetToolConfiguration; + ros::ServiceServer m_serviceGetToolConfiguration; + ros::ServiceServer m_serviceOnNotificationControlConfigurationTopic; + ros::ServiceServer m_serviceControlConfig_Unsubscribe; + ros::ServiceServer m_serviceSetCartesianReferenceFrame; + ros::ServiceServer m_serviceGetCartesianReferenceFrame; +}; +#endif diff --git a/kortex_driver/include/kortex_driver/generated/deviceconfig_proto_converter.h b/kortex_driver/include/kortex_driver/generated/deviceconfig_proto_converter.h new file mode 100644 index 00000000..38e025c7 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/deviceconfig_proto_converter.h @@ -0,0 +1,97 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_DEVICECONFIG_PROTO_CONVERTER_H_ +#define _KORTEX_DEVICECONFIG_PROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_proto_converter.h" +#include "kortex_driver/generated/actuatorconfig_proto_converter.h" +#include "kortex_driver/generated/actuatorcyclic_proto_converter.h" +#include "kortex_driver/generated/productconfiguration_proto_converter.h" +#include "kortex_driver/generated/base_proto_converter.h" +#include "kortex_driver/generated/grippercyclic_proto_converter.h" +#include "kortex_driver/generated/interconnectcyclic_proto_converter.h" +#include "kortex_driver/generated/basecyclic_proto_converter.h" +#include "kortex_driver/generated/controlconfig_proto_converter.h" +#include "kortex_driver/generated/devicemanager_proto_converter.h" +#include "kortex_driver/generated/interconnectconfig_proto_converter.h" +#include "kortex_driver/generated/visionconfig_proto_converter.h" + + +#include "kortex_driver/DeviceType.h" +#include "kortex_driver/RunMode.h" +#include "kortex_driver/FirmwareVersion.h" +#include "kortex_driver/BootloaderVersion.h" +#include "kortex_driver/ModelNumber.h" +#include "kortex_driver/PartNumber.h" +#include "kortex_driver/SerialNumber.h" +#include "kortex_driver/MACAddress.h" +#include "kortex_driver/IPv4Settings.h" +#include "kortex_driver/PartNumberRevision.h" +#include "kortex_driver/PowerOnSelfTestResult.h" +#include "kortex_driver/RebootRqst.h" +#include "kortex_driver/SafetyInformation.h" +#include "kortex_driver/SafetyInformationList.h" +#include "kortex_driver/SafetyEnable.h" +#include "kortex_driver/SafetyThreshold.h" +#include "kortex_driver/SafetyConfiguration.h" +#include "kortex_driver/SafetyConfigurationList.h" +#include "kortex_driver/SafetyStatus.h" +#include "kortex_driver/CalibrationParameter.h" +#include "kortex_driver/Calibration.h" +#include "kortex_driver/CalibrationElement.h" +#include "kortex_driver/CalibrationResult.h" +#include "kortex_driver/DeviceConfig_CapSenseConfig.h" +#include "kortex_driver/CapSenseRegister.h" + + +int ToProtoData(kortex_driver::DeviceType input, Kinova::Api::DeviceConfig::DeviceType *output); +int ToProtoData(kortex_driver::RunMode input, Kinova::Api::DeviceConfig::RunMode *output); +int ToProtoData(kortex_driver::FirmwareVersion input, Kinova::Api::DeviceConfig::FirmwareVersion *output); +int ToProtoData(kortex_driver::BootloaderVersion input, Kinova::Api::DeviceConfig::BootloaderVersion *output); +int ToProtoData(kortex_driver::ModelNumber input, Kinova::Api::DeviceConfig::ModelNumber *output); +int ToProtoData(kortex_driver::PartNumber input, Kinova::Api::DeviceConfig::PartNumber *output); +int ToProtoData(kortex_driver::SerialNumber input, Kinova::Api::DeviceConfig::SerialNumber *output); +int ToProtoData(kortex_driver::MACAddress input, Kinova::Api::DeviceConfig::MACAddress *output); +int ToProtoData(kortex_driver::IPv4Settings input, Kinova::Api::DeviceConfig::IPv4Settings *output); +int ToProtoData(kortex_driver::PartNumberRevision input, Kinova::Api::DeviceConfig::PartNumberRevision *output); +int ToProtoData(kortex_driver::PowerOnSelfTestResult input, Kinova::Api::DeviceConfig::PowerOnSelfTestResult *output); +int ToProtoData(kortex_driver::RebootRqst input, Kinova::Api::DeviceConfig::RebootRqst *output); +int ToProtoData(kortex_driver::SafetyInformation input, Kinova::Api::DeviceConfig::SafetyInformation *output); +int ToProtoData(kortex_driver::SafetyInformationList input, Kinova::Api::DeviceConfig::SafetyInformationList *output); +int ToProtoData(kortex_driver::SafetyEnable input, Kinova::Api::DeviceConfig::SafetyEnable *output); +int ToProtoData(kortex_driver::SafetyThreshold input, Kinova::Api::DeviceConfig::SafetyThreshold *output); +int ToProtoData(kortex_driver::SafetyConfiguration input, Kinova::Api::DeviceConfig::SafetyConfiguration *output); +int ToProtoData(kortex_driver::SafetyConfigurationList input, Kinova::Api::DeviceConfig::SafetyConfigurationList *output); +int ToProtoData(kortex_driver::SafetyStatus input, Kinova::Api::DeviceConfig::SafetyStatus *output); +int ToProtoData(kortex_driver::CalibrationParameter input, Kinova::Api::DeviceConfig::CalibrationParameter *output); +int ToProtoData(kortex_driver::Calibration input, Kinova::Api::DeviceConfig::Calibration *output); +int ToProtoData(kortex_driver::CalibrationElement input, Kinova::Api::DeviceConfig::CalibrationElement *output); +int ToProtoData(kortex_driver::CalibrationResult input, Kinova::Api::DeviceConfig::CalibrationResult *output); +int ToProtoData(kortex_driver::DeviceConfig_CapSenseConfig input, Kinova::Api::DeviceConfig::CapSenseConfig *output); +int ToProtoData(kortex_driver::CapSenseRegister input, Kinova::Api::DeviceConfig::CapSenseRegister *output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/deviceconfig_ros_converter.h b/kortex_driver/include/kortex_driver/generated/deviceconfig_ros_converter.h new file mode 100644 index 00000000..4e727c19 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/deviceconfig_ros_converter.h @@ -0,0 +1,97 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_DEVICECONFIG_ROS_CONVERTER_H_ +#define _KORTEX_DEVICECONFIG_ROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_ros_converter.h" +#include "kortex_driver/generated/actuatorconfig_ros_converter.h" +#include "kortex_driver/generated/actuatorcyclic_ros_converter.h" +#include "kortex_driver/generated/productconfiguration_ros_converter.h" +#include "kortex_driver/generated/base_ros_converter.h" +#include "kortex_driver/generated/grippercyclic_ros_converter.h" +#include "kortex_driver/generated/interconnectcyclic_ros_converter.h" +#include "kortex_driver/generated/basecyclic_ros_converter.h" +#include "kortex_driver/generated/controlconfig_ros_converter.h" +#include "kortex_driver/generated/devicemanager_ros_converter.h" +#include "kortex_driver/generated/interconnectconfig_ros_converter.h" +#include "kortex_driver/generated/visionconfig_ros_converter.h" + + +#include "kortex_driver/DeviceType.h" +#include "kortex_driver/RunMode.h" +#include "kortex_driver/FirmwareVersion.h" +#include "kortex_driver/BootloaderVersion.h" +#include "kortex_driver/ModelNumber.h" +#include "kortex_driver/PartNumber.h" +#include "kortex_driver/SerialNumber.h" +#include "kortex_driver/MACAddress.h" +#include "kortex_driver/IPv4Settings.h" +#include "kortex_driver/PartNumberRevision.h" +#include "kortex_driver/PowerOnSelfTestResult.h" +#include "kortex_driver/RebootRqst.h" +#include "kortex_driver/SafetyInformation.h" +#include "kortex_driver/SafetyInformationList.h" +#include "kortex_driver/SafetyEnable.h" +#include "kortex_driver/SafetyThreshold.h" +#include "kortex_driver/SafetyConfiguration.h" +#include "kortex_driver/SafetyConfigurationList.h" +#include "kortex_driver/SafetyStatus.h" +#include "kortex_driver/CalibrationParameter.h" +#include "kortex_driver/Calibration.h" +#include "kortex_driver/CalibrationElement.h" +#include "kortex_driver/CalibrationResult.h" +#include "kortex_driver/DeviceConfig_CapSenseConfig.h" +#include "kortex_driver/CapSenseRegister.h" + + +int ToRosData(Kinova::Api::DeviceConfig::DeviceType input, kortex_driver::DeviceType &output); +int ToRosData(Kinova::Api::DeviceConfig::RunMode input, kortex_driver::RunMode &output); +int ToRosData(Kinova::Api::DeviceConfig::FirmwareVersion input, kortex_driver::FirmwareVersion &output); +int ToRosData(Kinova::Api::DeviceConfig::BootloaderVersion input, kortex_driver::BootloaderVersion &output); +int ToRosData(Kinova::Api::DeviceConfig::ModelNumber input, kortex_driver::ModelNumber &output); +int ToRosData(Kinova::Api::DeviceConfig::PartNumber input, kortex_driver::PartNumber &output); +int ToRosData(Kinova::Api::DeviceConfig::SerialNumber input, kortex_driver::SerialNumber &output); +int ToRosData(Kinova::Api::DeviceConfig::MACAddress input, kortex_driver::MACAddress &output); +int ToRosData(Kinova::Api::DeviceConfig::IPv4Settings input, kortex_driver::IPv4Settings &output); +int ToRosData(Kinova::Api::DeviceConfig::PartNumberRevision input, kortex_driver::PartNumberRevision &output); +int ToRosData(Kinova::Api::DeviceConfig::PowerOnSelfTestResult input, kortex_driver::PowerOnSelfTestResult &output); +int ToRosData(Kinova::Api::DeviceConfig::RebootRqst input, kortex_driver::RebootRqst &output); +int ToRosData(Kinova::Api::DeviceConfig::SafetyInformation input, kortex_driver::SafetyInformation &output); +int ToRosData(Kinova::Api::DeviceConfig::SafetyInformationList input, kortex_driver::SafetyInformationList &output); +int ToRosData(Kinova::Api::DeviceConfig::SafetyEnable input, kortex_driver::SafetyEnable &output); +int ToRosData(Kinova::Api::DeviceConfig::SafetyThreshold input, kortex_driver::SafetyThreshold &output); +int ToRosData(Kinova::Api::DeviceConfig::SafetyConfiguration input, kortex_driver::SafetyConfiguration &output); +int ToRosData(Kinova::Api::DeviceConfig::SafetyConfigurationList input, kortex_driver::SafetyConfigurationList &output); +int ToRosData(Kinova::Api::DeviceConfig::SafetyStatus input, kortex_driver::SafetyStatus &output); +int ToRosData(Kinova::Api::DeviceConfig::CalibrationParameter input, kortex_driver::CalibrationParameter &output); +int ToRosData(Kinova::Api::DeviceConfig::Calibration input, kortex_driver::Calibration &output); +int ToRosData(Kinova::Api::DeviceConfig::CalibrationElement input, kortex_driver::CalibrationElement &output); +int ToRosData(Kinova::Api::DeviceConfig::CalibrationResult input, kortex_driver::CalibrationResult &output); +int ToRosData(Kinova::Api::DeviceConfig::CapSenseConfig input, kortex_driver::DeviceConfig_CapSenseConfig &output); +int ToRosData(Kinova::Api::DeviceConfig::CapSenseRegister input, kortex_driver::CapSenseRegister &output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/deviceconfig_services.h b/kortex_driver/include/kortex_driver/generated/deviceconfig_services.h new file mode 100644 index 00000000..57f26ab8 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/deviceconfig_services.h @@ -0,0 +1,158 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_DEVICECONFIG_SERVICES_H_ +#define _KORTEX_DEVICECONFIG_SERVICES_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include "kortex_driver/GetRunMode.h" +#include "kortex_driver/SetRunMode.h" +#include "kortex_driver/GetDeviceType.h" +#include "kortex_driver/GetFirmwareVersion.h" +#include "kortex_driver/GetBootloaderVersion.h" +#include "kortex_driver/GetModelNumber.h" +#include "kortex_driver/GetPartNumber.h" +#include "kortex_driver/GetSerialNumber.h" +#include "kortex_driver/GetMACAddress.h" +#include "kortex_driver/GetIPv4Settings.h" +#include "kortex_driver/SetIPv4Settings.h" +#include "kortex_driver/GetPartNumberRevision.h" +#include "kortex_driver/RebootRequest.h" +#include "kortex_driver/SetSafetyEnable.h" +#include "kortex_driver/SetSafetyErrorThreshold.h" +#include "kortex_driver/SetSafetyWarningThreshold.h" +#include "kortex_driver/SetSafetyConfiguration.h" +#include "kortex_driver/GetSafetyConfiguration.h" +#include "kortex_driver/GetSafetyInformation.h" +#include "kortex_driver/GetSafetyEnable.h" +#include "kortex_driver/GetSafetyStatus.h" +#include "kortex_driver/ClearAllSafetyStatus.h" +#include "kortex_driver/ClearSafetyStatus.h" +#include "kortex_driver/GetAllSafetyConfiguration.h" +#include "kortex_driver/GetAllSafetyInformation.h" +#include "kortex_driver/ResetSafetyDefaults.h" +#include "kortex_driver/OnNotificationSafetyTopic.h" +#include "kortex_driver/SafetyNotification.h" +#include "kortex_driver/ExecuteCalibration.h" +#include "kortex_driver/GetCalibrationResult.h" +#include "kortex_driver/StopCalibration.h" +#include "kortex_driver/DeviceConfig_SetCapSenseConfig.h" +#include "kortex_driver/DeviceConfig_GetCapSenseConfig.h" + +#include "kortex_driver/KortexError.h" +#include "kortex_driver/SetDeviceID.h" +#include "kortex_driver/SetApiOptions.h" +#include "kortex_driver/ApiOptions.h" + +using namespace std; + +class DeviceConfigServices +{ + public: + DeviceConfigServices(ros::NodeHandle& n, Kinova::Api::DeviceConfig::DeviceConfigClient* deviceconfig, uint32_t device_id, uint32_t timeout_ms); + + bool SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res); + bool SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res); + bool GetRunMode(kortex_driver::GetRunMode::Request &req, kortex_driver::GetRunMode::Response &res); + bool SetRunMode(kortex_driver::SetRunMode::Request &req, kortex_driver::SetRunMode::Response &res); + bool GetDeviceType(kortex_driver::GetDeviceType::Request &req, kortex_driver::GetDeviceType::Response &res); + bool GetFirmwareVersion(kortex_driver::GetFirmwareVersion::Request &req, kortex_driver::GetFirmwareVersion::Response &res); + bool GetBootloaderVersion(kortex_driver::GetBootloaderVersion::Request &req, kortex_driver::GetBootloaderVersion::Response &res); + bool GetModelNumber(kortex_driver::GetModelNumber::Request &req, kortex_driver::GetModelNumber::Response &res); + bool GetPartNumber(kortex_driver::GetPartNumber::Request &req, kortex_driver::GetPartNumber::Response &res); + bool GetSerialNumber(kortex_driver::GetSerialNumber::Request &req, kortex_driver::GetSerialNumber::Response &res); + bool GetMACAddress(kortex_driver::GetMACAddress::Request &req, kortex_driver::GetMACAddress::Response &res); + bool GetIPv4Settings(kortex_driver::GetIPv4Settings::Request &req, kortex_driver::GetIPv4Settings::Response &res); + bool SetIPv4Settings(kortex_driver::SetIPv4Settings::Request &req, kortex_driver::SetIPv4Settings::Response &res); + bool GetPartNumberRevision(kortex_driver::GetPartNumberRevision::Request &req, kortex_driver::GetPartNumberRevision::Response &res); + bool RebootRequest(kortex_driver::RebootRequest::Request &req, kortex_driver::RebootRequest::Response &res); + bool SetSafetyEnable(kortex_driver::SetSafetyEnable::Request &req, kortex_driver::SetSafetyEnable::Response &res); + bool SetSafetyErrorThreshold(kortex_driver::SetSafetyErrorThreshold::Request &req, kortex_driver::SetSafetyErrorThreshold::Response &res); + bool SetSafetyWarningThreshold(kortex_driver::SetSafetyWarningThreshold::Request &req, kortex_driver::SetSafetyWarningThreshold::Response &res); + bool SetSafetyConfiguration(kortex_driver::SetSafetyConfiguration::Request &req, kortex_driver::SetSafetyConfiguration::Response &res); + bool GetSafetyConfiguration(kortex_driver::GetSafetyConfiguration::Request &req, kortex_driver::GetSafetyConfiguration::Response &res); + bool GetSafetyInformation(kortex_driver::GetSafetyInformation::Request &req, kortex_driver::GetSafetyInformation::Response &res); + bool GetSafetyEnable(kortex_driver::GetSafetyEnable::Request &req, kortex_driver::GetSafetyEnable::Response &res); + bool GetSafetyStatus(kortex_driver::GetSafetyStatus::Request &req, kortex_driver::GetSafetyStatus::Response &res); + bool ClearAllSafetyStatus(kortex_driver::ClearAllSafetyStatus::Request &req, kortex_driver::ClearAllSafetyStatus::Response &res); + bool ClearSafetyStatus(kortex_driver::ClearSafetyStatus::Request &req, kortex_driver::ClearSafetyStatus::Response &res); + bool GetAllSafetyConfiguration(kortex_driver::GetAllSafetyConfiguration::Request &req, kortex_driver::GetAllSafetyConfiguration::Response &res); + bool GetAllSafetyInformation(kortex_driver::GetAllSafetyInformation::Request &req, kortex_driver::GetAllSafetyInformation::Response &res); + bool ResetSafetyDefaults(kortex_driver::ResetSafetyDefaults::Request &req, kortex_driver::ResetSafetyDefaults::Response &res); + bool OnNotificationSafetyTopic(kortex_driver::OnNotificationSafetyTopic::Request &req, kortex_driver::OnNotificationSafetyTopic::Response &res); + void cb_SafetyTopic(Kinova::Api::Common::SafetyNotification notif); + bool ExecuteCalibration(kortex_driver::ExecuteCalibration::Request &req, kortex_driver::ExecuteCalibration::Response &res); + bool GetCalibrationResult(kortex_driver::GetCalibrationResult::Request &req, kortex_driver::GetCalibrationResult::Response &res); + bool StopCalibration(kortex_driver::StopCalibration::Request &req, kortex_driver::StopCalibration::Response &res); + bool DeviceConfig_SetCapSenseConfig(kortex_driver::DeviceConfig_SetCapSenseConfig::Request &req, kortex_driver::DeviceConfig_SetCapSenseConfig::Response &res); + bool DeviceConfig_GetCapSenseConfig(kortex_driver::DeviceConfig_GetCapSenseConfig::Request &req, kortex_driver::DeviceConfig_GetCapSenseConfig::Response &res); + +private: + uint32_t m_current_device_id; + Kinova::Api::RouterClientSendOptions m_api_options; + + Kinova::Api::DeviceConfig::DeviceConfigClient* m_deviceconfig; + + ros::NodeHandle m_n; + ros::Publisher m_pub_Error; + ros::Publisher m_pub_SafetyTopic; + + ros::ServiceServer m_serviceSetDeviceID; + ros::ServiceServer m_serviceSetApiOptions; + + ros::ServiceServer m_serviceGetRunMode; + ros::ServiceServer m_serviceSetRunMode; + ros::ServiceServer m_serviceGetDeviceType; + ros::ServiceServer m_serviceGetFirmwareVersion; + ros::ServiceServer m_serviceGetBootloaderVersion; + ros::ServiceServer m_serviceGetModelNumber; + ros::ServiceServer m_serviceGetPartNumber; + ros::ServiceServer m_serviceGetSerialNumber; + ros::ServiceServer m_serviceGetMACAddress; + ros::ServiceServer m_serviceGetIPv4Settings; + ros::ServiceServer m_serviceSetIPv4Settings; + ros::ServiceServer m_serviceGetPartNumberRevision; + ros::ServiceServer m_serviceRebootRequest; + ros::ServiceServer m_serviceSetSafetyEnable; + ros::ServiceServer m_serviceSetSafetyErrorThreshold; + ros::ServiceServer m_serviceSetSafetyWarningThreshold; + ros::ServiceServer m_serviceSetSafetyConfiguration; + ros::ServiceServer m_serviceGetSafetyConfiguration; + ros::ServiceServer m_serviceGetSafetyInformation; + ros::ServiceServer m_serviceGetSafetyEnable; + ros::ServiceServer m_serviceGetSafetyStatus; + ros::ServiceServer m_serviceClearAllSafetyStatus; + ros::ServiceServer m_serviceClearSafetyStatus; + ros::ServiceServer m_serviceGetAllSafetyConfiguration; + ros::ServiceServer m_serviceGetAllSafetyInformation; + ros::ServiceServer m_serviceResetSafetyDefaults; + ros::ServiceServer m_serviceOnNotificationSafetyTopic; + ros::ServiceServer m_serviceExecuteCalibration; + ros::ServiceServer m_serviceGetCalibrationResult; + ros::ServiceServer m_serviceStopCalibration; + ros::ServiceServer m_serviceDeviceConfig_SetCapSenseConfig; + ros::ServiceServer m_serviceDeviceConfig_GetCapSenseConfig; +}; +#endif diff --git a/kortex_driver/include/kortex_driver/generated/devicemanager_proto_converter.h b/kortex_driver/include/kortex_driver/generated/devicemanager_proto_converter.h new file mode 100644 index 00000000..352de2e7 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/devicemanager_proto_converter.h @@ -0,0 +1,49 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_DEVICEMANAGER_PROTO_CONVERTER_H_ +#define _KORTEX_DEVICEMANAGER_PROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_proto_converter.h" +#include "kortex_driver/generated/actuatorconfig_proto_converter.h" +#include "kortex_driver/generated/actuatorcyclic_proto_converter.h" +#include "kortex_driver/generated/productconfiguration_proto_converter.h" +#include "kortex_driver/generated/base_proto_converter.h" +#include "kortex_driver/generated/grippercyclic_proto_converter.h" +#include "kortex_driver/generated/interconnectcyclic_proto_converter.h" +#include "kortex_driver/generated/basecyclic_proto_converter.h" +#include "kortex_driver/generated/controlconfig_proto_converter.h" +#include "kortex_driver/generated/deviceconfig_proto_converter.h" +#include "kortex_driver/generated/interconnectconfig_proto_converter.h" +#include "kortex_driver/generated/visionconfig_proto_converter.h" + + +#include "kortex_driver/DeviceHandles.h" + + +int ToProtoData(kortex_driver::DeviceHandles input, Kinova::Api::DeviceManager::DeviceHandles *output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/devicemanager_ros_converter.h b/kortex_driver/include/kortex_driver/generated/devicemanager_ros_converter.h new file mode 100644 index 00000000..4e5359b7 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/devicemanager_ros_converter.h @@ -0,0 +1,49 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_DEVICEMANAGER_ROS_CONVERTER_H_ +#define _KORTEX_DEVICEMANAGER_ROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_ros_converter.h" +#include "kortex_driver/generated/actuatorconfig_ros_converter.h" +#include "kortex_driver/generated/actuatorcyclic_ros_converter.h" +#include "kortex_driver/generated/productconfiguration_ros_converter.h" +#include "kortex_driver/generated/base_ros_converter.h" +#include "kortex_driver/generated/grippercyclic_ros_converter.h" +#include "kortex_driver/generated/interconnectcyclic_ros_converter.h" +#include "kortex_driver/generated/basecyclic_ros_converter.h" +#include "kortex_driver/generated/controlconfig_ros_converter.h" +#include "kortex_driver/generated/deviceconfig_ros_converter.h" +#include "kortex_driver/generated/interconnectconfig_ros_converter.h" +#include "kortex_driver/generated/visionconfig_ros_converter.h" + + +#include "kortex_driver/DeviceHandles.h" + + +int ToRosData(Kinova::Api::DeviceManager::DeviceHandles input, kortex_driver::DeviceHandles &output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/devicemanager_services.h b/kortex_driver/include/kortex_driver/generated/devicemanager_services.h new file mode 100644 index 00000000..b5d016a3 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/devicemanager_services.h @@ -0,0 +1,62 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_DEVICEMANAGER_SERVICES_H_ +#define _KORTEX_DEVICEMANAGER_SERVICES_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include "kortex_driver/ReadAllDevices.h" + +#include "kortex_driver/KortexError.h" +#include "kortex_driver/SetDeviceID.h" +#include "kortex_driver/SetApiOptions.h" +#include "kortex_driver/ApiOptions.h" + +using namespace std; + +class DeviceManagerServices +{ + public: + DeviceManagerServices(ros::NodeHandle& n, Kinova::Api::DeviceManager::DeviceManagerClient* devicemanager, uint32_t device_id, uint32_t timeout_ms); + + bool SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res); + bool SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res); + bool ReadAllDevices(kortex_driver::ReadAllDevices::Request &req, kortex_driver::ReadAllDevices::Response &res); + +private: + uint32_t m_current_device_id; + Kinova::Api::RouterClientSendOptions m_api_options; + + Kinova::Api::DeviceManager::DeviceManagerClient* m_devicemanager; + + ros::NodeHandle m_n; + ros::Publisher m_pub_Error; + + ros::ServiceServer m_serviceSetDeviceID; + ros::ServiceServer m_serviceSetApiOptions; + + ros::ServiceServer m_serviceReadAllDevices; +}; +#endif diff --git a/kortex_driver/include/kortex_driver/generated/grippercyclic_proto_converter.h b/kortex_driver/include/kortex_driver/generated/grippercyclic_proto_converter.h new file mode 100644 index 00000000..fc5faad4 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/grippercyclic_proto_converter.h @@ -0,0 +1,61 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_GRIPPERCYCLIC_PROTO_CONVERTER_H_ +#define _KORTEX_GRIPPERCYCLIC_PROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_proto_converter.h" +#include "kortex_driver/generated/actuatorconfig_proto_converter.h" +#include "kortex_driver/generated/actuatorcyclic_proto_converter.h" +#include "kortex_driver/generated/productconfiguration_proto_converter.h" +#include "kortex_driver/generated/base_proto_converter.h" +#include "kortex_driver/generated/interconnectcyclic_proto_converter.h" +#include "kortex_driver/generated/basecyclic_proto_converter.h" +#include "kortex_driver/generated/controlconfig_proto_converter.h" +#include "kortex_driver/generated/deviceconfig_proto_converter.h" +#include "kortex_driver/generated/devicemanager_proto_converter.h" +#include "kortex_driver/generated/interconnectconfig_proto_converter.h" +#include "kortex_driver/generated/visionconfig_proto_converter.h" + + +#include "kortex_driver/GripperCyclic_MessageId.h" +#include "kortex_driver/MotorCommand.h" +#include "kortex_driver/GripperCyclic_Command.h" +#include "kortex_driver/MotorFeedback.h" +#include "kortex_driver/GripperCyclic_Feedback.h" +#include "kortex_driver/CustomDataUnit.h" +#include "kortex_driver/GripperCyclic_CustomData.h" + + +int ToProtoData(kortex_driver::GripperCyclic_MessageId input, Kinova::Api::GripperCyclic::MessageId *output); +int ToProtoData(kortex_driver::MotorCommand input, Kinova::Api::GripperCyclic::MotorCommand *output); +int ToProtoData(kortex_driver::GripperCyclic_Command input, Kinova::Api::GripperCyclic::Command *output); +int ToProtoData(kortex_driver::MotorFeedback input, Kinova::Api::GripperCyclic::MotorFeedback *output); +int ToProtoData(kortex_driver::GripperCyclic_Feedback input, Kinova::Api::GripperCyclic::Feedback *output); +int ToProtoData(kortex_driver::CustomDataUnit input, Kinova::Api::GripperCyclic::CustomDataUnit *output); +int ToProtoData(kortex_driver::GripperCyclic_CustomData input, Kinova::Api::GripperCyclic::CustomData *output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/grippercyclic_ros_converter.h b/kortex_driver/include/kortex_driver/generated/grippercyclic_ros_converter.h new file mode 100644 index 00000000..e352379a --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/grippercyclic_ros_converter.h @@ -0,0 +1,61 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_GRIPPERCYCLIC_ROS_CONVERTER_H_ +#define _KORTEX_GRIPPERCYCLIC_ROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_ros_converter.h" +#include "kortex_driver/generated/actuatorconfig_ros_converter.h" +#include "kortex_driver/generated/actuatorcyclic_ros_converter.h" +#include "kortex_driver/generated/productconfiguration_ros_converter.h" +#include "kortex_driver/generated/base_ros_converter.h" +#include "kortex_driver/generated/interconnectcyclic_ros_converter.h" +#include "kortex_driver/generated/basecyclic_ros_converter.h" +#include "kortex_driver/generated/controlconfig_ros_converter.h" +#include "kortex_driver/generated/deviceconfig_ros_converter.h" +#include "kortex_driver/generated/devicemanager_ros_converter.h" +#include "kortex_driver/generated/interconnectconfig_ros_converter.h" +#include "kortex_driver/generated/visionconfig_ros_converter.h" + + +#include "kortex_driver/GripperCyclic_MessageId.h" +#include "kortex_driver/MotorCommand.h" +#include "kortex_driver/GripperCyclic_Command.h" +#include "kortex_driver/MotorFeedback.h" +#include "kortex_driver/GripperCyclic_Feedback.h" +#include "kortex_driver/CustomDataUnit.h" +#include "kortex_driver/GripperCyclic_CustomData.h" + + +int ToRosData(Kinova::Api::GripperCyclic::MessageId input, kortex_driver::GripperCyclic_MessageId &output); +int ToRosData(Kinova::Api::GripperCyclic::MotorCommand input, kortex_driver::MotorCommand &output); +int ToRosData(Kinova::Api::GripperCyclic::Command input, kortex_driver::GripperCyclic_Command &output); +int ToRosData(Kinova::Api::GripperCyclic::MotorFeedback input, kortex_driver::MotorFeedback &output); +int ToRosData(Kinova::Api::GripperCyclic::Feedback input, kortex_driver::GripperCyclic_Feedback &output); +int ToRosData(Kinova::Api::GripperCyclic::CustomDataUnit input, kortex_driver::CustomDataUnit &output); +int ToRosData(Kinova::Api::GripperCyclic::CustomData input, kortex_driver::GripperCyclic_CustomData &output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/interconnectconfig_proto_converter.h b/kortex_driver/include/kortex_driver/generated/interconnectconfig_proto_converter.h new file mode 100644 index 00000000..0f3d45cc --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/interconnectconfig_proto_converter.h @@ -0,0 +1,71 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_INTERCONNECTCONFIG_PROTO_CONVERTER_H_ +#define _KORTEX_INTERCONNECTCONFIG_PROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_proto_converter.h" +#include "kortex_driver/generated/actuatorconfig_proto_converter.h" +#include "kortex_driver/generated/actuatorcyclic_proto_converter.h" +#include "kortex_driver/generated/productconfiguration_proto_converter.h" +#include "kortex_driver/generated/base_proto_converter.h" +#include "kortex_driver/generated/grippercyclic_proto_converter.h" +#include "kortex_driver/generated/interconnectcyclic_proto_converter.h" +#include "kortex_driver/generated/basecyclic_proto_converter.h" +#include "kortex_driver/generated/controlconfig_proto_converter.h" +#include "kortex_driver/generated/deviceconfig_proto_converter.h" +#include "kortex_driver/generated/devicemanager_proto_converter.h" +#include "kortex_driver/generated/visionconfig_proto_converter.h" + + +#include "kortex_driver/EthernetDeviceIdentification.h" +#include "kortex_driver/EthernetConfiguration.h" +#include "kortex_driver/GPIOIdentification.h" +#include "kortex_driver/GPIOConfiguration.h" +#include "kortex_driver/GPIOState.h" +#include "kortex_driver/I2CDeviceIdentification.h" +#include "kortex_driver/I2CConfiguration.h" +#include "kortex_driver/I2CReadParameter.h" +#include "kortex_driver/I2CReadRegisterParameter.h" +#include "kortex_driver/I2CWriteParameter.h" +#include "kortex_driver/I2CWriteRegisterParameter.h" +#include "kortex_driver/I2CData.h" + + +int ToProtoData(kortex_driver::EthernetDeviceIdentification input, Kinova::Api::InterconnectConfig::EthernetDeviceIdentification *output); +int ToProtoData(kortex_driver::EthernetConfiguration input, Kinova::Api::InterconnectConfig::EthernetConfiguration *output); +int ToProtoData(kortex_driver::GPIOIdentification input, Kinova::Api::InterconnectConfig::GPIOIdentification *output); +int ToProtoData(kortex_driver::GPIOConfiguration input, Kinova::Api::InterconnectConfig::GPIOConfiguration *output); +int ToProtoData(kortex_driver::GPIOState input, Kinova::Api::InterconnectConfig::GPIOState *output); +int ToProtoData(kortex_driver::I2CDeviceIdentification input, Kinova::Api::InterconnectConfig::I2CDeviceIdentification *output); +int ToProtoData(kortex_driver::I2CConfiguration input, Kinova::Api::InterconnectConfig::I2CConfiguration *output); +int ToProtoData(kortex_driver::I2CReadParameter input, Kinova::Api::InterconnectConfig::I2CReadParameter *output); +int ToProtoData(kortex_driver::I2CReadRegisterParameter input, Kinova::Api::InterconnectConfig::I2CReadRegisterParameter *output); +int ToProtoData(kortex_driver::I2CWriteParameter input, Kinova::Api::InterconnectConfig::I2CWriteParameter *output); +int ToProtoData(kortex_driver::I2CWriteRegisterParameter input, Kinova::Api::InterconnectConfig::I2CWriteRegisterParameter *output); +int ToProtoData(kortex_driver::I2CData input, Kinova::Api::InterconnectConfig::I2CData *output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/interconnectconfig_ros_converter.h b/kortex_driver/include/kortex_driver/generated/interconnectconfig_ros_converter.h new file mode 100644 index 00000000..0f6187c3 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/interconnectconfig_ros_converter.h @@ -0,0 +1,71 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_INTERCONNECTCONFIG_ROS_CONVERTER_H_ +#define _KORTEX_INTERCONNECTCONFIG_ROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_ros_converter.h" +#include "kortex_driver/generated/actuatorconfig_ros_converter.h" +#include "kortex_driver/generated/actuatorcyclic_ros_converter.h" +#include "kortex_driver/generated/productconfiguration_ros_converter.h" +#include "kortex_driver/generated/base_ros_converter.h" +#include "kortex_driver/generated/grippercyclic_ros_converter.h" +#include "kortex_driver/generated/interconnectcyclic_ros_converter.h" +#include "kortex_driver/generated/basecyclic_ros_converter.h" +#include "kortex_driver/generated/controlconfig_ros_converter.h" +#include "kortex_driver/generated/deviceconfig_ros_converter.h" +#include "kortex_driver/generated/devicemanager_ros_converter.h" +#include "kortex_driver/generated/visionconfig_ros_converter.h" + + +#include "kortex_driver/EthernetDeviceIdentification.h" +#include "kortex_driver/EthernetConfiguration.h" +#include "kortex_driver/GPIOIdentification.h" +#include "kortex_driver/GPIOConfiguration.h" +#include "kortex_driver/GPIOState.h" +#include "kortex_driver/I2CDeviceIdentification.h" +#include "kortex_driver/I2CConfiguration.h" +#include "kortex_driver/I2CReadParameter.h" +#include "kortex_driver/I2CReadRegisterParameter.h" +#include "kortex_driver/I2CWriteParameter.h" +#include "kortex_driver/I2CWriteRegisterParameter.h" +#include "kortex_driver/I2CData.h" + + +int ToRosData(Kinova::Api::InterconnectConfig::EthernetDeviceIdentification input, kortex_driver::EthernetDeviceIdentification &output); +int ToRosData(Kinova::Api::InterconnectConfig::EthernetConfiguration input, kortex_driver::EthernetConfiguration &output); +int ToRosData(Kinova::Api::InterconnectConfig::GPIOIdentification input, kortex_driver::GPIOIdentification &output); +int ToRosData(Kinova::Api::InterconnectConfig::GPIOConfiguration input, kortex_driver::GPIOConfiguration &output); +int ToRosData(Kinova::Api::InterconnectConfig::GPIOState input, kortex_driver::GPIOState &output); +int ToRosData(Kinova::Api::InterconnectConfig::I2CDeviceIdentification input, kortex_driver::I2CDeviceIdentification &output); +int ToRosData(Kinova::Api::InterconnectConfig::I2CConfiguration input, kortex_driver::I2CConfiguration &output); +int ToRosData(Kinova::Api::InterconnectConfig::I2CReadParameter input, kortex_driver::I2CReadParameter &output); +int ToRosData(Kinova::Api::InterconnectConfig::I2CReadRegisterParameter input, kortex_driver::I2CReadRegisterParameter &output); +int ToRosData(Kinova::Api::InterconnectConfig::I2CWriteParameter input, kortex_driver::I2CWriteParameter &output); +int ToRosData(Kinova::Api::InterconnectConfig::I2CWriteRegisterParameter input, kortex_driver::I2CWriteRegisterParameter &output); +int ToRosData(Kinova::Api::InterconnectConfig::I2CData input, kortex_driver::I2CData &output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/interconnectconfig_services.h b/kortex_driver/include/kortex_driver/generated/interconnectconfig_services.h new file mode 100644 index 00000000..34e135e6 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/interconnectconfig_services.h @@ -0,0 +1,101 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_INTERCONNECTCONFIG_SERVICES_H_ +#define _KORTEX_INTERCONNECTCONFIG_SERVICES_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include "kortex_driver/GetUARTConfiguration.h" +#include "kortex_driver/SetUARTConfiguration.h" +#include "kortex_driver/GetEthernetConfiguration.h" +#include "kortex_driver/SetEthernetConfiguration.h" +#include "kortex_driver/GetGPIOConfiguration.h" +#include "kortex_driver/SetGPIOConfiguration.h" +#include "kortex_driver/GetGPIOState.h" +#include "kortex_driver/SetGPIOState.h" +#include "kortex_driver/GetI2CConfiguration.h" +#include "kortex_driver/SetI2CConfiguration.h" +#include "kortex_driver/I2CRead.h" +#include "kortex_driver/I2CReadRegister.h" +#include "kortex_driver/I2CWrite.h" +#include "kortex_driver/I2CWriteRegister.h" + +#include "kortex_driver/KortexError.h" +#include "kortex_driver/SetDeviceID.h" +#include "kortex_driver/SetApiOptions.h" +#include "kortex_driver/ApiOptions.h" + +using namespace std; + +class InterconnectConfigServices +{ + public: + InterconnectConfigServices(ros::NodeHandle& n, Kinova::Api::InterconnectConfig::InterconnectConfigClient* interconnectconfig, uint32_t device_id, uint32_t timeout_ms); + + bool SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res); + bool SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res); + bool GetUARTConfiguration(kortex_driver::GetUARTConfiguration::Request &req, kortex_driver::GetUARTConfiguration::Response &res); + bool SetUARTConfiguration(kortex_driver::SetUARTConfiguration::Request &req, kortex_driver::SetUARTConfiguration::Response &res); + bool GetEthernetConfiguration(kortex_driver::GetEthernetConfiguration::Request &req, kortex_driver::GetEthernetConfiguration::Response &res); + bool SetEthernetConfiguration(kortex_driver::SetEthernetConfiguration::Request &req, kortex_driver::SetEthernetConfiguration::Response &res); + bool GetGPIOConfiguration(kortex_driver::GetGPIOConfiguration::Request &req, kortex_driver::GetGPIOConfiguration::Response &res); + bool SetGPIOConfiguration(kortex_driver::SetGPIOConfiguration::Request &req, kortex_driver::SetGPIOConfiguration::Response &res); + bool GetGPIOState(kortex_driver::GetGPIOState::Request &req, kortex_driver::GetGPIOState::Response &res); + bool SetGPIOState(kortex_driver::SetGPIOState::Request &req, kortex_driver::SetGPIOState::Response &res); + bool GetI2CConfiguration(kortex_driver::GetI2CConfiguration::Request &req, kortex_driver::GetI2CConfiguration::Response &res); + bool SetI2CConfiguration(kortex_driver::SetI2CConfiguration::Request &req, kortex_driver::SetI2CConfiguration::Response &res); + bool I2CRead(kortex_driver::I2CRead::Request &req, kortex_driver::I2CRead::Response &res); + bool I2CReadRegister(kortex_driver::I2CReadRegister::Request &req, kortex_driver::I2CReadRegister::Response &res); + bool I2CWrite(kortex_driver::I2CWrite::Request &req, kortex_driver::I2CWrite::Response &res); + bool I2CWriteRegister(kortex_driver::I2CWriteRegister::Request &req, kortex_driver::I2CWriteRegister::Response &res); + +private: + uint32_t m_current_device_id; + Kinova::Api::RouterClientSendOptions m_api_options; + + Kinova::Api::InterconnectConfig::InterconnectConfigClient* m_interconnectconfig; + + ros::NodeHandle m_n; + ros::Publisher m_pub_Error; + + ros::ServiceServer m_serviceSetDeviceID; + ros::ServiceServer m_serviceSetApiOptions; + + ros::ServiceServer m_serviceGetUARTConfiguration; + ros::ServiceServer m_serviceSetUARTConfiguration; + ros::ServiceServer m_serviceGetEthernetConfiguration; + ros::ServiceServer m_serviceSetEthernetConfiguration; + ros::ServiceServer m_serviceGetGPIOConfiguration; + ros::ServiceServer m_serviceSetGPIOConfiguration; + ros::ServiceServer m_serviceGetGPIOState; + ros::ServiceServer m_serviceSetGPIOState; + ros::ServiceServer m_serviceGetI2CConfiguration; + ros::ServiceServer m_serviceSetI2CConfiguration; + ros::ServiceServer m_serviceI2CRead; + ros::ServiceServer m_serviceI2CReadRegister; + ros::ServiceServer m_serviceI2CWrite; + ros::ServiceServer m_serviceI2CWriteRegister; +}; +#endif diff --git a/kortex_driver/include/kortex_driver/generated/interconnectcyclic_proto_converter.h b/kortex_driver/include/kortex_driver/generated/interconnectcyclic_proto_converter.h new file mode 100644 index 00000000..ba34f394 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/interconnectcyclic_proto_converter.h @@ -0,0 +1,55 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_INTERCONNECTCYCLIC_PROTO_CONVERTER_H_ +#define _KORTEX_INTERCONNECTCYCLIC_PROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_proto_converter.h" +#include "kortex_driver/generated/actuatorconfig_proto_converter.h" +#include "kortex_driver/generated/actuatorcyclic_proto_converter.h" +#include "kortex_driver/generated/productconfiguration_proto_converter.h" +#include "kortex_driver/generated/base_proto_converter.h" +#include "kortex_driver/generated/grippercyclic_proto_converter.h" +#include "kortex_driver/generated/basecyclic_proto_converter.h" +#include "kortex_driver/generated/controlconfig_proto_converter.h" +#include "kortex_driver/generated/deviceconfig_proto_converter.h" +#include "kortex_driver/generated/devicemanager_proto_converter.h" +#include "kortex_driver/generated/interconnectconfig_proto_converter.h" +#include "kortex_driver/generated/visionconfig_proto_converter.h" + + +#include "kortex_driver/InterconnectCyclic_MessageId.h" +#include "kortex_driver/InterconnectCyclic_Command.h" +#include "kortex_driver/InterconnectCyclic_Feedback.h" +#include "kortex_driver/InterconnectCyclic_CustomData.h" + + +int ToProtoData(kortex_driver::InterconnectCyclic_MessageId input, Kinova::Api::InterconnectCyclic::MessageId *output); +int ToProtoData(kortex_driver::InterconnectCyclic_Command input, Kinova::Api::InterconnectCyclic::Command *output); +int ToProtoData(kortex_driver::InterconnectCyclic_Feedback input, Kinova::Api::InterconnectCyclic::Feedback *output); +int ToProtoData(kortex_driver::InterconnectCyclic_CustomData input, Kinova::Api::InterconnectCyclic::CustomData *output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/interconnectcyclic_ros_converter.h b/kortex_driver/include/kortex_driver/generated/interconnectcyclic_ros_converter.h new file mode 100644 index 00000000..2e89a38c --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/interconnectcyclic_ros_converter.h @@ -0,0 +1,55 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_INTERCONNECTCYCLIC_ROS_CONVERTER_H_ +#define _KORTEX_INTERCONNECTCYCLIC_ROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_ros_converter.h" +#include "kortex_driver/generated/actuatorconfig_ros_converter.h" +#include "kortex_driver/generated/actuatorcyclic_ros_converter.h" +#include "kortex_driver/generated/productconfiguration_ros_converter.h" +#include "kortex_driver/generated/base_ros_converter.h" +#include "kortex_driver/generated/grippercyclic_ros_converter.h" +#include "kortex_driver/generated/basecyclic_ros_converter.h" +#include "kortex_driver/generated/controlconfig_ros_converter.h" +#include "kortex_driver/generated/deviceconfig_ros_converter.h" +#include "kortex_driver/generated/devicemanager_ros_converter.h" +#include "kortex_driver/generated/interconnectconfig_ros_converter.h" +#include "kortex_driver/generated/visionconfig_ros_converter.h" + + +#include "kortex_driver/InterconnectCyclic_MessageId.h" +#include "kortex_driver/InterconnectCyclic_Command.h" +#include "kortex_driver/InterconnectCyclic_Feedback.h" +#include "kortex_driver/InterconnectCyclic_CustomData.h" + + +int ToRosData(Kinova::Api::InterconnectCyclic::MessageId input, kortex_driver::InterconnectCyclic_MessageId &output); +int ToRosData(Kinova::Api::InterconnectCyclic::Command input, kortex_driver::InterconnectCyclic_Command &output); +int ToRosData(Kinova::Api::InterconnectCyclic::Feedback input, kortex_driver::InterconnectCyclic_Feedback &output); +int ToRosData(Kinova::Api::InterconnectCyclic::CustomData input, kortex_driver::InterconnectCyclic_CustomData &output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/productconfiguration_proto_converter.h b/kortex_driver/include/kortex_driver/generated/productconfiguration_proto_converter.h new file mode 100644 index 00000000..7e577d4c --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/productconfiguration_proto_converter.h @@ -0,0 +1,63 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_PRODUCTCONFIGURATION_PROTO_CONVERTER_H_ +#define _KORTEX_PRODUCTCONFIGURATION_PROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_proto_converter.h" +#include "kortex_driver/generated/actuatorconfig_proto_converter.h" +#include "kortex_driver/generated/actuatorcyclic_proto_converter.h" +#include "kortex_driver/generated/base_proto_converter.h" +#include "kortex_driver/generated/grippercyclic_proto_converter.h" +#include "kortex_driver/generated/interconnectcyclic_proto_converter.h" +#include "kortex_driver/generated/basecyclic_proto_converter.h" +#include "kortex_driver/generated/controlconfig_proto_converter.h" +#include "kortex_driver/generated/deviceconfig_proto_converter.h" +#include "kortex_driver/generated/devicemanager_proto_converter.h" +#include "kortex_driver/generated/interconnectconfig_proto_converter.h" +#include "kortex_driver/generated/visionconfig_proto_converter.h" + + +#include "kortex_driver/CompleteProductConfiguration.h" +#include "kortex_driver/ProductConfigurationDegreeOfFreedom.h" +#include "kortex_driver/ProductConfigurationBaseType.h" +#include "kortex_driver/ProductConfigurationEndEffectorType.h" +#include "kortex_driver/ProductConfigurationVisionModuleType.h" +#include "kortex_driver/ProductConfigurationInterfaceModuleType.h" +#include "kortex_driver/ProductConfigurationLaterality.h" +#include "kortex_driver/ProductConfigurationWristType.h" + + +int ToProtoData(kortex_driver::CompleteProductConfiguration input, Kinova::Api::ProductConfiguration::CompleteProductConfiguration *output); +int ToProtoData(kortex_driver::ProductConfigurationDegreeOfFreedom input, Kinova::Api::ProductConfiguration::ProductConfigurationDegreeOfFreedom *output); +int ToProtoData(kortex_driver::ProductConfigurationBaseType input, Kinova::Api::ProductConfiguration::ProductConfigurationBaseType *output); +int ToProtoData(kortex_driver::ProductConfigurationEndEffectorType input, Kinova::Api::ProductConfiguration::ProductConfigurationEndEffectorType *output); +int ToProtoData(kortex_driver::ProductConfigurationVisionModuleType input, Kinova::Api::ProductConfiguration::ProductConfigurationVisionModuleType *output); +int ToProtoData(kortex_driver::ProductConfigurationInterfaceModuleType input, Kinova::Api::ProductConfiguration::ProductConfigurationInterfaceModuleType *output); +int ToProtoData(kortex_driver::ProductConfigurationLaterality input, Kinova::Api::ProductConfiguration::ProductConfigurationLaterality *output); +int ToProtoData(kortex_driver::ProductConfigurationWristType input, Kinova::Api::ProductConfiguration::ProductConfigurationWristType *output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/productconfiguration_ros_converter.h b/kortex_driver/include/kortex_driver/generated/productconfiguration_ros_converter.h new file mode 100644 index 00000000..e1f06a84 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/productconfiguration_ros_converter.h @@ -0,0 +1,63 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_PRODUCTCONFIGURATION_ROS_CONVERTER_H_ +#define _KORTEX_PRODUCTCONFIGURATION_ROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_ros_converter.h" +#include "kortex_driver/generated/actuatorconfig_ros_converter.h" +#include "kortex_driver/generated/actuatorcyclic_ros_converter.h" +#include "kortex_driver/generated/base_ros_converter.h" +#include "kortex_driver/generated/grippercyclic_ros_converter.h" +#include "kortex_driver/generated/interconnectcyclic_ros_converter.h" +#include "kortex_driver/generated/basecyclic_ros_converter.h" +#include "kortex_driver/generated/controlconfig_ros_converter.h" +#include "kortex_driver/generated/deviceconfig_ros_converter.h" +#include "kortex_driver/generated/devicemanager_ros_converter.h" +#include "kortex_driver/generated/interconnectconfig_ros_converter.h" +#include "kortex_driver/generated/visionconfig_ros_converter.h" + + +#include "kortex_driver/CompleteProductConfiguration.h" +#include "kortex_driver/ProductConfigurationDegreeOfFreedom.h" +#include "kortex_driver/ProductConfigurationBaseType.h" +#include "kortex_driver/ProductConfigurationEndEffectorType.h" +#include "kortex_driver/ProductConfigurationVisionModuleType.h" +#include "kortex_driver/ProductConfigurationInterfaceModuleType.h" +#include "kortex_driver/ProductConfigurationLaterality.h" +#include "kortex_driver/ProductConfigurationWristType.h" + + +int ToRosData(Kinova::Api::ProductConfiguration::CompleteProductConfiguration input, kortex_driver::CompleteProductConfiguration &output); +int ToRosData(Kinova::Api::ProductConfiguration::ProductConfigurationDegreeOfFreedom input, kortex_driver::ProductConfigurationDegreeOfFreedom &output); +int ToRosData(Kinova::Api::ProductConfiguration::ProductConfigurationBaseType input, kortex_driver::ProductConfigurationBaseType &output); +int ToRosData(Kinova::Api::ProductConfiguration::ProductConfigurationEndEffectorType input, kortex_driver::ProductConfigurationEndEffectorType &output); +int ToRosData(Kinova::Api::ProductConfiguration::ProductConfigurationVisionModuleType input, kortex_driver::ProductConfigurationVisionModuleType &output); +int ToRosData(Kinova::Api::ProductConfiguration::ProductConfigurationInterfaceModuleType input, kortex_driver::ProductConfigurationInterfaceModuleType &output); +int ToRosData(Kinova::Api::ProductConfiguration::ProductConfigurationLaterality input, kortex_driver::ProductConfigurationLaterality &output); +int ToRosData(Kinova::Api::ProductConfiguration::ProductConfigurationWristType input, kortex_driver::ProductConfigurationWristType &output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/visionconfig_proto_converter.h b/kortex_driver/include/kortex_driver/generated/visionconfig_proto_converter.h new file mode 100644 index 00000000..2b643df0 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/visionconfig_proto_converter.h @@ -0,0 +1,79 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_VISIONCONFIG_PROTO_CONVERTER_H_ +#define _KORTEX_VISIONCONFIG_PROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_proto_converter.h" +#include "kortex_driver/generated/actuatorconfig_proto_converter.h" +#include "kortex_driver/generated/actuatorcyclic_proto_converter.h" +#include "kortex_driver/generated/productconfiguration_proto_converter.h" +#include "kortex_driver/generated/base_proto_converter.h" +#include "kortex_driver/generated/grippercyclic_proto_converter.h" +#include "kortex_driver/generated/interconnectcyclic_proto_converter.h" +#include "kortex_driver/generated/basecyclic_proto_converter.h" +#include "kortex_driver/generated/controlconfig_proto_converter.h" +#include "kortex_driver/generated/deviceconfig_proto_converter.h" +#include "kortex_driver/generated/devicemanager_proto_converter.h" +#include "kortex_driver/generated/interconnectconfig_proto_converter.h" + + +#include "kortex_driver/SensorSettings.h" +#include "kortex_driver/SensorIdentifier.h" +#include "kortex_driver/IntrinsicProfileIdentifier.h" +#include "kortex_driver/OptionIdentifier.h" +#include "kortex_driver/OptionValue.h" +#include "kortex_driver/OptionInformation.h" +#include "kortex_driver/SensorFocusAction.h" +#include "kortex_driver/FocusPoint.h" +#include "kortex_driver/ManualFocus.h" +#include "kortex_driver/VisionNotification.h" +#include "kortex_driver/IntrinsicParameters.h" +#include "kortex_driver/DistortionCoefficients.h" +#include "kortex_driver/ExtrinsicParameters.h" +#include "kortex_driver/VisionConfig_RotationMatrix.h" +#include "kortex_driver/VisionConfig_RotationMatrixRow.h" +#include "kortex_driver/TranslationVector.h" + + +int ToProtoData(kortex_driver::SensorSettings input, Kinova::Api::VisionConfig::SensorSettings *output); +int ToProtoData(kortex_driver::SensorIdentifier input, Kinova::Api::VisionConfig::SensorIdentifier *output); +int ToProtoData(kortex_driver::IntrinsicProfileIdentifier input, Kinova::Api::VisionConfig::IntrinsicProfileIdentifier *output); +int ToProtoData(kortex_driver::OptionIdentifier input, Kinova::Api::VisionConfig::OptionIdentifier *output); +int ToProtoData(kortex_driver::OptionValue input, Kinova::Api::VisionConfig::OptionValue *output); +int ToProtoData(kortex_driver::OptionInformation input, Kinova::Api::VisionConfig::OptionInformation *output); +int ToProtoData(kortex_driver::SensorFocusAction input, Kinova::Api::VisionConfig::SensorFocusAction *output); +int ToProtoData(kortex_driver::FocusPoint input, Kinova::Api::VisionConfig::FocusPoint *output); +int ToProtoData(kortex_driver::ManualFocus input, Kinova::Api::VisionConfig::ManualFocus *output); +int ToProtoData(kortex_driver::VisionNotification input, Kinova::Api::VisionConfig::VisionNotification *output); +int ToProtoData(kortex_driver::IntrinsicParameters input, Kinova::Api::VisionConfig::IntrinsicParameters *output); +int ToProtoData(kortex_driver::DistortionCoefficients input, Kinova::Api::VisionConfig::DistortionCoefficients *output); +int ToProtoData(kortex_driver::ExtrinsicParameters input, Kinova::Api::VisionConfig::ExtrinsicParameters *output); +int ToProtoData(kortex_driver::VisionConfig_RotationMatrix input, Kinova::Api::VisionConfig::RotationMatrix *output); +int ToProtoData(kortex_driver::VisionConfig_RotationMatrixRow input, Kinova::Api::VisionConfig::RotationMatrixRow *output); +int ToProtoData(kortex_driver::TranslationVector input, Kinova::Api::VisionConfig::TranslationVector *output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/visionconfig_ros_converter.h b/kortex_driver/include/kortex_driver/generated/visionconfig_ros_converter.h new file mode 100644 index 00000000..74cca282 --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/visionconfig_ros_converter.h @@ -0,0 +1,79 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_VISIONCONFIG_ROS_CONVERTER_H_ +#define _KORTEX_VISIONCONFIG_ROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include + +#include "kortex_driver/generated/common_ros_converter.h" +#include "kortex_driver/generated/actuatorconfig_ros_converter.h" +#include "kortex_driver/generated/actuatorcyclic_ros_converter.h" +#include "kortex_driver/generated/productconfiguration_ros_converter.h" +#include "kortex_driver/generated/base_ros_converter.h" +#include "kortex_driver/generated/grippercyclic_ros_converter.h" +#include "kortex_driver/generated/interconnectcyclic_ros_converter.h" +#include "kortex_driver/generated/basecyclic_ros_converter.h" +#include "kortex_driver/generated/controlconfig_ros_converter.h" +#include "kortex_driver/generated/deviceconfig_ros_converter.h" +#include "kortex_driver/generated/devicemanager_ros_converter.h" +#include "kortex_driver/generated/interconnectconfig_ros_converter.h" + + +#include "kortex_driver/SensorSettings.h" +#include "kortex_driver/SensorIdentifier.h" +#include "kortex_driver/IntrinsicProfileIdentifier.h" +#include "kortex_driver/OptionIdentifier.h" +#include "kortex_driver/OptionValue.h" +#include "kortex_driver/OptionInformation.h" +#include "kortex_driver/SensorFocusAction.h" +#include "kortex_driver/FocusPoint.h" +#include "kortex_driver/ManualFocus.h" +#include "kortex_driver/VisionNotification.h" +#include "kortex_driver/IntrinsicParameters.h" +#include "kortex_driver/DistortionCoefficients.h" +#include "kortex_driver/ExtrinsicParameters.h" +#include "kortex_driver/VisionConfig_RotationMatrix.h" +#include "kortex_driver/VisionConfig_RotationMatrixRow.h" +#include "kortex_driver/TranslationVector.h" + + +int ToRosData(Kinova::Api::VisionConfig::SensorSettings input, kortex_driver::SensorSettings &output); +int ToRosData(Kinova::Api::VisionConfig::SensorIdentifier input, kortex_driver::SensorIdentifier &output); +int ToRosData(Kinova::Api::VisionConfig::IntrinsicProfileIdentifier input, kortex_driver::IntrinsicProfileIdentifier &output); +int ToRosData(Kinova::Api::VisionConfig::OptionIdentifier input, kortex_driver::OptionIdentifier &output); +int ToRosData(Kinova::Api::VisionConfig::OptionValue input, kortex_driver::OptionValue &output); +int ToRosData(Kinova::Api::VisionConfig::OptionInformation input, kortex_driver::OptionInformation &output); +int ToRosData(Kinova::Api::VisionConfig::SensorFocusAction input, kortex_driver::SensorFocusAction &output); +int ToRosData(Kinova::Api::VisionConfig::FocusPoint input, kortex_driver::FocusPoint &output); +int ToRosData(Kinova::Api::VisionConfig::ManualFocus input, kortex_driver::ManualFocus &output); +int ToRosData(Kinova::Api::VisionConfig::VisionNotification input, kortex_driver::VisionNotification &output); +int ToRosData(Kinova::Api::VisionConfig::IntrinsicParameters input, kortex_driver::IntrinsicParameters &output); +int ToRosData(Kinova::Api::VisionConfig::DistortionCoefficients input, kortex_driver::DistortionCoefficients &output); +int ToRosData(Kinova::Api::VisionConfig::ExtrinsicParameters input, kortex_driver::ExtrinsicParameters &output); +int ToRosData(Kinova::Api::VisionConfig::RotationMatrix input, kortex_driver::VisionConfig_RotationMatrix &output); +int ToRosData(Kinova::Api::VisionConfig::RotationMatrixRow input, kortex_driver::VisionConfig_RotationMatrixRow &output); +int ToRosData(Kinova::Api::VisionConfig::TranslationVector input, kortex_driver::TranslationVector &output); + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/generated/visionconfig_services.h b/kortex_driver/include/kortex_driver/generated/visionconfig_services.h new file mode 100644 index 00000000..abde161a --- /dev/null +++ b/kortex_driver/include/kortex_driver/generated/visionconfig_services.h @@ -0,0 +1,98 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_VISIONCONFIG_SERVICES_H_ +#define _KORTEX_VISIONCONFIG_SERVICES_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include "kortex_driver/SetSensorSettings.h" +#include "kortex_driver/GetSensorSettings.h" +#include "kortex_driver/GetOptionValue.h" +#include "kortex_driver/SetOptionValue.h" +#include "kortex_driver/GetOptionInformation.h" +#include "kortex_driver/OnNotificationVisionTopic.h" +#include "kortex_driver/VisionNotification.h" +#include "kortex_driver/DoSensorFocusAction.h" +#include "kortex_driver/GetIntrinsicParameters.h" +#include "kortex_driver/GetIntrinsicParametersProfile.h" +#include "kortex_driver/SetIntrinsicParameters.h" +#include "kortex_driver/GetExtrinsicParameters.h" +#include "kortex_driver/SetExtrinsicParameters.h" + +#include "kortex_driver/KortexError.h" +#include "kortex_driver/SetDeviceID.h" +#include "kortex_driver/SetApiOptions.h" +#include "kortex_driver/ApiOptions.h" + +using namespace std; + +class VisionConfigServices +{ + public: + VisionConfigServices(ros::NodeHandle& n, Kinova::Api::VisionConfig::VisionConfigClient* visionconfig, uint32_t device_id, uint32_t timeout_ms); + + bool SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res); + bool SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res); + bool SetSensorSettings(kortex_driver::SetSensorSettings::Request &req, kortex_driver::SetSensorSettings::Response &res); + bool GetSensorSettings(kortex_driver::GetSensorSettings::Request &req, kortex_driver::GetSensorSettings::Response &res); + bool GetOptionValue(kortex_driver::GetOptionValue::Request &req, kortex_driver::GetOptionValue::Response &res); + bool SetOptionValue(kortex_driver::SetOptionValue::Request &req, kortex_driver::SetOptionValue::Response &res); + bool GetOptionInformation(kortex_driver::GetOptionInformation::Request &req, kortex_driver::GetOptionInformation::Response &res); + bool OnNotificationVisionTopic(kortex_driver::OnNotificationVisionTopic::Request &req, kortex_driver::OnNotificationVisionTopic::Response &res); + void cb_VisionTopic(Kinova::Api::VisionConfig::VisionNotification notif); + bool DoSensorFocusAction(kortex_driver::DoSensorFocusAction::Request &req, kortex_driver::DoSensorFocusAction::Response &res); + bool GetIntrinsicParameters(kortex_driver::GetIntrinsicParameters::Request &req, kortex_driver::GetIntrinsicParameters::Response &res); + bool GetIntrinsicParametersProfile(kortex_driver::GetIntrinsicParametersProfile::Request &req, kortex_driver::GetIntrinsicParametersProfile::Response &res); + bool SetIntrinsicParameters(kortex_driver::SetIntrinsicParameters::Request &req, kortex_driver::SetIntrinsicParameters::Response &res); + bool GetExtrinsicParameters(kortex_driver::GetExtrinsicParameters::Request &req, kortex_driver::GetExtrinsicParameters::Response &res); + bool SetExtrinsicParameters(kortex_driver::SetExtrinsicParameters::Request &req, kortex_driver::SetExtrinsicParameters::Response &res); + +private: + uint32_t m_current_device_id; + Kinova::Api::RouterClientSendOptions m_api_options; + + Kinova::Api::VisionConfig::VisionConfigClient* m_visionconfig; + + ros::NodeHandle m_n; + ros::Publisher m_pub_Error; + ros::Publisher m_pub_VisionTopic; + + ros::ServiceServer m_serviceSetDeviceID; + ros::ServiceServer m_serviceSetApiOptions; + + ros::ServiceServer m_serviceSetSensorSettings; + ros::ServiceServer m_serviceGetSensorSettings; + ros::ServiceServer m_serviceGetOptionValue; + ros::ServiceServer m_serviceSetOptionValue; + ros::ServiceServer m_serviceGetOptionInformation; + ros::ServiceServer m_serviceOnNotificationVisionTopic; + ros::ServiceServer m_serviceDoSensorFocusAction; + ros::ServiceServer m_serviceGetIntrinsicParameters; + ros::ServiceServer m_serviceGetIntrinsicParametersProfile; + ros::ServiceServer m_serviceSetIntrinsicParameters; + ros::ServiceServer m_serviceGetExtrinsicParameters; + ros::ServiceServer m_serviceSetExtrinsicParameters; +}; +#endif diff --git a/kortex_driver/include/kortex_driver/non-generated/kortex_arm_driver.h b/kortex_driver/include/kortex_driver/non-generated/kortex_arm_driver.h new file mode 100644 index 00000000..6b402736 --- /dev/null +++ b/kortex_driver/include/kortex_driver/non-generated/kortex_arm_driver.h @@ -0,0 +1,139 @@ +#ifndef _KORTEX_ARM_DRIVER_H_ +#define _KORTEX_ARM_DRIVER_H_ + +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +#include +#include + +#include + +#include "SessionManager.h" +#include "TransportClientTcp.h" +#include "TransportClientUdp.h" +#include "RouterClient.h" + +#include "ActuatorConfigClientRpc.h" +#include "BaseClientRpc.h" +#include "DeviceConfigClientRpc.h" +#include "DeviceManagerClientRpc.h" +#include "InterconnectConfigClientRpc.h" +#include "VisionConfigClientRpc.h" +#include "BaseCyclicClientRpc.h" +#include "SessionManager.h" + +#include "kortex_driver/non-generated/kortex_math_util.h" + +#include "kortex_driver/BaseCyclic_Feedback.h" +#include "kortex_driver/generated/basecyclic_ros_converter.h" + +#include "kortex_driver/generated/actuatorconfig_services.h" +#include "kortex_driver/generated/base_services.h" +#include "kortex_driver/generated/deviceconfig_services.h" +#include "kortex_driver/generated/devicemanager_services.h" +#include "kortex_driver/generated/interconnectconfig_services.h" +#include "kortex_driver/generated/visionconfig_services.h" +#include "kortex_driver/generated/controlconfig_services.h" + +#include "kortex_driver/non-generated/pre_computed_joint_trajectory_action_server.h" +#include "kortex_driver/non-generated/robotiq_gripper_command_action_server.h" + +#define TCP_PORT 10000 +#define UDP_PORT 10001 + +#define MAX_CONSECUTIVE_TIMEOUTS_BEFORE_SHUTDOWN 3 + +#define GREEN_COLOR_CONSOLE "\033[92m" +#define RESET_COLOR_CONSOLE "\033[0m" + +class KortexArmDriver +{ + public: + KortexArmDriver() = delete; + KortexArmDriver(ros::NodeHandle nh); + ~KortexArmDriver(); + + void parseRosArguments(); + void initApi(); + void verifyProductConfiguration(); + void initRosServices(); + void startActionServers(); + + private: + + ros::NodeHandle m_node_handle; + + // Api options + std::string m_ip_address; + int m_cyclic_data_publish_rate; + int m_api_rpc_timeout_ms; + int m_api_session_inactivity_timeout_ms; + int m_api_connection_inactivity_timeout_ms; + + // Product configuration and ROS params related to the hardware + std::string m_arm_name; + std::vector m_arm_joint_names; + + std::string m_gripper_name; + std::vector m_gripper_joint_names; + std::vector m_gripper_joint_limits; + + int m_interconnect_device_id; + int m_vision_device_id; + + // Kortex Api objects + Kinova::Api::TransportClientTcp* m_tcp_transport; + Kinova::Api::TransportClientUdp* m_udp_transport; + + Kinova::Api::RouterClient* m_tcp_router; + Kinova::Api::RouterClient* m_udp_router; + + Kinova::Api::ActuatorConfig::ActuatorConfigClient* m_actuator_config; + Kinova::Api::Base::BaseClient* m_base; + Kinova::Api::ControlConfig::ControlConfigClient* m_control_config; + Kinova::Api::DeviceConfig::DeviceConfigClient* m_device_config; + Kinova::Api::DeviceManager::DeviceManagerClient* m_device_manager; + Kinova::Api::InterconnectConfig::InterconnectConfigClient* m_interconnect_config; + Kinova::Api::VisionConfig::VisionConfigClient* m_vision_config; + Kinova::Api::BaseCyclic::BaseCyclicClient* m_base_cyclic; + Kinova::Api::SessionManager* m_tcp_session_manager; + Kinova::Api::SessionManager* m_udp_session_manager; + + // ROS ServiceProxy's + ActuatorConfigServices* m_actuator_config_ros_services; + BaseServices* m_base_ros_services; + ControlConfigServices* m_control_config_ros_services; + DeviceConfigServices* m_device_config_ros_services; + DeviceManagerServices* m_device_manager_ros_services; + InterconnectConfigServices* m_interconnect_config_ros_services; + VisionConfigServices* m_vision_config_ros_services; + + // Action servers + PreComputedJointTrajectoryActionServer* m_action_server_follow_joint_trajectory; + RobotiqGripperCommandActionServer* m_action_server_gripper_command; + + // ROS and thread objects to publish the feedback from the robot + bool m_node_is_running; + int m_consecutive_base_cyclic_timeouts; + std::mutex m_is_trajectory_running_lock; + std::thread m_publish_feedback_thread; + ros::Publisher m_pub_base_feedback; + ros::Publisher m_pub_joint_state; + KortexMathUtil m_math_util; + + // Private methods + bool isGripperPresent(); + void publishFeedback(); +}; + +#endif diff --git a/kortex_driver/include/kortex_driver/non-generated/kortex_math_util.h b/kortex_driver/include/kortex_driver/non-generated/kortex_math_util.h new file mode 100644 index 00000000..3bc6e7ca --- /dev/null +++ b/kortex_driver/include/kortex_driver/non-generated/kortex_math_util.h @@ -0,0 +1,28 @@ +#ifndef _KORTEX_MATH_UTIL_H_ +#define _KORTEX_MATH_UTIL_H_ + +/* + * Copyright (c) 2019 Kinova inc. All rights reserved. + * + * This software may be modified and distributed under the + * terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ + +#include + +class KortexMathUtil +{ +public: + KortexMathUtil() {} + ~KortexMathUtil() {} + + static double toRad(double degree); + static double toDeg(double rad); + static double wrapRadiansFromMinusPiToPi(double rad_not_wrapped); + static double wrapDegreesFromZeroTo360(double deg_not_wrapped); +}; + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/non-generated/pre_computed_joint_trajectory_action_server.h b/kortex_driver/include/kortex_driver/non-generated/pre_computed_joint_trajectory_action_server.h new file mode 100644 index 00000000..577b023c --- /dev/null +++ b/kortex_driver/include/kortex_driver/non-generated/pre_computed_joint_trajectory_action_server.h @@ -0,0 +1,100 @@ +#ifndef _KORTEX_PRE_COMPUTED_JOINT_TRAJECTORY_ACTION_SERVER_H_ +#define _KORTEX_PRE_COMPUTED_JOINT_TRAJECTORY_ACTION_SERVER_H_ + +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +#include +#include +#include +#include +#include + +#include "BaseClientRpc.h" +#include "BaseCyclicClientRpc.h" +#include "Errors.pb.h" +#include "kortex_driver/non-generated/kortex_math_util.h" + +class PreComputedJointTrajectoryActionServer +{ + public: + + enum ActionServerState + { + INITIALIZING = 0, + IDLE, + PRE_PROCESSING_PENDING, + PRE_PROCESSING_IN_PROGRESS, + TRAJECTORY_EXECUTION_PENDING, + TRAJECTORY_EXECUTION_IN_PROGRESS, + }; + + PreComputedJointTrajectoryActionServer() = delete; + PreComputedJointTrajectoryActionServer(const std::string& server_name, ros::NodeHandle& nh, Kinova::Api::Base::BaseClient* base, Kinova::Api::BaseCyclic::BaseCyclicClient* base_cyclic); + ~PreComputedJointTrajectoryActionServer(); + + ActionServerState getState() {return m_server_state;}; + + const char* actionServerStateNames[int(ActionServerState::TRAJECTORY_EXECUTION_IN_PROGRESS) + 1] = + { + "INITIALIZING", + "IDLE", + "PRE_PROCESSING_PENDING", + "PRE_PROCESSING_IN_PROGRESS", + "TRAJECTORY_EXECUTION_PENDING", + "TRAJECTORY_EXECUTION_IN_PROGRESS" + }; + + private: + // Members + ros::NodeHandle m_node_handle; + actionlib::ActionServer m_server; + + Kinova::Api::Common::NotificationHandle m_sub_action_notif_handle; + + Kinova::Api::Base::BaseClient* m_base; + Kinova::Api::BaseCyclic::BaseCyclicClient* m_base_cyclic; + + std::string m_server_name; + + control_msgs::FollowJointTrajectoryFeedback m_feedback; + actionlib::ActionServer::GoalHandle m_goal; + std::chrono::system_clock::time_point m_trajectory_start_time; + std::chrono::system_clock::time_point m_trajectory_end_time; + + std::mutex m_server_state_lock; + ActionServerState m_server_state; + + KortexMathUtil m_math_util; + + // ROS Params + double m_default_goal_time_tolerance; + double m_default_goal_tolerance; + std::vector m_joint_names; + + // Action Server Callbacks + void goal_received_callback(actionlib::ActionServer::GoalHandle new_goal_handle); + void preempt_received_callback(actionlib::ActionServer::GoalHandle goal_handle); + + // Kortex Notifications Callbacks + void action_notif_callback(Kinova::Api::Base::ActionNotification notif); + + // Private methods + bool is_goal_acceptable(actionlib::ActionServer::GoalHandle goal_handle); + bool is_goal_tolerance_respected(bool enable_prints, bool check_time_tolerance); + void stop_all_movement(); + + void set_server_state(ActionServerState s); + +}; + +#endif \ No newline at end of file diff --git a/kortex_driver/include/kortex_driver/non-generated/robotiq_gripper_command_action_server.h b/kortex_driver/include/kortex_driver/non-generated/robotiq_gripper_command_action_server.h new file mode 100644 index 00000000..494b74ff --- /dev/null +++ b/kortex_driver/include/kortex_driver/non-generated/robotiq_gripper_command_action_server.h @@ -0,0 +1,83 @@ +#ifndef _KORTEX_ROBOTIQ_GRIPPER_COMMAND_ACTION_SERVER_H_ +#define _KORTEX_ROBOTIQ_GRIPPER_COMMAND_ACTION_SERVER_H_ + +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +#include +#include +#include +#include +#include +#include + +#include "BaseClientRpc.h" +#include "BaseCyclicClientRpc.h" +#include "Errors.pb.h" + +// Duration timeout for a gripper trajectory (in seconds) +#define GRIPPER_TRAJECTORY_TIME_LIMIT 2.0 + +// Robotiq Gripper relative position precision +// Augmented to 2/255 instead of 1/255 because sometimes there are false negatives with 1/255 +#define ROBOTIQ_GRIPPER_RELATIVE_ERROR 2.0/255.0 + +class RobotiqGripperCommandActionServer +{ + public: + RobotiqGripperCommandActionServer() = delete; + RobotiqGripperCommandActionServer(const std::string& server_name, const std::string& gripper_joint_name, double gripper_joint_limit, ros::NodeHandle& nh, Kinova::Api::Base::BaseClient* base, Kinova::Api::BaseCyclic::BaseCyclicClient* base_cyclic); + ~RobotiqGripperCommandActionServer(); + + private: + // Members + ros::NodeHandle m_node_handle; + actionlib::ActionServer m_server; + + Kinova::Api::Common::NotificationHandle m_sub_action_notif_handle; + + Kinova::Api::Base::GripperCommand m_cancel_gripper_command; + + Kinova::Api::Base::BaseClient* m_base; + Kinova::Api::BaseCyclic::BaseCyclicClient* m_base_cyclic; + + std::string m_server_name; + + control_msgs::GripperCommandFeedback m_feedback; + actionlib::ActionServer::GoalHandle m_goal; + std::chrono::system_clock::time_point m_trajectory_start_time; + + bool m_is_trajectory_running; + std::mutex m_is_trajectory_running_lock; + std::thread m_gripper_position_polling_thread; + + // ROS Params + std::string m_gripper_joint_name; + double m_gripper_joint_limit; + + // Action Server Callbacks + void goal_received_callback(actionlib::ActionServer::GoalHandle new_goal_handle); + void preempt_received_callback(actionlib::ActionServer::GoalHandle goal_handle); + + // Polling thread function + void gripper_position_polling_thread(); + + // Private methods + bool is_goal_acceptable(actionlib::ActionServer::GoalHandle goal_handle); + bool is_goal_tolerance_respected(); + void stop_all_movement(); + void join_polling_thread(); + double relative_position_from_absolute(double absolute_position); + double absolute_position_from_relative(double relative_position); +}; + +#endif \ No newline at end of file diff --git a/kortex_driver/kortex_driver.sh b/kortex_driver/kortex_driver.sh deleted file mode 100755 index 011eee96..00000000 --- a/kortex_driver/kortex_driver.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -python3 -u RosGeneration.py - diff --git a/kortex_driver/launch/kortex_driver.launch b/kortex_driver/launch/kortex_driver.launch new file mode 100644 index 00000000..86236fb4 --- /dev/null +++ b/kortex_driver/launch/kortex_driver.launch @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [base_feedback/joint_state] + + + + + + + + diff --git a/kortex_driver/msg/Action.msg b/kortex_driver/msg/Action.msg deleted file mode 100644 index 3ef9cdef..00000000 --- a/kortex_driver/msg/Action.msg +++ /dev/null @@ -1,6 +0,0 @@ - - -ActionHandle handle -string name -string application_data -Action_action_parameters oneof_action_parameters \ No newline at end of file diff --git a/kortex_driver/msg/ActionEvent.msg b/kortex_driver/msg/ActionEvent.msg deleted file mode 100644 index b06938f2..00000000 --- a/kortex_driver/msg/ActionEvent.msg +++ /dev/null @@ -1,10 +0,0 @@ - -uint32 UNSPECIFIED_ACTION_EVENT = 0 - -uint32 ACTION_END = 1 - -uint32 ACTION_ABORT = 2 - -uint32 ACTION_PAUSE = 3 - -uint32 ACTION_START = 4 diff --git a/kortex_driver/msg/ActionHandle.msg b/kortex_driver/msg/ActionHandle.msg deleted file mode 100644 index 8cf5911e..00000000 --- a/kortex_driver/msg/ActionHandle.msg +++ /dev/null @@ -1,5 +0,0 @@ - -uint32 identifier - -uint32 action_type -uint32 permission \ No newline at end of file diff --git a/kortex_driver/msg/ActuatorCommand.msg b/kortex_driver/msg/ActuatorCommand.msg deleted file mode 100644 index a3d39bb4..00000000 --- a/kortex_driver/msg/ActuatorCommand.msg +++ /dev/null @@ -1,7 +0,0 @@ - -uint32 command_id -uint32 flags -float32 position -float32 velocity -float32 torque_joint -float32 current_motor \ No newline at end of file diff --git a/kortex_driver/msg/ActuatorCustomData.msg b/kortex_driver/msg/ActuatorCustomData.msg deleted file mode 100644 index 1262a849..00000000 --- a/kortex_driver/msg/ActuatorCustomData.msg +++ /dev/null @@ -1,18 +0,0 @@ - -uint32 command_id -uint32 custom_data_0 -uint32 custom_data_1 -uint32 custom_data_2 -uint32 custom_data_3 -uint32 custom_data_4 -uint32 custom_data_5 -uint32 custom_data_6 -uint32 custom_data_7 -uint32 custom_data_8 -uint32 custom_data_9 -uint32 custom_data_10 -uint32 custom_data_11 -uint32 custom_data_12 -uint32 custom_data_13 -uint32 custom_data_14 -uint32 custom_data_15 \ No newline at end of file diff --git a/kortex_driver/msg/ActuatorFeedback.msg b/kortex_driver/msg/ActuatorFeedback.msg deleted file mode 100644 index 0ce2e22c..00000000 --- a/kortex_driver/msg/ActuatorFeedback.msg +++ /dev/null @@ -1,15 +0,0 @@ - -uint32 command_id -uint32 status_flags -uint32 jitter_comm -float32 position -float32 velocity -float32 torque -float32 current_motor -float32 voltage -float32 temperature_motor -float32 temperature_core -uint32 fault_bank_a -uint32 fault_bank_b -uint32 warning_bank_a -uint32 warning_bank_b \ No newline at end of file diff --git a/kortex_driver/msg/AdvancedSequenceHandle.msg b/kortex_driver/msg/AdvancedSequenceHandle.msg deleted file mode 100644 index 0a2bed61..00000000 --- a/kortex_driver/msg/AdvancedSequenceHandle.msg +++ /dev/null @@ -1,4 +0,0 @@ - - -SequenceHandle handle -bool in_loop \ No newline at end of file diff --git a/kortex_driver/msg/ArmState.msg b/kortex_driver/msg/ArmState.msg deleted file mode 100644 index 9d9db128..00000000 --- a/kortex_driver/msg/ArmState.msg +++ /dev/null @@ -1,22 +0,0 @@ - -uint32 ARMSTATE_UNSPECIFIED = 0 - -uint32 ARMSTATE_BASE_INITIALIZATION = 1 - -uint32 ARMSTATE_IDLE = 2 - -uint32 ARMSTATE_INITIALIZATION = 3 - -uint32 ARMSTATE_IN_FAULT = 4 - -uint32 ARMSTATE_MAINTENANCE = 5 - -uint32 ARMSTATE_SERVOING_LOW_LEVEL = 6 - -uint32 ARMSTATE_SERVOING_READY = 7 - -uint32 ARMSTATE_SERVOING_PLAYING_SEQUENCE = 8 - -uint32 ARMSTATE_SERVOING_MANUALLY_CONTROLLED = 9 - -uint32 ARMSTATE_RESERVED = 255 diff --git a/kortex_driver/msg/BaseFeedback.msg b/kortex_driver/msg/BaseFeedback.msg deleted file mode 100644 index 10c3b325..00000000 --- a/kortex_driver/msg/BaseFeedback.msg +++ /dev/null @@ -1,36 +0,0 @@ - -uint32 active_state_connection_identifier - -uint32 active_state -float32 arm_voltage -float32 arm_current -float32 temperature_cpu -float32 temperature_ambient -float32 imu_acceleration_x -float32 imu_acceleration_y -float32 imu_acceleration_z -float32 imu_angular_velocity_x -float32 imu_angular_velocity_y -float32 imu_angular_velocity_z -float32 tool_pose_x -float32 tool_pose_y -float32 tool_pose_z -float32 tool_pose_theta_x -float32 tool_pose_theta_y -float32 tool_pose_theta_z -float32 tool_twist_linear_x -float32 tool_twist_linear_y -float32 tool_twist_linear_z -float32 tool_twist_angular_x -float32 tool_twist_angular_y -float32 tool_twist_angular_z -float32 tool_external_wrench_force_x -float32 tool_external_wrench_force_y -float32 tool_external_wrench_force_z -float32 tool_external_wrench_torque_x -float32 tool_external_wrench_torque_y -float32 tool_external_wrench_torque_z -uint32 fault_bank_a -uint32 fault_bank_b -uint32 warning_bank_a -uint32 warning_bank_b \ No newline at end of file diff --git a/kortex_driver/msg/CartesianLimitation.msg b/kortex_driver/msg/CartesianLimitation.msg deleted file mode 100644 index d47b4fd5..00000000 --- a/kortex_driver/msg/CartesianLimitation.msg +++ /dev/null @@ -1,5 +0,0 @@ - - -uint32 type -float32 translation -float32 orientation \ No newline at end of file diff --git a/kortex_driver/msg/CartesianReferenceFrame.msg b/kortex_driver/msg/CartesianReferenceFrame.msg deleted file mode 100644 index b25dfb05..00000000 --- a/kortex_driver/msg/CartesianReferenceFrame.msg +++ /dev/null @@ -1,6 +0,0 @@ - -uint32 UNSPECIFIED_CARTESIAN_REFERENCE_FRAME = 0 - -uint32 MIXED = 1 - -uint32 TOOL = 2 diff --git a/kortex_driver/msg/CartesianReferenceFrameRequest.msg b/kortex_driver/msg/CartesianReferenceFrameRequest.msg deleted file mode 100644 index 9b0d748b..00000000 --- a/kortex_driver/msg/CartesianReferenceFrameRequest.msg +++ /dev/null @@ -1,3 +0,0 @@ - - -uint32 reference_frame \ No newline at end of file diff --git a/kortex_driver/msg/CartesianSpeed.msg b/kortex_driver/msg/CartesianSpeed.msg deleted file mode 100644 index 7f4d31ee..00000000 --- a/kortex_driver/msg/CartesianSpeed.msg +++ /dev/null @@ -1,3 +0,0 @@ - -float32 translation -float32 orientation \ No newline at end of file diff --git a/kortex_driver/msg/ChangeTwist.msg b/kortex_driver/msg/ChangeTwist.msg deleted file mode 100644 index 0c8b6d2d..00000000 --- a/kortex_driver/msg/ChangeTwist.msg +++ /dev/null @@ -1,3 +0,0 @@ - -float32 linear -float32 angular \ No newline at end of file diff --git a/kortex_driver/msg/Command.msg b/kortex_driver/msg/Command.msg deleted file mode 100644 index 0e61a1d5..00000000 --- a/kortex_driver/msg/Command.msg +++ /dev/null @@ -1,6 +0,0 @@ - -uint32 frame_id - -ActuatorCommand[] actuators - -InterconnectCommand interconnect \ No newline at end of file diff --git a/kortex_driver/msg/CommunicationInterfaceConfiguration.msg b/kortex_driver/msg/CommunicationInterfaceConfiguration.msg deleted file mode 100644 index 9ff04314..00000000 --- a/kortex_driver/msg/CommunicationInterfaceConfiguration.msg +++ /dev/null @@ -1,4 +0,0 @@ - - -uint32 type -bool enable \ No newline at end of file diff --git a/kortex_driver/msg/ConfigurationChangeNotification.msg b/kortex_driver/msg/ConfigurationChangeNotification.msg deleted file mode 100644 index 40a0c973..00000000 --- a/kortex_driver/msg/ConfigurationChangeNotification.msg +++ /dev/null @@ -1,9 +0,0 @@ - - -uint32 event - -Timestamp timestamp - -UserProfileHandle user_handle - -Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/Connection.msg b/kortex_driver/msg/Connection.msg deleted file mode 100644 index ca08b6c8..00000000 --- a/kortex_driver/msg/Connection.msg +++ /dev/null @@ -1,5 +0,0 @@ - - -UserProfileHandle user_handle -string connection_information -uint32 connection_identifier \ No newline at end of file diff --git a/kortex_driver/msg/ConstrainedJointAngle.msg b/kortex_driver/msg/ConstrainedJointAngle.msg deleted file mode 100644 index 25394c23..00000000 --- a/kortex_driver/msg/ConstrainedJointAngle.msg +++ /dev/null @@ -1,5 +0,0 @@ - -uint32 joint_identifier -float32 value - -JointTrajectoryConstraint constraint \ No newline at end of file diff --git a/kortex_driver/msg/ConstrainedPosition.msg b/kortex_driver/msg/ConstrainedPosition.msg deleted file mode 100644 index 64dec6fe..00000000 --- a/kortex_driver/msg/ConstrainedPosition.msg +++ /dev/null @@ -1,5 +0,0 @@ - - -Position target_position - -CartesianTrajectoryConstraint constraint \ No newline at end of file diff --git a/kortex_driver/msg/ControlMode.msg b/kortex_driver/msg/ControlMode.msg deleted file mode 100644 index 7e5d154c..00000000 --- a/kortex_driver/msg/ControlMode.msg +++ /dev/null @@ -1,20 +0,0 @@ - -uint32 UNSPECIFIED_CONTROL_MODE = 0 - -uint32 ANGULAR_JOYSTICK = 1 - -uint32 CARTESIAN_JOYSTICK = 2 - -uint32 VISION_JOYSTICK = 3 - -uint32 ANGULAR_TRAJECTORY = 4 - -uint32 CARTESIAN_TRAJECTORY = 5 - -uint32 CARTESIAN_ADMITTANCE = 6 - -uint32 JOINT_ADMITTANCE = 7 - -uint32 NULL_SPACE_ADMITTANCE = 8 - -uint32 IDLE = 13 diff --git a/kortex_driver/msg/ControlModeInformation.msg b/kortex_driver/msg/ControlModeInformation.msg deleted file mode 100644 index bdde570c..00000000 --- a/kortex_driver/msg/ControlModeInformation.msg +++ /dev/null @@ -1,3 +0,0 @@ - - -uint32 mode \ No newline at end of file diff --git a/kortex_driver/msg/ControllerElementState.msg b/kortex_driver/msg/ControllerElementState.msg deleted file mode 100644 index 23fe0842..00000000 --- a/kortex_driver/msg/ControllerElementState.msg +++ /dev/null @@ -1,6 +0,0 @@ - - -ControllerElementHandle handle - -uint32 event_type -float32 axis_value \ No newline at end of file diff --git a/kortex_driver/msg/ControllerEvent.msg b/kortex_driver/msg/ControllerEvent.msg deleted file mode 100644 index 3921fb1c..00000000 --- a/kortex_driver/msg/ControllerEvent.msg +++ /dev/null @@ -1,6 +0,0 @@ - - -uint32 input_type - -uint32 behavior -uint32 input_identifier \ No newline at end of file diff --git a/kortex_driver/msg/ControllerHandle.msg b/kortex_driver/msg/ControllerHandle.msg deleted file mode 100644 index 96f814df..00000000 --- a/kortex_driver/msg/ControllerHandle.msg +++ /dev/null @@ -1,4 +0,0 @@ - - -uint32 type -uint32 controller_identifier \ No newline at end of file diff --git a/kortex_driver/msg/ControllerNotification.msg b/kortex_driver/msg/ControllerNotification.msg deleted file mode 100644 index 771dca52..00000000 --- a/kortex_driver/msg/ControllerNotification.msg +++ /dev/null @@ -1,7 +0,0 @@ - - -Timestamp timestamp - -UserProfileHandle user_handle - -Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/CustomData.msg b/kortex_driver/msg/CustomData.msg deleted file mode 100644 index 6714137a..00000000 --- a/kortex_driver/msg/CustomData.msg +++ /dev/null @@ -1,14 +0,0 @@ - -uint32 frame_id -uint32 custom_data_0 -uint32 custom_data_1 -uint32 custom_data_2 -uint32 custom_data_3 -uint32 custom_data_4 -uint32 custom_data_5 -uint32 custom_data_6 -uint32 custom_data_7 - -ActuatorCustomData[] actuators_custom_data - -InterconnectCustomData interconnect_custom_data \ No newline at end of file diff --git a/kortex_driver/msg/DeviceHandle.msg b/kortex_driver/msg/DeviceHandle.msg deleted file mode 100644 index 49f84366..00000000 --- a/kortex_driver/msg/DeviceHandle.msg +++ /dev/null @@ -1,5 +0,0 @@ - - -uint32 device_type -uint32 device_identifier -uint32 order \ No newline at end of file diff --git a/kortex_driver/msg/DeviceTypes.msg b/kortex_driver/msg/DeviceTypes.msg deleted file mode 100644 index 5a55df07..00000000 --- a/kortex_driver/msg/DeviceTypes.msg +++ /dev/null @@ -1,14 +0,0 @@ - -uint32 UNSPECIFIED_DEVICE_TYPE = 0 - -uint32 BASE = 1 - -uint32 VISION = 2 - -uint32 BIG_ACTUATOR = 3 - -uint32 SMALL_ACTUATOR = 4 - -uint32 INTERCONNECT = 5 - -uint32 GRIPPER = 6 diff --git a/kortex_driver/msg/Empty.msg b/kortex_driver/msg/Empty.msg deleted file mode 100644 index e69de29b..00000000 diff --git a/kortex_driver/msg/Feedback.msg b/kortex_driver/msg/Feedback.msg deleted file mode 100644 index be1a6c3f..00000000 --- a/kortex_driver/msg/Feedback.msg +++ /dev/null @@ -1,8 +0,0 @@ - -uint32 frame_id - -BaseFeedback base - -ActuatorFeedback[] actuators - -InterconnectFeedback interconnect \ No newline at end of file diff --git a/kortex_driver/msg/Finger.msg b/kortex_driver/msg/Finger.msg deleted file mode 100644 index 909fac72..00000000 --- a/kortex_driver/msg/Finger.msg +++ /dev/null @@ -1,3 +0,0 @@ - -uint32 finger_identifier -float32 value \ No newline at end of file diff --git a/kortex_driver/msg/FullUserProfile.msg b/kortex_driver/msg/FullUserProfile.msg deleted file mode 100644 index 22e198c2..00000000 --- a/kortex_driver/msg/FullUserProfile.msg +++ /dev/null @@ -1,4 +0,0 @@ - - -UserProfile user_profile -string password \ No newline at end of file diff --git a/kortex_driver/msg/GpioEvent.msg b/kortex_driver/msg/GpioEvent.msg deleted file mode 100644 index 4ac2edaf..00000000 --- a/kortex_driver/msg/GpioEvent.msg +++ /dev/null @@ -1,4 +0,0 @@ - - -uint32 gpio_state -uint32 device_identifier \ No newline at end of file diff --git a/kortex_driver/msg/GripperCommand.msg b/kortex_driver/msg/GripperCommand.msg deleted file mode 100644 index d1d91df0..00000000 --- a/kortex_driver/msg/GripperCommand.msg +++ /dev/null @@ -1,6 +0,0 @@ - - -uint32 mode - -Gripper gripper -uint32 duration \ No newline at end of file diff --git a/kortex_driver/msg/IPv4Configuration.msg b/kortex_driver/msg/IPv4Configuration.msg deleted file mode 100644 index dc0cd6a9..00000000 --- a/kortex_driver/msg/IPv4Configuration.msg +++ /dev/null @@ -1,5 +0,0 @@ - -uint32 ip_address -uint32 subnet_mask -uint32 default_gateway -bool dhcp_enabled \ No newline at end of file diff --git a/kortex_driver/msg/IPv4Information.msg b/kortex_driver/msg/IPv4Information.msg deleted file mode 100644 index 4e95c58c..00000000 --- a/kortex_driver/msg/IPv4Information.msg +++ /dev/null @@ -1,4 +0,0 @@ - -uint32 ip_address -uint32 subnet_mask -uint32 default_gateway \ No newline at end of file diff --git a/kortex_driver/msg/InterconnectCommand.msg b/kortex_driver/msg/InterconnectCommand.msg deleted file mode 100644 index 1b29bef5..00000000 --- a/kortex_driver/msg/InterconnectCommand.msg +++ /dev/null @@ -1,6 +0,0 @@ - -uint32 command_id -uint32 flags -float32 position -float32 velocity -float32 force \ No newline at end of file diff --git a/kortex_driver/msg/InterconnectCustomData.msg b/kortex_driver/msg/InterconnectCustomData.msg deleted file mode 100644 index 1262a849..00000000 --- a/kortex_driver/msg/InterconnectCustomData.msg +++ /dev/null @@ -1,18 +0,0 @@ - -uint32 command_id -uint32 custom_data_0 -uint32 custom_data_1 -uint32 custom_data_2 -uint32 custom_data_3 -uint32 custom_data_4 -uint32 custom_data_5 -uint32 custom_data_6 -uint32 custom_data_7 -uint32 custom_data_8 -uint32 custom_data_9 -uint32 custom_data_10 -uint32 custom_data_11 -uint32 custom_data_12 -uint32 custom_data_13 -uint32 custom_data_14 -uint32 custom_data_15 \ No newline at end of file diff --git a/kortex_driver/msg/InterconnectFeedback.msg b/kortex_driver/msg/InterconnectFeedback.msg deleted file mode 100644 index 389a5921..00000000 --- a/kortex_driver/msg/InterconnectFeedback.msg +++ /dev/null @@ -1,19 +0,0 @@ - -uint32 command_id -uint32 status_flags -uint32 jitter_comm -float32 position -float32 velocity -float32 force -float32 imu_acceleration_x -float32 imu_acceleration_y -float32 imu_acceleration_z -float32 imu_angular_velocity_x -float32 imu_angular_velocity_y -float32 imu_angular_velocity_z -float32 voltage -float32 temperature_core -uint32 fault_bank_a -uint32 fault_bank_b -uint32 warning_bank_a -uint32 warning_bank_b \ No newline at end of file diff --git a/kortex_driver/msg/JointAngle.msg b/kortex_driver/msg/JointAngle.msg deleted file mode 100644 index 1b2a9d13..00000000 --- a/kortex_driver/msg/JointAngle.msg +++ /dev/null @@ -1,3 +0,0 @@ - -uint32 joint_identifier -float32 value \ No newline at end of file diff --git a/kortex_driver/msg/JointLimitation.msg b/kortex_driver/msg/JointLimitation.msg deleted file mode 100644 index b9636ff6..00000000 --- a/kortex_driver/msg/JointLimitation.msg +++ /dev/null @@ -1,4 +0,0 @@ - -uint32 device_identifier - -JointLimitationValue limitation_value \ No newline at end of file diff --git a/kortex_driver/msg/JointLimitationTypeIdentifier.msg b/kortex_driver/msg/JointLimitationTypeIdentifier.msg deleted file mode 100644 index 64be2d43..00000000 --- a/kortex_driver/msg/JointLimitationTypeIdentifier.msg +++ /dev/null @@ -1,4 +0,0 @@ - -uint32 device_identifier - -uint32 type \ No newline at end of file diff --git a/kortex_driver/msg/JointLimitationValue.msg b/kortex_driver/msg/JointLimitationValue.msg deleted file mode 100644 index b096b246..00000000 --- a/kortex_driver/msg/JointLimitationValue.msg +++ /dev/null @@ -1,4 +0,0 @@ - - -uint32 type -float32 value \ No newline at end of file diff --git a/kortex_driver/msg/JointLimitationValueList.msg b/kortex_driver/msg/JointLimitationValueList.msg deleted file mode 100644 index a26fc963..00000000 --- a/kortex_driver/msg/JointLimitationValueList.msg +++ /dev/null @@ -1,3 +0,0 @@ - - -JointLimitationValue[] joint_limitation_values \ No newline at end of file diff --git a/kortex_driver/msg/JointSpeed.msg b/kortex_driver/msg/JointSpeed.msg deleted file mode 100644 index bcf5540b..00000000 --- a/kortex_driver/msg/JointSpeed.msg +++ /dev/null @@ -1,4 +0,0 @@ - -uint32 joint_identifier -float32 value -uint32 duration \ No newline at end of file diff --git a/kortex_driver/msg/JointSpeeds.msg b/kortex_driver/msg/JointSpeeds.msg deleted file mode 100644 index f5f77f4f..00000000 --- a/kortex_driver/msg/JointSpeeds.msg +++ /dev/null @@ -1,4 +0,0 @@ - - -JointSpeed[] joint_speeds -uint32 duration \ No newline at end of file diff --git a/kortex_driver/msg/JointTrajectoryConstraint.msg b/kortex_driver/msg/JointTrajectoryConstraint.msg deleted file mode 100644 index b096b246..00000000 --- a/kortex_driver/msg/JointTrajectoryConstraint.msg +++ /dev/null @@ -1,4 +0,0 @@ - - -uint32 type -float32 value \ No newline at end of file diff --git a/kortex_driver/msg/LimitationTypeIdentifier.msg b/kortex_driver/msg/LimitationTypeIdentifier.msg deleted file mode 100644 index 9143f866..00000000 --- a/kortex_driver/msg/LimitationTypeIdentifier.msg +++ /dev/null @@ -1,3 +0,0 @@ - - -uint32 type \ No newline at end of file diff --git a/kortex_driver/msg/Map.msg b/kortex_driver/msg/Map.msg deleted file mode 100644 index ca25171c..00000000 --- a/kortex_driver/msg/Map.msg +++ /dev/null @@ -1,6 +0,0 @@ - - -MapHandle handle -string name - -MapElement[] elements \ No newline at end of file diff --git a/kortex_driver/msg/MapEvent.msg b/kortex_driver/msg/MapEvent.msg deleted file mode 100644 index 269bbdaf..00000000 --- a/kortex_driver/msg/MapEvent.msg +++ /dev/null @@ -1,2 +0,0 @@ - -string name \ No newline at end of file diff --git a/kortex_driver/msg/MapGroup.msg b/kortex_driver/msg/MapGroup.msg deleted file mode 100644 index 64f73094..00000000 --- a/kortex_driver/msg/MapGroup.msg +++ /dev/null @@ -1,13 +0,0 @@ - - -MapGroupHandle group_handle -string name - -MappingHandle related_mapping_handle - -MapGroupHandle parent_group_handle - -MapGroupHandle[] children_map_group_handles - -MapHandle[] map_handles -string application_data \ No newline at end of file diff --git a/kortex_driver/msg/MapGroupHandle.msg b/kortex_driver/msg/MapGroupHandle.msg deleted file mode 100644 index 3038380d..00000000 --- a/kortex_driver/msg/MapGroupHandle.msg +++ /dev/null @@ -1,3 +0,0 @@ - -uint32 identifier -uint32 permission \ No newline at end of file diff --git a/kortex_driver/msg/MapHandle.msg b/kortex_driver/msg/MapHandle.msg deleted file mode 100644 index 3038380d..00000000 --- a/kortex_driver/msg/MapHandle.msg +++ /dev/null @@ -1,3 +0,0 @@ - -uint32 identifier -uint32 permission \ No newline at end of file diff --git a/kortex_driver/msg/Mapping.msg b/kortex_driver/msg/Mapping.msg deleted file mode 100644 index 095a9350..00000000 --- a/kortex_driver/msg/Mapping.msg +++ /dev/null @@ -1,14 +0,0 @@ - - -MappingHandle handle -string name -uint32 controller_identifier - -MapGroupHandle active_map_group_handle - -MapGroupHandle[] map_group_handles - -MapHandle active_map_handle - -MapHandle[] map_handles -string application_data \ No newline at end of file diff --git a/kortex_driver/msg/MappingHandle.msg b/kortex_driver/msg/MappingHandle.msg deleted file mode 100644 index 3038380d..00000000 --- a/kortex_driver/msg/MappingHandle.msg +++ /dev/null @@ -1,3 +0,0 @@ - -uint32 identifier -uint32 permission \ No newline at end of file diff --git a/kortex_driver/msg/NotificationHandle.msg b/kortex_driver/msg/NotificationHandle.msg deleted file mode 100644 index bd72812b..00000000 --- a/kortex_driver/msg/NotificationHandle.msg +++ /dev/null @@ -1,2 +0,0 @@ - -uint32 identifier \ No newline at end of file diff --git a/kortex_driver/msg/NotificationOptions.msg b/kortex_driver/msg/NotificationOptions.msg deleted file mode 100644 index 6ff46842..00000000 --- a/kortex_driver/msg/NotificationOptions.msg +++ /dev/null @@ -1,5 +0,0 @@ - - -uint32 type -uint32 rate_m_sec -float32 threshold_value \ No newline at end of file diff --git a/kortex_driver/msg/NotificationType.msg b/kortex_driver/msg/NotificationType.msg deleted file mode 100644 index 881cd9a6..00000000 --- a/kortex_driver/msg/NotificationType.msg +++ /dev/null @@ -1,8 +0,0 @@ - -uint32 NOTIFICATION_TYPE_UNSPECIFIED = 0 - -uint32 NOTIFICATION_TYPE_THRESHOLD = 1 - -uint32 NOTIFICATION_TYPE_FIX_RATE = 2 - -uint32 NOTIFICATION_TYPE_EVENT = 3 diff --git a/kortex_driver/msg/Orientation.msg b/kortex_driver/msg/Orientation.msg deleted file mode 100644 index 6f06d804..00000000 --- a/kortex_driver/msg/Orientation.msg +++ /dev/null @@ -1,4 +0,0 @@ - -float32 theta_x -float32 theta_y -float32 theta_z \ No newline at end of file diff --git a/kortex_driver/msg/PasswordChange.msg b/kortex_driver/msg/PasswordChange.msg deleted file mode 100644 index 57ee47e3..00000000 --- a/kortex_driver/msg/PasswordChange.msg +++ /dev/null @@ -1,5 +0,0 @@ - - -UserProfileHandle handle -string old_password -string new_password \ No newline at end of file diff --git a/kortex_driver/msg/Permission.msg b/kortex_driver/msg/Permission.msg deleted file mode 100644 index c5399e9c..00000000 --- a/kortex_driver/msg/Permission.msg +++ /dev/null @@ -1,8 +0,0 @@ - -uint32 NO_PERMISSION = 0 - -uint32 READ_PERMISSION = 1 - -uint32 UPDATE_PERMISSION = 2 - -uint32 DELETE_PERMISSION = 4 diff --git a/kortex_driver/msg/Point.msg b/kortex_driver/msg/Point.msg deleted file mode 100644 index 78f07ff5..00000000 --- a/kortex_driver/msg/Point.msg +++ /dev/null @@ -1,4 +0,0 @@ - -float32 x -float32 y -float32 z \ No newline at end of file diff --git a/kortex_driver/msg/Pose.msg b/kortex_driver/msg/Pose.msg deleted file mode 100644 index beddec03..00000000 --- a/kortex_driver/msg/Pose.msg +++ /dev/null @@ -1,7 +0,0 @@ - -float32 x -float32 y -float32 z -float32 theta_x -float32 theta_y -float32 theta_z \ No newline at end of file diff --git a/kortex_driver/msg/Position.msg b/kortex_driver/msg/Position.msg deleted file mode 100644 index 78f07ff5..00000000 --- a/kortex_driver/msg/Position.msg +++ /dev/null @@ -1,4 +0,0 @@ - -float32 x -float32 y -float32 z \ No newline at end of file diff --git a/kortex_driver/msg/ProtectionZone.msg b/kortex_driver/msg/ProtectionZone.msg deleted file mode 100644 index 5bf1b8e5..00000000 --- a/kortex_driver/msg/ProtectionZone.msg +++ /dev/null @@ -1,12 +0,0 @@ - - -ProtectionZoneHandle handle -string name -string application_data -bool is_enabled - -ZoneShape shape - -CartesianLimitation[] limitations - -CartesianLimitation[] envelope_limitations \ No newline at end of file diff --git a/kortex_driver/msg/ProtectionZoneHandle.msg b/kortex_driver/msg/ProtectionZoneHandle.msg deleted file mode 100644 index 3038380d..00000000 --- a/kortex_driver/msg/ProtectionZoneHandle.msg +++ /dev/null @@ -1,3 +0,0 @@ - -uint32 identifier -uint32 permission \ No newline at end of file diff --git a/kortex_driver/msg/Query.msg b/kortex_driver/msg/Query.msg deleted file mode 100644 index b8c2a292..00000000 --- a/kortex_driver/msg/Query.msg +++ /dev/null @@ -1,6 +0,0 @@ - - -Timestamp start_timestamp - -Timestamp end_timestamp -string username \ No newline at end of file diff --git a/kortex_driver/msg/RotationMatrix.msg b/kortex_driver/msg/RotationMatrix.msg deleted file mode 100644 index 70a31f14..00000000 --- a/kortex_driver/msg/RotationMatrix.msg +++ /dev/null @@ -1,7 +0,0 @@ - - -RotationMatrixRow row1 - -RotationMatrixRow row2 - -RotationMatrixRow row3 \ No newline at end of file diff --git a/kortex_driver/msg/RotationMatrixRow.msg b/kortex_driver/msg/RotationMatrixRow.msg deleted file mode 100644 index 39a30f92..00000000 --- a/kortex_driver/msg/RotationMatrixRow.msg +++ /dev/null @@ -1,4 +0,0 @@ - -float32 column1 -float32 column2 -float32 column3 \ No newline at end of file diff --git a/kortex_driver/msg/SafetyHandle.msg b/kortex_driver/msg/SafetyHandle.msg deleted file mode 100644 index bd72812b..00000000 --- a/kortex_driver/msg/SafetyHandle.msg +++ /dev/null @@ -1,2 +0,0 @@ - -uint32 identifier \ No newline at end of file diff --git a/kortex_driver/msg/SafetyIdentifier.msg b/kortex_driver/msg/SafetyIdentifier.msg deleted file mode 100644 index 1a9b56d4..00000000 --- a/kortex_driver/msg/SafetyIdentifier.msg +++ /dev/null @@ -1,60 +0,0 @@ - -uint32 UNSPECIFIED_BASE_SAFETY_IDENTIFIER = 0 - -uint32 FIRMWARE_UPDATE_FAILURE = 1 - -uint32 EXTERNAL_COMMUNICATION_ERROR = 2 - -uint32 MAXIMUM_AMBIENT_TEMPERATURE = 4 - -uint32 MAXIMUM_CORE_TEMPERATURE = 8 - -uint32 JOINT_FAULT = 16 - -uint32 CYCLIC_DATA_JITTER = 32 - -uint32 REACHED_MAXIMUM_EVENT_LOGS = 64 - -uint32 NO_KINEMATICS_SUPPORT = 128 - -uint32 ABOVE_MAXIMUM_DOF = 256 - -uint32 NETWORK_ERROR = 512 - -uint32 UNABLE_TO_REACH_POSE = 1024 - -uint32 JOINT_DETECTION_ERROR = 2048 - -uint32 NETWORK_INITIALIZATION_ERROR = 4096 - -uint32 MAXIMUM_CURRENT = 8192 - -uint32 MAXIMUM_VOLTAGE = 16384 - -uint32 MINIMUM_VOLTAGE = 32768 - -uint32 MAXIMUM_END_EFFECTOR_TRANSLATION_VELOCITY = 65536 - -uint32 MAXIMUM_END_EFFECTOR_ORIENTATION_VELOCITY = 131072 - -uint32 MAXIMUM_END_EFFECTOR_TRANSLATION_ACCELERATION = 262144 - -uint32 MAXIMUM_END_EFFECTOR_ORIENTATION_ACCELERATION = 524288 - -uint32 MAXIMUM_END_EFFECTOR_TRANSLATION_FORCE = 1048576 - -uint32 MAXIMUM_END_EFFECTOR_ORIENTATION_FORCE = 2097152 - -uint32 MAXIMUM_END_EFFECTOR_PAYLOAD = 4194304 - -uint32 EMERGENCY_STOP_ACTIVATED = 8388608 - -uint32 EMERGENCY_LINE_ACTIVATED = 16777216 - -uint32 INRUSH_CURRENT_LIMITER_FAULT = 33554432 - -uint32 NVRAM_CORRUPTED = 67108864 - -uint32 INCOMPATIBLE_FIRMWARE_VERSION = 134217728 - -uint32 POWERON_SELF_TEST_FAILURE = 268435456 diff --git a/kortex_driver/msg/SafetyNotification.msg b/kortex_driver/msg/SafetyNotification.msg deleted file mode 100644 index 36d88894..00000000 --- a/kortex_driver/msg/SafetyNotification.msg +++ /dev/null @@ -1,11 +0,0 @@ - - -SafetyHandle safety_handle - -uint32 value - -Timestamp timestamp - -UserProfileHandle user_handle - -Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/SafetyStatusValue.msg b/kortex_driver/msg/SafetyStatusValue.msg deleted file mode 100644 index 74ffcfcd..00000000 --- a/kortex_driver/msg/SafetyStatusValue.msg +++ /dev/null @@ -1,8 +0,0 @@ - -uint32 SAFETY_STATUS_UNSPECIFIED = 0 - -uint32 SAFETY_STATUS_WARNING = 1 - -uint32 SAFETY_STATUS_ERROR = 2 - -uint32 SAFETY_STATUS_NORMAL = 3 diff --git a/kortex_driver/msg/Sequence.msg b/kortex_driver/msg/Sequence.msg deleted file mode 100644 index 5d5a38cf..00000000 --- a/kortex_driver/msg/Sequence.msg +++ /dev/null @@ -1,7 +0,0 @@ - - -SequenceHandle handle -string name -string application_data - -SequenceTask[] tasks \ No newline at end of file diff --git a/kortex_driver/msg/SequenceHandle.msg b/kortex_driver/msg/SequenceHandle.msg deleted file mode 100644 index 3038380d..00000000 --- a/kortex_driver/msg/SequenceHandle.msg +++ /dev/null @@ -1,3 +0,0 @@ - -uint32 identifier -uint32 permission \ No newline at end of file diff --git a/kortex_driver/msg/SequenceInfoNotification.msg b/kortex_driver/msg/SequenceInfoNotification.msg deleted file mode 100644 index c43d59d3..00000000 --- a/kortex_driver/msg/SequenceInfoNotification.msg +++ /dev/null @@ -1,15 +0,0 @@ - - -uint32 event_identifier - -SequenceHandle sequence_handle -uint32 task_index -uint32 group_identifier - -Timestamp timestamp - -UserProfileHandle user_handle - -uint32 abort_details - -Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/SequenceInformation.msg b/kortex_driver/msg/SequenceInformation.msg deleted file mode 100644 index b85d43f4..00000000 --- a/kortex_driver/msg/SequenceInformation.msg +++ /dev/null @@ -1,5 +0,0 @@ - - -uint32 event_identifier -uint32 task_index -uint32 task_identifier \ No newline at end of file diff --git a/kortex_driver/msg/SequenceTask.msg b/kortex_driver/msg/SequenceTask.msg deleted file mode 100644 index 9632764f..00000000 --- a/kortex_driver/msg/SequenceTask.msg +++ /dev/null @@ -1,5 +0,0 @@ - -uint32 group_identifier - -Action action -string application_data \ No newline at end of file diff --git a/kortex_driver/msg/SequenceTaskHandle.msg b/kortex_driver/msg/SequenceTaskHandle.msg deleted file mode 100644 index d982d9f3..00000000 --- a/kortex_driver/msg/SequenceTaskHandle.msg +++ /dev/null @@ -1,4 +0,0 @@ - - -SequenceHandle sequence_handle -uint32 task_index \ No newline at end of file diff --git a/kortex_driver/msg/Stop.msg b/kortex_driver/msg/Stop.msg deleted file mode 100644 index e69de29b..00000000 diff --git a/kortex_driver/msg/SystemTime.msg b/kortex_driver/msg/SystemTime.msg deleted file mode 100644 index 28c8d69b..00000000 --- a/kortex_driver/msg/SystemTime.msg +++ /dev/null @@ -1,7 +0,0 @@ - -uint32 sec -uint32 min -uint32 hour -uint32 mday -uint32 mon -uint32 year \ No newline at end of file diff --git a/kortex_driver/msg/Timestamp.msg b/kortex_driver/msg/Timestamp.msg deleted file mode 100644 index 5e60508c..00000000 --- a/kortex_driver/msg/Timestamp.msg +++ /dev/null @@ -1,3 +0,0 @@ - -uint32 sec -uint32 usec \ No newline at end of file diff --git a/kortex_driver/msg/TransformationRow.msg b/kortex_driver/msg/TransformationRow.msg deleted file mode 100644 index b930b732..00000000 --- a/kortex_driver/msg/TransformationRow.msg +++ /dev/null @@ -1,5 +0,0 @@ - -float32 c0 -float32 c1 -float32 c2 -float32 c3 \ No newline at end of file diff --git a/kortex_driver/msg/Twist.msg b/kortex_driver/msg/Twist.msg deleted file mode 100644 index 856383d5..00000000 --- a/kortex_driver/msg/Twist.msg +++ /dev/null @@ -1,7 +0,0 @@ - -float32 linear_x -float32 linear_y -float32 linear_z -float32 angular_x -float32 angular_y -float32 angular_z \ No newline at end of file diff --git a/kortex_driver/msg/TwistCommand.msg b/kortex_driver/msg/TwistCommand.msg deleted file mode 100644 index 599db8e2..00000000 --- a/kortex_driver/msg/TwistCommand.msg +++ /dev/null @@ -1,6 +0,0 @@ - - -uint32 mode - -Twist twist -uint32 duration \ No newline at end of file diff --git a/kortex_driver/msg/TwistMode.msg b/kortex_driver/msg/TwistMode.msg deleted file mode 100644 index 086bad8c..00000000 --- a/kortex_driver/msg/TwistMode.msg +++ /dev/null @@ -1,8 +0,0 @@ - -uint32 UNSPECIFIED_TWIST_MODE = 0 - -uint32 TWIST_TOOL_JOYSTICK = 1 - -uint32 TWIST_BASE_FRAME_JOYSTICK = 2 - -uint32 TWIST_CARTESIAN_JOYSTICK = 3 diff --git a/kortex_driver/msg/Unit.msg b/kortex_driver/msg/Unit.msg deleted file mode 100644 index c019aeba..00000000 --- a/kortex_driver/msg/Unit.msg +++ /dev/null @@ -1,28 +0,0 @@ - -uint32 UNSPECIFIED_UNIT = 0 - -uint32 CELSIUS = 1 - -uint32 AMPERE = 2 - -uint32 VOLT = 3 - -uint32 METER_PER_SECOND = 4 - -uint32 DEGREE_PER_SECOND = 5 - -uint32 METER_PER_SECOND_2 = 6 - -uint32 DEGREE_PER_SECOND_2 = 7 - -uint32 NEWTON = 8 - -uint32 NEWTON_METER = 9 - -uint32 KILOGRAM = 10 - -uint32 DEGREE = 11 - -uint32 TICK = 12 - -uint32 DEGREE_PER_MILLISECOND = 13 diff --git a/kortex_driver/msg/UserProfile.msg b/kortex_driver/msg/UserProfile.msg deleted file mode 100644 index dcaa7b43..00000000 --- a/kortex_driver/msg/UserProfile.msg +++ /dev/null @@ -1,7 +0,0 @@ - - -UserProfileHandle handle -string username -string firstname -string lastname -string application_data \ No newline at end of file diff --git a/kortex_driver/msg/UserProfileHandle.msg b/kortex_driver/msg/UserProfileHandle.msg deleted file mode 100644 index 3038380d..00000000 --- a/kortex_driver/msg/UserProfileHandle.msg +++ /dev/null @@ -1,3 +0,0 @@ - -uint32 identifier -uint32 permission \ No newline at end of file diff --git a/kortex_driver/msg/WifiConfiguration.msg b/kortex_driver/msg/WifiConfiguration.msg deleted file mode 100644 index dae3b4e4..00000000 --- a/kortex_driver/msg/WifiConfiguration.msg +++ /dev/null @@ -1,5 +0,0 @@ - - -Ssid ssid -string security_key -bool connect_automatically \ No newline at end of file diff --git a/kortex_driver/msg/WifiInformation.msg b/kortex_driver/msg/WifiInformation.msg deleted file mode 100644 index 8b1d3143..00000000 --- a/kortex_driver/msg/WifiInformation.msg +++ /dev/null @@ -1,10 +0,0 @@ - - -Ssid ssid -uint32 security_type -uint32 encryption_type - -uint32 signal_quality -int32 signal_strength -uint32 frequency -uint32 channel \ No newline at end of file diff --git a/kortex_driver/msg/ZoneShape.msg b/kortex_driver/msg/ZoneShape.msg deleted file mode 100644 index 98d9ed62..00000000 --- a/kortex_driver/msg/ZoneShape.msg +++ /dev/null @@ -1,9 +0,0 @@ - - -uint32 shape_type - -Point origin - -RotationMatrix orientation -float32[] dimensions -float32 envelope_thickness \ No newline at end of file diff --git a/kortex_driver/msg/ErrorCodes.msg b/kortex_driver/msg/generated/ErrorCodes.msg similarity index 100% rename from kortex_driver/msg/ErrorCodes.msg rename to kortex_driver/msg/generated/ErrorCodes.msg diff --git a/kortex_driver/msg/SubErrorCodes.msg b/kortex_driver/msg/generated/SubErrorCodes.msg similarity index 92% rename from kortex_driver/msg/SubErrorCodes.msg rename to kortex_driver/msg/generated/SubErrorCodes.msg index 668aa4e4..06c47776 100644 --- a/kortex_driver/msg/SubErrorCodes.msg +++ b/kortex_driver/msg/generated/SubErrorCodes.msg @@ -151,6 +151,8 @@ uint32 CONTROL_UNDEFINED = 74 uint32 WRONG_SERVOING_MODE = 75 +uint32 CONTROL_WRONG_STARTING_SPEED = 76 + uint32 USERNAME_LENGTH_EXCEEDED = 100 uint32 FIRSTNAME_LENGTH_EXCEEDED = 101 @@ -170,3 +172,15 @@ uint32 MAXIMUM_USER_PROFILES_USED = 107 uint32 ROUTER_UNVAILABLE = 108 uint32 ADDRESS_NOT_IN_VALID_RANGE = 120 + +uint32 SESSION_NOT_IN_CONTROL = 130 + +uint32 METHOD_TIMEOUT = 131 + +uint32 UNSUPPORTED_ROBOT_CONFIGURATION = 132 + +uint32 NVRAM_READ_FAIL = 133 + +uint32 NVRAM_WRITE_FAIL = 134 + +uint32 NETWORK_NO_ADDRESS_ASSIGNED = 135 diff --git a/kortex_actuator_driver/msg/ControlMode.msg b/kortex_driver/msg/generated/actuator_config/ActuatorConfig_ControlMode.msg similarity index 100% rename from kortex_actuator_driver/msg/ControlMode.msg rename to kortex_driver/msg/generated/actuator_config/ActuatorConfig_ControlMode.msg diff --git a/kortex_driver/msg/generated/actuator_config/ActuatorConfig_ControlModeInformation.msg b/kortex_driver/msg/generated/actuator_config/ActuatorConfig_ControlModeInformation.msg new file mode 100644 index 00000000..713ed378 --- /dev/null +++ b/kortex_driver/msg/generated/actuator_config/ActuatorConfig_ControlModeInformation.msg @@ -0,0 +1,2 @@ + +uint32 control_mode \ No newline at end of file diff --git a/kortex_actuator_driver/msg/SafetyLimitType.msg b/kortex_driver/msg/generated/actuator_config/ActuatorConfig_SafetyLimitType.msg similarity index 100% rename from kortex_actuator_driver/msg/SafetyLimitType.msg rename to kortex_driver/msg/generated/actuator_config/ActuatorConfig_SafetyLimitType.msg diff --git a/kortex_actuator_driver/msg/ServiceVersion.msg b/kortex_driver/msg/generated/actuator_config/ActuatorConfig_ServiceVersion.msg similarity index 100% rename from kortex_actuator_driver/msg/ServiceVersion.msg rename to kortex_driver/msg/generated/actuator_config/ActuatorConfig_ServiceVersion.msg diff --git a/kortex_driver/msg/generated/actuator_config/AxisOffsets.msg b/kortex_driver/msg/generated/actuator_config/AxisOffsets.msg new file mode 100644 index 00000000..eb4136d6 --- /dev/null +++ b/kortex_driver/msg/generated/actuator_config/AxisOffsets.msg @@ -0,0 +1,3 @@ + +float32 absolute_offset +float32 relative_offset \ No newline at end of file diff --git a/kortex_actuator_driver/msg/AxisPosition.msg b/kortex_driver/msg/generated/actuator_config/AxisPosition.msg similarity index 88% rename from kortex_actuator_driver/msg/AxisPosition.msg rename to kortex_driver/msg/generated/actuator_config/AxisPosition.msg index 380da9af..95750a0b 100644 --- a/kortex_actuator_driver/msg/AxisPosition.msg +++ b/kortex_driver/msg/generated/actuator_config/AxisPosition.msg @@ -1,2 +1,2 @@ - + float32 position \ No newline at end of file diff --git a/kortex_actuator_driver/msg/CommandMode.msg b/kortex_driver/msg/generated/actuator_config/CommandMode.msg similarity index 100% rename from kortex_actuator_driver/msg/CommandMode.msg rename to kortex_driver/msg/generated/actuator_config/CommandMode.msg diff --git a/kortex_actuator_driver/msg/CommandModeInformation.msg b/kortex_driver/msg/generated/actuator_config/CommandModeInformation.msg similarity index 95% rename from kortex_actuator_driver/msg/CommandModeInformation.msg rename to kortex_driver/msg/generated/actuator_config/CommandModeInformation.msg index e6342c48..f066818c 100644 --- a/kortex_actuator_driver/msg/CommandModeInformation.msg +++ b/kortex_driver/msg/generated/actuator_config/CommandModeInformation.msg @@ -1,3 +1,2 @@ - uint32 command_mode \ No newline at end of file diff --git a/kortex_actuator_driver/msg/ControlLoop.msg b/kortex_driver/msg/generated/actuator_config/ControlLoop.msg similarity index 90% rename from kortex_actuator_driver/msg/ControlLoop.msg rename to kortex_driver/msg/generated/actuator_config/ControlLoop.msg index 17b6d695..715ca4be 100644 --- a/kortex_actuator_driver/msg/ControlLoop.msg +++ b/kortex_driver/msg/generated/actuator_config/ControlLoop.msg @@ -1,2 +1,2 @@ - + uint32 control_loop \ No newline at end of file diff --git a/kortex_driver/msg/generated/actuator_config/ControlLoopParameters.msg b/kortex_driver/msg/generated/actuator_config/ControlLoopParameters.msg new file mode 100644 index 00000000..5cad2907 --- /dev/null +++ b/kortex_driver/msg/generated/actuator_config/ControlLoopParameters.msg @@ -0,0 +1,7 @@ + +uint32 loop_selection +float32 error_saturation +float32 output_saturation +float32[] kAz +float32[] kBz +float32 error_dead_band \ No newline at end of file diff --git a/kortex_actuator_driver/msg/ControlLoopSelection.msg b/kortex_driver/msg/generated/actuator_config/ControlLoopSelection.msg similarity index 100% rename from kortex_actuator_driver/msg/ControlLoopSelection.msg rename to kortex_driver/msg/generated/actuator_config/ControlLoopSelection.msg diff --git a/kortex_actuator_driver/msg/CustomDataIndex.msg b/kortex_driver/msg/generated/actuator_config/CustomDataIndex.msg similarity index 92% rename from kortex_actuator_driver/msg/CustomDataIndex.msg rename to kortex_driver/msg/generated/actuator_config/CustomDataIndex.msg index c6aeba66..b6b7cfcc 100644 --- a/kortex_actuator_driver/msg/CustomDataIndex.msg +++ b/kortex_driver/msg/generated/actuator_config/CustomDataIndex.msg @@ -37,6 +37,8 @@ uint32 UINT32_ABSOLUTE_POSITION_SENSOR_RAW = 17 uint32 FLOAT_ABSOLUTE_POSITION_SENSOR = 18 +uint32 FLOAT_CONTROL_POSITION_JOINT_REQUESTED = 19 + uint32 UINT32_JIG_FLAGS = 20 uint32 UINT32_TICK_MOTOR_CONTROL = 21 @@ -102,3 +104,9 @@ uint32 FLOAT_PHASE_PWM_1 = 50 uint32 FLOAT_PHASE_PWM_2 = 51 uint32 FLOAT_MOTOR_ELECTRICAL_ANGLE = 52 + +uint32 FLOAT_CURRENT_MOTOR_CMD = 53 + +uint32 FLOAT_TORQUE_JOINT_CMD = 54 + +uint32 FLOAT_POSITION_UNWRAPPED = 55 diff --git a/kortex_actuator_driver/msg/CustomDataSelection.msg b/kortex_driver/msg/generated/actuator_config/CustomDataSelection.msg similarity index 94% rename from kortex_actuator_driver/msg/CustomDataSelection.msg rename to kortex_driver/msg/generated/actuator_config/CustomDataSelection.msg index 5cb35e67..84a61074 100644 --- a/kortex_actuator_driver/msg/CustomDataSelection.msg +++ b/kortex_driver/msg/generated/actuator_config/CustomDataSelection.msg @@ -1,3 +1,2 @@ - uint32[] channel \ No newline at end of file diff --git a/kortex_driver/msg/generated/actuator_config/EncoderDerivativeParameters.msg b/kortex_driver/msg/generated/actuator_config/EncoderDerivativeParameters.msg new file mode 100644 index 00000000..b736d756 --- /dev/null +++ b/kortex_driver/msg/generated/actuator_config/EncoderDerivativeParameters.msg @@ -0,0 +1,3 @@ + +uint32 max_window_width +uint32 min_encoder_tick_count \ No newline at end of file diff --git a/kortex_driver/msg/generated/actuator_config/FrequencyResponse.msg b/kortex_driver/msg/generated/actuator_config/FrequencyResponse.msg new file mode 100644 index 00000000..957c9757 --- /dev/null +++ b/kortex_driver/msg/generated/actuator_config/FrequencyResponse.msg @@ -0,0 +1,6 @@ + +uint32 loop_selection +float32 min_frequency +float32 max_frequency +float32 amplitude +float32 duration \ No newline at end of file diff --git a/kortex_actuator_driver/msg/LoopSelection.msg b/kortex_driver/msg/generated/actuator_config/LoopSelection.msg similarity index 95% rename from kortex_actuator_driver/msg/LoopSelection.msg rename to kortex_driver/msg/generated/actuator_config/LoopSelection.msg index f8dc270b..66fdae0b 100644 --- a/kortex_actuator_driver/msg/LoopSelection.msg +++ b/kortex_driver/msg/generated/actuator_config/LoopSelection.msg @@ -1,3 +1,2 @@ - uint32 loop_selection \ No newline at end of file diff --git a/kortex_driver/msg/generated/actuator_config/PositionCommand.msg b/kortex_driver/msg/generated/actuator_config/PositionCommand.msg new file mode 100644 index 00000000..a0477a56 --- /dev/null +++ b/kortex_driver/msg/generated/actuator_config/PositionCommand.msg @@ -0,0 +1,4 @@ + +float32 position +float32 velocity +float32 acceleration \ No newline at end of file diff --git a/kortex_driver/msg/generated/actuator_config/RampResponse.msg b/kortex_driver/msg/generated/actuator_config/RampResponse.msg new file mode 100644 index 00000000..846abc0c --- /dev/null +++ b/kortex_driver/msg/generated/actuator_config/RampResponse.msg @@ -0,0 +1,5 @@ + +uint32 loop_selection +float32 slope +float32 ramp_delay +float32 duration \ No newline at end of file diff --git a/kortex_driver/msg/generated/actuator_config/SafetyIdentifierBankA.msg b/kortex_driver/msg/generated/actuator_config/SafetyIdentifierBankA.msg new file mode 100644 index 00000000..f18f02aa --- /dev/null +++ b/kortex_driver/msg/generated/actuator_config/SafetyIdentifierBankA.msg @@ -0,0 +1,54 @@ + +uint32 UNSPECIFIED_ACTUATOR_SAFETY_IDENTIFIER_BANK_A = 0 + +uint32 FOLLOWING_ERROR = 1 + +uint32 MAXIMUM_VELOCITY = 2 + +uint32 JOINT_LIMIT_HIGH = 4 + +uint32 JOINT_LIMIT_LOW = 8 + +uint32 STRAIN_GAUGE_MISMATCH = 16 + +uint32 MAXIMUM_TORQUE = 32 + +uint32 UNRELIABLE_ABSOLUTE_POSITION = 64 + +uint32 MAGNETIC_POSITION = 128 + +uint32 HALL_POSITION = 256 + +uint32 HALL_SEQUENCE = 512 + +uint32 INPUT_ENCODER_HALL_MISMATCH = 1024 + +uint32 INPUT_ENCODER_INDEX_MISMATCH = 2048 + +uint32 INPUT_ENCODER_MAGNETIC_MISMATCH = 4096 + +uint32 MAXIMUM_MOTOR_CURRENT = 8192 + +uint32 MOTOR_CURRENT_MISMATCH = 16384 + +uint32 MAXIMUM_VOLTAGE = 32768 + +uint32 MINIMUM_VOLTAGE = 65536 + +uint32 MAXIMUM_MOTOR_TEMPERATURE = 131072 + +uint32 MAXIMUM_CORE_TEMPERATURE = 262144 + +uint32 NON_VOLATILE_MEMORY_CORRUPTED = 524288 + +uint32 MOTOR_DRIVER_FAULT = 1048576 + +uint32 EMERGENCY_LINE_ASSERTED = 2097152 + +uint32 COMMUNICATION_TICK_LOST = 4194304 + +uint32 WATCHDOG_TRIGGERED = 8388608 + +uint32 UNRELIABLE_CAPACITIVE_SENSOR = 16777216 + +uint32 UNEXPECTED_GEAR_RATIO = 33554432 diff --git a/kortex_actuator_driver/msg/Servoing.msg b/kortex_driver/msg/generated/actuator_config/Servoing.msg similarity index 85% rename from kortex_actuator_driver/msg/Servoing.msg rename to kortex_driver/msg/generated/actuator_config/Servoing.msg index 7f2750b4..8e3e7a72 100644 --- a/kortex_actuator_driver/msg/Servoing.msg +++ b/kortex_driver/msg/generated/actuator_config/Servoing.msg @@ -1,2 +1,2 @@ - + bool enabled \ No newline at end of file diff --git a/kortex_driver/msg/generated/actuator_config/StepResponse.msg b/kortex_driver/msg/generated/actuator_config/StepResponse.msg new file mode 100644 index 00000000..64fa125b --- /dev/null +++ b/kortex_driver/msg/generated/actuator_config/StepResponse.msg @@ -0,0 +1,5 @@ + +uint32 loop_selection +float32 amplitude +float32 step_delay +float32 duration \ No newline at end of file diff --git a/kortex_driver/msg/generated/actuator_config/TorqueCalibration.msg b/kortex_driver/msg/generated/actuator_config/TorqueCalibration.msg new file mode 100644 index 00000000..63568bf6 --- /dev/null +++ b/kortex_driver/msg/generated/actuator_config/TorqueCalibration.msg @@ -0,0 +1,5 @@ + +float32 global_gain +float32 global_offset +float32[] gain +float32[] offset \ No newline at end of file diff --git a/kortex_actuator_driver/msg/TorqueOffset.msg b/kortex_driver/msg/generated/actuator_config/TorqueOffset.msg similarity index 91% rename from kortex_actuator_driver/msg/TorqueOffset.msg rename to kortex_driver/msg/generated/actuator_config/TorqueOffset.msg index 198518a2..1087bce2 100644 --- a/kortex_actuator_driver/msg/TorqueOffset.msg +++ b/kortex_driver/msg/generated/actuator_config/TorqueOffset.msg @@ -1,2 +1,2 @@ - + float32 torque_offset \ No newline at end of file diff --git a/kortex_driver/msg/generated/actuator_config/VectorDriveParameters.msg b/kortex_driver/msg/generated/actuator_config/VectorDriveParameters.msg new file mode 100644 index 00000000..91b822de --- /dev/null +++ b/kortex_driver/msg/generated/actuator_config/VectorDriveParameters.msg @@ -0,0 +1,5 @@ + +float32 kpq +float32 kiq +float32 kpd +float32 kid \ No newline at end of file diff --git a/kortex_driver/msg/generated/actuator_cyclic/ActuatorCyclic_Command.msg b/kortex_driver/msg/generated/actuator_cyclic/ActuatorCyclic_Command.msg new file mode 100644 index 00000000..a81238cd --- /dev/null +++ b/kortex_driver/msg/generated/actuator_cyclic/ActuatorCyclic_Command.msg @@ -0,0 +1,7 @@ + +ActuatorCyclic_MessageId command_id +uint32 flags +float32 position +float32 velocity +float32 torque_joint +float32 current_motor \ No newline at end of file diff --git a/kortex_driver/msg/generated/actuator_cyclic/ActuatorCyclic_CustomData.msg b/kortex_driver/msg/generated/actuator_cyclic/ActuatorCyclic_CustomData.msg new file mode 100644 index 00000000..f6f20ed2 --- /dev/null +++ b/kortex_driver/msg/generated/actuator_cyclic/ActuatorCyclic_CustomData.msg @@ -0,0 +1,18 @@ + +ActuatorCyclic_MessageId custom_data_id +uint32 custom_data_0 +uint32 custom_data_1 +uint32 custom_data_2 +uint32 custom_data_3 +uint32 custom_data_4 +uint32 custom_data_5 +uint32 custom_data_6 +uint32 custom_data_7 +uint32 custom_data_8 +uint32 custom_data_9 +uint32 custom_data_10 +uint32 custom_data_11 +uint32 custom_data_12 +uint32 custom_data_13 +uint32 custom_data_14 +uint32 custom_data_15 \ No newline at end of file diff --git a/kortex_driver/msg/generated/actuator_cyclic/ActuatorCyclic_Feedback.msg b/kortex_driver/msg/generated/actuator_cyclic/ActuatorCyclic_Feedback.msg new file mode 100644 index 00000000..a5737e6d --- /dev/null +++ b/kortex_driver/msg/generated/actuator_cyclic/ActuatorCyclic_Feedback.msg @@ -0,0 +1,15 @@ + +ActuatorCyclic_MessageId feedback_id +uint32 status_flags +uint32 jitter_comm +float32 position +float32 velocity +float32 torque +float32 current_motor +float32 voltage +float32 temperature_motor +float32 temperature_core +uint32 fault_bank_a +uint32 fault_bank_b +uint32 warning_bank_a +uint32 warning_bank_b \ No newline at end of file diff --git a/kortex_driver/msg/generated/actuator_cyclic/ActuatorCyclic_MessageId.msg b/kortex_driver/msg/generated/actuator_cyclic/ActuatorCyclic_MessageId.msg new file mode 100644 index 00000000..9d1731bd --- /dev/null +++ b/kortex_driver/msg/generated/actuator_cyclic/ActuatorCyclic_MessageId.msg @@ -0,0 +1,2 @@ + +uint32 identifier \ No newline at end of file diff --git a/kortex_device_manager/msg/ServiceVersion.msg b/kortex_driver/msg/generated/actuator_cyclic/ActuatorCyclic_ServiceVersion.msg similarity index 100% rename from kortex_device_manager/msg/ServiceVersion.msg rename to kortex_driver/msg/generated/actuator_cyclic/ActuatorCyclic_ServiceVersion.msg diff --git a/kortex_actuator_driver/msg/CommandFlags.msg b/kortex_driver/msg/generated/actuator_cyclic/CommandFlags.msg similarity index 100% rename from kortex_actuator_driver/msg/CommandFlags.msg rename to kortex_driver/msg/generated/actuator_cyclic/CommandFlags.msg diff --git a/kortex_actuator_driver/msg/StatusFlags.msg b/kortex_driver/msg/generated/actuator_cyclic/StatusFlags.msg similarity index 100% rename from kortex_actuator_driver/msg/StatusFlags.msg rename to kortex_driver/msg/generated/actuator_cyclic/StatusFlags.msg diff --git a/kortex_driver/msg/generated/base/Action.msg b/kortex_driver/msg/generated/base/Action.msg new file mode 100644 index 00000000..e832d632 --- /dev/null +++ b/kortex_driver/msg/generated/base/Action.msg @@ -0,0 +1,5 @@ + +ActionHandle handle +string name +string application_data +Action_action_parameters oneof_action_parameters \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/ActionEvent.msg b/kortex_driver/msg/generated/base/ActionEvent.msg new file mode 100644 index 00000000..27e0889b --- /dev/null +++ b/kortex_driver/msg/generated/base/ActionEvent.msg @@ -0,0 +1,22 @@ + +uint32 UNSPECIFIED_ACTION_EVENT = 0 + +uint32 ACTION_END = 1 + +uint32 ACTION_ABORT = 2 + +uint32 ACTION_PAUSE = 3 + +uint32 ACTION_START = 4 + +uint32 ACTION_PREPROCESS_START = 5 + +uint32 ACTION_PREPROCESS_ABORT = 6 + +uint32 ACTION_PREPROCESS_END = 7 + +uint32 ACTION_POSTPROCESS_START = 8 + +uint32 ACTION_POSTPROCESS_ABORT = 9 + +uint32 ACTION_POSTPROCESS_END = 10 diff --git a/kortex_driver/msg/ActionExecutionState.msg b/kortex_driver/msg/generated/base/ActionExecutionState.msg similarity index 95% rename from kortex_driver/msg/ActionExecutionState.msg rename to kortex_driver/msg/generated/base/ActionExecutionState.msg index 8737fa01..9994e7f2 100644 --- a/kortex_driver/msg/ActionExecutionState.msg +++ b/kortex_driver/msg/generated/base/ActionExecutionState.msg @@ -1,5 +1,3 @@ - uint32 action_event - ActionHandle handle \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/ActionHandle.msg b/kortex_driver/msg/generated/base/ActionHandle.msg new file mode 100644 index 00000000..723cdcd5 --- /dev/null +++ b/kortex_driver/msg/generated/base/ActionHandle.msg @@ -0,0 +1,4 @@ + +uint32 identifier +uint32 action_type +uint32 permission \ No newline at end of file diff --git a/kortex_driver/msg/ActionList.msg b/kortex_driver/msg/generated/base/ActionList.msg similarity index 95% rename from kortex_driver/msg/ActionList.msg rename to kortex_driver/msg/generated/base/ActionList.msg index e8923a65..cec55d41 100644 --- a/kortex_driver/msg/ActionList.msg +++ b/kortex_driver/msg/generated/base/ActionList.msg @@ -1,3 +1,2 @@ - Action[] action_list \ No newline at end of file diff --git a/kortex_driver/msg/ActionNotification.msg b/kortex_driver/msg/generated/base/ActionNotification.msg similarity index 95% rename from kortex_driver/msg/ActionNotification.msg rename to kortex_driver/msg/generated/base/ActionNotification.msg index 934e4528..097c002c 100644 --- a/kortex_driver/msg/ActionNotification.msg +++ b/kortex_driver/msg/generated/base/ActionNotification.msg @@ -1,13 +1,7 @@ - uint32 action_event - ActionHandle handle - Timestamp timestamp - UserProfileHandle user_handle - uint32 abort_details - Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/ActionNotificationList.msg b/kortex_driver/msg/generated/base/ActionNotificationList.msg similarity index 97% rename from kortex_driver/msg/ActionNotificationList.msg rename to kortex_driver/msg/generated/base/ActionNotificationList.msg index cd2959a4..8ba06008 100644 --- a/kortex_driver/msg/ActionNotificationList.msg +++ b/kortex_driver/msg/generated/base/ActionNotificationList.msg @@ -1,3 +1,2 @@ - ActionNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/ActionType.msg b/kortex_driver/msg/generated/base/ActionType.msg similarity index 83% rename from kortex_driver/msg/ActionType.msg rename to kortex_driver/msg/generated/base/ActionType.msg index 806cd68d..ca04d2fa 100644 --- a/kortex_driver/msg/ActionType.msg +++ b/kortex_driver/msg/generated/base/ActionType.msg @@ -3,6 +3,8 @@ uint32 UNSPECIFIED_ACTION = 0 uint32 SEND_TWIST_COMMAND = 1 +uint32 SEND_WRENCH_COMMAND = 2 + uint32 SEND_JOINT_SPEEDS = 4 uint32 REACH_POSE = 6 @@ -21,6 +23,8 @@ uint32 CHANGE_TWIST = 22 uint32 CHANGE_JOINT_SPEEDS = 23 +uint32 CHANGE_WRENCH = 25 + uint32 APPLY_EMERGENCY_STOP = 28 uint32 CLEAR_FAULTS = 29 @@ -32,3 +36,5 @@ uint32 EXECUTE_ACTION = 32 uint32 SEND_GRIPPER_COMMAND = 33 uint32 STOP_ACTION = 35 + +uint32 PLAY_PRE_COMPUTED_TRAJECTORY = 39 diff --git a/kortex_driver/msg/Action_action_parameters.msg b/kortex_driver/msg/generated/base/Action_action_parameters.msg similarity index 76% rename from kortex_driver/msg/Action_action_parameters.msg rename to kortex_driver/msg/generated/base/Action_action_parameters.msg index 63edadef..93d35efd 100644 --- a/kortex_driver/msg/Action_action_parameters.msg +++ b/kortex_driver/msg/generated/base/Action_action_parameters.msg @@ -1,30 +1,20 @@ - TwistCommand[] send_twist_command - +WrenchCommand[] send_wrench_command JointSpeeds[] send_joint_speeds - ConstrainedPose[] reach_pose - ConstrainedJointAngles[] reach_joint_angles uint32[] toggle_admittance_mode - SwitchControlMapping[] switch_control_mapping uint32[] navigate_joints uint32[] navigate_mappings - ChangeTwist[] change_twist - ChangeJointSpeeds[] change_joint_speeds - +ChangeWrench[] change_wrench EmergencyStop[] apply_emergency_stop - Faults[] clear_faults - Delay[] delay - ActionHandle[] execute_action - GripperCommand[] send_gripper_command - -Stop[] stop_action \ No newline at end of file +Base_Stop[] stop_action +PreComputedJointTrajectory[] play_pre_computed_trajectory \ No newline at end of file diff --git a/kortex_driver/msg/ActivateMapHandle.msg b/kortex_driver/msg/generated/base/ActivateMapHandle.msg similarity index 96% rename from kortex_driver/msg/ActivateMapHandle.msg rename to kortex_driver/msg/generated/base/ActivateMapHandle.msg index 184513e9..32c0e0c9 100644 --- a/kortex_driver/msg/ActivateMapHandle.msg +++ b/kortex_driver/msg/generated/base/ActivateMapHandle.msg @@ -1,7 +1,4 @@ - MappingHandle mapping_handle - MapGroupHandle map_group_handle - MapHandle map_handle \ No newline at end of file diff --git a/kortex_driver/msg/ActuatorInformation.msg b/kortex_driver/msg/generated/base/ActuatorInformation.msg similarity index 85% rename from kortex_driver/msg/ActuatorInformation.msg rename to kortex_driver/msg/generated/base/ActuatorInformation.msg index 33727e06..1f713579 100644 --- a/kortex_driver/msg/ActuatorInformation.msg +++ b/kortex_driver/msg/generated/base/ActuatorInformation.msg @@ -1,2 +1,2 @@ - + uint32 count \ No newline at end of file diff --git a/kortex_driver/msg/Admittance.msg b/kortex_driver/msg/generated/base/Admittance.msg similarity index 95% rename from kortex_driver/msg/Admittance.msg rename to kortex_driver/msg/generated/base/Admittance.msg index 619ce458..66e0c523 100644 --- a/kortex_driver/msg/Admittance.msg +++ b/kortex_driver/msg/generated/base/Admittance.msg @@ -1,3 +1,2 @@ - uint32 admittance_mode \ No newline at end of file diff --git a/kortex_driver/msg/AdmittanceMode.msg b/kortex_driver/msg/generated/base/AdmittanceMode.msg similarity index 100% rename from kortex_driver/msg/AdmittanceMode.msg rename to kortex_driver/msg/generated/base/AdmittanceMode.msg diff --git a/kortex_driver/msg/generated/base/AdvancedSequenceHandle.msg b/kortex_driver/msg/generated/base/AdvancedSequenceHandle.msg new file mode 100644 index 00000000..850ec7fb --- /dev/null +++ b/kortex_driver/msg/generated/base/AdvancedSequenceHandle.msg @@ -0,0 +1,3 @@ + +SequenceHandle handle +bool in_loop \ No newline at end of file diff --git a/kortex_driver/msg/AppendActionInformation.msg b/kortex_driver/msg/generated/base/AppendActionInformation.msg similarity index 95% rename from kortex_driver/msg/AppendActionInformation.msg rename to kortex_driver/msg/generated/base/AppendActionInformation.msg index 6e47fe18..1cbde10b 100644 --- a/kortex_driver/msg/AppendActionInformation.msg +++ b/kortex_driver/msg/generated/base/AppendActionInformation.msg @@ -1,5 +1,3 @@ - SequenceHandle sequence_handle - Action action \ No newline at end of file diff --git a/kortex_driver/msg/ArmStateInformation.msg b/kortex_driver/msg/generated/base/ArmStateInformation.msg similarity index 95% rename from kortex_driver/msg/ArmStateInformation.msg rename to kortex_driver/msg/generated/base/ArmStateInformation.msg index 31839b05..75f77cce 100644 --- a/kortex_driver/msg/ArmStateInformation.msg +++ b/kortex_driver/msg/generated/base/ArmStateInformation.msg @@ -1,5 +1,3 @@ - uint32 active_state - Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/ArmStateNotification.msg b/kortex_driver/msg/generated/base/ArmStateNotification.msg similarity index 95% rename from kortex_driver/msg/ArmStateNotification.msg rename to kortex_driver/msg/generated/base/ArmStateNotification.msg index b5e1436f..d000f247 100644 --- a/kortex_driver/msg/ArmStateNotification.msg +++ b/kortex_driver/msg/generated/base/ArmStateNotification.msg @@ -1,7 +1,4 @@ - uint32 active_state - Timestamp timestamp - Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/BackupEvent.msg b/kortex_driver/msg/generated/base/BackupEvent.msg similarity index 100% rename from kortex_driver/msg/BackupEvent.msg rename to kortex_driver/msg/generated/base/BackupEvent.msg diff --git a/kortex_driver/msg/generated/base/Base_CapSenseConfig.msg b/kortex_driver/msg/generated/base/Base_CapSenseConfig.msg new file mode 100644 index 00000000..83b1f559 --- /dev/null +++ b/kortex_driver/msg/generated/base/Base_CapSenseConfig.msg @@ -0,0 +1,7 @@ + +uint32 identifier +uint32 mode +float32 threshold_a +float32 threshold_b +float32 sensitivity_a +float32 sensitivity_b \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/Base_CapSenseMode.msg b/kortex_driver/msg/generated/base/Base_CapSenseMode.msg new file mode 100644 index 00000000..5a7abc4c --- /dev/null +++ b/kortex_driver/msg/generated/base/Base_CapSenseMode.msg @@ -0,0 +1,12 @@ + +uint32 RESERVED = 0 + +uint32 INACTIVE = 1 + +uint32 ACTIVE_AUTO_THRESHOLD = 2 + +uint32 ACTIVE_NOISE_ATT = 4 + +uint32 ACTIVE_NORMAL = 5 + +uint32 CONFIGURATION = 6 diff --git a/kortex_driver/msg/generated/base/Base_ControlMode.msg b/kortex_driver/msg/generated/base/Base_ControlMode.msg new file mode 100644 index 00000000..07829726 --- /dev/null +++ b/kortex_driver/msg/generated/base/Base_ControlMode.msg @@ -0,0 +1,24 @@ + +uint32 UNSPECIFIED_CONTROL_MODE = 0 + +uint32 ANGULAR_JOYSTICK = 1 + +uint32 CARTESIAN_JOYSTICK = 2 + +uint32 VISION_JOYSTICK = 3 + +uint32 ANGULAR_TRAJECTORY = 4 + +uint32 CARTESIAN_TRAJECTORY = 5 + +uint32 CARTESIAN_ADMITTANCE = 6 + +uint32 JOINT_ADMITTANCE = 7 + +uint32 NULL_SPACE_ADMITTANCE = 8 + +uint32 FORCE_CONTROL = 10 + +uint32 FORCE_CONTROL_MOTION_RESTRICTED = 11 + +uint32 IDLE = 13 diff --git a/kortex_driver/msg/generated/base/Base_ControlModeInformation.msg b/kortex_driver/msg/generated/base/Base_ControlModeInformation.msg new file mode 100644 index 00000000..6342d920 --- /dev/null +++ b/kortex_driver/msg/generated/base/Base_ControlModeInformation.msg @@ -0,0 +1,2 @@ + +uint32 mode \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/Base_Position.msg b/kortex_driver/msg/generated/base/Base_Position.msg new file mode 100644 index 00000000..678ce634 --- /dev/null +++ b/kortex_driver/msg/generated/base/Base_Position.msg @@ -0,0 +1,4 @@ + +float32 x +float32 y +float32 z \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/Base_RotationMatrix.msg b/kortex_driver/msg/generated/base/Base_RotationMatrix.msg new file mode 100644 index 00000000..2dd0265e --- /dev/null +++ b/kortex_driver/msg/generated/base/Base_RotationMatrix.msg @@ -0,0 +1,4 @@ + +Base_RotationMatrixRow row1 +Base_RotationMatrixRow row2 +Base_RotationMatrixRow row3 \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/Base_RotationMatrixRow.msg b/kortex_driver/msg/generated/base/Base_RotationMatrixRow.msg new file mode 100644 index 00000000..a389a4e2 --- /dev/null +++ b/kortex_driver/msg/generated/base/Base_RotationMatrixRow.msg @@ -0,0 +1,4 @@ + +float32 column1 +float32 column2 +float32 column3 \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/Base_SafetyIdentifier.msg b/kortex_driver/msg/generated/base/Base_SafetyIdentifier.msg new file mode 100644 index 00000000..b33eefbb --- /dev/null +++ b/kortex_driver/msg/generated/base/Base_SafetyIdentifier.msg @@ -0,0 +1,64 @@ + +uint32 UNSPECIFIED_BASE_SAFETY_IDENTIFIER = 0 + +uint32 FIRMWARE_UPDATE_FAILURE = 1 + +uint32 EXTERNAL_COMMUNICATION_ERROR = 2 + +uint32 MAXIMUM_AMBIENT_TEMPERATURE = 4 + +uint32 MAXIMUM_CORE_TEMPERATURE = 8 + +uint32 JOINT_FAULT = 16 + +uint32 CYCLIC_DATA_JITTER = 32 + +uint32 REACHED_MAXIMUM_EVENT_LOGS = 64 + +uint32 NO_KINEMATICS_SUPPORT = 128 + +uint32 ABOVE_MAXIMUM_DOF = 256 + +uint32 NETWORK_ERROR = 512 + +uint32 UNABLE_TO_REACH_POSE = 1024 + +uint32 JOINT_DETECTION_ERROR = 2048 + +uint32 NETWORK_INITIALIZATION_ERROR = 4096 + +uint32 MAXIMUM_CURRENT = 8192 + +uint32 MAXIMUM_VOLTAGE = 16384 + +uint32 MINIMUM_VOLTAGE = 32768 + +uint32 MAXIMUM_END_EFFECTOR_TRANSLATION_VELOCITY = 65536 + +uint32 MAXIMUM_END_EFFECTOR_ORIENTATION_VELOCITY = 131072 + +uint32 MAXIMUM_END_EFFECTOR_TRANSLATION_ACCELERATION = 262144 + +uint32 MAXIMUM_END_EFFECTOR_ORIENTATION_ACCELERATION = 524288 + +uint32 MAXIMUM_END_EFFECTOR_TRANSLATION_FORCE = 1048576 + +uint32 MAXIMUM_END_EFFECTOR_ORIENTATION_FORCE = 2097152 + +uint32 MAXIMUM_END_EFFECTOR_PAYLOAD = 4194304 + +uint32 EMERGENCY_STOP_ACTIVATED = 8388608 + +uint32 EMERGENCY_LINE_ACTIVATED = 16777216 + +uint32 INRUSH_CURRENT_LIMITER_FAULT = 33554432 + +uint32 NVRAM_CORRUPTED = 67108864 + +uint32 INCOMPATIBLE_FIRMWARE_VERSION = 134217728 + +uint32 POWERON_SELF_TEST_FAILURE = 268435456 + +uint32 DISCRETE_INPUT_STUCK_ACTIVE = 536870912 + +uint32 ARM_INTO_ILLEGAL_POSITION = 1073741824 diff --git a/kortex_driver/msg/ServiceVersion.msg b/kortex_driver/msg/generated/base/Base_ServiceVersion.msg similarity index 100% rename from kortex_driver/msg/ServiceVersion.msg rename to kortex_driver/msg/generated/base/Base_ServiceVersion.msg diff --git a/kortex_actuator_driver/build/.gitignore b/kortex_driver/msg/generated/base/Base_Stop.msg similarity index 100% rename from kortex_actuator_driver/build/.gitignore rename to kortex_driver/msg/generated/base/Base_Stop.msg diff --git a/kortex_driver/msg/generated/base/BridgeConfig.msg b/kortex_driver/msg/generated/base/BridgeConfig.msg new file mode 100644 index 00000000..e3b6f51d --- /dev/null +++ b/kortex_driver/msg/generated/base/BridgeConfig.msg @@ -0,0 +1,5 @@ + +uint32 device_identifier +uint32 bridgetype +BridgePortConfig port_config +BridgeIdentifier bridge_id \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/BridgeIdentifier.msg b/kortex_driver/msg/generated/base/BridgeIdentifier.msg new file mode 100644 index 00000000..13dd1872 --- /dev/null +++ b/kortex_driver/msg/generated/base/BridgeIdentifier.msg @@ -0,0 +1,2 @@ + +uint32 bridge_id \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/BridgeList.msg b/kortex_driver/msg/generated/base/BridgeList.msg new file mode 100644 index 00000000..dfb210ef --- /dev/null +++ b/kortex_driver/msg/generated/base/BridgeList.msg @@ -0,0 +1,2 @@ + +BridgeConfig[] bridgeConfig \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/BridgePortConfig.msg b/kortex_driver/msg/generated/base/BridgePortConfig.msg new file mode 100644 index 00000000..af1940c3 --- /dev/null +++ b/kortex_driver/msg/generated/base/BridgePortConfig.msg @@ -0,0 +1,3 @@ + +uint32 target_port +uint32 out_port \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/BridgeResult.msg b/kortex_driver/msg/generated/base/BridgeResult.msg new file mode 100644 index 00000000..c5f383e4 --- /dev/null +++ b/kortex_driver/msg/generated/base/BridgeResult.msg @@ -0,0 +1,3 @@ + +BridgeIdentifier bridge_id +uint32 status \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/BridgeStatus.msg b/kortex_driver/msg/generated/base/BridgeStatus.msg new file mode 100644 index 00000000..50e64149 --- /dev/null +++ b/kortex_driver/msg/generated/base/BridgeStatus.msg @@ -0,0 +1,14 @@ + +uint32 BRIDGE_STATUS_OK = 0 + +uint32 BRIDGE_STATUS_OUTP_UNAVAILABLE = 1 + +uint32 BRIDGE_STATUS_UNKNOWN_DEVID = 2 + +uint32 BRIDGE_STATUS_UNKNOWN_BRIDGE_TYPE = 3 + +uint32 BRIDGE_STATUS_NOT_FOUND = 4 + +uint32 BRIDGE_STATUS_NOT_INITIALIZED = 5 + +uint32 BRIDGE_STATUS_UNKNOWN = 6 diff --git a/kortex_driver/msg/generated/base/BridgeType.msg b/kortex_driver/msg/generated/base/BridgeType.msg new file mode 100644 index 00000000..be189192 --- /dev/null +++ b/kortex_driver/msg/generated/base/BridgeType.msg @@ -0,0 +1,6 @@ + +uint32 BRIDGE_TYPE_UNSPECIFIED = 0 + +uint32 BRIDGE_TYPE_UART = 1 + +uint32 BRIDGE_TYPE_TELNET = 2 diff --git a/kortex_driver/msg/generated/base/CartesianLimitation.msg b/kortex_driver/msg/generated/base/CartesianLimitation.msg new file mode 100644 index 00000000..110e361d --- /dev/null +++ b/kortex_driver/msg/generated/base/CartesianLimitation.msg @@ -0,0 +1,4 @@ + +uint32 type +float32 translation +float32 orientation \ No newline at end of file diff --git a/kortex_driver/msg/CartesianLimitationList.msg b/kortex_driver/msg/generated/base/CartesianLimitationList.msg similarity index 97% rename from kortex_driver/msg/CartesianLimitationList.msg rename to kortex_driver/msg/generated/base/CartesianLimitationList.msg index 5ae6e2ab..d6ce6bb4 100644 --- a/kortex_driver/msg/CartesianLimitationList.msg +++ b/kortex_driver/msg/generated/base/CartesianLimitationList.msg @@ -1,3 +1,2 @@ - CartesianLimitation[] limitations \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/CartesianSpeed.msg b/kortex_driver/msg/generated/base/CartesianSpeed.msg new file mode 100644 index 00000000..f8794b7e --- /dev/null +++ b/kortex_driver/msg/generated/base/CartesianSpeed.msg @@ -0,0 +1,3 @@ + +float32 translation +float32 orientation \ No newline at end of file diff --git a/kortex_driver/msg/CartesianTrajectoryConstraint.msg b/kortex_driver/msg/generated/base/CartesianTrajectoryConstraint.msg similarity index 100% rename from kortex_driver/msg/CartesianTrajectoryConstraint.msg rename to kortex_driver/msg/generated/base/CartesianTrajectoryConstraint.msg diff --git a/kortex_driver/msg/CartesianTrajectoryConstraint_type.msg b/kortex_driver/msg/generated/base/CartesianTrajectoryConstraint_type.msg similarity index 97% rename from kortex_driver/msg/CartesianTrajectoryConstraint_type.msg rename to kortex_driver/msg/generated/base/CartesianTrajectoryConstraint_type.msg index 5346af8c..10e7f9d4 100644 --- a/kortex_driver/msg/CartesianTrajectoryConstraint_type.msg +++ b/kortex_driver/msg/generated/base/CartesianTrajectoryConstraint_type.msg @@ -1,4 +1,3 @@ - CartesianSpeed[] speed uint32[] duration \ No newline at end of file diff --git a/kortex_driver/msg/ChangeJointSpeeds.msg b/kortex_driver/msg/generated/base/ChangeJointSpeeds.msg similarity index 96% rename from kortex_driver/msg/ChangeJointSpeeds.msg rename to kortex_driver/msg/generated/base/ChangeJointSpeeds.msg index c6f65586..8fcf5341 100644 --- a/kortex_driver/msg/ChangeJointSpeeds.msg +++ b/kortex_driver/msg/generated/base/ChangeJointSpeeds.msg @@ -1,3 +1,2 @@ - JointSpeeds joint_speeds \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/ChangeTwist.msg b/kortex_driver/msg/generated/base/ChangeTwist.msg new file mode 100644 index 00000000..71d333a8 --- /dev/null +++ b/kortex_driver/msg/generated/base/ChangeTwist.msg @@ -0,0 +1,3 @@ + +float32 linear +float32 angular \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/ChangeWrench.msg b/kortex_driver/msg/generated/base/ChangeWrench.msg new file mode 100644 index 00000000..1d7a9731 --- /dev/null +++ b/kortex_driver/msg/generated/base/ChangeWrench.msg @@ -0,0 +1,3 @@ + +float32 force +float32 torque \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/CommunicationInterfaceConfiguration.msg b/kortex_driver/msg/generated/base/CommunicationInterfaceConfiguration.msg new file mode 100644 index 00000000..c79d2205 --- /dev/null +++ b/kortex_driver/msg/generated/base/CommunicationInterfaceConfiguration.msg @@ -0,0 +1,3 @@ + +uint32 type +bool enable \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/ConfigurationChangeNotification.msg b/kortex_driver/msg/generated/base/ConfigurationChangeNotification.msg new file mode 100644 index 00000000..fa8893b4 --- /dev/null +++ b/kortex_driver/msg/generated/base/ConfigurationChangeNotification.msg @@ -0,0 +1,6 @@ + +uint32 event +Timestamp timestamp +UserProfileHandle user_handle +Connection connection +ConfigurationChangeNotification_configuration_change oneof_configuration_change \ No newline at end of file diff --git a/kortex_driver/msg/ConfigurationChangeNotificationList.msg b/kortex_driver/msg/generated/base/ConfigurationChangeNotificationList.msg similarity index 97% rename from kortex_driver/msg/ConfigurationChangeNotificationList.msg rename to kortex_driver/msg/generated/base/ConfigurationChangeNotificationList.msg index 120fcbbc..a1952ba8 100644 --- a/kortex_driver/msg/ConfigurationChangeNotificationList.msg +++ b/kortex_driver/msg/generated/base/ConfigurationChangeNotificationList.msg @@ -1,3 +1,2 @@ - ConfigurationChangeNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/ConfigurationChangeNotification_configuration_change.msg b/kortex_driver/msg/generated/base/ConfigurationChangeNotification_configuration_change.msg new file mode 100644 index 00000000..bd3db1c4 --- /dev/null +++ b/kortex_driver/msg/generated/base/ConfigurationChangeNotification_configuration_change.msg @@ -0,0 +1,11 @@ + +SequenceHandle[] sequence_handle +ActionHandle[] action_handle +MappingHandle[] mapping_handle +MapGroupHandle[] map_group_handle +MapHandle[] map_handle +UserProfileHandle[] user_profile_handle +ProtectionZoneHandle[] protection_zone_handle +SafetyHandle[] safety_handle +NetworkHandle[] network_handle +Ssid[] ssid \ No newline at end of file diff --git a/kortex_driver/msg/ConfigurationNotificationEvent.msg b/kortex_driver/msg/generated/base/ConfigurationNotificationEvent.msg similarity index 100% rename from kortex_driver/msg/ConfigurationNotificationEvent.msg rename to kortex_driver/msg/generated/base/ConfigurationNotificationEvent.msg diff --git a/kortex_driver/msg/generated/base/ConstrainedJointAngle.msg b/kortex_driver/msg/generated/base/ConstrainedJointAngle.msg new file mode 100644 index 00000000..d93fe84f --- /dev/null +++ b/kortex_driver/msg/generated/base/ConstrainedJointAngle.msg @@ -0,0 +1,4 @@ + +uint32 joint_identifier +float32 value +JointTrajectoryConstraint constraint \ No newline at end of file diff --git a/kortex_driver/msg/ConstrainedJointAngles.msg b/kortex_driver/msg/generated/base/ConstrainedJointAngles.msg similarity index 96% rename from kortex_driver/msg/ConstrainedJointAngles.msg rename to kortex_driver/msg/generated/base/ConstrainedJointAngles.msg index 2d1c3a17..944fc891 100644 --- a/kortex_driver/msg/ConstrainedJointAngles.msg +++ b/kortex_driver/msg/generated/base/ConstrainedJointAngles.msg @@ -1,5 +1,3 @@ - JointAngles joint_angles - JointTrajectoryConstraint constraint \ No newline at end of file diff --git a/kortex_driver/msg/ConstrainedOrientation.msg b/kortex_driver/msg/generated/base/ConstrainedOrientation.msg similarity index 97% rename from kortex_driver/msg/ConstrainedOrientation.msg rename to kortex_driver/msg/generated/base/ConstrainedOrientation.msg index 3d45805e..51ad615f 100644 --- a/kortex_driver/msg/ConstrainedOrientation.msg +++ b/kortex_driver/msg/generated/base/ConstrainedOrientation.msg @@ -1,5 +1,3 @@ - Orientation target_orientation - CartesianTrajectoryConstraint constraint \ No newline at end of file diff --git a/kortex_driver/msg/ConstrainedPose.msg b/kortex_driver/msg/generated/base/ConstrainedPose.msg similarity index 96% rename from kortex_driver/msg/ConstrainedPose.msg rename to kortex_driver/msg/generated/base/ConstrainedPose.msg index 4dc894f8..63b595e2 100644 --- a/kortex_driver/msg/ConstrainedPose.msg +++ b/kortex_driver/msg/generated/base/ConstrainedPose.msg @@ -1,5 +1,3 @@ - Pose target_pose - CartesianTrajectoryConstraint constraint \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/ConstrainedPosition.msg b/kortex_driver/msg/generated/base/ConstrainedPosition.msg new file mode 100644 index 00000000..3601accd --- /dev/null +++ b/kortex_driver/msg/generated/base/ConstrainedPosition.msg @@ -0,0 +1,3 @@ + +Base_Position target_position +CartesianTrajectoryConstraint constraint \ No newline at end of file diff --git a/kortex_driver/msg/ControlModeNotification.msg b/kortex_driver/msg/generated/base/ControlModeNotification.msg similarity index 95% rename from kortex_driver/msg/ControlModeNotification.msg rename to kortex_driver/msg/generated/base/ControlModeNotification.msg index aa8fae5b..802d67ad 100644 --- a/kortex_driver/msg/ControlModeNotification.msg +++ b/kortex_driver/msg/generated/base/ControlModeNotification.msg @@ -1,9 +1,5 @@ - uint32 control_mode - Timestamp timestamp - UserProfileHandle user_handle - Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/ControlModeNotificationList.msg b/kortex_driver/msg/generated/base/ControlModeNotificationList.msg similarity index 97% rename from kortex_driver/msg/ControlModeNotificationList.msg rename to kortex_driver/msg/generated/base/ControlModeNotificationList.msg index 14938d84..ac035c88 100644 --- a/kortex_driver/msg/ControlModeNotificationList.msg +++ b/kortex_driver/msg/generated/base/ControlModeNotificationList.msg @@ -1,3 +1,2 @@ - ControlModeNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/ControllerBehavior.msg b/kortex_driver/msg/generated/base/ControllerBehavior.msg similarity index 100% rename from kortex_driver/msg/ControllerBehavior.msg rename to kortex_driver/msg/generated/base/ControllerBehavior.msg diff --git a/kortex_driver/msg/ControllerElementEventType.msg b/kortex_driver/msg/generated/base/ControllerElementEventType.msg similarity index 100% rename from kortex_driver/msg/ControllerElementEventType.msg rename to kortex_driver/msg/generated/base/ControllerElementEventType.msg diff --git a/kortex_driver/msg/ControllerElementHandle.msg b/kortex_driver/msg/generated/base/ControllerElementHandle.msg similarity index 98% rename from kortex_driver/msg/ControllerElementHandle.msg rename to kortex_driver/msg/generated/base/ControllerElementHandle.msg index 61946e5f..c9be3fb1 100644 --- a/kortex_driver/msg/ControllerElementHandle.msg +++ b/kortex_driver/msg/generated/base/ControllerElementHandle.msg @@ -1,4 +1,3 @@ - ControllerHandle controller_handle ControllerElementHandle_identifier oneof_identifier \ No newline at end of file diff --git a/kortex_driver/msg/ControllerElementHandle_identifier.msg b/kortex_driver/msg/generated/base/ControllerElementHandle_identifier.msg similarity index 100% rename from kortex_driver/msg/ControllerElementHandle_identifier.msg rename to kortex_driver/msg/generated/base/ControllerElementHandle_identifier.msg diff --git a/kortex_driver/msg/generated/base/ControllerElementState.msg b/kortex_driver/msg/generated/base/ControllerElementState.msg new file mode 100644 index 00000000..ada62b68 --- /dev/null +++ b/kortex_driver/msg/generated/base/ControllerElementState.msg @@ -0,0 +1,4 @@ + +ControllerElementHandle handle +uint32 event_type +float32 axis_value \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/ControllerEvent.msg b/kortex_driver/msg/generated/base/ControllerEvent.msg new file mode 100644 index 00000000..6dae8984 --- /dev/null +++ b/kortex_driver/msg/generated/base/ControllerEvent.msg @@ -0,0 +1,4 @@ + +uint32 input_type +uint32 behavior +uint32 input_identifier \ No newline at end of file diff --git a/kortex_driver/msg/ControllerEventType.msg b/kortex_driver/msg/generated/base/ControllerEventType.msg similarity index 100% rename from kortex_driver/msg/ControllerEventType.msg rename to kortex_driver/msg/generated/base/ControllerEventType.msg diff --git a/kortex_driver/msg/generated/base/ControllerHandle.msg b/kortex_driver/msg/generated/base/ControllerHandle.msg new file mode 100644 index 00000000..e77bf890 --- /dev/null +++ b/kortex_driver/msg/generated/base/ControllerHandle.msg @@ -0,0 +1,3 @@ + +uint32 type +uint32 controller_identifier \ No newline at end of file diff --git a/kortex_driver/msg/ControllerInputType.msg b/kortex_driver/msg/generated/base/ControllerInputType.msg similarity index 100% rename from kortex_driver/msg/ControllerInputType.msg rename to kortex_driver/msg/generated/base/ControllerInputType.msg diff --git a/kortex_driver/msg/ControllerList.msg b/kortex_driver/msg/generated/base/ControllerList.msg similarity index 96% rename from kortex_driver/msg/ControllerList.msg rename to kortex_driver/msg/generated/base/ControllerList.msg index d94f3f0b..d92dc3cd 100644 --- a/kortex_driver/msg/ControllerList.msg +++ b/kortex_driver/msg/generated/base/ControllerList.msg @@ -1,3 +1,2 @@ - ControllerHandle[] handles \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/ControllerNotification.msg b/kortex_driver/msg/generated/base/ControllerNotification.msg new file mode 100644 index 00000000..92f04791 --- /dev/null +++ b/kortex_driver/msg/generated/base/ControllerNotification.msg @@ -0,0 +1,5 @@ + +Timestamp timestamp +UserProfileHandle user_handle +Connection connection +ControllerNotification_state oneof_state \ No newline at end of file diff --git a/kortex_driver/msg/ControllerNotificationList.msg b/kortex_driver/msg/generated/base/ControllerNotificationList.msg similarity index 97% rename from kortex_driver/msg/ControllerNotificationList.msg rename to kortex_driver/msg/generated/base/ControllerNotificationList.msg index 33b1a336..dd78563b 100644 --- a/kortex_driver/msg/ControllerNotificationList.msg +++ b/kortex_driver/msg/generated/base/ControllerNotificationList.msg @@ -1,3 +1,2 @@ - ControllerNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/ControllerNotification_state.msg b/kortex_driver/msg/generated/base/ControllerNotification_state.msg new file mode 100644 index 00000000..6ea1711f --- /dev/null +++ b/kortex_driver/msg/generated/base/ControllerNotification_state.msg @@ -0,0 +1,3 @@ + +ControllerState[] controller_state +ControllerElementState[] controller_element \ No newline at end of file diff --git a/kortex_driver/msg/ControllerState.msg b/kortex_driver/msg/generated/base/ControllerState.msg similarity index 95% rename from kortex_driver/msg/ControllerState.msg rename to kortex_driver/msg/generated/base/ControllerState.msg index 01ee23ac..416d9ec3 100644 --- a/kortex_driver/msg/ControllerState.msg +++ b/kortex_driver/msg/generated/base/ControllerState.msg @@ -1,5 +1,3 @@ - ControllerHandle handle - uint32 event_type \ No newline at end of file diff --git a/kortex_driver/msg/ControllerType.msg b/kortex_driver/msg/generated/base/ControllerType.msg similarity index 78% rename from kortex_driver/msg/ControllerType.msg rename to kortex_driver/msg/generated/base/ControllerType.msg index 102c28c0..f902299f 100644 --- a/kortex_driver/msg/ControllerType.msg +++ b/kortex_driver/msg/generated/base/ControllerType.msg @@ -4,3 +4,5 @@ uint32 UNSPECIFIED_CONTROLLER_TYPE = 0 uint32 XBOX_CONTROLLER = 1 uint32 WRIST_CONTROLLER = 2 + +uint32 GPIO_JOYSTICK = 3 diff --git a/kortex_driver/msg/Delay.msg b/kortex_driver/msg/generated/base/Delay.msg similarity index 88% rename from kortex_driver/msg/Delay.msg rename to kortex_driver/msg/generated/base/Delay.msg index dbff7d1e..7e50d0f9 100644 --- a/kortex_driver/msg/Delay.msg +++ b/kortex_driver/msg/generated/base/Delay.msg @@ -1,2 +1,2 @@ - + uint32 duration \ No newline at end of file diff --git a/kortex_driver/msg/EmergencyStop.msg b/kortex_driver/msg/generated/base/EmergencyStop.msg similarity index 100% rename from kortex_driver/msg/EmergencyStop.msg rename to kortex_driver/msg/generated/base/EmergencyStop.msg diff --git a/kortex_driver/msg/EventIdSequenceInfoNotification.msg b/kortex_driver/msg/generated/base/EventIdSequenceInfoNotification.msg similarity index 100% rename from kortex_driver/msg/EventIdSequenceInfoNotification.msg rename to kortex_driver/msg/generated/base/EventIdSequenceInfoNotification.msg diff --git a/kortex_driver/msg/FactoryEvent.msg b/kortex_driver/msg/generated/base/FactoryEvent.msg similarity index 100% rename from kortex_driver/msg/FactoryEvent.msg rename to kortex_driver/msg/generated/base/FactoryEvent.msg diff --git a/kortex_driver/msg/FactoryNotification.msg b/kortex_driver/msg/generated/base/FactoryNotification.msg similarity index 95% rename from kortex_driver/msg/FactoryNotification.msg rename to kortex_driver/msg/generated/base/FactoryNotification.msg index 40a0c973..38635725 100644 --- a/kortex_driver/msg/FactoryNotification.msg +++ b/kortex_driver/msg/generated/base/FactoryNotification.msg @@ -1,9 +1,5 @@ - uint32 event - Timestamp timestamp - UserProfileHandle user_handle - Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/Faults.msg b/kortex_driver/msg/generated/base/Faults.msg similarity index 100% rename from kortex_driver/msg/Faults.msg rename to kortex_driver/msg/generated/base/Faults.msg diff --git a/kortex_driver/msg/generated/base/Finger.msg b/kortex_driver/msg/generated/base/Finger.msg new file mode 100644 index 00000000..e641006e --- /dev/null +++ b/kortex_driver/msg/generated/base/Finger.msg @@ -0,0 +1,3 @@ + +uint32 finger_identifier +float32 value \ No newline at end of file diff --git a/kortex_driver/msg/FullIPv4Configuration.msg b/kortex_driver/msg/generated/base/FullIPv4Configuration.msg similarity index 96% rename from kortex_driver/msg/FullIPv4Configuration.msg rename to kortex_driver/msg/generated/base/FullIPv4Configuration.msg index f364c6a3..e742d689 100644 --- a/kortex_driver/msg/FullIPv4Configuration.msg +++ b/kortex_driver/msg/generated/base/FullIPv4Configuration.msg @@ -1,5 +1,3 @@ - NetworkHandle handle - IPv4Configuration ipv4_configuration \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/FullUserProfile.msg b/kortex_driver/msg/generated/base/FullUserProfile.msg new file mode 100644 index 00000000..62dab01b --- /dev/null +++ b/kortex_driver/msg/generated/base/FullUserProfile.msg @@ -0,0 +1,3 @@ + +UserProfile user_profile +string password \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/GpioEvent.msg b/kortex_driver/msg/generated/base/GpioEvent.msg new file mode 100644 index 00000000..8b99ecfc --- /dev/null +++ b/kortex_driver/msg/generated/base/GpioEvent.msg @@ -0,0 +1,3 @@ + +uint32 gpio_state +uint32 device_identifier \ No newline at end of file diff --git a/kortex_driver/msg/GpioState.msg b/kortex_driver/msg/generated/base/GpioState.msg similarity index 100% rename from kortex_driver/msg/GpioState.msg rename to kortex_driver/msg/generated/base/GpioState.msg diff --git a/kortex_driver/msg/Gripper.msg b/kortex_driver/msg/generated/base/Gripper.msg similarity index 94% rename from kortex_driver/msg/Gripper.msg rename to kortex_driver/msg/generated/base/Gripper.msg index 73be9791..71f808f0 100644 --- a/kortex_driver/msg/Gripper.msg +++ b/kortex_driver/msg/generated/base/Gripper.msg @@ -1,3 +1,2 @@ - Finger[] finger \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/GripperCommand.msg b/kortex_driver/msg/generated/base/GripperCommand.msg new file mode 100644 index 00000000..b105fb77 --- /dev/null +++ b/kortex_driver/msg/generated/base/GripperCommand.msg @@ -0,0 +1,4 @@ + +uint32 mode +Gripper gripper +uint32 duration \ No newline at end of file diff --git a/kortex_driver/msg/GripperMode.msg b/kortex_driver/msg/generated/base/GripperMode.msg similarity index 100% rename from kortex_driver/msg/GripperMode.msg rename to kortex_driver/msg/generated/base/GripperMode.msg diff --git a/kortex_driver/msg/GripperRequest.msg b/kortex_driver/msg/generated/base/GripperRequest.msg similarity index 92% rename from kortex_driver/msg/GripperRequest.msg rename to kortex_driver/msg/generated/base/GripperRequest.msg index bdde570c..6342d920 100644 --- a/kortex_driver/msg/GripperRequest.msg +++ b/kortex_driver/msg/generated/base/GripperRequest.msg @@ -1,3 +1,2 @@ - uint32 mode \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/IPv4Configuration.msg b/kortex_driver/msg/generated/base/IPv4Configuration.msg new file mode 100644 index 00000000..c8785c98 --- /dev/null +++ b/kortex_driver/msg/generated/base/IPv4Configuration.msg @@ -0,0 +1,5 @@ + +uint32 ip_address +uint32 subnet_mask +uint32 default_gateway +bool dhcp_enabled \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/IPv4Information.msg b/kortex_driver/msg/generated/base/IPv4Information.msg new file mode 100644 index 00000000..30fe098b --- /dev/null +++ b/kortex_driver/msg/generated/base/IPv4Information.msg @@ -0,0 +1,4 @@ + +uint32 ip_address +uint32 subnet_mask +uint32 default_gateway \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/JointAngle.msg b/kortex_driver/msg/generated/base/JointAngle.msg new file mode 100644 index 00000000..3222a0bb --- /dev/null +++ b/kortex_driver/msg/generated/base/JointAngle.msg @@ -0,0 +1,3 @@ + +uint32 joint_identifier +float32 value \ No newline at end of file diff --git a/kortex_driver/msg/JointAngles.msg b/kortex_driver/msg/generated/base/JointAngles.msg similarity index 96% rename from kortex_driver/msg/JointAngles.msg rename to kortex_driver/msg/generated/base/JointAngles.msg index fe457738..cbb0ec1c 100644 --- a/kortex_driver/msg/JointAngles.msg +++ b/kortex_driver/msg/generated/base/JointAngles.msg @@ -1,3 +1,2 @@ - JointAngle[] joint_angles \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/JointLimitation.msg b/kortex_driver/msg/generated/base/JointLimitation.msg new file mode 100644 index 00000000..635aaa57 --- /dev/null +++ b/kortex_driver/msg/generated/base/JointLimitation.msg @@ -0,0 +1,4 @@ + +uint32 joint_identifier +uint32 type +float32 value \ No newline at end of file diff --git a/kortex_driver/msg/JointNavigationDirection.msg b/kortex_driver/msg/generated/base/JointNavigationDirection.msg similarity index 100% rename from kortex_driver/msg/JointNavigationDirection.msg rename to kortex_driver/msg/generated/base/JointNavigationDirection.msg diff --git a/kortex_driver/msg/generated/base/JointSpeed.msg b/kortex_driver/msg/generated/base/JointSpeed.msg new file mode 100644 index 00000000..44d36519 --- /dev/null +++ b/kortex_driver/msg/generated/base/JointSpeed.msg @@ -0,0 +1,4 @@ + +uint32 joint_identifier +float32 value +uint32 duration \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/JointSpeeds.msg b/kortex_driver/msg/generated/base/JointSpeeds.msg new file mode 100644 index 00000000..6bb78811 --- /dev/null +++ b/kortex_driver/msg/generated/base/JointSpeeds.msg @@ -0,0 +1,3 @@ + +JointSpeed[] joint_speeds +uint32 duration \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/JointTorque.msg b/kortex_driver/msg/generated/base/JointTorque.msg new file mode 100644 index 00000000..44d36519 --- /dev/null +++ b/kortex_driver/msg/generated/base/JointTorque.msg @@ -0,0 +1,4 @@ + +uint32 joint_identifier +float32 value +uint32 duration \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/JointTorques.msg b/kortex_driver/msg/generated/base/JointTorques.msg new file mode 100644 index 00000000..7294fa50 --- /dev/null +++ b/kortex_driver/msg/generated/base/JointTorques.msg @@ -0,0 +1,3 @@ + +JointTorque[] joint_torques +uint32 duration \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/JointTrajectoryConstraint.msg b/kortex_driver/msg/generated/base/JointTrajectoryConstraint.msg new file mode 100644 index 00000000..5ec8ddf3 --- /dev/null +++ b/kortex_driver/msg/generated/base/JointTrajectoryConstraint.msg @@ -0,0 +1,3 @@ + +uint32 type +float32 value \ No newline at end of file diff --git a/kortex_driver/msg/JointTrajectoryConstraintType.msg b/kortex_driver/msg/generated/base/JointTrajectoryConstraintType.msg similarity index 100% rename from kortex_driver/msg/JointTrajectoryConstraintType.msg rename to kortex_driver/msg/generated/base/JointTrajectoryConstraintType.msg diff --git a/kortex_driver/msg/generated/base/JointsLimitationsList.msg b/kortex_driver/msg/generated/base/JointsLimitationsList.msg new file mode 100644 index 00000000..26d8264a --- /dev/null +++ b/kortex_driver/msg/generated/base/JointsLimitationsList.msg @@ -0,0 +1,2 @@ + +JointLimitation[] joints_limitations \ No newline at end of file diff --git a/kortex_driver/msg/LedState.msg b/kortex_driver/msg/generated/base/LedState.msg similarity index 100% rename from kortex_driver/msg/LedState.msg rename to kortex_driver/msg/generated/base/LedState.msg diff --git a/kortex_driver/msg/LimitationType.msg b/kortex_driver/msg/generated/base/LimitationType.msg similarity index 81% rename from kortex_driver/msg/LimitationType.msg rename to kortex_driver/msg/generated/base/LimitationType.msg index 04f709c9..c6ddcb2a 100644 --- a/kortex_driver/msg/LimitationType.msg +++ b/kortex_driver/msg/generated/base/LimitationType.msg @@ -6,3 +6,5 @@ uint32 FORCE_LIMITATION = 1 uint32 ACCELERATION_LIMITATION = 2 uint32 VELOCITY_LIMITATION = 3 + +uint32 TORQUE_LIMITATION = 4 diff --git a/kortex_driver/msg/generated/base/Map.msg b/kortex_driver/msg/generated/base/Map.msg new file mode 100644 index 00000000..d4631471 --- /dev/null +++ b/kortex_driver/msg/generated/base/Map.msg @@ -0,0 +1,4 @@ + +MapHandle handle +string name +MapElement[] elements \ No newline at end of file diff --git a/kortex_driver/msg/MapElement.msg b/kortex_driver/msg/generated/base/MapElement.msg similarity index 93% rename from kortex_driver/msg/MapElement.msg rename to kortex_driver/msg/generated/base/MapElement.msg index efa91ae5..2f4e6845 100644 --- a/kortex_driver/msg/MapElement.msg +++ b/kortex_driver/msg/generated/base/MapElement.msg @@ -1,5 +1,3 @@ - MapEvent event - Action action \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/MapEvent.msg b/kortex_driver/msg/generated/base/MapEvent.msg new file mode 100644 index 00000000..b1e135d9 --- /dev/null +++ b/kortex_driver/msg/generated/base/MapEvent.msg @@ -0,0 +1,3 @@ + +string name +MapEvent_events oneof_events \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/MapEvent_events.msg b/kortex_driver/msg/generated/base/MapEvent_events.msg new file mode 100644 index 00000000..07b41be9 --- /dev/null +++ b/kortex_driver/msg/generated/base/MapEvent_events.msg @@ -0,0 +1,4 @@ + +SafetyEvent[] safety_event +GpioEvent[] gpio_event +ControllerEvent[] controller_event \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/MapGroup.msg b/kortex_driver/msg/generated/base/MapGroup.msg new file mode 100644 index 00000000..f9f22cff --- /dev/null +++ b/kortex_driver/msg/generated/base/MapGroup.msg @@ -0,0 +1,8 @@ + +MapGroupHandle group_handle +string name +MappingHandle related_mapping_handle +MapGroupHandle parent_group_handle +MapGroupHandle[] children_map_group_handles +MapHandle[] map_handles +string application_data \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/MapGroupHandle.msg b/kortex_driver/msg/generated/base/MapGroupHandle.msg new file mode 100644 index 00000000..4d2b97e1 --- /dev/null +++ b/kortex_driver/msg/generated/base/MapGroupHandle.msg @@ -0,0 +1,3 @@ + +uint32 identifier +uint32 permission \ No newline at end of file diff --git a/kortex_driver/msg/MapGroupList.msg b/kortex_driver/msg/generated/base/MapGroupList.msg similarity index 95% rename from kortex_driver/msg/MapGroupList.msg rename to kortex_driver/msg/generated/base/MapGroupList.msg index e2f32b1d..faa782a7 100644 --- a/kortex_driver/msg/MapGroupList.msg +++ b/kortex_driver/msg/generated/base/MapGroupList.msg @@ -1,3 +1,2 @@ - MapGroup[] map_groups \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/MapHandle.msg b/kortex_driver/msg/generated/base/MapHandle.msg new file mode 100644 index 00000000..4d2b97e1 --- /dev/null +++ b/kortex_driver/msg/generated/base/MapHandle.msg @@ -0,0 +1,3 @@ + +uint32 identifier +uint32 permission \ No newline at end of file diff --git a/kortex_driver/msg/MapList.msg b/kortex_driver/msg/generated/base/MapList.msg similarity index 93% rename from kortex_driver/msg/MapList.msg rename to kortex_driver/msg/generated/base/MapList.msg index dbcc9900..2a286050 100644 --- a/kortex_driver/msg/MapList.msg +++ b/kortex_driver/msg/generated/base/MapList.msg @@ -1,3 +1,2 @@ - Map[] map_list \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/Mapping.msg b/kortex_driver/msg/generated/base/Mapping.msg new file mode 100644 index 00000000..ca26029f --- /dev/null +++ b/kortex_driver/msg/generated/base/Mapping.msg @@ -0,0 +1,9 @@ + +MappingHandle handle +string name +uint32 controller_identifier +MapGroupHandle active_map_group_handle +MapGroupHandle[] map_group_handles +MapHandle active_map_handle +MapHandle[] map_handles +string application_data \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/MappingHandle.msg b/kortex_driver/msg/generated/base/MappingHandle.msg new file mode 100644 index 00000000..4d2b97e1 --- /dev/null +++ b/kortex_driver/msg/generated/base/MappingHandle.msg @@ -0,0 +1,3 @@ + +uint32 identifier +uint32 permission \ No newline at end of file diff --git a/kortex_driver/msg/MappingInfoNotification.msg b/kortex_driver/msg/generated/base/MappingInfoNotification.msg similarity index 96% rename from kortex_driver/msg/MappingInfoNotification.msg rename to kortex_driver/msg/generated/base/MappingInfoNotification.msg index b33d1de5..8f42376b 100644 --- a/kortex_driver/msg/MappingInfoNotification.msg +++ b/kortex_driver/msg/generated/base/MappingInfoNotification.msg @@ -1,10 +1,6 @@ - -uint32 controller_identifier +uint32 controller_identifier MapHandle active_map_handle - Timestamp timestamp - UserProfileHandle user_handle - Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/MappingInfoNotificationList.msg b/kortex_driver/msg/generated/base/MappingInfoNotificationList.msg similarity index 97% rename from kortex_driver/msg/MappingInfoNotificationList.msg rename to kortex_driver/msg/generated/base/MappingInfoNotificationList.msg index 07fa3da4..fd0e5c95 100644 --- a/kortex_driver/msg/MappingInfoNotificationList.msg +++ b/kortex_driver/msg/generated/base/MappingInfoNotificationList.msg @@ -1,3 +1,2 @@ - MappingInfoNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/MappingList.msg b/kortex_driver/msg/generated/base/MappingList.msg similarity index 95% rename from kortex_driver/msg/MappingList.msg rename to kortex_driver/msg/generated/base/MappingList.msg index b8ac2cce..82400226 100644 --- a/kortex_driver/msg/MappingList.msg +++ b/kortex_driver/msg/generated/base/MappingList.msg @@ -1,3 +1,2 @@ - Mapping[] mappings \ No newline at end of file diff --git a/kortex_driver/msg/NavigationDirection.msg b/kortex_driver/msg/generated/base/NavigationDirection.msg similarity index 100% rename from kortex_driver/msg/NavigationDirection.msg rename to kortex_driver/msg/generated/base/NavigationDirection.msg diff --git a/kortex_driver/msg/NetworkEvent.msg b/kortex_driver/msg/generated/base/NetworkEvent.msg similarity index 100% rename from kortex_driver/msg/NetworkEvent.msg rename to kortex_driver/msg/generated/base/NetworkEvent.msg diff --git a/kortex_driver/msg/NetworkHandle.msg b/kortex_driver/msg/generated/base/NetworkHandle.msg similarity index 92% rename from kortex_driver/msg/NetworkHandle.msg rename to kortex_driver/msg/generated/base/NetworkHandle.msg index 9143f866..5fc901c5 100644 --- a/kortex_driver/msg/NetworkHandle.msg +++ b/kortex_driver/msg/generated/base/NetworkHandle.msg @@ -1,3 +1,2 @@ - uint32 type \ No newline at end of file diff --git a/kortex_driver/msg/NetworkNotification.msg b/kortex_driver/msg/generated/base/NetworkNotification.msg similarity index 95% rename from kortex_driver/msg/NetworkNotification.msg rename to kortex_driver/msg/generated/base/NetworkNotification.msg index 40a0c973..38635725 100644 --- a/kortex_driver/msg/NetworkNotification.msg +++ b/kortex_driver/msg/generated/base/NetworkNotification.msg @@ -1,9 +1,5 @@ - uint32 event - Timestamp timestamp - UserProfileHandle user_handle - Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/NetworkNotificationList.msg b/kortex_driver/msg/generated/base/NetworkNotificationList.msg similarity index 97% rename from kortex_driver/msg/NetworkNotificationList.msg rename to kortex_driver/msg/generated/base/NetworkNotificationList.msg index 49053108..82ef3507 100644 --- a/kortex_driver/msg/NetworkNotificationList.msg +++ b/kortex_driver/msg/generated/base/NetworkNotificationList.msg @@ -1,3 +1,2 @@ - NetworkNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/NetworkType.msg b/kortex_driver/msg/generated/base/NetworkType.msg similarity index 100% rename from kortex_driver/msg/NetworkType.msg rename to kortex_driver/msg/generated/base/NetworkType.msg diff --git a/kortex_driver/msg/OperatingMode.msg b/kortex_driver/msg/generated/base/OperatingMode.msg similarity index 100% rename from kortex_driver/msg/OperatingMode.msg rename to kortex_driver/msg/generated/base/OperatingMode.msg diff --git a/kortex_driver/msg/OperatingModeInformation.msg b/kortex_driver/msg/generated/base/OperatingModeInformation.msg similarity index 96% rename from kortex_driver/msg/OperatingModeInformation.msg rename to kortex_driver/msg/generated/base/OperatingModeInformation.msg index 8b769914..e2f2da17 100644 --- a/kortex_driver/msg/OperatingModeInformation.msg +++ b/kortex_driver/msg/generated/base/OperatingModeInformation.msg @@ -1,5 +1,3 @@ - uint32 operating_mode - DeviceHandle device_handle \ No newline at end of file diff --git a/kortex_driver/msg/OperatingModeNotification.msg b/kortex_driver/msg/generated/base/OperatingModeNotification.msg similarity index 96% rename from kortex_driver/msg/OperatingModeNotification.msg rename to kortex_driver/msg/generated/base/OperatingModeNotification.msg index ecb91fc4..379b5bb2 100644 --- a/kortex_driver/msg/OperatingModeNotification.msg +++ b/kortex_driver/msg/generated/base/OperatingModeNotification.msg @@ -1,11 +1,6 @@ - uint32 operating_mode - Timestamp timestamp - UserProfileHandle user_handle - Connection connection - DeviceHandle device_handle \ No newline at end of file diff --git a/kortex_driver/msg/OperatingModeNotificationList.msg b/kortex_driver/msg/generated/base/OperatingModeNotificationList.msg similarity index 97% rename from kortex_driver/msg/OperatingModeNotificationList.msg rename to kortex_driver/msg/generated/base/OperatingModeNotificationList.msg index 18380ec0..9be52f5f 100644 --- a/kortex_driver/msg/OperatingModeNotificationList.msg +++ b/kortex_driver/msg/generated/base/OperatingModeNotificationList.msg @@ -1,3 +1,2 @@ - OperatingModeNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/Orientation.msg b/kortex_driver/msg/generated/base/Orientation.msg new file mode 100644 index 00000000..eb1df97a --- /dev/null +++ b/kortex_driver/msg/generated/base/Orientation.msg @@ -0,0 +1,4 @@ + +float32 theta_x +float32 theta_y +float32 theta_z \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/PasswordChange.msg b/kortex_driver/msg/generated/base/PasswordChange.msg new file mode 100644 index 00000000..5aee985f --- /dev/null +++ b/kortex_driver/msg/generated/base/PasswordChange.msg @@ -0,0 +1,4 @@ + +UserProfileHandle handle +string old_password +string new_password \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/Point.msg b/kortex_driver/msg/generated/base/Point.msg new file mode 100644 index 00000000..678ce634 --- /dev/null +++ b/kortex_driver/msg/generated/base/Point.msg @@ -0,0 +1,4 @@ + +float32 x +float32 y +float32 z \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/Pose.msg b/kortex_driver/msg/generated/base/Pose.msg new file mode 100644 index 00000000..b1f7d649 --- /dev/null +++ b/kortex_driver/msg/generated/base/Pose.msg @@ -0,0 +1,7 @@ + +float32 x +float32 y +float32 z +float32 theta_x +float32 theta_y +float32 theta_z \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/PreComputedJointTrajectory.msg b/kortex_driver/msg/generated/base/PreComputedJointTrajectory.msg new file mode 100644 index 00000000..7e41abd7 --- /dev/null +++ b/kortex_driver/msg/generated/base/PreComputedJointTrajectory.msg @@ -0,0 +1,3 @@ + +uint32 mode +PreComputedJointTrajectoryElement[] trajectory_elements \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/PreComputedJointTrajectoryElement.msg b/kortex_driver/msg/generated/base/PreComputedJointTrajectoryElement.msg new file mode 100644 index 00000000..5c6d51b7 --- /dev/null +++ b/kortex_driver/msg/generated/base/PreComputedJointTrajectoryElement.msg @@ -0,0 +1,5 @@ + +float32[] joint_angles +float32[] joint_speeds +float32[] joint_accelerations +float32 time_from_start \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/ProtectionZone.msg b/kortex_driver/msg/generated/base/ProtectionZone.msg new file mode 100644 index 00000000..a274e44d --- /dev/null +++ b/kortex_driver/msg/generated/base/ProtectionZone.msg @@ -0,0 +1,8 @@ + +ProtectionZoneHandle handle +string name +string application_data +bool is_enabled +ZoneShape shape +CartesianLimitation[] limitations +CartesianLimitation[] envelope_limitations \ No newline at end of file diff --git a/kortex_driver/msg/ProtectionZoneEvent.msg b/kortex_driver/msg/generated/base/ProtectionZoneEvent.msg similarity index 100% rename from kortex_driver/msg/ProtectionZoneEvent.msg rename to kortex_driver/msg/generated/base/ProtectionZoneEvent.msg diff --git a/kortex_driver/msg/generated/base/ProtectionZoneHandle.msg b/kortex_driver/msg/generated/base/ProtectionZoneHandle.msg new file mode 100644 index 00000000..4d2b97e1 --- /dev/null +++ b/kortex_driver/msg/generated/base/ProtectionZoneHandle.msg @@ -0,0 +1,3 @@ + +uint32 identifier +uint32 permission \ No newline at end of file diff --git a/kortex_driver/msg/ProtectionZoneInformation.msg b/kortex_driver/msg/generated/base/ProtectionZoneInformation.msg similarity index 92% rename from kortex_driver/msg/ProtectionZoneInformation.msg rename to kortex_driver/msg/generated/base/ProtectionZoneInformation.msg index c117fb78..bff9f62f 100644 --- a/kortex_driver/msg/ProtectionZoneInformation.msg +++ b/kortex_driver/msg/generated/base/ProtectionZoneInformation.msg @@ -1,3 +1,2 @@ - uint32 event \ No newline at end of file diff --git a/kortex_driver/msg/ProtectionZoneList.msg b/kortex_driver/msg/generated/base/ProtectionZoneList.msg similarity index 97% rename from kortex_driver/msg/ProtectionZoneList.msg rename to kortex_driver/msg/generated/base/ProtectionZoneList.msg index 978122e0..65b2f367 100644 --- a/kortex_driver/msg/ProtectionZoneList.msg +++ b/kortex_driver/msg/generated/base/ProtectionZoneList.msg @@ -1,3 +1,2 @@ - ProtectionZone[] protection_zones \ No newline at end of file diff --git a/kortex_driver/msg/ProtectionZoneNotification.msg b/kortex_driver/msg/generated/base/ProtectionZoneNotification.msg similarity index 95% rename from kortex_driver/msg/ProtectionZoneNotification.msg rename to kortex_driver/msg/generated/base/ProtectionZoneNotification.msg index 0535cb61..3b1a88fe 100644 --- a/kortex_driver/msg/ProtectionZoneNotification.msg +++ b/kortex_driver/msg/generated/base/ProtectionZoneNotification.msg @@ -1,11 +1,6 @@ - uint32 event - ProtectionZoneHandle handle - Timestamp timestamp - UserProfileHandle user_handle - Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/ProtectionZoneNotificationList.msg b/kortex_driver/msg/generated/base/ProtectionZoneNotificationList.msg similarity index 97% rename from kortex_driver/msg/ProtectionZoneNotificationList.msg rename to kortex_driver/msg/generated/base/ProtectionZoneNotificationList.msg index 8744bf04..516c2cac 100644 --- a/kortex_driver/msg/ProtectionZoneNotificationList.msg +++ b/kortex_driver/msg/generated/base/ProtectionZoneNotificationList.msg @@ -1,3 +1,2 @@ - ProtectionZoneNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/Query.msg b/kortex_driver/msg/generated/base/Query.msg new file mode 100644 index 00000000..9854c414 --- /dev/null +++ b/kortex_driver/msg/generated/base/Query.msg @@ -0,0 +1,4 @@ + +Timestamp start_timestamp +Timestamp end_timestamp +string username \ No newline at end of file diff --git a/kortex_driver/msg/RequestedActionType.msg b/kortex_driver/msg/generated/base/RequestedActionType.msg similarity index 95% rename from kortex_driver/msg/RequestedActionType.msg rename to kortex_driver/msg/generated/base/RequestedActionType.msg index 05c86522..4378483b 100644 --- a/kortex_driver/msg/RequestedActionType.msg +++ b/kortex_driver/msg/generated/base/RequestedActionType.msg @@ -1,3 +1,2 @@ - uint32 action_type \ No newline at end of file diff --git a/kortex_driver/msg/RobotEvent.msg b/kortex_driver/msg/generated/base/RobotEvent.msg similarity index 100% rename from kortex_driver/msg/RobotEvent.msg rename to kortex_driver/msg/generated/base/RobotEvent.msg diff --git a/kortex_driver/msg/RobotEventNotification.msg b/kortex_driver/msg/generated/base/RobotEventNotification.msg similarity index 95% rename from kortex_driver/msg/RobotEventNotification.msg rename to kortex_driver/msg/generated/base/RobotEventNotification.msg index dc2cfd1e..6cefe767 100644 --- a/kortex_driver/msg/RobotEventNotification.msg +++ b/kortex_driver/msg/generated/base/RobotEventNotification.msg @@ -1,11 +1,6 @@ - uint32 event - DeviceHandle handle - Timestamp timestamp - UserProfileHandle user_handle - Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/RobotEventNotificationList.msg b/kortex_driver/msg/generated/base/RobotEventNotificationList.msg similarity index 97% rename from kortex_driver/msg/RobotEventNotificationList.msg rename to kortex_driver/msg/generated/base/RobotEventNotificationList.msg index 4ecd1889..66e53d9d 100644 --- a/kortex_driver/msg/RobotEventNotificationList.msg +++ b/kortex_driver/msg/generated/base/RobotEventNotificationList.msg @@ -1,3 +1,2 @@ - RobotEventNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/SafetyEvent.msg b/kortex_driver/msg/generated/base/SafetyEvent.msg similarity index 96% rename from kortex_driver/msg/SafetyEvent.msg rename to kortex_driver/msg/generated/base/SafetyEvent.msg index 4c5bd430..cad1284f 100644 --- a/kortex_driver/msg/SafetyEvent.msg +++ b/kortex_driver/msg/generated/base/SafetyEvent.msg @@ -1,3 +1,2 @@ - SafetyHandle safety_handle \ No newline at end of file diff --git a/kortex_driver/msg/SafetyNotificationList.msg b/kortex_driver/msg/generated/base/SafetyNotificationList.msg similarity index 97% rename from kortex_driver/msg/SafetyNotificationList.msg rename to kortex_driver/msg/generated/base/SafetyNotificationList.msg index 95a25fef..ad9ce4c9 100644 --- a/kortex_driver/msg/SafetyNotificationList.msg +++ b/kortex_driver/msg/generated/base/SafetyNotificationList.msg @@ -1,3 +1,2 @@ - SafetyNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/Sequence.msg b/kortex_driver/msg/generated/base/Sequence.msg new file mode 100644 index 00000000..c2477470 --- /dev/null +++ b/kortex_driver/msg/generated/base/Sequence.msg @@ -0,0 +1,5 @@ + +SequenceHandle handle +string name +string application_data +SequenceTask[] tasks \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/SequenceHandle.msg b/kortex_driver/msg/generated/base/SequenceHandle.msg new file mode 100644 index 00000000..4d2b97e1 --- /dev/null +++ b/kortex_driver/msg/generated/base/SequenceHandle.msg @@ -0,0 +1,3 @@ + +uint32 identifier +uint32 permission \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/SequenceInfoNotification.msg b/kortex_driver/msg/generated/base/SequenceInfoNotification.msg new file mode 100644 index 00000000..a20a140a --- /dev/null +++ b/kortex_driver/msg/generated/base/SequenceInfoNotification.msg @@ -0,0 +1,9 @@ + +uint32 event_identifier +SequenceHandle sequence_handle +uint32 task_index +uint32 group_identifier +Timestamp timestamp +UserProfileHandle user_handle +uint32 abort_details +Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/SequenceInfoNotificationList.msg b/kortex_driver/msg/generated/base/SequenceInfoNotificationList.msg similarity index 97% rename from kortex_driver/msg/SequenceInfoNotificationList.msg rename to kortex_driver/msg/generated/base/SequenceInfoNotificationList.msg index 94ca3844..6c951de0 100644 --- a/kortex_driver/msg/SequenceInfoNotificationList.msg +++ b/kortex_driver/msg/generated/base/SequenceInfoNotificationList.msg @@ -1,3 +1,2 @@ - SequenceInfoNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/SequenceInformation.msg b/kortex_driver/msg/generated/base/SequenceInformation.msg new file mode 100644 index 00000000..12495fd7 --- /dev/null +++ b/kortex_driver/msg/generated/base/SequenceInformation.msg @@ -0,0 +1,4 @@ + +uint32 event_identifier +uint32 task_index +uint32 task_identifier \ No newline at end of file diff --git a/kortex_driver/msg/SequenceList.msg b/kortex_driver/msg/generated/base/SequenceList.msg similarity index 96% rename from kortex_driver/msg/SequenceList.msg rename to kortex_driver/msg/generated/base/SequenceList.msg index 4b230f7a..02d7bb3e 100644 --- a/kortex_driver/msg/SequenceList.msg +++ b/kortex_driver/msg/generated/base/SequenceList.msg @@ -1,3 +1,2 @@ - Sequence[] sequence_list \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/SequenceTask.msg b/kortex_driver/msg/generated/base/SequenceTask.msg new file mode 100644 index 00000000..56aab39c --- /dev/null +++ b/kortex_driver/msg/generated/base/SequenceTask.msg @@ -0,0 +1,4 @@ + +uint32 group_identifier +Action action +string application_data \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/SequenceTaskHandle.msg b/kortex_driver/msg/generated/base/SequenceTaskHandle.msg new file mode 100644 index 00000000..e79b56bb --- /dev/null +++ b/kortex_driver/msg/generated/base/SequenceTaskHandle.msg @@ -0,0 +1,3 @@ + +SequenceHandle sequence_handle +uint32 task_index \ No newline at end of file diff --git a/kortex_driver/msg/ServoingMode.msg b/kortex_driver/msg/generated/base/ServoingMode.msg similarity index 79% rename from kortex_driver/msg/ServoingMode.msg rename to kortex_driver/msg/generated/base/ServoingMode.msg index 0456b3af..2dc89b83 100644 --- a/kortex_driver/msg/ServoingMode.msg +++ b/kortex_driver/msg/generated/base/ServoingMode.msg @@ -1,8 +1,6 @@ uint32 UNSPECIFIED_SERVOING_MODE = 0 -uint32 MULTI_LEVEL_SERVOING = 1 - uint32 SINGLE_LEVEL_SERVOING = 2 uint32 LOW_LEVEL_SERVOING = 3 diff --git a/kortex_driver/msg/ServoingModeInformation.msg b/kortex_driver/msg/generated/base/ServoingModeInformation.msg similarity index 95% rename from kortex_driver/msg/ServoingModeInformation.msg rename to kortex_driver/msg/generated/base/ServoingModeInformation.msg index 70b5dbc8..8aa2b420 100644 --- a/kortex_driver/msg/ServoingModeInformation.msg +++ b/kortex_driver/msg/generated/base/ServoingModeInformation.msg @@ -1,3 +1,2 @@ - uint32 servoing_mode \ No newline at end of file diff --git a/kortex_driver/msg/ServoingModeNotification.msg b/kortex_driver/msg/generated/base/ServoingModeNotification.msg similarity index 95% rename from kortex_driver/msg/ServoingModeNotification.msg rename to kortex_driver/msg/generated/base/ServoingModeNotification.msg index 1519538b..d6715336 100644 --- a/kortex_driver/msg/ServoingModeNotification.msg +++ b/kortex_driver/msg/generated/base/ServoingModeNotification.msg @@ -1,9 +1,5 @@ - uint32 servoing_mode - Timestamp timestamp - UserProfileHandle user_handle - Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/ServoingModeNotificationList.msg b/kortex_driver/msg/generated/base/ServoingModeNotificationList.msg similarity index 97% rename from kortex_driver/msg/ServoingModeNotificationList.msg rename to kortex_driver/msg/generated/base/ServoingModeNotificationList.msg index 0fb0e599..4050557c 100644 --- a/kortex_driver/msg/ServoingModeNotificationList.msg +++ b/kortex_driver/msg/generated/base/ServoingModeNotificationList.msg @@ -1,3 +1,2 @@ - ServoingModeNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/ShapeType.msg b/kortex_driver/msg/generated/base/ShapeType.msg similarity index 100% rename from kortex_driver/msg/ShapeType.msg rename to kortex_driver/msg/generated/base/ShapeType.msg diff --git a/kortex_driver/msg/SignalQuality.msg b/kortex_driver/msg/generated/base/SignalQuality.msg similarity index 100% rename from kortex_driver/msg/SignalQuality.msg rename to kortex_driver/msg/generated/base/SignalQuality.msg diff --git a/kortex_driver/msg/SoundType.msg b/kortex_driver/msg/generated/base/SoundType.msg similarity index 100% rename from kortex_driver/msg/SoundType.msg rename to kortex_driver/msg/generated/base/SoundType.msg diff --git a/kortex_driver/msg/Ssid.msg b/kortex_driver/msg/generated/base/Ssid.msg similarity index 89% rename from kortex_driver/msg/Ssid.msg rename to kortex_driver/msg/generated/base/Ssid.msg index 91ad8a05..8734c7c0 100644 --- a/kortex_driver/msg/Ssid.msg +++ b/kortex_driver/msg/generated/base/Ssid.msg @@ -1,2 +1,2 @@ - + string identifier \ No newline at end of file diff --git a/kortex_driver/msg/SwitchControlMapping.msg b/kortex_driver/msg/generated/base/SwitchControlMapping.msg similarity index 96% rename from kortex_driver/msg/SwitchControlMapping.msg rename to kortex_driver/msg/generated/base/SwitchControlMapping.msg index 9fe33f79..0fc02e1a 100644 --- a/kortex_driver/msg/SwitchControlMapping.msg +++ b/kortex_driver/msg/generated/base/SwitchControlMapping.msg @@ -1,6 +1,4 @@ - -uint32 controller_identifier +uint32 controller_identifier MapGroupHandle map_group_handle - MapHandle map_handle \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/SystemTime.msg b/kortex_driver/msg/generated/base/SystemTime.msg new file mode 100644 index 00000000..2c97341e --- /dev/null +++ b/kortex_driver/msg/generated/base/SystemTime.msg @@ -0,0 +1,7 @@ + +uint32 sec +uint32 min +uint32 hour +uint32 mday +uint32 mon +uint32 year \ No newline at end of file diff --git a/kortex_driver/msg/Timeout.msg b/kortex_driver/msg/generated/base/Timeout.msg similarity index 85% rename from kortex_driver/msg/Timeout.msg rename to kortex_driver/msg/generated/base/Timeout.msg index 3cf3925c..129c5a37 100644 --- a/kortex_driver/msg/Timeout.msg +++ b/kortex_driver/msg/generated/base/Timeout.msg @@ -1,2 +1,2 @@ - + uint32 value \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/TrajectoryContinuityMode.msg b/kortex_driver/msg/generated/base/TrajectoryContinuityMode.msg new file mode 100644 index 00000000..84a1bb8a --- /dev/null +++ b/kortex_driver/msg/generated/base/TrajectoryContinuityMode.msg @@ -0,0 +1,8 @@ + +uint32 TRAJECTORY_CONTINUITY_MODE_UNSPECIFIED = 0 + +uint32 TRAJECTORY_CONTINUITY_MODE_POSITION = 1 + +uint32 TRAJECTORY_CONTINUITY_MODE_SPEED = 2 + +uint32 TRAJECTORY_CONTINUITY_MODE_ACCELERATION = 3 diff --git a/kortex_driver/msg/generated/base/TrajectoryErrorElement.msg b/kortex_driver/msg/generated/base/TrajectoryErrorElement.msg new file mode 100644 index 00000000..3898803d --- /dev/null +++ b/kortex_driver/msg/generated/base/TrajectoryErrorElement.msg @@ -0,0 +1,8 @@ + +uint32 error_type +uint32 error_identifier +float32 error_value +float32 min_value +float32 max_value +uint32 index +string message \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/TrajectoryErrorIdentifier.msg b/kortex_driver/msg/generated/base/TrajectoryErrorIdentifier.msg new file mode 100644 index 00000000..bd684f68 --- /dev/null +++ b/kortex_driver/msg/generated/base/TrajectoryErrorIdentifier.msg @@ -0,0 +1,12 @@ + +uint32 TRAJECTORY_ERROR_IDENTIFIER_UNSPECIFIED = 0 + +uint32 TRAJECTORY_ERROR_IDENTIFIER_UNAPPLICABLE = 1 + +uint32 TRAJECTORY_ERROR_IDENTIFIER_TIME = 2 + +uint32 TRAJECTORY_ERROR_IDENTIFIER_POSITION = 3 + +uint32 TRAJECTORY_ERROR_IDENTIFIER_VELOCITY = 4 + +uint32 TRAJECTORY_ERROR_IDENTIFIER_ACCELERATION = 5 diff --git a/kortex_driver/msg/generated/base/TrajectoryErrorReport.msg b/kortex_driver/msg/generated/base/TrajectoryErrorReport.msg new file mode 100644 index 00000000..fc262c75 --- /dev/null +++ b/kortex_driver/msg/generated/base/TrajectoryErrorReport.msg @@ -0,0 +1,2 @@ + +TrajectoryErrorElement[] trajectory_error_elements \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/TrajectoryErrorType.msg b/kortex_driver/msg/generated/base/TrajectoryErrorType.msg new file mode 100644 index 00000000..612e3b1c --- /dev/null +++ b/kortex_driver/msg/generated/base/TrajectoryErrorType.msg @@ -0,0 +1,40 @@ + +uint32 TRAJECTORY_ERROR_TYPE_UNSPECIFIED = 0 + +uint32 TRAJECTORY_ERROR_TYPE_OUTSIDE_WORKSPACE = 1 + +uint32 TRAJECTORY_ERROR_TYPE_ACTUATOR_COUNT_MISMATCH = 2 + +uint32 TRAJECTORY_ERROR_TYPE_INVALID_DURATION = 3 + +uint32 TRAJECTORY_ERROR_TYPE_ZERO_DISTANCE = 4 + +uint32 TRAJECTORY_ERROR_TYPE_INVALID_SPEED = 5 + +uint32 TRAJECTORY_ERROR_TYPE_LARGE_SPEED = 6 + +uint32 TRAJECTORY_ERROR_TYPE_INVALID_ACCELERATION = 7 + +uint32 TRAJECTORY_ERROR_TYPE_INVALID_TIME_STEP = 8 + +uint32 TRAJECTORY_ERROR_TYPE_LARGE_SIZE = 9 + +uint32 TRAJECTORY_ERROR_TYPE_WRONG_MODE = 10 + +uint32 TRAJECTORY_ERROR_TYPE_JOINT_POSITION_LIMIT = 11 + +uint32 TRAJECTORY_ERROR_TYPE_FILE_ERROR = 12 + +uint32 TRAJECTORY_ERROR_TYPE_NO_FILE_IN_MEMORY = 13 + +uint32 TRAJECTORY_ERROR_TYPE_INDEX_OUT_OF_TRAJ = 14 + +uint32 TRAJECTORY_ERROR_TYPE_ALREADY_RUNNING = 15 + +uint32 TRAJECTORY_ERROR_TYPE_WRONG_STARTING_POINT = 16 + +uint32 TRAJECTORY_ERROR_TYPE_CARTESIAN_CANNOT_START = 17 + +uint32 TRAJECTORY_ERROR_TYPE_WRONG_STARTING_SPEED = 18 + +uint32 TRAJECTORY_ERROR_TYPE_INVALID_POSITION = 19 diff --git a/kortex_driver/msg/TransformationMatrix.msg b/kortex_driver/msg/generated/base/TransformationMatrix.msg similarity index 95% rename from kortex_driver/msg/TransformationMatrix.msg rename to kortex_driver/msg/generated/base/TransformationMatrix.msg index 4f70ae6a..e2d42e32 100644 --- a/kortex_driver/msg/TransformationMatrix.msg +++ b/kortex_driver/msg/generated/base/TransformationMatrix.msg @@ -1,9 +1,5 @@ - TransformationRow r0 - TransformationRow r1 - TransformationRow r2 - TransformationRow r3 \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/TransformationRow.msg b/kortex_driver/msg/generated/base/TransformationRow.msg new file mode 100644 index 00000000..57d1a53c --- /dev/null +++ b/kortex_driver/msg/generated/base/TransformationRow.msg @@ -0,0 +1,5 @@ + +float32 c0 +float32 c1 +float32 c2 +float32 c3 \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/Twist.msg b/kortex_driver/msg/generated/base/Twist.msg new file mode 100644 index 00000000..482f7a66 --- /dev/null +++ b/kortex_driver/msg/generated/base/Twist.msg @@ -0,0 +1,7 @@ + +float32 linear_x +float32 linear_y +float32 linear_z +float32 angular_x +float32 angular_y +float32 angular_z \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/TwistCommand.msg b/kortex_driver/msg/generated/base/TwistCommand.msg new file mode 100644 index 00000000..325d3c73 --- /dev/null +++ b/kortex_driver/msg/generated/base/TwistCommand.msg @@ -0,0 +1,4 @@ + +uint32 reference_frame +Twist twist +uint32 duration \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/TwistLimitation.msg b/kortex_driver/msg/generated/base/TwistLimitation.msg new file mode 100644 index 00000000..71d333a8 --- /dev/null +++ b/kortex_driver/msg/generated/base/TwistLimitation.msg @@ -0,0 +1,3 @@ + +float32 linear +float32 angular \ No newline at end of file diff --git a/kortex_driver/msg/UserEvent.msg b/kortex_driver/msg/generated/base/UserEvent.msg similarity index 100% rename from kortex_driver/msg/UserEvent.msg rename to kortex_driver/msg/generated/base/UserEvent.msg diff --git a/kortex_driver/msg/UserList.msg b/kortex_driver/msg/generated/base/UserList.msg similarity index 97% rename from kortex_driver/msg/UserList.msg rename to kortex_driver/msg/generated/base/UserList.msg index 1b541bd8..2675d7a7 100644 --- a/kortex_driver/msg/UserList.msg +++ b/kortex_driver/msg/generated/base/UserList.msg @@ -1,3 +1,2 @@ - UserProfileHandle[] user_handles \ No newline at end of file diff --git a/kortex_driver/msg/UserNotification.msg b/kortex_driver/msg/generated/base/UserNotification.msg similarity index 96% rename from kortex_driver/msg/UserNotification.msg rename to kortex_driver/msg/generated/base/UserNotification.msg index 667cd0f5..81cda4fd 100644 --- a/kortex_driver/msg/UserNotification.msg +++ b/kortex_driver/msg/generated/base/UserNotification.msg @@ -1,11 +1,6 @@ - uint32 user_event - UserProfileHandle modified_user - Timestamp timestamp - UserProfileHandle user_handle - Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/UserNotificationList.msg b/kortex_driver/msg/generated/base/UserNotificationList.msg similarity index 97% rename from kortex_driver/msg/UserNotificationList.msg rename to kortex_driver/msg/generated/base/UserNotificationList.msg index f3967773..38a029c3 100644 --- a/kortex_driver/msg/UserNotificationList.msg +++ b/kortex_driver/msg/generated/base/UserNotificationList.msg @@ -1,3 +1,2 @@ - UserNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/UserProfile.msg b/kortex_driver/msg/generated/base/UserProfile.msg new file mode 100644 index 00000000..f210d01d --- /dev/null +++ b/kortex_driver/msg/generated/base/UserProfile.msg @@ -0,0 +1,6 @@ + +UserProfileHandle handle +string username +string firstname +string lastname +string application_data \ No newline at end of file diff --git a/kortex_driver/msg/UserProfileList.msg b/kortex_driver/msg/generated/base/UserProfileList.msg similarity index 96% rename from kortex_driver/msg/UserProfileList.msg rename to kortex_driver/msg/generated/base/UserProfileList.msg index e9f7fc40..121c0eed 100644 --- a/kortex_driver/msg/UserProfileList.msg +++ b/kortex_driver/msg/generated/base/UserProfileList.msg @@ -1,3 +1,2 @@ - UserProfile[] user_profiles \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/WifiConfiguration.msg b/kortex_driver/msg/generated/base/WifiConfiguration.msg new file mode 100644 index 00000000..a32e964b --- /dev/null +++ b/kortex_driver/msg/generated/base/WifiConfiguration.msg @@ -0,0 +1,4 @@ + +Ssid ssid +string security_key +bool connect_automatically \ No newline at end of file diff --git a/kortex_driver/msg/WifiConfigurationList.msg b/kortex_driver/msg/generated/base/WifiConfigurationList.msg similarity index 97% rename from kortex_driver/msg/WifiConfigurationList.msg rename to kortex_driver/msg/generated/base/WifiConfigurationList.msg index c2734e74..724433ab 100644 --- a/kortex_driver/msg/WifiConfigurationList.msg +++ b/kortex_driver/msg/generated/base/WifiConfigurationList.msg @@ -1,3 +1,2 @@ - WifiConfiguration[] wifi_configuration_list \ No newline at end of file diff --git a/kortex_driver/msg/WifiEncryptionType.msg b/kortex_driver/msg/generated/base/WifiEncryptionType.msg similarity index 100% rename from kortex_driver/msg/WifiEncryptionType.msg rename to kortex_driver/msg/generated/base/WifiEncryptionType.msg diff --git a/kortex_driver/msg/generated/base/WifiInformation.msg b/kortex_driver/msg/generated/base/WifiInformation.msg new file mode 100644 index 00000000..a96899aa --- /dev/null +++ b/kortex_driver/msg/generated/base/WifiInformation.msg @@ -0,0 +1,8 @@ + +Ssid ssid +uint32 security_type +uint32 encryption_type +uint32 signal_quality +int32 signal_strength +uint32 frequency +uint32 channel \ No newline at end of file diff --git a/kortex_driver/msg/WifiInformationList.msg b/kortex_driver/msg/generated/base/WifiInformationList.msg similarity index 97% rename from kortex_driver/msg/WifiInformationList.msg rename to kortex_driver/msg/generated/base/WifiInformationList.msg index e1f2114e..c6091c31 100644 --- a/kortex_driver/msg/WifiInformationList.msg +++ b/kortex_driver/msg/generated/base/WifiInformationList.msg @@ -1,3 +1,2 @@ - WifiInformation[] wifi_information_list \ No newline at end of file diff --git a/kortex_driver/msg/WifiSecurityType.msg b/kortex_driver/msg/generated/base/WifiSecurityType.msg similarity index 100% rename from kortex_driver/msg/WifiSecurityType.msg rename to kortex_driver/msg/generated/base/WifiSecurityType.msg diff --git a/kortex_driver/msg/generated/base/Wrench.msg b/kortex_driver/msg/generated/base/Wrench.msg new file mode 100644 index 00000000..24b6e5cf --- /dev/null +++ b/kortex_driver/msg/generated/base/Wrench.msg @@ -0,0 +1,7 @@ + +float32 force_x +float32 force_y +float32 force_z +float32 torque_x +float32 torque_y +float32 torque_z \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/WrenchCommand.msg b/kortex_driver/msg/generated/base/WrenchCommand.msg new file mode 100644 index 00000000..90dd3135 --- /dev/null +++ b/kortex_driver/msg/generated/base/WrenchCommand.msg @@ -0,0 +1,5 @@ + +uint32 reference_frame +uint32 mode +Wrench wrench +uint32 duration \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/WrenchLimitation.msg b/kortex_driver/msg/generated/base/WrenchLimitation.msg new file mode 100644 index 00000000..1d7a9731 --- /dev/null +++ b/kortex_driver/msg/generated/base/WrenchLimitation.msg @@ -0,0 +1,3 @@ + +float32 force +float32 torque \ No newline at end of file diff --git a/kortex_driver/msg/generated/base/WrenchMode.msg b/kortex_driver/msg/generated/base/WrenchMode.msg new file mode 100644 index 00000000..c60a59f7 --- /dev/null +++ b/kortex_driver/msg/generated/base/WrenchMode.msg @@ -0,0 +1,6 @@ + +uint32 UNSPECIFIED_WRENCH_MODE = 0 + +uint32 WRENCH_RESTRICTED = 1 + +uint32 WRENCH_NORMAL = 2 diff --git a/kortex_driver/msg/Xbox360AnalogInputIdentifier.msg b/kortex_driver/msg/generated/base/Xbox360AnalogInputIdentifier.msg similarity index 100% rename from kortex_driver/msg/Xbox360AnalogInputIdentifier.msg rename to kortex_driver/msg/generated/base/Xbox360AnalogInputIdentifier.msg diff --git a/kortex_driver/msg/Xbox360DigitalInputIdentifier.msg b/kortex_driver/msg/generated/base/Xbox360DigitalInputIdentifier.msg similarity index 100% rename from kortex_driver/msg/Xbox360DigitalInputIdentifier.msg rename to kortex_driver/msg/generated/base/Xbox360DigitalInputIdentifier.msg diff --git a/kortex_driver/msg/generated/base/ZoneShape.msg b/kortex_driver/msg/generated/base/ZoneShape.msg new file mode 100644 index 00000000..48e3cdc6 --- /dev/null +++ b/kortex_driver/msg/generated/base/ZoneShape.msg @@ -0,0 +1,6 @@ + +uint32 shape_type +Point origin +Base_RotationMatrix orientation +float32[] dimensions +float32 envelope_thickness \ No newline at end of file diff --git a/kortex_driver/msg/generated/base_cyclic/ActuatorCommand.msg b/kortex_driver/msg/generated/base_cyclic/ActuatorCommand.msg new file mode 100644 index 00000000..82cf0a07 --- /dev/null +++ b/kortex_driver/msg/generated/base_cyclic/ActuatorCommand.msg @@ -0,0 +1,7 @@ + +uint32 command_id +uint32 flags +float32 position +float32 velocity +float32 torque_joint +float32 current_motor \ No newline at end of file diff --git a/kortex_driver/msg/generated/base_cyclic/ActuatorCustomData.msg b/kortex_driver/msg/generated/base_cyclic/ActuatorCustomData.msg new file mode 100644 index 00000000..9016e824 --- /dev/null +++ b/kortex_driver/msg/generated/base_cyclic/ActuatorCustomData.msg @@ -0,0 +1,18 @@ + +uint32 command_id +uint32 custom_data_0 +uint32 custom_data_1 +uint32 custom_data_2 +uint32 custom_data_3 +uint32 custom_data_4 +uint32 custom_data_5 +uint32 custom_data_6 +uint32 custom_data_7 +uint32 custom_data_8 +uint32 custom_data_9 +uint32 custom_data_10 +uint32 custom_data_11 +uint32 custom_data_12 +uint32 custom_data_13 +uint32 custom_data_14 +uint32 custom_data_15 \ No newline at end of file diff --git a/kortex_driver/msg/generated/base_cyclic/ActuatorFeedback.msg b/kortex_driver/msg/generated/base_cyclic/ActuatorFeedback.msg new file mode 100644 index 00000000..3f1c60e5 --- /dev/null +++ b/kortex_driver/msg/generated/base_cyclic/ActuatorFeedback.msg @@ -0,0 +1,15 @@ + +uint32 command_id +uint32 status_flags +uint32 jitter_comm +float32 position +float32 velocity +float32 torque +float32 current_motor +float32 voltage +float32 temperature_motor +float32 temperature_core +uint32 fault_bank_a +uint32 fault_bank_b +uint32 warning_bank_a +uint32 warning_bank_b \ No newline at end of file diff --git a/kortex_driver/msg/generated/base_cyclic/BaseCyclic_Command.msg b/kortex_driver/msg/generated/base_cyclic/BaseCyclic_Command.msg new file mode 100644 index 00000000..78c38734 --- /dev/null +++ b/kortex_driver/msg/generated/base_cyclic/BaseCyclic_Command.msg @@ -0,0 +1,4 @@ + +uint32 frame_id +ActuatorCommand[] actuators +InterconnectCyclic_Command interconnect \ No newline at end of file diff --git a/kortex_driver/msg/generated/base_cyclic/BaseCyclic_CustomData.msg b/kortex_driver/msg/generated/base_cyclic/BaseCyclic_CustomData.msg new file mode 100644 index 00000000..5ea49376 --- /dev/null +++ b/kortex_driver/msg/generated/base_cyclic/BaseCyclic_CustomData.msg @@ -0,0 +1,12 @@ + +uint32 frame_id +uint32 custom_data_0 +uint32 custom_data_1 +uint32 custom_data_2 +uint32 custom_data_3 +uint32 custom_data_4 +uint32 custom_data_5 +uint32 custom_data_6 +uint32 custom_data_7 +ActuatorCustomData[] actuators_custom_data +InterconnectCyclic_CustomData interconnect_custom_data \ No newline at end of file diff --git a/kortex_driver/msg/generated/base_cyclic/BaseCyclic_Feedback.msg b/kortex_driver/msg/generated/base_cyclic/BaseCyclic_Feedback.msg new file mode 100644 index 00000000..be3a3f95 --- /dev/null +++ b/kortex_driver/msg/generated/base_cyclic/BaseCyclic_Feedback.msg @@ -0,0 +1,5 @@ + +uint32 frame_id +BaseFeedback base +ActuatorFeedback[] actuators +InterconnectCyclic_Feedback interconnect \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/ServiceVersion.msg b/kortex_driver/msg/generated/base_cyclic/BaseCyclic_ServiceVersion.msg similarity index 100% rename from kortex_vision_config_driver/msg/ServiceVersion.msg rename to kortex_driver/msg/generated/base_cyclic/BaseCyclic_ServiceVersion.msg diff --git a/kortex_driver/msg/generated/base_cyclic/BaseFeedback.msg b/kortex_driver/msg/generated/base_cyclic/BaseFeedback.msg new file mode 100644 index 00000000..9df35596 --- /dev/null +++ b/kortex_driver/msg/generated/base_cyclic/BaseFeedback.msg @@ -0,0 +1,41 @@ + +uint32 active_state_connection_identifier +uint32 active_state +float32 arm_voltage +float32 arm_current +float32 temperature_cpu +float32 temperature_ambient +float32 imu_acceleration_x +float32 imu_acceleration_y +float32 imu_acceleration_z +float32 imu_angular_velocity_x +float32 imu_angular_velocity_y +float32 imu_angular_velocity_z +float32 tool_pose_x +float32 tool_pose_y +float32 tool_pose_z +float32 tool_pose_theta_x +float32 tool_pose_theta_y +float32 tool_pose_theta_z +float32 tool_twist_linear_x +float32 tool_twist_linear_y +float32 tool_twist_linear_z +float32 tool_twist_angular_x +float32 tool_twist_angular_y +float32 tool_twist_angular_z +float32 tool_external_wrench_force_x +float32 tool_external_wrench_force_y +float32 tool_external_wrench_force_z +float32 tool_external_wrench_torque_x +float32 tool_external_wrench_torque_y +float32 tool_external_wrench_torque_z +uint32 fault_bank_a +uint32 fault_bank_b +uint32 warning_bank_a +uint32 warning_bank_b +float32 commanded_tool_pose_x +float32 commanded_tool_pose_y +float32 commanded_tool_pose_z +float32 commanded_tool_pose_theta_x +float32 commanded_tool_pose_theta_y +float32 commanded_tool_pose_theta_z \ No newline at end of file diff --git a/kortex_actuator_driver/msg/ArmState.msg b/kortex_driver/msg/generated/common/ArmState.msg similarity index 100% rename from kortex_actuator_driver/msg/ArmState.msg rename to kortex_driver/msg/generated/common/ArmState.msg diff --git a/kortex_driver/msg/generated/common/CartesianReferenceFrame.msg b/kortex_driver/msg/generated/common/CartesianReferenceFrame.msg new file mode 100644 index 00000000..c5190080 --- /dev/null +++ b/kortex_driver/msg/generated/common/CartesianReferenceFrame.msg @@ -0,0 +1,8 @@ + +uint32 CARTESIAN_REFERENCE_FRAME_UNSPECIFIED = 0 + +uint32 CARTESIAN_REFERENCE_FRAME_MIXED = 1 + +uint32 CARTESIAN_REFERENCE_FRAME_TOOL = 2 + +uint32 CARTESIAN_REFERENCE_FRAME_BASE = 3 diff --git a/kortex_driver/msg/generated/common/Connection.msg b/kortex_driver/msg/generated/common/Connection.msg new file mode 100644 index 00000000..6f7f7ab0 --- /dev/null +++ b/kortex_driver/msg/generated/common/Connection.msg @@ -0,0 +1,4 @@ + +UserProfileHandle user_handle +string connection_information +uint32 connection_identifier \ No newline at end of file diff --git a/kortex_driver/msg/CountryCode.msg b/kortex_driver/msg/generated/common/CountryCode.msg similarity index 94% rename from kortex_driver/msg/CountryCode.msg rename to kortex_driver/msg/generated/common/CountryCode.msg index d02ed4c2..9d1731bd 100644 --- a/kortex_driver/msg/CountryCode.msg +++ b/kortex_driver/msg/generated/common/CountryCode.msg @@ -1,3 +1,2 @@ - uint32 identifier \ No newline at end of file diff --git a/kortex_driver/msg/CountryCodeIdentifier.msg b/kortex_driver/msg/generated/common/CountryCodeIdentifier.msg similarity index 100% rename from kortex_driver/msg/CountryCodeIdentifier.msg rename to kortex_driver/msg/generated/common/CountryCodeIdentifier.msg diff --git a/kortex_driver/msg/generated/common/DeviceHandle.msg b/kortex_driver/msg/generated/common/DeviceHandle.msg new file mode 100644 index 00000000..a1e1083f --- /dev/null +++ b/kortex_driver/msg/generated/common/DeviceHandle.msg @@ -0,0 +1,4 @@ + +uint32 device_type +uint32 device_identifier +uint32 order \ No newline at end of file diff --git a/kortex_driver/msg/generated/common/DeviceTypes.msg b/kortex_driver/msg/generated/common/DeviceTypes.msg new file mode 100644 index 00000000..d2fdf25c --- /dev/null +++ b/kortex_driver/msg/generated/common/DeviceTypes.msg @@ -0,0 +1,18 @@ + +uint32 UNSPECIFIED_DEVICE_TYPE = 0 + +uint32 BASE = 1 + +uint32 VISION = 2 + +uint32 BIG_ACTUATOR = 3 + +uint32 SMALL_ACTUATOR = 4 + +uint32 INTERCONNECT = 5 + +uint32 GRIPPER = 6 + +uint32 MEDIUM_ACTUATOR = 7 + +uint32 XBIG_ACTUATOR = 8 diff --git a/kortex_actuator_driver/msg/Empty.msg b/kortex_driver/msg/generated/common/Empty.msg similarity index 100% rename from kortex_actuator_driver/msg/Empty.msg rename to kortex_driver/msg/generated/common/Empty.msg diff --git a/kortex_driver/msg/generated/common/NotificationHandle.msg b/kortex_driver/msg/generated/common/NotificationHandle.msg new file mode 100644 index 00000000..9d1731bd --- /dev/null +++ b/kortex_driver/msg/generated/common/NotificationHandle.msg @@ -0,0 +1,2 @@ + +uint32 identifier \ No newline at end of file diff --git a/kortex_driver/msg/generated/common/NotificationOptions.msg b/kortex_driver/msg/generated/common/NotificationOptions.msg new file mode 100644 index 00000000..48cb13e7 --- /dev/null +++ b/kortex_driver/msg/generated/common/NotificationOptions.msg @@ -0,0 +1,4 @@ + +uint32 type +uint32 rate_m_sec +float32 threshold_value \ No newline at end of file diff --git a/kortex_actuator_driver/msg/NotificationType.msg b/kortex_driver/msg/generated/common/NotificationType.msg similarity index 100% rename from kortex_actuator_driver/msg/NotificationType.msg rename to kortex_driver/msg/generated/common/NotificationType.msg diff --git a/kortex_actuator_driver/msg/Permission.msg b/kortex_driver/msg/generated/common/Permission.msg similarity index 100% rename from kortex_actuator_driver/msg/Permission.msg rename to kortex_driver/msg/generated/common/Permission.msg diff --git a/kortex_driver/msg/generated/common/SafetyHandle.msg b/kortex_driver/msg/generated/common/SafetyHandle.msg new file mode 100644 index 00000000..9d1731bd --- /dev/null +++ b/kortex_driver/msg/generated/common/SafetyHandle.msg @@ -0,0 +1,2 @@ + +uint32 identifier \ No newline at end of file diff --git a/kortex_driver/msg/generated/common/SafetyNotification.msg b/kortex_driver/msg/generated/common/SafetyNotification.msg new file mode 100644 index 00000000..f68ba0c5 --- /dev/null +++ b/kortex_driver/msg/generated/common/SafetyNotification.msg @@ -0,0 +1,6 @@ + +SafetyHandle safety_handle +uint32 value +Timestamp timestamp +UserProfileHandle user_handle +Connection connection \ No newline at end of file diff --git a/kortex_actuator_driver/msg/SafetyStatusValue.msg b/kortex_driver/msg/generated/common/SafetyStatusValue.msg similarity index 100% rename from kortex_actuator_driver/msg/SafetyStatusValue.msg rename to kortex_driver/msg/generated/common/SafetyStatusValue.msg diff --git a/kortex_driver/msg/generated/common/Timestamp.msg b/kortex_driver/msg/generated/common/Timestamp.msg new file mode 100644 index 00000000..8f08067c --- /dev/null +++ b/kortex_driver/msg/generated/common/Timestamp.msg @@ -0,0 +1,3 @@ + +uint32 sec +uint32 usec \ No newline at end of file diff --git a/kortex_driver/msg/generated/common/UARTConfiguration.msg b/kortex_driver/msg/generated/common/UARTConfiguration.msg new file mode 100644 index 00000000..82ae0c89 --- /dev/null +++ b/kortex_driver/msg/generated/common/UARTConfiguration.msg @@ -0,0 +1,7 @@ + +uint32 port_id +bool enabled +uint32 speed +uint32 word_length +uint32 stop_bits +uint32 parity \ No newline at end of file diff --git a/kortex_driver/msg/generated/common/UARTDeviceIdentification.msg b/kortex_driver/msg/generated/common/UARTDeviceIdentification.msg new file mode 100644 index 00000000..b0f95596 --- /dev/null +++ b/kortex_driver/msg/generated/common/UARTDeviceIdentification.msg @@ -0,0 +1,2 @@ + +uint32 port_id \ No newline at end of file diff --git a/kortex_driver/msg/generated/common/UARTParity.msg b/kortex_driver/msg/generated/common/UARTParity.msg new file mode 100644 index 00000000..97e58a81 --- /dev/null +++ b/kortex_driver/msg/generated/common/UARTParity.msg @@ -0,0 +1,8 @@ + +uint32 UART_PARITY_UNSPECIFIED = 0 + +uint32 UART_PARITY_NONE = 1 + +uint32 UART_PARITY_ODD = 2 + +uint32 UART_PARITY_EVEN = 3 diff --git a/kortex_driver/msg/generated/common/UARTSpeed.msg b/kortex_driver/msg/generated/common/UARTSpeed.msg new file mode 100644 index 00000000..50f2b871 --- /dev/null +++ b/kortex_driver/msg/generated/common/UARTSpeed.msg @@ -0,0 +1,32 @@ + +uint32 UART_SPEED_UNSPECIFIED = 0 + +uint32 UART_SPEED_4800 = 1 + +uint32 UART_SPEED_9600 = 2 + +uint32 UART_SPEED_19200 = 3 + +uint32 UART_SPEED_38400 = 4 + +uint32 UART_SPEED_57600 = 5 + +uint32 UART_SPEED_115200 = 6 + +uint32 UART_SPEED_230400 = 7 + +uint32 UART_SPEED_460800 = 8 + +uint32 UART_SPEED_921600 = 9 + +uint32 UART_SPEED_1382400 = 10 + +uint32 UART_SPEED_1612800 = 11 + +uint32 UART_SPEED_1843200 = 12 + +uint32 UART_SPEED_2073600 = 13 + +uint32 UART_SPEED_2188800 = 14 + +uint32 UART_SPEED_2246400 = 15 diff --git a/kortex_driver/msg/generated/common/UARTStopBits.msg b/kortex_driver/msg/generated/common/UARTStopBits.msg new file mode 100644 index 00000000..0de6f124 --- /dev/null +++ b/kortex_driver/msg/generated/common/UARTStopBits.msg @@ -0,0 +1,10 @@ + +uint32 UART_STOP_BITS_UNSPECIFIED = 0 + +uint32 UART_STOP_BITS_0_5 = 1 + +uint32 UART_STOP_BITS_1 = 2 + +uint32 UART_STOP_BITS_1_5 = 3 + +uint32 UART_STOP_BITS_2 = 4 diff --git a/kortex_driver/msg/generated/common/UARTWordLength.msg b/kortex_driver/msg/generated/common/UARTWordLength.msg new file mode 100644 index 00000000..e6b2f086 --- /dev/null +++ b/kortex_driver/msg/generated/common/UARTWordLength.msg @@ -0,0 +1,8 @@ + +uint32 UART_WORD_LENGTH_UNSPECIFIED = 0 + +uint32 UART_WORD_LENGTH_7 = 1 + +uint32 UART_WORD_LENGTH_8 = 2 + +uint32 UART_WORD_LENGTH_9 = 3 diff --git a/kortex_actuator_driver/msg/Unit.msg b/kortex_driver/msg/generated/common/Unit.msg similarity index 100% rename from kortex_actuator_driver/msg/Unit.msg rename to kortex_driver/msg/generated/common/Unit.msg diff --git a/kortex_driver/msg/generated/common/UserProfileHandle.msg b/kortex_driver/msg/generated/common/UserProfileHandle.msg new file mode 100644 index 00000000..4d2b97e1 --- /dev/null +++ b/kortex_driver/msg/generated/common/UserProfileHandle.msg @@ -0,0 +1,3 @@ + +uint32 identifier +uint32 permission \ No newline at end of file diff --git a/kortex_driver/msg/generated/control_config/CartesianReferenceFrameInfo.msg b/kortex_driver/msg/generated/control_config/CartesianReferenceFrameInfo.msg new file mode 100644 index 00000000..7aafcc63 --- /dev/null +++ b/kortex_driver/msg/generated/control_config/CartesianReferenceFrameInfo.msg @@ -0,0 +1,2 @@ + +uint32 reference_frame \ No newline at end of file diff --git a/kortex_driver/msg/generated/control_config/CartesianTransform.msg b/kortex_driver/msg/generated/control_config/CartesianTransform.msg new file mode 100644 index 00000000..b1f7d649 --- /dev/null +++ b/kortex_driver/msg/generated/control_config/CartesianTransform.msg @@ -0,0 +1,7 @@ + +float32 x +float32 y +float32 z +float32 theta_x +float32 theta_y +float32 theta_z \ No newline at end of file diff --git a/kortex_driver/msg/generated/control_config/ControlConfig_Position.msg b/kortex_driver/msg/generated/control_config/ControlConfig_Position.msg new file mode 100644 index 00000000..678ce634 --- /dev/null +++ b/kortex_driver/msg/generated/control_config/ControlConfig_Position.msg @@ -0,0 +1,4 @@ + +float32 x +float32 y +float32 z \ No newline at end of file diff --git a/kortex_driver/msg/generated/control_config/ControlConfig_ServiceVersion.msg b/kortex_driver/msg/generated/control_config/ControlConfig_ServiceVersion.msg new file mode 100644 index 00000000..9665d1c2 --- /dev/null +++ b/kortex_driver/msg/generated/control_config/ControlConfig_ServiceVersion.msg @@ -0,0 +1,4 @@ + +uint32 RESERVED_0 = 0 + +uint32 CURRENT_VERSION = 1 diff --git a/kortex_driver/msg/generated/control_config/ControlConfigurationEvent.msg b/kortex_driver/msg/generated/control_config/ControlConfigurationEvent.msg new file mode 100644 index 00000000..e5d8a350 --- /dev/null +++ b/kortex_driver/msg/generated/control_config/ControlConfigurationEvent.msg @@ -0,0 +1,30 @@ + +uint32 UNSPECIFIED_CONTROL_CONFIGURATION_EVENT = 0 + +uint32 ANGLE_UNIT_CHANGED = 1 + +uint32 GRAVITY_VECTOR_CHANGED = 2 + +uint32 VISION_JOYSTICK_CONFIGURATION_CHANGED = 3 + +uint32 JOINT_ADMITTANCE_CONFIGURATION_CHANGED = 4 + +uint32 NULL_ADMITTANCE_CONFIGURATION_CHANGED = 5 + +uint32 CARTESIAN_ADMITTANCE_CONFIGURATION_CHANGED = 6 + +uint32 JOINT_TORQUE_HYBRID_CONFIGURATION_CHANGED = 7 + +uint32 WRENCH_COMMAND_NORMAL_CONFIGURATION_CHANGED = 8 + +uint32 WRENCH_COMMAND_RESTRICTED_CONFIGURATION_CHANGED = 9 + +uint32 CONTROL_CONFIGURATION_FACTORY_RESTORED = 10 + +uint32 TOOL_CONFIGURATION_CHANGED = 11 + +uint32 PAYLOAD_CONFIGURATION_CHANGED = 12 + +uint32 CARTESIAN_REFERENCE_CHANGED = 13 + +uint32 CHANGE_CONTROL_MODE_FAILED = 14 diff --git a/kortex_driver/msg/generated/control_config/ControlConfigurationNotification.msg b/kortex_driver/msg/generated/control_config/ControlConfigurationNotification.msg new file mode 100644 index 00000000..38635725 --- /dev/null +++ b/kortex_driver/msg/generated/control_config/ControlConfigurationNotification.msg @@ -0,0 +1,5 @@ + +uint32 event +Timestamp timestamp +UserProfileHandle user_handle +Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/generated/control_config/GravityVector.msg b/kortex_driver/msg/generated/control_config/GravityVector.msg new file mode 100644 index 00000000..678ce634 --- /dev/null +++ b/kortex_driver/msg/generated/control_config/GravityVector.msg @@ -0,0 +1,4 @@ + +float32 x +float32 y +float32 z \ No newline at end of file diff --git a/kortex_driver/msg/generated/control_config/PayloadInformation.msg b/kortex_driver/msg/generated/control_config/PayloadInformation.msg new file mode 100644 index 00000000..f60166ea --- /dev/null +++ b/kortex_driver/msg/generated/control_config/PayloadInformation.msg @@ -0,0 +1,3 @@ + +float32 payload_mass +ControlConfig_Position payload_mass_center \ No newline at end of file diff --git a/kortex_driver/msg/generated/control_config/ToolConfiguration.msg b/kortex_driver/msg/generated/control_config/ToolConfiguration.msg new file mode 100644 index 00000000..3174f45d --- /dev/null +++ b/kortex_driver/msg/generated/control_config/ToolConfiguration.msg @@ -0,0 +1,4 @@ + +CartesianTransform tool_transform +float32 tool_mass +ControlConfig_Position tool_mass_center \ No newline at end of file diff --git a/kortex_device_manager/msg/BootloaderVersion.msg b/kortex_driver/msg/generated/device_config/BootloaderVersion.msg similarity index 92% rename from kortex_device_manager/msg/BootloaderVersion.msg rename to kortex_driver/msg/generated/device_config/BootloaderVersion.msg index d6dc8352..12244904 100644 --- a/kortex_device_manager/msg/BootloaderVersion.msg +++ b/kortex_driver/msg/generated/device_config/BootloaderVersion.msg @@ -1,2 +1,2 @@ - + uint32 bootloader_version \ No newline at end of file diff --git a/kortex_driver/msg/generated/device_config/Calibration.msg b/kortex_driver/msg/generated/device_config/Calibration.msg new file mode 100644 index 00000000..9d8eda45 --- /dev/null +++ b/kortex_driver/msg/generated/device_config/Calibration.msg @@ -0,0 +1,3 @@ + +uint32 calibration_item +CalibrationParameter[] calibration_parameter \ No newline at end of file diff --git a/kortex_driver/msg/generated/device_config/CalibrationElement.msg b/kortex_driver/msg/generated/device_config/CalibrationElement.msg new file mode 100644 index 00000000..017bd567 --- /dev/null +++ b/kortex_driver/msg/generated/device_config/CalibrationElement.msg @@ -0,0 +1,2 @@ + +uint32 calibration_item \ No newline at end of file diff --git a/kortex_driver/msg/generated/device_config/CalibrationItem.msg b/kortex_driver/msg/generated/device_config/CalibrationItem.msg new file mode 100644 index 00000000..5afadf72 --- /dev/null +++ b/kortex_driver/msg/generated/device_config/CalibrationItem.msg @@ -0,0 +1,10 @@ + +uint32 UNSPECIFIED_CALIBRATION_ITEM = 0 + +uint32 COGGING = 1 + +uint32 MAGNETIC = 2 + +uint32 MOTOR = 3 + +uint32 POSITION_RANGE = 4 diff --git a/kortex_driver/msg/generated/device_config/CalibrationParameter.msg b/kortex_driver/msg/generated/device_config/CalibrationParameter.msg new file mode 100644 index 00000000..f19b5b5f --- /dev/null +++ b/kortex_driver/msg/generated/device_config/CalibrationParameter.msg @@ -0,0 +1,3 @@ + +uint32 calibration_parameter_identifier +CalibrationParameter_value oneof_value \ No newline at end of file diff --git a/kortex_driver/msg/generated/device_config/CalibrationParameter_value.msg b/kortex_driver/msg/generated/device_config/CalibrationParameter_value.msg new file mode 100644 index 00000000..12cff863 --- /dev/null +++ b/kortex_driver/msg/generated/device_config/CalibrationParameter_value.msg @@ -0,0 +1,4 @@ + +uint32[] signedIntValue +uint32[] unsignedIntValue +uint32[] floatValue \ No newline at end of file diff --git a/kortex_driver/msg/generated/device_config/CalibrationResult.msg b/kortex_driver/msg/generated/device_config/CalibrationResult.msg new file mode 100644 index 00000000..d5047bef --- /dev/null +++ b/kortex_driver/msg/generated/device_config/CalibrationResult.msg @@ -0,0 +1,3 @@ + +uint32 calibration_status +uint32 calibration_details \ No newline at end of file diff --git a/kortex_driver/msg/generated/device_config/CalibrationStatus.msg b/kortex_driver/msg/generated/device_config/CalibrationStatus.msg new file mode 100644 index 00000000..25b33921 --- /dev/null +++ b/kortex_driver/msg/generated/device_config/CalibrationStatus.msg @@ -0,0 +1,10 @@ + +uint32 UNSPECIFIED_CALIBRATION_STATUS = 0 + +uint32 NOT_CALIBRATED = 1 + +uint32 IN_PROGRESS = 2 + +uint32 CALIBRATED = 3 + +uint32 IN_FAULT = 4 diff --git a/kortex_driver/msg/generated/device_config/CapSenseRegister.msg b/kortex_driver/msg/generated/device_config/CapSenseRegister.msg new file mode 100644 index 00000000..e42eb76e --- /dev/null +++ b/kortex_driver/msg/generated/device_config/CapSenseRegister.msg @@ -0,0 +1,3 @@ + +uint32 address +uint32 value \ No newline at end of file diff --git a/kortex_driver/msg/generated/device_config/DeviceConfig_CapSenseConfig.msg b/kortex_driver/msg/generated/device_config/DeviceConfig_CapSenseConfig.msg new file mode 100644 index 00000000..cde8aeaf --- /dev/null +++ b/kortex_driver/msg/generated/device_config/DeviceConfig_CapSenseConfig.msg @@ -0,0 +1,4 @@ + +uint32 mode +float32 threshold_a +float32 threshold_b \ No newline at end of file diff --git a/kortex_driver/msg/generated/device_config/DeviceConfig_CapSenseMode.msg b/kortex_driver/msg/generated/device_config/DeviceConfig_CapSenseMode.msg new file mode 100644 index 00000000..5a7abc4c --- /dev/null +++ b/kortex_driver/msg/generated/device_config/DeviceConfig_CapSenseMode.msg @@ -0,0 +1,12 @@ + +uint32 RESERVED = 0 + +uint32 INACTIVE = 1 + +uint32 ACTIVE_AUTO_THRESHOLD = 2 + +uint32 ACTIVE_NOISE_ATT = 4 + +uint32 ACTIVE_NORMAL = 5 + +uint32 CONFIGURATION = 6 diff --git a/kortex_device_manager/msg/SafetyLimitType.msg b/kortex_driver/msg/generated/device_config/DeviceConfig_SafetyLimitType.msg similarity index 100% rename from kortex_device_manager/msg/SafetyLimitType.msg rename to kortex_driver/msg/generated/device_config/DeviceConfig_SafetyLimitType.msg diff --git a/kortex_driver/msg/generated/device_config/DeviceConfig_ServiceVersion.msg b/kortex_driver/msg/generated/device_config/DeviceConfig_ServiceVersion.msg new file mode 100644 index 00000000..9665d1c2 --- /dev/null +++ b/kortex_driver/msg/generated/device_config/DeviceConfig_ServiceVersion.msg @@ -0,0 +1,4 @@ + +uint32 RESERVED_0 = 0 + +uint32 CURRENT_VERSION = 1 diff --git a/kortex_device_manager/msg/DeviceType.msg b/kortex_driver/msg/generated/device_config/DeviceType.msg similarity index 95% rename from kortex_device_manager/msg/DeviceType.msg rename to kortex_driver/msg/generated/device_config/DeviceType.msg index b4dd97c2..8206d5f0 100644 --- a/kortex_device_manager/msg/DeviceType.msg +++ b/kortex_driver/msg/generated/device_config/DeviceType.msg @@ -1,3 +1,2 @@ - uint32 device_type \ No newline at end of file diff --git a/kortex_device_manager/msg/FirmwareVersion.msg b/kortex_driver/msg/generated/device_config/FirmwareVersion.msg similarity index 92% rename from kortex_device_manager/msg/FirmwareVersion.msg rename to kortex_driver/msg/generated/device_config/FirmwareVersion.msg index ef44f90b..717c4f07 100644 --- a/kortex_device_manager/msg/FirmwareVersion.msg +++ b/kortex_driver/msg/generated/device_config/FirmwareVersion.msg @@ -1,2 +1,2 @@ - + uint32 firmware_version \ No newline at end of file diff --git a/kortex_driver/msg/generated/device_config/IPv4Settings.msg b/kortex_driver/msg/generated/device_config/IPv4Settings.msg new file mode 100644 index 00000000..bf67c151 --- /dev/null +++ b/kortex_driver/msg/generated/device_config/IPv4Settings.msg @@ -0,0 +1,4 @@ + +uint32 ipv4_address +uint32 ipv4_subnet_mask +uint32 ipv4_default_gateway \ No newline at end of file diff --git a/kortex_device_manager/msg/MACAddress.msg b/kortex_driver/msg/generated/device_config/MACAddress.msg similarity index 90% rename from kortex_device_manager/msg/MACAddress.msg rename to kortex_driver/msg/generated/device_config/MACAddress.msg index a2764fac..02257b1b 100644 --- a/kortex_device_manager/msg/MACAddress.msg +++ b/kortex_driver/msg/generated/device_config/MACAddress.msg @@ -1,2 +1,2 @@ - + uint8[] mac_address \ No newline at end of file diff --git a/kortex_device_manager/msg/ModelNumber.msg b/kortex_driver/msg/generated/device_config/ModelNumber.msg similarity index 90% rename from kortex_device_manager/msg/ModelNumber.msg rename to kortex_driver/msg/generated/device_config/ModelNumber.msg index adb82526..c9f4bde7 100644 --- a/kortex_device_manager/msg/ModelNumber.msg +++ b/kortex_driver/msg/generated/device_config/ModelNumber.msg @@ -1,2 +1,2 @@ - + string model_number \ No newline at end of file diff --git a/kortex_device_manager/msg/PartNumber.msg b/kortex_driver/msg/generated/device_config/PartNumber.msg similarity index 90% rename from kortex_device_manager/msg/PartNumber.msg rename to kortex_driver/msg/generated/device_config/PartNumber.msg index 0cd6468f..1a664a00 100644 --- a/kortex_device_manager/msg/PartNumber.msg +++ b/kortex_driver/msg/generated/device_config/PartNumber.msg @@ -1,2 +1,2 @@ - + string part_number \ No newline at end of file diff --git a/kortex_device_manager/msg/PartNumberRevision.msg b/kortex_driver/msg/generated/device_config/PartNumberRevision.msg similarity index 93% rename from kortex_device_manager/msg/PartNumberRevision.msg rename to kortex_driver/msg/generated/device_config/PartNumberRevision.msg index 90cb8f65..542f7cc8 100644 --- a/kortex_device_manager/msg/PartNumberRevision.msg +++ b/kortex_driver/msg/generated/device_config/PartNumberRevision.msg @@ -1,2 +1,2 @@ - + string part_number_revision \ No newline at end of file diff --git a/kortex_device_manager/msg/PowerOnSelfTestResult.msg b/kortex_driver/msg/generated/device_config/PowerOnSelfTestResult.msg similarity index 94% rename from kortex_device_manager/msg/PowerOnSelfTestResult.msg rename to kortex_driver/msg/generated/device_config/PowerOnSelfTestResult.msg index 53a0cef1..f7c1b8fe 100644 --- a/kortex_device_manager/msg/PowerOnSelfTestResult.msg +++ b/kortex_driver/msg/generated/device_config/PowerOnSelfTestResult.msg @@ -1,2 +1,2 @@ - + uint32 power_on_self_test_result \ No newline at end of file diff --git a/kortex_device_manager/msg/RebootRqst.msg b/kortex_driver/msg/generated/device_config/RebootRqst.msg similarity index 85% rename from kortex_device_manager/msg/RebootRqst.msg rename to kortex_driver/msg/generated/device_config/RebootRqst.msg index befd3fc3..c590050c 100644 --- a/kortex_device_manager/msg/RebootRqst.msg +++ b/kortex_driver/msg/generated/device_config/RebootRqst.msg @@ -1,2 +1,2 @@ - + uint32 delay \ No newline at end of file diff --git a/kortex_device_manager/msg/RunMode.msg b/kortex_driver/msg/generated/device_config/RunMode.msg similarity index 94% rename from kortex_device_manager/msg/RunMode.msg rename to kortex_driver/msg/generated/device_config/RunMode.msg index 7b3b1a3a..6cb42494 100644 --- a/kortex_device_manager/msg/RunMode.msg +++ b/kortex_driver/msg/generated/device_config/RunMode.msg @@ -1,3 +1,2 @@ - uint32 run_mode \ No newline at end of file diff --git a/kortex_device_manager/msg/RunModes.msg b/kortex_driver/msg/generated/device_config/RunModes.msg similarity index 100% rename from kortex_device_manager/msg/RunModes.msg rename to kortex_driver/msg/generated/device_config/RunModes.msg diff --git a/kortex_driver/msg/generated/device_config/SafetyConfiguration.msg b/kortex_driver/msg/generated/device_config/SafetyConfiguration.msg new file mode 100644 index 00000000..55cc2d3a --- /dev/null +++ b/kortex_driver/msg/generated/device_config/SafetyConfiguration.msg @@ -0,0 +1,5 @@ + +SafetyHandle handle +float32 error_threshold +float32 warning_threshold +SafetyEnable enable \ No newline at end of file diff --git a/kortex_device_manager/msg/SafetyConfigurationList.msg b/kortex_driver/msg/generated/device_config/SafetyConfigurationList.msg similarity index 97% rename from kortex_device_manager/msg/SafetyConfigurationList.msg rename to kortex_driver/msg/generated/device_config/SafetyConfigurationList.msg index 8ae23b3d..463c33d9 100644 --- a/kortex_device_manager/msg/SafetyConfigurationList.msg +++ b/kortex_driver/msg/generated/device_config/SafetyConfigurationList.msg @@ -1,3 +1,2 @@ - SafetyConfiguration[] configuration \ No newline at end of file diff --git a/kortex_driver/msg/generated/device_config/SafetyEnable.msg b/kortex_driver/msg/generated/device_config/SafetyEnable.msg new file mode 100644 index 00000000..eacdd941 --- /dev/null +++ b/kortex_driver/msg/generated/device_config/SafetyEnable.msg @@ -0,0 +1,3 @@ + +SafetyHandle handle +bool enable \ No newline at end of file diff --git a/kortex_driver/msg/generated/device_config/SafetyInformation.msg b/kortex_driver/msg/generated/device_config/SafetyInformation.msg new file mode 100644 index 00000000..985096bf --- /dev/null +++ b/kortex_driver/msg/generated/device_config/SafetyInformation.msg @@ -0,0 +1,12 @@ + +SafetyHandle handle +bool can_change_safety_state +bool has_warning_threshold +bool has_error_threshold +uint32 limit_type +float32 default_warning_threshold +float32 default_error_threshold +float32 upper_hard_limit +float32 lower_hard_limit +uint32 status +uint32 unit \ No newline at end of file diff --git a/kortex_device_manager/msg/SafetyInformationList.msg b/kortex_driver/msg/generated/device_config/SafetyInformationList.msg similarity index 96% rename from kortex_device_manager/msg/SafetyInformationList.msg rename to kortex_driver/msg/generated/device_config/SafetyInformationList.msg index ff11edbe..976e2b85 100644 --- a/kortex_device_manager/msg/SafetyInformationList.msg +++ b/kortex_driver/msg/generated/device_config/SafetyInformationList.msg @@ -1,3 +1,2 @@ - SafetyInformation[] information \ No newline at end of file diff --git a/kortex_device_manager/msg/SafetyStatus.msg b/kortex_driver/msg/generated/device_config/SafetyStatus.msg similarity index 92% rename from kortex_device_manager/msg/SafetyStatus.msg rename to kortex_driver/msg/generated/device_config/SafetyStatus.msg index b82ac221..129c5a37 100644 --- a/kortex_device_manager/msg/SafetyStatus.msg +++ b/kortex_driver/msg/generated/device_config/SafetyStatus.msg @@ -1,3 +1,2 @@ - uint32 value \ No newline at end of file diff --git a/kortex_driver/msg/generated/device_config/SafetyThreshold.msg b/kortex_driver/msg/generated/device_config/SafetyThreshold.msg new file mode 100644 index 00000000..ba839ee5 --- /dev/null +++ b/kortex_driver/msg/generated/device_config/SafetyThreshold.msg @@ -0,0 +1,3 @@ + +SafetyHandle handle +float32 value \ No newline at end of file diff --git a/kortex_device_manager/msg/SerialNumber.msg b/kortex_driver/msg/generated/device_config/SerialNumber.msg similarity index 90% rename from kortex_device_manager/msg/SerialNumber.msg rename to kortex_driver/msg/generated/device_config/SerialNumber.msg index 9831a3ee..ac559958 100644 --- a/kortex_device_manager/msg/SerialNumber.msg +++ b/kortex_driver/msg/generated/device_config/SerialNumber.msg @@ -1,2 +1,2 @@ - + string serial_number \ No newline at end of file diff --git a/kortex_device_manager/msg/DeviceHandles.msg b/kortex_driver/msg/generated/device_manager/DeviceHandles.msg similarity index 96% rename from kortex_device_manager/msg/DeviceHandles.msg rename to kortex_driver/msg/generated/device_manager/DeviceHandles.msg index 739f4ff3..7ce75eff 100644 --- a/kortex_device_manager/msg/DeviceHandles.msg +++ b/kortex_driver/msg/generated/device_manager/DeviceHandles.msg @@ -1,3 +1,2 @@ - DeviceHandle[] device_handle \ No newline at end of file diff --git a/kortex_driver/msg/generated/device_manager/DeviceManager_ServiceVersion.msg b/kortex_driver/msg/generated/device_manager/DeviceManager_ServiceVersion.msg new file mode 100644 index 00000000..9665d1c2 --- /dev/null +++ b/kortex_driver/msg/generated/device_manager/DeviceManager_ServiceVersion.msg @@ -0,0 +1,4 @@ + +uint32 RESERVED_0 = 0 + +uint32 CURRENT_VERSION = 1 diff --git a/kortex_driver/msg/generated/gripper_config/GripperConfig_SafetyIdentifier.msg b/kortex_driver/msg/generated/gripper_config/GripperConfig_SafetyIdentifier.msg new file mode 100644 index 00000000..d16957a8 --- /dev/null +++ b/kortex_driver/msg/generated/gripper_config/GripperConfig_SafetyIdentifier.msg @@ -0,0 +1,20 @@ + +uint32 UNSPECIFIED_ACTUATOR_SAFETY_IDENTIFIER = 0 + +uint32 MAXIMUM_MOTOR_CURRENT = 1 + +uint32 MAXIMUM_VOLTAGE = 2 + +uint32 MINIMUM_VOLTAGE = 4 + +uint32 MAXIMUM_MOTOR_TEMPERATURE = 8 + +uint32 MAXIMUM_CORE_TEMPERATURE = 16 + +uint32 NON_VOLATILE_MEMORY_CORRUPTED = 32 + +uint32 EMERGENCY_LINE_ASSERTED = 64 + +uint32 COMMUNICATION_TICK_LOST = 128 + +uint32 WATCHDOG_TRIGGERED = 256 diff --git a/kortex_driver/msg/generated/gripper_config/RobotiqGripperStatusFlags.msg b/kortex_driver/msg/generated/gripper_config/RobotiqGripperStatusFlags.msg new file mode 100644 index 00000000..f4f14583 --- /dev/null +++ b/kortex_driver/msg/generated/gripper_config/RobotiqGripperStatusFlags.msg @@ -0,0 +1,10 @@ + +uint32 UNSPECIFIED_ROBOTIQ_STATUS = 0 + +uint32 ROBOTIQ_STAT_INITIALIZED = 1 + +uint32 ROBOTIQ_STAT_OBJECT_DETECTED = 2 + +uint32 ROBOTIQ_STAT_POS_REACHED = 4 + +uint32 ROBOTIQ_STAT_STOPPED = 8 diff --git a/kortex_driver/msg/generated/gripper_cyclic/CustomDataUnit.msg b/kortex_driver/msg/generated/gripper_cyclic/CustomDataUnit.msg new file mode 100644 index 00000000..7cfb944c --- /dev/null +++ b/kortex_driver/msg/generated/gripper_cyclic/CustomDataUnit.msg @@ -0,0 +1,17 @@ + +uint32 custom_data_0 +uint32 custom_data_1 +uint32 custom_data_2 +uint32 custom_data_3 +uint32 custom_data_4 +uint32 custom_data_5 +uint32 custom_data_6 +uint32 custom_data_7 +uint32 custom_data_8 +uint32 custom_data_9 +uint32 custom_data_10 +uint32 custom_data_11 +uint32 custom_data_12 +uint32 custom_data_13 +uint32 custom_data_14 +uint32 custom_data_15 \ No newline at end of file diff --git a/kortex_driver/msg/generated/gripper_cyclic/GripperCyclic_Command.msg b/kortex_driver/msg/generated/gripper_cyclic/GripperCyclic_Command.msg new file mode 100644 index 00000000..ff2311aa --- /dev/null +++ b/kortex_driver/msg/generated/gripper_cyclic/GripperCyclic_Command.msg @@ -0,0 +1,4 @@ + +GripperCyclic_MessageId command_id +uint32 flags +MotorCommand[] motor_cmd \ No newline at end of file diff --git a/kortex_driver/msg/generated/gripper_cyclic/GripperCyclic_CustomData.msg b/kortex_driver/msg/generated/gripper_cyclic/GripperCyclic_CustomData.msg new file mode 100644 index 00000000..05747689 --- /dev/null +++ b/kortex_driver/msg/generated/gripper_cyclic/GripperCyclic_CustomData.msg @@ -0,0 +1,4 @@ + +GripperCyclic_MessageId custom_data_id +CustomDataUnit gripper_custom_data +CustomDataUnit[] motor_custom_data \ No newline at end of file diff --git a/kortex_driver/msg/generated/gripper_cyclic/GripperCyclic_Feedback.msg b/kortex_driver/msg/generated/gripper_cyclic/GripperCyclic_Feedback.msg new file mode 100644 index 00000000..4089f067 --- /dev/null +++ b/kortex_driver/msg/generated/gripper_cyclic/GripperCyclic_Feedback.msg @@ -0,0 +1,8 @@ + +GripperCyclic_MessageId feedback_id +uint32 status_flags +uint32 fault_bank_a +uint32 fault_bank_b +uint32 warning_bank_a +uint32 warning_bank_b +MotorFeedback[] motor \ No newline at end of file diff --git a/kortex_driver/msg/generated/gripper_cyclic/GripperCyclic_MessageId.msg b/kortex_driver/msg/generated/gripper_cyclic/GripperCyclic_MessageId.msg new file mode 100644 index 00000000..9d1731bd --- /dev/null +++ b/kortex_driver/msg/generated/gripper_cyclic/GripperCyclic_MessageId.msg @@ -0,0 +1,2 @@ + +uint32 identifier \ No newline at end of file diff --git a/kortex_driver/msg/generated/gripper_cyclic/GripperCyclic_ServiceVersion.msg b/kortex_driver/msg/generated/gripper_cyclic/GripperCyclic_ServiceVersion.msg new file mode 100644 index 00000000..9665d1c2 --- /dev/null +++ b/kortex_driver/msg/generated/gripper_cyclic/GripperCyclic_ServiceVersion.msg @@ -0,0 +1,4 @@ + +uint32 RESERVED_0 = 0 + +uint32 CURRENT_VERSION = 1 diff --git a/kortex_driver/msg/generated/gripper_cyclic/MotorCommand.msg b/kortex_driver/msg/generated/gripper_cyclic/MotorCommand.msg new file mode 100644 index 00000000..977af075 --- /dev/null +++ b/kortex_driver/msg/generated/gripper_cyclic/MotorCommand.msg @@ -0,0 +1,5 @@ + +uint32 motor_id +float32 position +float32 velocity +float32 force \ No newline at end of file diff --git a/kortex_driver/msg/generated/gripper_cyclic/MotorFeedback.msg b/kortex_driver/msg/generated/gripper_cyclic/MotorFeedback.msg new file mode 100644 index 00000000..e83cf2ea --- /dev/null +++ b/kortex_driver/msg/generated/gripper_cyclic/MotorFeedback.msg @@ -0,0 +1,7 @@ + +uint32 motor_id +float32 position +float32 velocity +float32 current_motor +float32 voltage +float32 temperature_motor \ No newline at end of file diff --git a/kortex_driver/msg/generated/interconnect_config/EthernetConfiguration.msg b/kortex_driver/msg/generated/interconnect_config/EthernetConfiguration.msg new file mode 100644 index 00000000..90514059 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/EthernetConfiguration.msg @@ -0,0 +1,5 @@ + +uint32 device +bool enabled +uint32 speed +uint32 duplex \ No newline at end of file diff --git a/kortex_driver/msg/generated/interconnect_config/EthernetDevice.msg b/kortex_driver/msg/generated/interconnect_config/EthernetDevice.msg new file mode 100644 index 00000000..9c9173f7 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/EthernetDevice.msg @@ -0,0 +1,4 @@ + +uint32 ETHERNET_DEVICE_UNSPECIFIED = 0 + +uint32 ETHERNET_DEVICE_EXPANSION = 1 diff --git a/kortex_driver/msg/generated/interconnect_config/EthernetDeviceIdentification.msg b/kortex_driver/msg/generated/interconnect_config/EthernetDeviceIdentification.msg new file mode 100644 index 00000000..bf7c80e6 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/EthernetDeviceIdentification.msg @@ -0,0 +1,2 @@ + +uint32 device \ No newline at end of file diff --git a/kortex_driver/msg/generated/interconnect_config/EthernetDuplex.msg b/kortex_driver/msg/generated/interconnect_config/EthernetDuplex.msg new file mode 100644 index 00000000..a3de1c53 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/EthernetDuplex.msg @@ -0,0 +1,6 @@ + +uint32 ETHERNET_DUPLEX_UNSPECIFIED = 0 + +uint32 ETHERNET_DUPLEX_HALF = 1 + +uint32 ETHERNET_DUPLEX_FULL = 2 diff --git a/kortex_driver/msg/generated/interconnect_config/EthernetSpeed.msg b/kortex_driver/msg/generated/interconnect_config/EthernetSpeed.msg new file mode 100644 index 00000000..fe5e4d70 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/EthernetSpeed.msg @@ -0,0 +1,6 @@ + +uint32 ETHERNET_SPEED_UNSPECIFIED = 0 + +uint32 ETHERNET_SPEED_10M = 1 + +uint32 ETHERNET_SPEED_100M = 2 diff --git a/kortex_driver/msg/generated/interconnect_config/GPIOConfiguration.msg b/kortex_driver/msg/generated/interconnect_config/GPIOConfiguration.msg new file mode 100644 index 00000000..578cc66e --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/GPIOConfiguration.msg @@ -0,0 +1,5 @@ + +uint32 identifier +uint32 mode +uint32 pull +uint32 default_value \ No newline at end of file diff --git a/kortex_driver/msg/generated/interconnect_config/GPIOIdentification.msg b/kortex_driver/msg/generated/interconnect_config/GPIOIdentification.msg new file mode 100644 index 00000000..9d1731bd --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/GPIOIdentification.msg @@ -0,0 +1,2 @@ + +uint32 identifier \ No newline at end of file diff --git a/kortex_driver/msg/generated/interconnect_config/GPIOIdentifier.msg b/kortex_driver/msg/generated/interconnect_config/GPIOIdentifier.msg new file mode 100644 index 00000000..017720c0 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/GPIOIdentifier.msg @@ -0,0 +1,10 @@ + +uint32 GPIO_IDENTIFIER_UNSPECIFIED = 0 + +uint32 GPIO_IDENTIFIER_1 = 1 + +uint32 GPIO_IDENTIFIER_2 = 2 + +uint32 GPIO_IDENTIFIER_3 = 3 + +uint32 GPIO_IDENTIFIER_4 = 4 diff --git a/kortex_driver/msg/generated/interconnect_config/GPIOMode.msg b/kortex_driver/msg/generated/interconnect_config/GPIOMode.msg new file mode 100644 index 00000000..42b05ff6 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/GPIOMode.msg @@ -0,0 +1,8 @@ + +uint32 GPIO_MODE_UNSPECIFIED = 0 + +uint32 GPIO_MODE_INPUT_FLOATING = 1 + +uint32 GPIO_MODE_OUTPUT_PUSH_PULL = 2 + +uint32 GPIO_MODE_OUTPUT_OPEN_DRAIN = 3 diff --git a/kortex_driver/msg/generated/interconnect_config/GPIOPull.msg b/kortex_driver/msg/generated/interconnect_config/GPIOPull.msg new file mode 100644 index 00000000..138ce140 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/GPIOPull.msg @@ -0,0 +1,8 @@ + +uint32 GPIO_PULL_UNSPECIFIED = 0 + +uint32 GPIO_PULL_NONE = 1 + +uint32 GPIO_PULL_UP = 2 + +uint32 GPIO_PULL_DOWN = 3 diff --git a/kortex_driver/msg/generated/interconnect_config/GPIOState.msg b/kortex_driver/msg/generated/interconnect_config/GPIOState.msg new file mode 100644 index 00000000..ca656379 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/GPIOState.msg @@ -0,0 +1,3 @@ + +uint32 identifier +uint32 value \ No newline at end of file diff --git a/kortex_driver/msg/generated/interconnect_config/GPIOValue.msg b/kortex_driver/msg/generated/interconnect_config/GPIOValue.msg new file mode 100644 index 00000000..ac352ade --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/GPIOValue.msg @@ -0,0 +1,6 @@ + +uint32 GPIO_VALUE_UNSPECIFIED = 0 + +uint32 GPIO_VALUE_LOW = 1 + +uint32 GPIO_VALUE_HIGH = 2 diff --git a/kortex_driver/msg/generated/interconnect_config/I2CConfiguration.msg b/kortex_driver/msg/generated/interconnect_config/I2CConfiguration.msg new file mode 100644 index 00000000..c751857d --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/I2CConfiguration.msg @@ -0,0 +1,5 @@ + +uint32 device +bool enabled +uint32 mode +uint32 addressing \ No newline at end of file diff --git a/kortex_driver/msg/generated/interconnect_config/I2CData.msg b/kortex_driver/msg/generated/interconnect_config/I2CData.msg new file mode 100644 index 00000000..60dc3777 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/I2CData.msg @@ -0,0 +1,3 @@ + +uint8[] data +uint32 size \ No newline at end of file diff --git a/kortex_driver/msg/generated/interconnect_config/I2CDevice.msg b/kortex_driver/msg/generated/interconnect_config/I2CDevice.msg new file mode 100644 index 00000000..031e6cd4 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/I2CDevice.msg @@ -0,0 +1,4 @@ + +uint32 I2C_DEVICE_UNSPECIFIED = 0 + +uint32 I2C_DEVICE_EXPANSION = 1 diff --git a/kortex_driver/msg/generated/interconnect_config/I2CDeviceAddressing.msg b/kortex_driver/msg/generated/interconnect_config/I2CDeviceAddressing.msg new file mode 100644 index 00000000..7a509d08 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/I2CDeviceAddressing.msg @@ -0,0 +1,6 @@ + +uint32 I2C_DEVICE_ADDRESSING_UNSPECIFIED = 0 + +uint32 I2C_DEVICE_ADDRESSING_7_BITS = 1 + +uint32 I2C_DEVICE_ADDRESSING_10_BITS = 2 diff --git a/kortex_driver/msg/generated/interconnect_config/I2CDeviceIdentification.msg b/kortex_driver/msg/generated/interconnect_config/I2CDeviceIdentification.msg new file mode 100644 index 00000000..bf7c80e6 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/I2CDeviceIdentification.msg @@ -0,0 +1,2 @@ + +uint32 device \ No newline at end of file diff --git a/kortex_driver/msg/generated/interconnect_config/I2CMode.msg b/kortex_driver/msg/generated/interconnect_config/I2CMode.msg new file mode 100644 index 00000000..a846ebe3 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/I2CMode.msg @@ -0,0 +1,8 @@ + +uint32 I2C_MODE_UNSPECIFIED = 0 + +uint32 I2C_MODE_STANDARD = 1 + +uint32 I2C_MODE_FAST = 2 + +uint32 I2C_MODE_FAST_PLUS = 3 diff --git a/kortex_driver/msg/generated/interconnect_config/I2CReadParameter.msg b/kortex_driver/msg/generated/interconnect_config/I2CReadParameter.msg new file mode 100644 index 00000000..f8c3bcea --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/I2CReadParameter.msg @@ -0,0 +1,5 @@ + +uint32 device +uint32 device_address +uint32 size +uint32 timeout \ No newline at end of file diff --git a/kortex_driver/msg/generated/interconnect_config/I2CReadRegisterParameter.msg b/kortex_driver/msg/generated/interconnect_config/I2CReadRegisterParameter.msg new file mode 100644 index 00000000..81f85190 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/I2CReadRegisterParameter.msg @@ -0,0 +1,7 @@ + +uint32 device +uint32 device_address +uint32 register_address +uint32 register_address_size +uint32 size +uint32 timeout \ No newline at end of file diff --git a/kortex_driver/msg/generated/interconnect_config/I2CRegisterAddressSize.msg b/kortex_driver/msg/generated/interconnect_config/I2CRegisterAddressSize.msg new file mode 100644 index 00000000..6a1d0f34 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/I2CRegisterAddressSize.msg @@ -0,0 +1,6 @@ + +uint32 I2C_REGISTER_ADDRESS_SIZE_UNSPECIFIED = 0 + +uint32 I2C_REGISTER_ADDRESS_SIZE_8_BITS = 1 + +uint32 I2C_REGISTER_ADDRESS_SIZE_16_BITS = 2 diff --git a/kortex_driver/msg/generated/interconnect_config/I2CWriteParameter.msg b/kortex_driver/msg/generated/interconnect_config/I2CWriteParameter.msg new file mode 100644 index 00000000..65147e41 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/I2CWriteParameter.msg @@ -0,0 +1,5 @@ + +uint32 device +uint32 device_address +uint32 timeout +I2CData data \ No newline at end of file diff --git a/kortex_driver/msg/generated/interconnect_config/I2CWriteRegisterParameter.msg b/kortex_driver/msg/generated/interconnect_config/I2CWriteRegisterParameter.msg new file mode 100644 index 00000000..26abaeda --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/I2CWriteRegisterParameter.msg @@ -0,0 +1,7 @@ + +uint32 device +uint32 device_address +uint32 register_address +uint32 register_address_size +uint32 timeout +I2CData data \ No newline at end of file diff --git a/kortex_driver/msg/generated/interconnect_config/InterconnectConfig_SafetyIdentifier.msg b/kortex_driver/msg/generated/interconnect_config/InterconnectConfig_SafetyIdentifier.msg new file mode 100644 index 00000000..9dd7f856 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/InterconnectConfig_SafetyIdentifier.msg @@ -0,0 +1,20 @@ + +uint32 UNSPECIFIED_INTERCONNECT_SAFETY_IDENTIFIER = 0 + +uint32 MAXIMUM_MOTOR_CURRENT = 1 + +uint32 MAXIMUM_VOLTAGE = 2 + +uint32 MINIMUM_VOLTAGE = 4 + +uint32 MAXIMUM_MOTOR_TEMPERATURE = 8 + +uint32 MAXIMUM_CORE_TEMPERATURE = 16 + +uint32 NON_VOLATILE_MEMORY_CORRUPTED = 32 + +uint32 EMERGENCY_LINE_ASSERTED = 64 + +uint32 COMMUNICATION_TICK_LOST = 128 + +uint32 WATCHDOG_TRIGGERED = 256 diff --git a/kortex_driver/msg/generated/interconnect_config/InterconnectConfig_ServiceVersion.msg b/kortex_driver/msg/generated/interconnect_config/InterconnectConfig_ServiceVersion.msg new file mode 100644 index 00000000..9665d1c2 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/InterconnectConfig_ServiceVersion.msg @@ -0,0 +1,4 @@ + +uint32 RESERVED_0 = 0 + +uint32 CURRENT_VERSION = 1 diff --git a/kortex_driver/msg/generated/interconnect_config/UARTPortId.msg b/kortex_driver/msg/generated/interconnect_config/UARTPortId.msg new file mode 100644 index 00000000..b9b3071e --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_config/UARTPortId.msg @@ -0,0 +1,4 @@ + +uint32 UART_PORT_UNSPECIFIED = 0 + +uint32 UART_PORT_EXPANSION = 1 diff --git a/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_Command.msg b/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_Command.msg new file mode 100644 index 00000000..3b6ebb5f --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_Command.msg @@ -0,0 +1,4 @@ + +InterconnectCyclic_MessageId command_id +uint32 flags +InterconnectCyclic_Command_tool_command oneof_tool_command \ No newline at end of file diff --git a/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_Command_tool_command.msg b/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_Command_tool_command.msg new file mode 100644 index 00000000..e02acb67 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_Command_tool_command.msg @@ -0,0 +1,2 @@ + +GripperCyclic_Command[] gripper_command \ No newline at end of file diff --git a/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_CustomData.msg b/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_CustomData.msg new file mode 100644 index 00000000..f400bbb8 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_CustomData.msg @@ -0,0 +1,19 @@ + +InterconnectCyclic_MessageId custom_data_id +uint32 custom_data_0 +uint32 custom_data_1 +uint32 custom_data_2 +uint32 custom_data_3 +uint32 custom_data_4 +uint32 custom_data_5 +uint32 custom_data_6 +uint32 custom_data_7 +uint32 custom_data_8 +uint32 custom_data_9 +uint32 custom_data_10 +uint32 custom_data_11 +uint32 custom_data_12 +uint32 custom_data_13 +uint32 custom_data_14 +uint32 custom_data_15 +InterconnectCyclic_CustomData_tool_customData oneof_tool_customData \ No newline at end of file diff --git a/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_CustomData_tool_customData.msg b/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_CustomData_tool_customData.msg new file mode 100644 index 00000000..4ed91af8 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_CustomData_tool_customData.msg @@ -0,0 +1,2 @@ + +GripperCyclic_CustomData[] gripper_custom_data \ No newline at end of file diff --git a/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_Feedback.msg b/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_Feedback.msg new file mode 100644 index 00000000..f272bc42 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_Feedback.msg @@ -0,0 +1,17 @@ + +InterconnectCyclic_MessageId feedback_id +uint32 status_flags +uint32 jitter_comm +float32 imu_acceleration_x +float32 imu_acceleration_y +float32 imu_acceleration_z +float32 imu_angular_velocity_x +float32 imu_angular_velocity_y +float32 imu_angular_velocity_z +float32 voltage +float32 temperature_core +uint32 fault_bank_a +uint32 fault_bank_b +uint32 warning_bank_a +uint32 warning_bank_b +InterconnectCyclic_Feedback_tool_feedback oneof_tool_feedback \ No newline at end of file diff --git a/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_Feedback_tool_feedback.msg b/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_Feedback_tool_feedback.msg new file mode 100644 index 00000000..956ed282 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_Feedback_tool_feedback.msg @@ -0,0 +1,2 @@ + +GripperCyclic_Feedback[] gripper_feedback \ No newline at end of file diff --git a/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_MessageId.msg b/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_MessageId.msg new file mode 100644 index 00000000..9d1731bd --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_MessageId.msg @@ -0,0 +1,2 @@ + +uint32 identifier \ No newline at end of file diff --git a/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_ServiceVersion.msg b/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_ServiceVersion.msg new file mode 100644 index 00000000..9665d1c2 --- /dev/null +++ b/kortex_driver/msg/generated/interconnect_cyclic/InterconnectCyclic_ServiceVersion.msg @@ -0,0 +1,4 @@ + +uint32 RESERVED_0 = 0 + +uint32 CURRENT_VERSION = 1 diff --git a/kortex_driver/msg/generated/product_configuration/ArmLaterality.msg b/kortex_driver/msg/generated/product_configuration/ArmLaterality.msg new file mode 100644 index 00000000..b4d05a64 --- /dev/null +++ b/kortex_driver/msg/generated/product_configuration/ArmLaterality.msg @@ -0,0 +1,8 @@ + +uint32 ARM_LATERALITY_UNSPECIFIED = 0 + +uint32 ARM_LATERALITY_NOT_APPLICABLE = 1 + +uint32 ARM_LATERALITY_LEFT = 2 + +uint32 ARM_LATERALITY_RIGHT = 3 diff --git a/kortex_driver/msg/generated/product_configuration/BaseType.msg b/kortex_driver/msg/generated/product_configuration/BaseType.msg new file mode 100644 index 00000000..e22729fa --- /dev/null +++ b/kortex_driver/msg/generated/product_configuration/BaseType.msg @@ -0,0 +1,8 @@ + +uint32 BASE_TYPE_UNSPECIFIED = 0 + +uint32 BASE_TYPE_L53_QUICK_CONNECT = 1 + +uint32 BASE_TYPE_L31_FIXED = 3 + +uint32 BASE_TYPE_HDK_FIXED = 4 diff --git a/kortex_driver/msg/generated/product_configuration/CompleteProductConfiguration.msg b/kortex_driver/msg/generated/product_configuration/CompleteProductConfiguration.msg new file mode 100644 index 00000000..9a1db225 --- /dev/null +++ b/kortex_driver/msg/generated/product_configuration/CompleteProductConfiguration.msg @@ -0,0 +1,13 @@ + +string kin +uint32 model +CountryCode country_code +string assembly_plant +string model_year +uint32 degree_of_freedom +uint32 base_type +uint32 end_effector_type +uint32 vision_module_type +uint32 interface_module_type +uint32 arm_laterality +uint32 wrist_type \ No newline at end of file diff --git a/kortex_driver/msg/generated/product_configuration/EndEffectorType.msg b/kortex_driver/msg/generated/product_configuration/EndEffectorType.msg new file mode 100644 index 00000000..20ee9ec4 --- /dev/null +++ b/kortex_driver/msg/generated/product_configuration/EndEffectorType.msg @@ -0,0 +1,8 @@ + +uint32 END_EFFECTOR_TYPE_UNSPECIFIED = 0 + +uint32 END_EFFECTOR_TYPE_NOT_INSTALLED = 1 + +uint32 END_EFFECTOR_TYPE_L31_GRIPPER_2F = 2 + +uint32 END_EFFECTOR_TYPE_ROBOTIQ_2F_85 = 3 diff --git a/kortex_driver/msg/generated/product_configuration/InterfaceModuleType.msg b/kortex_driver/msg/generated/product_configuration/InterfaceModuleType.msg new file mode 100644 index 00000000..b9983688 --- /dev/null +++ b/kortex_driver/msg/generated/product_configuration/InterfaceModuleType.msg @@ -0,0 +1,8 @@ + +uint32 INTERFACE_MODULE_TYPE_UNSPECIFIED = 0 + +uint32 INTERFACE_MODULE_TYPE_NOT_INSTALLED = 1 + +uint32 INTERFACE_MODULE_TYPE_L53 = 2 + +uint32 INTERFACE_MODULE_TYPE_L31 = 3 diff --git a/kortex_driver/msg/generated/product_configuration/ModelId.msg b/kortex_driver/msg/generated/product_configuration/ModelId.msg new file mode 100644 index 00000000..568a4daf --- /dev/null +++ b/kortex_driver/msg/generated/product_configuration/ModelId.msg @@ -0,0 +1,8 @@ + +uint32 MODEL_ID_UNSPECIFIED = 0 + +uint32 MODEL_ID_L53 = 1 + +uint32 MODEL_ID_L31 = 2 + +uint32 MODEL_ID_HDK = 3 diff --git a/kortex_driver/msg/generated/product_configuration/ProductConfigurationBaseType.msg b/kortex_driver/msg/generated/product_configuration/ProductConfigurationBaseType.msg new file mode 100644 index 00000000..ca3cfe1c --- /dev/null +++ b/kortex_driver/msg/generated/product_configuration/ProductConfigurationBaseType.msg @@ -0,0 +1,2 @@ + +uint32 base_type \ No newline at end of file diff --git a/kortex_driver/msg/generated/product_configuration/ProductConfigurationDegreeOfFreedom.msg b/kortex_driver/msg/generated/product_configuration/ProductConfigurationDegreeOfFreedom.msg new file mode 100644 index 00000000..5905a2c8 --- /dev/null +++ b/kortex_driver/msg/generated/product_configuration/ProductConfigurationDegreeOfFreedom.msg @@ -0,0 +1,2 @@ + +uint32 degree_of_freedom \ No newline at end of file diff --git a/kortex_driver/msg/generated/product_configuration/ProductConfigurationEndEffectorType.msg b/kortex_driver/msg/generated/product_configuration/ProductConfigurationEndEffectorType.msg new file mode 100644 index 00000000..fc2a2b93 --- /dev/null +++ b/kortex_driver/msg/generated/product_configuration/ProductConfigurationEndEffectorType.msg @@ -0,0 +1,2 @@ + +uint32 end_effector_type \ No newline at end of file diff --git a/kortex_driver/msg/generated/product_configuration/ProductConfigurationInterfaceModuleType.msg b/kortex_driver/msg/generated/product_configuration/ProductConfigurationInterfaceModuleType.msg new file mode 100644 index 00000000..cff32715 --- /dev/null +++ b/kortex_driver/msg/generated/product_configuration/ProductConfigurationInterfaceModuleType.msg @@ -0,0 +1,2 @@ + +uint32 interface_module_type \ No newline at end of file diff --git a/kortex_driver/msg/generated/product_configuration/ProductConfigurationLaterality.msg b/kortex_driver/msg/generated/product_configuration/ProductConfigurationLaterality.msg new file mode 100644 index 00000000..f0d7ac7a --- /dev/null +++ b/kortex_driver/msg/generated/product_configuration/ProductConfigurationLaterality.msg @@ -0,0 +1,2 @@ + +uint32 arm_laterality \ No newline at end of file diff --git a/kortex_driver/msg/generated/product_configuration/ProductConfigurationVisionModuleType.msg b/kortex_driver/msg/generated/product_configuration/ProductConfigurationVisionModuleType.msg new file mode 100644 index 00000000..5503e0de --- /dev/null +++ b/kortex_driver/msg/generated/product_configuration/ProductConfigurationVisionModuleType.msg @@ -0,0 +1,2 @@ + +uint32 vision_module_type \ No newline at end of file diff --git a/kortex_driver/msg/generated/product_configuration/ProductConfigurationWristType.msg b/kortex_driver/msg/generated/product_configuration/ProductConfigurationWristType.msg new file mode 100644 index 00000000..48dfd4be --- /dev/null +++ b/kortex_driver/msg/generated/product_configuration/ProductConfigurationWristType.msg @@ -0,0 +1,2 @@ + +uint32 wrist_type \ No newline at end of file diff --git a/kortex_driver/msg/generated/product_configuration/VisionModuleType.msg b/kortex_driver/msg/generated/product_configuration/VisionModuleType.msg new file mode 100644 index 00000000..0bf55986 --- /dev/null +++ b/kortex_driver/msg/generated/product_configuration/VisionModuleType.msg @@ -0,0 +1,10 @@ + +uint32 VISION_MODULE_TYPE_UNSPECIFIED = 0 + +uint32 VISION_MODULE_TYPE_NOT_INSTALLED = 1 + +uint32 VISION_MODULE_TYPE_L53_2D3D = 2 + +uint32 VISION_MODULE_TYPE_L53_2D = 3 + +uint32 VISION_MODULE_TYPE_EOD = 4 diff --git a/kortex_driver/msg/generated/product_configuration/WristType.msg b/kortex_driver/msg/generated/product_configuration/WristType.msg new file mode 100644 index 00000000..27b86e0d --- /dev/null +++ b/kortex_driver/msg/generated/product_configuration/WristType.msg @@ -0,0 +1,8 @@ + +uint32 WRIST_TYPE_UNSPECIFIED = 0 + +uint32 WRIST_TYPE_NOT_APPLICABLE = 1 + +uint32 WRIST_TYPE_SPHERICAL = 2 + +uint32 WRIST_TYPE_CURVED = 3 diff --git a/kortex_vision_config_driver/msg/BitRate.msg b/kortex_driver/msg/generated/vision_config/BitRate.msg similarity index 100% rename from kortex_vision_config_driver/msg/BitRate.msg rename to kortex_driver/msg/generated/vision_config/BitRate.msg diff --git a/kortex_driver/msg/generated/vision_config/DistortionCoefficients.msg b/kortex_driver/msg/generated/vision_config/DistortionCoefficients.msg new file mode 100644 index 00000000..2cc41e6d --- /dev/null +++ b/kortex_driver/msg/generated/vision_config/DistortionCoefficients.msg @@ -0,0 +1,6 @@ + +float32 k1 +float32 k2 +float32 k3 +float32 p1 +float32 p2 \ No newline at end of file diff --git a/kortex_driver/msg/generated/vision_config/ExtrinsicParameters.msg b/kortex_driver/msg/generated/vision_config/ExtrinsicParameters.msg new file mode 100644 index 00000000..5d826631 --- /dev/null +++ b/kortex_driver/msg/generated/vision_config/ExtrinsicParameters.msg @@ -0,0 +1,3 @@ + +VisionConfig_RotationMatrix rotation +TranslationVector translation \ No newline at end of file diff --git a/kortex_driver/msg/generated/vision_config/FocusAction.msg b/kortex_driver/msg/generated/vision_config/FocusAction.msg new file mode 100644 index 00000000..f7d1b345 --- /dev/null +++ b/kortex_driver/msg/generated/vision_config/FocusAction.msg @@ -0,0 +1,14 @@ + +uint32 FOCUSACTION_UNSPECIFIED = 0 + +uint32 FOCUSACTION_START_CONTINUOUS_FOCUS = 1 + +uint32 FOCUSACTION_PAUSE_CONTINUOUS_FOCUS = 2 + +uint32 FOCUSACTION_FOCUS_NOW = 3 + +uint32 FOCUSACTION_DISABLE_FOCUS = 4 + +uint32 FOCUSACTION_SET_FOCUS_POINT = 5 + +uint32 FOCUSACTION_SET_MANUAL_FOCUS = 6 diff --git a/kortex_driver/msg/generated/vision_config/FocusPoint.msg b/kortex_driver/msg/generated/vision_config/FocusPoint.msg new file mode 100644 index 00000000..1c99030a --- /dev/null +++ b/kortex_driver/msg/generated/vision_config/FocusPoint.msg @@ -0,0 +1,3 @@ + +uint32 x +uint32 y \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/FrameRate.msg b/kortex_driver/msg/generated/vision_config/FrameRate.msg similarity index 100% rename from kortex_vision_config_driver/msg/FrameRate.msg rename to kortex_driver/msg/generated/vision_config/FrameRate.msg diff --git a/kortex_driver/msg/generated/vision_config/IntrinsicParameters.msg b/kortex_driver/msg/generated/vision_config/IntrinsicParameters.msg new file mode 100644 index 00000000..d7ab6f90 --- /dev/null +++ b/kortex_driver/msg/generated/vision_config/IntrinsicParameters.msg @@ -0,0 +1,8 @@ + +uint32 sensor +uint32 resolution +float32 principal_point_x +float32 principal_point_y +float32 focal_length_x +float32 focal_length_y +DistortionCoefficients distortion_coeffs \ No newline at end of file diff --git a/kortex_driver/msg/generated/vision_config/IntrinsicProfileIdentifier.msg b/kortex_driver/msg/generated/vision_config/IntrinsicProfileIdentifier.msg new file mode 100644 index 00000000..7655bab1 --- /dev/null +++ b/kortex_driver/msg/generated/vision_config/IntrinsicProfileIdentifier.msg @@ -0,0 +1,3 @@ + +uint32 sensor +uint32 resolution \ No newline at end of file diff --git a/kortex_driver/msg/generated/vision_config/ManualFocus.msg b/kortex_driver/msg/generated/vision_config/ManualFocus.msg new file mode 100644 index 00000000..129c5a37 --- /dev/null +++ b/kortex_driver/msg/generated/vision_config/ManualFocus.msg @@ -0,0 +1,2 @@ + +uint32 value \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/Option.msg b/kortex_driver/msg/generated/vision_config/Option.msg similarity index 100% rename from kortex_vision_config_driver/msg/Option.msg rename to kortex_driver/msg/generated/vision_config/Option.msg diff --git a/kortex_vision_config_driver/msg/OptionIdentifier.msg b/kortex_driver/msg/generated/vision_config/OptionIdentifier.msg similarity index 93% rename from kortex_vision_config_driver/msg/OptionIdentifier.msg rename to kortex_driver/msg/generated/vision_config/OptionIdentifier.msg index 188c0269..4d75db50 100644 --- a/kortex_vision_config_driver/msg/OptionIdentifier.msg +++ b/kortex_driver/msg/generated/vision_config/OptionIdentifier.msg @@ -1,5 +1,3 @@ - uint32 sensor - uint32 option \ No newline at end of file diff --git a/kortex_driver/msg/generated/vision_config/OptionInformation.msg b/kortex_driver/msg/generated/vision_config/OptionInformation.msg new file mode 100644 index 00000000..c70843e7 --- /dev/null +++ b/kortex_driver/msg/generated/vision_config/OptionInformation.msg @@ -0,0 +1,9 @@ + +uint32 sensor +uint32 option +bool supported +bool read_only +float32 minimum +float32 maximum +float32 step +float32 default_value \ No newline at end of file diff --git a/kortex_driver/msg/generated/vision_config/OptionValue.msg b/kortex_driver/msg/generated/vision_config/OptionValue.msg new file mode 100644 index 00000000..dd64fe7d --- /dev/null +++ b/kortex_driver/msg/generated/vision_config/OptionValue.msg @@ -0,0 +1,4 @@ + +uint32 sensor +uint32 option +float32 value \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/Resolution.msg b/kortex_driver/msg/generated/vision_config/Resolution.msg similarity index 100% rename from kortex_vision_config_driver/msg/Resolution.msg rename to kortex_driver/msg/generated/vision_config/Resolution.msg diff --git a/kortex_vision_config_driver/msg/Sensor.msg b/kortex_driver/msg/generated/vision_config/Sensor.msg similarity index 100% rename from kortex_vision_config_driver/msg/Sensor.msg rename to kortex_driver/msg/generated/vision_config/Sensor.msg diff --git a/kortex_driver/msg/generated/vision_config/SensorFocusAction.msg b/kortex_driver/msg/generated/vision_config/SensorFocusAction.msg new file mode 100644 index 00000000..61ce96a2 --- /dev/null +++ b/kortex_driver/msg/generated/vision_config/SensorFocusAction.msg @@ -0,0 +1,4 @@ + +uint32 sensor +uint32 focus_action +SensorFocusAction_action_parameters oneof_action_parameters \ No newline at end of file diff --git a/kortex_driver/msg/generated/vision_config/SensorFocusAction_action_parameters.msg b/kortex_driver/msg/generated/vision_config/SensorFocusAction_action_parameters.msg new file mode 100644 index 00000000..d05778b2 --- /dev/null +++ b/kortex_driver/msg/generated/vision_config/SensorFocusAction_action_parameters.msg @@ -0,0 +1,3 @@ + +FocusPoint[] focus_point +ManualFocus[] manual_focus \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/SensorIdentifier.msg b/kortex_driver/msg/generated/vision_config/SensorIdentifier.msg similarity index 93% rename from kortex_vision_config_driver/msg/SensorIdentifier.msg rename to kortex_driver/msg/generated/vision_config/SensorIdentifier.msg index a6ea8c96..b2bb9d9b 100644 --- a/kortex_vision_config_driver/msg/SensorIdentifier.msg +++ b/kortex_driver/msg/generated/vision_config/SensorIdentifier.msg @@ -1,3 +1,2 @@ - uint32 sensor \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/SensorSettings.msg b/kortex_driver/msg/generated/vision_config/SensorSettings.msg similarity index 94% rename from kortex_vision_config_driver/msg/SensorSettings.msg rename to kortex_driver/msg/generated/vision_config/SensorSettings.msg index 7225b43b..e1d8c8a3 100644 --- a/kortex_vision_config_driver/msg/SensorSettings.msg +++ b/kortex_driver/msg/generated/vision_config/SensorSettings.msg @@ -1,9 +1,5 @@ - uint32 sensor - uint32 resolution - uint32 frame_rate - uint32 bit_rate \ No newline at end of file diff --git a/kortex_driver/msg/generated/vision_config/TranslationVector.msg b/kortex_driver/msg/generated/vision_config/TranslationVector.msg new file mode 100644 index 00000000..9d359dcc --- /dev/null +++ b/kortex_driver/msg/generated/vision_config/TranslationVector.msg @@ -0,0 +1,4 @@ + +float32 t_x +float32 t_y +float32 t_z \ No newline at end of file diff --git a/kortex_driver/msg/generated/vision_config/VisionConfig_RotationMatrix.msg b/kortex_driver/msg/generated/vision_config/VisionConfig_RotationMatrix.msg new file mode 100644 index 00000000..58c1b4ee --- /dev/null +++ b/kortex_driver/msg/generated/vision_config/VisionConfig_RotationMatrix.msg @@ -0,0 +1,4 @@ + +VisionConfig_RotationMatrixRow row1 +VisionConfig_RotationMatrixRow row2 +VisionConfig_RotationMatrixRow row3 \ No newline at end of file diff --git a/kortex_driver/msg/generated/vision_config/VisionConfig_RotationMatrixRow.msg b/kortex_driver/msg/generated/vision_config/VisionConfig_RotationMatrixRow.msg new file mode 100644 index 00000000..a389a4e2 --- /dev/null +++ b/kortex_driver/msg/generated/vision_config/VisionConfig_RotationMatrixRow.msg @@ -0,0 +1,4 @@ + +float32 column1 +float32 column2 +float32 column3 \ No newline at end of file diff --git a/kortex_driver/msg/generated/vision_config/VisionConfig_ServiceVersion.msg b/kortex_driver/msg/generated/vision_config/VisionConfig_ServiceVersion.msg new file mode 100644 index 00000000..9665d1c2 --- /dev/null +++ b/kortex_driver/msg/generated/vision_config/VisionConfig_ServiceVersion.msg @@ -0,0 +1,4 @@ + +uint32 RESERVED_0 = 0 + +uint32 CURRENT_VERSION = 1 diff --git a/kortex_vision_config_driver/msg/VisionEvent.msg b/kortex_driver/msg/generated/vision_config/VisionEvent.msg similarity index 100% rename from kortex_vision_config_driver/msg/VisionEvent.msg rename to kortex_driver/msg/generated/vision_config/VisionEvent.msg diff --git a/kortex_vision_config_driver/msg/VisionNotification.msg b/kortex_driver/msg/generated/vision_config/VisionNotification.msg similarity index 93% rename from kortex_vision_config_driver/msg/VisionNotification.msg rename to kortex_driver/msg/generated/vision_config/VisionNotification.msg index 79f43120..4b5085f9 100644 --- a/kortex_vision_config_driver/msg/VisionNotification.msg +++ b/kortex_driver/msg/generated/vision_config/VisionNotification.msg @@ -1,7 +1,4 @@ - uint32 event - uint32 sensor - uint32 option \ No newline at end of file diff --git a/kortex_driver/package.xml b/kortex_driver/package.xml index 3a23ad1e..bedf0b91 100644 --- a/kortex_driver/package.xml +++ b/kortex_driver/package.xml @@ -1,10 +1,10 @@ kortex_driver - 1.0.0 + 2.0.0 THe kortex package that act as a robot's driver. - KINOVA + BSD @@ -12,6 +12,8 @@ roscpp rospy std_msgs + control_msgs + actionlib roscpp rospy std_msgs diff --git a/kortex_actuator_driver/protos/ActuatorConfig.options b/kortex_driver/protos/ActuatorConfig.options similarity index 91% rename from kortex_actuator_driver/protos/ActuatorConfig.options rename to kortex_driver/protos/ActuatorConfig.options index 0c2ad460..bebe2cc0 100644 --- a/kortex_actuator_driver/protos/ActuatorConfig.options +++ b/kortex_driver/protos/ActuatorConfig.options @@ -18,5 +18,5 @@ Kinova.Api.ActuatorConfig.CustomDataSelection.channel max_count:16 Kinova.Api.ActuatorConfig.SafetyLimitType long_names:false Kinova.Api.ActuatorConfig.ControlMode long_names:false Kinova.Api.ActuatorConfig.CommandMode long_names:false -Kinova.Api.ActuatorConfig.SafetyIdentifier long_names:false +Kinova.Api.ActuatorConfig.SafetyIdentifierBankA long_names:false Kinova.Api.ActuatorConfig.ControlLoopSelection long_names:false diff --git a/kortex_driver/protos/ActuatorConfig.proto b/kortex_driver/protos/ActuatorConfig.proto new file mode 100644 index 00000000..bd771c70 --- /dev/null +++ b/kortex_driver/protos/ActuatorConfig.proto @@ -0,0 +1,377 @@ +/* + * KINOVA (R) KORTEX (TM) + * + * Copyright (c) 2018 Kinova inc. All rights reserved. + * + * This software may be modified and distributed + * under the terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ + +syntax = "proto3"; + +import public "Common.proto"; + +package Kinova.Api.ActuatorConfig; + +// Service to configure actuators +service ActuatorConfig {//@PROXY_ID=10 @ERROR=Kinova.Api.Error + + // Retrieves axis offsets for absolute and relative encoder + rpc GetAxisOffsets (Kinova.Api.Common.Empty) returns (AxisOffsets); //@RPC_ID=1 + + // Sets offsets for absolute and relative encoder + rpc SetAxisOffsets (AxisPosition) returns (Kinova.Api.Common.Empty); //@RPC_ID=2 + + // Reads torque calibration parameters (internal use only) + rpc ReadTorqueCalibration (Kinova.Api.Common.Empty) returns (TorqueCalibration); //@RPC_ID=3 + + // Writes torque calibration parameters (internal use only) + rpc WriteTorqueCalibration (TorqueCalibration) returns (Kinova.Api.Common.Empty); //@RPC_ID=4 + + // Sets zero torque calibration + rpc SetTorqueOffset (TorqueOffset) returns (Kinova.Api.Common.Empty); //@RPC_ID=5 + + // Retrieves actuator control mode + rpc GetControlMode (Kinova.Api.Common.Empty) returns (ControlModeInformation); //@RPC_ID=6 + + // Sets actuator control mode + rpc SetControlMode (ControlModeInformation) returns (Kinova.Api.Common.Empty); //@RPC_ID=7 + + // Retrieves activated control loop(s) + rpc GetActivatedControlLoop (Kinova.Api.Common.Empty) returns (ControlLoop); //@RPC_ID=8 + + // Sets activated control loop(s) + rpc SetActivatedControlLoop (ControlLoop) returns (Kinova.Api.Common.Empty); //@RPC_ID=9 + + // Retrieves motor drive FOC parameters (internal use only) + rpc GetVectorDriveParameters (Kinova.Api.Common.Empty) returns (VectorDriveParameters); //@RPC_ID=10 + + // Sets motor drive FOC parameters (internal use only) + rpc SetVectorDriveParameters (VectorDriveParameters) returns (Kinova.Api.Common.Empty); //@RPC_ID=11 + + // Retrieves encoder derivative parameters (internal use only) + rpc GetEncoderDerivativeParameters (Kinova.Api.Common.Empty) returns (EncoderDerivativeParameters); //@RPC_ID=12 + + // Sets encoder derivative parameters (internal use only) + rpc SetEncoderDerivativeParameters (EncoderDerivativeParameters) returns (Kinova.Api.Common.Empty); //@RPC_ID=13 + + // Retrieves control loop parameters + rpc GetControlLoopParameters (LoopSelection) returns (ControlLoopParameters); //@RPC_ID=14 + + // Sets control loop parameters + rpc SetControlLoopParameters (ControlLoopParameters) returns (Kinova.Api.Common.Empty); //@RPC_ID=15 + + // Starts frequency response test (internal use only) + rpc StartFrequencyResponse (FrequencyResponse) returns (Kinova.Api.Common.Empty); //@RPC_ID=16 + + // Stops frequency response test (internal use only) + rpc StopFrequencyResponse (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty); //@RPC_ID=17 + + // Starts step response test (internal use only) + rpc StartStepResponse (StepResponse) returns (Kinova.Api.Common.Empty); //@RPC_ID=18 + + // Stops step response test (internal use only) + rpc StopStepResponse (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty); //@RPC_ID=19 + + // Starts ramp response test (internal use only) + rpc StartRampResponse (RampResponse) returns (Kinova.Api.Common.Empty); //@RPC_ID=20 + + // Stops ramp response test (internal use only) + rpc StopRampResponse (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty); //@RPC_ID=21 + + // Selects custom data + rpc SelectCustomData (CustomDataSelection) returns (Kinova.Api.Common.Empty); //@RPC_ID=22 + + // Retrieves selected custom data + rpc GetSelectedCustomData (Kinova.Api.Common.Empty) returns (CustomDataSelection); //@RPC_ID=23 + + // Sets command mode (config versus cyclic) + rpc SetCommandMode (CommandModeInformation) returns (Kinova.Api.Common.Empty); //@RPC_ID=24 + + // Clears all error(s) and warning(s) (bank A and B) + rpc ClearFaults (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty); //@RPC_ID=25 + + // Enables or disables servoing + rpc SetServoing (Servoing) returns (Kinova.Api.Common.Empty); //@RPC_ID=26 + + // Moves the actuator to the desired position + rpc MoveToPosition (PositionCommand) returns (Kinova.Api.Common.Empty); //@RPC_ID=27 + + // Retrieves command mode (config versus cyclic) + rpc GetCommandMode (Kinova.Api.Common.Empty) returns (CommandModeInformation); //@RPC_ID=28 + + // Retrieves servoing state + rpc GetServoing (Kinova.Api.Common.Empty) returns (Servoing); //@RPC_ID=29 + + // Retrieves torque offset calibration + rpc GetTorqueOffset (Kinova.Api.Common.Empty) returns (TorqueOffset); //@RPC_ID=30 +} + +// Identifies ActuatorConfig service current version +enum ServiceVersion +{ + RESERVED_0 = 0; // Reserved + CURRENT_VERSION = 1; // Current version +} + +// Admissible limit types +enum SafetyLimitType +{ + MAXIMAL_LIMIT = 0; // Maximal limit + MINIMAL_LIMIT = 1; // Minimal limit +} + +// Admissible control modes +enum ControlMode +{ + NONE = 0; // None + POSITION = 1; // Position mode + VELOCITY = 2; // Velocity mode + TORQUE = 3; // Torque mode + CURRENT = 4; // Current mode + CUSTOM = 5; // Custom mode +} + +// Admissible command modes +enum CommandMode +{ + CYCLIC = 0; // Cyclic data only + ASYNC_CYCLIC_FLAGS = 1; // Not supported + ASYNC = 2; // Config messages only + CYCLIC_JITTERCOMPENSATED_POSITION = 3; // Smoothing using only position inputs + CYCLIC_JITTERCOMPENSATED_VELOCITY = 4; // Smoothing using position and velocity inputs + CYCLIC_JITTERCOMPENSATED_ACCELERATION = 5; // Smoothing using position, velocity and acceleration inputs (not supported) +} + +// Admissible control loop selections +enum ControlLoopSelection +{ + RESERVED = 0; // 0x0 - Reserved (internal use only) + JOINT_POSITION = 1; // 0x1 - Joint position control (if available) + MOTOR_POSITION = 2; // 0x2 - Motor position control + JOINT_VELOCITY = 4; // 0x4 - Joint velocity control (if available) + MOTOR_VELOCITY = 8; // 0x8 - Motor velocity control + JOINT_TORQUE = 16; // 0x10 - Joint torque control + MOTOR_CURRENT = 32; // 0x20 - Motor current control +} + +// Axis position +message AxisPosition +{ + float position = 1; // Axis position (meters) +} + +// Axis offsets +message AxisOffsets +{ + float absolute_offset = 1; // Absolute offset value (meters) + float relative_offset = 2; // Relative offset value (meters) +} + +// Torque calibration settings +message TorqueCalibration +{ + float global_gain = 1; // Global gain value + float global_offset = 2; // Global offset value + repeated float gain = 3; // Gain (index 0 to 3) + repeated float offset = 4; // Offset (index 0 to 3) +} + +// Defines torque offset +message TorqueOffset +{ + float torque_offset = 1; // Torque offset value +} + +// Control mode information +message ControlModeInformation +{ + ControlMode control_mode = 1; // Control mode +} + +// Control loop +message ControlLoop +{ + fixed32 control_loop = 1; // Use ControlLoopSelection enum values to form bitmask +} + +// Defines the loop selection +message LoopSelection +{ + ControlLoopSelection loop_selection = 1; // ControlLoopSelection enum +} + +// Field-oriented control PI controller gain values +message VectorDriveParameters +{ + float kpq = 1; // Quadrature axis current proportional gain + float kiq = 2; // Quadrature axis current integral gain + float kpd = 3; // Direct axis current proportional gain + float kid = 4; // Direct axis current integral gain +} + +// Variable window derivative parameters +message EncoderDerivativeParameters +{ + uint32 max_window_width = 1; // Maximum window width + uint32 min_encoder_tick_count = 2; // Minimum encoder tick count +} + +// Control loop parameters (discrete transfer function) +message ControlLoopParameters +{ + ControlLoopSelection loop_selection = 1; // ControlLoopSelection enum + float error_saturation = 2; // Error saturation value + float output_saturation = 3; // Output saturation value + repeated float kAz = 4; // KAz (index 0 to 4): denominator gains A1 to A5 + repeated float kBz = 5; // KBz (index 0 to 5): numerator gains B0 to B5 + float error_dead_band = 6; // Error dead band value +} + +// Frequency response +message FrequencyResponse +{ + ControlLoopSelection loop_selection = 1; // ControlLoopSelection enum + float min_frequency = 2; // Minimum frequency value + float max_frequency = 3; // Maximum frequency value + float amplitude = 4; // Amplitude value + float duration = 5; // Duration (in seconds) +} + +// Step response +message StepResponse +{ + ControlLoopSelection loop_selection = 1; // ControlLoopSelection enum + float amplitude = 2; // Amplitude value + float step_delay = 3; // Step delay value + float duration = 4; // Duration (in seconds) +} + +// Ramp response +message RampResponse +{ + ControlLoopSelection loop_selection = 1; // ControlLoopSelection enum + float slope = 2; // Slope value + float ramp_delay = 3; // Ramp delay value + float duration = 4; // Duration (in seconds) +} + +// Selected custom data channels content +message CustomDataSelection +{ + repeated CustomDataIndex channel = 1; // 16 channels maximum +} + +// Command mode +message CommandModeInformation +{ + CommandMode command_mode = 1; // Command mode +} + +// Enables/disables servoing +message Servoing +{ + bool enabled = 1; // Servoing enabled +} + +// Angular position command for an actuator +message PositionCommand +{ + float position = 1; // Position value (degrees) + float velocity = 2; // Velocity value (degrees per second) + float acceleration = 3; // Acceleration value (degrees per second^squared) +} + +// Admissible bank A actuator safeties +enum SafetyIdentifierBankA { + UNSPECIFIED_ACTUATOR_SAFETY_IDENTIFIER_BANK_A = 0; // 0x0 - Unspecified actuator safety + FOLLOWING_ERROR = 1; // 0x1 - Following error + MAXIMUM_VELOCITY = 2; // 0x2 - Maximum velocity + JOINT_LIMIT_HIGH = 4; // 0x4 - Joint position limit high + JOINT_LIMIT_LOW = 8; // 0x8 - Joint position limit low + STRAIN_GAUGE_MISMATCH = 16; // 0x10 - Strain gauge mismatch + MAXIMUM_TORQUE = 32; // 0x20 - Maximum torque + UNRELIABLE_ABSOLUTE_POSITION = 64; // 0x40 - Unreliable absolute position + MAGNETIC_POSITION = 128; // 0x80 - Magnetic position + HALL_POSITION = 256; // 0x100 - Hall position + HALL_SEQUENCE = 512; // 0x200 - Hall sequence + INPUT_ENCODER_HALL_MISMATCH = 1024; // 0x400 - Input encoder Hall mismatch + INPUT_ENCODER_INDEX_MISMATCH = 2048; // 0x800 - Input encoder index mismatch + INPUT_ENCODER_MAGNETIC_MISMATCH = 4096; // 0x1000 - Input encoder magnetic mismatch + MAXIMUM_MOTOR_CURRENT = 8192; // 0x2000 - Maximum motor current + MOTOR_CURRENT_MISMATCH = 16384; // 0x4000 - Motor current mismatch + MAXIMUM_VOLTAGE = 32768; // 0x8000 - Maximum voltage + MINIMUM_VOLTAGE = 65536; // 0x10000 - Minimum voltage + MAXIMUM_MOTOR_TEMPERATURE = 131072; // 0x20000 - Maximum motor temperature + MAXIMUM_CORE_TEMPERATURE = 262144; // 0x40000 - Maximum core temperature + NON_VOLATILE_MEMORY_CORRUPTED = 524288; // 0x80000 - Non-volatile memory corrupted + MOTOR_DRIVER_FAULT = 1048576; // 0x100000 - Motor driver fault + EMERGENCY_LINE_ASSERTED = 2097152; // 0x200000 - Emergency line asserted + COMMUNICATION_TICK_LOST = 4194304; // 0x400000 - Communication tick lost + WATCHDOG_TRIGGERED = 8388608; // 0x800000 - Watchdog triggered + UNRELIABLE_CAPACITIVE_SENSOR = 16777216; // 0x1000000 - Capacitive sensor is unreliable + UNEXPECTED_GEAR_RATIO = 33554432; // 0x2000000 - Incorrect gear ratio for detected configuration +} + +// Custom data options +enum CustomDataIndex { + NO_CUSTOM_DATA_SELECTED = 0; // No custom data selected + UINT32_TEST_RAMP = 1; // Incremental value used for test and validation + UINT32_MOTOR_ENCODER_RAW = 2; // Rotor optical encoder incremental value (raw) + UINT32_JOINT_ENCODER_RAW = 3; // Joint optical encoder incremental value (raw) + FLOAT_TEMPERATURE_PHASE_0 = 4; // Motor phase 0 temperature (degrees Celsius) + FLOAT_TEMPERATURE_PHASE_1 = 5; // Motor phase 1 temperature (degrees Celsius) + FLOAT_TEMPERATURE_PHASE_2 = 6; // Motor phase 2 temperature (degrees Celsius) + INT32_TORQUE_SENSOR_RAW_0 = 7; // Individual torque sensor strain gauge 0 ADC value (raw) + INT32_TORQUE_SENSOR_RAW_1 = 8; // Individual torque sensor strain gauge 1 ADC value (raw) + INT32_TORQUE_SENSOR_RAW_2 = 9; // Individual torque sensor strain gauge 2 ADC value (raw) + INT32_TORQUE_SENSOR_RAW_3 = 10; // Individual torque sensor strain gauge 3 ADC value (raw) + FLOAT_TORQUE_SENSOR_0 = 11; // Individual torque sensor strain gauge 0 converted value (Newton-meters) + FLOAT_TORQUE_SENSOR_1 = 12; // Individual torque sensor strain gauge 1 converted value (Newton-meters) + FLOAT_TORQUE_SENSOR_2 = 13; // Individual torque sensor strain gauge 2 converted value (Newton-meters) + FLOAT_TORQUE_SENSOR_3 = 14; // Individual torque sensor strain gauge 3 converted value (Newton-meters) + UINT32_MOTOR_ENCODER_RAW_LATCH_ON_INDEX_RISING = 15; // Rotor optical encoder incremental value at last index signal rising edge (raw) + UINT32_JOINT_ENCODER_RAW_LATCH_ON_INDEX_RISING = 16; // Joint optical encoder incremental value at last index signal rising edge (raw) + UINT32_ABSOLUTE_POSITION_SENSOR_RAW = 17; // Absolute position sensor integer value (raw) + FLOAT_ABSOLUTE_POSITION_SENSOR = 18; // Absolute position sensor converted value (degrees) + FLOAT_CONTROL_POSITION_JOINT_REQUESTED = 19; // Last axis position command received via Ethernet + UINT32_JIG_FLAGS = 20; // Jig status flags (internal use) + UINT32_TICK_MOTOR_CONTROL = 21; // Rotor optical encoder incremental value corrected for counter overflow (raw) + UINT32_TICK_JOINT_CONTROL = 22; // Joint optical encoder incremental value corrected for counter overflow (raw) + UINT32_INDEX_TICK_MOTOR_CONTROL = 23; // Rotor optical encoder incremental value corrected for counter overflow at last index signal rising edge (raw) + UINT32_INDEX_TICK_JOINT_CONTROL = 24; // Joint optical encoder incremental value corrected for counter overflow at last index signal rising edge (raw) + FLOAT_ACCELERATION_X = 25; // x-axis acceleration (meters per second squared) + FLOAT_ACCELERATION_Y = 26; // y-axis acceleration (meters per second squared) + FLOAT_ACCELERATION_Z = 27; // z-axis acceleration (meters per second squared) + FLOAT_ANGULAR_RATE_X = 28; // x-axis angular velocity (degrees per second) + FLOAT_ANGULAR_RATE_Y = 29; // y-axis angular velocity (degrees per second) + FLOAT_ANGULAR_RATE_Z = 30; // z-axis angular velocity (degrees per second) + FLOAT_POSITION_MOTOR_CMD = 31; // Axis position command sent to motor position control loop (degrees) + FLOAT_VELOCITY_MOTOR_CMD = 32; // Axis velocity command sent to motor velocity control loop (degrees per second) + FLOAT_POSITION_MOTOR = 33; // Actuator position measured by rotor optical encoder (degrees) + FLOAT_VELOCITY_MOTOR = 34; // Actuator angular velocity measured by rotor optical encoder (degrees per second) + UINT32_COMMUNICATIONS_JITTER = 35; // Jitter from the communication (microseconds) + FLOAT_TORQUE_AVERAGE = 36; // Actuator torque (Newton-meters) + FLOAT_CURRENT_MOTOR = 37; // Motor current (Amperes) + FLOAT_VOLTAGE_DIGITAL = 38; // Main board voltage (Volts) + FLOAT_TEMPERATURE_MOTOR_CELSIUS = 39; // Motor temperature (maximum of the three (3) phase temperatures) (degrees Celsius) + FLOAT_TEMPERATURE_CORE_CELSIUS = 40; // Microcontroller temperature (degrees Celsius) + UINT32_FAULT_A = 41; // Bank A faults (see ActuatorConfig.SafetyIdentifier) + UINT32_FAULT_B = 42; // Bank B faults (see ActuatorConfig.SafetyIdentifier) + UINT32_WARNING_A = 43; // Bank A warnings (see ActuatorConfig.SafetyIdentifier) + UINT32_WARNING_B = 44; // Bank B warnings (see ActuatorConfig.SafetyIdentifier) + FLOAT_POSITION_FROM_HALLS = 45; // Actuator position measured by motor hall sensors (degrees) + FLOAT_PHASE_CURRENT_0 = 46; // Motor phase 0 current (Amperes) + FLOAT_PHASE_CURRENT_1 = 47; // Motor phase 1 current (Amperes) + FLOAT_PHASE_CURRENT_2 = 48; // Motor phase 2 current (Amperes) + FLOAT_PHASE_PWM_0 = 49; // Pulse width modulation duty cycle applied to motor phase 0 (percentage) + FLOAT_PHASE_PWM_1 = 50; // Pulse width modulation duty cycle applied to motor phase 1 (percentage) + FLOAT_PHASE_PWM_2 = 51; // Pulse width modulation duty cycle applied to motor phase 2 (percentage) + FLOAT_MOTOR_ELECTRICAL_ANGLE = 52; // Motor electrical angle (degrees) + FLOAT_CURRENT_MOTOR_CMD = 53; // Motor current command sent to motor drive (Amperes) + FLOAT_TORQUE_JOINT_CMD = 54; // Axis torque command sent to joint torque control loop (Newton-meters) + FLOAT_POSITION_UNWRAPPED = 55; // Actuator position unwrapped (degrees) +} diff --git a/kortex_actuator_driver/protos/ActuatorCyclic.proto b/kortex_driver/protos/ActuatorCyclic.proto similarity index 91% rename from kortex_actuator_driver/protos/ActuatorCyclic.proto rename to kortex_driver/protos/ActuatorCyclic.proto index 7cb2ce50..1e890833 100644 --- a/kortex_actuator_driver/protos/ActuatorCyclic.proto +++ b/kortex_driver/protos/ActuatorCyclic.proto @@ -16,29 +16,29 @@ import public "Common.proto"; package Kinova.Api.ActuatorCyclic; -// Service to exchange cyclic data with actuator module +// Service to exchange cyclic data with an actuator service ActuatorCyclic {//@PROXY_ID=11 @ERROR=Kinova.Api.Error - // Commands refresh (with feedback) + // Sends a command to a single actuator and receives feedback on status of that actuator rpc Refresh (Command) returns (Feedback); //@RPC_ID=1 - // Commands refresh (no feedback) + // Sends a command to a single actuator without feedback rpc RefreshCommand (Command) returns (Kinova.Api.Common.Empty); //@RPC_ID=2 - // Gets feedback + // Obtains feedback from a single actuator rpc RefreshFeedback (MessageId) returns (Feedback); //@RPC_ID=3 - // Gets custom data + // Obtains custom data from a single actuator rpc RefreshCustomData (MessageId) returns (CustomData); //@RPC_ID=4 } -// Enumeration used to identify ActuatorCyclic current version +// Identifies ActuatorCyclic service current version enum ServiceVersion { RESERVED_0 = 0; // Reserved CURRENT_VERSION = 1; // Current version } -// Enumeration used to identify actuator commands +// Identifies actuator commands enum CommandFlags { NO_COMMAND = 0; // 0x0 Default value SERVO_ENABLE = 1; // 0x1 Servoing mode is enabled @@ -53,7 +53,7 @@ enum CommandFlags { LED_1 = 512; // 0x200 Activate LED 1 (interface module buttons 1) } -// Enumeration used to identify actuator status +// Identifies actuator status enum StatusFlags { UNKNOWN_STATUS = 0; // 0x0 Unknown status STABILIZED = 16; // 0x10 Actuator is in a stable state @@ -87,7 +87,7 @@ message MessageId { fixed32 identifier = 1; // Message ID (first 2 bytes : device ID, last 2 bytes : sequence number). By default, set to zero } -// Defines an actuator module command +// Defines an actuator command message Command { MessageId command_id = 1; // MessageId fixed32 flags = 2; // Command flags (see enum CommandFlags) @@ -97,10 +97,10 @@ message Command { float current_motor = 6; // Desired current of the motor (Amperes) } -// Defines the feedback provided by an actuator module +// Status feedback provided by an actuator message Feedback { MessageId feedback_id = 1; // MessageId - fixed32 status_flags = 2; // Status flags (see enum SatatusFlags for the rest) + fixed32 status_flags = 2; // Status flags (see enum StatusFlags for the rest) fixed32 jitter_comm = 3; // Jitter from the communication in μs float position = 4; // Position of the actuator (degrees) float velocity = 5; // Angular velocity of the actuator (degrees per second) diff --git a/kortex_driver/protos/Base.options b/kortex_driver/protos/Base.options new file mode 100644 index 00000000..7d50d5c0 --- /dev/null +++ b/kortex_driver/protos/Base.options @@ -0,0 +1,13 @@ +// +// KINOVA (R) KORTEX (TM) +// +// Copyright (c) 2019 Kinova inc. All rights reserved. +// +// This software may be modified and distributed +// under the terms of the BSD 3-Clause license. +// +// Refer to the LICENSE file for details. +// +// + +Kinova.Api.Base.TrajectoryErrorReport.trajectory_error_elements max_count:50 diff --git a/kortex_driver/protos/Base.proto b/kortex_driver/protos/Base.proto index 9bf26f9b..7a6b0100 100644 --- a/kortex_driver/protos/Base.proto +++ b/kortex_driver/protos/Base.proto @@ -14,13 +14,17 @@ syntax = "proto3"; import public "Common.proto"; import public "Errors.proto"; +import public "ProductConfiguration.proto"; package Kinova.Api.Base; -// Base module service +/* + * Base service. Broadly useful service. + * Provides functions for configuring a range of base-related functionalities and for enabling high-level control for the robot. + */ service Base {//@PROXY_ID=2 @ERROR=Kinova.Api.Error - // Creates a user profile + // Creates a user profile and returns a handle to the profile rpc CreateUserProfile (FullUserProfile) returns (Kinova.Api.Common.UserProfileHandle);//@RPC_ID=1 // Updates an existing user profile @@ -35,25 +39,25 @@ service Base {//@PROXY_ID=2 @ERROR=Kinova.Api.Error // Retrieves all user profiles rpc ReadAllUserProfiles (Kinova.Api.Common.Empty) returns (UserProfileList);//@RPC_ID=5 - // Retrieves the list of user handles + // Retrieves the list of all user profile handles rpc ReadAllUsers (Kinova.Api.Common.Empty) returns (UserList);//@RPC_ID=6 // Changes the password of an existing user rpc ChangePassword (PasswordChange) returns (Kinova.Api.Common.Empty);//@RPC_ID=7 - // Creates a new sequence + // Creates a new sequence and returns a handle to the sequence rpc CreateSequence (Sequence) returns (SequenceHandle);//@RPC_ID=8 // Updates an existing sequence rpc UpdateSequence (Sequence) returns (Kinova.Api.Common.Empty);//@RPC_ID=9 - // Reads an existing sequence + // Retrieves an existing sequence rpc ReadSequence (SequenceHandle) returns (Sequence);//@RPC_ID=10 // Deletes an existing sequence rpc DeleteSequence (SequenceHandle) returns (Kinova.Api.Common.Empty);//@RPC_ID=11 - // Retrieves all existing sequences + // Retrieves the list of all existing sequences rpc ReadAllSequences (Kinova.Api.Common.Empty) returns (SequenceList);//@RPC_ID=12 // Deletes a specific task from the specified sequence @@ -77,7 +81,7 @@ service Base {//@PROXY_ID=2 @ERROR=Kinova.Api.Error // Resumes execution of currently paused sequence rpc ResumeSequence (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=19 - // Creates a protection zone + // Creates a new protection zone and returns a handle to the protection zone rpc CreateProtectionZone (ProtectionZone) returns (ProtectionZoneHandle);//@RPC_ID=20 // Updates an existing protection zone @@ -89,46 +93,46 @@ service Base {//@PROXY_ID=2 @ERROR=Kinova.Api.Error // Deletes an existing protection zone rpc DeleteProtectionZone (ProtectionZoneHandle) returns (Kinova.Api.Common.Empty);//@RPC_ID=23 - // Retrieves all protection zones + // Retrieves a list of all protection zones rpc ReadAllProtectionZones (Kinova.Api.Common.Empty) returns (ProtectionZoneList);//@RPC_ID=24 - // Creates a mapping (future) + // Creates a new mapping rpc CreateMapping (Mapping) returns (MappingHandle);//@RPC_ID=26 // Retrieves an existing mapping rpc ReadMapping (MappingHandle) returns (Mapping);//@RPC_ID=27 - // Retrieves all mappings + // Retrieves a list of all mappings rpc ReadAllMappings (Kinova.Api.Common.Empty) returns (MappingList);//@RPC_ID=30 - // Creates a new map (future) + // Creates a new map rpc CreateMap (Map) returns (MapHandle);//@RPC_ID=36 - // Retrieves all maps associated to the specified mapping + // Retrieves a list of all maps associated to the specified mapping rpc ReadAllMaps (MappingHandle) returns (MapList);//@RPC_ID=40 - // Makes the specified map active within the specified map group and mapping + // Activates the specified map within the specified map group and mapping rpc ActivateMap (ActivateMapHandle) returns (Kinova.Api.Common.Empty);//@RPC_ID=41 - // Creates an action + // Creates a new action rpc CreateAction (Action) returns (ActionHandle);//@RPC_ID=42 // Retrieves an existing action rpc ReadAction (ActionHandle) returns (Action);//@RPC_ID=43 - // Retrieves all existing actions + // Retrieves a list of all existing actions rpc ReadAllActions (RequestedActionType) returns (ActionList);//@RPC_ID=44 // Deletes an existing action rpc DeleteAction (ActionHandle) returns (Kinova.Api.Common.Empty);//@RPC_ID=45 - // Update an existing action + // Updates an existing action rpc UpdateAction (Action) returns (Kinova.Api.Common.Empty);//@RPC_ID=46 - // Asks the robot to execute the specified existing action + // Commands the robot to execute the specified existing action rpc ExecuteActionFromReference (ActionHandle) returns (Kinova.Api.Common.Empty);//@RPC_ID=47 - // Asks the robot to execute the specified action + // Commands the robot to execute the specified action rpc ExecuteAction (Action) returns (Kinova.Api.Common.Empty);//@RPC_ID=48 // Pauses the currently executed action. ResumeAction can be invoked afterwards @@ -146,7 +150,7 @@ service Base {//@PROXY_ID=2 @ERROR=Kinova.Api.Error // Modifies the IPv4 network configuration for the specified network adapter rpc SetIPv4Configuration (FullIPv4Configuration) returns (Kinova.Api.Common.Empty);//@RPC_ID=60 - // Enables (or disables) the specified communication interface + // Enables (or disables) the specified communication interface rpc SetCommunicationInterfaceEnable (CommunicationInterfaceConfiguration) returns (Kinova.Api.Common.Empty);//@RPC_ID=61 // Determines if the specified communication interface is enabled (or disabled) @@ -170,132 +174,114 @@ service Base {//@PROXY_ID=2 @ERROR=Kinova.Api.Error // Connects robot to specified Wi-Fi network rpc ConnectWifi (Ssid) returns (Kinova.Api.Common.Empty);//@RPC_ID=68 - // Disconnects the robot from currently connected Wi-Fi network + // Disconnects the robot from the currently connected Wi-Fi network rpc DisconnectWifi (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=69 - // Gets information about the connected Wi-Fi network + // Retrieves information about the connected Wi-Fi network rpc GetConnectedWifiInformation (Kinova.Api.Common.Empty) returns (WifiInformation);//@RPC_ID=70 - // Unsubscribes client from receiving specified types of notifications + // Unsubscribes client from receiving notifications for the specified topic rpc Unsubscribe (Kinova.Api.Common.NotificationHandle) returns (Kinova.Api.Common.Empty);//@RPC_ID=97 @UNSUB - // Subscribes to configuration change notifications + // Subscribes to configuration change topic for notifications rpc ConfigurationChangeTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=98 @PUB_SUB=ConfigurationChangeNotification - // Subscribes to mapping information notifications + // Subscribes to mapping information topic for notifications rpc MappingInfoTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=99 @PUB_SUB=MappingInfoNotification - // Subscribes to control mode notifications + // Subscribes to control mode topic for notifications rpc ControlModeTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=100 @PUB_SUB=ControlModeNotification - // Subscribes to operating mode notifications + // Subscribes to operating mode topic for notifications rpc OperatingModeTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=101 @PUB_SUB=OperatingModeNotification - // Subscribes to sequence information notifications + // Subscribes to sequence information topic for notifications rpc SequenceInfoTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=102 @PUB_SUB=SequenceInfoNotification - // Subscribes to protection zone notifications (future) + // Subscribes to protection zone topic for notifications rpc ProtectionZoneTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=103 @PUB_SUB=ProtectionZoneNotification - - // Subscribes to user notifications + + // Subscribes to user topic for notifications rpc UserTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=104 @PUB_SUB=UserNotification - // Subscribes to controller notifications + // Subscribes to controller topic for notifications rpc ControllerTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=105 @PUB_SUB=ControllerNotification - // Subscribes to action notifications + // Subscribes to action topic for notifications rpc ActionTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=106 @PUB_SUB=ActionNotification - // Subscribes to robot event notifications + // Subscribes to robot event topic for notifications rpc RobotEventTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=107 @PUB_SUB=RobotEventNotification - // Retrieves the forward kinematics that corresponds to specified transformation matrix (future) - rpc GetFwdKinematics (Kinova.Api.Common.Empty) returns (TransformationMatrix);//@RPC_ID=108 - - // Moves to the specifed pose + // Moves robot to the specifed tool pose (position and orientation) while imposing specified constraints rpc PlayCartesianTrajectory (ConstrainedPose) returns (Kinova.Api.Common.Empty);//@RPC_ID=109 - // Moves to the specifed position + // Moves robot to the specifed position while imposing specified constraints rpc PlayCartesianTrajectoryPosition (ConstrainedPosition) returns (Kinova.Api.Common.Empty);//@RPC_ID=110 - // Moves to the specifed orientation + // Moves to the specifed orientation while imposing specified constraints rpc PlayCartesianTrajectoryOrientation (ConstrainedOrientation) returns (Kinova.Api.Common.Empty);//@RPC_ID=111 - // Pauses robot movement (future) - rpc Pause (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=113 - - // Resumes robot movement (future) - rpc Resume (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=114 + // Stops robot movement + rpc Stop (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=112 - // Retrieves the currently measured pose, that is the position and orientation that the robot is currently in + // Retrieves the current computed tool pose (position and orientation) for the robot rpc GetMeasuredCartesianPose (Kinova.Api.Common.Empty) returns (Pose);//@RPC_ID=115 - // Retrieves the commanded Cartesian pose (future) - rpc GetCommandedCartesianPose (Kinova.Api.Common.Empty) returns (Pose);//@RPC_ID=116 + // Sends a wrench command (screw consisting of force and torque) to be applied to the tool. This method is EXPERIMENTAL. + rpc SendWrenchCommand (WrenchCommand) returns (Kinova.Api.Common.Empty);//@RPC_ID=118 - // Retrieves the targeted Cartesian pose (future) - rpc GetTargetedCartesianPose (Kinova.Api.Common.Empty) returns (Pose);//@RPC_ID=117 - - // Sends a twist command - rpc SendTwistCommand (TwistCommand) returns (Kinova.Api.Common.Empty);//@RPC_ID=121 + /* + * Sends a wrench (screw consisting of force and torque) joystick command to be applied to the tool. + * The wrench values sent to this call are expected to be a ratio of maximum value (between -1.0/+1.0). This method is EXPERIMENTAL. + */ + rpc SendWrenchJoystickCommand (WrenchCommand) returns (Kinova.Api.Common.Empty);//@RPC_ID=119 - // Retrieves the currently measured twist command, that is the current linear and angular robot velocity (future) - rpc GetMeasuredTwist (Kinova.Api.Common.Empty) returns (Twist);//@RPC_ID=122 + /* + * Sends a twist (screw consisting of linear and angular velocity) joystick command to be applied to the tool. + * The twist values sent to this call are expected to be a ratio of the maximum value (between -1.0/+1.0). + */ + rpc SendTwistJoystickCommand (TwistCommand) returns (Kinova.Api.Common.Empty);//@RPC_ID=120 - // Retrieves the desired twist command (future) - rpc GetCommandedTwist (Kinova.Api.Common.Empty) returns (Twist);//@RPC_ID=123 + // Sends a twist (screw consisting of linear and angular velocity) command to be applied to the tool + rpc SendTwistCommand (TwistCommand) returns (Kinova.Api.Common.Empty);//@RPC_ID=121 - // Moves to the specifed joint angles + // Moves joints to the specified joint angles while imposing specified constraints rpc PlayJointTrajectory (ConstrainedJointAngles) returns (Kinova.Api.Common.Empty);//@RPC_ID=124 - // Moves specifed joint to the specifed joint angle + // Moves specifed joint to the specifed joint angle while imposing specified constraints rpc PlaySelectedJointTrajectory (ConstrainedJointAngle) returns (Kinova.Api.Common.Empty);//@RPC_ID=125 - // Retrieves the currently measured joint angles, that is the current position of each joint + // Retrieves the currently measured joint angles for each joint rpc GetMeasuredJointAngles (Kinova.Api.Common.Empty) returns (JointAngles);//@RPC_ID=126 - // Retrieves the desired joint angles, that is the desired joint angle for each joint (future) - rpc GetCommandedJointAngles (Kinova.Api.Common.Empty) returns (JointAngles);//@RPC_ID=127 - - // Sends a joint speeds command, that is the desired speed of one or many joints - rpc SendJointSpeedsCommmand (JointSpeeds) returns (Kinova.Api.Common.Empty);//@RPC_ID=132 + /* + * Sends a set of joint speed commands to all joints with one command. Joint speed commmands must be sent to all joints. + * If you do not want to move some of the joints, simply send a speed value of 0 degrees / second for that joint. + */ + rpc SendJointSpeedsCommand (JointSpeeds) returns (Kinova.Api.Common.Empty);//@RPC_ID=132 // Sends a speed command for a specific joint rpc SendSelectedJointSpeedCommand (JointSpeed) returns (Kinova.Api.Common.Empty);//@RPC_ID=133 - // Retrieves the currently measured joint speeds, that is the current speed of each joint (future) - rpc GetMeasuredJointSpeeds (Kinova.Api.Common.Empty) returns (JointSpeeds);//@RPC_ID=134 - - // Retrieves the desired joint speeds, that is the desired speed for each joint (future) - rpc GetCommandedJointSpeeds (Kinova.Api.Common.Empty) returns (JointSpeeds);//@RPC_ID=135 - // Sends a command to move the gripper rpc SendGripperCommand (GripperCommand) returns (Kinova.Api.Common.Empty);//@RPC_ID=136 - // Retrieves the current gripper movement, that is the current gripper position, force or speed (future) + // Retrieves the current gripper movement, that is the current gripper position, force or speed rpc GetMeasuredGripperMovement (GripperRequest) returns (Gripper);//@RPC_ID=137 - // Retrieves the desired gripper movement (future) - rpc GetCommandedGripperMovement (GripperRequest) returns (Gripper);//@RPC_ID=138 - - // Sets the robot in admittance mode + // Sets the robot in the chosen admittance mode rpc SetAdmittance (Admittance) returns (Kinova.Api.Common.Empty);//@RPC_ID=139 - // Defines the reference frame to use with twist and wrench commands - rpc SetTwistWrenchReferenceFrame (CartesianReferenceFrameRequest) returns (Kinova.Api.Common.Empty);//@RPC_ID=140 - // Sets a new operating mode. Only Maintenance, Update and Run modes are permitted. rpc SetOperatingMode (OperatingModeInformation) returns (Kinova.Api.Common.Empty);//@RPC_ID=141 - // Stops robot movement + // Stops robot movement and activates emergency stop state. You will not be able to move the robot. Use ClearFaults() to clear the stop. rpc ApplyEmergencyStop (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=145 // Clears robot stop. Robot is permitted to move again. rpc ClearFaults (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=146 - // Retrieves currently active map associated with specified mapping (future) - rpc GetActiveMap (MappingHandle) returns (Kinova.Api.Common.Empty);//@RPC_ID=149 - // Retrieves current control mode rpc GetControlMode (Kinova.Api.Common.Empty) returns (ControlModeInformation);//@RPC_ID=150 @@ -308,40 +294,28 @@ service Base {//@PROXY_ID=2 @ERROR=Kinova.Api.Error // Retrieves current servoing mode rpc GetServoingMode (Kinova.Api.Common.Empty) returns (ServoingModeInformation);//@RPC_ID=153 - // Subscribes to servoing mode notifications + // Subscribes to servoing mode topic for notifications rpc ServoingModeTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=154 @PUB_SUB=ServoingModeNotification - // Retrieves the last sequence state (future) - rpc GetSequenceState (SequenceHandle) returns (SequenceInformation);//@RPC_ID=156 - - // Retrieves the last state of the robot versus the specified protection zone (future) - rpc GetProtectionZoneState (ProtectionZoneHandle) returns (ProtectionZoneInformation);//@RPC_ID=157 - - // Retrieves the action execution state (future) - rpc GetActionExecutionState (Kinova.Api.Common.Empty) returns (ActionExecutionState);//@RPC_ID=158 - // Deletes all configurations and reverts settings to their factory defaults (except network settings) rpc RestoreFactorySettings (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=160 - // Reverts network settings to their factory defaults and predefined user profiles to their default passwords (future) - rpc RestoreNetworkFactorySettings (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=161 - - // Reboots robot + // Reboots the robot rpc Reboot (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=162 - // Subscribes to factory notifications + // Subscribes to factory topic for notifications rpc FactoryTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=164 @PUB_SUB=FactoryNotification // Retrieves the list of all connected controllers rpc GetAllConnectedControllers (Kinova.Api.Common.Empty) returns (ControllerList);//@RPC_ID=166 - // Retrieves the state of a specific controller + // Retrieves the state of a specified controller rpc GetControllerState (ControllerHandle) returns (ControllerState);//@RPC_ID=167 - // Retrieves the number of actuators + // Retrieves the number of actuators in the robot rpc GetActuatorCount (Kinova.Api.Common.Empty) returns (ActuatorInformation);//@RPC_ID=171 - // Initiates wifi scanning + // Initiates Wi-Fi scanning rpc StartWifiScan (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=172 // Retrieves a configured Wi-Fi network @@ -350,39 +324,128 @@ service Base {//@PROXY_ID=2 @ERROR=Kinova.Api.Error // Subscribes to network event notifications rpc NetworkTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=174 @PUB_SUB=NetworkNotification - // Retrieves current arm state + // Retrieves current robot arm state rpc GetArmState (Kinova.Api.Common.Empty) returns (ArmStateInformation);//@RPC_ID=175 - // Subscribes to arm state notifications + // Subscribes to robot arm state notifications rpc ArmStateTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=176 @PUB_SUB=ArmStateNotification // Retrieves the IPv4 network information for the specified network adapter rpc GetIPv4Information (NetworkHandle) returns (IPv4Information);//@RPC_ID=177 - - // Sets country code - rpc SetCountryCode (CountryCode) returns (Kinova.Api.Common.Empty);//@RPC_ID=178 - - // Retrieves country code - rpc GetCountryCode (Kinova.Api.Common.Empty) returns (CountryCode);//@RPC_ID=179 + + // Sets the Wi-Fi country code + rpc SetWifiCountryCode (Kinova.Api.Common.CountryCode) returns (Kinova.Api.Common.Empty);//@RPC_ID=178 + + // Retrieves the Wi-Fi country code + rpc GetWifiCountryCode (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.CountryCode);//@RPC_ID=179 + + // Configures capacitive sensor on the gripper or wrist + rpc SetCapSenseConfig (CapSenseConfig) returns (Kinova.Api.Common.Empty);//@RPC_ID=180 + + // Retrieves configuration of capacitive sensor on the gripper or wrist + rpc GetCapSenseConfig (Kinova.Api.Common.Empty) returns (CapSenseConfig);//@RPC_ID=181 + + // Retrieves speed hard limits for all joints + rpc GetAllJointsSpeedHardLimitation (Kinova.Api.Common.Empty) returns (JointsLimitationsList);//@RPC_ID=183 + + // Retrieves torque hard limits for all joints + rpc GetAllJointsTorqueHardLimitation (Kinova.Api.Common.Empty) returns (JointsLimitationsList);//@RPC_ID=184 + + // Retrieves twist hard limitations + rpc GetTwistHardLimitation (Kinova.Api.Common.Empty) returns (TwistLimitation);//@RPC_ID=185 + + // Retrieves wrench hard limitations + rpc GetWrenchHardLimitation (Kinova.Api.Common.Empty) returns (WrenchLimitation);//@RPC_ID=186 + + /* + * Sends the desired joystick speeds to all joints with one command. + * The speed values sent to this call are expected to be a ratio of the maximum value (between -1.0/+1.0) + * Speeds must be sent to all joints. If you don't want to move some of the joints, send a value of 0. + */ + rpc SendJointSpeedsJoystickCommand (JointSpeeds) returns (Kinova.Api.Common.Empty);//@RPC_ID=187 + + /* + * Sends a joystick speed for a specific joint. + * The speed value sent to this call is expected to be a ratio of the maximum value (between -1.0/+1.0) + */ + rpc SendSelectedJointSpeedJoystickCommand (JointSpeed) returns (Kinova.Api.Common.Empty);//@RPC_ID=188 + + // Enables TCP bridge to hardware device + rpc EnableBridge (BridgeConfig) returns (BridgeResult); //@RPC_ID=193 + + // Disables specified TCP bridge + rpc DisableBridge (BridgeIdentifier) returns (BridgeResult); //@RPC_ID=194 + + // Retrieves list of created bridges + rpc GetBridgeList (Kinova.Api.Common.Empty) returns (BridgeList); //@RPC_ID=195 + + // Retrieves configuration for specified bridge + rpc GetBridgeConfig (BridgeIdentifier) returns (BridgeConfig); //@RPC_ID=196 + + // Plays a pre-computed angular trajectory + rpc PlayPreComputedJointTrajectory (PreComputedJointTrajectory) returns (Kinova.Api.Common.Empty);//@RPC_ID=197 + + // Retrieves product configuration information + rpc GetProductConfiguration (Kinova.Api.Common.Empty) returns (Kinova.Api.ProductConfiguration.CompleteProductConfiguration);//@RPC_ID=198 + + // Set new value for Degree of Freedom in product configuration (Identification Number) + rpc UpdateDegreeOfFreedomConfiguration (Kinova.Api.ProductConfiguration.ProductConfigurationDegreeOfFreedom) returns (Kinova.Api.Common.Empty);//@RPC_ID=199 + + // Set new Base type in product configuration (Identification Number) + rpc UpdateBaseTypeConfiguration (Kinova.Api.ProductConfiguration.ProductConfigurationBaseType) returns (Kinova.Api.Common.Empty);//@RPC_ID=200 + + // Set new end-effector type in product configuration (Identification Number) + rpc UpdateEndEffectorTypeConfiguration (Kinova.Api.ProductConfiguration.ProductConfigurationEndEffectorType) returns (Kinova.Api.Common.Empty);//@RPC_ID=201 + + // Set new vision module type in product configuration (Identification Number) + rpc UpdateVisionModuleTypeConfiguration (Kinova.Api.ProductConfiguration.ProductConfigurationVisionModuleType) returns (Kinova.Api.Common.Empty);//@RPC_ID=202 + + // Set new interface module type in product configuration (Identification Number) + rpc UpdateInterfaceModuleTypeConfiguration (Kinova.Api.ProductConfiguration.ProductConfigurationInterfaceModuleType) returns (Kinova.Api.Common.Empty);//@RPC_ID=203 + + // Set new arm laterality in product configuration (Identification Number) + rpc UpdateArmLateralityConfiguration (Kinova.Api.ProductConfiguration.ProductConfigurationLaterality) returns (Kinova.Api.Common.Empty);//@RPC_ID=204 + + // Sets new wrist type in product configuration (Identification Number) + rpc UpdateWristTypeConfiguration (Kinova.Api.ProductConfiguration.ProductConfigurationWristType) returns (Kinova.Api.Common.Empty);//@RPC_ID=205 + + // Restores product configuration to factory product configuration + rpc RestoreFactoryProductConfiguration (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=206 + + /* + * Obtains trajectory error report listing errors for rejected trajectory. + * Provides some feedback on why the trajectory could not be completed. + */ + rpc GetTrajectoryErrorReport (Kinova.Api.Common.Empty) returns (TrajectoryErrorReport);//@RPC_ID=207 + + // Retrieves list of soft speed limits for all joints + rpc GetAllJointsSpeedSoftLimitation (Kinova.Api.Common.Empty) returns (JointsLimitationsList);//@RPC_ID=208 + + // Retrieves list of soft torque limits for all joints + rpc GetAllJointsTorqueSoftLimitation (Kinova.Api.Common.Empty) returns (JointsLimitationsList);//@RPC_ID=209 + + // Retrieves all twist soft limitations + rpc GetTwistSoftLimitation (Kinova.Api.Common.Empty) returns (TwistLimitation);//@RPC_ID=210 + + // Retrieves all wrench soft limitations + rpc GetWrenchSoftLimitation (Kinova.Api.Common.Empty) returns (WrenchLimitation);//@RPC_ID=211 } -// Enumeration used to identify Base service current version +// Identifies Base service current version enum ServiceVersion { RESERVED_0 = 0; // Reserved CURRENT_VERSION = 1; // Current version } - -// Provides complete infomation about a user. Used when creating a user profile. +// Information about a user, together with a password. Full set of information needed to create a user profile. message FullUserProfile { UserProfile user_profile = 1; // Information about the user, including its username. string password = 2; // User's password } - -// Provides information about a user +// Information about a user message UserProfile { - Kinova.Api.Common.UserProfileHandle handle = 1; // User handle (no need to set it with CreateUserProfile() + Kinova.Api.Common.UserProfileHandle handle = 1; // User handle (no need to set it with CreateUserProfile()) string username = 2; // Username, which is used to connect to robot (or login via Web App) string firstname = 3; // User's first name string lastname = 4; // User's last name @@ -394,49 +457,49 @@ message UserProfileList { repeated UserProfile user_profiles = 1; // User profile } -// Array of user handles +// Array of user profile handles message UserList { repeated Kinova.Api.Common.UserProfileHandle user_handles = 1; // User handle } -// Provides information to change a user's password +// Information required to change user password message PasswordChange { Kinova.Api.Common.UserProfileHandle handle = 1; // User handle string old_password = 2; // Current password string new_password = 3; // New password } -// Identifies a sequence +// Reference to a specific sequence message SequenceHandle { uint32 identifier = 1; // Sequence identifier fixed32 permission = 2; // Sequence permission. See 'Kinova.Api.Common.Permission' enum. } -// Associates execution options to a sequence +// Reference to a sequence along with execution options message AdvancedSequenceHandle { SequenceHandle handle = 1; // Sequence handle /* - * Loop execution. Set to true to play the sequence in loop, false otherwise. When a sequence is executed in loop, it will automatically - * go back to first task within the sequence after completing execution of last task and continue execution forever + * Loop execution. Set to true to play the sequence in loop, false otherwise. When a sequence is executed in loop, it will automatically + * go back to first task within the sequence after completing execution of last task and continue execution forever * unless the sequence is explicitely stopped */ bool in_loop = 2; } -// Identifies a task inside a sequence +// Reference to a specific task inside a sequence message SequenceTaskHandle { SequenceHandle sequence_handle = 1; // Sequence handle uint32 task_index = 2; // Task index inside the sequence } -// Provides information about a task inside a sequence +// Information on a single task within a sequence message SequenceTask { uint32 group_identifier = 1; // Specifies the order in which this task must be executed Action action = 2; // Specifies the action to execute string application_data = 3; // Application data (reserved for use by Web App) } -// Provides information about a sequence +// Information about a sequence message Sequence { SequenceHandle handle = 1; // Sequence handle string name = 2; // Sequence name @@ -444,108 +507,119 @@ message Sequence { repeated SequenceTask tasks = 4; // Array of tasks that this sequence contains } -// Array of sequences +// An array of sequences message SequenceList { repeated Sequence sequence_list = 1; // Sequence } -// Appends an action to an existing sequence (future) +// Representation of the result of appending (adding at the end) an action to an existing sequence (not implemented yet) message AppendActionInformation { SequenceHandle sequence_handle = 1; // Sequence to which action must be appended Action action = 2; // Action to append } -// Identifies an action +// Reference to a specific action message ActionHandle { uint32 identifier = 1; // Action identifier ActionType action_type = 2; // Action type fixed32 permission = 3; // Permission of specified Action entity. Must use 'Kinova.Api.Common.Permission' enum. } -// Message used to request all action instances of a specific action type +// Message used for requesting all action instances of a specific action type message RequestedActionType { ActionType action_type = 1; // Action type } -// Defines an action +// Defines an action. An action is some task performed on the robot. message Action { - ActionHandle handle = 1; // Action handle (useful when updating an existing action) + ActionHandle handle = 1; // Reference to the action (useful when updating an existing action) string name = 2; // Action friendly name string application_data = 3; // Application data (reserved for use by Web App) oneof action_parameters { - TwistCommand send_twist_command = 4; // Action to control the robot in velocity + TwistCommand send_twist_command = 4; // Control the tool in velocity + WrenchCommand send_wrench_command = 5; // Control the tool in force (EXPERIMENTAL) JointSpeeds send_joint_speeds = 7; // Action to control each joint speed - ConstrainedPose reach_pose = 9; // Action to reach a pose - ConstrainedJointAngles reach_joint_angles = 10; // Action to reach a series of joint angles - AdmittanceMode toggle_admittance_mode = 16; // Action to enable or disable the admittance mode - SwitchControlMapping switch_control_mapping = 19; // Action to switch the active controller map - JointNavigationDirection navigate_joints = 20; // Action to select the next actuator to control in a map - NavigationDirection navigate_mappings = 21; // Action to select a different map - ChangeTwist change_twist = 25; // Action to change twist - ChangeJointSpeeds change_joint_speeds = 26; // Action to change the joint speeds individually - EmergencyStop apply_emergency_stop = 31; // Action to apply robot emergency stop - Faults clear_faults = 32; // Action to clear faults. Robot will be able to move if there is no more fault (see BaseCyclic.BaseFeedback.[fault_bank_a | fault_bank_b]) - - Delay delay = 34; // Action to apply a delay - ActionHandle execute_action = 35; // Action to execute an existing action - GripperCommand send_gripper_command = 36; // Action to execute a gripper movement - Stop stop_action = 38; // Action to stop movement + ConstrainedPose reach_pose = 9; // Reach a pose given Cartesian constraints + ConstrainedJointAngles reach_joint_angles = 10; // Reach a series of joint angles given angular constraints + AdmittanceMode toggle_admittance_mode = 16; // Enable or disable the admittance mode + SwitchControlMapping switch_control_mapping = 19; // Switch the active controller map + JointNavigationDirection navigate_joints = 20; // Select the next actuator to control in a map + NavigationDirection navigate_mappings = 21; // Select a different map + ChangeTwist change_twist = 25; // Change tool twist + ChangeJointSpeeds change_joint_speeds = 26; // Change the joint speeds individually + ChangeWrench change_wrench = 28; // Change the Cartesian force + EmergencyStop apply_emergency_stop = 31; // Apply robot emergency stop + Faults clear_faults = 32; // Clear faults. Robot will be able to move if there is no more fault (see BaseCyclic.BaseFeedback.[fault_bank_a | fault_bank_b]) + Delay delay = 34; // Apply a delay + ActionHandle execute_action = 35; // Execute an existing action + GripperCommand send_gripper_command = 36; // Send a gripper command + Stop stop_action = 38; // Stop movement + PreComputedJointTrajectory play_pre_computed_trajectory = 39; // Play a pre-computed joint trajectory } } -// List of admissible action types +// Admissible types of actions enum ActionType { - UNSPECIFIED_ACTION = 0; // Unspecified action type - SEND_TWIST_COMMAND = 1; // Action to control the robot in velocity - SEND_JOINT_SPEEDS = 4; // Action to control each joint speed - REACH_POSE = 6; // Action to reach a pose - REACH_JOINT_ANGLES = 7; // Action to reach a series of joint angles - TOGGLE_ADMITTANCE_MODE = 13; // Action to enable or disable the admittance mode - SWITCH_CONTROL_MAPPING = 16; // Action to switch the active controller map - NAVIGATE_JOINTS = 17; // Action to select the next actuator to control from control mapping - NAVIGATE_MAPPINGS = 18; // Action to select a different map - CHANGE_TWIST = 22; // Action to change the twist - CHANGE_JOINT_SPEEDS = 23; // Action to change the joint speeds individually - APPLY_EMERGENCY_STOP = 28; // Action to apply robot emergency stop - CLEAR_FAULTS = 29; // Action to clear faults. Robot will be able to move if there is no more fault (see BaseCyclic.BaseFeedback.[fault_bank_a | fault_bank_b]) - TIME_DELAY = 31; // Action to apply a delay - EXECUTE_ACTION = 32; // Action to execute an existing action - SEND_GRIPPER_COMMAND = 33; // Action to execute a gripper command - STOP_ACTION = 35; // Action to stop movement -} - -// Defines an action to switch the active controller map + UNSPECIFIED_ACTION = 0; // Unspecified action type + SEND_TWIST_COMMAND = 1; // Control the robot in Cartesian velocity + SEND_WRENCH_COMMAND = 2; // Control the robot in force + SEND_JOINT_SPEEDS = 4; // Control each joint speed + REACH_POSE = 6; // Reach a pose + REACH_JOINT_ANGLES = 7; // Reach a series of joint angles + TOGGLE_ADMITTANCE_MODE = 13; // Enable or disable the admittance mode + SWITCH_CONTROL_MAPPING = 16; // Switch the active controller map + NAVIGATE_JOINTS = 17; // Select the next actuator to control from control mapping + NAVIGATE_MAPPINGS = 18; // Select a different map + CHANGE_TWIST = 22; // Change the twist + CHANGE_JOINT_SPEEDS = 23; // Change the joint speeds individually + CHANGE_WRENCH = 25; // Change the Cartesian force + APPLY_EMERGENCY_STOP = 28; // Apply robot emergency stop + CLEAR_FAULTS = 29; // Clear faults. Robot will be able to move if there is no more fault (see BaseCyclic.BaseFeedback.[fault_bank_a | fault_bank_b]) + TIME_DELAY = 31; // Apply a delay + EXECUTE_ACTION = 32; // Execute an existing action + SEND_GRIPPER_COMMAND = 33; // Send a gripper command + STOP_ACTION = 35; // Stop robot movement + PLAY_PRE_COMPUTED_TRAJECTORY = 39; // Play a pre-computed trajectory +} + +// Action parameter to switch the active controller map message SwitchControlMapping { uint32 controller_identifier = 1; // Identifier of the controller for which changing the active map is requested - MapGroupHandle map_group_handle = 2; // Identifier of the map group for which the active map needs to change - MapHandle map_handle = 3; // New active map + MapGroupHandle map_group_handle = 2; // Reference to the map group for which the active map needs to change + MapHandle map_handle = 3; // Reference to new active map } -// Defines an action to increase (or reduce) the maximum Cartesian velocity by a specific increment +// Action to change the maximum Cartesian velocity by a specific increment message ChangeTwist { float linear = 1; // Linear Cartesian velocity increment (in meters per second) float angular = 2; // Angular Cartesian velocity increment (in degrees per second) } -// Defines an action to increase (or reduce) the maximum angular velocity per joint by a specific increment +// Action to change the maximum angular velocity per joint by a specific increment message ChangeJointSpeeds { JointSpeeds joint_speeds = 1; // Joint speeds } -// Defines an action to force an emergency of the robot +// Action to change the maximum Cartesian force by a specific increment +message ChangeWrench { + float force = 1; // Linear force increment (in Newton) + float torque = 2; // Angular torque increment (in Newton*meters) +} + +// Action to force an emergency of the robot message EmergencyStop { } -// Defines an action to clear faults +// Action to clear faults message Faults { } -// Defines an action to apply a delay +// Action to apply a delay message Delay { uint32 duration = 1; // Delay (in seconds) } -// Defines an action to stop robot movement +// Action to stop robot movement message Stop { } @@ -554,35 +628,35 @@ message ActionList { repeated Action action_list = 1; // Action } -// Defines a specific timeout +// Timeout for a specified duration message Timeout { - uint32 value = 1; // Timeout value (future) + uint32 value = 1; // Timeout value (not implemented yet) } -// Identifies a Wi-Fi SSID +// Wi-Fi SSID message Ssid { string identifier = 1; // Wi-Fi Service Set Identifier } -// Enables or disables a specific communication interface (e.g. Wi-Fi, Wired Ethernet) +// Configuration information for enabling or disabling a specific communication interface (e.g. Wi-Fi, Wired Ethernet) message CommunicationInterfaceConfiguration { NetworkType type = 1; // Network type (e.g. Wi-Fi, Wired Ethernet) bool enable = 2; // Enable configuration. Set to true to enable network, false otherwise } -// List of admissible network types +// Admissible network types enum NetworkType { UNSPECIFIED_NETWORK_TYPE = 0; // Unspecified network type WIFI = 1; // Wi-Fi network WIRED_ETHERNET = 2; // Wired Ethernet network } -// Identifies a network +// Reference to a network message NetworkHandle { NetworkType type = 1; // Network type } -// Provides an IPv4 configuration +// IPv4 configuration information message IPv4Configuration { uint32 ip_address = 1; // IPv4 address uint32 subnet_mask = 2; // IPv4 subnet mask @@ -590,38 +664,38 @@ message IPv4Configuration { bool dhcp_enabled = 4; // Enable automatic (DHCP) IPv4 configuration. Set to true to enable DHCP instead of static configuration. } -// Provides information about an IPv4 endpoint +// Information about an IPv4 endpoint message IPv4Information { uint32 ip_address = 1; // IPv4 address uint32 subnet_mask = 2; // IPv4 subnet mask uint32 default_gateway = 3; // Gateway IPv4 address } -// Provides an IPv4 configuration for a specific network +// IPv4 configuration for a specific network message FullIPv4Configuration { NetworkHandle handle = 1; // Network handle IPv4Configuration ipv4_configuration = 2; // IPv4 configuration } -// List of admissible Wi-Fi Security types +// Admissible Wi-Fi Security types enum WifiSecurityType { - UNSPECIFIED_AUTHENTICATION = 0; // Unspecified wifi security type + UNSPECIFIED_AUTHENTICATION = 0; // Unspecified Wi-Fi security type WEP = 1; // WEP authentication required WPA2_PERSONAL = 2; // WPA2 Personal authentication required WPA_PERSONAL = 4; // WPA Personal authentication required NO_AUTHENTICATION = 8; // No authentication required } -// List of admissible Wi-Fi encryption types +// Admissible Wi-Fi encryption types enum WifiEncryptionType { - UNSPECIFIED_ENCRYPTION = 0; // Unspecified wifi encryption type + UNSPECIFIED_ENCRYPTION = 0; // Unspecified Wi-Fi encryption type AES_ENCRYPTION = 1; // AES encryption TKIP_ENCRYPTION = 2; // TKIP encryption WEP_ENCRYPTION = 4; // WEP encryption } -// List of admissible signal quality values +// Admissible signal quality values enum SignalQuality { UNSPECIFIED_SIGNAL_QUALITY = 0; // Unspecified signal quality POOR = 1; // Poor signal quality @@ -631,7 +705,7 @@ enum SignalQuality { NONE = 5; // No signal } -// Provides information about a specific Wi-Fi network +// Information about a specific Wi-Fi network message WifiInformation { Ssid ssid = 1; // SSID fixed32 security_type = 2; // Wi-Fi security type @@ -642,51 +716,58 @@ message WifiInformation { uint32 channel = 7; // Wi-Fi operating channel } -// Array of Wi-Fi information +// Array of information about different Wi-Fi networks message WifiInformationList { repeated WifiInformation wifi_information_list = 1; // Wi-Fi information } -// Provides a Wi-Fi Configuration +// Wi-Fi connection configuration message WifiConfiguration { Ssid ssid = 1; // SSID string security_key = 2; // Security key to used when connecting to Wi-Fi network bool connect_automatically = 3; // Connection mode. Set to true so robot automatically connects to this Wi-Fi network at bootup, false otherwise } -// Array of Wi-Fi configuration +// Array of Wi-Fi connection configuration for different networks message WifiConfigurationList { repeated WifiConfiguration wifi_configuration_list = 1; // Wi-Fi configurations } -// Identifies a protection zone +// Reference to a specific protection zone message ProtectionZoneHandle { uint32 identifier = 1; // Protection zone identifier fixed32 permission = 2; // Permission of specified Proctection zone entity. Must use 'Kinova.Api.Common.Permission' enum. } -// Provides the rotation matrix configuration of a single row +/* + * Single row of a 3x3 rotation matrix. To be a valid possible row of a rotation matrix, + * the norm of the row must be 1 (the sum of the squares of the row elements has to equal 1). + */ message RotationMatrixRow { float column1 = 1; // Value between -1.0 and 1.0 float column2 = 2; // Value between -1.0 and 1.0 float column3 = 3; // Value between -1.0 and 1.0 } -// Provides a 3x3 rotation matrix configuration +/* + * Representation of a 3x3 rotation matrix. To be a valid rotation matrix, the rows must be orthonormal + * (the rows must each have norm of 1 and the row vectors must be orthogonal to each other). + * The determinant of the matrix must also be +1. + */ message RotationMatrix { RotationMatrixRow row1 = 1; // First rotation matrix row RotationMatrixRow row2 = 2; // Second rotation matrix row RotationMatrixRow row3 = 3; // Third rotation matrix row } -// Identifies a Cartesian point +// Coordinates of a Cartesian point message Point { float x = 1; // x (in meters) float y = 2; // y (in meters) float z = 3; // z (in meters) } -// List of admissible protection zone shape types +// Admissible protection zone shape types enum ShapeType { UNSPECIFIED_SHAPE = 0; // Unspecified shape type CYLINDER = 1; // Cylinder shape type @@ -694,7 +775,7 @@ enum ShapeType { RECTANGULAR_PRISM = 3; // Rectangular prism shape type } -// Provides a protection zone shape description +// Protection zone shape description message ZoneShape { ShapeType shape_type = 1; // Shape type Point origin = 2; // Origin of the protection zone shape from reference (in meters) @@ -703,7 +784,7 @@ message ZoneShape { float envelope_thickness = 5; // Thickness of envelop around shape (in meters). The envelop is of same shape type as the shape at its center. } -// Provides a protection zone configuration +// Protection zone configuration message ProtectionZone { ProtectionZoneHandle handle = 1; // Protection zone handle string name = 2; // Protection zone friendly name @@ -719,63 +800,59 @@ message ProtectionZoneList { repeated ProtectionZone protection_zones = 1; // Protection zone } -// List of admisible limitation types +// Admissible limitation types enum LimitationType { UNSPECIFIED_LIMITATION = 0; // Unspecified limitation - FORCE_LIMITATION = 1; // Force limitation (future) - ACCELERATION_LIMITATION = 2; // Acceleration limitation (future) + FORCE_LIMITATION = 1; // Force limitation (not implemented yet) + ACCELERATION_LIMITATION = 2; // Acceleration limitation (not implemented yet) VELOCITY_LIMITATION = 3; // Velocity limitation + TORQUE_LIMITATION = 4; // Torque limitation } - -// Identifies a limitation -message LimitationTypeIdentifier { - LimitationType type = 1; // Limitation type -} - -// Provides a Cartesian limitation configuration +// Translation and orientation limits for a specified limit type for Cartesian configuration message CartesianLimitation { LimitationType type = 1; // Limitation type float translation = 2; // Translation limitation float orientation = 3; // Orientation limitation } -// Array of Cartesian limitations -message CartesianLimitationList { - repeated CartesianLimitation limitations = 1; // Limitation +// Linear and angular speed limitations for twist configuration +message TwistLimitation { + float linear = 1; // Linear limitation + float angular = 2; // Angular limitation } -// Defines joint limitation value -message JointLimitationValue { - LimitationType type = 1; // Limitation type - float value = 2; // Limitation value +// Force and torque limitations for wrench configuration +message WrenchLimitation { + float force = 1; // Force limitation + float torque = 2; // Torque limitation } -// List of joint limitations -message JointLimitationValueList { - repeated JointLimitationValue joint_limitation_values = 1; // Joint limitation +// Array of Cartesian limitations +message CartesianLimitationList { + repeated CartesianLimitation limitations = 1; // Limitation } -// Defines a joint limitation +// Limitation for a specified robot joint message JointLimitation { - uint32 device_identifier = 1; // Joint device identifier - JointLimitationValue limitation_value = 2; // Joint limitation value + uint32 joint_identifier = 1; // Joint device identifier + LimitationType type = 2; // Joint limitation type + float value = 3; // Joint limitation value } -// Identifies a joint limitation for a specific joint -message JointLimitationTypeIdentifier { - uint32 device_identifier = 1; // Joint device identifier - LimitationType type = 2; // Joint limitation type +// Array of joint limitations +message JointsLimitationsList { + repeated JointLimitation joints_limitations = 1; // Joints Limitations } -// Specifies the parameters of an event log query (future) +// Parameters of an event log query (not implemented yet) message Query { Kinova.Api.Common.Timestamp start_timestamp = 1; // Start timestamp (set to zero to specify it) Kinova.Api.Common.Timestamp end_timestamp = 2; // End timestamp (set to zero to not specify it) string username = 3; // Queried username (set to "" to not specify it) } -// List of admissible configuration events +// Admissible configuration events enum ConfigurationNotificationEvent { UNSPECIFIED_CONFIGURATION_EVENT = 0; // Unspecified configuration event CONFIGURATION_UPDATED = 1; // Configuration deleted @@ -784,7 +861,7 @@ enum ConfigurationNotificationEvent { CONFIGURATION_CREATED = 4; // Configuration created } -// Message that contains a configuration change event +// Representation of a configuration change event message ConfigurationChangeNotification { ConfigurationNotificationEvent event = 1; // Configuration event Kinova.Api.Common.Timestamp timestamp = 2; // Event timestamp @@ -804,7 +881,7 @@ message ConfigurationChangeNotification { Kinova.Api.Common.Connection connection = 15; // Connection that caused the configuration event } -// Message that contains a mapping information event +// Notification about a single mapping information event message MappingInfoNotification { uint32 controller_identifier = 1; // Identifier of the controller MapHandle active_map_handle = 2; // New active map @@ -813,26 +890,28 @@ message MappingInfoNotification { Kinova.Api.Common.Connection connection = 5; // Connection that caused the mapping information event } -// List of admissible robot control modes +// Admissible robot control modes enum ControlMode { - UNSPECIFIED_CONTROL_MODE = 0; // Unspecified control mode - ANGULAR_JOYSTICK = 1; // Angular joystick mode - CARTESIAN_JOYSTICK = 2; // Cartesian joystick mode - VISION_JOYSTICK = 3; // Vision joystick mode - ANGULAR_TRAJECTORY = 4; // Angular trajectory mode - CARTESIAN_TRAJECTORY = 5; // Cartesian trajectory mode - CARTESIAN_ADMITTANCE = 6; // Cartesian admittance mode - JOINT_ADMITTANCE = 7; // Joint admittance mode - NULL_SPACE_ADMITTANCE = 8; // Null space mode - IDLE = 13; // Idle + UNSPECIFIED_CONTROL_MODE = 0; // Unspecified control mode + ANGULAR_JOYSTICK = 1; // Angular joystick mode + CARTESIAN_JOYSTICK = 2; // Cartesian joystick mode + VISION_JOYSTICK = 3; // Vision joystick mode + ANGULAR_TRAJECTORY = 4; // Angular trajectory mode + CARTESIAN_TRAJECTORY = 5; // Cartesian trajectory mode + CARTESIAN_ADMITTANCE = 6; // Cartesian admittance mode + JOINT_ADMITTANCE = 7; // Joint admittance mode + NULL_SPACE_ADMITTANCE = 8; // Null space mode + FORCE_CONTROL = 10; // Force control mode + FORCE_CONTROL_MOTION_RESTRICTED = 11; // Force control motion restricted mode + IDLE = 13; // Idle }; -// Provides control mode information +// Control mode information message ControlModeInformation { ControlMode mode = 1; // Control mode } -// Message that contains a control mode event +// Notification about a single control mode event message ControlModeNotification { ControlMode control_mode = 1; // New control mode Kinova.Api.Common.Timestamp timestamp = 2; // Event timestamp @@ -840,7 +919,7 @@ message ControlModeNotification { Kinova.Api.Common.Connection connection = 4; // Connection that caused the control mode event } -// List of admissible robot operating modes (used to report robot firmware upgrade current state) +// Admissible robot operating modes (used to report robot firmware upgrade current state) enum OperatingMode { UNSPECIFIED_OPERATING_MODE = 0; // Unspecified operating mode MAINTENANCE_MODE = 1; // Robot in maintenance mode @@ -852,27 +931,26 @@ enum OperatingMode { UPDATING_DEVICE_MODE = 7; // Robot updating device } -// List of admissible servoing modes +// Admissible servoing modes enum ServoingMode { UNSPECIFIED_SERVOING_MODE = 0; // Unspecified servoing mode - MULTI_LEVEL_SERVOING = 1; // Multi-level servoing SINGLE_LEVEL_SERVOING = 2; // Single-level servoing LOW_LEVEL_SERVOING = 3; // Low-level servoing BYPASS_SERVOING = 4; // Bypass mode } -// Provides information about the servoing mode +// Information about the servoing mode message ServoingModeInformation { ServoingMode servoing_mode = 1; // Servoing mode } -// Provides information about the operating mode +// Information about the operating mode message OperatingModeInformation { OperatingMode operating_mode = 1; // Operating mode Kinova.Api.Common.DeviceHandle device_handle = 2; // Device matching operating mode (if applicable) } -// Message that contains an operating mode event +// Notification about a single operating mode event message OperatingModeNotification { OperatingMode operating_mode = 1; // New operating mode Kinova.Api.Common.Timestamp timestamp = 2; // Event timestamp @@ -881,7 +959,7 @@ message OperatingModeNotification { Kinova.Api.Common.DeviceHandle device_handle = 5; // Device matching operating mode (if applicable) } -// Message that contains a servoing mode event +// Notification about a single servoing mode event message ServoingModeNotification { ServoingMode servoing_mode = 1; // New servoing mode Kinova.Api.Common.Timestamp timestamp = 2; // Event timestamp @@ -889,7 +967,7 @@ message ServoingModeNotification { Kinova.Api.Common.Connection connection = 4; // Connection that caused the servoing mode event } -// List of admissible sequence event types +// Admissible sequence event types enum EventIdSequenceInfoNotification { UNSPECIFIED_SEQUENCE_EVENT = 0; // Unspecified sequence event SEQUENCE_COMPLETED = 1; // Sequence completed successfully @@ -900,7 +978,7 @@ enum EventIdSequenceInfoNotification { SEQUENCE_STARTED = 6; // Sequence started } -// Message that contains a sequence information event +// Notification about a single sequence information event message SequenceInfoNotification { EventIdSequenceInfoNotification event_identifier = 1; // Sequence event type SequenceHandle sequence_handle = 2; // Handle of the sequence that this event refers to @@ -912,14 +990,14 @@ message SequenceInfoNotification { Kinova.Api.Common.Connection connection = 8; // Connection that caused the sequence event } -// Provides information about a sequence +// Information about a sequence message SequenceInformation { EventIdSequenceInfoNotification event_identifier = 1; // Sequence event type uint32 task_index = 2; // Task index uint32 task_identifier = 3; // Task identifier } -// List of admissible protection zone events +// Admissible protection zone events enum ProtectionZoneEvent { UNSPECIFIED_PROTECTION_ZONE_EVENT = 0; // Unspecified protection zone event REACHED = 1; // Protection zone limit is reached @@ -927,7 +1005,7 @@ enum ProtectionZoneEvent { EXITED = 3; // Protection zone limit is exited }; -// Message that contains a protection zone event +// Notification about a single protection zone event message ProtectionZoneNotification { ProtectionZoneEvent event = 1; // Event type ProtectionZoneHandle handle = 2; // Handle of the protection zone that this event refers to @@ -936,19 +1014,19 @@ message ProtectionZoneNotification { Kinova.Api.Common.Connection connection = 5; // Connection that caused the protection zone event to occur } -// Provides information about a protection zone +// Information about a protection zone event message ProtectionZoneInformation { ProtectionZoneEvent event = 1; // Event type } -// List of admissible user event types +// Admissible user event types enum UserEvent { UNSPECIFIED_USER_EVENT = 0; // Unspecified user event LOGGED_OUT = 1; // User logged out LOGGED_IN = 2; // User logged in }; -// Message that contains a user event +// Notification about a single user event message UserNotification { UserEvent user_event = 1; // User event type Kinova.Api.Common.UserProfileHandle modified_user = 2; // User profile that was modified @@ -957,20 +1035,21 @@ message UserNotification { Kinova.Api.Common.Connection connection = 5; // Connection that caused the user profile event (i.e. user who changed the user profile) } -// List of admissible controller types +// Admissible controller types enum ControllerType { - UNSPECIFIED_CONTROLLER_TYPE = 0; // Unspecified controller type - XBOX_CONTROLLER = 1; // Xbox controller - WRIST_CONTROLLER = 2; // Wrist controller on Kinova Arm + UNSPECIFIED_CONTROLLER_TYPE = 0; // Unspecified controller device type + XBOX_CONTROLLER = 1; // Xbox gamepad + WRIST_CONTROLLER = 2; // Wrist buttons + GPIO_JOYSTICK = 3; // GPIO joystick connected to Kinova robot base } -// Identifies a specific controller +// Reference to a specific controller device message ControllerHandle { - ControllerType type = 1; // Controller type - uint32 controller_identifier = 2; // Controller identifier + ControllerType type = 1; // Controller device type + uint32 controller_identifier = 2; // Controller device identifier } -// Identifies a specific button (or axis) of a controller +// Reference ro a specific button (or axis) of a controller device message ControllerElementHandle { ControllerHandle controller_handle = 1; // Controller handle oneof identifier { @@ -979,23 +1058,23 @@ message ControllerElementHandle { } } -// Message that contains a controller event +// Notification about a single controller event message ControllerNotification { oneof state { ControllerState controller_state = 1; // Used to indicate if a controller connection or disconnection event occured - ControllerElementState controller_element = 2; // Used to indicate if a specifif button (or axis) was pressed (or moved) (future) + ControllerElementState controller_element = 2; // Used to indicate if a specific button (or axis) was pressed (or moved) (not implemented yet) } Kinova.Api.Common.Timestamp timestamp = 3; // Event timestamp Kinova.Api.Common.UserProfileHandle user_handle = 4; // User that caused the controller event Kinova.Api.Common.Connection connection = 5; // Connection that caused the controller event } -// Array of controllers +// Array of references to different controllers message ControllerList { repeated ControllerHandle handles = 1; // Controller handle } -// Indicates if a controller is connected (or disconnected) +// Indicates if a specific controller is connected (or disconnected) message ControllerState { ControllerHandle handle = 1; // Controller identifier ControllerEventType event_type = 2; // Type of controller event that occured @@ -1008,14 +1087,14 @@ message ControllerElementState { float axis_value = 3; // Axis value (set between -1.0 and 1.0); only set if 'axis' controller element, otherwise set to zero } -// List of admissible controller event types +// Admissible controller event types enum ControllerEventType { UNSPECIFIED_CONTROLLER_EVENT = 0; // Unspecified controller event CONTROLLER_DISCONNECTED = 1; // Controller is disconnected CONTROLLER_CONNECTED = 2; // Controller is connected } -// List of admissible controller element event types +// Admissible controller element event types enum ControllerElementEventType { UNSPECIFIED_CONTROLLER_ELEMENT_EVENT = 0; // Unspecified controller element event AXIS_MOVED = 1; // Controller axis moved @@ -1023,16 +1102,22 @@ enum ControllerElementEventType { BUTTON_UP = 3; // Controller button released } -// List of admissible action event types +// Admissible action event types enum ActionEvent { UNSPECIFIED_ACTION_EVENT = 0; // Unspecified action event ACTION_END = 1; // Action execution end reached ACTION_ABORT = 2; // Action execution aborted ACTION_PAUSE = 3; // Action execution paused ACTION_START = 4; // Action execution started + ACTION_PREPROCESS_START = 5; // Action pre-process started + ACTION_PREPROCESS_ABORT = 6; // Action pre-process aborted + ACTION_PREPROCESS_END = 7; // Action pre-process ended + ACTION_POSTPROCESS_START = 8; // Action post-process started + ACTION_POSTPROCESS_ABORT = 9; // Action post-process aborted + ACTION_POSTPROCESS_END = 10; // Action post-process ended } -// Message that contains an action event +// Notification about a single action event message ActionNotification { ActionEvent action_event = 1; // Action event type ActionHandle handle = 2; // Identifies the action for which this event occured @@ -1042,22 +1127,22 @@ message ActionNotification { Kinova.Api.Common.Connection connection = 6; // Connection that caused the action event } -// Indicates the execution state of an action (future) +// Indicates the execution state of an action (not implemented yet) message ActionExecutionState { ActionEvent action_event = 1; // Action event type ActionHandle handle = 2; // Identifies the action for which this event occured } -// List of admissible robot events +// Admissible robot events enum RobotEvent { UNSPECIFIED_ROBOT_EVENT = 0; // Unspecified robot event - ARM_CONNECTED = 1; // Arm is connected - ARM_DISCONNECTED = 2; // Arm is disconnected - TOOL_CONNECTED = 5; // Tool is connected to the end effector (future) - TOOL_DISCONNECTED = 6; // Tool is disconnected from end effector (future) + ARM_CONNECTED = 1; // Robot arm is connected + ARM_DISCONNECTED = 2; // Robot arm is disconnected + TOOL_CONNECTED = 5; // Tool is connected to the interface module (not implemented yet) + TOOL_DISCONNECTED = 6; // Tool is disconnected from the interface module (not implemented yet) } -// Message that contains a robot event +// Notification about a single robot event message RobotEventNotification { RobotEvent event = 1; // Robot event type Kinova.Api.Common.DeviceHandle handle = 2; // Identifier of the hardware device connected or disconnected @@ -1066,21 +1151,21 @@ message RobotEventNotification { Kinova.Api.Common.Connection connection = 6; // Connection that caused the robot event to occur } -// List of admissible backup events (future) +// Admissible backup events (not implemented yet) enum BackupEvent { UNSPECIFIED_BACKUP_EVENT = 0; // Unspecified backup event BACKUP_RESTORED = 1; // Configuration backup restored BACKUP_UPLOADED = 2; // Configuration backup uploaded on robot } -// List of admissible factory events +// Admissible factory events enum FactoryEvent { UNSPECIFIED_FACTORY_EVENT = 0; // Unspecified factory event FACTORY_DEFAULT_RESTORED = 1; // Factory defaults restored on robot - NETWORK_FACTORY_DEFAULT_RESTORED = 2; // Network factory defaults restored on robot (future) + NETWORK_FACTORY_DEFAULT_RESTORED = 2; // Network factory defaults restored on robot (not implemented yet) } -// Message that contains a factory event +// Notification about a single factory event message FactoryNotification { FactoryEvent event = 1; // Event type Kinova.Api.Common.Timestamp timestamp = 2; // Event timestamp @@ -1088,7 +1173,7 @@ message FactoryNotification { Kinova.Api.Common.Connection connection = 4; // Connection that caused the factory event to occur } -// List of admissible network events +// Admissible network events enum NetworkEvent { UNSPECIFIED_NETWORK_EVENT = 0; // Unspecified network event WIFI_CONNECTED = 1; // Wi-Fi connected @@ -1103,7 +1188,7 @@ enum NetworkEvent { WIFI_AUTH_FAILED = 10; // Wi-Fi authentication failure } -// Message that contains a network event +// Notification about a single network event message NetworkNotification { NetworkEvent event = 1; // Event type Kinova.Api.Common.Timestamp timestamp = 2; // Event timestamp @@ -1126,7 +1211,7 @@ message ControlModeNotificationList { repeated ControlModeNotification notifications = 1; // Notification } -// Array of Operating mode notifications +// Array of operating mode notifications message OperatingModeNotificationList { repeated OperatingModeNotification notifications = 1; // Notification } @@ -1176,20 +1261,20 @@ message NetworkNotificationList { repeated NetworkNotification notifications = 1; // Notification } -// Identifies a Mapping +// Reference to a specific Mapping message MappingHandle { uint32 identifier = 1; // Mapping identifier fixed32 permission = 2; // Permission of specified mapping entity. Must use 'Kinova.Api.Common.Permission' enum. } -// List of admissible controller input types +// Admissible controller input types enum ControllerInputType { UNSPECIFIED_CONTROLLER_INPUT_TYPE = 0; // Unspecified controller input type ANALOG = 1; // Analog controller input type DIGITAL = 2; // Digital controller input type } -// List of admissible controller input behaviors +// Admissible controller input behaviors enum ControllerBehavior { UNSPECIFIED_CONTROLLER_BEHAVIOR = 0; // Unspecified controller behavior CONTROLLER_BUTTON_DOWN = 1; // Pushing button down @@ -1199,55 +1284,55 @@ enum ControllerBehavior { CONTROLLER_BUTTON_CLICK = 5; // Button down and up within X msec } -// Identifies a Safety event (future) +// A safety event (not implemented yet) message SafetyEvent { Kinova.Api.Common.SafetyHandle safety_handle = 1; // Safety that caused the event to occur } -// Identifies a controller event +// A controller event message ControllerEvent { ControllerInputType input_type = 1; // Type of controller input that caused the event_identifier ControllerBehavior behavior = 2; // Controller behavior that occured uint32 input_identifier = 3; // Controller input that caused the event } -// Identifies a GPIO event (future) +// A GPIO event (not implemented yet) message GpioEvent { GpioState gpio_state = 1; // New GPIO state uint32 device_identifier = 2; // GPIO device identifier for which this event occured } -// Defines a map event +// A map event message MapEvent { oneof events { - SafetyEvent safety_event = 1; // Mapped safety event (future) - GpioEvent gpio_event = 2; // Mapped GPIO event (future) + SafetyEvent safety_event = 1; // Mapped safety event (not implemented yet) + GpioEvent gpio_event = 2; // Mapped GPIO event (not implemented yet) ControllerEvent controller_event = 3; // Mapped controller event } string name = 4; // Map event friendly name } -// Associates a map event to map action +// Associates an event to an action message MapElement { MapEvent event = 1; // Map event that occured Action action = 2; // Action to invoke upon event occurence } -// Specifies a new active map for the specified mapping and map group +// Reference to a specific new active map for the specified mapping and map group message ActivateMapHandle { MappingHandle mapping_handle = 1; // Mapping that the active map is asked for - MapGroupHandle map_group_handle = 2; // Map group that the active map is asked for (future) + MapGroupHandle map_group_handle = 2; // Map group that the active map is asked for (not implemented yet) MapHandle map_handle = 3; // New active map } -// Defines a map as an array of map elements +// A map as an array of map elements message Map { MapHandle handle = 1; // Map handle (do not set on createMap() call) string name = 2; // Map friendly name repeated MapElement elements = 3; // Array of map elements } -// Identifies a map +// Reference to a specific map message MapHandle { uint32 identifier = 1; // Identifier fixed32 permission = 2; // Permission of specified map entity. Must use 'Kinova.Api.Common.Permission' enum. @@ -1258,15 +1343,15 @@ message MapList { repeated Map map_list = 1; // map } -// Identifies a map group (future) +// Reference to a specific map group (not implemented yet) message MapGroupHandle { uint32 identifier = 1; // Identifier fixed32 permission = 2; // Permission of specified map group entity. Must use 'Kinova.Api.Common.Permission' enum. } /* - * Message that contains all information about a map group including the list of maps that it contains and its - * relationship versus other map groups (future) + * All information about a map group including the list of maps that it contains and its + * relationship versus other map groups (not implemented yet) */ message MapGroup { MapGroupHandle group_handle = 1; // Map group handle (do not set on createMapGroup() call) @@ -1278,13 +1363,13 @@ message MapGroup { string application_data = 7; // Application data (reserved for use by Web App) } -// Array of map groups (future) +// Array of map groups (not implemented yet) message MapGroupList { repeated MapGroup map_groups = 1; // Map group } /* - * Message that contains all information about a mapping including the controller to which it is associated, + * All information about a mapping including the controller to which it is associated, * the array of map groups it contains, the currently active map group, the array of maps it contains * and the currently active map */ @@ -1292,8 +1377,8 @@ message Mapping { MappingHandle handle = 1; // Mapping handle (do not set on createMapping() call) string name = 2; // Mapping friendly name uint32 controller_identifier = 3; // Associated controller identifier - MapGroupHandle active_map_group_handle = 4; // Currently active map group (future) - repeated MapGroupHandle map_group_handles = 5; // Array of associated map groups (future) + MapGroupHandle active_map_group_handle = 4; // Currently active map group (not implemented yet) + repeated MapGroupHandle map_group_handles = 5; // Array of associated map groups (not implemented yet) MapHandle active_map_handle = 6; // Currently active map repeated MapHandle map_handles = 7; // Array of associated maps string application_data = 8; // Application data (reserved for use by Web App) @@ -1305,43 +1390,45 @@ message MappingList { } /* - * List of admissible Base safeties. + * Admissible Base safeties. * Used with BaseCyclic.BaseFeedback.[fault_bank_a | fault_bank_b | warning_bank_a | warning_bank_b] */ enum SafetyIdentifier { UNSPECIFIED_BASE_SAFETY_IDENTIFIER = 0; // 0x0 - Unspecified base safety FIRMWARE_UPDATE_FAILURE = 1; // 0x1 - Firmware update failure - EXTERNAL_COMMUNICATION_ERROR = 2; // 0x2 - External communication error (future) + EXTERNAL_COMMUNICATION_ERROR = 2; // 0x2 - External communication error (not implemented yet) MAXIMUM_AMBIENT_TEMPERATURE = 4; // 0x4 - Maximum ambient temperature reached MAXIMUM_CORE_TEMPERATURE = 8; // 0x8 - Maximum core temperature reached JOINT_FAULT = 16; // 0x10 - Joint fault - CYCLIC_DATA_JITTER = 32; // 0x20 - Cyclic data jitter (future) - REACHED_MAXIMUM_EVENT_LOGS = 64; // 0x40 - Reached Maximum number of event log entries (future) - NO_KINEMATICS_SUPPORT = 128; // 0x80 - No kinematics support (future) + CYCLIC_DATA_JITTER = 32; // 0x20 - Cyclic data jitter (not implemented yet) + REACHED_MAXIMUM_EVENT_LOGS = 64; // 0x40 - Reached Maximum number of event log entries (not implemented yet) + NO_KINEMATICS_SUPPORT = 128; // 0x80 - No kinematics support (not implemented yet) ABOVE_MAXIMUM_DOF = 256; // 0x100 - Above maximum DoF - NETWORK_ERROR = 512; // 0x200 - Network error (future) + NETWORK_ERROR = 512; // 0x200 - Network error (not implemented yet) UNABLE_TO_REACH_POSE = 1024; // 0x400 - Unable to reach pose JOINT_DETECTION_ERROR = 2048; // 0x800 - Joint detection error NETWORK_INITIALIZATION_ERROR = 4096; // 0x1000 - Network initialization error MAXIMUM_CURRENT = 8192; // 0x2000 - Maximum current reached MAXIMUM_VOLTAGE = 16384; // 0x4000 - Maximum voltage reached MINIMUM_VOLTAGE = 32768; // 0x8000 - Minimum voltage reached - MAXIMUM_END_EFFECTOR_TRANSLATION_VELOCITY = 65536; // 0x10000 - Maximum end effector translation velocity reached (future) - MAXIMUM_END_EFFECTOR_ORIENTATION_VELOCITY = 131072; // 0x20000 - Maximum end effector orientation velocity reached (future) - MAXIMUM_END_EFFECTOR_TRANSLATION_ACCELERATION = 262144; // 0x40000 - Maximum end effector translation acceleration reached (future) - MAXIMUM_END_EFFECTOR_ORIENTATION_ACCELERATION = 524288; // 0x80000 - Maximum end effector orientation acceleration reached (future) - MAXIMUM_END_EFFECTOR_TRANSLATION_FORCE = 1048576; // 0x100000 - Maximum end effector translation force reached (future) - MAXIMUM_END_EFFECTOR_ORIENTATION_FORCE = 2097152; // 0x200000 - Maximum end effector orientation force reached (future) - MAXIMUM_END_EFFECTOR_PAYLOAD = 4194304; // 0x400000 - Maximum end effector payload reached (future) + MAXIMUM_END_EFFECTOR_TRANSLATION_VELOCITY = 65536; // 0x10000 - Maximum tool translation velocity reached (not implemented yet) + MAXIMUM_END_EFFECTOR_ORIENTATION_VELOCITY = 131072; // 0x20000 - Maximum tool orientation velocity reached (not implemented yet) + MAXIMUM_END_EFFECTOR_TRANSLATION_ACCELERATION = 262144; // 0x40000 - Maximum tool translation acceleration reached (not implemented yet) + MAXIMUM_END_EFFECTOR_ORIENTATION_ACCELERATION = 524288; // 0x80000 - Maximum tool orientation acceleration reached (not implemented yet) + MAXIMUM_END_EFFECTOR_TRANSLATION_FORCE = 1048576; // 0x100000 - Maximum tool translation force reached (not implemented yet) + MAXIMUM_END_EFFECTOR_ORIENTATION_FORCE = 2097152; // 0x200000 - Maximum tool orientation force reached (not implemented yet) + MAXIMUM_END_EFFECTOR_PAYLOAD = 4194304; // 0x400000 - Maximum tool payload reached (not implemented yet) EMERGENCY_STOP_ACTIVATED = 8388608; // 0x800000 - Emergency stop activated EMERGENCY_LINE_ACTIVATED = 16777216; // 0x1000000 - Emergency line activated INRUSH_CURRENT_LIMITER_FAULT = 33554432; // 0x2000000 - In rush current limiter fault - NVRAM_CORRUPTED = 67108864; // 0x4000000 - NVRAM corrupted (future) + NVRAM_CORRUPTED = 67108864; // 0x4000000 - NVRAM corrupted (not implemented yet) INCOMPATIBLE_FIRMWARE_VERSION = 134217728; // 0x8000000 - Incompatible firmware version POWERON_SELF_TEST_FAILURE = 268435456; // 0x10000000 - Power on seflt test failure + DISCRETE_INPUT_STUCK_ACTIVE = 536870912; // 0x20000000 - Discrete Input stuck active + ARM_INTO_ILLEGAL_POSITION = 1073741824;// 0x40000000 - Arm is in an illegal position (sigularity) } -// Defines a transformation matrix +// A 4x4 homogeneous transformation matrix representing the transformation between two reference frames. message TransformationMatrix { TransformationRow r0 = 1; // First transformation row TransformationRow r1 = 2; // Second transformation row @@ -1349,7 +1436,7 @@ message TransformationMatrix { TransformationRow r3 = 4; // Fourth transformation row } -// Defines a transformation matrix row +// A single row of a 4x4 homogeneous transformation matrix message TransformationRow { float c0 = 1; // First column value float c1 = 2; // Second column value @@ -1357,7 +1444,11 @@ message TransformationRow { float c3 = 4; // Fourth column value } -// Defines a Cartesian pose +/* + * A Cartesian tool pose (position and orientation). + * Orientation is defined as a sequence of three Euler angles using z-y-x Tait-Bryan extrinsic convention. + * That is, rotation around fixed X-axis, then rotation around fixed Y-axis, then rotation around fixed Z-axis. + */ message Pose { float x = 1; // X position (in meters) float y = 2; // Y position (in meters) @@ -1366,71 +1457,83 @@ message Pose { float theta_y = 5; // Theta Y orienation (in degrees) float theta_z = 6; // Theta Z orientation (in degrees) } -// Defines a Cartesian position +// A Cartesian tool position message Position { float x = 1; // X position (in meters) float y = 2; // Y position (in meters) float z = 3; // Z position (in meters) } -// Defines a Cartesian orientation +/* + * A Cartesian tool orientation. Defines orientation as sequence of three Euler angles using z-y-x Tait-Bryan extrinsic convention. + * That is, rotation around fixed X-axis, then rotation around fixed Y-axis, then rotation around fixed Z-axis. + */ message Orientation { float theta_x = 1; // Theta X orientation (in degrees) float theta_y = 2; // Theta Y orientation (in degrees) float theta_z = 3; // Theta Z orientation (in degrees) } -// List of admissible constraint types that can be applied when controlling a joint in trajectory mode +// Admissible constraint types that can be applied when controlling a joint in trajectory mode enum JointTrajectoryConstraintType { UNSPECIFIED_JOINT_CONSTRAINT = 0; // Unspecified joint constraint JOINT_CONSTRAINT_DURATION = 1; // Duration constraint (in second) - JOINT_CONSTRAINT_SPEED = 2; // Speed constraint (in meters per second) (future) + JOINT_CONSTRAINT_SPEED = 2; // Speed constraint (in meters per second) (not implemented yet) } -// Defines a Cartesian speed +// A Cartesian tool speed (translation speed and angular speed) message CartesianSpeed { float translation = 1; // Translation speed (in meters per second) float orientation = 2; // Orientation speed (in degrees per second) } -// Defines a Cartesian trajectory constraint that can be applied when controlling in Cartesian trajectory mode +// Cartesian trajectory constraint that can be applied when controlling in Cartesian trajectory mode message CartesianTrajectoryConstraint { oneof type { CartesianSpeed speed = 1; // Speed constraint (in meters per second) - float duration = 2; // Duration constraint (in meters per second) (future) + float duration = 2; // Duration constraint (in meters per second) (not implemented yet) } } -// Defines a joint trajectory constraint that can be applied when controlling a joint in trajectory mode +// Joint trajectory constraint that can be applied when controlling a joint in trajectory mode message JointTrajectoryConstraint { JointTrajectoryConstraintType type = 1; // Joint trajectory constraint type float value = 2; // Constraint value (in seconds or in meters per second depending on constraint type) } -// List of admissible twist (velocity) modes -enum TwistMode { - UNSPECIFIED_TWIST_MODE = 0; // Unspecified twist mode - TWIST_TOOL_JOYSTICK = 1; // Twist tool joystick mode - TWIST_BASE_FRAME_JOYSTICK = 2; // Twist base frame joystick mode - TWIST_CARTESIAN_JOYSTICK = 3; // Twist Cartesian joystick mode +// Admissible wrench (force) modes +enum WrenchMode { + UNSPECIFIED_WRENCH_MODE = 0; // Unspecified wrench mode + WRENCH_RESTRICTED = 1; // Wrench restricted mode (tool motion is authorized only in the direction of the wrench command) + WRENCH_NORMAL = 2; // Wrench normal mode (tool motion is authorized in any direction) } -// Defines a twist (velocity) +// A wrench (force and torque) +message Wrench { + float force_x = 1; // Linear X force (Newtons or ratio between -1.0 and 1.0 if used with Joystick command) + float force_y = 2; // Linear Y force (Newtons or ratio between -1.0 and 1.0 if used with Joystick command) + float force_z = 3; // Linear Z force (Newtons or ratio between -1.0 and 1.0 if used with Joystick command) + float torque_x = 4; // Angular X torque (Newton-meters or ratio between -1.0 and 1.0 if used with Joystick command) + float torque_y = 5; // Angular Y torque (Newton-meters or ratio between -1.0 and 1.0 if used with Joystick command) + float torque_z = 6; // Angular Z torque (Newton-meters or ratio between -1.0 and 1.0 if used with Joystick command) +} + +// A twist (linear and angular velocity). message Twist { - float linear_x = 1; // Linear X velocity - float linear_y = 2; // Linear Y velocity - float linear_z = 3; // Linear Z velocity - float angular_x = 4; // Angular X velocity - float angular_y = 5; // Angular Y velocity - float angular_z = 6; // Angular Z velocity + float linear_x = 1; // Linear X velocity (m/s or ratio between -1.0 and 1.0 if used with joystick command) + float linear_y = 2; // Linear Y velocity (m/s or ratio between -1.0 and 1.0 if used with joystick command) + float linear_z = 3; // Linear Z velocity (m/s or ratio between -1.0 and 1.0 if used with joystick command) + float angular_x = 4; // Angular X velocity (deg/s or ratio between -1.0 and 1.0 if used with joystick command) + float angular_y = 5; // Angular Y velocity (deg/s or ratio between -1.0 and 1.0 if used with joystick command) + float angular_z = 6; // Angular Z velocity (deg/s or ratio between -1.0 and 1.0 if used with joystick command) } -// Defines the admittance mode +// An admittance mode message Admittance { AdmittanceMode admittance_mode = 1; // mode } -// List of admissible admittance modes +// Admissible admittance modes enum AdmittanceMode { UNSPECIFIED_ADMITTANCE_MODE = 0; // Unspecified admittance mode CARTESIAN = 1; // Cartesian admittance mode @@ -1439,147 +1542,156 @@ enum AdmittanceMode { DISABLED = 4; // No admittance } -// Defines a Cartesian reference frame -message CartesianReferenceFrameRequest { - CartesianReferenceFrame reference_frame = 1; // Reference frame -} - -// List of admissible Cartesian reference frame modes -enum CartesianReferenceFrame { - UNSPECIFIED_CARTESIAN_REFERENCE_FRAME = 0; // Unspecified Cartesian reference frame - MIXED = 1; // Mixed reference frame where translation reference = base and orientation reference = tool - TOOL = 2; // Tool reference frame where translation reference = tool and orientation reference = tool -} - -// Defines a Cartesian pose with constraint +// Cartesian tool pose with specified constraint message ConstrainedPose { Pose target_pose = 1; // Cartesian pose CartesianTrajectoryConstraint constraint = 2; // Constraint to apply to the target pose } -// Defines a Cartesian position with constraint +// Cartesian tool position with specified constraint message ConstrainedPosition { Position target_position = 1; // Cartesian position CartesianTrajectoryConstraint constraint = 2; // Constraint to apply to the target position } -// Defines a Cartesian orientation with constraint +// Cartesian tool orientation with specified constraint message ConstrainedOrientation { Orientation target_orientation = 1; // Cartesian orientation CartesianTrajectoryConstraint constraint = 2; // Constraint to apply to the target orientation } -// Defines a twist (velocity) command +// A wrench command to be applied to the tool +message WrenchCommand { + Kinova.Api.Common.CartesianReferenceFrame reference_frame = 1; // The reference frame used for the wrench command + WrenchMode mode = 2; // Mode in which the command is executed + Wrench wrench = 3; // Wrench value + uint32 duration = 4; // Duration constraint. If not 0, allows to set a limit (in milliseconds) to the WrenchCommand +} + +// A twist command to be applied to the tool message TwistCommand { - TwistMode mode = 1; // Mode in which the command is executed - Twist twist = 2; // Twist value - uint32 duration = 3; // Duration constrant. If not 0, allows to set a limit (in seconds) to the TwistCommand (future) + Kinova.Api.Common.CartesianReferenceFrame reference_frame = 1; // The reference frame used for the twist command + Twist twist = 2; // Twist value + uint32 duration = 3; // Duration constrant. If not 0, allows to set a limit (in milliseconds) to the TwistCommand (not implemented yet) } -// Defines a series of joint angles value with constraint +// An array of joint angles values with specified constraint message ConstrainedJointAngles { - JointAngles joint_angles = 1; // Joint angles value + JointAngles joint_angles = 1; // Joint angles values JointTrajectoryConstraint constraint = 2; // Constraint to apply to all the joint angles (optional) } -// Defines a single joint angle value with constraint +// A single joint angle value with specifed constraint message ConstrainedJointAngle { uint32 joint_identifier = 1; // Joint identifier (use device_identifier) float value = 2; // Joint value (in degrees) JointTrajectoryConstraint constraint = 3; // Constraint to apply to the joint angle (optional) } -// Position of a series of joints +// An array of joint angles message JointAngles { - repeated JointAngle joint_angles = 1; // Array of joint angle + repeated JointAngle joint_angles = 1; // Array of joint angles } -// Position of a specific joint +// Angle value of a specific joint message JointAngle { uint32 joint_identifier = 1; // Joint identifier float value = 2; // Position (in degrees) } -// Defines a series of joint speeds +// An array of joints speeds message JointSpeeds { - repeated JointSpeed joint_speeds = 1; // Array of joint speed - uint32 duration = 2; // Duration constraint. If not 0, allows to set a limit (in seconds) common to every joint specified in 'joint_speeds' (future) + repeated JointSpeed joint_speeds = 1; // Array of joint speeds + uint32 duration = 2; // Duration constraint. If not 0, allows to set a limit (in seconds) common to every joint specified in 'joint_speeds' (not implemented yet) } -// Defines the speed of a specific joint +// Speed of a specific joint message JointSpeed { uint32 joint_identifier = 1; // Joint identifier float value = 2; // Joint speed (in degrees per second) - uint32 duration = 3; // Duration constraint. If not 0, allows to set a limit (in seconds) to the JointsSpeed (future) + uint32 duration = 3; // Duration constraint. If not 0, allows to set a limit (in seconds) to the JointsSpeed (not implemented yet) +} + +// An array of joint torques +message JointTorques { + repeated JointTorque joint_torques = 1; // Array of joint torque. + uint32 duration = 2; // Duration constraint. If not 0, allows to set a limit (in seconds) common to every joint specified in 'joint_torques' (not implemented yet) +} + +// joint torque for a specified joint +message JointTorque { + uint32 joint_identifier = 1; // Joint identifier + float value = 2; // Joint speed (in Newton*meters) + uint32 duration = 3; // Duration constraint. If not 0, allows to set a limit (in seconds) to the JointTorque (not implemented yet) } -// List of admissible gripper control mode +// Admissible gripper control mode enum GripperMode { UNSPECIFIED_GRIPPER_MODE = 0; // Unspecified gripper mode - GRIPPER_FORCE = 1; // Force control (in Newton) (future) - GRIPPER_SPEED = 2; // Speed control (in meters per second) (future) - GRIPPER_POSITION = 3; // position control (in meters) + GRIPPER_FORCE = 1; // Force control (in Newton) (not implemented yet) + GRIPPER_SPEED = 2; // Speed control (in meters per second) + GRIPPER_POSITION = 3; // Position control (in meters) } -// Defines a command to control the gripper movement +// A command to control the gripper movement message GripperCommand { GripperMode mode = 1; // Mode in which to control the gripper /* - * In position, admissible values for each finger is between 0 and 1.0, where 0 is closed and 1.0 is fully open. - * In speed or torque, admissible values for each finger is between -1.0 and 1.0, where 1.0 corresponds + * In position, admissible values for each finger is between 0 and 1.0, where 0 is fully open and 1.0 is fully closed. + * In speed, admissible values for each finger is between -1.0 and 1.0, where 1.0 corresponds * to maximum opening speed and -1.0 corresponds to maximum closing speed. */ Gripper gripper = 2; // Gripper movement values uint32 duration = 3; // Duration constraint. If not 0, allows to set a limit (in seconds) to the GripperCommand } -// Message used to request the current gripper movement in either position, force or speed +// Request to apply a specific gripper mode message GripperRequest { GripperMode mode = 1; // Mode for which the gripper movement status is requested } -// Defines a gripper movement, which is composed of a series of fingers movement +// Gripper movement composed of a series of fingers movement message Gripper { repeated Finger finger = 1; // Finger movements } -// Defines a finger movement +// Movement of a specified gripper finger message Finger { uint32 finger_identifier = 1; // Finger identifier /* - * In position, admissible values for each finger is between 0 and 1.0, where 0 is closed and 1.0 is fully open. + * In position, admissible values for each finger is between 0 and 1.0, where 0 is fully open and 1.0 is fully closed. * In speed or torque, admissible values for each finger is between -1.0 and 1.0, where 1.0 corresponds - * to maximum opening speed and -1.0 corresponds to maximum closing speed. + * to maximum opening speed or torque and -1.0 corresponds to maximum closing speed or torque. */ float value = 2; } -// List of admissible map navigation directions +// Admissible map navigation directions enum NavigationDirection { UNSPECIFIED_NAVIGATION_DIRECTION = 0; // Unspecified navigation direction NEXT = 1; // Go to next map - UP = 2; // Go to parent map group (future) - DOWN = 3; // Go to children map group (future) + UP = 2; // Go to parent map group (not implemented yet) + DOWN = 3; // Go to children map group (not implemented yet) PREVIOUS = 4; // Go to previous map } -// List of admissible joint navigation directions +// Admissible joint navigation directions enum JointNavigationDirection { UNSPECIFIED_JOINT_NAVIGATION_DIRECTION = 0; // Unspecified joint navigation direction JOINT_NEXT = 1; // Go to next joint JOINT_PREVIOUS = 2; // Go to previous joint } -// List of admissible sound types (future) +// Admissible sound types (not implemented yet) enum SoundType { UNSPECIFIED_SOUND_TYPE = 0; // Unspecified sound types BIP_SERIES = 1; // Bip series sound type SINGLE_BIP = 2; // Single bin sound type } -// List of admissible LED states (future) +// Admissible LED states (not implemented yet) enum LedState { UNSPECIFIED_LED_STATE = 0; // Unspecified LED state LED_OFF = 1; // LED is off @@ -1587,7 +1699,7 @@ enum LedState { LED_ON = 3; // LED is one } -// List of admissible GPIO states (future) +// Admissible GPIO states (not implemented yet) enum GpioState { UNSPECIFIED_GPIO_STATE = 0; // Unspecified GPIO state GPIO_OFF = 1; // GPIO is off @@ -1595,7 +1707,7 @@ enum GpioState { GPIO_ON = 3; // GPIO is on } -// Identifies the system time (future) +// Identifies the system time (not implemented yet) message SystemTime { uint32 sec = 1; // Seconds after the minute(0-59) uint32 min = 2; // Minutes after the hour (0-59) @@ -1605,7 +1717,7 @@ message SystemTime { uint32 year = 6; // Years since 1900 } -// List of admissible XBOX360 digital inputs +// Admissible XBOX360 digital inputs enum Xbox360DigitalInputIdentifier { UNSPECIFIED_XBOX360_DIGITAL = 0; // Unspecified digital input XBOX360_PAD_UP = 1; // Pad up input @@ -1624,7 +1736,7 @@ enum Xbox360DigitalInputIdentifier { XBOX360_BUTTON_Y = 16; // Button Y input } -// List of admissible XBOX360 analog inputs +// Admissible XBOX360 analog inputs enum Xbox360AnalogInputIdentifier { UNSPECIFIED_XBOX360_ANALOG = 0; // Unspecified analog input XBOX360_THUMB_LEFT_X = 1; // Thumb left X input @@ -1636,142 +1748,169 @@ enum Xbox360AnalogInputIdentifier { } -// Provides information about actuators +// A count of the number of actuators in the robot message ActuatorInformation { uint32 count = 1; // Number of actuators } -// Provides information about the arm state +// Information about the arm state message ArmStateInformation { Kinova.Api.Common.ArmState active_state = 1; // Arm active state Kinova.Api.Common.Connection connection = 2; // Connection information of the last processed command which triggered an arm state change } -// Message that contains a arm state event +// Notification about a single arm state event message ArmStateNotification { Kinova.Api.Common.ArmState active_state = 1; // New arm state Kinova.Api.Common.Timestamp timestamp = 2; // Event timestamp Kinova.Api.Common.Connection connection = 3; // Connection that caused the arm state event } -// Country code -message CountryCode { - CountryCodeIdentifier identifier = 1; // ISO3166 country code identifier -} - -// List of supported ISO3166 country identifiers -enum CountryCodeIdentifier { - UNSPECIFIED_COUNTRY_CODE = 0; - UNITED_ARAB_EMIRATES_AE = 1; - ANTIGUA_AND_BARBUDA_AG = 2; - ANGUILLA_AI = 3; - ALBANIA_AL = 4; - AMERICAN_SAMOA_AS = 5; - AUSTRIA_AT = 6; - AUSTRALIA_AU = 7; - ARUBA_AW = 8; - AZERBAIJAN_AZ = 9; - BOSNIA_AND_HERZEGOVINA_BA = 10; - BANGLADESH_BD = 11; - BELGIUM_BE = 12; - BULGARIA_BG = 13; - BAHRAIN_BH = 14; - BERMUDA_BM = 15; - BRUNEI_DARUSSALAM_BN = 16; - BRAZIL_BR = 17; - BAHAMAS_BS = 18; - BELARUS_BY = 19; - SWITZERLAND_CH = 20; - CANADA_CA = 21; - CHINA_CN = 22; - COLOMBIA_CO = 23; - COSTA_RICA_CR = 24; - CYPRUS_CY = 25; - CZECH_REPUBLIC_CZ = 26; - GERMANY_DE = 27; - DENMARK_DK = 28; - ECUADOR_EC = 29; - ESTONIA_EE = 30; - EGYPT_EG = 31; - SPAIN_ES = 32; - ETHIOPIA_ET = 33; - FINLAND_FI = 34; - FRANCE_FR = 35; - UNITED_KINGDOM_GB = 36; - GRENADA_GD = 37; - FRENCH_GUIANA_GF = 38; - GUADELOUPE_GP = 39; - GREECE_GR = 40; - GUATEMALA_GT = 41; - GUAM_GU = 42; - HONG_KONG_HK = 43; - CROATIA_HR = 44; - HUNGARY_HU = 45; - INDIA_IN = 46; - INDONESIA_ID = 47; - IRELAND_IE = 48; - ISRAEL_IL = 49; - ICELAND_IS = 50; - ITALY_IT = 51; - JORDAN_JO = 52; - JAPAN_JP = 53; - CAMBODIA_KH = 54; - REPUBLIC_OF_KOREA_KR = 55; - KUWAIT_KW = 56; - CAYMAN_ISLANDS_KY = 57; - LAO_PDR_LA = 58; - LEBANON_LB = 59; - LIECHTENSTEIN_LI = 60; - SRI_LANKA_LK = 61; - LESOTHO_LS = 62; - LITHUANIA_LT = 63; - LUXEMBOURG_LU = 64; - LATVIA_LV = 65; - MOROCCO_MA = 66; - MONACO_MC = 67; - MOLDOVA_MD = 68; - MONTENEGRO_ME = 69; - REPUBLIC_OF_MACEDONIA_MK = 70; - MONGOLIA_MN = 71; - MARTINIQUE_MQ = 72; - MAURITANIA_MR = 73; - MALTA_MT = 74; - MAURITIUS_MU = 75; - MALDIVES_MV = 76; - MALAWI_MW = 77; - MEXICO_MX = 78; - MALAYSIA_MY = 79; - NICARAGUA_NI = 80; - NETHERLANDS_NL = 81; - NORWAY_NO = 82; - NEW_ZEALAND_NZ = 83; - OMAN_OM = 84; - PANAMA_PA = 85; - PERU_PE = 86; - PHILIPPINES_PH = 87; - POLAND_PL = 88; - PUERTO_RICO_PR = 89; - PORTUGAL_PT = 90; - PARAGUAY_PY = 91; - REUNION_RE = 92; - ROMANIA_RO = 93; - SERBIA_RS = 94; - RUSSIAN_FEDERATION_RU = 95; - SWEDEN_SE = 96; - SINGAPORE_SI = 97; - SLOVAKIA_SK = 98; - EL_SALVADOR_SV = 99; - THAILAND_TH = 100; - TUNISIA_TN = 101; - TURKEY_TR = 102; - TRINIDAD_AND_TOBAGO_TT = 103; - TAIWAN_PROVINCE_OF_CHINA_TW = 104; - UKRAINE_UA = 105; - UNITED_STATES_US = 106; - HOLY_SEE_VATICAN_CITY_STATE_VA = 107; - BOLIVARIAN_REPUBLIC_OF_VENEZUELA_VE = 108; - BRITISH_VIRGIN_ISLANDS_VG = 109; - VIETNAM_VN = 110; - MAYOTTE_YT = 111; - SOUTH_AFRICA_ZA = 112; +// Admissible capacitive sensor modes +enum CapSenseMode +{ + RESERVED = 0; // Reserved, do not use + INACTIVE = 1; // Cap sensor is inactive + ACTIVE_AUTO_THRESHOLD = 2; // Cap sensor is active in automatic threshold mode + ACTIVE_NOISE_ATT = 4; // Cap sensor is active with noise mitigation enabled + ACTIVE_NORMAL = 5; // Cap sensor is active in normal mode + CONFIGURATION = 6; // Configuration mode +} + +// Capacitive sensor configuration information +message CapSenseConfig +{ + uint32 identifier = 1; // MessageId + CapSenseMode mode = 2; // Operational mode of the sensor + float threshold_a = 3; // Threshold of the sensor A (successive detection count to trigger a change of state) + float threshold_b = 4; // Threshold of the sensor B (successive detection count to trigger a change of state) + float sensitivity_a = 5; // Sensitivity of the sensor A (picofarad) + float sensitivity_b = 6; // Sensitivity of the sensor B (picofarad) +} + +// An array of configuration information for different bridges. +message BridgeList { + repeated BridgeConfig bridgeConfig = 1; // List of bridge configuration. +} + +// The result of an operation on a specific bridge +message BridgeResult +{ + BridgeIdentifier bridge_id = 1; // ID of the bridge on which operation was performed + BridgeStatus status = 2; // Result code of operation. +} + +// Bridge identifier +message BridgeIdentifier { + uint32 bridge_id = 1; // Unique bridge identifier. +} + +// Bridge configuration information. It is used to either create a bridge or to retrieve information about an existing bridge +message BridgeConfig { + uint32 device_identifier = 1; // Identifier of the device to which the bridge is connecting. + BridgeType bridgetype = 2; // Bridge type. + BridgePortConfig port_config = 3; // Port configuration. If used to enable port bridging, it is optional. If no port config is given defaults for bridge type is used. + BridgeIdentifier bridge_id = 4; // Bridge identifier. Not used when creating bridge. It is used when retrieving configuration. +} + +// Port configuration information for a TCP port bridge +message BridgePortConfig +{ + uint32 target_port = 1; // Port on target device. + uint32 out_port = 2; // Port exposed on base's external interface +} + +// Bridge operation status +enum BridgeStatus { + BRIDGE_STATUS_OK = 0; // No error encountered. + BRIDGE_STATUS_OUTP_UNAVAILABLE = 1; // Requested output port unavailable. + BRIDGE_STATUS_UNKNOWN_DEVID = 2; // Given device identifier is unknown (no device associated with it). + BRIDGE_STATUS_UNKNOWN_BRIDGE_TYPE = 3; // Unknown bridge type used. + BRIDGE_STATUS_NOT_FOUND = 4; // Requested bridge not found. + BRIDGE_STATUS_NOT_INITIALIZED = 5; // Bridge manager not initialized. + BRIDGE_STATUS_UNKNOWN = 6; // Unknown error. +} + +// Type of port forward bridge to create +enum BridgeType { + BRIDGE_TYPE_UNSPECIFIED = 0; // Unspecified Type (custom bridge) + BRIDGE_TYPE_UART = 1; // Bridge to uart bridge TCP port. + BRIDGE_TYPE_TELNET = 2; // Bridge to telnet port +} + +// Pre-computed joint trajectory subject to specified continuity constraints. The starting point of the trajectory must have an elapsed time of 0 ms and the angular values must reflect the current state of the robot. The robot control libraries will validate the trajectory fulfills the specified continuity constraints before playing the trajectory. +message PreComputedJointTrajectory { + TrajectoryContinuityMode mode = 1; // Trajectory continuity mode + repeated PreComputedJointTrajectoryElement trajectory_elements = 2; // List of pre-computed elements composing the trajectory. +} + +// Set of angle, speed, acceleration, and elapsed time values for each joint for a given 1 ms interval. A PreComputedJointTrajectory is made up of a series of these elements. +message PreComputedJointTrajectoryElement { + repeated float joint_angles = 1; // Angles values for all joints (in degrees) + repeated float joint_speeds = 2; // Speed values for all joints (in degrees per second) + repeated float joint_accelerations = 3; // Acceleration values for all joints (in degrees per second^2) + float time_from_start = 4; // Absolute elaspsed time since initial point (in seconds) +} + +// Admissible trajectory continuity mode +enum TrajectoryContinuityMode +{ + TRAJECTORY_CONTINUITY_MODE_UNSPECIFIED = 0; // Unspecified continuity + TRAJECTORY_CONTINUITY_MODE_POSITION = 1; // Position continuity only + TRAJECTORY_CONTINUITY_MODE_SPEED = 2; // Position and speed continuity + TRAJECTORY_CONTINUITY_MODE_ACCELERATION = 3; // Position, speed and acceleration continuity +} + +// Trajectory validation error types +enum TrajectoryErrorType +{ + TRAJECTORY_ERROR_TYPE_UNSPECIFIED = 0; // Unspecified error type + TRAJECTORY_ERROR_TYPE_OUTSIDE_WORKSPACE = 1; // The trajectory point is outside robot workspace + TRAJECTORY_ERROR_TYPE_ACTUATOR_COUNT_MISMATCH = 2; // There is an actuator count mismatch with the robot + TRAJECTORY_ERROR_TYPE_INVALID_DURATION = 3; // The trajectory has an invalid duration + TRAJECTORY_ERROR_TYPE_ZERO_DISTANCE = 4; // The trajectory does not move the robot because the delta is either zero or too small + TRAJECTORY_ERROR_TYPE_INVALID_SPEED = 5; // The speed for a trajectory point for an actuator is invalid + TRAJECTORY_ERROR_TYPE_LARGE_SPEED = 6; // The speed for a trajectory point for an actuator exceeds its limit + TRAJECTORY_ERROR_TYPE_INVALID_ACCELERATION = 7; // The acceleration for a trajectory point for an actuator is invalid + TRAJECTORY_ERROR_TYPE_INVALID_TIME_STEP = 8; // The time step for a trajectory point is invalid + TRAJECTORY_ERROR_TYPE_LARGE_SIZE = 9; // The trajectory is too large + TRAJECTORY_ERROR_TYPE_WRONG_MODE = 10; // The robot is not currently in Trajectory Control mode + TRAJECTORY_ERROR_TYPE_JOINT_POSITION_LIMIT = 11; // The position limit for a trajectory point for an actuator is exceeded + TRAJECTORY_ERROR_TYPE_FILE_ERROR = 12; // An internal file error was encountered + TRAJECTORY_ERROR_TYPE_NO_FILE_IN_MEMORY = 13; // An internal file memory error was encountered + TRAJECTORY_ERROR_TYPE_INDEX_OUT_OF_TRAJ = 14; // The index for a trajectory point is invalid + TRAJECTORY_ERROR_TYPE_ALREADY_RUNNING = 15; // A trajectory is already running + TRAJECTORY_ERROR_TYPE_WRONG_STARTING_POINT = 16; // The difference between the trajectory's starting point and the current position is too large + TRAJECTORY_ERROR_TYPE_CARTESIAN_CANNOT_START = 17; // The cartesian trajectory is not able to start + TRAJECTORY_ERROR_TYPE_WRONG_STARTING_SPEED = 18; // The difference between the trajectory's starting speed and the current speed is too large + TRAJECTORY_ERROR_TYPE_INVALID_POSITION = 19; // The position for a trajectory point for an actuator is invalid +} + +// Trajectory validation error identifiers +enum TrajectoryErrorIdentifier +{ + TRAJECTORY_ERROR_IDENTIFIER_UNSPECIFIED = 0; // Unspecified error identifier + TRAJECTORY_ERROR_IDENTIFIER_UNAPPLICABLE = 1; // No identifier required for this error + TRAJECTORY_ERROR_IDENTIFIER_TIME = 2; // Time validation failed + TRAJECTORY_ERROR_IDENTIFIER_POSITION = 3; // Position validation failed + TRAJECTORY_ERROR_IDENTIFIER_VELOCITY = 4; // Velocity validation failed + TRAJECTORY_ERROR_IDENTIFIER_ACCELERATION = 5; // Acceleration validation failed +} + +// Details for a single trajectory validation error +message TrajectoryErrorElement +{ + TrajectoryErrorType error_type = 1; // Error type + TrajectoryErrorIdentifier error_identifier = 2; // Error identifier + float error_value = 3; // Erroneous value + float min_value = 4; // Minimum permitted value + float max_value = 5; // Maximum permitted value + uint32 index = 6; // Actuator index + string message = 7; // Clarification message for the error +} + +// Report collecting information on different validation errors for a particular trajectory +message TrajectoryErrorReport +{ + repeated TrajectoryErrorElement trajectory_error_elements = 1; } diff --git a/kortex_driver/protos/BaseCyclic.proto b/kortex_driver/protos/BaseCyclic.proto index a91dbadb..49fc43d3 100644 --- a/kortex_driver/protos/BaseCyclic.proto +++ b/kortex_driver/protos/BaseCyclic.proto @@ -13,33 +13,34 @@ syntax = "proto3"; import public "Common.proto"; +import public "InterconnectCyclicMessage.proto"; package Kinova.Api.BaseCyclic; -// Service to exchange cyclic data with base module +// Service to exchange cyclic data with base service BaseCyclic { //@PROXY_ID=3 @ERROR=Kinova.Api.Error - // Commands refresh (with feedback) + // Sends a command to actuators and interface and returns feedback from base, actuators, and interface on actual status rpc Refresh (Command) returns (Feedback); //@RPC_ID=1 - // Commands refresh (no feedback) + // Sends a command to actuators and interface without receiving feedback rpc RefreshCommand (Command) returns (Kinova.Api.Common.Empty); //@RPC_ID=2 - // Gets feedback + // Obtains feedback from base, actuators, and interface on their status rpc RefreshFeedback (Kinova.Api.Common.Empty) returns (Feedback); //@RPC_ID=3 - // Gets custom data + // Retrieves custom data rpc RefreshCustomData (CustomData) returns (CustomData); //@RPC_ID=4 } -// Enumeration used to identify BaseCyclic current version -enum ServiceVersion +// Identifies BaseCyclic current version +enum ServiceVersion { RESERVED_0 = 0; // Reserved CURRENT_VERSION = 1; // Current version } -// Defines an actuator module command +// Defines an actuator command message ActuatorCommand // @NOTE=copied from ActuatorCyclic.proto { fixed32 command_id = 1; // Command ID (first 2 bytes: device ID, last 2 bytes: sequence number) @@ -50,59 +51,26 @@ message ActuatorCommand // @NOTE=copied from ActuatorCyclic.proto float current_motor = 6; // Desired current of the motor (in Amperes) } -// Defines an interconnect module command -message InterconnectCommand // @NOTE=copied from InterconnectCyclic.proto -{ - fixed32 command_id = 1; // Command ID (first 2 bytes: device ID, last 2 bytes: sequence number) - fixed32 flags = 2; // Flags - float position = 3; // Desired position of the gripper fingers (0-100%) - float velocity = 4; // Desired velocity of the gripper fingers (0-100%) - float force = 5; // Desired force of the gripper fingers (0-100%) -} - -// Defines the feedback provided by an actuator module +// Defines the feedback provided by an actuator message ActuatorFeedback // @NOTE=copied from ActuatorCyclic.proto { - fixed32 command_id = 1; // Command ID (first 2 bytes: device ID, last 2 bytes: sequence number) - fixed32 status_flags = 2; // Status flags - fixed32 jitter_comm = 3; // Jitter from the communication (in microseconds) - float position = 4; // Position of the actuator (in degrees) - float velocity = 5; // Velocity of the actuator (in degrees per second) - float torque = 6; // Torque of the actuator (in Newton * meters) - float current_motor = 7; // Current of the motor (in Amperes) - float voltage = 8; // Voltage of the main board (in Volts) - float temperature_motor = 9; // Motor temperature (maximum of the three (3) phase temperatures in °C) - float temperature_core = 10; // Microcontroller temperature (in degrees Celsius) - fixed32 fault_bank_a = 11; // Fault bank A - fixed32 fault_bank_b = 12; // Fault bank B - fixed32 warning_bank_a = 13; // Warning bank A - fixed32 warning_bank_b = 14; // Warning bank B -} - -// Defines the feedback provided by an interconnect module -message InterconnectFeedback // @NOTE=copied from InterconnectCyclic.proto -{ - fixed32 command_id = 1; // Command ID (first 2 bytes: device ID, last 2 bytes: sequence number) - fixed32 status_flags = 2; // Status flags - fixed32 jitter_comm = 3; // Jitter from the communication (in microseconds) - float position = 4; // Position of the gripper fingers (0-100%) - float velocity = 5; // Velocity of the gripper fingers (0-100%) - float force = 6; // Force of the gripper fingers (0-100%) - float imu_acceleration_x = 7; // IMU Measured acceleration (X-Axis) of the interconnect (in meters per second ^ squared) - float imu_acceleration_y = 8; // IMU Measured acceleration (Y-Axis) of the interconnect (in meters per second ^ squared) - float imu_acceleration_z = 9; // IMU Measured acceleration (Z-Axis) of the interconnect (in meters per second ^ squared) - float imu_angular_velocity_x = 10; // IMU Measured angular velocity (X-Axis) of the interconnect (in degrees per second) - float imu_angular_velocity_y = 11; // IMU Measured angular velocity (Y-Axis) of the interconnect (in degrees per second) - float imu_angular_velocity_z = 12; // IMU Measured angular velocity (Z-Axis) of the interconnect (in degrees per second) - float voltage = 13; // Voltage of the main board (in Volt) - float temperature_core = 14; // Microcontroller temperature (in degrees Celsius) - fixed32 fault_bank_a = 15; // Fault bank A - fixed32 fault_bank_b = 16; // Fault bank B - fixed32 warning_bank_a = 17; // Warning bank A - fixed32 warning_bank_b = 18; // Warning bank B + fixed32 command_id = 1; // Command ID (first 2 bytes: device ID, last 2 bytes: sequence number) + fixed32 status_flags = 2; // Status flags + fixed32 jitter_comm = 3; // Jitter from the communication (in microseconds) + float position = 4; // Position of the actuator (in degrees) + float velocity = 5; // Velocity of the actuator (in degrees per second) + float torque = 6; // Torque of the actuator (in Newton * meters) + float current_motor = 7; // Current of the motor (in Amperes) + float voltage = 8; // Voltage of the main board (in Volts) + float temperature_motor = 9; // Motor temperature (maximum of the three (3) phase temperatures in °C) + float temperature_core = 10; // Microcontroller temperature (in degrees Celsius) + fixed32 fault_bank_a = 11; // Fault bank A + fixed32 fault_bank_b = 12; // Fault bank B + fixed32 warning_bank_a = 13; // Warning bank A + fixed32 warning_bank_b = 14; // Warning bank B } -// Custom development data from an actuator module, content varies according to debug needs +// Custom development data from an actuator, content varies according to debug needs message ActuatorCustomData // @NOTE=copied from ActuatorCyclic.proto { fixed32 command_id = 1; // Command ID (first 2 bytes: device ID, last 2 bytes: sequence number) @@ -124,96 +92,81 @@ message ActuatorCustomData // @NOTE=copied from ActuatorCyclic.proto fixed32 custom_data_15 = 17; // Custom data word 15 } -// Custom development data from an interconnect module, content varies according to debug needs -message InterconnectCustomData // @NOTE=copied from InterconnectCyclic.proto +// Defines the feedback provided by the base +message BaseFeedback { - fixed32 command_id = 1; // Command ID (first 2 bytes: device ID, last 2 bytes: sequence number) - fixed32 custom_data_0 = 2; // Custom data word 0 - fixed32 custom_data_1 = 3; // Custom data word 1 - fixed32 custom_data_2 = 4; // Custom data word 2 - fixed32 custom_data_3 = 5; // Custom data word 3 - fixed32 custom_data_4 = 6; // Custom data word 4 - fixed32 custom_data_5 = 7; // Custom data word 5 - fixed32 custom_data_6 = 8; // Custom data word 6 - fixed32 custom_data_7 = 9; // Custom data word 7 - fixed32 custom_data_8 = 10; // Custom data word 8 - fixed32 custom_data_9 = 11; // Custom data word 9 - fixed32 custom_data_10 = 12; // Custom data word 10 - fixed32 custom_data_11 = 13; // Custom data word 11 - fixed32 custom_data_12 = 14; // Custom data word 12 - fixed32 custom_data_13 = 15; // Custom data word 13 - fixed32 custom_data_14 = 16; // Custom data word 14 - fixed32 custom_data_15 = 17; // Custom data word 15 -} - -// Defines the feedback provided by the base module -message BaseFeedback -{ - uint32 active_state_connection_identifier= 1; // Connection identifier of the last processed command which triggered an arm state change - Kinova.Api.Common.ArmState active_state = 2; // Active state of the arm - float arm_voltage = 3; // Arm voltage (in Volts) - float arm_current = 4; // Arm current (in Amperes) - float temperature_cpu = 5; // CPU temperature (in degree Celcius) - float temperature_ambient = 6; // Ambient temperature (in degree Celcius) - float imu_acceleration_x = 7; // IMU Measured acceleration (X-Axis) of the base (in meters per second squared) - float imu_acceleration_y = 8; // IMU Measured acceleration (Y-Axis) of the base (in meters per second squared) - float imu_acceleration_z = 9; // IMU Measured acceleration (Z-Axis) of the base (in meters per second squared) - float imu_angular_velocity_x = 10; // IMU Measured angular velocity (X-Axis) of the base (in degrees per second) - float imu_angular_velocity_y = 11; // IMU Measured angular velocity (Y-Axis) of the base (in degrees per second) - float imu_angular_velocity_z = 12; // IMU Measured angular velocity (Z-Axis) of the base (in degrees per second) - float tool_pose_x = 13; // Measured Cartesian position (X-Axis) of the End Effector (EE) (in meters) - float tool_pose_y = 14; // Measured Cartesian position (Y-Axis) of the End Effector (EE) (in meters) - float tool_pose_z = 15; // Measured Cartesian position (Z-Axis) of the End Effector (EE) (in meters) - float tool_pose_theta_x = 16; // Measured Cartesian orientation (X-Axis) of the End Effector (EE) (in degrees) - float tool_pose_theta_y = 17; // Measured Cartesian orientation (Y-Axis) of the End Effector (EE) (in degrees) - float tool_pose_theta_z = 18; // Measured Cartesian orientation (Z-Axis) of the End Effector (EE) (in degrees) - float tool_twist_linear_x = 19; // Measured Cartesian linear velocity (X-Axis) of the End Effector (EE) (in meters) - float tool_twist_linear_y = 20; // Measured Cartesian linear velocity (Y-Axis) of the End Effector (EE) (in meters) - float tool_twist_linear_z = 21; // Measured Cartesian linear velocity (Z-Axis) of the End Effector (EE) (in meters) - float tool_twist_angular_x = 22; // Measured Cartesian angular velocity (X-Axis) of the End Effector (EE) (in degrees per second) - float tool_twist_angular_y = 23; // Measured Cartesian angular velocity (Y-Axis) of the End Effector (EE) (in degrees per second) - float tool_twist_angular_z = 24; // Measured Cartesian angular velocity (Z-Axis) of the End Effector (EE) (in degrees per second) - float tool_external_wrench_force_x = 25; // Calculated force in X-Axis from external wrench (in Newton) - float tool_external_wrench_force_y = 26; // Calculated force in Y-Axis from external wrench (in Newton) - float tool_external_wrench_force_z = 27; // Calculated force in Z-Axis from external wrench (in Newton) - float tool_external_wrench_torque_x = 28; // Calculated torque about X-axis from external wrench (in Newton * meters) - float tool_external_wrench_torque_y = 29; // Calculated torque about Y-axis from external wrench (in Newton * meters) - float tool_external_wrench_torque_z = 30; // Calculated torque about Z-axis from external wrench (in Newton * meters) - fixed32 fault_bank_a = 31; // The arm fault flags bank A (0 if no fault) see Base.SafetyIdentifier - fixed32 fault_bank_b = 32; // The arm fault flags bank B (0 if no fault) see Base.SafetyIdentifier - fixed32 warning_bank_a = 33; // The arm warning flags bank A (0 if no warning) see Base.SafetyIdentifier - fixed32 warning_bank_b = 34; // The arm warning flags bank B (0 if no warning) see Base.SafetyIdentifier + uint32 active_state_connection_identifier = 1; // Connection identifier of the last processed command which triggered an arm state change + Kinova.Api.Common.ArmState active_state = 2; // Active state of the arm + float arm_voltage = 3; // Arm voltage (in Volts) + float arm_current = 4; // Arm current (in Amperes) + float temperature_cpu = 5; // CPU temperature (in degree Celsius) + float temperature_ambient = 6; // Ambient temperature (in degree Celsius) + float imu_acceleration_x = 7; // IMU Measured acceleration (X-Axis) of the base (in meters per second squared) + float imu_acceleration_y = 8; // IMU Measured acceleration (Y-Axis) of the base (in meters per second squared) + float imu_acceleration_z = 9; // IMU Measured acceleration (Z-Axis) of the base (in meters per second squared) + float imu_angular_velocity_x = 10; // IMU Measured angular velocity (X-Axis) of the base (in degrees per second) + float imu_angular_velocity_y = 11; // IMU Measured angular velocity (Y-Axis) of the base (in degrees per second) + float imu_angular_velocity_z = 12; // IMU Measured angular velocity (Z-Axis) of the base (in degrees per second) + float tool_pose_x = 13; // Measured Cartesian position (X-Axis) of the tool (in meters) + float tool_pose_y = 14; // Measured Cartesian position (Y-Axis) of the tool (in meters) + float tool_pose_z = 15; // Measured Cartesian position (Z-Axis) of the tool (in meters) + float tool_pose_theta_x = 16; // Measured Cartesian orientation (X-Axis) of the tool (in degrees) + float tool_pose_theta_y = 17; // Measured Cartesian orientation (Y-Axis) of the tool (in degrees) + float tool_pose_theta_z = 18; // Measured Cartesian orientation (Z-Axis) of the tool (in degrees) + float tool_twist_linear_x = 19; // Measured Cartesian linear velocity (X-Axis) of the tool (in meters) + float tool_twist_linear_y = 20; // Measured Cartesian linear velocity (Y-Axis) of the tool (in meters) + float tool_twist_linear_z = 21; // Measured Cartesian linear velocity (Z-Axis) of the tool (in meters) + float tool_twist_angular_x = 22; // Measured Cartesian angular velocity (X-Axis) of the tool (in degrees per second) + float tool_twist_angular_y = 23; // Measured Cartesian angular velocity (Y-Axis) of the tool (in degrees per second) + float tool_twist_angular_z = 24; // Measured Cartesian angular velocity (Z-Axis) of the tool (in degrees per second) + float tool_external_wrench_force_x = 25; // Computed force in X-Axis from external wrench (in Newton) + float tool_external_wrench_force_y = 26; // Computed force in Y-Axis from external wrench (in Newton) + float tool_external_wrench_force_z = 27; // Computed force in Z-Axis from external wrench (in Newton) + float tool_external_wrench_torque_x = 28; // Computed torque about X-axis from external wrench (in Newton-meters) + float tool_external_wrench_torque_y = 29; // Computed torque about Y-axis from external wrench (in Newton-meters) + float tool_external_wrench_torque_z = 30; // Computed torque about Z-axis from external wrench (in Newton-meters) + fixed32 fault_bank_a = 31; // The arm fault flags bank A (0 if no fault) see Base.SafetyIdentifier + fixed32 fault_bank_b = 32; // The arm fault flags bank B (0 if no fault) see Base.SafetyIdentifier + fixed32 warning_bank_a = 33; // The arm warning flags bank A (0 if no warning) see Base.SafetyIdentifier + fixed32 warning_bank_b = 34; // The arm warning flags bank B (0 if no warning) see Base.SafetyIdentifier + float commanded_tool_pose_x = 35; // Commanded Cartesian position (X-Axis) of the tool (in meters) + float commanded_tool_pose_y = 36; // Commanded Cartesian position (Y-Axis) of the tool (in meters) + float commanded_tool_pose_z = 37; // Commanded Cartesian position (Z-Axis) of the tool (in meters) + float commanded_tool_pose_theta_x = 38; // Commanded Cartesian orientation (X-Axis) of the tool (in degrees) + float commanded_tool_pose_theta_y = 39; // Commanded Cartesian orientation (Y-Axis) of the tool (in degrees) + float commanded_tool_pose_theta_z = 40; // Commanded Cartesian orientation (Z-Axis) of the tool (in degrees) } // Custom development data, content varies according to debug needs message CustomData { - fixed32 frame_id = 1; // Frame ID - fixed32 custom_data_0 = 2; // Custom data word 0 - fixed32 custom_data_1 = 3; // Custom data word 1 - fixed32 custom_data_2 = 4; // Custom data word 2 - fixed32 custom_data_3 = 5; // Custom data word 3 - fixed32 custom_data_4 = 6; // Custom data word 4 - fixed32 custom_data_5 = 7; // Custom data word 5 - fixed32 custom_data_6 = 8; // Custom data word 6 - fixed32 custom_data_7 = 9; // Custom data word 7 - repeated ActuatorCustomData actuators_custom_data = 10; // Actuator custom data (repeated) - InterconnectCustomData interconnect_custom_data = 11; // Interconnect custom data + fixed32 frame_id = 1; // Frame ID + fixed32 custom_data_0 = 2; // Custom data word 0 + fixed32 custom_data_1 = 3; // Custom data word 1 + fixed32 custom_data_2 = 4; // Custom data word 2 + fixed32 custom_data_3 = 5; // Custom data word 3 + fixed32 custom_data_4 = 6; // Custom data word 4 + fixed32 custom_data_5 = 7; // Custom data word 5 + fixed32 custom_data_6 = 8; // Custom data word 6 + fixed32 custom_data_7 = 9; // Custom data word 7 + repeated ActuatorCustomData actuators_custom_data = 10; // Actuator custom data (repeated) + Kinova.Api.InterconnectCyclic.CustomData interconnect_custom_data = 11; // Interconnect custom data } -// Defines a command for many modules (actuactors and interconnect) + +// Defines a command provided to robot devices (actuators and interface) message Command { - fixed32 frame_id = 1; // Frame ID - repeated ActuatorCommand actuators = 2; // Actuator command (repeated) - InterconnectCommand interconnect = 3; // Interconnect command + fixed32 frame_id = 1; // Frame ID + repeated ActuatorCommand actuators = 2; // Actuator command (repeated) + Kinova.Api.InterconnectCyclic.Command interconnect = 3; // Interface command } -// Defines the feedback provided by many modules (base, actuactors and interconnect) +// Defines the feedback provided by robot devices (base, actuators and interface) message Feedback { - fixed32 frame_id = 1; // Frame ID - BaseFeedback base = 2; // Base feedback - repeated ActuatorFeedback actuators = 3; // Actuator feedback - InterconnectFeedback interconnect = 4; // Interconnect feedback + fixed32 frame_id = 1; // Frame ID + BaseFeedback base = 2; // Base feedback + repeated ActuatorFeedback actuators = 3; // Actuator feedback + Kinova.Api.InterconnectCyclic.Feedback interconnect = 4; // Interface feedback } diff --git a/kortex_driver/protos/Common.options b/kortex_driver/protos/Common.options index fe8e4afe..75e5be59 100644 --- a/kortex_driver/protos/Common.options +++ b/kortex_driver/protos/Common.options @@ -1,16 +1,24 @@ -// -// KINOVA (R) KORTEX (TM) -// -// Copyright (c) 2018 Kinova inc. All rights reserved. -// -// This software may be modified and distributed -// under the terms of the BSD 3-Clause license. -// -// Refer to the LICENSE file for details. -// -// - -Kinova.Api.Common.DeviceTypes long_names:false -Kinova.Api.Common.SafetyStatusValue long_names:false -Kinova.Api.Common.NotificationType long_names:false -Kinova.Api.Common.Unit long_names:false \ No newline at end of file +// +// KINOVA (R) KORTEX (TM) +// +// Copyright (c) 2018 Kinova inc. All rights reserved. +// +// This software may be modified and distributed +// under the terms of the BSD 3-Clause license. +// +// Refer to the LICENSE file for details. +// +// + +Kinova.Api.Common.DeviceTypes long_names:false +Kinova.Api.Common.SafetyStatusValue long_names:false +Kinova.Api.Common.NotificationType long_names:false +Kinova.Api.Common.Unit long_names:false + + +Kinova.Api.Common.UARTSpeed long_names:false +Kinova.Api.Common.UARTWordLength long_names:false +Kinova.Api.Common.UARTStopBits long_names:false +Kinova.Api.Common.UARTParity long_names:false + + diff --git a/kortex_driver/protos/Common.proto b/kortex_driver/protos/Common.proto index ee69ed74..97f5ab79 100644 --- a/kortex_driver/protos/Common.proto +++ b/kortex_driver/protos/Common.proto @@ -1,140 +1,332 @@ -/* - * KINOVA (R) KORTEX (TM) - * - * Copyright (c) 2018 Kinova inc. All rights reserved. - * - * This software may be modified and distributed - * under the terms of the BSD 3-Clause license. - * - * Refer to the LICENSE file for details. - * - */ - -syntax = "proto3"; - -package Kinova.Api.Common; - -// List of admissible device types -enum DeviceTypes { - UNSPECIFIED_DEVICE_TYPE = 0; // Unspecified device type - BASE = 1; // Base module - VISION = 2; // Vision module - BIG_ACTUATOR = 3; // Big actuator module - SMALL_ACTUATOR = 4; // Small actuator module - INTERCONNECT = 5; // Interconnect module - GRIPPER = 6; // Gripper module -} - -// Identifies a device -message DeviceHandle { - DeviceTypes device_type = 1; // Device type - uint32 device_identifier = 2; // Unique device identifier (used with other services) - uint32 order = 3; // Unique value indicating the order of that device versus the others to facilitate representation -} - -// List of admissible safety statuses -enum SafetyStatusValue { - SAFETY_STATUS_UNSPECIFIED = 0; // Unspecified safety status - SAFETY_STATUS_WARNING = 1; // Warning safety reached - SAFETY_STATUS_ERROR = 2; // Error safety reached - SAFETY_STATUS_NORMAL = 3; // Safety is off -} - -// List of admissible permissions. Used as bitfields -enum Permission { - NO_PERMISSION = 0; // No permission - READ_PERMISSION = 1; // Read permission. Refers to an entity that can be read - UPDATE_PERMISSION = 2; // Update permission. Refers to an entity that can be modified - DELETE_PERMISSION = 4; // Delete permission. Refers to an entity that can be deleted -} - -// List of admissible notification types -enum NotificationType { - NOTIFICATION_TYPE_UNSPECIFIED = 0; // Unspecified notification - NOTIFICATION_TYPE_THRESHOLD = 1; // Threshold notification. Refers to a notification sent beyond a specific threshold (future) - NOTIFICATION_TYPE_FIX_RATE = 2; // Fix rate notification. Refers to a notification sent at a predetermined fix rate (future) - NOTIFICATION_TYPE_EVENT = 3; // Event type notification. Refers to a notification sent in response to an event -} - -// List of admissible units used throughout API methods -enum Unit { - UNSPECIFIED_UNIT = 0; // Unspecified unit - CELSIUS = 1; // Degree Celsius - AMPERE = 2; // Ampere - VOLT = 3; // Volt - METER_PER_SECOND = 4; // Meter per second - DEGREE_PER_SECOND = 5; // Degree per second - METER_PER_SECOND_2 = 6; // Meter per second squared - DEGREE_PER_SECOND_2 = 7; // Degree per second squared - NEWTON = 8; // Newton - NEWTON_METER =9; // Newton * meter - KILOGRAM = 10; // Kilogram - DEGREE = 11; // Degree - TICK = 12; // Tick - DEGREE_PER_MILLISECOND = 13;// Degre per millisecond -} - -// Message used when no information needs to be exchanged between client application and robot, and vice versa -message Empty { -} - -// Specifies options associated to a notification -message NotificationOptions { - NotificationType type = 1; // Type of notification - uint32 rate_m_sec = 2; // Rate value (in meters per second) (if applicable) - float threshold_value = 3; // Threshold value (if applicable) -} - -// Identifies a safety -message SafetyHandle { - uint32 identifier = 1; // Safety identifier -} - -// Identifies a notification -message NotificationHandle { - uint32 identifier = 1; // Notification identifier -} - -// Message that contains a safety event -message SafetyNotification { - SafetyHandle safety_handle = 1; // Safety handle - SafetyStatusValue value = 2; // New safety status - Timestamp timestamp = 3; // Event timestamp - UserProfileHandle user_handle = 4; // User that caused the safety event - Connection connection = 5; // Connection that caused the safety event -} - -// Timestamp based on Epoch (00:00:00 Thursday, January 1, 1970) -message Timestamp { - uint32 sec = 1; // Number of seconds that have elapsed since Epoch - uint32 usec = 2; // Number of microseconds that have elapsed since the last second (0-999999) -} - -// Identifies a user profile -message UserProfileHandle { - uint32 identifier = 1; // User profile identifier - fixed32 permission = 2; // Must use 'Permission' as bitwise -} - -// Idenfities a connection -message Connection { - UserProfileHandle user_handle = 1; // User profile handle, or set to zero if no user logged in - string connection_information = 2; // Connection info (e.g. IP address with port number) - uint32 connection_identifier = 3; // Connection identifier -} - -// List of admissible arm states -enum ArmState -{ - ARMSTATE_UNSPECIFIED = 0; // Unspecified arm state - ARMSTATE_BASE_INITIALIZATION = 1; // Cannot be reported as the Base initialization must be completed before allowing user connection - ARMSTATE_IDLE = 2; // Base initialization succeeded - ARMSTATE_INITIALIZATION = 3; // Arm is being initialized - ARMSTATE_IN_FAULT = 4; // Arm is in fault - ARMSTATE_MAINTENANCE = 5; // Arm is in maintenance - ARMSTATE_SERVOING_LOW_LEVEL = 6; // Arm is in low-level servoing mode - ARMSTATE_SERVOING_READY = 7; // Arm is ready to be controlled - ARMSTATE_SERVOING_PLAYING_SEQUENCE = 8; // Arm is currently being controlled via a sequence - ARMSTATE_SERVOING_MANUALLY_CONTROLLED = 9; // Arm is currently being controlled manually - ARMSTATE_RESERVED = 255; // For debugging, this state must never be reported outside the base. this means that a state is not mapped correctly -} \ No newline at end of file +/* + * KINOVA (R) KORTEX (TM) + * + * Copyright (c) 2018 Kinova inc. All rights reserved. + * + * This software may be modified and distributed + * under the terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ + +syntax = "proto3"; + +package Kinova.Api.Common; + +// Admissible device types +enum DeviceTypes { + UNSPECIFIED_DEVICE_TYPE = 0; // Unspecified device type + BASE = 1; // Base module + VISION = 2; // Vision module + BIG_ACTUATOR = 3; // Big actuator module + SMALL_ACTUATOR = 4; // Small actuator module + INTERCONNECT = 5; // Interface module + GRIPPER = 6; // Gripper module + MEDIUM_ACTUATOR = 7; // Medium actuator module + XBIG_ACTUATOR = 8; // XBig actuator module +} + +// Reference to a specific device +message DeviceHandle { + DeviceTypes device_type = 1; // Device type + uint32 device_identifier = 2; // Unique device identifier (used with other services) + uint32 order = 3; // Unique value indicating the order of that device versus the others to facilitate representation +} + +// Admissible safety statuses +enum SafetyStatusValue { + SAFETY_STATUS_UNSPECIFIED = 0; // Unspecified safety status + SAFETY_STATUS_WARNING = 1; // Warning safety reached + SAFETY_STATUS_ERROR = 2; // Error safety reached + SAFETY_STATUS_NORMAL = 3; // Safety is off +} + +// Admissible permissions. Used as bitfields +enum Permission { + NO_PERMISSION = 0; // No permission + READ_PERMISSION = 1; // Read permission. Refers to an entity that can be read + UPDATE_PERMISSION = 2; // Update permission. Refers to an entity that can be modified + DELETE_PERMISSION = 4; // Delete permission. Refers to an entity that can be deleted +} + +// Admissible notification types +enum NotificationType { + NOTIFICATION_TYPE_UNSPECIFIED = 0; // Unspecified notification + NOTIFICATION_TYPE_THRESHOLD = 1; // Threshold notification. Refers to a notification sent beyond a specific threshold (not implemented yet) + NOTIFICATION_TYPE_FIX_RATE = 2; // Fix rate notification. Refers to a notification sent at a predetermined fix rate (not implemented yet) + NOTIFICATION_TYPE_EVENT = 3; // Event type notification. Refers to a notification sent in response to an event +} + +// Admissible units used throughout API methods +enum Unit { + UNSPECIFIED_UNIT = 0; // Unspecified unit + CELSIUS = 1; // Degree Celsius + AMPERE = 2; // Ampere + VOLT = 3; // Volt + METER_PER_SECOND = 4; // Meter per second + DEGREE_PER_SECOND = 5; // Degree per second + METER_PER_SECOND_2 = 6; // Meter per second squared + DEGREE_PER_SECOND_2 = 7; // Degree per second squared + NEWTON = 8; // Newton + NEWTON_METER =9; // Newton * meter + KILOGRAM = 10; // Kilogram + DEGREE = 11; // Degree + TICK = 12; // Tick + DEGREE_PER_MILLISECOND = 13;// Degre per millisecond +} + +// Message used when no information needs to be exchanged between client application and robot, and vice versa +message Empty { +} + +// Specifies options associated to a notification +message NotificationOptions { + NotificationType type = 1; // Type of notification + uint32 rate_m_sec = 2; // Rate value (in meters per second) (if applicable) + float threshold_value = 3; // Threshold value (if applicable) +} + +// Reference to a specific safety +message SafetyHandle { + uint32 identifier = 1; // Safety identifier +} + +// Reference to a specific notification topic +message NotificationHandle { + uint32 identifier = 1; // Notification identifier +} + +// Notification about a single safety event +message SafetyNotification { + SafetyHandle safety_handle = 1; // Safety handle + SafetyStatusValue value = 2; // New safety status + Timestamp timestamp = 3; // Event timestamp + UserProfileHandle user_handle = 4; // User that caused the safety event + Connection connection = 5; // Connection that caused the safety event +} + +// Timestamp based on Epoch (00:00:00 Thursday, January 1, 1970) +message Timestamp { + uint32 sec = 1; // Number of seconds that have elapsed since Epoch + uint32 usec = 2; // Number of microseconds that have elapsed since the last second (0-999999) +} + +// Reference to a user profile +message UserProfileHandle { + uint32 identifier = 1; // User profile identifier + fixed32 permission = 2; // Must use 'Permission' as bitwise +} + +// Connection between a user and the robot +message Connection { + UserProfileHandle user_handle = 1; // User profile handle, or set to zero if no user logged in + string connection_information = 2; // Connection info (e.g. IP address with port number) + uint32 connection_identifier = 3; // Connection identifier +} + +// Admissible robot arm states +enum ArmState +{ + ARMSTATE_UNSPECIFIED = 0; // Unspecified arm state + ARMSTATE_BASE_INITIALIZATION = 1; // Cannot be reported as the Base initialization must be completed before allowing user connection + ARMSTATE_IDLE = 2; // Base initialization succeeded + ARMSTATE_INITIALIZATION = 3; // Arm is being initialized + ARMSTATE_IN_FAULT = 4; // Arm is in fault + ARMSTATE_MAINTENANCE = 5; // Arm is in maintenance + ARMSTATE_SERVOING_LOW_LEVEL = 6; // Arm is in low-level servoing mode + ARMSTATE_SERVOING_READY = 7; // Arm is ready to be controlled + ARMSTATE_SERVOING_PLAYING_SEQUENCE = 8; // Arm is currently being controlled via a sequence + ARMSTATE_SERVOING_MANUALLY_CONTROLLED = 9; // Arm is currently being controlled manually + ARMSTATE_RESERVED = 255; // For debugging, this state must never be reported outside the base. this means that a state is not mapped correctly +} + +// UART configuration details +message UARTConfiguration { + uint32 port_id = 1; // UART port identification + bool enabled = 2; // True if UART device is enabled, false otherwise + UARTSpeed speed = 3; // Speed selection + UARTWordLength word_length = 4; // Word length + UARTStopBits stop_bits = 5; // Stop bits + UARTParity parity = 6; // Parity mode +} + +// UART port id identification +message UARTDeviceIdentification { + uint32 port_id = 1; // UART device port id +} + +// Admissible UART baudrates +enum UARTSpeed { + UART_SPEED_UNSPECIFIED = 0; // Unspecified UART speed + UART_SPEED_4800 = 1; // 4800 bps + UART_SPEED_9600 = 2; // 9600 bps + UART_SPEED_19200 = 3; // 19200 bps + UART_SPEED_38400 = 4; // 38400 bps + UART_SPEED_57600 = 5; // 57600 bps + UART_SPEED_115200 = 6; // 115200 bps + UART_SPEED_230400 = 7; // 230400 bps + UART_SPEED_460800 = 8; // 460800 bps + UART_SPEED_921600 = 9; // 921600 bps + UART_SPEED_1382400 = 10; // 1382400 bps + UART_SPEED_1612800 = 11; // 1612800 bps + UART_SPEED_1843200 = 12; // 1843200 bps + UART_SPEED_2073600 = 13; // 2073600 bps + UART_SPEED_2188800 = 14; // 2188800 bps + UART_SPEED_2246400 = 15; // 2246400 bps +} + +// Admissible UART word lengths +enum UARTWordLength { + UART_WORD_LENGTH_UNSPECIFIED = 0; // Unspecified UART word length + UART_WORD_LENGTH_7 = 1; // 7 bits + UART_WORD_LENGTH_8 = 2; // 8 bits + UART_WORD_LENGTH_9 = 3; // 9 bits +} + +// Admissible UART stop bits +enum UARTStopBits { + UART_STOP_BITS_UNSPECIFIED = 0; // Unspecified UART stop bits + UART_STOP_BITS_0_5 = 1; // 0.5 stop bit + UART_STOP_BITS_1 = 2; // 1 stop bit + UART_STOP_BITS_1_5 = 3; // 1.5 stop bits + UART_STOP_BITS_2 = 4; // 2 stop bits +} + +// Admissible UART parity mode +enum UARTParity { + UART_PARITY_UNSPECIFIED = 0; // Unspecified UART parity + UART_PARITY_NONE = 1; // No parity + UART_PARITY_ODD = 2; // Odd parity + UART_PARITY_EVEN = 3; // Even parity +} + +// Admissible Cartesian reference frame modes +enum CartesianReferenceFrame { + CARTESIAN_REFERENCE_FRAME_UNSPECIFIED = 0; // Unspecified Cartesian reference frame + CARTESIAN_REFERENCE_FRAME_MIXED = 1; // Mixed reference frame where translation reference = base and orientation reference = tool + CARTESIAN_REFERENCE_FRAME_TOOL = 2; // Tool reference frame where translation reference = tool and orientation reference = tool + CARTESIAN_REFERENCE_FRAME_BASE = 3; // Base reference frame where the translation reference = base and orientation reference = base +} + +// Country code +message CountryCode { + CountryCodeIdentifier identifier = 1; // ISO3166 country code identifier +} + +// Supported ISO3166 country identifiers +enum CountryCodeIdentifier { + UNSPECIFIED_COUNTRY_CODE = 0; + UNITED_ARAB_EMIRATES_AE = 1; + ANTIGUA_AND_BARBUDA_AG = 2; + ANGUILLA_AI = 3; + ALBANIA_AL = 4; + AMERICAN_SAMOA_AS = 5; + AUSTRIA_AT = 6; + AUSTRALIA_AU = 7; + ARUBA_AW = 8; + AZERBAIJAN_AZ = 9; + BOSNIA_AND_HERZEGOVINA_BA = 10; + BANGLADESH_BD = 11; + BELGIUM_BE = 12; + BULGARIA_BG = 13; + BAHRAIN_BH = 14; + BERMUDA_BM = 15; + BRUNEI_DARUSSALAM_BN = 16; + BRAZIL_BR = 17; + BAHAMAS_BS = 18; + BELARUS_BY = 19; + SWITZERLAND_CH = 20; + CANADA_CA = 21; + CHINA_CN = 22; + COLOMBIA_CO = 23; + COSTA_RICA_CR = 24; + CYPRUS_CY = 25; + CZECH_REPUBLIC_CZ = 26; + GERMANY_DE = 27; + DENMARK_DK = 28; + ECUADOR_EC = 29; + ESTONIA_EE = 30; + EGYPT_EG = 31; + SPAIN_ES = 32; + ETHIOPIA_ET = 33; + FINLAND_FI = 34; + FRANCE_FR = 35; + UNITED_KINGDOM_GB = 36; + GRENADA_GD = 37; + FRENCH_GUIANA_GF = 38; + GUADELOUPE_GP = 39; + GREECE_GR = 40; + GUATEMALA_GT = 41; + GUAM_GU = 42; + HONG_KONG_HK = 43; + CROATIA_HR = 44; + HUNGARY_HU = 45; + INDIA_IN = 46; + INDONESIA_ID = 47; + IRELAND_IE = 48; + ISRAEL_IL = 49; + ICELAND_IS = 50; + ITALY_IT = 51; + JORDAN_JO = 52; + JAPAN_JP = 53; + CAMBODIA_KH = 54; + REPUBLIC_OF_KOREA_KR = 55; + KUWAIT_KW = 56; + CAYMAN_ISLANDS_KY = 57; + LAO_PDR_LA = 58; + LEBANON_LB = 59; + LIECHTENSTEIN_LI = 60; + SRI_LANKA_LK = 61; + LESOTHO_LS = 62; + LITHUANIA_LT = 63; + LUXEMBOURG_LU = 64; + LATVIA_LV = 65; + MOROCCO_MA = 66; + MONACO_MC = 67; + MOLDOVA_MD = 68; + MONTENEGRO_ME = 69; + REPUBLIC_OF_MACEDONIA_MK = 70; + MONGOLIA_MN = 71; + MARTINIQUE_MQ = 72; + MAURITANIA_MR = 73; + MALTA_MT = 74; + MAURITIUS_MU = 75; + MALDIVES_MV = 76; + MALAWI_MW = 77; + MEXICO_MX = 78; + MALAYSIA_MY = 79; + NICARAGUA_NI = 80; + NETHERLANDS_NL = 81; + NORWAY_NO = 82; + NEW_ZEALAND_NZ = 83; + OMAN_OM = 84; + PANAMA_PA = 85; + PERU_PE = 86; + PHILIPPINES_PH = 87; + POLAND_PL = 88; + PUERTO_RICO_PR = 89; + PORTUGAL_PT = 90; + PARAGUAY_PY = 91; + REUNION_RE = 92; + ROMANIA_RO = 93; + SERBIA_RS = 94; + RUSSIAN_FEDERATION_RU = 95; + SWEDEN_SE = 96; + SINGAPORE_SI = 97; + SLOVAKIA_SK = 98; + EL_SALVADOR_SV = 99; + THAILAND_TH = 100; + TUNISIA_TN = 101; + TURKEY_TR = 102; + TRINIDAD_AND_TOBAGO_TT = 103; + TAIWAN_PROVINCE_OF_CHINA_TW = 104; + UKRAINE_UA = 105; + UNITED_STATES_US = 106; + HOLY_SEE_VATICAN_CITY_STATE_VA = 107; + BOLIVARIAN_REPUBLIC_OF_VENEZUELA_VE = 108; + BRITISH_VIRGIN_ISLANDS_VG = 109; + VIETNAM_VN = 110; + MAYOTTE_YT = 111; + SOUTH_AFRICA_ZA = 112; +} diff --git a/kortex_driver/protos/ControlConfig.proto b/kortex_driver/protos/ControlConfig.proto new file mode 100644 index 00000000..bcbef3a2 --- /dev/null +++ b/kortex_driver/protos/ControlConfig.proto @@ -0,0 +1,130 @@ +/* + * KINOVA (R) KORTEX (TM) + * + * Copyright (c) 2018 Kinova inc. All rights reserved. + * + * This software may be modified and distributed + * under the terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ + +syntax = "proto3"; + +import public "Common.proto"; + +package Kinova.Api.ControlConfig; + +// Service to configure robot control library +service ControlConfig {//@PROXY_ID=16 @ERROR=Kinova.Api.Error + + // Sets global gravity vector in terms of base reference frame. This needs to be configured to enable control of the robot in wall or ceiling mounting of the robot. + rpc SetGravityVector (GravityVector) returns (Kinova.Api.Common.Empty);//@RPC_ID=1 + + // Retrieves global gravity vector + rpc GetGravityVector (Kinova.Api.Common.Empty) returns (GravityVector);//@RPC_ID=2 + + // Sets payload information. This needs to be configured so that the control library can take into account the presence of the payload mass in computing the dynamics of the robot. + rpc SetPayloadInformation (PayloadInformation) returns (Kinova.Api.Common.Empty);//@RPC_ID=3 + + // Retrieves payload information + rpc GetPayloadInformation (Kinova.Api.Common.Empty) returns (PayloadInformation);//@RPC_ID=4 + + // Sets tool configuration. This needs to be configured for two reasons. 1) so that the control library can take into account the presence of the tool mass in computing the dynamics of the robot. 2) so that the robot is aware of the tool frame center relative position and orientation to correctly compute and report the tool position. + rpc SetToolConfiguration (ToolConfiguration) returns (Kinova.Api.Common.Empty);//@RPC_ID=5 + + // Retrieves tool configuration + rpc GetToolConfiguration (Kinova.Api.Common.Empty) returns (ToolConfiguration);//@RPC_ID=6 + + // Subscribes to control configuration notifications + rpc ControlConfigurationTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=7 @PUB_SUB=ControlConfigurationNotification + + // Unsubscribes client from receiving specified type of notifications + rpc Unsubscribe (Kinova.Api.Common.NotificationHandle) returns (Kinova.Api.Common.Empty);//@RPC_ID=8 @UNSUB + + // Defines the reference frame to use with twist and wrench commands + rpc SetCartesianReferenceFrame (CartesianReferenceFrameInfo) returns (Kinova.Api.Common.Empty);//@RPC_ID=9 + + // Retrieves the current reference frame used by the twist and wrench commands + rpc GetCartesianReferenceFrame (Kinova.Api.Common.Empty) returns (CartesianReferenceFrameInfo);//@RPC_ID=10 +} + +// Identifies ControlConfig current version +enum ServiceVersion +{ + RESERVED_0 = 0; // Reserved + CURRENT_VERSION = 1; // Current version +} + +// Defines the gravity vector in terms of the robot base frame. If not explicitly configured, it defaults to (0, 0, -9.81), assuming a mounting on a horizontal surface. If the robot is mounted on a wall or ceiling, the gravity vector relative to the base frame will change. The control library needs to be aware of this to accurately compensate for gravity. +message GravityVector +{ + float x = 1; // x (meters / second^squared) + float y = 2; // y (meters / second^squared) + float z = 3; // z (meters / second^squared) +} + +// A Cartesian position +message Position { + float x = 1; // x position (in meters) + float y = 2; // y position (in meters) + float z = 3; // z position (in meters) +} + +// Defines payload information +message PayloadInformation +{ + float payload_mass = 1; // Tool mass in kg + Position payload_mass_center = 2; // Tool mass center position relative to the tool reference frame +} + +// Defines a Cartesian transform +message CartesianTransform +{ + float x = 1; // x (in meters) + float y = 2; // y (in meters) + float z = 3; // z (in meters) + float theta_x = 4; // Theta x (in degrees) + float theta_y = 5; // Theta y (in degrees) + float theta_z = 6; // Theta z (in degrees) +} + +// Defines a tool configuration +message ToolConfiguration { + CartesianTransform tool_transform = 1; // Cartesian transform tool + float tool_mass = 2; // Tool mass (in kg) + Position tool_mass_center = 3; // Tool mass center position relative to the interface module reference frame +} + +// Admissible control configuration events +enum ControlConfigurationEvent { + UNSPECIFIED_CONTROL_CONFIGURATION_EVENT = 0; // Unspecified control configuration event + ANGLE_UNIT_CHANGED = 1; // Angle unit changed event + GRAVITY_VECTOR_CHANGED = 2; // Gravity vector changed event + VISION_JOYSTICK_CONFIGURATION_CHANGED = 3; // Vision joystick configuration changed event + JOINT_ADMITTANCE_CONFIGURATION_CHANGED = 4; // Joint admittance configuration changed event + NULL_ADMITTANCE_CONFIGURATION_CHANGED = 5; // Null admittance configuration changed event + CARTESIAN_ADMITTANCE_CONFIGURATION_CHANGED = 6; // Cartesian admittance configuration changed event + JOINT_TORQUE_HYBRID_CONFIGURATION_CHANGED = 7; // Joint torque hybrid configuraiton changed event + WRENCH_COMMAND_NORMAL_CONFIGURATION_CHANGED = 8; // Wrench commmand normal configuration changed event + WRENCH_COMMAND_RESTRICTED_CONFIGURATION_CHANGED = 9; // Wrench command restricted configuration changed event + CONTROL_CONFIGURATION_FACTORY_RESTORED = 10; // Control configuration factory restored event + TOOL_CONFIGURATION_CHANGED = 11; // Tool configuration event + PAYLOAD_CONFIGURATION_CHANGED = 12; // Payload configuration event + CARTESIAN_REFERENCE_CHANGED = 13; // Cartesian reference event + CHANGE_CONTROL_MODE_FAILED = 14; // Control mode change fail event +} + +// Notification about a single control configuration event +message ControlConfigurationNotification { + ControlConfigurationEvent event = 1; + Kinova.Api.Common.Timestamp timestamp = 2; // Event timestamp + Kinova.Api.Common.UserProfileHandle user_handle = 3; // User that caused the factory event to occur + Kinova.Api.Common.Connection connection = 4; // Connection that caused the configuration event +} + +// Cartesian reference frame +message CartesianReferenceFrameInfo { + Kinova.Api.Common.CartesianReferenceFrame reference_frame = 1; // Reference frame +} diff --git a/kortex_device_manager/protos/DeviceConfig.options b/kortex_driver/protos/DeviceConfig.options similarity index 85% rename from kortex_device_manager/protos/DeviceConfig.options rename to kortex_driver/protos/DeviceConfig.options index 838d4b84..7a80df2d 100644 --- a/kortex_device_manager/protos/DeviceConfig.options +++ b/kortex_driver/protos/DeviceConfig.options @@ -16,4 +16,6 @@ Kinova.Api.DeviceConfig.SerialNumber.serial_number max_size:25 Kinova.Api.DeviceConfig.PartNumberRevision.part_number_revision max_size:9 Kinova.Api.DeviceConfig.MACAddress.mac_address max_size:6 fixed_length:true Kinova.Api.DeviceConfig.RunModes long_names:false -Kinova.Api.DeviceConfig.SafetyLimitType long_names:false \ No newline at end of file +Kinova.Api.DeviceConfig.SafetyLimitType long_names:false + +Kinova.Api.DeviceConfig.Calibration.calibration_parameter max_count:4 fixed_count:false diff --git a/kortex_driver/protos/DeviceConfig.proto b/kortex_driver/protos/DeviceConfig.proto new file mode 100644 index 00000000..bef45cb9 --- /dev/null +++ b/kortex_driver/protos/DeviceConfig.proto @@ -0,0 +1,337 @@ +/* + * KINOVA (R) KORTEX (TM) + * + * Copyright (c) 2018 Kinova inc. All rights reserved. + * + * This software may be modified and distributed + * under the terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ + +syntax = "proto3"; + +import public "Common.proto"; + +package Kinova.Api.DeviceConfig; + +// Service to get and set device configuration information +service DeviceConfig {//@PROXY_ID=9 @ERROR=Kinova.Api.Error + + // Returns the run mode for the device + rpc GetRunMode (Kinova.Api.Common.Empty) returns (RunMode); //@RPC_ID=1 + + // Sets the run mode for the device + rpc SetRunMode (RunMode) returns (Kinova.Api.Common.Empty); //@RPC_ID=2 + + // Retrieves the type for the device + rpc GetDeviceType (Kinova.Api.Common.Empty) returns (DeviceType); //@RPC_ID=3 + + // Retrieves the device firmware version + rpc GetFirmwareVersion (Kinova.Api.Common.Empty) returns (FirmwareVersion); //@RPC_ID=4 + + // Retrieves the device bootloader version + rpc GetBootloaderVersion (Kinova.Api.Common.Empty) returns (BootloaderVersion); //@RPC_ID=5 + + // Retrieves the device model number + rpc GetModelNumber (Kinova.Api.Common.Empty) returns (ModelNumber); //@RPC_ID=6 + + // Retrieves the device part number + rpc GetPartNumber (Kinova.Api.Common.Empty) returns (PartNumber); //@RPC_ID=7 + + // Retrieves the device serial number + rpc GetSerialNumber (Kinova.Api.Common.Empty) returns (SerialNumber); //@RPC_ID=8 + + // Retrieves the device MAC address + rpc GetMACAddress (Kinova.Api.Common.Empty) returns (MACAddress); //@RPC_ID=9 + + // Retrieves the device IPv4 settings (not implemented on Base) + rpc GetIPv4Settings (Kinova.Api.Common.Empty) returns (IPv4Settings); //@RPC_ID=10 + + // Sets the device IPv4 settings (not implemented on Base) + rpc SetIPv4Settings (IPv4Settings) returns (Kinova.Api.Common.Empty); //@RPC_ID=11 + + // Retrieves the device part number revision + rpc GetPartNumberRevision (Kinova.Api.Common.Empty) returns (PartNumberRevision); //@RPC_ID=12 + + // Sends a request to the device to reboot + rpc RebootRequest (RebootRqst) returns (Kinova.Api.Common.Empty); //@RPC_ID=14 + + // Enables (disable) the specified safety + rpc SetSafetyEnable (SafetyEnable) returns (Kinova.Api.Common.Empty); //@RPC_ID=15 + + // Sets the error threshold for the specified safety + rpc SetSafetyErrorThreshold (SafetyThreshold) returns (Kinova.Api.Common.Empty); //@RPC_ID=16 + + // Sets the warning threshold for the specified safety + rpc SetSafetyWarningThreshold (SafetyThreshold) returns (Kinova.Api.Common.Empty); //@RPC_ID=17 + + // Configures the specified safety (i.e. sets error and warning thresholds) + rpc SetSafetyConfiguration (SafetyConfiguration) returns (Kinova.Api.Common.Empty); //@RPC_ID=18 + + // Retrieves configuration about the specified safety + rpc GetSafetyConfiguration (Kinova.Api.Common.SafetyHandle) returns (SafetyConfiguration); //@RPC_ID=19 + + // Retrieves information about the specified safety + rpc GetSafetyInformation (Kinova.Api.Common.SafetyHandle) returns (SafetyInformation); //@RPC_ID=20 + + // Indicates if specified safety is enabled (or disabled) + rpc GetSafetyEnable (Kinova.Api.Common.SafetyHandle) returns (SafetyEnable); //@RPC_ID=21 + + // Indicates if the specified safety is raised + rpc GetSafetyStatus (Kinova.Api.Common.SafetyHandle) returns (SafetyStatus); //@RPC_ID=22 + + // Clear all safety status for this device if they are no longer raised + rpc ClearAllSafetyStatus (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty); //@RPC_ID=23 + + // Clear a specific safety status if it is no longer raised + rpc ClearSafetyStatus (Kinova.Api.Common.SafetyHandle) returns (Kinova.Api.Common.Empty); //@RPC_ID=24 + + // Retrieves configuration on all safeties + rpc GetAllSafetyConfiguration (Kinova.Api.Common.Empty) returns (SafetyConfigurationList); //@RPC_ID=25 + + // Retrieves information on all safeties + rpc GetAllSafetyInformation (Kinova.Api.Common.Empty) returns (SafetyInformationList); //@RPC_ID=26 + + // Restores all safety configurations to factory defaults + rpc ResetSafetyDefaults (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty); //@RPC_ID=27 + + // Subscribes to safety notifications + rpc SafetyTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle); //@RPC_ID=28 @PUB_SUB=Kinova.Api.Common.SafetyNotification + + // Starts device calibration (intended for Kinova Production of Pico) + rpc ExecuteCalibration (Calibration) returns (Kinova.Api.Common.Empty); //@RPC_ID=34 + + // Retrieves the status/result of device calibration (intended for Kinova Production of Pico) + rpc GetCalibrationResult (CalibrationElement) returns (CalibrationResult); //@RPC_ID=35 + + // Stop calibration in progress + rpc StopCalibration (Calibration) returns (CalibrationResult); //@RPC_ID=36 + + // Sets the capacitive sensor calibration + rpc SetCapSenseConfig (CapSenseConfig) returns (Kinova.Api.Common.Empty); //@RPC_ID=37 + + // Retrieves the capacitive sensor calibration + rpc GetCapSenseConfig (Kinova.Api.Common.Empty) returns (CapSenseConfig); //@RPC_ID=38 + + // Reads low-level register from the capacitive sensor (for Kinova internal use ony, not to be used in the field) + rpc ReadCapSenseRegister (CapSenseRegister) returns (CapSenseRegister); //@RPC_ID=39 + + // Writes to low-level register of the capacitive sensor (for Kinova internal use ony, not to be used in the field) + rpc WriteCapSenseRegister (CapSenseRegister) returns (Kinova.Api.Common.Empty); //@RPC_ID=40 +} + +// Identifies DeviceConfig current version +enum ServiceVersion { + RESERVED_0 = 0; // Reserved + CURRENT_VERSION = 1; // Current version +} + +// Options for the run mode for the device +enum RunModes { + RUN_MODE = 0; + CALIBRATION_MODE = 1; // calibration mode + CONFIGURATION_MODE = 2; // configuration mode + DEBUG_MODE = 3; // debug mode + TUNING_MODE = 4; // tuning mode +} + +// Device type +message DeviceType { + Kinova.Api.Common.DeviceTypes device_type = 1; // Device type +} + + +// Run mode +message RunMode { + RunModes run_mode = 1; // Run mode +} + +// Firmware version for the device +message FirmwareVersion { + uint32 firmware_version = 1; // Firmware version +} + +// Bootloader version for the device +message BootloaderVersion { + uint32 bootloader_version = 1; // Bootloader version +} + +// Model number for the device +message ModelNumber { + string model_number = 1; // Model number of size 25 including null character +} + +// Part number for the device +message PartNumber { + string part_number = 1; // Part number of size 25 including null character +} + +// Serial number for the device +message SerialNumber { + string serial_number = 1; // Serial number of size 25 including null character +} + +// MAC address for the device +message MACAddress { + bytes mac_address = 1; // MAC address +} + +// IPv4 settings for the device, including address, subnet mask, and default gateway +message IPv4Settings { + uint32 ipv4_address = 1; // IPv4Address + uint32 ipv4_subnet_mask = 2; // IPv4SubnetMask + uint32 ipv4_default_gateway = 3; // IPv4DefaultGateway +} + +// Part number revision for the device +message PartNumberRevision { + string part_number_revision = 1; // Part number revision +} + +// Result of power on self test +message PowerOnSelfTestResult { + uint32 power_on_self_test_result = 1; // Power on self test result +} + +// Reboot request with bootloader delay +message RebootRqst { + uint32 delay = 1; // Bootloader delay +} + +// Admissible calibration items +enum CalibrationItem +{ + UNSPECIFIED_CALIBRATION_ITEM = 0; // Unspecified calibration item + COGGING = 1; // Cogging calibration + MAGNETIC = 2; // Magnetic sensors calibration + MOTOR = 3; // Motor calibration + POSITION_RANGE = 4; // Position range calibration +} + +// Admissible calibration status +enum CalibrationStatus +{ + UNSPECIFIED_CALIBRATION_STATUS = 0; // Unspecified calibration status + NOT_CALIBRATED = 1; // Calibration is not done + IN_PROGRESS = 2; // Calibration is in progress + CALIBRATED = 3; // Calibration was successfully completed + IN_FAULT = 4; // Calibration failed +} + +// Types of safeties limits +enum SafetyLimitType { + UNSPECIFIED_SAFETY_LIMIT_TYPE = 0; + MINIMAL_LIMIT = 1; // Safety that will kick in below a certain Minimum threshold (e.g. Minimum temperature safety) + MAXIMAL_LIMIT = 2; // Safety that will kick in above a certain Maximum threshold (e.g. Maximum voltage safety) + EVENT_LIMIT = 3; // Safety that will kick in in reaction to a specific event (e.g. motor drive fault) + +} + +// Admissible capacitive sensor mode +enum CapSenseMode +{ + RESERVED = 0; // Reserved, do not use. + INACTIVE = 1; // Cap sensor is inactive. + ACTIVE_AUTO_THRESHOLD = 2; // Cap sensor is active in automatic threshold mode. + ACTIVE_NOISE_ATT = 4; // Cap sensor is active with noise mitigation enabled. + ACTIVE_NORMAL = 5; // Cap sensor is active in normal mode. + CONFIGURATION = 6; // Configuration mode. +} + +// Information about a specific safety +message SafetyInformation { + Kinova.Api.Common.SafetyHandle handle = 1; // Safety handle that this information is about + bool can_change_safety_state = 2; // True if related safety configuration can be modified + bool has_warning_threshold = 3; // True if safety status can go in Warning + bool has_error_threshold = 4; // True if safety status can go in Error + SafetyLimitType limit_type = 5; // Safety limit type + float default_warning_threshold = 6; // Default warning threshold (if 'limit_type' is either MINIMAL_LIMIT or MAXIMAL_LIMIT and 'has_warning_threshold' is true) + float default_error_threshold = 7; // Default error threshold (if 'limit_type' is either MINIMAL_LIMIT or MAXIMAL_LIMIT and 'has_error_threshold' is true) + float upper_hard_limit = 8; // Maximal threshold value (if 'limit_type' is either MINIMAL_LIMIT or MAXIMAL_LIMIT) + float lower_hard_limit = 9; // Minimal threshold value (if 'limit_type' is either MINIMAL_LIMIT or MAXIMAL_LIMIT) + Kinova.Api.Common.SafetyStatusValue status = 11;// Current Safety status + Kinova.Api.Common.Unit unit = 12; // Unit that the safety status is in +} + +// Array of safety information +message SafetyInformationList { + repeated SafetyInformation information = 1; +} + +// Enable or disable a specific safety +message SafetyEnable { + Kinova.Api.Common.SafetyHandle handle = 1; // Handle to safety to enable or disable + bool enable = 2; // Safety enable state +} + +// Configure threshold of a specific safety +message SafetyThreshold { + Kinova.Api.Common.SafetyHandle handle = 1; // Identifies safety to configure + float value = 2; // Safety threshold value +} + +// Configuration for a safety +message SafetyConfiguration { + Kinova.Api.Common.SafetyHandle handle = 1; // Handle to safety to configure + float error_threshold = 2; // Safety error threshold value + float warning_threshold = 3; // Safety warning threshold value + SafetyEnable enable = 4; // Safety enable state +} + +// Array of safety configurations +message SafetyConfigurationList { + repeated SafetyConfiguration configuration = 1; // Safety configuration +} + +// Safety status +message SafetyStatus { + Kinova.Api.Common.SafetyStatusValue value = 1; // Safety status (e.g. in error, warning or normal state) +} + +// Single calibration parameter information +message CalibrationParameter +{ + uint32 calibration_parameter_identifier = 1; // Calibration parameter identifier + oneof value { + int32 signedIntValue = 2; // Signed int calibration value. + uint32 unsignedIntValue = 3; // Unsigned int calibration value. + float floatValue = 4; // Float calibration value. + } +} + +// Calibration information to push to device +message Calibration +{ + CalibrationItem calibration_item = 1; // Item to calibrate + repeated CalibrationParameter calibration_parameter = 2; // Parameters associated to calibration item +} + +// Calibration element +message CalibrationElement +{ + CalibrationItem calibration_item = 1; // Item to get status +} + +// Result of a calibration +message CalibrationResult +{ + CalibrationStatus calibration_status = 1; // Calibration status + uint32 calibration_details = 2; // Additional information (used when status is in fault) +} + +// Capacitive sensor configuration message +message CapSenseConfig +{ + CapSenseMode mode = 1; // Operational mode of the sensor + float threshold_a = 2; // Sensitivity of the sensor A (0-100%). + float threshold_b = 3; // Sensitivity of the sensor B (0-100%). +} + +// Message used to address a register +message CapSenseRegister +{ + uint32 address = 1; // Register address + uint32 value = 2; // Register value +} diff --git a/kortex_device_manager/protos/DeviceManager.proto b/kortex_driver/protos/DeviceManager.proto similarity index 86% rename from kortex_device_manager/protos/DeviceManager.proto rename to kortex_driver/protos/DeviceManager.proto index d130b1f9..5d3d145e 100644 --- a/kortex_device_manager/protos/DeviceManager.proto +++ b/kortex_driver/protos/DeviceManager.proto @@ -16,20 +16,20 @@ import public "Common.proto"; package Kinova.Api.DeviceManager; -// This service provides information about which devices are present +// This service provides information about which devices are present in the robot service DeviceManager {//@PROXY_ID=23 @ERROR=Kinova.Api.Error // Retrieves the list of every device that the system contains, along with its type and order within the system rpc ReadAllDevices (Kinova.Api.Common.Empty) returns (DeviceHandles);//@RPC_ID=1 } -// Enumeration used to identify DeviceManager current version +// Identifies DeviceManager service current version enum ServiceVersion { RESERVED_0 = 0; // Reserved CURRENT_VERSION = 1; // Current version } -// List of Device handles +// Array of Device handles message DeviceHandles { repeated Kinova.Api.Common.DeviceHandle device_handle = 1; // Device handle } diff --git a/kortex_driver/protos/Errors.proto b/kortex_driver/protos/Errors.proto index 1224a52f..f7fb79eb 100644 --- a/kortex_driver/protos/Errors.proto +++ b/kortex_driver/protos/Errors.proto @@ -14,7 +14,7 @@ syntax = "proto3"; package Kinova.Api; -// List of possible error codes +// Possible error codes enum ErrorCodes { ERROR_NONE = 0; // No error ERROR_PROTOCOL_SERVER = 1; // Protocol server error @@ -23,7 +23,7 @@ enum ErrorCodes { ERROR_INTERNAL = 4; // Internal error } -// List of possible sub errror codes +// Possible sub-error codes enum SubErrorCodes { SUB_ERROR_NONE = 0; // No sub error METHOD_FAILED = 1; // Method returned a failure status (generic error) @@ -119,6 +119,8 @@ enum SubErrorCodes { WRONG_SERVOING_MODE = 75; // Robot is in not in the right servoing mode + CONTROL_WRONG_STARTING_SPEED = 76; // Robot is not at the right speed when starting a new trajectory. + USERNAME_LENGTH_EXCEEDED = 100; // User profile username length exceeds maximum allowed length FIRSTNAME_LENGTH_EXCEEDED = 101; // User profile first name length exceeds maximum allowed length LASTNAME_LENGTH_EXCEEDED = 102; // User profile last name length exceeds maximum allowed length @@ -130,4 +132,14 @@ enum SubErrorCodes { ROUTER_UNVAILABLE = 108; // The client router is currently unavailable. This can happen if an API method is called after the router has been deactivated via the method SetActivationStatus. ADDRESS_NOT_IN_VALID_RANGE = 120; // IP Address not valid against netmask + + SESSION_NOT_IN_CONTROL = 130; // Trying to perform command from a non-controlling session in single-level mode + + METHOD_TIMEOUT = 131; // Timeout occured during method execution + + UNSUPPORTED_ROBOT_CONFIGURATION = 132; // Product Configuration setter method failed because changing this parameter is unsupported on your robot model + NVRAM_READ_FAIL = 133; // Failed to read in NVRAM. + NVRAM_WRITE_FAIL = 134; // Failed to write in NVRAM. + + NETWORK_NO_ADDRESS_ASSIGNED = 135; // The specified interface has no assigned IP } diff --git a/kortex_driver/protos/GripperConfig.proto b/kortex_driver/protos/GripperConfig.proto new file mode 100644 index 00000000..e0410e7b --- /dev/null +++ b/kortex_driver/protos/GripperConfig.proto @@ -0,0 +1,30 @@ +syntax = "proto3"; + +import public "Common.proto"; + +package Kinova.Api.GripperConfig; + +// Gripper safety identifier +enum SafetyIdentifier { + UNSPECIFIED_ACTUATOR_SAFETY_IDENTIFIER = 0; //0x0 + MAXIMUM_MOTOR_CURRENT = 1; //0x1 + MAXIMUM_VOLTAGE = 2; //0x2 + MINIMUM_VOLTAGE = 4; //0x4 + MAXIMUM_MOTOR_TEMPERATURE = 8; //0x8 + MAXIMUM_CORE_TEMPERATURE = 16; //0x10 + NON_VOLATILE_MEMORY_CORRUPTED = 32; //0x20 + EMERGENCY_LINE_ASSERTED = 64; //0x40 + COMMUNICATION_TICK_LOST = 128; //0x80 + WATCHDOG_TRIGGERED = 256; //0x100 +} + +// Status flags for Robotiq Adaptive Gripper +enum RobotiqGripperStatusFlags { + UNSPECIFIED_ROBOTIQ_STATUS = 0; //0x0 + ROBOTIQ_STAT_INITIALIZED = 1; //0x01 + ROBOTIQ_STAT_OBJECT_DETECTED = 2; //0x02 + ROBOTIQ_STAT_POS_REACHED = 4; //0x04 + ROBOTIQ_STAT_STOPPED = 8; //0x08 +} + + diff --git a/kortex_device_manager/build/.gitignore b/kortex_driver/protos/GripperCyclic.options similarity index 100% rename from kortex_device_manager/build/.gitignore rename to kortex_driver/protos/GripperCyclic.options diff --git a/kortex_driver/protos/GripperCyclic.proto b/kortex_driver/protos/GripperCyclic.proto new file mode 100644 index 00000000..e987f2a4 --- /dev/null +++ b/kortex_driver/protos/GripperCyclic.proto @@ -0,0 +1,39 @@ +/* + * KINOVA (R) KORTEX (TM) + * + * Copyright (c) 2018 Kinova inc. All rights reserved. + * + * This software may be modified and distributed + * under the terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ + + syntax = "proto3"; + +import public "Common.proto"; +import public "GripperCyclicMessage.proto"; + +package Kinova.Api.GripperCyclic; + +// Service to exchange cyclic data with gripper +service GripperCyclic {//@PROXY_ID=17 @ERROR=Kinova.Api.Error + + // Sends a command to the gripper and receives feedback about the actual status of the gripper + rpc Refresh (Kinova.Api.GripperCyclic.Command) returns (Kinova.Api.GripperCyclic.Feedback); //@RPC_ID=1 + + // Sends a command to the gripper without receiving feedback + rpc RefreshCommand (Kinova.Api.GripperCyclic.Command) returns (Kinova.Api.Common.Empty); //@RPC_ID=2 + + // Obtains feedback from the gripper on its status + rpc RefreshFeedback (Kinova.Api.GripperCyclic.MessageId) returns (Kinova.Api.GripperCyclic.Feedback); //@RPC_ID=3 + + // Obtains custom data from the gripper + rpc RefreshCustomData (Kinova.Api.GripperCyclic.MessageId) returns (Kinova.Api.GripperCyclic.CustomData); //@RPC_ID=4 +} + +enum ServiceVersion { + RESERVED_0 = 0; + CURRENT_VERSION = 1; // Current Version +} diff --git a/kortex_driver/protos/GripperCyclicMessage.options b/kortex_driver/protos/GripperCyclicMessage.options new file mode 100644 index 00000000..e019b527 --- /dev/null +++ b/kortex_driver/protos/GripperCyclicMessage.options @@ -0,0 +1,5 @@ +Kinova.Api.GripperCyclic.Command.motor_cmd max_count:4 fixed_count:false +Kinova.Api.GripperCyclic.Feedback.motor max_count:4 fixed_count:false +Kinova.Api.GripperCyclic.CustomData.motor_custom_data max_count:4 fixed_count:false + + diff --git a/kortex_driver/protos/GripperCyclicMessage.proto b/kortex_driver/protos/GripperCyclicMessage.proto new file mode 100644 index 00000000..c27ac093 --- /dev/null +++ b/kortex_driver/protos/GripperCyclicMessage.proto @@ -0,0 +1,86 @@ +/* + * KINOVA (R) KORTEX (TM) + * + * Copyright (c) 2018 Kinova inc. All rights reserved. + * + * This software may be modified and distributed + * under the terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ + + syntax = "proto3"; + +import public "Common.proto"; + +package Kinova.Api.GripperCyclic; + +// Message identifier for command or feedback +message MessageId { + fixed32 identifier = 1; // Message ID (first 2 bytes : device ID, last 2 bytes : sequence number) +} + +// Command to a single gripper motor +message MotorCommand { + fixed32 motor_id = 1; // Motor ID (1, nb_motor) + float position = 3; // Desired position of the gripper fingers in percentage (0-100%) + float velocity = 4; // Desired velocity in percentage (0-100%) with which position will be set + float force = 5; // Desired force limit of the gripper fingers in percentage (0-100%) +} + +// Command sent to a gripper +message Command { + MessageId command_id = 1; // MessageId + fixed32 flags = 2; // Flags + repeated MotorCommand motor_cmd = 3; // Array of finger commands, one for each finger of the gripper. +} + +// Status feedback from a single gripper motor +message MotorFeedback { + fixed32 motor_id = 1; // Motor ID (1, nb_motor) + float position = 4; // Position of the gripper fingers in percentage (0-100%) + float velocity = 5; // Velocity of the gripper fingers in percentage (0-100%) + float current_motor = 7; // Current comsumed by the gripper motor (mA) + float voltage = 8; // Motor Voltage (V) + float temperature_motor = 10; // Motor temperature. (degrees Celsius) +} + +// Status feedback from a gripper +message Feedback { + MessageId feedback_id = 1; // MessageId + fixed32 status_flags = 2; // Status flags (see GripperConfig.RobotiqGripperStatusFlags) + fixed32 fault_bank_a = 3; // Fault bank A (see GripperConfig.SafetyIdentifier) + fixed32 fault_bank_b = 4; // Fault bank B (see GripperConfig.SafetyIdentifier) + fixed32 warning_bank_a = 5; // Warning bank A (see GripperConfig.SafetyIdentifier) + fixed32 warning_bank_b = 6; // Warning bank B (see GripperConfig.SafetyIdentifier) + repeated MotorFeedback motor = 7; +} + +// Custom data +message CustomDataUnit { + fixed32 custom_data_0 = 1; // Custom data word 0 + fixed32 custom_data_1 = 2; // Custom data word 1 + fixed32 custom_data_2 = 3; // Custom data word 2 + fixed32 custom_data_3 = 4; // Custom data word 3 + fixed32 custom_data_4 = 5; // Custom data word 4 + fixed32 custom_data_5 = 6; // Custom data word 5 + fixed32 custom_data_6 = 7; // Custom data word 6 + fixed32 custom_data_7 = 8; // Custom data word 7 + fixed32 custom_data_8 = 9; // Custom data word 8 + fixed32 custom_data_9 = 10; // Custom data word 9 + fixed32 custom_data_10 = 11; // Custom data word 10 + fixed32 custom_data_11 = 12; // Custom data word 11 + fixed32 custom_data_12 = 13; // Custom data word 12 + fixed32 custom_data_13 = 14; // Custom data word 13 + fixed32 custom_data_14 = 15; // Custom data word 14 + fixed32 custom_data_15 = 16; // Custom data word 15 +} + +// Custom data from gripper and gripper motors +message CustomData { + MessageId custom_data_id = 1; // MessageId + CustomDataUnit gripper_custom_data = 2; + repeated CustomDataUnit motor_custom_data = 3; +} + diff --git a/kortex_driver/protos/InterconnectConfig.options b/kortex_driver/protos/InterconnectConfig.options new file mode 100644 index 00000000..91b1c59f --- /dev/null +++ b/kortex_driver/protos/InterconnectConfig.options @@ -0,0 +1,25 @@ +// +// KINOVA (R) KORTEX (TM) +// +// Copyright (c) 2018 Kinova inc. All rights reserved. +// +// This software may be modified and distributed +// under the terms of the BSD 3-Clause license. +// +// Refer to the LICENSE file for details. +// +// +Kinova.Api.InterconnectConfig.ServiceVersion long_names:false +Kinova.Api.InterconnectConfig.SafetyIdentifier long_names:false +Kinova.Api.InterconnectConfig.GPIOIdentifier long_names:false +Kinova.Api.InterconnectConfig.GPIOMode long_names:false +Kinova.Api.InterconnectConfig.GPIOPull long_names:false +Kinova.Api.InterconnectConfig.GPIOValue long_names:false +Kinova.Api.InterconnectConfig.EthernetDevice long_names:false +Kinova.Api.InterconnectConfig.EthernetSpeed long_names:false +Kinova.Api.InterconnectConfig.EthernetDuplex long_names:false +Kinova.Api.InterconnectConfig.I2CDevice long_names:false +Kinova.Api.InterconnectConfig.I2CMode long_names:false +Kinova.Api.InterconnectConfig.I2CDeviceAddressing long_names:false +Kinova.Api.InterconnectConfig.I2CRegisterAddressSize long_names:false +Kinova.Api.InterconnectConfig.I2CData.data max_size:128 diff --git a/kortex_driver/protos/InterconnectConfig.proto b/kortex_driver/protos/InterconnectConfig.proto new file mode 100644 index 00000000..819c2def --- /dev/null +++ b/kortex_driver/protos/InterconnectConfig.proto @@ -0,0 +1,256 @@ +/* + * KINOVA (R) KORTEX (TM) + * + * Copyright (c) 2018 Kinova inc. All rights reserved. + * + * This software may be modified and distributed + * under the terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ + +syntax = "proto3"; + +import public "Common.proto"; + +package Kinova.Api.InterconnectConfig; + +// Service to get and set interface module (interconnect) configuration information, including user expansion +service InterconnectConfig {//@PROXY_ID=14 @ERROR=Kinova.Api.Error + + // Retrieves user UART configuration + rpc GetUARTConfiguration (Kinova.Api.Common.UARTDeviceIdentification) returns (Kinova.Api.Common.UARTConfiguration); //@RPC_ID=1 + + // Configures user UART + rpc SetUARTConfiguration (Kinova.Api.Common.UARTConfiguration) returns (Kinova.Api.Common.Empty); //@RPC_ID=2 + + // Retrieves user Ethernet configuration + rpc GetEthernetConfiguration (EthernetDeviceIdentification) returns (EthernetConfiguration); //@RPC_ID=3 + + // Configures user Ethernet port + rpc SetEthernetConfiguration (EthernetConfiguration) returns (Kinova.Api.Common.Empty); //@RPC_ID=4 + + // Retrieves user GPIO configuration + rpc GetGPIOConfiguration (GPIOIdentification) returns (GPIOConfiguration); //@RPC_ID=5 + + // Configures user GPIO + rpc SetGPIOConfiguration (GPIOConfiguration) returns (Kinova.Api.Common.Empty); //@RPC_ID=6 + + // Retrieves user GPIO state + rpc GetGPIOState (GPIOIdentification) returns (GPIOState); //@RPC_ID=7 + + // Configures user GPIO state + rpc SetGPIOState (GPIOState) returns (Kinova.Api.Common.Empty); //@RPC_ID=8 + + // Retrieves user I2C configuration + rpc GetI2CConfiguration (I2CDeviceIdentification) returns (I2CConfiguration); //@RPC_ID=9 + + // Configures user I2C + rpc SetI2CConfiguration (I2CConfiguration) returns (Kinova.Api.Common.Empty); //@RPC_ID=10 + + // Performs an I2C read request + rpc I2CRead (I2CReadParameter) returns (I2CData); //@RPC_ID=11 + + // Performs an I2C read register request + rpc I2CReadRegister (I2CReadRegisterParameter) returns (I2CData); //@RPC_ID=12 + + // Performs an I2C write request + rpc I2CWrite (I2CWriteParameter) returns (Kinova.Api.Common.Empty); //@RPC_ID=13 + + // Performs an I2C write register request + rpc I2CWriteRegister (I2CWriteRegisterParameter) returns (Kinova.Api.Common.Empty); //@RPC_ID=14 +} + +// Identifies InterconnectConfig current version +enum ServiceVersion { + RESERVED_0 = 0; // Reserved + CURRENT_VERSION = 1; // Current version +} + +// Admissible interface module safeties +enum SafetyIdentifier { + UNSPECIFIED_INTERCONNECT_SAFETY_IDENTIFIER = 0; // 0x0 - Unspecified actuator safety + MAXIMUM_MOTOR_CURRENT = 1; // 0x1 - Maximum motor current + MAXIMUM_VOLTAGE = 2; // 0x2 - Maximum voltage + MINIMUM_VOLTAGE = 4; // 0x4 - Minimum voltage + MAXIMUM_MOTOR_TEMPERATURE = 8; // 0x8 - Maximum motor temperature + MAXIMUM_CORE_TEMPERATURE = 16; // 0x10 - Maximum core temperature + NON_VOLATILE_MEMORY_CORRUPTED = 32; // 0x20 - Non-volatile memory corrupted + EMERGENCY_LINE_ASSERTED = 64; // 0x40 - Emergency line asserted + COMMUNICATION_TICK_LOST = 128; // 0x80 - Communication tick lost + WATCHDOG_TRIGGERED = 256; // 0x100 - Watchdog triggered +} + +// Admissible UART port +enum UARTPortId { + UART_PORT_UNSPECIFIED = 0; // Unspecified UART port + UART_PORT_EXPANSION = 1; // UART port located on the expansion connector +} + +// Admissible Ethernet device +enum EthernetDevice { + ETHERNET_DEVICE_UNSPECIFIED = 0; // Unspecified ethernet device + ETHERNET_DEVICE_EXPANSION = 1; // Ethernet port located on the expansion connector +} + +// Ethernet device identification +message EthernetDeviceIdentification { + EthernetDevice device = 1; // Ethernet device +} + +// Admissible Ethernet speed +enum EthernetSpeed { + ETHERNET_SPEED_UNSPECIFIED = 0; // Unspecified ethernet speed + ETHERNET_SPEED_10M = 1; // 10 Mbps + ETHERNET_SPEED_100M = 2; // 100 Mbps +} + +// Admissible Ethernet duplex mode +enum EthernetDuplex { + ETHERNET_DUPLEX_UNSPECIFIED = 0; // Unspecified ethernet duplex + ETHERNET_DUPLEX_HALF = 1; // Half duplex + ETHERNET_DUPLEX_FULL = 2; // Full duplex +} + +// Ethernet configuration information +message EthernetConfiguration { + EthernetDevice device = 1; // Device identification + bool enabled = 2; // True if the ethernet device is enabled, false otherwise + EthernetSpeed speed = 3; // Speed selection + EthernetDuplex duplex = 4; // Duplex mode +} + +// Admissible GPIO identifier +enum GPIOIdentifier { + GPIO_IDENTIFIER_UNSPECIFIED = 0; // Unspecified GPIO identifier + GPIO_IDENTIFIER_1 = 1; // GPIO identifier 1 + GPIO_IDENTIFIER_2 = 2; // GPIO identifier 2 + GPIO_IDENTIFIER_3 = 3; // GPIO identifier 3 + GPIO_IDENTIFIER_4 = 4; // GPIO identifier 4 +} + +// GPIO identification +message GPIOIdentification { + GPIOIdentifier identifier = 1; // GPIO identifier +} + +// Admissible GPIO mode +enum GPIOMode { + GPIO_MODE_UNSPECIFIED = 0; // Unspecified GPIO mode + GPIO_MODE_INPUT_FLOATING = 1; // Input floating + GPIO_MODE_OUTPUT_PUSH_PULL = 2; // Output push-pull + GPIO_MODE_OUTPUT_OPEN_DRAIN = 3; // Output open drain +} + +// Admissible GPIO pull mode +enum GPIOPull { + GPIO_PULL_UNSPECIFIED = 0; // Unspecified GPIO pull + GPIO_PULL_NONE = 1; // Pull none + GPIO_PULL_UP = 2; // Pull up + GPIO_PULL_DOWN = 3; // Pull down +} + +// Admissible GPIO value +enum GPIOValue { + GPIO_VALUE_UNSPECIFIED = 0; // Unspecified GPIO value + GPIO_VALUE_LOW = 1; // Low + GPIO_VALUE_HIGH = 2; // High +} + +// GPIO configuration information +message GPIOConfiguration { + GPIOIdentifier identifier = 1; // GPIO identifier + GPIOMode mode = 2; // Mode + GPIOPull pull = 3; // Pull mode + GPIOValue default_value = 4; // Default value at power on +} + +// GPIO state +message GPIOState { + GPIOIdentifier identifier = 1; // GPIO identifier + GPIOValue value = 2; // Value +} + +// Admissible I2C device +enum I2CDevice { + I2C_DEVICE_UNSPECIFIED = 0; // Unspecified I2C device + I2C_DEVICE_EXPANSION = 1; // I2C device located on the expansion connector +} + +// I2C device identification +message I2CDeviceIdentification { + I2CDevice device = 1; // I2C device +} + +// I2C mode +enum I2CMode { + I2C_MODE_UNSPECIFIED = 0; // Unspecified I2C mode + I2C_MODE_STANDARD = 1; // Standard mode + I2C_MODE_FAST = 2; // Fast mode + I2C_MODE_FAST_PLUS = 3; // Fast plus mode +} + +// I2C device addressing mode +enum I2CDeviceAddressing { + I2C_DEVICE_ADDRESSING_UNSPECIFIED = 0; // Unspecified device addressing + I2C_DEVICE_ADDRESSING_7_BITS = 1; // 7 bits device addressing + I2C_DEVICE_ADDRESSING_10_BITS = 2; // 10 bits device addressing +} + +// I2C register address size +enum I2CRegisterAddressSize { + I2C_REGISTER_ADDRESS_SIZE_UNSPECIFIED = 0; // Unspecified I2C register address size + I2C_REGISTER_ADDRESS_SIZE_8_BITS = 1; // 8 bits register address size + I2C_REGISTER_ADDRESS_SIZE_16_BITS = 2; // 16 bits register address size +} + +// I2C configuration information +message I2CConfiguration { + I2CDevice device = 1; // I2C device identification + bool enabled = 2; // True if I2C device is enabled, false otherwise + I2CMode mode = 3; // Mode + I2CDeviceAddressing addressing = 4; // Addressing mode +} + +// I2C read request +message I2CReadParameter { + I2CDevice device = 1; // I2C device identification + fixed32 device_address = 2; // I2C device address + fixed32 size = 5; // I2C number of bytes to read (max 128 bytes) + fixed32 timeout = 6; // Request timeout in milliseconds +} + +// I2C read register request +message I2CReadRegisterParameter { + I2CDevice device = 1; // I2C device identification + fixed32 device_address = 2; // I2C device address + fixed32 register_address = 3; // I2C register address (8 or 16 bits) + I2CRegisterAddressSize register_address_size = 4; // I2C register address size + fixed32 size = 5; // I2C number of bytes to read (max 128 bytes) + fixed32 timeout = 6; // Request timeout in milliseconds +} + +// I2C write request +message I2CWriteParameter { + I2CDevice device = 1; // I2C device identification + fixed32 device_address = 2; // I2C device address + fixed32 timeout = 5; // Request timeout in milliseconds + I2CData data = 6; // Data to write +} + +// I2C write register request +message I2CWriteRegisterParameter { + I2CDevice device = 1; // I2C device identification + fixed32 device_address = 2; // I2C device address + fixed32 register_address = 3; // I2C register address (8 or 16 bits) + I2CRegisterAddressSize register_address_size = 4; // I2C register address size + fixed32 timeout = 5; // Request timeout in milliseconds + I2CData data = 6; // Data to write +} + +// I2C data +message I2CData { + bytes data = 1; // Data byte(s) array (max 128 bytes) + fixed32 size = 2; // Data byte(s) array size +} diff --git a/kortex_driver/protos/InterconnectCyclic.proto b/kortex_driver/protos/InterconnectCyclic.proto new file mode 100644 index 00000000..aeb68324 --- /dev/null +++ b/kortex_driver/protos/InterconnectCyclic.proto @@ -0,0 +1,41 @@ +/* + * KINOVA (R) KORTEX (TM) + * + * Copyright (c) 2018 Kinova inc. All rights reserved. + * + * This software may be modified and distributed + * under the terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ + +syntax = "proto3"; + +import public "Common.proto"; +import public "InterconnectCyclicMessage.proto"; + +package Kinova.Api.InterconnectCyclic; + +// Service to exchange cyclic data with interface module +service InterconnectCyclic {//@PROXY_ID=15 @ERROR=Kinova.Api.Error + + // Sends a command to the interface module and receive feedback about the actual status + rpc Refresh (Kinova.Api.InterconnectCyclic.Command) returns (Kinova.Api.InterconnectCyclic.Feedback); //@RPC_ID=1 + + // Sends a command to the interface module without receiving feedback + rpc RefreshCommand (Kinova.Api.InterconnectCyclic.Command) returns (Kinova.Api.Common.Empty); //@RPC_ID=2 + + // Obtains feedback from the interface module on its status + rpc RefreshFeedback (Kinova.Api.InterconnectCyclic.MessageId) returns (Kinova.Api.InterconnectCyclic.Feedback); //@RPC_ID=3 + + // Obtains custom data from the interface module + rpc RefreshCustomData (Kinova.Api.InterconnectCyclic.MessageId) returns (Kinova.Api.InterconnectCyclic.CustomData); //@RPC_ID=4 +} + + +// Identifies InterconnectCyclic service current version +enum ServiceVersion { + RESERVED_0 = 0; // Reserved + CURRENT_VERSION = 1; // Current version +} \ No newline at end of file diff --git a/kortex_driver/protos/InterconnectCyclicMessage.proto b/kortex_driver/protos/InterconnectCyclicMessage.proto new file mode 100644 index 00000000..94dc7f39 --- /dev/null +++ b/kortex_driver/protos/InterconnectCyclicMessage.proto @@ -0,0 +1,80 @@ +/* + * KINOVA (R) KORTEX (TM) + * + * Copyright (c) 2018 Kinova inc. All rights reserved. + * + * This software may be modified and distributed + * under the terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ + + syntax = "proto3"; + + import public "Common.proto"; + import public "GripperCyclicMessage.proto"; + + package Kinova.Api.InterconnectCyclic; + + + // Identifies a message + message MessageId { + fixed32 identifier = 1; // Message ID (first 2 bytes : device ID, last 2 bytes : sequence number) + } + + // Interface module command + message Command { + MessageId command_id = 1; // MessageId + fixed32 flags = 2; // Flags + oneof tool_command { + Kinova.Api.GripperCyclic.Command gripper_command = 3; // Gripper command + } + } + + // Defines the feedback provided by interface module + message Feedback { + MessageId feedback_id = 1; // MessageId + fixed32 status_flags = 2; // Status flags + fixed32 jitter_comm = 3; // Jitter from the communication (in microseconds) + float imu_acceleration_x = 4; // IMU Measured acceleration (X-Axis) of the interface module (in meters per second ^ squared) + float imu_acceleration_y = 5; // IMU Measured acceleration (Y-Axis) of the interface module (in meters per second ^ squared) + float imu_acceleration_z = 6; // IMU Measured acceleration (Z-Axis) of the interface module (in meters per second ^ squared) + float imu_angular_velocity_x = 7; // IMU Measured angular velocity (X-Axis) of the interface module (in degrees per second) + float imu_angular_velocity_y = 8; // IMU Measured angular velocity (Y-Axis) of the interface module (in degrees per second) + float imu_angular_velocity_z = 9; // IMU Measured angular velocity (Z-Axis) of the interface module (in degrees per second) + float voltage = 10; // Voltage of the main board (in Volt) + float temperature_core = 11; // Microcontroller temperature (in degrees Celsius) + fixed32 fault_bank_a = 12; // Fault bank A (see InterconnectConfig.SafetyIdentifier) + fixed32 fault_bank_b = 13; // Fault bank B (see InterconnectConfig.SafetyIdentifier) + fixed32 warning_bank_a = 14; // Warning bank A (see InterconnectConfig.SafetyIdentifier) + fixed32 warning_bank_b = 15; // Warning bank B (see InterconnectConfig.SafetyIdentifier) + oneof tool_feedback { + Kinova.Api.GripperCyclic.Feedback gripper_feedback = 18; // Gripper model tool feedback + } + } + + // Custom development data, content varies according to debugging needs + message CustomData { + MessageId custom_data_id = 1; // MessageId + fixed32 custom_data_0 = 2; // Custom data word 0 + fixed32 custom_data_1 = 3; // Custom data word 1 + fixed32 custom_data_2 = 4; // Custom data word 2 + fixed32 custom_data_3 = 5; // Custom data word 3 + fixed32 custom_data_4 = 6; // Custom data word 4 + fixed32 custom_data_5 = 7; // Custom data word 5 + fixed32 custom_data_6 = 8; // Custom data word 6 + fixed32 custom_data_7 = 9; // Custom data word 7 + fixed32 custom_data_8 = 10; // Custom data word 8 + fixed32 custom_data_9 = 11; // Custom data word 9 + fixed32 custom_data_10 = 12; // Custom data word 10 + fixed32 custom_data_11 = 13; // Custom data word 11 + fixed32 custom_data_12 = 14; // Custom data word 12 + fixed32 custom_data_13 = 15; // Custom data word 13 + fixed32 custom_data_14 = 16; // Custom data word 14 + fixed32 custom_data_15 = 17; // Custom data word 15 + oneof tool_customData { + Kinova.Api.GripperCyclic.CustomData gripper_custom_data = 18; + } + } + diff --git a/kortex_driver/protos/ProductConfiguration.proto b/kortex_driver/protos/ProductConfiguration.proto new file mode 100644 index 00000000..37d4ab6a --- /dev/null +++ b/kortex_driver/protos/ProductConfiguration.proto @@ -0,0 +1,124 @@ +/* + * KINOVA (R) KORTEX (TM) + * + * Copyright (c) 2019 Kinova inc. All rights reserved. + * + * This software may be modified and distributed + * under the terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ + +syntax = "proto3"; +package Kinova.Api.ProductConfiguration; + +import public "Common.proto"; + +// Admissible model identification +enum ModelId { + MODEL_ID_UNSPECIFIED = 0; // Unspecified Model identification + MODEL_ID_L53 = 1; // Gen3 Ultra Lightweight Robot + MODEL_ID_L31 = 2; // PICO + MODEL_ID_HDK = 3; // Hardware Development Kit +} + +// Admissible base types +enum BaseType { + BASE_TYPE_UNSPECIFIED = 0; // Unspecified base type + BASE_TYPE_L53_QUICK_CONNECT = 1; // L53 (Gen3) Quick Connect Base + BASE_TYPE_L31_FIXED = 3; // L31 (PICO) Fixed Base + BASE_TYPE_HDK_FIXED = 4; // HDK Fixed Base +} + +// Admissible end-effector modules +enum EndEffectorType { + END_EFFECTOR_TYPE_UNSPECIFIED = 0; // Unspecified end-effector type + END_EFFECTOR_TYPE_NOT_INSTALLED = 1; // No gripper installed + END_EFFECTOR_TYPE_L31_GRIPPER_2F = 2; // L31 (PICO) gripper, 2 fingers + END_EFFECTOR_TYPE_ROBOTIQ_2F_85 = 3; // Robotiq 2F-85 gripper, 2 fingers +} + +// Admissible vision modules +enum VisionModuleType { + VISION_MODULE_TYPE_UNSPECIFIED = 0; // Unspecified vision module type + VISION_MODULE_TYPE_NOT_INSTALLED = 1; // Not Applicable / Not Installed + VISION_MODULE_TYPE_L53_2D3D = 2; // L53 (Gen3) Vision Module + VISION_MODULE_TYPE_L53_2D = 3; // L53 (Gen3) Vision Module without 3D sensor + VISION_MODULE_TYPE_EOD = 4; // EOD Vision Module +} + +// Admissible interface modules +enum InterfaceModuleType { + INTERFACE_MODULE_TYPE_UNSPECIFIED = 0; // Unspecified interface module type + INTERFACE_MODULE_TYPE_NOT_INSTALLED = 1; // Not Applicable / Not Installed + INTERFACE_MODULE_TYPE_L53 = 2; // L53 (Gen3) Interface Module + INTERFACE_MODULE_TYPE_L31 = 3; // L31 (PICO) Interface Module +} + +// Admissible arm laterality +enum ArmLaterality { + ARM_LATERALITY_UNSPECIFIED = 0; // Unspecified arm laterality + ARM_LATERALITY_NOT_APPLICABLE = 1; // Not Applicable + ARM_LATERALITY_LEFT = 2; // Left Laterality + ARM_LATERALITY_RIGHT = 3; // Right Laterality +} + +// Admissible wrist types +enum WristType { + WRIST_TYPE_UNSPECIFIED = 0; // Unspecified wrist type + WRIST_TYPE_NOT_APPLICABLE = 1; // Not Applicable + WRIST_TYPE_SPHERICAL = 2; // Spherical Wrist + WRIST_TYPE_CURVED = 3; // Curved Wrist +} + +// Complete configuration for a given device +message CompleteProductConfiguration { + string kin = 1; // Kinova Identification Number of the device + ModelId model = 2; // Model of the device + Kinova.Api.Common.CountryCode country_code = 3; // Country code for the device + string assembly_plant = 4; // Assembly plant of the device + string model_year = 5; // Year of the model + uint32 degree_of_freedom = 6; // Number of DOF for the device + BaseType base_type = 7; // Type of base for the device + EndEffectorType end_effector_type = 8; // End-effector type of the device + VisionModuleType vision_module_type = 9; // Vision module type of the device + InterfaceModuleType interface_module_type = 10; // Interface module type of the device + ArmLaterality arm_laterality = 11; // Arm laterality of the device + WristType wrist_type = 12; // Wrist type of the device +} + +// New degree of freedom configuration +message ProductConfigurationDegreeOfFreedom { + uint32 degree_of_freedom = 1; // New degree of freedom +} + +// New base type configuration +message ProductConfigurationBaseType { + BaseType base_type = 1; // New base type +} + +// New end-effector installed on arm +message ProductConfigurationEndEffectorType { + EndEffectorType end_effector_type = 1; // New end-effector type +} + +// New vision module installed on arm +message ProductConfigurationVisionModuleType { + VisionModuleType vision_module_type = 1; // New vision module type +} + +// New interface module installed on arm +message ProductConfigurationInterfaceModuleType { + InterfaceModuleType interface_module_type = 1; // New interface module type +} + +// New arm laterality for the arm +message ProductConfigurationLaterality { + ArmLaterality arm_laterality = 1; // New arm laterality +} + +// New wrist type for the arm +message ProductConfigurationWristType { + WristType wrist_type = 1; // New wrist type +} diff --git a/kortex_driver/protos/Session.proto b/kortex_driver/protos/Session.proto new file mode 100644 index 00000000..f5788b2d --- /dev/null +++ b/kortex_driver/protos/Session.proto @@ -0,0 +1,52 @@ +/* + * KINOVA (R) KORTEX (TM) + * + * Copyright (c) 2018 Kinova inc. All rights reserved. + * + * This software may be modified and distributed + * under the terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ + +syntax = "proto3"; + +import public "Common.proto"; + +package Kinova.Api.Session; + +// Service to manage user sessions +service Session {//@PROXY_ID=1 @ERROR=Kinova.Api.Error + + // Creates a new session on the robot using given values for user name, session timeout value, and password + rpc CreateSession (CreateSessionInfo) returns (Kinova.Api.Common.Empty);//@RPC_ID=1 + + // Closes an existing open session + rpc CloseSession (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=2 + + // Sends message to robot to keep current session alive + rpc KeepAlive (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=3 + + // Retrieves the list of connections + rpc GetConnections (Kinova.Api.Common.Empty) returns (ConnectionList);//@RPC_ID=4 +} + +// Identifies session service current version +enum ServiceVersion { + RESERVED_0 = 0; // Reserved + CURRENT_VERSION = 1; // Current version +} + +// Parameters needed to create a new session +message CreateSessionInfo{ + string username = 1; // User name + uint32 session_inactivity_timeout = 2; // Inactivity period (in milliseconds) allowed before the session times out and closes on its own + string password = 3; // Password for the user + uint32 connection_inactivity_timeout = 4; // Inactivity period (in milliseconds) allowed before the robot stops any movements initiated from this session +} + +// Array of connections +message ConnectionList { + repeated Kinova.Api.Common.Connection connection = 1; // Connection +} diff --git a/kortex_driver/protos/VisionConfig.proto b/kortex_driver/protos/VisionConfig.proto new file mode 100644 index 00000000..cc7a7267 --- /dev/null +++ b/kortex_driver/protos/VisionConfig.proto @@ -0,0 +1,282 @@ +/* + * KINOVA (R) KORTEX (TM) + * + * Copyright (c) 2018 Kinova inc. All rights reserved. + * + * This software may be modified and distributed + * under the terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ + +syntax = "proto3"; + +import public "Common.proto"; + +package Kinova.Api.VisionConfig; + +// Service to configure the Vision Module +service VisionConfig {//@PROXY_ID=5 @ERROR=Kinova.Api.Error + + // Sets sensor settings (resolution, frame rate, etc) + rpc SetSensorSettings (SensorSettings) returns (Kinova.Api.Common.Empty);//@RPC_ID=1 + + // Retrieves sensor settings (resolution, frame rate, etc) + rpc GetSensorSettings (SensorIdentifier) returns (SensorSettings);//@RPC_ID=2 + + // Retrieves option value from the sensor + rpc GetOptionValue (OptionIdentifier) returns (OptionValue);//@RPC_ID=3 + + // Writes new value to sensor option + rpc SetOptionValue (OptionValue) returns (Kinova.Api.Common.Empty);//@RPC_ID=4 + + // Retrieves option information from the sensor + rpc GetOptionInformation (OptionIdentifier) returns (OptionInformation);//@RPC_ID=5 + + // Subscribes to Vision configuration notifications + rpc VisionTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=6 @PUB_SUB=VisionNotification + + // Do a focus action + rpc DoSensorFocusAction (SensorFocusAction) returns (Kinova.Api.Common.Empty);//@RPC_ID=7 + + // Retrieves sensor intrinsic parameters + rpc GetIntrinsicParameters (SensorIdentifier) returns (IntrinsicParameters);//@RPC_ID=8 + + // Retrieves sensor intrinsic parameters for a specific profile + rpc GetIntrinsicParametersProfile (IntrinsicProfileIdentifier) returns (IntrinsicParameters);//@RPC_ID=9 + + // Sets sensor intrinsic parameters + rpc SetIntrinsicParameters (IntrinsicParameters) returns (Kinova.Api.Common.Empty);//@RPC_ID=10 + + // Retrieves sensor extrinsic parameters + rpc GetExtrinsicParameters (Kinova.Api.Common.Empty) returns (ExtrinsicParameters);//@RPC_ID=11 + + // Sets sensor extrinsic parameters + rpc SetExtrinsicParameters (ExtrinsicParameters) returns (Kinova.Api.Common.Empty);//@RPC_ID=12 +} + +// Identifies VisionConfig service current version +enum ServiceVersion { + RESERVED_0 = 0; // Reserved + CURRENT_VERSION = 1; // Current version +} + +// Main sensor settings - resolution, frame rate, bit rate - for the chosen sensor (color or depth). +message SensorSettings { + Sensor sensor = 1; // The sensor (color or depth) + Resolution resolution = 2; // The resolution setting + FrameRate frame_rate = 3; // Frame rate setting + BitRate bit_rate = 4; // Maximum encoded bit rate +} + +// Vision module sensor to configure +enum Sensor { + SENSOR_UNSPECIFIED = 0; // Unspecified Sensor + SENSOR_COLOR = 1; // Select the Vision module color sensor + SENSOR_DEPTH = 2; // Select the Vision module depth sensor +} + +// Sensor resolution. Note that some settings are only for the color sensor and some are only for the depth sensor. +enum Resolution { + RESOLUTION_UNSPECIFIED = 0; // Unspecified resolution + RESOLUTION_320x240 = 1; // 320 x 240 pixels (supported on color sensor only) + RESOLUTION_424x240 = 2; // 424 x 240 pixels (supported on depth sensor only) + RESOLUTION_480x270 = 3; // 480 x 270 pixels (supported on depth sensor only) + RESOLUTION_640x480 = 4; // 640 x 480 pixels (supported on color sensor only) + RESOLUTION_1280x720 = 5; // 1280 x 720 pixels (HD) (supported on color sensor only) + RESOLUTION_1920x1080 = 6; // 1920 x 1080 pixels (full HD) (supported on color sensor only) +} + +// Sensor frame rate +enum FrameRate { + FRAMERATE_UNSPECIFIED = 0; // Unspecified frame rate + FRAMERATE_6_FPS = 1; // 6 frames per second (supported on depth sensor only) + FRAMERATE_15_FPS = 2; // 15 frames per second + FRAMERATE_30_FPS = 3; // 30 frame per second +} + +// Maximum encoded bit rate, in Mbps +enum BitRate { + BITRATE_UNSPECIFIED = 0; // Unspecified bit rate (supported on depth sensor only) + BITRATE_10_MBPS = 1; // 10 Mbps maximum bit rate (supported on color sensor only) + BITRATE_15_MBPS = 2; // 15 Mbps maximum bit rate (supported on color sensor only) + BITRATE_20_MBPS = 3; // 20 Mbps maximum bit rate (supported on color sensor only) + BITRATE_25_MBPS = 4; // 25 Mbps maximum bit rate (supported on color sensor only) +} + +// Sensor to configure +message SensorIdentifier { + Sensor sensor = 1; // Sensor +} + +// Intrisic parameters profile to retrieve +message IntrinsicProfileIdentifier { + Sensor sensor = 1; // Sensor + Resolution resolution = 2; // Resolution +} + +// Sensor and the option to configure +message OptionIdentifier { + Sensor sensor = 1; // The sensor to configure + Option option = 2; // The option to configure on the sensor +} + +// Value of the particular option for the sensor +message OptionValue { + Sensor sensor = 1; // The sensor to configure (color or depth) + Option option = 2; // The option to configure + float value = 3; // The desired value for the option +} + +// Information about the optional settings for the chosen sensor +message OptionInformation { + Sensor sensor = 1; // The sensor (color or depth) + Option option = 2; // The option + bool supported = 3; // Is the option supported by the chosen sensor? + bool read_only = 4; // Is the option read-only, or can it be changed? + float minimum = 5; // Minimum value for the option + float maximum = 6; // Maximum value for the option + float step = 7; // Step size for the option value (if it takes on discrete values) + float default_value = 8; // Default value for the option +} + +// Admissible vision module sensor options. Note that some options are only available for the color sensor and some are only available for the depth sensor. +enum Option { + OPTION_UNSPECIFIED = 0; // Unspecifed Option + OPTION_BACKLIGHT_COMPENSATION = 1; // Enable / disable color backlight compensation (unsupported) + OPTION_BRIGHTNESS = 2; // Color image brightness (supported on color sensor only: -4.0 to 4.0, step 1.0) + OPTION_CONTRAST = 3; // Color image contrast (supported on color sensor only: -4.0 to 4.0, step 1.0) + OPTION_EXPOSURE = 4; // Controls exposure time of color camera. Setting any value will disable auto exposure (supported on depth sensor only: 20.0 to 166000.0, step 20.0) + OPTION_GAIN = 5; // Color image gain (supported on depth sensor only: 16.0 to 248.0, step 1.0) + OPTION_GAMMA = 6; // Color image gamma setting (unsupported) + OPTION_HUE = 7; // Color image hue (unsupported) + OPTION_SATURATION = 8; // Color image saturation setting (supported on color sensor only: -4.0 to 4.0, step 1.0) + OPTION_SHARPNESS = 9; // Color image sharpness setting (unsupported) + OPTION_WHITE_BALANCE = 10; // Controls white balance of color image. Setting any value will disable auto white balance (unsupported) + OPTION_ENABLE_AUTO_EXPOSURE = 11; // Enable / disable color image auto-exposure (supported on depth sensor only: 0.0 to 1.0, step 1.0) + OPTION_ENABLE_AUTO_WHITE_BALANCE = 12; // Enable / disable color image auto-white-balance (unsupported) + OPTION_VISUAL_PRESET = 13; // Provide access to several recommend sets of option presets for the depth camera (supported on depth sensor only: 0.0 to 5.0, step 1.0) + OPTION_LASER_POWER = 14; // Power of the projector, with 0 meaning projector off (unsupported) + OPTION_ACCURACY = 15; // Sets the number of patterns projected per frame. The higher the accuracy value the more patterns projected (unsupported) + OPTION_MOTION_RANGE = 16; // Motion vs. Range trade-off, with lower values allowing for better motion sensitivity and higher values allowing for better depth range (unsupported) + OPTION_FILTER_OPTION = 17; // Sets the filter to apply to each depth frame. Each one of the filter is optimized per the application requirements (unsupported) + OPTION_CONFIDENCE_THRESHOLD = 18; // The confidence level threshold used by the Depth algorithm pipe to set whether a pixel will get a valid range or will be marked with invalid range (unsupported) + OPTION_EMITTER_ENABLED = 19; // Laser Emitter enabled (unsupported) + OPTION_FRAMES_QUEUE_SIZE = 20; // Number of frames the user is allowed to keep per stream. Trying to hold-on to more frames will cause frame-drops (supported on depth sensor only: 0.0 to 32.0, step 1.0) + OPTION_TOTAL_FRAME_DROPS = 21; // Total number of detected frame drops from all streams (unsupported) + OPTION_AUTO_EXPOSURE_MODE = 22; // Auto-Exposure modes: Static, Anti-Flicker and Hybrid (unsupported) + OPTION_POWER_LINE_FREQUENCY = 23; // Power Line Frequency control for anti-flickering Off/50Hz/60Hz/Auto (unsupported) + OPTION_ASIC_TEMPERATURE = 24; // Current Asic Temperature (supported on depth sensor only: Read Only -40.0 to 125.0) + OPTION_ERROR_POLLING_ENABLED = 25; // Disable error handling (supported on depth sensor only: 0.0 to 1.0, step 1.0) + OPTION_PROJECTOR_TEMPERATURE = 26; // Current Projector Temperature (unsupported) + OPTION_OUTPUT_TRIGGER_ENABLED = 27; // Enable / disable trigger to be outputed from the camera to any external device on every depth frame (supported on depth sensor only: 0.0 to 1.0, step 1.0) + OPTION_MOTION_MODULE_TEMPERATURE = 28; // Current Motion-Module Temperature (unsupported) + OPTION_DEPTH_UNITS = 29; // Number of meters represented by a single depth unit (supported on depth sensor only: 0.0001 to 0.0100, step 0.000001) + OPTION_ENABLE_MOTION_CORRECTION = 30; // Enable/Disable automatic correction of the motion data (unsupported) + OPTION_AUTO_EXPOSURE_PRIORITY = 31; // Allows sensor to dynamically ajust the frame rate depending on lighting conditions (unsupported) + OPTION_COLOR_SCHEME = 32; // Color scheme for data visualization (unsupported) + OPTION_HISTOGRAM_EQUALIZATION_ENABLED = 33; // Perform histogram equalization post-processing on the depth data (unsupported) + OPTION_MIN_DISTANCE = 34; // Minimal distance to the target (unsupported) + OPTION_MAX_DISTANCE = 35; // Maximum distance to the target (unsupported) + OPTION_TEXTURE_SOURCE = 36; // Texture mapping stream unique ID (unsupported) + OPTION_FILTER_MAGNITUDE = 37; // The 2D-filter effect. The specific interpretation is given within the context of the filter (unsupported) + OPTION_FILTER_SMOOTH_ALPHA = 38; // 2D-filter parameter controls the weight/radius for smoothing (unsupported) + OPTION_FILTER_SMOOTH_DELTA = 39; // 2D-filter range/validity threshold (unsupported) + OPTION_HOLES_FILL = 40; // Enhance depth data post-processing with holes filling where appropriate (unsupported) + OPTION_STEREO_BASELINE = 41; // The distance in mm between the first and the second imagers in stereo-based depth cameras (supported on depth sensor only: 55.241055 to 55.241055, step 0.0) + OPTION_AUTO_EXPOSURE_CONVERGE_STEP = 42; // Allows dynamically ajust the converge step value of the target exposure in Auto-Exposure algorithm (unsupported) +} + +// Focus action to perform for the specified sensor +message SensorFocusAction { + Sensor sensor = 1; // The sensor on which to perform the focus action + FocusAction focus_action = 2; // The focus action to perform on the sensor + oneof action_parameters { + FocusPoint focus_point = 3; // The X-Y point on which to focus + ManualFocus manual_focus = 4; // The manual focus abstract value + } +} + +// Focus action to perform (start/pause continuous, focus now, disable). Supported only with Color sensor. +enum FocusAction { + FOCUSACTION_UNSPECIFIED = 0; // Unspecified focus action + FOCUSACTION_START_CONTINUOUS_FOCUS = 1; // Start continuous focus + FOCUSACTION_PAUSE_CONTINUOUS_FOCUS = 2; // Pause continuous focus + FOCUSACTION_FOCUS_NOW = 3; // Focus now (single-shot) + FOCUSACTION_DISABLE_FOCUS = 4; // Disable focus + FOCUSACTION_SET_FOCUS_POINT = 5; // Set a focus point + FOCUSACTION_SET_MANUAL_FOCUS = 6; // Set the manual focus distance +} + +// Focus point in the X-Y coordinates of the image +message FocusPoint { + uint32 x = 1; // Pixel value on the X axis, between 0 and the current resolution width - 1 + uint32 y = 2; // Pixel value on the Y axis, between 0 and the current resolution height - 1 +} + +// Abstract value that affects the focus distance +message ManualFocus { + uint32 value = 1; // Abstract value allowing to change the focus distance, between 0 (infinity) and 1023 (close plane) +} + +// Admissible Vision module events. +enum VisionEvent { + UNSPECIFIED_VISION_EVENT = 0; // Unspecified vision event + SENSOR_SETTINGS_CHANGED = 1; // Sensor setting changed event + OPTION_VALUE_CHANGED = 2; // Option value changed event +} + +// Notification about a single vision module event +message VisionNotification { + VisionEvent event = 1; // Vision event + Sensor sensor = 2; // The sensor that caused the notification (if applicable) + Option option = 3; // The option that caused the notification (if applicable) +} + +// Sensor intrinsic parameters +message IntrinsicParameters { + Sensor sensor = 1; // The sensor for which the parameters apply to + Resolution resolution = 2; // The resolution for which the parameters apply to + float principal_point_x = 3; // Horizontal coordinate of the principal point of the image, as a pixel offset from the left edge + float principal_point_y = 4; // Vertical coordinate of the principal point of the image, as a pixel offset from the top edge + float focal_length_x = 5; // Focal length of the image plane, as a multiple of pixel width + float focal_length_y = 6; // Focal length of the image plane, as a multiple of pixel height + DistortionCoefficients distortion_coeffs = 7; // Distortion coefficients +} + +// Distortion coefficients for sensor intrinsic parameters +message DistortionCoefficients { + float k1 = 1; // First radial distortion coefficient + float k2 = 2; // Second radial distortion coefficient + float k3 = 3; // Third radial distortion coefficient + float p1 = 4; // First tangential distortion coefficient + float p2 = 5; // Second tangential distortion coefficient +} + +// Sensor extrinsic parameters +message ExtrinsicParameters { + RotationMatrix rotation = 1; // The rotation matrix from depth sensor reference frame to color sensor reference frame + TranslationVector translation = 2; // The translation vector from depth sensor reference frame to color sensor reference frame +} + +// Representation of a 3x3 rotation matrix. To be a valid rotation matrix, the rows must be orthonormal (the rows must each have norm of 1 and the row vectors must be orthogonal to each other). The determinant must also be +1. +message RotationMatrix { + RotationMatrixRow row1 = 1; // First rotation matrix row + RotationMatrixRow row2 = 2; // Second rotation matrix row + RotationMatrixRow row3 = 3; // Third rotation matrix row +} + +// Single row of a 3x3 rotation matrix. To be a valid possible row of a rotation matrix, the norm of the row must be 1 (the sum of the squares of the row elements has to equal 1). +message RotationMatrixRow { + float column1 = 1; // Value between -1.0 and 1.0 + float column2 = 2; // Value between -1.0 and 1.0 + float column3 = 3; // Value between -1.0 and 1.0 +} + +// Provides a 3x1 translation vector configuration +message TranslationVector { + float t_x = 1; // Translation in meters in the x axis + float t_y = 2; // Translation in meters in the y axis + float t_z = 3; // Translation in meters in the z axis +} diff --git a/kortex_driver/readme.md b/kortex_driver/readme.md index 09717a4e..3981c68d 100644 --- a/kortex_driver/readme.md +++ b/kortex_driver/readme.md @@ -12,16 +12,23 @@ # Kortex Driver -## Overview -This node allows communication between a node and a Gen3 robot. Use this package if you want to: +# **Note:** There have been many changes made between versions 1.1.7 and 2.0.0 of the ROS driver. You can view the changes and learn the steps to follow to adapt your code in [this section](#compatibility). + + +## Table of contents + +1. [Overview](#overview) +1. [Usage](#usage) +1. [Topics](#topics) +1. [Services](#services) +1. [Compatibility break between v1.1.X and v2.0.X](#compatibility) +1. [Generation (advanced)](#generation) -* Change basic configuration of the robot. -* Move the robot in the Cartesian space. -* Move the robot in the joint space. -* Activate the admittance mode. -* Move the robot using the **LOW\_LEVEL**\ (1 kHz\) control mode. -* Move the robot using the **LOW\_LEVEL\_BYPASS**\ mode. -* Access the cyclic data sporadically. + + + +## Overview +This node allows communication between a ROS node and a Kinova Gen3 Ultra lightweight robot. ### License @@ -33,252 +40,140 @@ Maintainer: Kinova inc. support@kinovarobotics.com** This package has been tested under ROS Kinetic and Ubuntu 16.04. -## Installation + +## Usage + +The `kortex_driver` node is the node responsible for the communication between the ROS network and the Kortex-compatible Kinova robots. It publishes topics that users can subscribe to. It also advertises services that users can call from the command line or from their own code to configure or control the robot arm or its sub-devices (actuators, vision module, interface module). -### Building from Source +**Arguments**: +- **arm** : Name of your robot arm model. See the `kortex_description/arms` folder to see the available robot models. The default value is **gen3**. +- **gripper** : Name of your robot arm's tool / gripper. See the `kortex_description/grippers` folder to see the available end effector models (or to add your own). The default value is **""** and the only other supported option is **robotiq_2f_85** for now. +- **robot_name** : This is the namespace in which the driver will run. It defaults to **my_$(arg arm)** (so "my_gen3" for arm="gen3"). +- **ip_address** : The IP address of the robot you're connecting to. The default value is **192.168.1.10**. +- **cyclic_data_publish_rate** : Publish rate of the *base_feedback* and *joint_state* topics, in Hz. The default value is **100** Hz. +- **api_rpc_timeout_ms** : The default X-axis position of the robot in Gazebo. The default value is **0.0**. +- **api_session_inactivity_timeout_ms** : The duration after which the robot will clean the client session if the client hangs up the connection brutally (should not happen with the ROS driver). The default value is **35000** ms and is not normally changed. +- **api_connection_inactivity_timeout_ms** : The duration after which a connection is destroyed by the robot if no communication is detected between the client and the robot. The default value is **20000** ms and is not normally changed. +- **start_rviz** : If this argument is true, RViz will be launched. The default value is **true**. +- **start_moveit** : If this argument is true, a MoveIt! MoveGroup will be launched for the robot. The default value is **true**. -#### Dependencies +- **default_goal_time_tolerance** : The default goal time tolerance for the `FollowJointTrajectory` action server, in seconds. This value is used if no default goal time tolerance is specified in the trajectory. The default value is **0.5** seconds. +- **default_goal_tolerance** : The default goal tolerance for the `FollowJointTrajectory` action server, in degrees. This value is used if no default goal tolerance is specified in the trajectory for the joint positions reached at the end of the trajectory. The default value is **0.5** degrees. -- [Robot Operating System (ROS)](http://wiki.ros.org) (middleware for robotics), -- [Protobuf](https://developers.google.com/protocol-buffers/) +To launch it with default arguments, run the following command in a terminal : -```cpp -git clone https://github.com/protocolbuffers/protobuf --branch 3.5.1.1 (you must use this specific version) -``` -Follow these [instructions](https://github.com/protocolbuffers/protobuf/blob/master/src/README.md) to build and install protobuf and its compiler. +`roslaunch kortex_driver kortex_driver.launch` -#### Building +To launch it with optional arguments, specify the argument name, then ":=", then the value you want. For example, : -To build from source, clone the latest version from this repository into your catkin workspace and compile the package using +`roslaunch kortex_driver kortex_driver.launch ip_address:=10.0.100.239 start_rviz:=false robot_name:=terminator` - cd catkin_workspace/src - git clone https://github.com/Kinovarobotics/ros_kortex.git - cd ../ - sudo ./src/ros_kortex/build.sh +You can also have a look at the [roslaunch documentation](http://wiki.ros.org/roslaunch/Commandline%20Tools) for more details. -## Usage +If everything goes well, you will see a "**The Kortex driver has been initialized correctly!**" message. If you also start MoveIt!, the `kortex_driver` output may be flooded in the `move_group` output, so pay attention to the warning and error messages! If the node fails to start for any reason, you will get an error message followed by a "**process has died**" message. -### Launch file -The launch file for this node can be found in the [kortex_bringup](../kortex_bringup/readme.md) package. + +## Topics +### Robot feedback topics -### Starting with rosrun +The robot feedback topics are always published by the `kortex_driver`. You don't have to activate them. -rosrun kortex\_driver kortex\_driver 192.168.1.10 100 +* **`/your_robot_name/kortex_error`** -In the command above, you would be running the kortex_driver node on an Gen3 robot with IP address 192.168.1.10. The cyclic data would be refreshed at 100 Hz. + Every Kortex error will be published here. You can see the message description [here](msg/non_generated/KortexError.msg). +* **`/your_robot_name/base_feedback`** + The feedback from the robot is published on this topic at a rate of **cyclic_data_publish_rate**. You can see the message description [here](msg/generated/base_cyclic/BaseCyclic_Feedback.msg). -## Nodes +* **`/your_robot_name/joint_state`** -### Published Topics + The feedback from the robot is converted to a [sensor_msgs/JointState](http://docs.ros.org/kinetic/api/sensor_msgs/html/msg/JointState.html) and published on this topic at a rate of **cyclic_data_publish_rate**. -* **`/KortexError`** -

Every Kortex error will be published here.

- - | Type | Name | Description | - |:---:|:---:|:---:| - | uint32 | code | Error code, see enum in the ErrorCodes class. | - | uint32 | subcode | Sub error code, see enum in the ErrorCodes class. | - | string | description | Error details | - -* **`/ConfigurationChangeTopic`** -

Notification received when a configuration item change.

- - | Type | Name | Description | - |:---:|:---:|:---:| - | uint32 | event | Event type, see [ConfigurationNotificationEvent.msg](https://github.com/Kinovarobotics/ros_kortex/blob/master/kortex_driver/msg/ConfigurationNotificationEvent.msg). | - | Timestamp | timestamp | Event timestamp. | - | UserProfileHandle | user_handle | User that caused the configuration change event. | - | Connection | connection | Connection that caused the configuration change event. | +### Notification topics -* **`/MappingInfoTopic`** -

Notification received when a controller changes its active map.

- - | Type | Name | Description | - |:---:|:---:|:---:| - | uint32 | controller_identifier | Identifier of the controller, see [ConfigurationNotificationEvent.msg](https://github.com/Kinovarobotics/ros_kortex/blob/master/kortex_driver/msg/ControllerType.msg). | - | MapHandle | active_map_handle | A handle to the new active map. | - | Timestamp | timestamp | Event timestamp. | - | UserProfileHandle | user_handle | User that caused the mapping event. | - | Connection | connection | Connection that caused the mapping event. | - -* **`/ControlModeTopic`** -

Notification received when the control mode has been changed.

- - | Type | Name | Description | - |:---:|:---:|:---:| - | uint32 | control_mode | New control mode, see [ControlMode.msg](https://github.com/Kinovarobotics/ros_kortex/blob/master/kortex_driver/msg/ControlMode.msg). | - | Timestamp | timestamp | Event timestamp. | - | UserProfileHandle | user_handle | User that caused the control mode event. | - | Connection | connection | Connection that caused the control mode event. | - -* **`/OperatingModeTopic`** -

Notification received when the operating mode is changed.

- - | Type | Name | Description | - |:---:|:---:|:---:| - | uint32 | operating_mode | New operating mode, see [OperatingMode.msg](https://github.com/Kinovarobotics/ros_kortex/blob/master/kortex_driver/msg/OperatingMode.msg). | - | Timestamp | timestamp | Event timestamp. | - | UserProfileHandle | user_handle | User that caused the operating mode event. | - | Connection | connection | Connection that caused the operating mode event. | - | DeviceHandle | device_handle | Device matching operating mode (if applicable). | - -* **`/SequenceInfoTopic`** -

Notification received when an event occured during a sequence.

- - | Type | Name | Description | - |:---:|:---:|:---:| - | uint32 | event_identifier | New operating mode, see [EventIdSequenceInfoNotification.msg](https://github.com/Kinovarobotics/ros_kortex/blob/master/kortex_driver/msg/ControllerType.msg). | - | SequenceHandle | sequence_handle | Handle of the sequence that this event refers to. | - | uint32 | task_index | Task index. | - | uint32 | group_identifier | Specifies the order in which this task must be executed. | - | Timestamp | timestamp | Event timestamp. | - | UserProfileHandle | user_handle | User that caused the sequence event. | - | uint32 | abort_details | Details if event_identifier is equal to ABORT. | - | Connection | connection | Connection that caused the sequence event. | - -* **`/ProtectionZoneTopic`** -

Notification received when a protection zone event occured.

- - | Type | Name | Description | - |:---:|:---:|:---:| - | uint32 | operating_mode | New operating mode, see [ProtectionZoneEvent.msg](https://github.com/Kinovarobotics/kortex/blob/master/api_cpp/doc/markdown/references/enm_Base_ProtectionZoneEvent.md#). | - | Timestamp | timestamp | Event timestamp. | - | UserProfileHandle | user_handle | User that caused the protection zone event. | - | Connection | connection | Connection that caused the protection zone event. | - -* **`/ControllerTopic`** -

Notification received when a controller event occured.

- - | Type | Name | Description | - |:---:|:---:|:---:| - | Timestamp | timestamp | Event timestamp. | - | UserProfileHandle | user_handle | User that caused the controller event. | - | Connection | connection | Connection that caused the controller event. | - -* **`/ActionTopic`** -

Notification received when an action event occured.

- - | Type | Name | Description | - |:---:|:---:|:---:| - | uint32 | action_event | New operating mode, see [ActionEvent.msg](https://github.com/Kinovarobotics/kortex/blob/master/api_cpp/doc/markdown/references/enm_Base_ActionEvent.md#). | - | ActionHandle | handle | Identifies the action for which this event occured. | - | Timestamp | timestamp | Event timestamp. | - | UserProfileHandle | user_handle | User that caused the action event. | - | uint32 | abort_details | Details if event_identifier is equal to ABORT. | - | Connection | connection | Connection that caused the action event. | - -* **`/RobotEventTopic`** -

Notification received when an robot event occured.

- - | Type | Name | Description | - |:---:|:---:|:---:| - | uint32 | event | Robot event type, see [RobotEvent.msg](https://github.com/Kinovarobotics/kortex/blob/master/api_cpp/doc/markdown/references/enm_Base_RobotEvent.md#). | - | DeviceHandle | handle | Identifier of the hardware device connected or disconnected. | - | Timestamp | timestamp | Event timestamp. | - | UserProfileHandle | user_handle | User that caused the robot event. | - | Connection | connection | Connection that caused the robot event. | - -* **`/ServoingModeTopic`** -

Notification received when an servoing mode event occured.

- - | Type | Name | Description | - |:---:|:---:|:---:| - | uint32 | servoing_mode | New servoing mode, see [RobotEvent.msg](https://github.com/Kinovarobotics/kortex/blob/master/api_cpp/doc/markdown/references/enm_Base_ServoingMode.md#). | - | Timestamp | timestamp | Event timestamp. | - | UserProfileHandle | user_handle | User that caused the servoing mode event. | - | Connection | connection | Connection that caused the servoing mode event. | - -* **`/FactoryTopic`** -

Notification received when an factory event occured.

- - | Type | Name | Description | - |:---:|:---:|:---:| - | uint32 | event | Factory event type, see [RobotEvent.msg](https://github.com/Kinovarobotics/kortex/blob/master/api_cpp/doc/markdown/references/enm_Base_FactoryEvent.md#). | - | Timestamp | timestamp | Event timestamp. | - | UserProfileHandle | user_handle | User that caused the factory event. | - | Connection | connection | Connection that caused the factory event. | - -* **`/NetworkTopic`** -

Notification received when an network event occured.

- - | Type | Name | Description | - |:---:|:---:|:---:| - | uint32 | event | Network event type, see [RobotEvent.msg](https://github.com/Kinovarobotics/kortex/blob/master/api_cpp/doc/markdown/references/enm_Base_NetworkEvent.md#). | - | Timestamp | timestamp | Event timestamp. | - | UserProfileHandle | user_handle | User that caused the network event. | - | Connection | connection | Connection that caused the network event. | - -* **`/ArmStateTopic`** - -

Notification received when an armstate event occured.

- - | Type | Name | Description | - |:---:|:---:|:---:| - | uint32 | active_state | New arm state, see [ArmState.msg](https://github.com/Kinovarobotics/kortex/blob/master/api_cpp/doc/markdown/references/enm_Common_ArmState.md#). | - | Timestamp | timestamp | Event timestamp. | - | Connection | connection | Connection that caused the network event. | - -### Services +The notification topics are only published by the `kortex_driver` if you activate them by first calling an activation service. Once activated, a notification topic will be activated until the node is shutdown. + +Subscribing to all the notifications causes a heavy load on the robot CPU. That is why the notification topics were designed in such a way. The users also typically only use one or two notifications, if at all. + +For example, if a user wants to subscribe to the **/my_robot_name/network_topic** (the message type is [NetworkNotification](msg/generated/base/NetworkNotification.msg)), he will have to: +1. Call the **/my_robot_name/base/activate_publishing_of_network_notification** service to enable the publishing of the topic +2. Subscribe to the **/my_robot_name/network_topic** topic +3. Process the notifications when he receives them in his code + + +## Services Most of the services supported by this node are generated from the [C++ Kortex API](https://github.com/Kinovarobotics/kortex). You can find the documentation [here](https://github.com/Kinovarobotics/kortex/blob/master/api_cpp/doc/markdown/index.md). -Example: -If you want to call the ROS service **`GetActuatorCount`** that has been generated by the C++ method [GetActuatorCount](https://github.com/Kinovarobotics/kortex/blob/master/api_cpp/doc/markdown/references/summary_Base.md), you would initialize your service like this: +### Understanding packages - ros::ServiceClient client_GetActuatorCount = n.serviceClient("GetActuatorCount"); +The *.srv* files are generated in different sub-folders depending on the sub-module they affect. For example, all the RPC calls used to configure the vision module are generated in `srv/generated/vision_config` and all the RPC calls common to all devices are generated in `srv/generated/device_config`. Here is a list of the packages with a short explanation of the services they have to offer: -#### Non-generated -* **`SetApiOptions`** -

Modifies the Kortex API options. Once this service is called, the options set will affect every future call to the node.

+* **actuator_config** : This package contains the functions used to configure a single actuator. +**Note:** To choose the actuator you want to configure, you have to call the **/my_robot_name/actuator_config/set_device_id** service and specify the device identifier of the actuator you want to configure. You get the device identifiers of actuators when you launch the node, when you parse the output of the [ReadAllDevices](srv/generated/device_manager/ReadAllDevices.srv) service or in the Kinova Kortex *Web App*. -* **`SetDeviceID`** -

Modifies the target device (device routing feature) of the node. The default value is 0.

+* **base** : This package contains : + * Services to read and update the configuration of the robot + * Services to send high level commands to the robot + * Services to read and update the Product Configuration + * Services to activate the publishing of notifications + * Services to read and update the user-related information +**Note:** The base high level commands are treated every 25 ms inside the robot. High level control cannot be achieved at a rate faster than 40 Hz for now. -### Messages -Most of the messages supported by this node are generated from the [ C++ Kortex API](https://github.com/Kinovarobotics/kortex). You can find the documentation [here](https://github.com/Kinovarobotics/kortex/blob/master/api_cpp/doc/markdown/index.md). +* **control_config** : This package contains the functions used to configure the control-related features on the robot. This includes : + * Reading and setting the cartesian reference frame + * Reading and setting the gravity vector + * Reading and setting the payload information + * Reading and setting the tool configuration -#### Non-generated -* **`ApiOptions`** -

Represents all the option that you can set on the Kortex API.

+* **device_config** : This package contains the functions used to configure a generic Kortex device. This includes : + * Reading and setting safety configurations + * Reading general information on the specified device (software versions, serial numbers, MAC address, IPv4 settings, etc.) +**Note:** To choose the device you want to configure, you have to call the **/my_robot_name/device_config/set_device_id** service and specify the device identifier of the device you want to configure. You get the device identifiers when you launch the node, when you parse the output of the [ReadAllDevices](srv/generated/device_manager/ReadAllDevices.srv) service or in the WebApp. -* **`KortexError`** -

Represents a Kortex API error.

+* **device_manager** : This package contains [ReadAllDevices](srv/generated/device_manager/ReadAllDevices.srv) service, which is used to get the list of connected device and various informations on each device. -### Protos files -The **protos** directory contains the protobuf files from where the MSG, SRV and source files are generated. The content of this folder should not be modified. +* **interconnect_config** : This package contains the functions used to configure the interface module on the robot. +**Note:** You don't have to call the `SetDeviceID` service before calling the **interconnect_config** services, because the `kortex_driver` node goes through the list of connected devices and automatically sets the correct device ID for the **interconnect_config** services. -### Template files -The **templates** directory contains all the JINJA2 files needed by the protoc generator. For more details on the generation process, see the **Generation** section. - -| Filename | Description | -|:---:|:---:| -| main.jinja2 | Used to generate src/main.cpp | -| NodeServices.cpp.jinja2 | Used to generate src/node.cpp | -| NodeServices.h.jinja2 | Used to generate src/node.h | -| proto_converterCPP.jinja2 | Used to generate every src/*_proto\_converter.cpp file | -| proto_converterHeader.jinja2 | Used to generate every src/*_proto\_converter.h file | -| ros_converterCPP.jinja2 | Used to generate every src/*_ros\_converter.cpp file | -| ros_converterHeader.jinja2 | Used to generate every src/*_proto\_converter.h file | -| ros_enum.jinja2 | Used to generate every msg/*.msg files that represent a protobuf enum | -| ros_message.jinja2 | Used to generate every msg/*.msg files that represent a protobuf message | -| ros_oneof.jinja2 | Used to generate every msg/*.msg files that represent a protobuf oneof | -| ros_service.jinja2 | Used to generate every msg/*.msg files that represent a protobuf RPC | - -## Generation -

-The generation process is based on a custom protoc plugin. Basically, most of the generation process is in the RosGeneration.py file located in the package root directory. Before launching the generation ensure that you have the Python JINJA2 module installed. -

+* **vision_config** : This package contains the functions used to configure the vision module on the robot. +**Note:** You don't have to call the SetDeviceID service before calling the **vision_config** services, because the kortex_driver node goes through the list of connected devices and automatically sets the correct device ID for the **vision_config** services. + + +## Compatibility break between v1.1.7 and v2.0.0 + +Many things have been changed in the ros_kortex repository between versions 1.1.7 and 2.0.0 and you will have to modify your code if you don't want it to break. + +* The `kortex_actuator_driver`, `kortex_vision_config_driver` and `kortex_device_manager` packages were removed and only the `kortex_driver` package remains. +* Since we only have one driver and the ROS message generation does not deal with namespaces, the messages and services that are duplicated are now named differently. For example, the **Feedback** message exists within the `BaseCyclic`, `ActuatorCyclic`, `InterconnectCyclic` and `GripperCyclic` Protocol Buffers .proto files. In ROS, this is now translated as a "PackageName_" prefix before the message name. So, for the **Feedback** message, the **BaseCyclic_Feedback**, **ActuatorCyclic_Feedback**, **InterconnectCyclic_Feedback** and **GripperCyclic_Feedback** ROS messages have been automatically generated. You may encounter build errors (in C++) or runtime errors (in Python) because of this change. You can just go in the `msg/generated` folder and look for the problematic message to find its new name to change the occurrences in your code. +* The services are now all **lowercase_with_underscores** instead of **UpperCase**. +* The services are now advertised in **/my_robot_name/my_package_name/desired_service** (see the [Services section](#services) to learn about the packages). You can also visualize it if you start the node and type `rosservice list` in a terminal. +* The topics are now all **lowercase_with_underscores** instead of **UpperCase**. +* The **/my_robot_name/base_feedback/joint_state** topic is now advertised as **/my_robot_name/joint_state**. +* The [kortex_driver launch file](launch/kortex_driver.launch) is now located in the `kortex_driver` package instead of the `kortex_bringup` package, which was deleted. Some arguments were added to the file. + + +## Generation (**advanced**) + +Some source code as well as most of the .MSG and .SRV files in this package are automatically generated, but the generated files are given on GitHub so that users don't have to generate them. However, if you have a special version of the Kortex API and want to generate those files yourself, it is possible. You will first need to follow the instructions to install Protocol Buffers. + +The generation process is based on a custom `protoc` plugin. Basically, most of the generation process is in the [scripts/ros_kortex_generator.py](scripts/ros_kortex_generator.py). Before launching the generation ensure that you have the Python JINJA2 module installed. To launch the generation of this package: 1. Open a terminal window. -1. Browse to the root directory of this package [YOUR\_ROS\_WORKSPACE]/src/ros\_kortex/kortex\_driver/ -1. Ensure that the kortex_driver.sh file can be executed. If not then run: chmod +x kortex_driver.sh -1. Run the command: protoc --plugin=protoc-gen-custom=kortex_driver.sh -I./protos/ --custom_out=./build ./protos/\*.prot -1. The result of the generation should be in the following folders: - * /src - * /msg - * /srv +2. Browse the /scripts directory of this package +3. Ensure that the generate_protobuf_wrapper_files.sh file can be executed. If not then run: chmod +x generate_protobuf_wrapper_files.sh +4. Run the command: ./generate_protobuf_wrapper_files.sh +5. The result of the generation should be in the following folders: + * `/include/kortex_driver/generated` + * `/msg/generated` + * `/src/generated` + * `/srv/generated` +### Protos files +The **protos** directory contains the Protobuf files from which the MSG, SRV and source files are generated. The content of this folder should not be modified. + +### Template files +The **templates** directory contains all the JINJA2 files needed by the `protoc` generator. diff --git a/kortex_driver/scripts/generate_protobuf_wrapper_files.sh b/kortex_driver/scripts/generate_protobuf_wrapper_files.sh new file mode 100755 index 00000000..4ef56cb1 --- /dev/null +++ b/kortex_driver/scripts/generate_protobuf_wrapper_files.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +export PYTHONUNBUFFERED=1 +mkdir build +protoc --plugin=protoc-gen-custom=ros_kortex_generator.py -I../protos/ --custom_out=./build ../protos/*.proto +rm -rf build diff --git a/kortex_driver/scripts/ros_kortex_generator.py b/kortex_driver/scripts/ros_kortex_generator.py new file mode 100755 index 00000000..6e7b9050 --- /dev/null +++ b/kortex_driver/scripts/ros_kortex_generator.py @@ -0,0 +1,556 @@ +#!/usr/bin/env python3 +### +# KINOVA (R) KORTEX (TM) +# +# Copyright (c) 2019 Kinova inc. All rights reserved. +# +# This software may be modified and distributed +# under the terms of the BSD 3-Clause license. +# +# Refer to the LICENSE file for details. +# +### + +import sys + +from google.protobuf.compiler import plugin_pb2 as plugin +from google.protobuf import json_format as json_f + +import jinja2 + +import itertools +import json +import types +import os +import shutil +import sys +import re + +from enum import Enum +from collections import OrderedDict + +from google.protobuf.descriptor_pb2 import DescriptorProto, EnumDescriptorProto, ServiceDescriptorProto, FieldDescriptorProto, OneofDescriptorProto +from google.protobuf.descriptor import FieldDescriptor +# Some names cause generation bugs and we have to hardcode them in here +# Reboot in Base.proto auto-generates the RebootRequest and RebootResponse classes, but RebootResponse RPC already exists in DeviceConfig.proto +# Refresh* RPCs have to be called at exactly 1kHz and ROS 1 cannot achieve this so they are removed +# RPCs for internal use have also been removed from the ROS driver +FORBIDDEN_RPC_METHODS = ["Reboot", \ + "Refresh", "RefreshCommand", "RefreshCustomData", "RefreshFeedback", \ + "ReadTorqueCalibration", "WriteTorqueCalibration", "GetVectorDriveParameters", "SetVectorDriveParameters", "GetEncoderDerivativeParameters", "SetEncoderDerivativeParameters", "StartFrequencyResponse", "StopFrequencyResponse", "StartStepResponse", "StopStepResponse", "StartRampResponse", "StopRampResponse", \ + "ReadCapSenseRegister", "WriteCapSenseRegister"] + +# There are some packages we don't want to generate because the use of their RPC's as ROS services doesn't make sense at all and could cause some undefined behaviour +NON_GENERATED_PACKAGES = ["Session"] + +class DetailedOneOf: + ''' + Class that holds a one_of and the fields in the one_of + + Attributes : + - name: Name of the one_of [string] + - fields: Protobuf FieldDescriptor's that are in the one_of [list of FieldDescriptorProto] + - duplicated_fields: Names of the fields that are duplicated in the generation context (ex. Feedback) [list of strings] + + Usage : Create the DetailedOneOf with its name, then use the addField() method to populate the fields list (automatically populates the duplicated_fields list) + ''' + def __init__(self, one_of_name = ""): + ''' + Constructor for the DetailedOneOf + + Arguments: + - one_of_name: Name of the one_of [string] + ''' + self.name = one_of_name + self.fields = [] + self.duplicated_fields = [] + + def addField(self, field, is_field_duplicated): + ''' + Adds a field to the one_of + + Arguments: + - field: Field to add [FieldDescriptor] + - is_field_duplicated: True if the field_type is duplicated in the generation context (ex. Feedback) [bool] + + Returns: None + ''' + self.fields.append(field) + if is_field_duplicated: + self.duplicated_fields.append(field.type_name.split(".")[-1]) + +class DetailedMessage: + ''' + Class that holds a message or an enum (all but a ServiceDescriptorProto) + + Attributes: + - name: Name of the message or enum [string] + - name_lowercase_with_underscores: Name of the message in lowercase with underscores (following the ROS convention) [string] + - message: Protobuf Descriptor [DescriptorProto] + - cpp_namespace: Full C++ namespace for the message (ex. Kinova::Api::Common) [string] + - full_proto_package_name: Full name of the Protobuf package with point delimiters (ex. Kinova.Api.Common) [string] + - duplicated_fields: Names of the fields that are duplicated in the generation context (ex. Feedback) [list of strings] + - containing_folder: Name of the subfolder in which the msg file will be generated, determined with the C++ namespace (ex. "ActuatorCyclic/"). If the namespace is Kinova::Api, then subfolder is equal to an empty string. [string] + - prepend_message_name: If the message is duplicated in the generation context, this attribute is in the form of "ActuatorCyclic_". This is prepended to the message name to ensure there is no naming clash during the ROS message generation. [string] + - one_of_list: List of DetailedOneOf's present in the message fields. [list of DetailedOneOf] + + Usage: Create the DetailedMessage, then use the addDetailedOneOf() method to populate the one_of_list attribute + ''' + def __init__(self, message, package, is_message_duplicated, duplicatedFields=[]): + ''' + Constructor for the DetailedMessage + + Arguments: + - message: Protobuf object for the message [DescriptorProto] + - package: Full name of the message's package (ex. "Kinova.Api.Common") [string] + - is_message_duplicated: True if the message type is duplicated in the generation context (ex. Feedback) [bool] + - duplicated_fields: Names of the fields that are duplicated in the generation context (ex. Feedback) (empty by default) [list of strings] + ''' + self.name = message.name + self.name_lowercase_with_underscores = '_'.join(re.findall('[A-Z][^A-Z]*', self.name)).lower() + self.message = message + + self.cpp_namespace = package.replace(".", "::") + self.full_proto_package_name = package + + # Some fields's type may be duplicated messages + self.duplicated_fields = [] + for df in duplicatedFields: + self.duplicated_fields.append(df.type_name.split(".")[-1]) + + # Sub-folder in which messages are generated + # Corresponds to the Protobuf Service they relate to + # Those without a service (Frame, Errors) are generated directly in /msg + self.containing_folder = "_".join(re.findall('[A-Z][^A-Z]*', package.split(".")[-1])).lower() + "/" + if self.containing_folder == "api/": + self.containing_folder = "" + + # If it is a duplicated message, we prepend it with the Protobuf Service name (because ROS messages don't handle C++ namespaces) + if is_message_duplicated: + self.prepend_message_name = package.split(".")[-1] + "_" + else: + self.prepend_message_name = "" + + # List of all the DetailedOneof's in the message + self.one_of_list = [] + + # Method to add the DetailedOneOf's in the DetailedMessage + def addDetailedOneOf(self, one_of): + ''' + Adds a DetailedOneOf to the message's one_of_list + + Arguments: + - one_of: One_of to add to the message [DetailedOneOf] + + Returns: None + ''' + self.one_of_list.append(one_of) + + def isEnum(self): + ''' + Returns True if the message is an enum (Protobuf message is of type EnumDescriptorProto) + + Arguments: None + + Returns: Boolean + ''' + return isinstance(self.message, EnumDescriptorProto) + +# Class that holds a protobuf service and some other details needed by the generator(Jinja2 template) +class DetailedPackage: + ''' + Class that holds a Protobuf package + + Attributes: + - name: Name of the package delimited with points (ex. "Kinova.Api.Common") [string] + - short_name: Short name of the package (ex. "Common" for "Kinova.Api.Common") [string] + - short_name_lowercase_with_underscores: Short name of the package in lowercase with underscores (following the ROS convention) [string] + - cpp_namespace: Full C++ namespace for the package (ex. Kinova::Api::Common) [string] + - messages: List of messages in the package [list of DetailedMessage] + - methods: List of RPC methods in the package [list of DetailedRPC] + - enums: List of enums in the package [list of DetailedMessage] + + Usage: Create the DetailedPackage, then add the messages, enums and RPC's with the corresponding methods. + ''' + def __init__(self, package): + ''' + Constructor for the DetailedPackage + + Arguments: + - package: Full name of the message's package (ex. "Kinova.Api.Common") [string] + ''' + self.name = package + self.short_name = self.name.split(".")[-1] + self.short_name_lowercase_with_underscores = '_'.join(re.findall('[A-Z][^A-Z]*', self.short_name)).lower() + self.cpp_namespace = self.name.replace(".", "::") + self.messages = [] # list of DetailedMessage + self.methods = [] # list of DetailedRPC + self.enums = [] # list of DetailedMessage + + def addMessage(self, detailed_message): + ''' + Adds a message to the package's messages list + + Arguments: + - detailed_message: Message to add to the package [DetailedMessage] + + Returns: None + ''' + self.messages.append(detailed_message) + + def addRPC(self, detailed_rpc): + ''' + Adds a RPC to the package's methods list + + Arguments: + - detailed_rpc: RPC to add to the package [DetailedRPC] + + Returns: None + ''' + self.methods.append(detailed_rpc) + + def addEnum(self, detailed_enum): + ''' + Adds an enum to the package's enums list + + Arguments: + - detailed_enum: Enum to add to the package [DetailedMessage] + + Returns: None + ''' + self.enums.append(detailed_enum) + +class DetailedRPC: + ''' + Class that holds a Protobuf RPC + + Attributes: + - name: Name of the RPC [string] + - name_lowercase_with_underscores: Name of the RPC in lowercase with underscores (following the ROS convention) [string] + - rpc: Protobuf object for the RPC [ServiceDescriptorProto] + - cpp_namespace: Full C++ namespace for the RPC (ex. Kinova::Api::BaseCyclic) [string] + - full_proto_package_name: Full name of the Protobuf package with point delimiters (ex. Kinova.Api.Common) [string] + - is_rpc_duplicated: True if the message type is duplicated in the generation context (ex. Feedback) [bool] + - prepend_rpc_package_name: If the RPC is duplicated in the generation context, this string will be populated with the RPC package's short name (ex. "BaseCyclic_" for Feedback RPC). Empty otherwise. [string] + + - is_input_type_duplicated: True if the input type of the RPC is duplicated in the generation context [bool] + - ros_service_input_name: Type of the ROS service input, modified according to the is_input_type_duplicated parameter [string] + - input_type_short_name: Short name of the input (ex. "Command" for "Kinova.Api.BaseCyclic.Command") [string] + - input_type_cpp_namespace: Full C++ namespace for the RPC (ex. Kinova::Api::BaseCyclic) [string] + + - is_output_type_duplicated: True if the output type of the RPC is duplicated in the generation context [bool] + - ros_service_output_name: Type of the ROS service output, modified according to the is_output_type_duplicated parameter [string] + - output_type_short_name: Short name of the output (ex. "Feedback" for "Kinova.Api.BaseCyclic.Feedback") [string] + - output_type_cpp_namespace: Full C++ namespace for the RPC (ex. Kinova::Api::BaseCyclic) [string] + + - is_notification_rpc: True if the RPC is a Notification RPC (ends with "Topic") + - prepend_on_notification: If the RPC is a Notification RPC, is put to "OnNotification". Otherwise, it is empty [string] + - notification_message_cpp_namespace: Full C++ namespace of the message that corresponds to the Notification RPC ("SafetyNotification" for the RPC "SafetyTopic") [string] + ''' + def __init__(self, rpc, package, is_rpc_duplicated, is_input_type_duplicated, is_output_type_duplicated, notification_message=None): + ''' + Constructor for the DetailedRPC + + Arguments: + - rpc: Protobuf object for the RPC [ServiceDescriptorProto] + - package: Full name of the message's package (ex. "Kinova.Api.Common") [string] + - is_rpc_duplicated: True if the message type is duplicated in the generation context (ex. Feedback) [bool] + - is_input_type_duplicated: True if the input type of the RPC is duplicated in the generation context [bool] + - is_output_type_duplicated: True if the output type of the RPC is duplicated in the generation context [bool] + - notification_message: Protobuf object for the Notification message that corresponds to the Notification RPC (optional) [DescrptorProto] + ''' + self.name = rpc.name + self.name_lowercase_with_underscores = '_'.join(re.findall('[A-Z][^A-Z]*', self.name)).lower() + self.rpc = rpc + + self.cpp_namespace = package.replace(".", "::") + self.full_proto_package_name = package + + # If it is a duplicated RPC, we prepend it with the Protobuf Service name (because ROS services don't handle C++ namespaces) + if is_rpc_duplicated: + self.prepend_rpc_package_name = package.split(".")[-1] + "_" + else: + self.prepend_rpc_package_name = "" + + # Helper variables for input and output types + if is_input_type_duplicated: + self.ros_service_input_name = rpc.input_type.split(".")[-2] + "_" + rpc.input_type.split(".")[-1] + else: + self.ros_service_input_name = rpc.input_type.split(".")[-1] + + + self.input_type_short_name = rpc.input_type.split(".")[-1] + self.input_type_cpp_namespace = "::".join(rpc.input_type.split(".")[:-1])[2:] + + if is_output_type_duplicated: + self.ros_service_output_name = rpc.output_type.split(".")[-2] + "_" + rpc.output_type.split(".")[-1] + else: + self.ros_service_output_name = rpc.output_type.split(".")[-1] + + self.output_type_short_name = rpc.output_type.split(".")[-1] + self.output_type_cpp_namespace = "::".join(rpc.output_type.split(".")[:-1])[2:] + + # Notifications have the word 'Topic' at the end of the RPC name + self.is_notification_rpc = re.match(r"\w+Topic", rpc.name) + if self.is_notification_rpc: + self.prepend_on_notification = "OnNotification" + self.notification_message_cpp_namespace = notification_message[0].cpp_namespace + else: + self.prepend_on_notification = "" + self.notification_message_cpp_namespace = "" + +# Jinja2 function to render a file from a template +def render(tpl_path, context): + path, filename = os.path.split(tpl_path) + return jinja2.Environment(loader=jinja2.FileSystemLoader(path or './')).get_template(filename).render(**context) + +# Main plugin function +def generate_code(request, response): + + # MainFilePath = os.path.join(".", "src/main.cpp") + # Find all proto files + file_map = OrderedDict() + for proto_file in request.proto_file: + file_map[proto_file.name] = proto_file + + # Create an ordered dictionary for all Protobuf packages + packages_dict = OrderedDict() + + # Find the *Notification messages to add them to a list + notification_messages_list = [] + + # Find Messages and RPC's that have the same name within the proto files because ROS doesn't handle namespaces + messages_unordered_set = set() + rpcs_unordered_set = set() + duplicated_messages_unordered_set = set() + duplicated_rpcs_unordered_set = set() + for filename, proto_file in file_map.items(): + for item, package in traverse(proto_file): + + # Skip the packages we don't want to generate + if package.split(".")[-1] in NON_GENERATED_PACKAGES: + continue + + packages_dict[package] = DetailedPackage(package) + # If the item is a message or an enum + if not isinstance(item, ServiceDescriptorProto): + if item.name not in messages_unordered_set: + messages_unordered_set.add(item.name) + # Add the notifications to a list to match them to their respective RPCs later (because there package may differ from the RPC's) + if re.match(r"\w+Notification", item.name): + notification_messages_list.append(DetailedMessage(item, package, False)) + else: + duplicated_messages_unordered_set.add(item.name) + # If the item is a Protobuf service (a collection of methods) + else: + for method in item.method: + if method.name not in rpcs_unordered_set: + rpcs_unordered_set.add(method.name) + else: + duplicated_rpcs_unordered_set.add(method.name) + + # Remove old generated files and create new directories + for package in packages_dict.values(): + for s in ['srv', 'msg']: + try: + shutil.rmtree("../{}/generated/{}".format(s, package.short_name_lowercase_with_underscores)) + except: + pass + os.mkdir("../{}/generated/{}".format(s, package.short_name_lowercase_with_underscores)) + shutil.rmtree("../src/generated") + shutil.rmtree("../include/kortex_driver/generated") + os.mkdir("../src/generated") + os.mkdir("../include/kortex_driver/generated") + + ########################################### + # Parse the proto files to add the messages and RPC's to the DetailedPackage's + for filename, proto_file in file_map.items(): + + # For every item in the current proto file + for item, package in traverse(proto_file): + + # Skip the packages we don't want to generate + if package.split(".")[-1] in NON_GENERATED_PACKAGES: + continue + + current_package = packages_dict[package] + + # If this is an enum + if isinstance(item, EnumDescriptorProto): + is_enum_duplicated = item.name in duplicated_messages_unordered_set + current_package.addEnum(DetailedMessage(item, package, is_enum_duplicated)) + + # If this is a message + if isinstance(item, DescriptorProto): + is_message_duplicated = item.name in duplicated_messages_unordered_set + duplicated_fields = filter(lambda x : x.type_name.split(".")[-1] in duplicated_messages_unordered_set, item.field) + temp_message = DetailedMessage(item, package, is_message_duplicated, duplicated_fields) + # Find if the message contains oneof + message_contains_one_of = False + for member in item.field: + # If a member is part of a one_of, it will have this additional field. + if member.HasField("oneof_index"): + message_contains_one_of = True + break + + # Register every one_of in the message + if message_contains_one_of: + + # Find the one_of names + for one_of in item.ListFields()[-1][1]: # This is the very obscure way to get the one_of's name + temp_message.one_of_list.append(DetailedOneOf(one_of.name)) + + # Find the fields and what one_of they belong to + for member in item.field: + # If a member is part of a one_of, add it to the DetailedOneOf it belongs to + if member.HasField("oneof_index"): + is_field_duplicated = member.type_name.split(".")[-1] in duplicated_messages_unordered_set + temp_message.one_of_list[member.oneof_index].addField(member, is_field_duplicated) + + current_package.addMessage(temp_message) + + # If this is a Protobuf service (a group of RPC's) + if isinstance(item, ServiceDescriptorProto): + # Register every RPC in the Protobuf service + for rpc in item.method: + # Do not generate the services that cause generation bugs + if rpc.name in FORBIDDEN_RPC_METHODS: + continue + is_rpc_duplicated = rpc.name in duplicated_rpcs_unordered_set + is_input_type_duplicated = rpc.input_type.split(".")[-1] in duplicated_messages_unordered_set + is_output_type_duplicated = rpc.output_type.split(".")[-1] in duplicated_messages_unordered_set + notification_message = list(filter(lambda x: x.name == rpc.name.replace("Topic", "Notification") , notification_messages_list)) + + temp_rpc = DetailedRPC(rpc, package, is_rpc_duplicated, is_input_type_duplicated, is_output_type_duplicated, notification_message) + current_package.addRPC(temp_rpc) + + ########################################### + # Generate the include names with the packages that contain messages + packages_with_messages = filter(lambda x: len(x.messages) > 0 , packages_dict.values()) + include_file_names = [] + for p in packages_with_messages: + for s in ["proto", "ros"]: + include_file_names.append("kortex_driver/generated/{}_{}_converter.h".format(p.short_name.lower(), s)) + + # Generate the ROS files for each package + for package in packages_dict.values(): + + # Generate the enums + for enum in package.enums: + this_enum_context = types.SimpleNamespace() + this_enum_context.item = enum + ros_enum_path = os.path.join("..", "msg/generated/{}{}{}.msg".format(enum.containing_folder, enum.prepend_message_name, enum.name)) + with open(ros_enum_path, 'wt') as serviceFile: + serviceFile.write(render("../templates/ros_enum.msg.jinja2", this_enum_context.__dict__)) + + # Generate the messages + for message in package.messages: + this_message_context = types.SimpleNamespace() + this_message_context.item = message + this_message_context.field_descriptor_class = FieldDescriptor + + # Generate the one_of's for the message + for detailed_one_of in message.one_of_list: # not empty + this_message_context.detailed_one_of = detailed_one_of + ros_oneofPath = os.path.join("..", "msg/generated/{}{}{}_{}.msg".format(message.containing_folder, message.prepend_message_name, message.name, detailed_one_of.name)) + with open(ros_oneofPath, 'wt') as serviceFile: + serviceFile.write(render("../templates/ros_oneof.msg.jinja2", this_message_context.__dict__)) + + # Generate the message + ros_messagePath = os.path.join("..", "msg/generated/{}{}{}.msg".format(message.containing_folder, message.prepend_message_name, message.name)) + with open(ros_messagePath, 'wt') as serviceFile: + serviceFile.write(render("../templates/ros_message.msg.jinja2", this_message_context.__dict__)) + + # Generate the RPC's + for rpc in package.methods: + this_rpc_context = types.SimpleNamespace() + this_rpc_context.item = rpc + ros_servicePath = os.path.join("..", "srv/generated/{}/{}{}{}.srv".format(package.short_name_lowercase_with_underscores, rpc.prepend_rpc_package_name, rpc.prepend_on_notification, rpc.name)) + with open(ros_servicePath, 'wt') as serviceFile: + serviceFile.write(render("../templates/ros_service.srv.jinja2", this_rpc_context.__dict__)) + + # Generate the Proto-ROS converters (C++ files) + this_package_context = types.SimpleNamespace() + this_package_context.package = package + + if package.messages: # package contains at least one message + # Proto converter header file + current_header_filename = "kortex_driver/generated/{}_proto_converter.h".format(package.short_name.lower()) + this_package_context.include_file_names = filter(lambda x : "proto_converter" in x and x != current_header_filename, include_file_names) + with open(os.path.join("..", "include/" + current_header_filename), 'wt') as converterFile: + converterFile.write(render("../templates/proto_converter.h.jinja2", this_package_context.__dict__)) + # Proto converter cpp file + this_package_context.current_header_filename = current_header_filename + with open(os.path.join("..", "src/generated/{}_proto_converter.cpp".format(package.short_name.lower())), 'wt') as converterFile: + converterFile.write(render("../templates/proto_converter.cpp.jinja2", this_package_context.__dict__)) + # ROS converter header file + current_header_filename = "kortex_driver/generated/{}_ros_converter.h".format(package.short_name.lower()) + this_package_context.include_file_names = filter(lambda x : "ros_converter" in x and x != current_header_filename, include_file_names) + with open(os.path.join("..", "include/" + current_header_filename), 'wt') as converterFile: + converterFile.write(render("../templates/ros_converter.h.jinja2", this_package_context.__dict__)) + # ROS converter cpp file + this_package_context.current_header_filename = current_header_filename + with open(os.path.join("..", "src/generated/{}_ros_converter.cpp".format(package.short_name.lower())), 'wt') as converterFile: + converterFile.write(render("../templates/ros_converter.cpp.jinja2", this_package_context.__dict__)) + + # Generate the ServiceProxy's for every Kortex API method + if package.methods: # package contains at least one RPC + current_header_filename = "kortex_driver/generated/{}_services.h".format(package.short_name.lower()) + this_package_context.current_header_filename = current_header_filename + this_package_context.include_file_names = include_file_names + with open(os.path.join("..", "include/" + current_header_filename), 'wt') as services_file: + services_file.write(render("../templates/services.h.jinja2", this_package_context.__dict__)) + with open(os.path.join("..", "src/generated/{}_services.cpp".format(package.short_name.lower())), 'wt') as services_file: + services_file.write(render("../templates/services.cpp.jinja2", this_package_context.__dict__)) + + # Delete unused folders we created for None + for package in packages_dict.values(): + for s in ['srv', 'msg']: + if len(os.listdir('../{}/generated/{}'.format(s, package.short_name_lowercase_with_underscores))) == 0: + shutil.rmtree("../{}/generated/{}".format(s, package.short_name_lowercase_with_underscores)) + +def traverse(proto_file): + # recursive function that browses a protobof item + def _traverse(package, items): + for item in items: + yield item, package + + if isinstance(item, DescriptorProto): + for enum in item.enum_type: + yield enum, package + + for nested in item.nested_type: + nested_package = package + item.name + + for nested_item in _traverse(nested, nested_package): + yield nested_item, nested_package + if isinstance(item, ServiceDescriptorProto): + for rpc in item.method: + yield rpc, package + + # returns a list of everything found in the proto file + return itertools.chain( + _traverse(proto_file.package, proto_file.enum_type), + _traverse(proto_file.package, proto_file.message_type), + _traverse(proto_file.package, proto_file.service), + ) + +if __name__ == '__main__': + # reads request message from stdin + data = sys.stdin.buffer.read() + + # parses request + request = plugin.CodeGeneratorRequest() + request.ParseFromString(data) + + # creates response + response = plugin.CodeGeneratorResponse() + + # generates code + generate_code(request, response) + + # serialises response message + output = response.SerializeToString() + + # writes to stdout + sys.stdout.buffer.write(output) \ No newline at end of file diff --git a/kortex_driver/src/base_proto_converter.cpp b/kortex_driver/src/base_proto_converter.cpp deleted file mode 100644 index 72e2448d..00000000 --- a/kortex_driver/src/base_proto_converter.cpp +++ /dev/null @@ -1,1233 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "base_proto_converter.h" - -#include "common_proto_converter.h" - - -int ToProtoData(kortex_driver::FullUserProfile input, FullUserProfile *output) -{ - ToProtoData(input.user_profile, output->mutable_user_profile()); - output->set_password(input.password); - - return 0; -} -int ToProtoData(kortex_driver::UserProfile input, UserProfile *output) -{ - ToProtoData(input.handle, output->mutable_handle()); - output->set_username(input.username); - output->set_firstname(input.firstname); - output->set_lastname(input.lastname); - output->set_application_data(input.application_data); - - return 0; -} -int ToProtoData(kortex_driver::UserProfileList input, UserProfileList *output) -{ - output->clear_user_profiles(); - for(int i = 0; i < input.user_profiles.size(); i++) - { - ToProtoData(input.user_profiles[i], output->add_user_profiles()); - } - - return 0; -} -int ToProtoData(kortex_driver::UserList input, UserList *output) -{ - output->clear_user_handles(); - for(int i = 0; i < input.user_handles.size(); i++) - { - ToProtoData(input.user_handles[i], output->add_user_handles()); - } - - return 0; -} -int ToProtoData(kortex_driver::PasswordChange input, PasswordChange *output) -{ - ToProtoData(input.handle, output->mutable_handle()); - output->set_old_password(input.old_password); - output->set_new_password(input.new_password); - - return 0; -} -int ToProtoData(kortex_driver::SequenceHandle input, SequenceHandle *output) -{ - output->set_identifier(input.identifier); - output->set_permission(input.permission); - - return 0; -} -int ToProtoData(kortex_driver::AdvancedSequenceHandle input, AdvancedSequenceHandle *output) -{ - ToProtoData(input.handle, output->mutable_handle()); - output->set_in_loop(input.in_loop); - - return 0; -} -int ToProtoData(kortex_driver::SequenceTaskHandle input, SequenceTaskHandle *output) -{ - ToProtoData(input.sequence_handle, output->mutable_sequence_handle()); - output->set_task_index(input.task_index); - - return 0; -} -int ToProtoData(kortex_driver::SequenceTask input, SequenceTask *output) -{ - output->set_group_identifier(input.group_identifier); - ToProtoData(input.action, output->mutable_action()); - output->set_application_data(input.application_data); - - return 0; -} -int ToProtoData(kortex_driver::Sequence input, Sequence *output) -{ - ToProtoData(input.handle, output->mutable_handle()); - output->set_name(input.name); - output->set_application_data(input.application_data); - output->clear_tasks(); - for(int i = 0; i < input.tasks.size(); i++) - { - ToProtoData(input.tasks[i], output->add_tasks()); - } - - return 0; -} -int ToProtoData(kortex_driver::SequenceList input, SequenceList *output) -{ - output->clear_sequence_list(); - for(int i = 0; i < input.sequence_list.size(); i++) - { - ToProtoData(input.sequence_list[i], output->add_sequence_list()); - } - - return 0; -} -int ToProtoData(kortex_driver::AppendActionInformation input, AppendActionInformation *output) -{ - ToProtoData(input.sequence_handle, output->mutable_sequence_handle()); - ToProtoData(input.action, output->mutable_action()); - - return 0; -} -int ToProtoData(kortex_driver::ActionHandle input, ActionHandle *output) -{ - output->set_identifier(input.identifier); - output->set_action_type((Kinova::Api::Base::ActionType)input.action_type); - output->set_permission(input.permission); - - return 0; -} -int ToProtoData(kortex_driver::RequestedActionType input, RequestedActionType *output) -{ - output->set_action_type((Kinova::Api::Base::ActionType)input.action_type); - - return 0; -} -int ToProtoData(kortex_driver::Action input, Action *output) -{ - ToProtoData(input.handle, output->mutable_handle()); - output->set_name(input.name); - output->set_application_data(input.application_data); - - if(input.oneof_action_parameters.send_twist_command.size() > 0) - { - ToProtoData(input.oneof_action_parameters.send_twist_command[0], output->mutable_send_twist_command()); - } - if(input.oneof_action_parameters.send_joint_speeds.size() > 0) - { - ToProtoData(input.oneof_action_parameters.send_joint_speeds[0], output->mutable_send_joint_speeds()); - } - if(input.oneof_action_parameters.reach_pose.size() > 0) - { - ToProtoData(input.oneof_action_parameters.reach_pose[0], output->mutable_reach_pose()); - } - if(input.oneof_action_parameters.reach_joint_angles.size() > 0) - { - ToProtoData(input.oneof_action_parameters.reach_joint_angles[0], output->mutable_reach_joint_angles()); - } - if(input.oneof_action_parameters.toggle_admittance_mode.size() > 0) - { - output->set_toggle_admittance_mode((AdmittanceMode)input.oneof_action_parameters.toggle_admittance_mode[0]); - } - if(input.oneof_action_parameters.switch_control_mapping.size() > 0) - { - ToProtoData(input.oneof_action_parameters.switch_control_mapping[0], output->mutable_switch_control_mapping()); - } - if(input.oneof_action_parameters.navigate_joints.size() > 0) - { - output->set_navigate_joints((JointNavigationDirection)input.oneof_action_parameters.navigate_joints[0]); - } - if(input.oneof_action_parameters.navigate_mappings.size() > 0) - { - output->set_navigate_mappings((NavigationDirection)input.oneof_action_parameters.navigate_mappings[0]); - } - if(input.oneof_action_parameters.change_twist.size() > 0) - { - ToProtoData(input.oneof_action_parameters.change_twist[0], output->mutable_change_twist()); - } - if(input.oneof_action_parameters.change_joint_speeds.size() > 0) - { - ToProtoData(input.oneof_action_parameters.change_joint_speeds[0], output->mutable_change_joint_speeds()); - } - if(input.oneof_action_parameters.apply_emergency_stop.size() > 0) - { - ToProtoData(input.oneof_action_parameters.apply_emergency_stop[0], output->mutable_apply_emergency_stop()); - } - if(input.oneof_action_parameters.clear_faults.size() > 0) - { - ToProtoData(input.oneof_action_parameters.clear_faults[0], output->mutable_clear_faults()); - } - if(input.oneof_action_parameters.delay.size() > 0) - { - ToProtoData(input.oneof_action_parameters.delay[0], output->mutable_delay()); - } - if(input.oneof_action_parameters.execute_action.size() > 0) - { - ToProtoData(input.oneof_action_parameters.execute_action[0], output->mutable_execute_action()); - } - if(input.oneof_action_parameters.send_gripper_command.size() > 0) - { - ToProtoData(input.oneof_action_parameters.send_gripper_command[0], output->mutable_send_gripper_command()); - } - if(input.oneof_action_parameters.stop_action.size() > 0) - { - ToProtoData(input.oneof_action_parameters.stop_action[0], output->mutable_stop_action()); - } - - - return 0; -} -int ToProtoData(kortex_driver::SwitchControlMapping input, SwitchControlMapping *output) -{ - output->set_controller_identifier(input.controller_identifier); - ToProtoData(input.map_group_handle, output->mutable_map_group_handle()); - ToProtoData(input.map_handle, output->mutable_map_handle()); - - return 0; -} -int ToProtoData(kortex_driver::ChangeTwist input, ChangeTwist *output) -{ - output->set_linear(input.linear); - output->set_angular(input.angular); - - return 0; -} -int ToProtoData(kortex_driver::ChangeJointSpeeds input, ChangeJointSpeeds *output) -{ - ToProtoData(input.joint_speeds, output->mutable_joint_speeds()); - - return 0; -} -int ToProtoData(kortex_driver::EmergencyStop input, EmergencyStop *output) -{ - - return 0; -} -int ToProtoData(kortex_driver::Faults input, Faults *output) -{ - - return 0; -} -int ToProtoData(kortex_driver::Delay input, Delay *output) -{ - output->set_duration(input.duration); - - return 0; -} -int ToProtoData(kortex_driver::Stop input, Stop *output) -{ - - return 0; -} -int ToProtoData(kortex_driver::ActionList input, ActionList *output) -{ - output->clear_action_list(); - for(int i = 0; i < input.action_list.size(); i++) - { - ToProtoData(input.action_list[i], output->add_action_list()); - } - - return 0; -} -int ToProtoData(kortex_driver::Timeout input, Timeout *output) -{ - output->set_value(input.value); - - return 0; -} -int ToProtoData(kortex_driver::Ssid input, Ssid *output) -{ - output->set_identifier(input.identifier); - - return 0; -} -int ToProtoData(kortex_driver::CommunicationInterfaceConfiguration input, CommunicationInterfaceConfiguration *output) -{ - output->set_type((Kinova::Api::Base::NetworkType)input.type); - output->set_enable(input.enable); - - return 0; -} -int ToProtoData(kortex_driver::NetworkHandle input, NetworkHandle *output) -{ - output->set_type((Kinova::Api::Base::NetworkType)input.type); - - return 0; -} -int ToProtoData(kortex_driver::IPv4Configuration input, IPv4Configuration *output) -{ - output->set_ip_address(input.ip_address); - output->set_subnet_mask(input.subnet_mask); - output->set_default_gateway(input.default_gateway); - output->set_dhcp_enabled(input.dhcp_enabled); - - return 0; -} -int ToProtoData(kortex_driver::IPv4Information input, IPv4Information *output) -{ - output->set_ip_address(input.ip_address); - output->set_subnet_mask(input.subnet_mask); - output->set_default_gateway(input.default_gateway); - - return 0; -} -int ToProtoData(kortex_driver::FullIPv4Configuration input, FullIPv4Configuration *output) -{ - ToProtoData(input.handle, output->mutable_handle()); - ToProtoData(input.ipv4_configuration, output->mutable_ipv4_configuration()); - - return 0; -} -int ToProtoData(kortex_driver::WifiInformation input, WifiInformation *output) -{ - ToProtoData(input.ssid, output->mutable_ssid()); - output->set_security_type(input.security_type); - output->set_encryption_type(input.encryption_type); - output->set_signal_quality((Kinova::Api::Base::SignalQuality)input.signal_quality); - output->set_signal_strength(input.signal_strength); - output->set_frequency(input.frequency); - output->set_channel(input.channel); - - return 0; -} -int ToProtoData(kortex_driver::WifiInformationList input, WifiInformationList *output) -{ - output->clear_wifi_information_list(); - for(int i = 0; i < input.wifi_information_list.size(); i++) - { - ToProtoData(input.wifi_information_list[i], output->add_wifi_information_list()); - } - - return 0; -} -int ToProtoData(kortex_driver::WifiConfiguration input, WifiConfiguration *output) -{ - ToProtoData(input.ssid, output->mutable_ssid()); - output->set_security_key(input.security_key); - output->set_connect_automatically(input.connect_automatically); - - return 0; -} -int ToProtoData(kortex_driver::WifiConfigurationList input, WifiConfigurationList *output) -{ - output->clear_wifi_configuration_list(); - for(int i = 0; i < input.wifi_configuration_list.size(); i++) - { - ToProtoData(input.wifi_configuration_list[i], output->add_wifi_configuration_list()); - } - - return 0; -} -int ToProtoData(kortex_driver::ProtectionZoneHandle input, ProtectionZoneHandle *output) -{ - output->set_identifier(input.identifier); - output->set_permission(input.permission); - - return 0; -} -int ToProtoData(kortex_driver::RotationMatrixRow input, RotationMatrixRow *output) -{ - output->set_column1(input.column1); - output->set_column2(input.column2); - output->set_column3(input.column3); - - return 0; -} -int ToProtoData(kortex_driver::RotationMatrix input, RotationMatrix *output) -{ - ToProtoData(input.row1, output->mutable_row1()); - ToProtoData(input.row2, output->mutable_row2()); - ToProtoData(input.row3, output->mutable_row3()); - - return 0; -} -int ToProtoData(kortex_driver::Point input, Point *output) -{ - output->set_x(input.x); - output->set_y(input.y); - output->set_z(input.z); - - return 0; -} -int ToProtoData(kortex_driver::ZoneShape input, ZoneShape *output) -{ - output->set_shape_type((Kinova::Api::Base::ShapeType)input.shape_type); - ToProtoData(input.origin, output->mutable_origin()); - ToProtoData(input.orientation, output->mutable_orientation()); - output->clear_dimensions(); - for(int i = 0; i < input.dimensions.size(); i++) - { - output->add_dimensions(input.dimensions[i]); - } - - output->set_envelope_thickness(input.envelope_thickness); - - return 0; -} -int ToProtoData(kortex_driver::ProtectionZone input, ProtectionZone *output) -{ - ToProtoData(input.handle, output->mutable_handle()); - output->set_name(input.name); - output->set_application_data(input.application_data); - output->set_is_enabled(input.is_enabled); - ToProtoData(input.shape, output->mutable_shape()); - output->clear_limitations(); - for(int i = 0; i < input.limitations.size(); i++) - { - ToProtoData(input.limitations[i], output->add_limitations()); - } - output->clear_envelope_limitations(); - for(int i = 0; i < input.envelope_limitations.size(); i++) - { - ToProtoData(input.envelope_limitations[i], output->add_envelope_limitations()); - } - - return 0; -} -int ToProtoData(kortex_driver::ProtectionZoneList input, ProtectionZoneList *output) -{ - output->clear_protection_zones(); - for(int i = 0; i < input.protection_zones.size(); i++) - { - ToProtoData(input.protection_zones[i], output->add_protection_zones()); - } - - return 0; -} -int ToProtoData(kortex_driver::LimitationTypeIdentifier input, LimitationTypeIdentifier *output) -{ - output->set_type((Kinova::Api::Base::LimitationType)input.type); - - return 0; -} -int ToProtoData(kortex_driver::CartesianLimitation input, CartesianLimitation *output) -{ - output->set_type((Kinova::Api::Base::LimitationType)input.type); - output->set_translation(input.translation); - output->set_orientation(input.orientation); - - return 0; -} -int ToProtoData(kortex_driver::CartesianLimitationList input, CartesianLimitationList *output) -{ - output->clear_limitations(); - for(int i = 0; i < input.limitations.size(); i++) - { - ToProtoData(input.limitations[i], output->add_limitations()); - } - - return 0; -} -int ToProtoData(kortex_driver::JointLimitationValue input, JointLimitationValue *output) -{ - output->set_type((Kinova::Api::Base::LimitationType)input.type); - output->set_value(input.value); - - return 0; -} -int ToProtoData(kortex_driver::JointLimitationValueList input, JointLimitationValueList *output) -{ - output->clear_joint_limitation_values(); - for(int i = 0; i < input.joint_limitation_values.size(); i++) - { - ToProtoData(input.joint_limitation_values[i], output->add_joint_limitation_values()); - } - - return 0; -} -int ToProtoData(kortex_driver::JointLimitation input, JointLimitation *output) -{ - output->set_device_identifier(input.device_identifier); - ToProtoData(input.limitation_value, output->mutable_limitation_value()); - - return 0; -} -int ToProtoData(kortex_driver::JointLimitationTypeIdentifier input, JointLimitationTypeIdentifier *output) -{ - output->set_device_identifier(input.device_identifier); - output->set_type((Kinova::Api::Base::LimitationType)input.type); - - return 0; -} -int ToProtoData(kortex_driver::Query input, Query *output) -{ - ToProtoData(input.start_timestamp, output->mutable_start_timestamp()); - ToProtoData(input.end_timestamp, output->mutable_end_timestamp()); - output->set_username(input.username); - - return 0; -} -int ToProtoData(kortex_driver::ConfigurationChangeNotification input, ConfigurationChangeNotification *output) -{ - output->set_event((Kinova::Api::Base::ConfigurationNotificationEvent)input.event); - ToProtoData(input.timestamp, output->mutable_timestamp()); - ToProtoData(input.user_handle, output->mutable_user_handle()); - ToProtoData(input.connection, output->mutable_connection()); - - return 0; -} -int ToProtoData(kortex_driver::MappingInfoNotification input, MappingInfoNotification *output) -{ - output->set_controller_identifier(input.controller_identifier); - ToProtoData(input.active_map_handle, output->mutable_active_map_handle()); - ToProtoData(input.timestamp, output->mutable_timestamp()); - ToProtoData(input.user_handle, output->mutable_user_handle()); - ToProtoData(input.connection, output->mutable_connection()); - - return 0; -} -int ToProtoData(kortex_driver::ControlModeInformation input, ControlModeInformation *output) -{ - output->set_mode((Kinova::Api::Base::ControlMode)input.mode); - - return 0; -} -int ToProtoData(kortex_driver::ControlModeNotification input, ControlModeNotification *output) -{ - output->set_control_mode((Kinova::Api::Base::ControlMode)input.control_mode); - ToProtoData(input.timestamp, output->mutable_timestamp()); - ToProtoData(input.user_handle, output->mutable_user_handle()); - ToProtoData(input.connection, output->mutable_connection()); - - return 0; -} -int ToProtoData(kortex_driver::ServoingModeInformation input, ServoingModeInformation *output) -{ - output->set_servoing_mode((Kinova::Api::Base::ServoingMode)input.servoing_mode); - - return 0; -} -int ToProtoData(kortex_driver::OperatingModeInformation input, OperatingModeInformation *output) -{ - output->set_operating_mode((Kinova::Api::Base::OperatingMode)input.operating_mode); - ToProtoData(input.device_handle, output->mutable_device_handle()); - - return 0; -} -int ToProtoData(kortex_driver::OperatingModeNotification input, OperatingModeNotification *output) -{ - output->set_operating_mode((Kinova::Api::Base::OperatingMode)input.operating_mode); - ToProtoData(input.timestamp, output->mutable_timestamp()); - ToProtoData(input.user_handle, output->mutable_user_handle()); - ToProtoData(input.connection, output->mutable_connection()); - ToProtoData(input.device_handle, output->mutable_device_handle()); - - return 0; -} -int ToProtoData(kortex_driver::ServoingModeNotification input, ServoingModeNotification *output) -{ - output->set_servoing_mode((Kinova::Api::Base::ServoingMode)input.servoing_mode); - ToProtoData(input.timestamp, output->mutable_timestamp()); - ToProtoData(input.user_handle, output->mutable_user_handle()); - ToProtoData(input.connection, output->mutable_connection()); - - return 0; -} -int ToProtoData(kortex_driver::SequenceInfoNotification input, SequenceInfoNotification *output) -{ - output->set_event_identifier((Kinova::Api::Base::EventIdSequenceInfoNotification)input.event_identifier); - ToProtoData(input.sequence_handle, output->mutable_sequence_handle()); - output->set_task_index(input.task_index); - output->set_group_identifier(input.group_identifier); - ToProtoData(input.timestamp, output->mutable_timestamp()); - ToProtoData(input.user_handle, output->mutable_user_handle()); - output->set_abort_details((Kinova::Api::SubErrorCodes)input.abort_details); - ToProtoData(input.connection, output->mutable_connection()); - - return 0; -} -int ToProtoData(kortex_driver::SequenceInformation input, SequenceInformation *output) -{ - output->set_event_identifier((Kinova::Api::Base::EventIdSequenceInfoNotification)input.event_identifier); - output->set_task_index(input.task_index); - output->set_task_identifier(input.task_identifier); - - return 0; -} -int ToProtoData(kortex_driver::ProtectionZoneNotification input, ProtectionZoneNotification *output) -{ - output->set_event((Kinova::Api::Base::ProtectionZoneEvent)input.event); - ToProtoData(input.handle, output->mutable_handle()); - ToProtoData(input.timestamp, output->mutable_timestamp()); - ToProtoData(input.user_handle, output->mutable_user_handle()); - ToProtoData(input.connection, output->mutable_connection()); - - return 0; -} -int ToProtoData(kortex_driver::ProtectionZoneInformation input, ProtectionZoneInformation *output) -{ - output->set_event((Kinova::Api::Base::ProtectionZoneEvent)input.event); - - return 0; -} -int ToProtoData(kortex_driver::UserNotification input, UserNotification *output) -{ - output->set_user_event((Kinova::Api::Base::UserEvent)input.user_event); - ToProtoData(input.modified_user, output->mutable_modified_user()); - ToProtoData(input.timestamp, output->mutable_timestamp()); - ToProtoData(input.user_handle, output->mutable_user_handle()); - ToProtoData(input.connection, output->mutable_connection()); - - return 0; -} -int ToProtoData(kortex_driver::ControllerHandle input, ControllerHandle *output) -{ - output->set_type((Kinova::Api::Base::ControllerType)input.type); - output->set_controller_identifier(input.controller_identifier); - - return 0; -} -int ToProtoData(kortex_driver::ControllerElementHandle input, ControllerElementHandle *output) -{ - ToProtoData(input.controller_handle, output->mutable_controller_handle()); - - if(input.oneof_identifier.button.size() > 0) - { - - output->set_button(input.oneof_identifier.button[0]); - } - if(input.oneof_identifier.axis.size() > 0) - { - - output->set_axis(input.oneof_identifier.axis[0]); - } - - - return 0; -} -int ToProtoData(kortex_driver::ControllerNotification input, ControllerNotification *output) -{ - ToProtoData(input.timestamp, output->mutable_timestamp()); - ToProtoData(input.user_handle, output->mutable_user_handle()); - ToProtoData(input.connection, output->mutable_connection()); - - return 0; -} -int ToProtoData(kortex_driver::ControllerList input, ControllerList *output) -{ - output->clear_handles(); - for(int i = 0; i < input.handles.size(); i++) - { - ToProtoData(input.handles[i], output->add_handles()); - } - - return 0; -} -int ToProtoData(kortex_driver::ControllerState input, ControllerState *output) -{ - ToProtoData(input.handle, output->mutable_handle()); - output->set_event_type((Kinova::Api::Base::ControllerEventType)input.event_type); - - return 0; -} -int ToProtoData(kortex_driver::ControllerElementState input, ControllerElementState *output) -{ - ToProtoData(input.handle, output->mutable_handle()); - output->set_event_type((Kinova::Api::Base::ControllerElementEventType)input.event_type); - output->set_axis_value(input.axis_value); - - return 0; -} -int ToProtoData(kortex_driver::ActionNotification input, ActionNotification *output) -{ - output->set_action_event((Kinova::Api::Base::ActionEvent)input.action_event); - ToProtoData(input.handle, output->mutable_handle()); - ToProtoData(input.timestamp, output->mutable_timestamp()); - ToProtoData(input.user_handle, output->mutable_user_handle()); - output->set_abort_details((Kinova::Api::SubErrorCodes)input.abort_details); - ToProtoData(input.connection, output->mutable_connection()); - - return 0; -} -int ToProtoData(kortex_driver::ActionExecutionState input, ActionExecutionState *output) -{ - output->set_action_event((Kinova::Api::Base::ActionEvent)input.action_event); - ToProtoData(input.handle, output->mutable_handle()); - - return 0; -} -int ToProtoData(kortex_driver::RobotEventNotification input, RobotEventNotification *output) -{ - output->set_event((Kinova::Api::Base::RobotEvent)input.event); - ToProtoData(input.handle, output->mutable_handle()); - ToProtoData(input.timestamp, output->mutable_timestamp()); - ToProtoData(input.user_handle, output->mutable_user_handle()); - ToProtoData(input.connection, output->mutable_connection()); - - return 0; -} -int ToProtoData(kortex_driver::FactoryNotification input, FactoryNotification *output) -{ - output->set_event((Kinova::Api::Base::FactoryEvent)input.event); - ToProtoData(input.timestamp, output->mutable_timestamp()); - ToProtoData(input.user_handle, output->mutable_user_handle()); - ToProtoData(input.connection, output->mutable_connection()); - - return 0; -} -int ToProtoData(kortex_driver::NetworkNotification input, NetworkNotification *output) -{ - output->set_event((Kinova::Api::Base::NetworkEvent)input.event); - ToProtoData(input.timestamp, output->mutable_timestamp()); - ToProtoData(input.user_handle, output->mutable_user_handle()); - ToProtoData(input.connection, output->mutable_connection()); - - return 0; -} -int ToProtoData(kortex_driver::ConfigurationChangeNotificationList input, ConfigurationChangeNotificationList *output) -{ - output->clear_notifications(); - for(int i = 0; i < input.notifications.size(); i++) - { - ToProtoData(input.notifications[i], output->add_notifications()); - } - - return 0; -} -int ToProtoData(kortex_driver::MappingInfoNotificationList input, MappingInfoNotificationList *output) -{ - output->clear_notifications(); - for(int i = 0; i < input.notifications.size(); i++) - { - ToProtoData(input.notifications[i], output->add_notifications()); - } - - return 0; -} -int ToProtoData(kortex_driver::ControlModeNotificationList input, ControlModeNotificationList *output) -{ - output->clear_notifications(); - for(int i = 0; i < input.notifications.size(); i++) - { - ToProtoData(input.notifications[i], output->add_notifications()); - } - - return 0; -} -int ToProtoData(kortex_driver::OperatingModeNotificationList input, OperatingModeNotificationList *output) -{ - output->clear_notifications(); - for(int i = 0; i < input.notifications.size(); i++) - { - ToProtoData(input.notifications[i], output->add_notifications()); - } - - return 0; -} -int ToProtoData(kortex_driver::ServoingModeNotificationList input, ServoingModeNotificationList *output) -{ - output->clear_notifications(); - for(int i = 0; i < input.notifications.size(); i++) - { - ToProtoData(input.notifications[i], output->add_notifications()); - } - - return 0; -} -int ToProtoData(kortex_driver::SequenceInfoNotificationList input, SequenceInfoNotificationList *output) -{ - output->clear_notifications(); - for(int i = 0; i < input.notifications.size(); i++) - { - ToProtoData(input.notifications[i], output->add_notifications()); - } - - return 0; -} -int ToProtoData(kortex_driver::ProtectionZoneNotificationList input, ProtectionZoneNotificationList *output) -{ - output->clear_notifications(); - for(int i = 0; i < input.notifications.size(); i++) - { - ToProtoData(input.notifications[i], output->add_notifications()); - } - - return 0; -} -int ToProtoData(kortex_driver::UserNotificationList input, UserNotificationList *output) -{ - output->clear_notifications(); - for(int i = 0; i < input.notifications.size(); i++) - { - ToProtoData(input.notifications[i], output->add_notifications()); - } - - return 0; -} -int ToProtoData(kortex_driver::SafetyNotificationList input, SafetyNotificationList *output) -{ - output->clear_notifications(); - for(int i = 0; i < input.notifications.size(); i++) - { - ToProtoData(input.notifications[i], output->add_notifications()); - } - - return 0; -} -int ToProtoData(kortex_driver::ControllerNotificationList input, ControllerNotificationList *output) -{ - output->clear_notifications(); - for(int i = 0; i < input.notifications.size(); i++) - { - ToProtoData(input.notifications[i], output->add_notifications()); - } - - return 0; -} -int ToProtoData(kortex_driver::ActionNotificationList input, ActionNotificationList *output) -{ - output->clear_notifications(); - for(int i = 0; i < input.notifications.size(); i++) - { - ToProtoData(input.notifications[i], output->add_notifications()); - } - - return 0; -} -int ToProtoData(kortex_driver::RobotEventNotificationList input, RobotEventNotificationList *output) -{ - output->clear_notifications(); - for(int i = 0; i < input.notifications.size(); i++) - { - ToProtoData(input.notifications[i], output->add_notifications()); - } - - return 0; -} -int ToProtoData(kortex_driver::NetworkNotificationList input, NetworkNotificationList *output) -{ - output->clear_notifications(); - for(int i = 0; i < input.notifications.size(); i++) - { - ToProtoData(input.notifications[i], output->add_notifications()); - } - - return 0; -} -int ToProtoData(kortex_driver::MappingHandle input, MappingHandle *output) -{ - output->set_identifier(input.identifier); - output->set_permission(input.permission); - - return 0; -} -int ToProtoData(kortex_driver::SafetyEvent input, SafetyEvent *output) -{ - ToProtoData(input.safety_handle, output->mutable_safety_handle()); - - return 0; -} -int ToProtoData(kortex_driver::ControllerEvent input, ControllerEvent *output) -{ - output->set_input_type((Kinova::Api::Base::ControllerInputType)input.input_type); - output->set_behavior((Kinova::Api::Base::ControllerBehavior)input.behavior); - output->set_input_identifier(input.input_identifier); - - return 0; -} -int ToProtoData(kortex_driver::GpioEvent input, GpioEvent *output) -{ - output->set_gpio_state((Kinova::Api::Base::GpioState)input.gpio_state); - output->set_device_identifier(input.device_identifier); - - return 0; -} -int ToProtoData(kortex_driver::MapEvent input, MapEvent *output) -{ - output->set_name(input.name); - - return 0; -} -int ToProtoData(kortex_driver::MapElement input, MapElement *output) -{ - ToProtoData(input.event, output->mutable_event()); - ToProtoData(input.action, output->mutable_action()); - - return 0; -} -int ToProtoData(kortex_driver::ActivateMapHandle input, ActivateMapHandle *output) -{ - ToProtoData(input.mapping_handle, output->mutable_mapping_handle()); - ToProtoData(input.map_group_handle, output->mutable_map_group_handle()); - ToProtoData(input.map_handle, output->mutable_map_handle()); - - return 0; -} -int ToProtoData(kortex_driver::Map input, Map *output) -{ - ToProtoData(input.handle, output->mutable_handle()); - output->set_name(input.name); - output->clear_elements(); - for(int i = 0; i < input.elements.size(); i++) - { - ToProtoData(input.elements[i], output->add_elements()); - } - - return 0; -} -int ToProtoData(kortex_driver::MapHandle input, MapHandle *output) -{ - output->set_identifier(input.identifier); - output->set_permission(input.permission); - - return 0; -} -int ToProtoData(kortex_driver::MapList input, MapList *output) -{ - output->clear_map_list(); - for(int i = 0; i < input.map_list.size(); i++) - { - ToProtoData(input.map_list[i], output->add_map_list()); - } - - return 0; -} -int ToProtoData(kortex_driver::MapGroupHandle input, MapGroupHandle *output) -{ - output->set_identifier(input.identifier); - output->set_permission(input.permission); - - return 0; -} -int ToProtoData(kortex_driver::MapGroup input, MapGroup *output) -{ - ToProtoData(input.group_handle, output->mutable_group_handle()); - output->set_name(input.name); - ToProtoData(input.related_mapping_handle, output->mutable_related_mapping_handle()); - ToProtoData(input.parent_group_handle, output->mutable_parent_group_handle()); - output->clear_children_map_group_handles(); - for(int i = 0; i < input.children_map_group_handles.size(); i++) - { - ToProtoData(input.children_map_group_handles[i], output->add_children_map_group_handles()); - } - output->clear_map_handles(); - for(int i = 0; i < input.map_handles.size(); i++) - { - ToProtoData(input.map_handles[i], output->add_map_handles()); - } - output->set_application_data(input.application_data); - - return 0; -} -int ToProtoData(kortex_driver::MapGroupList input, MapGroupList *output) -{ - output->clear_map_groups(); - for(int i = 0; i < input.map_groups.size(); i++) - { - ToProtoData(input.map_groups[i], output->add_map_groups()); - } - - return 0; -} -int ToProtoData(kortex_driver::Mapping input, Mapping *output) -{ - ToProtoData(input.handle, output->mutable_handle()); - output->set_name(input.name); - output->set_controller_identifier(input.controller_identifier); - ToProtoData(input.active_map_group_handle, output->mutable_active_map_group_handle()); - output->clear_map_group_handles(); - for(int i = 0; i < input.map_group_handles.size(); i++) - { - ToProtoData(input.map_group_handles[i], output->add_map_group_handles()); - } - ToProtoData(input.active_map_handle, output->mutable_active_map_handle()); - output->clear_map_handles(); - for(int i = 0; i < input.map_handles.size(); i++) - { - ToProtoData(input.map_handles[i], output->add_map_handles()); - } - output->set_application_data(input.application_data); - - return 0; -} -int ToProtoData(kortex_driver::MappingList input, MappingList *output) -{ - output->clear_mappings(); - for(int i = 0; i < input.mappings.size(); i++) - { - ToProtoData(input.mappings[i], output->add_mappings()); - } - - return 0; -} -int ToProtoData(kortex_driver::TransformationMatrix input, TransformationMatrix *output) -{ - ToProtoData(input.r0, output->mutable_r0()); - ToProtoData(input.r1, output->mutable_r1()); - ToProtoData(input.r2, output->mutable_r2()); - ToProtoData(input.r3, output->mutable_r3()); - - return 0; -} -int ToProtoData(kortex_driver::TransformationRow input, TransformationRow *output) -{ - output->set_c0(input.c0); - output->set_c1(input.c1); - output->set_c2(input.c2); - output->set_c3(input.c3); - - return 0; -} -int ToProtoData(kortex_driver::Pose input, Pose *output) -{ - output->set_x(input.x); - output->set_y(input.y); - output->set_z(input.z); - output->set_theta_x(input.theta_x); - output->set_theta_y(input.theta_y); - output->set_theta_z(input.theta_z); - - return 0; -} -int ToProtoData(kortex_driver::Position input, Position *output) -{ - output->set_x(input.x); - output->set_y(input.y); - output->set_z(input.z); - - return 0; -} -int ToProtoData(kortex_driver::Orientation input, Orientation *output) -{ - output->set_theta_x(input.theta_x); - output->set_theta_y(input.theta_y); - output->set_theta_z(input.theta_z); - - return 0; -} -int ToProtoData(kortex_driver::CartesianSpeed input, CartesianSpeed *output) -{ - output->set_translation(input.translation); - output->set_orientation(input.orientation); - - return 0; -} -int ToProtoData(kortex_driver::CartesianTrajectoryConstraint input, CartesianTrajectoryConstraint *output) -{ - - if(input.oneof_type.speed.size() > 0) - { - ToProtoData(input.oneof_type.speed[0], output->mutable_speed()); - } - if(input.oneof_type.duration.size() > 0) - { - - output->set_duration(input.oneof_type.duration[0]); - } - - - return 0; -} -int ToProtoData(kortex_driver::JointTrajectoryConstraint input, JointTrajectoryConstraint *output) -{ - output->set_type((Kinova::Api::Base::JointTrajectoryConstraintType)input.type); - output->set_value(input.value); - - return 0; -} -int ToProtoData(kortex_driver::Twist input, Twist *output) -{ - output->set_linear_x(input.linear_x); - output->set_linear_y(input.linear_y); - output->set_linear_z(input.linear_z); - output->set_angular_x(input.angular_x); - output->set_angular_y(input.angular_y); - output->set_angular_z(input.angular_z); - - return 0; -} -int ToProtoData(kortex_driver::Admittance input, Admittance *output) -{ - output->set_admittance_mode((Kinova::Api::Base::AdmittanceMode)input.admittance_mode); - - return 0; -} -int ToProtoData(kortex_driver::CartesianReferenceFrameRequest input, CartesianReferenceFrameRequest *output) -{ - output->set_reference_frame((Kinova::Api::Base::CartesianReferenceFrame)input.reference_frame); - - return 0; -} -int ToProtoData(kortex_driver::ConstrainedPose input, ConstrainedPose *output) -{ - ToProtoData(input.target_pose, output->mutable_target_pose()); - ToProtoData(input.constraint, output->mutable_constraint()); - - return 0; -} -int ToProtoData(kortex_driver::ConstrainedPosition input, ConstrainedPosition *output) -{ - ToProtoData(input.target_position, output->mutable_target_position()); - ToProtoData(input.constraint, output->mutable_constraint()); - - return 0; -} -int ToProtoData(kortex_driver::ConstrainedOrientation input, ConstrainedOrientation *output) -{ - ToProtoData(input.target_orientation, output->mutable_target_orientation()); - ToProtoData(input.constraint, output->mutable_constraint()); - - return 0; -} -int ToProtoData(kortex_driver::TwistCommand input, TwistCommand *output) -{ - output->set_mode((Kinova::Api::Base::TwistMode)input.mode); - ToProtoData(input.twist, output->mutable_twist()); - output->set_duration(input.duration); - - return 0; -} -int ToProtoData(kortex_driver::ConstrainedJointAngles input, ConstrainedJointAngles *output) -{ - ToProtoData(input.joint_angles, output->mutable_joint_angles()); - ToProtoData(input.constraint, output->mutable_constraint()); - - return 0; -} -int ToProtoData(kortex_driver::ConstrainedJointAngle input, ConstrainedJointAngle *output) -{ - output->set_joint_identifier(input.joint_identifier); - output->set_value(input.value); - ToProtoData(input.constraint, output->mutable_constraint()); - - return 0; -} -int ToProtoData(kortex_driver::JointAngles input, JointAngles *output) -{ - output->clear_joint_angles(); - for(int i = 0; i < input.joint_angles.size(); i++) - { - ToProtoData(input.joint_angles[i], output->add_joint_angles()); - } - - return 0; -} -int ToProtoData(kortex_driver::JointAngle input, JointAngle *output) -{ - output->set_joint_identifier(input.joint_identifier); - output->set_value(input.value); - - return 0; -} -int ToProtoData(kortex_driver::JointSpeeds input, JointSpeeds *output) -{ - output->clear_joint_speeds(); - for(int i = 0; i < input.joint_speeds.size(); i++) - { - ToProtoData(input.joint_speeds[i], output->add_joint_speeds()); - } - output->set_duration(input.duration); - - return 0; -} -int ToProtoData(kortex_driver::JointSpeed input, JointSpeed *output) -{ - output->set_joint_identifier(input.joint_identifier); - output->set_value(input.value); - output->set_duration(input.duration); - - return 0; -} -int ToProtoData(kortex_driver::GripperCommand input, GripperCommand *output) -{ - output->set_mode((Kinova::Api::Base::GripperMode)input.mode); - ToProtoData(input.gripper, output->mutable_gripper()); - output->set_duration(input.duration); - - return 0; -} -int ToProtoData(kortex_driver::GripperRequest input, GripperRequest *output) -{ - output->set_mode((Kinova::Api::Base::GripperMode)input.mode); - - return 0; -} -int ToProtoData(kortex_driver::Gripper input, Gripper *output) -{ - output->clear_finger(); - for(int i = 0; i < input.finger.size(); i++) - { - ToProtoData(input.finger[i], output->add_finger()); - } - - return 0; -} -int ToProtoData(kortex_driver::Finger input, Finger *output) -{ - output->set_finger_identifier(input.finger_identifier); - output->set_value(input.value); - - return 0; -} -int ToProtoData(kortex_driver::SystemTime input, SystemTime *output) -{ - output->set_sec(input.sec); - output->set_min(input.min); - output->set_hour(input.hour); - output->set_mday(input.mday); - output->set_mon(input.mon); - output->set_year(input.year); - - return 0; -} -int ToProtoData(kortex_driver::ActuatorInformation input, ActuatorInformation *output) -{ - output->set_count(input.count); - - return 0; -} -int ToProtoData(kortex_driver::ArmStateInformation input, ArmStateInformation *output) -{ - output->set_active_state((Kinova::Api::Common::ArmState)input.active_state); - ToProtoData(input.connection, output->mutable_connection()); - - return 0; -} -int ToProtoData(kortex_driver::ArmStateNotification input, ArmStateNotification *output) -{ - output->set_active_state((Kinova::Api::Common::ArmState)input.active_state); - ToProtoData(input.timestamp, output->mutable_timestamp()); - ToProtoData(input.connection, output->mutable_connection()); - - return 0; -} -int ToProtoData(kortex_driver::CountryCode input, CountryCode *output) -{ - output->set_identifier((Kinova::Api::Base::CountryCodeIdentifier)input.identifier); - - return 0; -} diff --git a/kortex_driver/src/base_proto_converter.h b/kortex_driver/src/base_proto_converter.h deleted file mode 100644 index c40b61b9..00000000 --- a/kortex_driver/src/base_proto_converter.h +++ /dev/null @@ -1,310 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_BasePROTO_CONVERTER_H_ -#define _KORTEX_BasePROTO_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "kortex_driver/FullUserProfile.h" -#include "kortex_driver/UserProfile.h" -#include "kortex_driver/UserProfileList.h" -#include "kortex_driver/UserList.h" -#include "kortex_driver/PasswordChange.h" -#include "kortex_driver/SequenceHandle.h" -#include "kortex_driver/AdvancedSequenceHandle.h" -#include "kortex_driver/SequenceTaskHandle.h" -#include "kortex_driver/SequenceTask.h" -#include "kortex_driver/Sequence.h" -#include "kortex_driver/SequenceList.h" -#include "kortex_driver/AppendActionInformation.h" -#include "kortex_driver/ActionHandle.h" -#include "kortex_driver/RequestedActionType.h" -#include "kortex_driver/Action.h" -#include "kortex_driver/SwitchControlMapping.h" -#include "kortex_driver/ChangeTwist.h" -#include "kortex_driver/ChangeJointSpeeds.h" -#include "kortex_driver/EmergencyStop.h" -#include "kortex_driver/Faults.h" -#include "kortex_driver/Delay.h" -#include "kortex_driver/Stop.h" -#include "kortex_driver/ActionList.h" -#include "kortex_driver/Timeout.h" -#include "kortex_driver/Ssid.h" -#include "kortex_driver/CommunicationInterfaceConfiguration.h" -#include "kortex_driver/NetworkHandle.h" -#include "kortex_driver/IPv4Configuration.h" -#include "kortex_driver/IPv4Information.h" -#include "kortex_driver/FullIPv4Configuration.h" -#include "kortex_driver/WifiInformation.h" -#include "kortex_driver/WifiInformationList.h" -#include "kortex_driver/WifiConfiguration.h" -#include "kortex_driver/WifiConfigurationList.h" -#include "kortex_driver/ProtectionZoneHandle.h" -#include "kortex_driver/RotationMatrixRow.h" -#include "kortex_driver/RotationMatrix.h" -#include "kortex_driver/Point.h" -#include "kortex_driver/ZoneShape.h" -#include "kortex_driver/ProtectionZone.h" -#include "kortex_driver/ProtectionZoneList.h" -#include "kortex_driver/LimitationTypeIdentifier.h" -#include "kortex_driver/CartesianLimitation.h" -#include "kortex_driver/CartesianLimitationList.h" -#include "kortex_driver/JointLimitationValue.h" -#include "kortex_driver/JointLimitationValueList.h" -#include "kortex_driver/JointLimitation.h" -#include "kortex_driver/JointLimitationTypeIdentifier.h" -#include "kortex_driver/Query.h" -#include "kortex_driver/ConfigurationChangeNotification.h" -#include "kortex_driver/MappingInfoNotification.h" -#include "kortex_driver/ControlModeInformation.h" -#include "kortex_driver/ControlModeNotification.h" -#include "kortex_driver/ServoingModeInformation.h" -#include "kortex_driver/OperatingModeInformation.h" -#include "kortex_driver/OperatingModeNotification.h" -#include "kortex_driver/ServoingModeNotification.h" -#include "kortex_driver/SequenceInfoNotification.h" -#include "kortex_driver/SequenceInformation.h" -#include "kortex_driver/ProtectionZoneNotification.h" -#include "kortex_driver/ProtectionZoneInformation.h" -#include "kortex_driver/UserNotification.h" -#include "kortex_driver/ControllerHandle.h" -#include "kortex_driver/ControllerElementHandle.h" -#include "kortex_driver/ControllerNotification.h" -#include "kortex_driver/ControllerList.h" -#include "kortex_driver/ControllerState.h" -#include "kortex_driver/ControllerElementState.h" -#include "kortex_driver/ActionNotification.h" -#include "kortex_driver/ActionExecutionState.h" -#include "kortex_driver/RobotEventNotification.h" -#include "kortex_driver/FactoryNotification.h" -#include "kortex_driver/NetworkNotification.h" -#include "kortex_driver/ConfigurationChangeNotificationList.h" -#include "kortex_driver/MappingInfoNotificationList.h" -#include "kortex_driver/ControlModeNotificationList.h" -#include "kortex_driver/OperatingModeNotificationList.h" -#include "kortex_driver/ServoingModeNotificationList.h" -#include "kortex_driver/SequenceInfoNotificationList.h" -#include "kortex_driver/ProtectionZoneNotificationList.h" -#include "kortex_driver/UserNotificationList.h" -#include "kortex_driver/SafetyNotificationList.h" -#include "kortex_driver/ControllerNotificationList.h" -#include "kortex_driver/ActionNotificationList.h" -#include "kortex_driver/RobotEventNotificationList.h" -#include "kortex_driver/NetworkNotificationList.h" -#include "kortex_driver/MappingHandle.h" -#include "kortex_driver/SafetyEvent.h" -#include "kortex_driver/ControllerEvent.h" -#include "kortex_driver/GpioEvent.h" -#include "kortex_driver/MapEvent.h" -#include "kortex_driver/MapElement.h" -#include "kortex_driver/ActivateMapHandle.h" -#include "kortex_driver/Map.h" -#include "kortex_driver/MapHandle.h" -#include "kortex_driver/MapList.h" -#include "kortex_driver/MapGroupHandle.h" -#include "kortex_driver/MapGroup.h" -#include "kortex_driver/MapGroupList.h" -#include "kortex_driver/Mapping.h" -#include "kortex_driver/MappingList.h" -#include "kortex_driver/TransformationMatrix.h" -#include "kortex_driver/TransformationRow.h" -#include "kortex_driver/Pose.h" -#include "kortex_driver/Position.h" -#include "kortex_driver/Orientation.h" -#include "kortex_driver/CartesianSpeed.h" -#include "kortex_driver/CartesianTrajectoryConstraint.h" -#include "kortex_driver/JointTrajectoryConstraint.h" -#include "kortex_driver/Twist.h" -#include "kortex_driver/Admittance.h" -#include "kortex_driver/CartesianReferenceFrameRequest.h" -#include "kortex_driver/ConstrainedPose.h" -#include "kortex_driver/ConstrainedPosition.h" -#include "kortex_driver/ConstrainedOrientation.h" -#include "kortex_driver/TwistCommand.h" -#include "kortex_driver/ConstrainedJointAngles.h" -#include "kortex_driver/ConstrainedJointAngle.h" -#include "kortex_driver/JointAngles.h" -#include "kortex_driver/JointAngle.h" -#include "kortex_driver/JointSpeeds.h" -#include "kortex_driver/JointSpeed.h" -#include "kortex_driver/GripperCommand.h" -#include "kortex_driver/GripperRequest.h" -#include "kortex_driver/Gripper.h" -#include "kortex_driver/Finger.h" -#include "kortex_driver/SystemTime.h" -#include "kortex_driver/ActuatorInformation.h" -#include "kortex_driver/ArmStateInformation.h" -#include "kortex_driver/ArmStateNotification.h" -#include "kortex_driver/CountryCode.h" - - -using namespace Kinova::Api::Base; - -int ToProtoData(kortex_driver::FullUserProfile intput, FullUserProfile *output); -int ToProtoData(kortex_driver::UserProfile intput, UserProfile *output); -int ToProtoData(kortex_driver::UserProfileList intput, UserProfileList *output); -int ToProtoData(kortex_driver::UserList intput, UserList *output); -int ToProtoData(kortex_driver::PasswordChange intput, PasswordChange *output); -int ToProtoData(kortex_driver::SequenceHandle intput, SequenceHandle *output); -int ToProtoData(kortex_driver::AdvancedSequenceHandle intput, AdvancedSequenceHandle *output); -int ToProtoData(kortex_driver::SequenceTaskHandle intput, SequenceTaskHandle *output); -int ToProtoData(kortex_driver::SequenceTask intput, SequenceTask *output); -int ToProtoData(kortex_driver::Sequence intput, Sequence *output); -int ToProtoData(kortex_driver::SequenceList intput, SequenceList *output); -int ToProtoData(kortex_driver::AppendActionInformation intput, AppendActionInformation *output); -int ToProtoData(kortex_driver::ActionHandle intput, ActionHandle *output); -int ToProtoData(kortex_driver::RequestedActionType intput, RequestedActionType *output); -int ToProtoData(kortex_driver::Action intput, Action *output); -int ToProtoData(kortex_driver::SwitchControlMapping intput, SwitchControlMapping *output); -int ToProtoData(kortex_driver::ChangeTwist intput, ChangeTwist *output); -int ToProtoData(kortex_driver::ChangeJointSpeeds intput, ChangeJointSpeeds *output); -int ToProtoData(kortex_driver::EmergencyStop intput, EmergencyStop *output); -int ToProtoData(kortex_driver::Faults intput, Faults *output); -int ToProtoData(kortex_driver::Delay intput, Delay *output); -int ToProtoData(kortex_driver::Stop intput, Stop *output); -int ToProtoData(kortex_driver::ActionList intput, ActionList *output); -int ToProtoData(kortex_driver::Timeout intput, Timeout *output); -int ToProtoData(kortex_driver::Ssid intput, Ssid *output); -int ToProtoData(kortex_driver::CommunicationInterfaceConfiguration intput, CommunicationInterfaceConfiguration *output); -int ToProtoData(kortex_driver::NetworkHandle intput, NetworkHandle *output); -int ToProtoData(kortex_driver::IPv4Configuration intput, IPv4Configuration *output); -int ToProtoData(kortex_driver::IPv4Information intput, IPv4Information *output); -int ToProtoData(kortex_driver::FullIPv4Configuration intput, FullIPv4Configuration *output); -int ToProtoData(kortex_driver::WifiInformation intput, WifiInformation *output); -int ToProtoData(kortex_driver::WifiInformationList intput, WifiInformationList *output); -int ToProtoData(kortex_driver::WifiConfiguration intput, WifiConfiguration *output); -int ToProtoData(kortex_driver::WifiConfigurationList intput, WifiConfigurationList *output); -int ToProtoData(kortex_driver::ProtectionZoneHandle intput, ProtectionZoneHandle *output); -int ToProtoData(kortex_driver::RotationMatrixRow intput, RotationMatrixRow *output); -int ToProtoData(kortex_driver::RotationMatrix intput, RotationMatrix *output); -int ToProtoData(kortex_driver::Point intput, Point *output); -int ToProtoData(kortex_driver::ZoneShape intput, ZoneShape *output); -int ToProtoData(kortex_driver::ProtectionZone intput, ProtectionZone *output); -int ToProtoData(kortex_driver::ProtectionZoneList intput, ProtectionZoneList *output); -int ToProtoData(kortex_driver::LimitationTypeIdentifier intput, LimitationTypeIdentifier *output); -int ToProtoData(kortex_driver::CartesianLimitation intput, CartesianLimitation *output); -int ToProtoData(kortex_driver::CartesianLimitationList intput, CartesianLimitationList *output); -int ToProtoData(kortex_driver::JointLimitationValue intput, JointLimitationValue *output); -int ToProtoData(kortex_driver::JointLimitationValueList intput, JointLimitationValueList *output); -int ToProtoData(kortex_driver::JointLimitation intput, JointLimitation *output); -int ToProtoData(kortex_driver::JointLimitationTypeIdentifier intput, JointLimitationTypeIdentifier *output); -int ToProtoData(kortex_driver::Query intput, Query *output); -int ToProtoData(kortex_driver::ConfigurationChangeNotification intput, ConfigurationChangeNotification *output); -int ToProtoData(kortex_driver::MappingInfoNotification intput, MappingInfoNotification *output); -int ToProtoData(kortex_driver::ControlModeInformation intput, ControlModeInformation *output); -int ToProtoData(kortex_driver::ControlModeNotification intput, ControlModeNotification *output); -int ToProtoData(kortex_driver::ServoingModeInformation intput, ServoingModeInformation *output); -int ToProtoData(kortex_driver::OperatingModeInformation intput, OperatingModeInformation *output); -int ToProtoData(kortex_driver::OperatingModeNotification intput, OperatingModeNotification *output); -int ToProtoData(kortex_driver::ServoingModeNotification intput, ServoingModeNotification *output); -int ToProtoData(kortex_driver::SequenceInfoNotification intput, SequenceInfoNotification *output); -int ToProtoData(kortex_driver::SequenceInformation intput, SequenceInformation *output); -int ToProtoData(kortex_driver::ProtectionZoneNotification intput, ProtectionZoneNotification *output); -int ToProtoData(kortex_driver::ProtectionZoneInformation intput, ProtectionZoneInformation *output); -int ToProtoData(kortex_driver::UserNotification intput, UserNotification *output); -int ToProtoData(kortex_driver::ControllerHandle intput, ControllerHandle *output); -int ToProtoData(kortex_driver::ControllerElementHandle intput, ControllerElementHandle *output); -int ToProtoData(kortex_driver::ControllerNotification intput, ControllerNotification *output); -int ToProtoData(kortex_driver::ControllerList intput, ControllerList *output); -int ToProtoData(kortex_driver::ControllerState intput, ControllerState *output); -int ToProtoData(kortex_driver::ControllerElementState intput, ControllerElementState *output); -int ToProtoData(kortex_driver::ActionNotification intput, ActionNotification *output); -int ToProtoData(kortex_driver::ActionExecutionState intput, ActionExecutionState *output); -int ToProtoData(kortex_driver::RobotEventNotification intput, RobotEventNotification *output); -int ToProtoData(kortex_driver::FactoryNotification intput, FactoryNotification *output); -int ToProtoData(kortex_driver::NetworkNotification intput, NetworkNotification *output); -int ToProtoData(kortex_driver::ConfigurationChangeNotificationList intput, ConfigurationChangeNotificationList *output); -int ToProtoData(kortex_driver::MappingInfoNotificationList intput, MappingInfoNotificationList *output); -int ToProtoData(kortex_driver::ControlModeNotificationList intput, ControlModeNotificationList *output); -int ToProtoData(kortex_driver::OperatingModeNotificationList intput, OperatingModeNotificationList *output); -int ToProtoData(kortex_driver::ServoingModeNotificationList intput, ServoingModeNotificationList *output); -int ToProtoData(kortex_driver::SequenceInfoNotificationList intput, SequenceInfoNotificationList *output); -int ToProtoData(kortex_driver::ProtectionZoneNotificationList intput, ProtectionZoneNotificationList *output); -int ToProtoData(kortex_driver::UserNotificationList intput, UserNotificationList *output); -int ToProtoData(kortex_driver::SafetyNotificationList intput, SafetyNotificationList *output); -int ToProtoData(kortex_driver::ControllerNotificationList intput, ControllerNotificationList *output); -int ToProtoData(kortex_driver::ActionNotificationList intput, ActionNotificationList *output); -int ToProtoData(kortex_driver::RobotEventNotificationList intput, RobotEventNotificationList *output); -int ToProtoData(kortex_driver::NetworkNotificationList intput, NetworkNotificationList *output); -int ToProtoData(kortex_driver::MappingHandle intput, MappingHandle *output); -int ToProtoData(kortex_driver::SafetyEvent intput, SafetyEvent *output); -int ToProtoData(kortex_driver::ControllerEvent intput, ControllerEvent *output); -int ToProtoData(kortex_driver::GpioEvent intput, GpioEvent *output); -int ToProtoData(kortex_driver::MapEvent intput, MapEvent *output); -int ToProtoData(kortex_driver::MapElement intput, MapElement *output); -int ToProtoData(kortex_driver::ActivateMapHandle intput, ActivateMapHandle *output); -int ToProtoData(kortex_driver::Map intput, Map *output); -int ToProtoData(kortex_driver::MapHandle intput, MapHandle *output); -int ToProtoData(kortex_driver::MapList intput, MapList *output); -int ToProtoData(kortex_driver::MapGroupHandle intput, MapGroupHandle *output); -int ToProtoData(kortex_driver::MapGroup intput, MapGroup *output); -int ToProtoData(kortex_driver::MapGroupList intput, MapGroupList *output); -int ToProtoData(kortex_driver::Mapping intput, Mapping *output); -int ToProtoData(kortex_driver::MappingList intput, MappingList *output); -int ToProtoData(kortex_driver::TransformationMatrix intput, TransformationMatrix *output); -int ToProtoData(kortex_driver::TransformationRow intput, TransformationRow *output); -int ToProtoData(kortex_driver::Pose intput, Pose *output); -int ToProtoData(kortex_driver::Position intput, Position *output); -int ToProtoData(kortex_driver::Orientation intput, Orientation *output); -int ToProtoData(kortex_driver::CartesianSpeed intput, CartesianSpeed *output); -int ToProtoData(kortex_driver::CartesianTrajectoryConstraint intput, CartesianTrajectoryConstraint *output); -int ToProtoData(kortex_driver::JointTrajectoryConstraint intput, JointTrajectoryConstraint *output); -int ToProtoData(kortex_driver::Twist intput, Twist *output); -int ToProtoData(kortex_driver::Admittance intput, Admittance *output); -int ToProtoData(kortex_driver::CartesianReferenceFrameRequest intput, CartesianReferenceFrameRequest *output); -int ToProtoData(kortex_driver::ConstrainedPose intput, ConstrainedPose *output); -int ToProtoData(kortex_driver::ConstrainedPosition intput, ConstrainedPosition *output); -int ToProtoData(kortex_driver::ConstrainedOrientation intput, ConstrainedOrientation *output); -int ToProtoData(kortex_driver::TwistCommand intput, TwistCommand *output); -int ToProtoData(kortex_driver::ConstrainedJointAngles intput, ConstrainedJointAngles *output); -int ToProtoData(kortex_driver::ConstrainedJointAngle intput, ConstrainedJointAngle *output); -int ToProtoData(kortex_driver::JointAngles intput, JointAngles *output); -int ToProtoData(kortex_driver::JointAngle intput, JointAngle *output); -int ToProtoData(kortex_driver::JointSpeeds intput, JointSpeeds *output); -int ToProtoData(kortex_driver::JointSpeed intput, JointSpeed *output); -int ToProtoData(kortex_driver::GripperCommand intput, GripperCommand *output); -int ToProtoData(kortex_driver::GripperRequest intput, GripperRequest *output); -int ToProtoData(kortex_driver::Gripper intput, Gripper *output); -int ToProtoData(kortex_driver::Finger intput, Finger *output); -int ToProtoData(kortex_driver::SystemTime intput, SystemTime *output); -int ToProtoData(kortex_driver::ActuatorInformation intput, ActuatorInformation *output); -int ToProtoData(kortex_driver::ArmStateInformation intput, ArmStateInformation *output); -int ToProtoData(kortex_driver::ArmStateNotification intput, ArmStateNotification *output); -int ToProtoData(kortex_driver::CountryCode intput, CountryCode *output); - -#endif \ No newline at end of file diff --git a/kortex_driver/src/base_ros_converter.cpp b/kortex_driver/src/base_ros_converter.cpp deleted file mode 100644 index 2890768d..00000000 --- a/kortex_driver/src/base_ros_converter.cpp +++ /dev/null @@ -1,1384 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "base_ros_converter.h" - -#include "common_ros_converter.h" - - -int ToRosData(FullUserProfile input, kortex_driver::FullUserProfile &output) -{ - ToRosData(input.user_profile(), output.user_profile); - output.password = input.password(); - - return 0; -} -int ToRosData(UserProfile input, kortex_driver::UserProfile &output) -{ - ToRosData(input.handle(), output.handle); - output.username = input.username(); - output.firstname = input.firstname(); - output.lastname = input.lastname(); - output.application_data = input.application_data(); - - return 0; -} -int ToRosData(UserProfileList input, kortex_driver::UserProfileList &output) -{ - output.user_profiles.clear(); - for(int i = 0; i < input.user_profiles_size(); i++) - { - kortex_driver::UserProfile temp; - ToRosData(input.user_profiles(i), temp); - output.user_profiles.push_back(temp); - } - - return 0; -} -int ToRosData(UserList input, kortex_driver::UserList &output) -{ - output.user_handles.clear(); - for(int i = 0; i < input.user_handles_size(); i++) - { - kortex_driver::UserProfileHandle temp; - ToRosData(input.user_handles(i), temp); - output.user_handles.push_back(temp); - } - - return 0; -} -int ToRosData(PasswordChange input, kortex_driver::PasswordChange &output) -{ - ToRosData(input.handle(), output.handle); - output.old_password = input.old_password(); - output.new_password = input.new_password(); - - return 0; -} -int ToRosData(SequenceHandle input, kortex_driver::SequenceHandle &output) -{ - output.identifier = input.identifier(); - output.permission = input.permission(); - - return 0; -} -int ToRosData(AdvancedSequenceHandle input, kortex_driver::AdvancedSequenceHandle &output) -{ - ToRosData(input.handle(), output.handle); - output.in_loop = input.in_loop(); - - return 0; -} -int ToRosData(SequenceTaskHandle input, kortex_driver::SequenceTaskHandle &output) -{ - ToRosData(input.sequence_handle(), output.sequence_handle); - output.task_index = input.task_index(); - - return 0; -} -int ToRosData(SequenceTask input, kortex_driver::SequenceTask &output) -{ - output.group_identifier = input.group_identifier(); - ToRosData(input.action(), output.action); - output.application_data = input.application_data(); - - return 0; -} -int ToRosData(Sequence input, kortex_driver::Sequence &output) -{ - ToRosData(input.handle(), output.handle); - output.name = input.name(); - output.application_data = input.application_data(); - output.tasks.clear(); - for(int i = 0; i < input.tasks_size(); i++) - { - kortex_driver::SequenceTask temp; - ToRosData(input.tasks(i), temp); - output.tasks.push_back(temp); - } - - return 0; -} -int ToRosData(SequenceList input, kortex_driver::SequenceList &output) -{ - output.sequence_list.clear(); - for(int i = 0; i < input.sequence_list_size(); i++) - { - kortex_driver::Sequence temp; - ToRosData(input.sequence_list(i), temp); - output.sequence_list.push_back(temp); - } - - return 0; -} -int ToRosData(AppendActionInformation input, kortex_driver::AppendActionInformation &output) -{ - ToRosData(input.sequence_handle(), output.sequence_handle); - ToRosData(input.action(), output.action); - - return 0; -} -int ToRosData(ActionHandle input, kortex_driver::ActionHandle &output) -{ - output.identifier = input.identifier(); - output.action_type = input.action_type(); - output.permission = input.permission(); - - return 0; -} -int ToRosData(RequestedActionType input, kortex_driver::RequestedActionType &output) -{ - output.action_type = input.action_type(); - - return 0; -} -int ToRosData(Action input, kortex_driver::Action &output) -{ - ToRosData(input.handle(), output.handle); - output.name = input.name(); - output.application_data = input.application_data(); - - - auto oneof_type = input.action_parameters_case(); - - switch(oneof_type) - { - case Action::kSendTwistCommand: - { - kortex_driver::TwistCommand temp; - ToRosData(input.send_twist_command(), temp); - output.oneof_action_parameters.send_twist_command.push_back(temp); - break; - } - - case Action::kSendJointSpeeds: - { - kortex_driver::JointSpeeds temp; - ToRosData(input.send_joint_speeds(), temp); - output.oneof_action_parameters.send_joint_speeds.push_back(temp); - break; - } - - case Action::kReachPose: - { - kortex_driver::ConstrainedPose temp; - ToRosData(input.reach_pose(), temp); - output.oneof_action_parameters.reach_pose.push_back(temp); - break; - } - - case Action::kReachJointAngles: - { - kortex_driver::ConstrainedJointAngles temp; - ToRosData(input.reach_joint_angles(), temp); - output.oneof_action_parameters.reach_joint_angles.push_back(temp); - break; - } - - case Action::kToggleAdmittanceMode: - { - output.oneof_action_parameters.toggle_admittance_mode.push_back(input.toggle_admittance_mode()); - - break; - } - - case Action::kSwitchControlMapping: - { - kortex_driver::SwitchControlMapping temp; - ToRosData(input.switch_control_mapping(), temp); - output.oneof_action_parameters.switch_control_mapping.push_back(temp); - break; - } - - case Action::kNavigateJoints: - { - output.oneof_action_parameters.navigate_joints.push_back(input.navigate_joints()); - - break; - } - - case Action::kNavigateMappings: - { - output.oneof_action_parameters.navigate_mappings.push_back(input.navigate_mappings()); - - break; - } - - case Action::kChangeTwist: - { - kortex_driver::ChangeTwist temp; - ToRosData(input.change_twist(), temp); - output.oneof_action_parameters.change_twist.push_back(temp); - break; - } - - case Action::kChangeJointSpeeds: - { - kortex_driver::ChangeJointSpeeds temp; - ToRosData(input.change_joint_speeds(), temp); - output.oneof_action_parameters.change_joint_speeds.push_back(temp); - break; - } - - case Action::kApplyEmergencyStop: - { - kortex_driver::EmergencyStop temp; - ToRosData(input.apply_emergency_stop(), temp); - output.oneof_action_parameters.apply_emergency_stop.push_back(temp); - break; - } - - case Action::kClearFaults: - { - kortex_driver::Faults temp; - ToRosData(input.clear_faults(), temp); - output.oneof_action_parameters.clear_faults.push_back(temp); - break; - } - - case Action::kDelay: - { - kortex_driver::Delay temp; - ToRosData(input.delay(), temp); - output.oneof_action_parameters.delay.push_back(temp); - break; - } - - case Action::kExecuteAction: - { - kortex_driver::ActionHandle temp; - ToRosData(input.execute_action(), temp); - output.oneof_action_parameters.execute_action.push_back(temp); - break; - } - - case Action::kSendGripperCommand: - { - kortex_driver::GripperCommand temp; - ToRosData(input.send_gripper_command(), temp); - output.oneof_action_parameters.send_gripper_command.push_back(temp); - break; - } - - case Action::kStopAction: - { - kortex_driver::Stop temp; - ToRosData(input.stop_action(), temp); - output.oneof_action_parameters.stop_action.push_back(temp); - break; - } - - } - return 0; -} -int ToRosData(SwitchControlMapping input, kortex_driver::SwitchControlMapping &output) -{ - output.controller_identifier = input.controller_identifier(); - ToRosData(input.map_group_handle(), output.map_group_handle); - ToRosData(input.map_handle(), output.map_handle); - - return 0; -} -int ToRosData(ChangeTwist input, kortex_driver::ChangeTwist &output) -{ - output.linear = input.linear(); - output.angular = input.angular(); - - return 0; -} -int ToRosData(ChangeJointSpeeds input, kortex_driver::ChangeJointSpeeds &output) -{ - ToRosData(input.joint_speeds(), output.joint_speeds); - - return 0; -} -int ToRosData(EmergencyStop input, kortex_driver::EmergencyStop &output) -{ - - return 0; -} -int ToRosData(Faults input, kortex_driver::Faults &output) -{ - - return 0; -} -int ToRosData(Delay input, kortex_driver::Delay &output) -{ - output.duration = input.duration(); - - return 0; -} -int ToRosData(Stop input, kortex_driver::Stop &output) -{ - - return 0; -} -int ToRosData(ActionList input, kortex_driver::ActionList &output) -{ - output.action_list.clear(); - for(int i = 0; i < input.action_list_size(); i++) - { - kortex_driver::Action temp; - ToRosData(input.action_list(i), temp); - output.action_list.push_back(temp); - } - - return 0; -} -int ToRosData(Timeout input, kortex_driver::Timeout &output) -{ - output.value = input.value(); - - return 0; -} -int ToRosData(Ssid input, kortex_driver::Ssid &output) -{ - output.identifier = input.identifier(); - - return 0; -} -int ToRosData(CommunicationInterfaceConfiguration input, kortex_driver::CommunicationInterfaceConfiguration &output) -{ - output.type = input.type(); - output.enable = input.enable(); - - return 0; -} -int ToRosData(NetworkHandle input, kortex_driver::NetworkHandle &output) -{ - output.type = input.type(); - - return 0; -} -int ToRosData(IPv4Configuration input, kortex_driver::IPv4Configuration &output) -{ - output.ip_address = input.ip_address(); - output.subnet_mask = input.subnet_mask(); - output.default_gateway = input.default_gateway(); - output.dhcp_enabled = input.dhcp_enabled(); - - return 0; -} -int ToRosData(IPv4Information input, kortex_driver::IPv4Information &output) -{ - output.ip_address = input.ip_address(); - output.subnet_mask = input.subnet_mask(); - output.default_gateway = input.default_gateway(); - - return 0; -} -int ToRosData(FullIPv4Configuration input, kortex_driver::FullIPv4Configuration &output) -{ - ToRosData(input.handle(), output.handle); - ToRosData(input.ipv4_configuration(), output.ipv4_configuration); - - return 0; -} -int ToRosData(WifiInformation input, kortex_driver::WifiInformation &output) -{ - ToRosData(input.ssid(), output.ssid); - output.security_type = input.security_type(); - output.encryption_type = input.encryption_type(); - output.signal_quality = input.signal_quality(); - output.signal_strength = input.signal_strength(); - output.frequency = input.frequency(); - output.channel = input.channel(); - - return 0; -} -int ToRosData(WifiInformationList input, kortex_driver::WifiInformationList &output) -{ - output.wifi_information_list.clear(); - for(int i = 0; i < input.wifi_information_list_size(); i++) - { - kortex_driver::WifiInformation temp; - ToRosData(input.wifi_information_list(i), temp); - output.wifi_information_list.push_back(temp); - } - - return 0; -} -int ToRosData(WifiConfiguration input, kortex_driver::WifiConfiguration &output) -{ - ToRosData(input.ssid(), output.ssid); - output.security_key = input.security_key(); - output.connect_automatically = input.connect_automatically(); - - return 0; -} -int ToRosData(WifiConfigurationList input, kortex_driver::WifiConfigurationList &output) -{ - output.wifi_configuration_list.clear(); - for(int i = 0; i < input.wifi_configuration_list_size(); i++) - { - kortex_driver::WifiConfiguration temp; - ToRosData(input.wifi_configuration_list(i), temp); - output.wifi_configuration_list.push_back(temp); - } - - return 0; -} -int ToRosData(ProtectionZoneHandle input, kortex_driver::ProtectionZoneHandle &output) -{ - output.identifier = input.identifier(); - output.permission = input.permission(); - - return 0; -} -int ToRosData(RotationMatrixRow input, kortex_driver::RotationMatrixRow &output) -{ - output.column1 = input.column1(); - output.column2 = input.column2(); - output.column3 = input.column3(); - - return 0; -} -int ToRosData(RotationMatrix input, kortex_driver::RotationMatrix &output) -{ - ToRosData(input.row1(), output.row1); - ToRosData(input.row2(), output.row2); - ToRosData(input.row3(), output.row3); - - return 0; -} -int ToRosData(Point input, kortex_driver::Point &output) -{ - output.x = input.x(); - output.y = input.y(); - output.z = input.z(); - - return 0; -} -int ToRosData(ZoneShape input, kortex_driver::ZoneShape &output) -{ - output.shape_type = input.shape_type(); - ToRosData(input.origin(), output.origin); - ToRosData(input.orientation(), output.orientation); - - output.dimensions.clear(); - for(int i = 0; i < input.dimensions_size(); i++) - { - output.dimensions.push_back(input.dimensions(i)); - } - output.envelope_thickness = input.envelope_thickness(); - - return 0; -} -int ToRosData(ProtectionZone input, kortex_driver::ProtectionZone &output) -{ - ToRosData(input.handle(), output.handle); - output.name = input.name(); - output.application_data = input.application_data(); - output.is_enabled = input.is_enabled(); - ToRosData(input.shape(), output.shape); - output.limitations.clear(); - for(int i = 0; i < input.limitations_size(); i++) - { - kortex_driver::CartesianLimitation temp; - ToRosData(input.limitations(i), temp); - output.limitations.push_back(temp); - } - output.envelope_limitations.clear(); - for(int i = 0; i < input.envelope_limitations_size(); i++) - { - kortex_driver::CartesianLimitation temp; - ToRosData(input.envelope_limitations(i), temp); - output.envelope_limitations.push_back(temp); - } - - return 0; -} -int ToRosData(ProtectionZoneList input, kortex_driver::ProtectionZoneList &output) -{ - output.protection_zones.clear(); - for(int i = 0; i < input.protection_zones_size(); i++) - { - kortex_driver::ProtectionZone temp; - ToRosData(input.protection_zones(i), temp); - output.protection_zones.push_back(temp); - } - - return 0; -} -int ToRosData(LimitationTypeIdentifier input, kortex_driver::LimitationTypeIdentifier &output) -{ - output.type = input.type(); - - return 0; -} -int ToRosData(CartesianLimitation input, kortex_driver::CartesianLimitation &output) -{ - output.type = input.type(); - output.translation = input.translation(); - output.orientation = input.orientation(); - - return 0; -} -int ToRosData(CartesianLimitationList input, kortex_driver::CartesianLimitationList &output) -{ - output.limitations.clear(); - for(int i = 0; i < input.limitations_size(); i++) - { - kortex_driver::CartesianLimitation temp; - ToRosData(input.limitations(i), temp); - output.limitations.push_back(temp); - } - - return 0; -} -int ToRosData(JointLimitationValue input, kortex_driver::JointLimitationValue &output) -{ - output.type = input.type(); - output.value = input.value(); - - return 0; -} -int ToRosData(JointLimitationValueList input, kortex_driver::JointLimitationValueList &output) -{ - output.joint_limitation_values.clear(); - for(int i = 0; i < input.joint_limitation_values_size(); i++) - { - kortex_driver::JointLimitationValue temp; - ToRosData(input.joint_limitation_values(i), temp); - output.joint_limitation_values.push_back(temp); - } - - return 0; -} -int ToRosData(JointLimitation input, kortex_driver::JointLimitation &output) -{ - output.device_identifier = input.device_identifier(); - ToRosData(input.limitation_value(), output.limitation_value); - - return 0; -} -int ToRosData(JointLimitationTypeIdentifier input, kortex_driver::JointLimitationTypeIdentifier &output) -{ - output.device_identifier = input.device_identifier(); - output.type = input.type(); - - return 0; -} -int ToRosData(Query input, kortex_driver::Query &output) -{ - ToRosData(input.start_timestamp(), output.start_timestamp); - ToRosData(input.end_timestamp(), output.end_timestamp); - output.username = input.username(); - - return 0; -} -int ToRosData(ConfigurationChangeNotification input, kortex_driver::ConfigurationChangeNotification &output) -{ - output.event = input.event(); - ToRosData(input.timestamp(), output.timestamp); - ToRosData(input.user_handle(), output.user_handle); - ToRosData(input.connection(), output.connection); - - return 0; -} -int ToRosData(MappingInfoNotification input, kortex_driver::MappingInfoNotification &output) -{ - output.controller_identifier = input.controller_identifier(); - ToRosData(input.active_map_handle(), output.active_map_handle); - ToRosData(input.timestamp(), output.timestamp); - ToRosData(input.user_handle(), output.user_handle); - ToRosData(input.connection(), output.connection); - - return 0; -} -int ToRosData(ControlModeInformation input, kortex_driver::ControlModeInformation &output) -{ - output.mode = input.mode(); - - return 0; -} -int ToRosData(ControlModeNotification input, kortex_driver::ControlModeNotification &output) -{ - output.control_mode = input.control_mode(); - ToRosData(input.timestamp(), output.timestamp); - ToRosData(input.user_handle(), output.user_handle); - ToRosData(input.connection(), output.connection); - - return 0; -} -int ToRosData(ServoingModeInformation input, kortex_driver::ServoingModeInformation &output) -{ - output.servoing_mode = input.servoing_mode(); - - return 0; -} -int ToRosData(OperatingModeInformation input, kortex_driver::OperatingModeInformation &output) -{ - output.operating_mode = input.operating_mode(); - ToRosData(input.device_handle(), output.device_handle); - - return 0; -} -int ToRosData(OperatingModeNotification input, kortex_driver::OperatingModeNotification &output) -{ - output.operating_mode = input.operating_mode(); - ToRosData(input.timestamp(), output.timestamp); - ToRosData(input.user_handle(), output.user_handle); - ToRosData(input.connection(), output.connection); - ToRosData(input.device_handle(), output.device_handle); - - return 0; -} -int ToRosData(ServoingModeNotification input, kortex_driver::ServoingModeNotification &output) -{ - output.servoing_mode = input.servoing_mode(); - ToRosData(input.timestamp(), output.timestamp); - ToRosData(input.user_handle(), output.user_handle); - ToRosData(input.connection(), output.connection); - - return 0; -} -int ToRosData(SequenceInfoNotification input, kortex_driver::SequenceInfoNotification &output) -{ - output.event_identifier = input.event_identifier(); - ToRosData(input.sequence_handle(), output.sequence_handle); - output.task_index = input.task_index(); - output.group_identifier = input.group_identifier(); - ToRosData(input.timestamp(), output.timestamp); - ToRosData(input.user_handle(), output.user_handle); - output.abort_details = input.abort_details(); - ToRosData(input.connection(), output.connection); - - return 0; -} -int ToRosData(SequenceInformation input, kortex_driver::SequenceInformation &output) -{ - output.event_identifier = input.event_identifier(); - output.task_index = input.task_index(); - output.task_identifier = input.task_identifier(); - - return 0; -} -int ToRosData(ProtectionZoneNotification input, kortex_driver::ProtectionZoneNotification &output) -{ - output.event = input.event(); - ToRosData(input.handle(), output.handle); - ToRosData(input.timestamp(), output.timestamp); - ToRosData(input.user_handle(), output.user_handle); - ToRosData(input.connection(), output.connection); - - return 0; -} -int ToRosData(ProtectionZoneInformation input, kortex_driver::ProtectionZoneInformation &output) -{ - output.event = input.event(); - - return 0; -} -int ToRosData(UserNotification input, kortex_driver::UserNotification &output) -{ - output.user_event = input.user_event(); - ToRosData(input.modified_user(), output.modified_user); - ToRosData(input.timestamp(), output.timestamp); - ToRosData(input.user_handle(), output.user_handle); - ToRosData(input.connection(), output.connection); - - return 0; -} -int ToRosData(ControllerHandle input, kortex_driver::ControllerHandle &output) -{ - output.type = input.type(); - output.controller_identifier = input.controller_identifier(); - - return 0; -} -int ToRosData(ControllerElementHandle input, kortex_driver::ControllerElementHandle &output) -{ - ToRosData(input.controller_handle(), output.controller_handle); - - - auto oneof_type = input.identifier_case(); - - switch(oneof_type) - { - case ControllerElementHandle::kButton: - { - break; - } - - case ControllerElementHandle::kAxis: - { - break; - } - - } - return 0; -} -int ToRosData(ControllerNotification input, kortex_driver::ControllerNotification &output) -{ - ToRosData(input.timestamp(), output.timestamp); - ToRosData(input.user_handle(), output.user_handle); - ToRosData(input.connection(), output.connection); - - return 0; -} -int ToRosData(ControllerList input, kortex_driver::ControllerList &output) -{ - output.handles.clear(); - for(int i = 0; i < input.handles_size(); i++) - { - kortex_driver::ControllerHandle temp; - ToRosData(input.handles(i), temp); - output.handles.push_back(temp); - } - - return 0; -} -int ToRosData(ControllerState input, kortex_driver::ControllerState &output) -{ - ToRosData(input.handle(), output.handle); - output.event_type = input.event_type(); - - return 0; -} -int ToRosData(ControllerElementState input, kortex_driver::ControllerElementState &output) -{ - ToRosData(input.handle(), output.handle); - output.event_type = input.event_type(); - output.axis_value = input.axis_value(); - - return 0; -} -int ToRosData(ActionNotification input, kortex_driver::ActionNotification &output) -{ - output.action_event = input.action_event(); - ToRosData(input.handle(), output.handle); - ToRosData(input.timestamp(), output.timestamp); - ToRosData(input.user_handle(), output.user_handle); - output.abort_details = input.abort_details(); - ToRosData(input.connection(), output.connection); - - return 0; -} -int ToRosData(ActionExecutionState input, kortex_driver::ActionExecutionState &output) -{ - output.action_event = input.action_event(); - ToRosData(input.handle(), output.handle); - - return 0; -} -int ToRosData(RobotEventNotification input, kortex_driver::RobotEventNotification &output) -{ - output.event = input.event(); - ToRosData(input.handle(), output.handle); - ToRosData(input.timestamp(), output.timestamp); - ToRosData(input.user_handle(), output.user_handle); - ToRosData(input.connection(), output.connection); - - return 0; -} -int ToRosData(FactoryNotification input, kortex_driver::FactoryNotification &output) -{ - output.event = input.event(); - ToRosData(input.timestamp(), output.timestamp); - ToRosData(input.user_handle(), output.user_handle); - ToRosData(input.connection(), output.connection); - - return 0; -} -int ToRosData(NetworkNotification input, kortex_driver::NetworkNotification &output) -{ - output.event = input.event(); - ToRosData(input.timestamp(), output.timestamp); - ToRosData(input.user_handle(), output.user_handle); - ToRosData(input.connection(), output.connection); - - return 0; -} -int ToRosData(ConfigurationChangeNotificationList input, kortex_driver::ConfigurationChangeNotificationList &output) -{ - output.notifications.clear(); - for(int i = 0; i < input.notifications_size(); i++) - { - kortex_driver::ConfigurationChangeNotification temp; - ToRosData(input.notifications(i), temp); - output.notifications.push_back(temp); - } - - return 0; -} -int ToRosData(MappingInfoNotificationList input, kortex_driver::MappingInfoNotificationList &output) -{ - output.notifications.clear(); - for(int i = 0; i < input.notifications_size(); i++) - { - kortex_driver::MappingInfoNotification temp; - ToRosData(input.notifications(i), temp); - output.notifications.push_back(temp); - } - - return 0; -} -int ToRosData(ControlModeNotificationList input, kortex_driver::ControlModeNotificationList &output) -{ - output.notifications.clear(); - for(int i = 0; i < input.notifications_size(); i++) - { - kortex_driver::ControlModeNotification temp; - ToRosData(input.notifications(i), temp); - output.notifications.push_back(temp); - } - - return 0; -} -int ToRosData(OperatingModeNotificationList input, kortex_driver::OperatingModeNotificationList &output) -{ - output.notifications.clear(); - for(int i = 0; i < input.notifications_size(); i++) - { - kortex_driver::OperatingModeNotification temp; - ToRosData(input.notifications(i), temp); - output.notifications.push_back(temp); - } - - return 0; -} -int ToRosData(ServoingModeNotificationList input, kortex_driver::ServoingModeNotificationList &output) -{ - output.notifications.clear(); - for(int i = 0; i < input.notifications_size(); i++) - { - kortex_driver::ServoingModeNotification temp; - ToRosData(input.notifications(i), temp); - output.notifications.push_back(temp); - } - - return 0; -} -int ToRosData(SequenceInfoNotificationList input, kortex_driver::SequenceInfoNotificationList &output) -{ - output.notifications.clear(); - for(int i = 0; i < input.notifications_size(); i++) - { - kortex_driver::SequenceInfoNotification temp; - ToRosData(input.notifications(i), temp); - output.notifications.push_back(temp); - } - - return 0; -} -int ToRosData(ProtectionZoneNotificationList input, kortex_driver::ProtectionZoneNotificationList &output) -{ - output.notifications.clear(); - for(int i = 0; i < input.notifications_size(); i++) - { - kortex_driver::ProtectionZoneNotification temp; - ToRosData(input.notifications(i), temp); - output.notifications.push_back(temp); - } - - return 0; -} -int ToRosData(UserNotificationList input, kortex_driver::UserNotificationList &output) -{ - output.notifications.clear(); - for(int i = 0; i < input.notifications_size(); i++) - { - kortex_driver::UserNotification temp; - ToRosData(input.notifications(i), temp); - output.notifications.push_back(temp); - } - - return 0; -} -int ToRosData(SafetyNotificationList input, kortex_driver::SafetyNotificationList &output) -{ - output.notifications.clear(); - for(int i = 0; i < input.notifications_size(); i++) - { - kortex_driver::SafetyNotification temp; - ToRosData(input.notifications(i), temp); - output.notifications.push_back(temp); - } - - return 0; -} -int ToRosData(ControllerNotificationList input, kortex_driver::ControllerNotificationList &output) -{ - output.notifications.clear(); - for(int i = 0; i < input.notifications_size(); i++) - { - kortex_driver::ControllerNotification temp; - ToRosData(input.notifications(i), temp); - output.notifications.push_back(temp); - } - - return 0; -} -int ToRosData(ActionNotificationList input, kortex_driver::ActionNotificationList &output) -{ - output.notifications.clear(); - for(int i = 0; i < input.notifications_size(); i++) - { - kortex_driver::ActionNotification temp; - ToRosData(input.notifications(i), temp); - output.notifications.push_back(temp); - } - - return 0; -} -int ToRosData(RobotEventNotificationList input, kortex_driver::RobotEventNotificationList &output) -{ - output.notifications.clear(); - for(int i = 0; i < input.notifications_size(); i++) - { - kortex_driver::RobotEventNotification temp; - ToRosData(input.notifications(i), temp); - output.notifications.push_back(temp); - } - - return 0; -} -int ToRosData(NetworkNotificationList input, kortex_driver::NetworkNotificationList &output) -{ - output.notifications.clear(); - for(int i = 0; i < input.notifications_size(); i++) - { - kortex_driver::NetworkNotification temp; - ToRosData(input.notifications(i), temp); - output.notifications.push_back(temp); - } - - return 0; -} -int ToRosData(MappingHandle input, kortex_driver::MappingHandle &output) -{ - output.identifier = input.identifier(); - output.permission = input.permission(); - - return 0; -} -int ToRosData(SafetyEvent input, kortex_driver::SafetyEvent &output) -{ - ToRosData(input.safety_handle(), output.safety_handle); - - return 0; -} -int ToRosData(ControllerEvent input, kortex_driver::ControllerEvent &output) -{ - output.input_type = input.input_type(); - output.behavior = input.behavior(); - output.input_identifier = input.input_identifier(); - - return 0; -} -int ToRosData(GpioEvent input, kortex_driver::GpioEvent &output) -{ - output.gpio_state = input.gpio_state(); - output.device_identifier = input.device_identifier(); - - return 0; -} -int ToRosData(MapEvent input, kortex_driver::MapEvent &output) -{ - output.name = input.name(); - - return 0; -} -int ToRosData(MapElement input, kortex_driver::MapElement &output) -{ - ToRosData(input.event(), output.event); - ToRosData(input.action(), output.action); - - return 0; -} -int ToRosData(ActivateMapHandle input, kortex_driver::ActivateMapHandle &output) -{ - ToRosData(input.mapping_handle(), output.mapping_handle); - ToRosData(input.map_group_handle(), output.map_group_handle); - ToRosData(input.map_handle(), output.map_handle); - - return 0; -} -int ToRosData(Map input, kortex_driver::Map &output) -{ - ToRosData(input.handle(), output.handle); - output.name = input.name(); - output.elements.clear(); - for(int i = 0; i < input.elements_size(); i++) - { - kortex_driver::MapElement temp; - ToRosData(input.elements(i), temp); - output.elements.push_back(temp); - } - - return 0; -} -int ToRosData(MapHandle input, kortex_driver::MapHandle &output) -{ - output.identifier = input.identifier(); - output.permission = input.permission(); - - return 0; -} -int ToRosData(MapList input, kortex_driver::MapList &output) -{ - output.map_list.clear(); - for(int i = 0; i < input.map_list_size(); i++) - { - kortex_driver::Map temp; - ToRosData(input.map_list(i), temp); - output.map_list.push_back(temp); - } - - return 0; -} -int ToRosData(MapGroupHandle input, kortex_driver::MapGroupHandle &output) -{ - output.identifier = input.identifier(); - output.permission = input.permission(); - - return 0; -} -int ToRosData(MapGroup input, kortex_driver::MapGroup &output) -{ - ToRosData(input.group_handle(), output.group_handle); - output.name = input.name(); - ToRosData(input.related_mapping_handle(), output.related_mapping_handle); - ToRosData(input.parent_group_handle(), output.parent_group_handle); - output.children_map_group_handles.clear(); - for(int i = 0; i < input.children_map_group_handles_size(); i++) - { - kortex_driver::MapGroupHandle temp; - ToRosData(input.children_map_group_handles(i), temp); - output.children_map_group_handles.push_back(temp); - } - output.map_handles.clear(); - for(int i = 0; i < input.map_handles_size(); i++) - { - kortex_driver::MapHandle temp; - ToRosData(input.map_handles(i), temp); - output.map_handles.push_back(temp); - } - output.application_data = input.application_data(); - - return 0; -} -int ToRosData(MapGroupList input, kortex_driver::MapGroupList &output) -{ - output.map_groups.clear(); - for(int i = 0; i < input.map_groups_size(); i++) - { - kortex_driver::MapGroup temp; - ToRosData(input.map_groups(i), temp); - output.map_groups.push_back(temp); - } - - return 0; -} -int ToRosData(Mapping input, kortex_driver::Mapping &output) -{ - ToRosData(input.handle(), output.handle); - output.name = input.name(); - output.controller_identifier = input.controller_identifier(); - ToRosData(input.active_map_group_handle(), output.active_map_group_handle); - output.map_group_handles.clear(); - for(int i = 0; i < input.map_group_handles_size(); i++) - { - kortex_driver::MapGroupHandle temp; - ToRosData(input.map_group_handles(i), temp); - output.map_group_handles.push_back(temp); - } - ToRosData(input.active_map_handle(), output.active_map_handle); - output.map_handles.clear(); - for(int i = 0; i < input.map_handles_size(); i++) - { - kortex_driver::MapHandle temp; - ToRosData(input.map_handles(i), temp); - output.map_handles.push_back(temp); - } - output.application_data = input.application_data(); - - return 0; -} -int ToRosData(MappingList input, kortex_driver::MappingList &output) -{ - output.mappings.clear(); - for(int i = 0; i < input.mappings_size(); i++) - { - kortex_driver::Mapping temp; - ToRosData(input.mappings(i), temp); - output.mappings.push_back(temp); - } - - return 0; -} -int ToRosData(TransformationMatrix input, kortex_driver::TransformationMatrix &output) -{ - ToRosData(input.r0(), output.r0); - ToRosData(input.r1(), output.r1); - ToRosData(input.r2(), output.r2); - ToRosData(input.r3(), output.r3); - - return 0; -} -int ToRosData(TransformationRow input, kortex_driver::TransformationRow &output) -{ - output.c0 = input.c0(); - output.c1 = input.c1(); - output.c2 = input.c2(); - output.c3 = input.c3(); - - return 0; -} -int ToRosData(Pose input, kortex_driver::Pose &output) -{ - output.x = input.x(); - output.y = input.y(); - output.z = input.z(); - output.theta_x = input.theta_x(); - output.theta_y = input.theta_y(); - output.theta_z = input.theta_z(); - - return 0; -} -int ToRosData(Position input, kortex_driver::Position &output) -{ - output.x = input.x(); - output.y = input.y(); - output.z = input.z(); - - return 0; -} -int ToRosData(Orientation input, kortex_driver::Orientation &output) -{ - output.theta_x = input.theta_x(); - output.theta_y = input.theta_y(); - output.theta_z = input.theta_z(); - - return 0; -} -int ToRosData(CartesianSpeed input, kortex_driver::CartesianSpeed &output) -{ - output.translation = input.translation(); - output.orientation = input.orientation(); - - return 0; -} -int ToRosData(CartesianTrajectoryConstraint input, kortex_driver::CartesianTrajectoryConstraint &output) -{ - - - auto oneof_type = input.type_case(); - - switch(oneof_type) - { - case CartesianTrajectoryConstraint::kSpeed: - { - kortex_driver::CartesianSpeed temp; - ToRosData(input.speed(), temp); - output.oneof_type.speed.push_back(temp); - break; - } - - case CartesianTrajectoryConstraint::kDuration: - { - break; - } - - } - return 0; -} -int ToRosData(JointTrajectoryConstraint input, kortex_driver::JointTrajectoryConstraint &output) -{ - output.type = input.type(); - output.value = input.value(); - - return 0; -} -int ToRosData(Twist input, kortex_driver::Twist &output) -{ - output.linear_x = input.linear_x(); - output.linear_y = input.linear_y(); - output.linear_z = input.linear_z(); - output.angular_x = input.angular_x(); - output.angular_y = input.angular_y(); - output.angular_z = input.angular_z(); - - return 0; -} -int ToRosData(Admittance input, kortex_driver::Admittance &output) -{ - output.admittance_mode = input.admittance_mode(); - - return 0; -} -int ToRosData(CartesianReferenceFrameRequest input, kortex_driver::CartesianReferenceFrameRequest &output) -{ - output.reference_frame = input.reference_frame(); - - return 0; -} -int ToRosData(ConstrainedPose input, kortex_driver::ConstrainedPose &output) -{ - ToRosData(input.target_pose(), output.target_pose); - ToRosData(input.constraint(), output.constraint); - - return 0; -} -int ToRosData(ConstrainedPosition input, kortex_driver::ConstrainedPosition &output) -{ - ToRosData(input.target_position(), output.target_position); - ToRosData(input.constraint(), output.constraint); - - return 0; -} -int ToRosData(ConstrainedOrientation input, kortex_driver::ConstrainedOrientation &output) -{ - ToRosData(input.target_orientation(), output.target_orientation); - ToRosData(input.constraint(), output.constraint); - - return 0; -} -int ToRosData(TwistCommand input, kortex_driver::TwistCommand &output) -{ - output.mode = input.mode(); - ToRosData(input.twist(), output.twist); - output.duration = input.duration(); - - return 0; -} -int ToRosData(ConstrainedJointAngles input, kortex_driver::ConstrainedJointAngles &output) -{ - ToRosData(input.joint_angles(), output.joint_angles); - ToRosData(input.constraint(), output.constraint); - - return 0; -} -int ToRosData(ConstrainedJointAngle input, kortex_driver::ConstrainedJointAngle &output) -{ - output.joint_identifier = input.joint_identifier(); - output.value = input.value(); - ToRosData(input.constraint(), output.constraint); - - return 0; -} -int ToRosData(JointAngles input, kortex_driver::JointAngles &output) -{ - output.joint_angles.clear(); - for(int i = 0; i < input.joint_angles_size(); i++) - { - kortex_driver::JointAngle temp; - ToRosData(input.joint_angles(i), temp); - output.joint_angles.push_back(temp); - } - - return 0; -} -int ToRosData(JointAngle input, kortex_driver::JointAngle &output) -{ - output.joint_identifier = input.joint_identifier(); - output.value = input.value(); - - return 0; -} -int ToRosData(JointSpeeds input, kortex_driver::JointSpeeds &output) -{ - output.joint_speeds.clear(); - for(int i = 0; i < input.joint_speeds_size(); i++) - { - kortex_driver::JointSpeed temp; - ToRosData(input.joint_speeds(i), temp); - output.joint_speeds.push_back(temp); - } - output.duration = input.duration(); - - return 0; -} -int ToRosData(JointSpeed input, kortex_driver::JointSpeed &output) -{ - output.joint_identifier = input.joint_identifier(); - output.value = input.value(); - output.duration = input.duration(); - - return 0; -} -int ToRosData(GripperCommand input, kortex_driver::GripperCommand &output) -{ - output.mode = input.mode(); - ToRosData(input.gripper(), output.gripper); - output.duration = input.duration(); - - return 0; -} -int ToRosData(GripperRequest input, kortex_driver::GripperRequest &output) -{ - output.mode = input.mode(); - - return 0; -} -int ToRosData(Gripper input, kortex_driver::Gripper &output) -{ - output.finger.clear(); - for(int i = 0; i < input.finger_size(); i++) - { - kortex_driver::Finger temp; - ToRosData(input.finger(i), temp); - output.finger.push_back(temp); - } - - return 0; -} -int ToRosData(Finger input, kortex_driver::Finger &output) -{ - output.finger_identifier = input.finger_identifier(); - output.value = input.value(); - - return 0; -} -int ToRosData(SystemTime input, kortex_driver::SystemTime &output) -{ - output.sec = input.sec(); - output.min = input.min(); - output.hour = input.hour(); - output.mday = input.mday(); - output.mon = input.mon(); - output.year = input.year(); - - return 0; -} -int ToRosData(ActuatorInformation input, kortex_driver::ActuatorInformation &output) -{ - output.count = input.count(); - - return 0; -} -int ToRosData(ArmStateInformation input, kortex_driver::ArmStateInformation &output) -{ - output.active_state = input.active_state(); - ToRosData(input.connection(), output.connection); - - return 0; -} -int ToRosData(ArmStateNotification input, kortex_driver::ArmStateNotification &output) -{ - output.active_state = input.active_state(); - ToRosData(input.timestamp(), output.timestamp); - ToRosData(input.connection(), output.connection); - - return 0; -} -int ToRosData(CountryCode input, kortex_driver::CountryCode &output) -{ - output.identifier = input.identifier(); - - return 0; -} diff --git a/kortex_driver/src/base_ros_converter.h b/kortex_driver/src/base_ros_converter.h deleted file mode 100644 index 71c760b9..00000000 --- a/kortex_driver/src/base_ros_converter.h +++ /dev/null @@ -1,310 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_BaseROS_CONVERTER_H_ -#define _KORTEX_BaseROS_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "kortex_driver/FullUserProfile.h" -#include "kortex_driver/UserProfile.h" -#include "kortex_driver/UserProfileList.h" -#include "kortex_driver/UserList.h" -#include "kortex_driver/PasswordChange.h" -#include "kortex_driver/SequenceHandle.h" -#include "kortex_driver/AdvancedSequenceHandle.h" -#include "kortex_driver/SequenceTaskHandle.h" -#include "kortex_driver/SequenceTask.h" -#include "kortex_driver/Sequence.h" -#include "kortex_driver/SequenceList.h" -#include "kortex_driver/AppendActionInformation.h" -#include "kortex_driver/ActionHandle.h" -#include "kortex_driver/RequestedActionType.h" -#include "kortex_driver/Action.h" -#include "kortex_driver/SwitchControlMapping.h" -#include "kortex_driver/ChangeTwist.h" -#include "kortex_driver/ChangeJointSpeeds.h" -#include "kortex_driver/EmergencyStop.h" -#include "kortex_driver/Faults.h" -#include "kortex_driver/Delay.h" -#include "kortex_driver/Stop.h" -#include "kortex_driver/ActionList.h" -#include "kortex_driver/Timeout.h" -#include "kortex_driver/Ssid.h" -#include "kortex_driver/CommunicationInterfaceConfiguration.h" -#include "kortex_driver/NetworkHandle.h" -#include "kortex_driver/IPv4Configuration.h" -#include "kortex_driver/IPv4Information.h" -#include "kortex_driver/FullIPv4Configuration.h" -#include "kortex_driver/WifiInformation.h" -#include "kortex_driver/WifiInformationList.h" -#include "kortex_driver/WifiConfiguration.h" -#include "kortex_driver/WifiConfigurationList.h" -#include "kortex_driver/ProtectionZoneHandle.h" -#include "kortex_driver/RotationMatrixRow.h" -#include "kortex_driver/RotationMatrix.h" -#include "kortex_driver/Point.h" -#include "kortex_driver/ZoneShape.h" -#include "kortex_driver/ProtectionZone.h" -#include "kortex_driver/ProtectionZoneList.h" -#include "kortex_driver/LimitationTypeIdentifier.h" -#include "kortex_driver/CartesianLimitation.h" -#include "kortex_driver/CartesianLimitationList.h" -#include "kortex_driver/JointLimitationValue.h" -#include "kortex_driver/JointLimitationValueList.h" -#include "kortex_driver/JointLimitation.h" -#include "kortex_driver/JointLimitationTypeIdentifier.h" -#include "kortex_driver/Query.h" -#include "kortex_driver/ConfigurationChangeNotification.h" -#include "kortex_driver/MappingInfoNotification.h" -#include "kortex_driver/ControlModeInformation.h" -#include "kortex_driver/ControlModeNotification.h" -#include "kortex_driver/ServoingModeInformation.h" -#include "kortex_driver/OperatingModeInformation.h" -#include "kortex_driver/OperatingModeNotification.h" -#include "kortex_driver/ServoingModeNotification.h" -#include "kortex_driver/SequenceInfoNotification.h" -#include "kortex_driver/SequenceInformation.h" -#include "kortex_driver/ProtectionZoneNotification.h" -#include "kortex_driver/ProtectionZoneInformation.h" -#include "kortex_driver/UserNotification.h" -#include "kortex_driver/ControllerHandle.h" -#include "kortex_driver/ControllerElementHandle.h" -#include "kortex_driver/ControllerNotification.h" -#include "kortex_driver/ControllerList.h" -#include "kortex_driver/ControllerState.h" -#include "kortex_driver/ControllerElementState.h" -#include "kortex_driver/ActionNotification.h" -#include "kortex_driver/ActionExecutionState.h" -#include "kortex_driver/RobotEventNotification.h" -#include "kortex_driver/FactoryNotification.h" -#include "kortex_driver/NetworkNotification.h" -#include "kortex_driver/ConfigurationChangeNotificationList.h" -#include "kortex_driver/MappingInfoNotificationList.h" -#include "kortex_driver/ControlModeNotificationList.h" -#include "kortex_driver/OperatingModeNotificationList.h" -#include "kortex_driver/ServoingModeNotificationList.h" -#include "kortex_driver/SequenceInfoNotificationList.h" -#include "kortex_driver/ProtectionZoneNotificationList.h" -#include "kortex_driver/UserNotificationList.h" -#include "kortex_driver/SafetyNotificationList.h" -#include "kortex_driver/ControllerNotificationList.h" -#include "kortex_driver/ActionNotificationList.h" -#include "kortex_driver/RobotEventNotificationList.h" -#include "kortex_driver/NetworkNotificationList.h" -#include "kortex_driver/MappingHandle.h" -#include "kortex_driver/SafetyEvent.h" -#include "kortex_driver/ControllerEvent.h" -#include "kortex_driver/GpioEvent.h" -#include "kortex_driver/MapEvent.h" -#include "kortex_driver/MapElement.h" -#include "kortex_driver/ActivateMapHandle.h" -#include "kortex_driver/Map.h" -#include "kortex_driver/MapHandle.h" -#include "kortex_driver/MapList.h" -#include "kortex_driver/MapGroupHandle.h" -#include "kortex_driver/MapGroup.h" -#include "kortex_driver/MapGroupList.h" -#include "kortex_driver/Mapping.h" -#include "kortex_driver/MappingList.h" -#include "kortex_driver/TransformationMatrix.h" -#include "kortex_driver/TransformationRow.h" -#include "kortex_driver/Pose.h" -#include "kortex_driver/Position.h" -#include "kortex_driver/Orientation.h" -#include "kortex_driver/CartesianSpeed.h" -#include "kortex_driver/CartesianTrajectoryConstraint.h" -#include "kortex_driver/JointTrajectoryConstraint.h" -#include "kortex_driver/Twist.h" -#include "kortex_driver/Admittance.h" -#include "kortex_driver/CartesianReferenceFrameRequest.h" -#include "kortex_driver/ConstrainedPose.h" -#include "kortex_driver/ConstrainedPosition.h" -#include "kortex_driver/ConstrainedOrientation.h" -#include "kortex_driver/TwistCommand.h" -#include "kortex_driver/ConstrainedJointAngles.h" -#include "kortex_driver/ConstrainedJointAngle.h" -#include "kortex_driver/JointAngles.h" -#include "kortex_driver/JointAngle.h" -#include "kortex_driver/JointSpeeds.h" -#include "kortex_driver/JointSpeed.h" -#include "kortex_driver/GripperCommand.h" -#include "kortex_driver/GripperRequest.h" -#include "kortex_driver/Gripper.h" -#include "kortex_driver/Finger.h" -#include "kortex_driver/SystemTime.h" -#include "kortex_driver/ActuatorInformation.h" -#include "kortex_driver/ArmStateInformation.h" -#include "kortex_driver/ArmStateNotification.h" -#include "kortex_driver/CountryCode.h" - - -using namespace Kinova::Api::Base; - -int ToRosData(FullUserProfile input, kortex_driver::FullUserProfile &output); -int ToRosData(UserProfile input, kortex_driver::UserProfile &output); -int ToRosData(UserProfileList input, kortex_driver::UserProfileList &output); -int ToRosData(UserList input, kortex_driver::UserList &output); -int ToRosData(PasswordChange input, kortex_driver::PasswordChange &output); -int ToRosData(SequenceHandle input, kortex_driver::SequenceHandle &output); -int ToRosData(AdvancedSequenceHandle input, kortex_driver::AdvancedSequenceHandle &output); -int ToRosData(SequenceTaskHandle input, kortex_driver::SequenceTaskHandle &output); -int ToRosData(SequenceTask input, kortex_driver::SequenceTask &output); -int ToRosData(Sequence input, kortex_driver::Sequence &output); -int ToRosData(SequenceList input, kortex_driver::SequenceList &output); -int ToRosData(AppendActionInformation input, kortex_driver::AppendActionInformation &output); -int ToRosData(ActionHandle input, kortex_driver::ActionHandle &output); -int ToRosData(RequestedActionType input, kortex_driver::RequestedActionType &output); -int ToRosData(Action input, kortex_driver::Action &output); -int ToRosData(SwitchControlMapping input, kortex_driver::SwitchControlMapping &output); -int ToRosData(ChangeTwist input, kortex_driver::ChangeTwist &output); -int ToRosData(ChangeJointSpeeds input, kortex_driver::ChangeJointSpeeds &output); -int ToRosData(EmergencyStop input, kortex_driver::EmergencyStop &output); -int ToRosData(Faults input, kortex_driver::Faults &output); -int ToRosData(Delay input, kortex_driver::Delay &output); -int ToRosData(Stop input, kortex_driver::Stop &output); -int ToRosData(ActionList input, kortex_driver::ActionList &output); -int ToRosData(Timeout input, kortex_driver::Timeout &output); -int ToRosData(Ssid input, kortex_driver::Ssid &output); -int ToRosData(CommunicationInterfaceConfiguration input, kortex_driver::CommunicationInterfaceConfiguration &output); -int ToRosData(NetworkHandle input, kortex_driver::NetworkHandle &output); -int ToRosData(IPv4Configuration input, kortex_driver::IPv4Configuration &output); -int ToRosData(IPv4Information input, kortex_driver::IPv4Information &output); -int ToRosData(FullIPv4Configuration input, kortex_driver::FullIPv4Configuration &output); -int ToRosData(WifiInformation input, kortex_driver::WifiInformation &output); -int ToRosData(WifiInformationList input, kortex_driver::WifiInformationList &output); -int ToRosData(WifiConfiguration input, kortex_driver::WifiConfiguration &output); -int ToRosData(WifiConfigurationList input, kortex_driver::WifiConfigurationList &output); -int ToRosData(ProtectionZoneHandle input, kortex_driver::ProtectionZoneHandle &output); -int ToRosData(RotationMatrixRow input, kortex_driver::RotationMatrixRow &output); -int ToRosData(RotationMatrix input, kortex_driver::RotationMatrix &output); -int ToRosData(Point input, kortex_driver::Point &output); -int ToRosData(ZoneShape input, kortex_driver::ZoneShape &output); -int ToRosData(ProtectionZone input, kortex_driver::ProtectionZone &output); -int ToRosData(ProtectionZoneList input, kortex_driver::ProtectionZoneList &output); -int ToRosData(LimitationTypeIdentifier input, kortex_driver::LimitationTypeIdentifier &output); -int ToRosData(CartesianLimitation input, kortex_driver::CartesianLimitation &output); -int ToRosData(CartesianLimitationList input, kortex_driver::CartesianLimitationList &output); -int ToRosData(JointLimitationValue input, kortex_driver::JointLimitationValue &output); -int ToRosData(JointLimitationValueList input, kortex_driver::JointLimitationValueList &output); -int ToRosData(JointLimitation input, kortex_driver::JointLimitation &output); -int ToRosData(JointLimitationTypeIdentifier input, kortex_driver::JointLimitationTypeIdentifier &output); -int ToRosData(Query input, kortex_driver::Query &output); -int ToRosData(ConfigurationChangeNotification input, kortex_driver::ConfigurationChangeNotification &output); -int ToRosData(MappingInfoNotification input, kortex_driver::MappingInfoNotification &output); -int ToRosData(ControlModeInformation input, kortex_driver::ControlModeInformation &output); -int ToRosData(ControlModeNotification input, kortex_driver::ControlModeNotification &output); -int ToRosData(ServoingModeInformation input, kortex_driver::ServoingModeInformation &output); -int ToRosData(OperatingModeInformation input, kortex_driver::OperatingModeInformation &output); -int ToRosData(OperatingModeNotification input, kortex_driver::OperatingModeNotification &output); -int ToRosData(ServoingModeNotification input, kortex_driver::ServoingModeNotification &output); -int ToRosData(SequenceInfoNotification input, kortex_driver::SequenceInfoNotification &output); -int ToRosData(SequenceInformation input, kortex_driver::SequenceInformation &output); -int ToRosData(ProtectionZoneNotification input, kortex_driver::ProtectionZoneNotification &output); -int ToRosData(ProtectionZoneInformation input, kortex_driver::ProtectionZoneInformation &output); -int ToRosData(UserNotification input, kortex_driver::UserNotification &output); -int ToRosData(ControllerHandle input, kortex_driver::ControllerHandle &output); -int ToRosData(ControllerElementHandle input, kortex_driver::ControllerElementHandle &output); -int ToRosData(ControllerNotification input, kortex_driver::ControllerNotification &output); -int ToRosData(ControllerList input, kortex_driver::ControllerList &output); -int ToRosData(ControllerState input, kortex_driver::ControllerState &output); -int ToRosData(ControllerElementState input, kortex_driver::ControllerElementState &output); -int ToRosData(ActionNotification input, kortex_driver::ActionNotification &output); -int ToRosData(ActionExecutionState input, kortex_driver::ActionExecutionState &output); -int ToRosData(RobotEventNotification input, kortex_driver::RobotEventNotification &output); -int ToRosData(FactoryNotification input, kortex_driver::FactoryNotification &output); -int ToRosData(NetworkNotification input, kortex_driver::NetworkNotification &output); -int ToRosData(ConfigurationChangeNotificationList input, kortex_driver::ConfigurationChangeNotificationList &output); -int ToRosData(MappingInfoNotificationList input, kortex_driver::MappingInfoNotificationList &output); -int ToRosData(ControlModeNotificationList input, kortex_driver::ControlModeNotificationList &output); -int ToRosData(OperatingModeNotificationList input, kortex_driver::OperatingModeNotificationList &output); -int ToRosData(ServoingModeNotificationList input, kortex_driver::ServoingModeNotificationList &output); -int ToRosData(SequenceInfoNotificationList input, kortex_driver::SequenceInfoNotificationList &output); -int ToRosData(ProtectionZoneNotificationList input, kortex_driver::ProtectionZoneNotificationList &output); -int ToRosData(UserNotificationList input, kortex_driver::UserNotificationList &output); -int ToRosData(SafetyNotificationList input, kortex_driver::SafetyNotificationList &output); -int ToRosData(ControllerNotificationList input, kortex_driver::ControllerNotificationList &output); -int ToRosData(ActionNotificationList input, kortex_driver::ActionNotificationList &output); -int ToRosData(RobotEventNotificationList input, kortex_driver::RobotEventNotificationList &output); -int ToRosData(NetworkNotificationList input, kortex_driver::NetworkNotificationList &output); -int ToRosData(MappingHandle input, kortex_driver::MappingHandle &output); -int ToRosData(SafetyEvent input, kortex_driver::SafetyEvent &output); -int ToRosData(ControllerEvent input, kortex_driver::ControllerEvent &output); -int ToRosData(GpioEvent input, kortex_driver::GpioEvent &output); -int ToRosData(MapEvent input, kortex_driver::MapEvent &output); -int ToRosData(MapElement input, kortex_driver::MapElement &output); -int ToRosData(ActivateMapHandle input, kortex_driver::ActivateMapHandle &output); -int ToRosData(Map input, kortex_driver::Map &output); -int ToRosData(MapHandle input, kortex_driver::MapHandle &output); -int ToRosData(MapList input, kortex_driver::MapList &output); -int ToRosData(MapGroupHandle input, kortex_driver::MapGroupHandle &output); -int ToRosData(MapGroup input, kortex_driver::MapGroup &output); -int ToRosData(MapGroupList input, kortex_driver::MapGroupList &output); -int ToRosData(Mapping input, kortex_driver::Mapping &output); -int ToRosData(MappingList input, kortex_driver::MappingList &output); -int ToRosData(TransformationMatrix input, kortex_driver::TransformationMatrix &output); -int ToRosData(TransformationRow input, kortex_driver::TransformationRow &output); -int ToRosData(Pose input, kortex_driver::Pose &output); -int ToRosData(Position input, kortex_driver::Position &output); -int ToRosData(Orientation input, kortex_driver::Orientation &output); -int ToRosData(CartesianSpeed input, kortex_driver::CartesianSpeed &output); -int ToRosData(CartesianTrajectoryConstraint input, kortex_driver::CartesianTrajectoryConstraint &output); -int ToRosData(JointTrajectoryConstraint input, kortex_driver::JointTrajectoryConstraint &output); -int ToRosData(Twist input, kortex_driver::Twist &output); -int ToRosData(Admittance input, kortex_driver::Admittance &output); -int ToRosData(CartesianReferenceFrameRequest input, kortex_driver::CartesianReferenceFrameRequest &output); -int ToRosData(ConstrainedPose input, kortex_driver::ConstrainedPose &output); -int ToRosData(ConstrainedPosition input, kortex_driver::ConstrainedPosition &output); -int ToRosData(ConstrainedOrientation input, kortex_driver::ConstrainedOrientation &output); -int ToRosData(TwistCommand input, kortex_driver::TwistCommand &output); -int ToRosData(ConstrainedJointAngles input, kortex_driver::ConstrainedJointAngles &output); -int ToRosData(ConstrainedJointAngle input, kortex_driver::ConstrainedJointAngle &output); -int ToRosData(JointAngles input, kortex_driver::JointAngles &output); -int ToRosData(JointAngle input, kortex_driver::JointAngle &output); -int ToRosData(JointSpeeds input, kortex_driver::JointSpeeds &output); -int ToRosData(JointSpeed input, kortex_driver::JointSpeed &output); -int ToRosData(GripperCommand input, kortex_driver::GripperCommand &output); -int ToRosData(GripperRequest input, kortex_driver::GripperRequest &output); -int ToRosData(Gripper input, kortex_driver::Gripper &output); -int ToRosData(Finger input, kortex_driver::Finger &output); -int ToRosData(SystemTime input, kortex_driver::SystemTime &output); -int ToRosData(ActuatorInformation input, kortex_driver::ActuatorInformation &output); -int ToRosData(ArmStateInformation input, kortex_driver::ArmStateInformation &output); -int ToRosData(ArmStateNotification input, kortex_driver::ArmStateNotification &output); -int ToRosData(CountryCode input, kortex_driver::CountryCode &output); - -#endif \ No newline at end of file diff --git a/kortex_driver/src/basecyclic_proto_converter.cpp b/kortex_driver/src/basecyclic_proto_converter.cpp deleted file mode 100644 index b4e14bb8..00000000 --- a/kortex_driver/src/basecyclic_proto_converter.cpp +++ /dev/null @@ -1,212 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "basecyclic_proto_converter.h" - -#include "common_proto_converter.h" - - -int ToProtoData(kortex_driver::ActuatorCommand input, ActuatorCommand *output) -{ - output->set_command_id(input.command_id); - output->set_flags(input.flags); - output->set_position(input.position); - output->set_velocity(input.velocity); - output->set_torque_joint(input.torque_joint); - output->set_current_motor(input.current_motor); - - return 0; -} -int ToProtoData(kortex_driver::InterconnectCommand input, InterconnectCommand *output) -{ - output->set_command_id(input.command_id); - output->set_flags(input.flags); - output->set_position(input.position); - output->set_velocity(input.velocity); - output->set_force(input.force); - - return 0; -} -int ToProtoData(kortex_driver::ActuatorFeedback input, ActuatorFeedback *output) -{ - output->set_command_id(input.command_id); - output->set_status_flags(input.status_flags); - output->set_jitter_comm(input.jitter_comm); - output->set_position(input.position); - output->set_velocity(input.velocity); - output->set_torque(input.torque); - output->set_current_motor(input.current_motor); - output->set_voltage(input.voltage); - output->set_temperature_motor(input.temperature_motor); - output->set_temperature_core(input.temperature_core); - output->set_fault_bank_a(input.fault_bank_a); - output->set_fault_bank_b(input.fault_bank_b); - output->set_warning_bank_a(input.warning_bank_a); - output->set_warning_bank_b(input.warning_bank_b); - - return 0; -} -int ToProtoData(kortex_driver::InterconnectFeedback input, InterconnectFeedback *output) -{ - output->set_command_id(input.command_id); - output->set_status_flags(input.status_flags); - output->set_jitter_comm(input.jitter_comm); - output->set_position(input.position); - output->set_velocity(input.velocity); - output->set_force(input.force); - output->set_imu_acceleration_x(input.imu_acceleration_x); - output->set_imu_acceleration_y(input.imu_acceleration_y); - output->set_imu_acceleration_z(input.imu_acceleration_z); - output->set_imu_angular_velocity_x(input.imu_angular_velocity_x); - output->set_imu_angular_velocity_y(input.imu_angular_velocity_y); - output->set_imu_angular_velocity_z(input.imu_angular_velocity_z); - output->set_voltage(input.voltage); - output->set_temperature_core(input.temperature_core); - output->set_fault_bank_a(input.fault_bank_a); - output->set_fault_bank_b(input.fault_bank_b); - output->set_warning_bank_a(input.warning_bank_a); - output->set_warning_bank_b(input.warning_bank_b); - - return 0; -} -int ToProtoData(kortex_driver::ActuatorCustomData input, ActuatorCustomData *output) -{ - output->set_command_id(input.command_id); - output->set_custom_data_0(input.custom_data_0); - output->set_custom_data_1(input.custom_data_1); - output->set_custom_data_2(input.custom_data_2); - output->set_custom_data_3(input.custom_data_3); - output->set_custom_data_4(input.custom_data_4); - output->set_custom_data_5(input.custom_data_5); - output->set_custom_data_6(input.custom_data_6); - output->set_custom_data_7(input.custom_data_7); - output->set_custom_data_8(input.custom_data_8); - output->set_custom_data_9(input.custom_data_9); - output->set_custom_data_10(input.custom_data_10); - output->set_custom_data_11(input.custom_data_11); - output->set_custom_data_12(input.custom_data_12); - output->set_custom_data_13(input.custom_data_13); - output->set_custom_data_14(input.custom_data_14); - output->set_custom_data_15(input.custom_data_15); - - return 0; -} -int ToProtoData(kortex_driver::InterconnectCustomData input, InterconnectCustomData *output) -{ - output->set_command_id(input.command_id); - output->set_custom_data_0(input.custom_data_0); - output->set_custom_data_1(input.custom_data_1); - output->set_custom_data_2(input.custom_data_2); - output->set_custom_data_3(input.custom_data_3); - output->set_custom_data_4(input.custom_data_4); - output->set_custom_data_5(input.custom_data_5); - output->set_custom_data_6(input.custom_data_6); - output->set_custom_data_7(input.custom_data_7); - output->set_custom_data_8(input.custom_data_8); - output->set_custom_data_9(input.custom_data_9); - output->set_custom_data_10(input.custom_data_10); - output->set_custom_data_11(input.custom_data_11); - output->set_custom_data_12(input.custom_data_12); - output->set_custom_data_13(input.custom_data_13); - output->set_custom_data_14(input.custom_data_14); - output->set_custom_data_15(input.custom_data_15); - - return 0; -} -int ToProtoData(kortex_driver::BaseFeedback input, BaseFeedback *output) -{ - output->set_active_state_connection_identifier(input.active_state_connection_identifier); - output->set_active_state((Kinova::Api::Common::ArmState)input.active_state); - output->set_arm_voltage(input.arm_voltage); - output->set_arm_current(input.arm_current); - output->set_temperature_cpu(input.temperature_cpu); - output->set_temperature_ambient(input.temperature_ambient); - output->set_imu_acceleration_x(input.imu_acceleration_x); - output->set_imu_acceleration_y(input.imu_acceleration_y); - output->set_imu_acceleration_z(input.imu_acceleration_z); - output->set_imu_angular_velocity_x(input.imu_angular_velocity_x); - output->set_imu_angular_velocity_y(input.imu_angular_velocity_y); - output->set_imu_angular_velocity_z(input.imu_angular_velocity_z); - output->set_tool_pose_x(input.tool_pose_x); - output->set_tool_pose_y(input.tool_pose_y); - output->set_tool_pose_z(input.tool_pose_z); - output->set_tool_pose_theta_x(input.tool_pose_theta_x); - output->set_tool_pose_theta_y(input.tool_pose_theta_y); - output->set_tool_pose_theta_z(input.tool_pose_theta_z); - output->set_tool_twist_linear_x(input.tool_twist_linear_x); - output->set_tool_twist_linear_y(input.tool_twist_linear_y); - output->set_tool_twist_linear_z(input.tool_twist_linear_z); - output->set_tool_twist_angular_x(input.tool_twist_angular_x); - output->set_tool_twist_angular_y(input.tool_twist_angular_y); - output->set_tool_twist_angular_z(input.tool_twist_angular_z); - output->set_tool_external_wrench_force_x(input.tool_external_wrench_force_x); - output->set_tool_external_wrench_force_y(input.tool_external_wrench_force_y); - output->set_tool_external_wrench_force_z(input.tool_external_wrench_force_z); - output->set_tool_external_wrench_torque_x(input.tool_external_wrench_torque_x); - output->set_tool_external_wrench_torque_y(input.tool_external_wrench_torque_y); - output->set_tool_external_wrench_torque_z(input.tool_external_wrench_torque_z); - output->set_fault_bank_a(input.fault_bank_a); - output->set_fault_bank_b(input.fault_bank_b); - output->set_warning_bank_a(input.warning_bank_a); - output->set_warning_bank_b(input.warning_bank_b); - - return 0; -} -int ToProtoData(kortex_driver::CustomData input, CustomData *output) -{ - output->set_frame_id(input.frame_id); - output->set_custom_data_0(input.custom_data_0); - output->set_custom_data_1(input.custom_data_1); - output->set_custom_data_2(input.custom_data_2); - output->set_custom_data_3(input.custom_data_3); - output->set_custom_data_4(input.custom_data_4); - output->set_custom_data_5(input.custom_data_5); - output->set_custom_data_6(input.custom_data_6); - output->set_custom_data_7(input.custom_data_7); - output->clear_actuators_custom_data(); - for(int i = 0; i < input.actuators_custom_data.size(); i++) - { - ToProtoData(input.actuators_custom_data[i], output->add_actuators_custom_data()); - } - ToProtoData(input.interconnect_custom_data, output->mutable_interconnect_custom_data()); - - return 0; -} -int ToProtoData(kortex_driver::Command input, Command *output) -{ - output->set_frame_id(input.frame_id); - output->clear_actuators(); - for(int i = 0; i < input.actuators.size(); i++) - { - ToProtoData(input.actuators[i], output->add_actuators()); - } - ToProtoData(input.interconnect, output->mutable_interconnect()); - - return 0; -} -int ToProtoData(kortex_driver::Feedback input, Feedback *output) -{ - output->set_frame_id(input.frame_id); - ToProtoData(input.base, output->mutable_base()); - output->clear_actuators(); - for(int i = 0; i < input.actuators.size(); i++) - { - ToProtoData(input.actuators[i], output->add_actuators()); - } - ToProtoData(input.interconnect, output->mutable_interconnect()); - - return 0; -} diff --git a/kortex_driver/src/basecyclic_proto_converter.h b/kortex_driver/src/basecyclic_proto_converter.h deleted file mode 100644 index 1dc3d079..00000000 --- a/kortex_driver/src/basecyclic_proto_converter.h +++ /dev/null @@ -1,68 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_BaseCyclicPROTO_CONVERTER_H_ -#define _KORTEX_BaseCyclicPROTO_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "kortex_driver/ActuatorCommand.h" -#include "kortex_driver/InterconnectCommand.h" -#include "kortex_driver/ActuatorFeedback.h" -#include "kortex_driver/InterconnectFeedback.h" -#include "kortex_driver/ActuatorCustomData.h" -#include "kortex_driver/InterconnectCustomData.h" -#include "kortex_driver/BaseFeedback.h" -#include "kortex_driver/CustomData.h" -#include "kortex_driver/Command.h" -#include "kortex_driver/Feedback.h" - - -using namespace Kinova::Api::BaseCyclic; - -int ToProtoData(kortex_driver::ActuatorCommand intput, ActuatorCommand *output); -int ToProtoData(kortex_driver::InterconnectCommand intput, InterconnectCommand *output); -int ToProtoData(kortex_driver::ActuatorFeedback intput, ActuatorFeedback *output); -int ToProtoData(kortex_driver::InterconnectFeedback intput, InterconnectFeedback *output); -int ToProtoData(kortex_driver::ActuatorCustomData intput, ActuatorCustomData *output); -int ToProtoData(kortex_driver::InterconnectCustomData intput, InterconnectCustomData *output); -int ToProtoData(kortex_driver::BaseFeedback intput, BaseFeedback *output); -int ToProtoData(kortex_driver::CustomData intput, CustomData *output); -int ToProtoData(kortex_driver::Command intput, Command *output); -int ToProtoData(kortex_driver::Feedback intput, Feedback *output); - -#endif \ No newline at end of file diff --git a/kortex_driver/src/basecyclic_ros_converter.cpp b/kortex_driver/src/basecyclic_ros_converter.cpp deleted file mode 100644 index 5283ee52..00000000 --- a/kortex_driver/src/basecyclic_ros_converter.cpp +++ /dev/null @@ -1,218 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "basecyclic_ros_converter.h" - -#include "common_ros_converter.h" - - -int ToRosData(ActuatorCommand input, kortex_driver::ActuatorCommand &output) -{ - output.command_id = input.command_id(); - output.flags = input.flags(); - output.position = input.position(); - output.velocity = input.velocity(); - output.torque_joint = input.torque_joint(); - output.current_motor = input.current_motor(); - - return 0; -} -int ToRosData(InterconnectCommand input, kortex_driver::InterconnectCommand &output) -{ - output.command_id = input.command_id(); - output.flags = input.flags(); - output.position = input.position(); - output.velocity = input.velocity(); - output.force = input.force(); - - return 0; -} -int ToRosData(ActuatorFeedback input, kortex_driver::ActuatorFeedback &output) -{ - output.command_id = input.command_id(); - output.status_flags = input.status_flags(); - output.jitter_comm = input.jitter_comm(); - output.position = input.position(); - output.velocity = input.velocity(); - output.torque = input.torque(); - output.current_motor = input.current_motor(); - output.voltage = input.voltage(); - output.temperature_motor = input.temperature_motor(); - output.temperature_core = input.temperature_core(); - output.fault_bank_a = input.fault_bank_a(); - output.fault_bank_b = input.fault_bank_b(); - output.warning_bank_a = input.warning_bank_a(); - output.warning_bank_b = input.warning_bank_b(); - - return 0; -} -int ToRosData(InterconnectFeedback input, kortex_driver::InterconnectFeedback &output) -{ - output.command_id = input.command_id(); - output.status_flags = input.status_flags(); - output.jitter_comm = input.jitter_comm(); - output.position = input.position(); - output.velocity = input.velocity(); - output.force = input.force(); - output.imu_acceleration_x = input.imu_acceleration_x(); - output.imu_acceleration_y = input.imu_acceleration_y(); - output.imu_acceleration_z = input.imu_acceleration_z(); - output.imu_angular_velocity_x = input.imu_angular_velocity_x(); - output.imu_angular_velocity_y = input.imu_angular_velocity_y(); - output.imu_angular_velocity_z = input.imu_angular_velocity_z(); - output.voltage = input.voltage(); - output.temperature_core = input.temperature_core(); - output.fault_bank_a = input.fault_bank_a(); - output.fault_bank_b = input.fault_bank_b(); - output.warning_bank_a = input.warning_bank_a(); - output.warning_bank_b = input.warning_bank_b(); - - return 0; -} -int ToRosData(ActuatorCustomData input, kortex_driver::ActuatorCustomData &output) -{ - output.command_id = input.command_id(); - output.custom_data_0 = input.custom_data_0(); - output.custom_data_1 = input.custom_data_1(); - output.custom_data_2 = input.custom_data_2(); - output.custom_data_3 = input.custom_data_3(); - output.custom_data_4 = input.custom_data_4(); - output.custom_data_5 = input.custom_data_5(); - output.custom_data_6 = input.custom_data_6(); - output.custom_data_7 = input.custom_data_7(); - output.custom_data_8 = input.custom_data_8(); - output.custom_data_9 = input.custom_data_9(); - output.custom_data_10 = input.custom_data_10(); - output.custom_data_11 = input.custom_data_11(); - output.custom_data_12 = input.custom_data_12(); - output.custom_data_13 = input.custom_data_13(); - output.custom_data_14 = input.custom_data_14(); - output.custom_data_15 = input.custom_data_15(); - - return 0; -} -int ToRosData(InterconnectCustomData input, kortex_driver::InterconnectCustomData &output) -{ - output.command_id = input.command_id(); - output.custom_data_0 = input.custom_data_0(); - output.custom_data_1 = input.custom_data_1(); - output.custom_data_2 = input.custom_data_2(); - output.custom_data_3 = input.custom_data_3(); - output.custom_data_4 = input.custom_data_4(); - output.custom_data_5 = input.custom_data_5(); - output.custom_data_6 = input.custom_data_6(); - output.custom_data_7 = input.custom_data_7(); - output.custom_data_8 = input.custom_data_8(); - output.custom_data_9 = input.custom_data_9(); - output.custom_data_10 = input.custom_data_10(); - output.custom_data_11 = input.custom_data_11(); - output.custom_data_12 = input.custom_data_12(); - output.custom_data_13 = input.custom_data_13(); - output.custom_data_14 = input.custom_data_14(); - output.custom_data_15 = input.custom_data_15(); - - return 0; -} -int ToRosData(BaseFeedback input, kortex_driver::BaseFeedback &output) -{ - output.active_state_connection_identifier = input.active_state_connection_identifier(); - output.active_state = input.active_state(); - output.arm_voltage = input.arm_voltage(); - output.arm_current = input.arm_current(); - output.temperature_cpu = input.temperature_cpu(); - output.temperature_ambient = input.temperature_ambient(); - output.imu_acceleration_x = input.imu_acceleration_x(); - output.imu_acceleration_y = input.imu_acceleration_y(); - output.imu_acceleration_z = input.imu_acceleration_z(); - output.imu_angular_velocity_x = input.imu_angular_velocity_x(); - output.imu_angular_velocity_y = input.imu_angular_velocity_y(); - output.imu_angular_velocity_z = input.imu_angular_velocity_z(); - output.tool_pose_x = input.tool_pose_x(); - output.tool_pose_y = input.tool_pose_y(); - output.tool_pose_z = input.tool_pose_z(); - output.tool_pose_theta_x = input.tool_pose_theta_x(); - output.tool_pose_theta_y = input.tool_pose_theta_y(); - output.tool_pose_theta_z = input.tool_pose_theta_z(); - output.tool_twist_linear_x = input.tool_twist_linear_x(); - output.tool_twist_linear_y = input.tool_twist_linear_y(); - output.tool_twist_linear_z = input.tool_twist_linear_z(); - output.tool_twist_angular_x = input.tool_twist_angular_x(); - output.tool_twist_angular_y = input.tool_twist_angular_y(); - output.tool_twist_angular_z = input.tool_twist_angular_z(); - output.tool_external_wrench_force_x = input.tool_external_wrench_force_x(); - output.tool_external_wrench_force_y = input.tool_external_wrench_force_y(); - output.tool_external_wrench_force_z = input.tool_external_wrench_force_z(); - output.tool_external_wrench_torque_x = input.tool_external_wrench_torque_x(); - output.tool_external_wrench_torque_y = input.tool_external_wrench_torque_y(); - output.tool_external_wrench_torque_z = input.tool_external_wrench_torque_z(); - output.fault_bank_a = input.fault_bank_a(); - output.fault_bank_b = input.fault_bank_b(); - output.warning_bank_a = input.warning_bank_a(); - output.warning_bank_b = input.warning_bank_b(); - - return 0; -} -int ToRosData(CustomData input, kortex_driver::CustomData &output) -{ - output.frame_id = input.frame_id(); - output.custom_data_0 = input.custom_data_0(); - output.custom_data_1 = input.custom_data_1(); - output.custom_data_2 = input.custom_data_2(); - output.custom_data_3 = input.custom_data_3(); - output.custom_data_4 = input.custom_data_4(); - output.custom_data_5 = input.custom_data_5(); - output.custom_data_6 = input.custom_data_6(); - output.custom_data_7 = input.custom_data_7(); - output.actuators_custom_data.clear(); - for(int i = 0; i < input.actuators_custom_data_size(); i++) - { - kortex_driver::ActuatorCustomData temp; - ToRosData(input.actuators_custom_data(i), temp); - output.actuators_custom_data.push_back(temp); - } - ToRosData(input.interconnect_custom_data(), output.interconnect_custom_data); - - return 0; -} -int ToRosData(Command input, kortex_driver::Command &output) -{ - output.frame_id = input.frame_id(); - output.actuators.clear(); - for(int i = 0; i < input.actuators_size(); i++) - { - kortex_driver::ActuatorCommand temp; - ToRosData(input.actuators(i), temp); - output.actuators.push_back(temp); - } - ToRosData(input.interconnect(), output.interconnect); - - return 0; -} -int ToRosData(Feedback input, kortex_driver::Feedback &output) -{ - output.frame_id = input.frame_id(); - ToRosData(input.base(), output.base); - output.actuators.clear(); - for(int i = 0; i < input.actuators_size(); i++) - { - kortex_driver::ActuatorFeedback temp; - ToRosData(input.actuators(i), temp); - output.actuators.push_back(temp); - } - ToRosData(input.interconnect(), output.interconnect); - - return 0; -} diff --git a/kortex_driver/src/basecyclic_ros_converter.h b/kortex_driver/src/basecyclic_ros_converter.h deleted file mode 100644 index b4ab4bc7..00000000 --- a/kortex_driver/src/basecyclic_ros_converter.h +++ /dev/null @@ -1,68 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_BaseCyclicROS_CONVERTER_H_ -#define _KORTEX_BaseCyclicROS_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "kortex_driver/ActuatorCommand.h" -#include "kortex_driver/InterconnectCommand.h" -#include "kortex_driver/ActuatorFeedback.h" -#include "kortex_driver/InterconnectFeedback.h" -#include "kortex_driver/ActuatorCustomData.h" -#include "kortex_driver/InterconnectCustomData.h" -#include "kortex_driver/BaseFeedback.h" -#include "kortex_driver/CustomData.h" -#include "kortex_driver/Command.h" -#include "kortex_driver/Feedback.h" - - -using namespace Kinova::Api::BaseCyclic; - -int ToRosData(ActuatorCommand input, kortex_driver::ActuatorCommand &output); -int ToRosData(InterconnectCommand input, kortex_driver::InterconnectCommand &output); -int ToRosData(ActuatorFeedback input, kortex_driver::ActuatorFeedback &output); -int ToRosData(InterconnectFeedback input, kortex_driver::InterconnectFeedback &output); -int ToRosData(ActuatorCustomData input, kortex_driver::ActuatorCustomData &output); -int ToRosData(InterconnectCustomData input, kortex_driver::InterconnectCustomData &output); -int ToRosData(BaseFeedback input, kortex_driver::BaseFeedback &output); -int ToRosData(CustomData input, kortex_driver::CustomData &output); -int ToRosData(Command input, kortex_driver::Command &output); -int ToRosData(Feedback input, kortex_driver::Feedback &output); - -#endif \ No newline at end of file diff --git a/kortex_driver/src/common_proto_converter.cpp b/kortex_driver/src/common_proto_converter.cpp deleted file mode 100644 index 6741b645..00000000 --- a/kortex_driver/src/common_proto_converter.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "common_proto_converter.h" - - -int ToProtoData(kortex_driver::DeviceHandle input, DeviceHandle *output) -{ - output->set_device_type((Kinova::Api::Common::DeviceTypes)input.device_type); - output->set_device_identifier(input.device_identifier); - output->set_order(input.order); - - return 0; -} -int ToProtoData(kortex_driver::Empty input, Empty *output) -{ - - return 0; -} -int ToProtoData(kortex_driver::NotificationOptions input, NotificationOptions *output) -{ - output->set_type((Kinova::Api::Common::NotificationType)input.type); - output->set_rate_m_sec(input.rate_m_sec); - output->set_threshold_value(input.threshold_value); - - return 0; -} -int ToProtoData(kortex_driver::SafetyHandle input, SafetyHandle *output) -{ - output->set_identifier(input.identifier); - - return 0; -} -int ToProtoData(kortex_driver::NotificationHandle input, NotificationHandle *output) -{ - output->set_identifier(input.identifier); - - return 0; -} -int ToProtoData(kortex_driver::SafetyNotification input, SafetyNotification *output) -{ - ToProtoData(input.safety_handle, output->mutable_safety_handle()); - output->set_value((Kinova::Api::Common::SafetyStatusValue)input.value); - ToProtoData(input.timestamp, output->mutable_timestamp()); - ToProtoData(input.user_handle, output->mutable_user_handle()); - ToProtoData(input.connection, output->mutable_connection()); - - return 0; -} -int ToProtoData(kortex_driver::Timestamp input, Timestamp *output) -{ - output->set_sec(input.sec); - output->set_usec(input.usec); - - return 0; -} -int ToProtoData(kortex_driver::UserProfileHandle input, UserProfileHandle *output) -{ - output->set_identifier(input.identifier); - output->set_permission(input.permission); - - return 0; -} -int ToProtoData(kortex_driver::Connection input, Connection *output) -{ - ToProtoData(input.user_handle, output->mutable_user_handle()); - output->set_connection_information(input.connection_information); - output->set_connection_identifier(input.connection_identifier); - - return 0; -} diff --git a/kortex_driver/src/common_proto_converter.h b/kortex_driver/src/common_proto_converter.h deleted file mode 100644 index 469401e7..00000000 --- a/kortex_driver/src/common_proto_converter.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_CommonPROTO_CONVERTER_H_ -#define _KORTEX_CommonPROTO_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "kortex_driver/DeviceHandle.h" -#include "kortex_driver/Empty.h" -#include "kortex_driver/NotificationOptions.h" -#include "kortex_driver/SafetyHandle.h" -#include "kortex_driver/NotificationHandle.h" -#include "kortex_driver/SafetyNotification.h" -#include "kortex_driver/Timestamp.h" -#include "kortex_driver/UserProfileHandle.h" -#include "kortex_driver/Connection.h" - - -using namespace Kinova::Api::Common; - -int ToProtoData(kortex_driver::DeviceHandle intput, DeviceHandle *output); -int ToProtoData(kortex_driver::Empty intput, Empty *output); -int ToProtoData(kortex_driver::NotificationOptions intput, NotificationOptions *output); -int ToProtoData(kortex_driver::SafetyHandle intput, SafetyHandle *output); -int ToProtoData(kortex_driver::NotificationHandle intput, NotificationHandle *output); -int ToProtoData(kortex_driver::SafetyNotification intput, SafetyNotification *output); -int ToProtoData(kortex_driver::Timestamp intput, Timestamp *output); -int ToProtoData(kortex_driver::UserProfileHandle intput, UserProfileHandle *output); -int ToProtoData(kortex_driver::Connection intput, Connection *output); - -#endif \ No newline at end of file diff --git a/kortex_driver/src/common_ros_converter.cpp b/kortex_driver/src/common_ros_converter.cpp deleted file mode 100644 index 6cc1bcaf..00000000 --- a/kortex_driver/src/common_ros_converter.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "common_ros_converter.h" - - -int ToRosData(DeviceHandle input, kortex_driver::DeviceHandle &output) -{ - output.device_type = input.device_type(); - output.device_identifier = input.device_identifier(); - output.order = input.order(); - - return 0; -} -int ToRosData(Empty input, kortex_driver::Empty &output) -{ - - return 0; -} -int ToRosData(NotificationOptions input, kortex_driver::NotificationOptions &output) -{ - output.type = input.type(); - output.rate_m_sec = input.rate_m_sec(); - output.threshold_value = input.threshold_value(); - - return 0; -} -int ToRosData(SafetyHandle input, kortex_driver::SafetyHandle &output) -{ - output.identifier = input.identifier(); - - return 0; -} -int ToRosData(NotificationHandle input, kortex_driver::NotificationHandle &output) -{ - output.identifier = input.identifier(); - - return 0; -} -int ToRosData(SafetyNotification input, kortex_driver::SafetyNotification &output) -{ - ToRosData(input.safety_handle(), output.safety_handle); - output.value = input.value(); - ToRosData(input.timestamp(), output.timestamp); - ToRosData(input.user_handle(), output.user_handle); - ToRosData(input.connection(), output.connection); - - return 0; -} -int ToRosData(Timestamp input, kortex_driver::Timestamp &output) -{ - output.sec = input.sec(); - output.usec = input.usec(); - - return 0; -} -int ToRosData(UserProfileHandle input, kortex_driver::UserProfileHandle &output) -{ - output.identifier = input.identifier(); - output.permission = input.permission(); - - return 0; -} -int ToRosData(Connection input, kortex_driver::Connection &output) -{ - ToRosData(input.user_handle(), output.user_handle); - output.connection_information = input.connection_information(); - output.connection_identifier = input.connection_identifier(); - - return 0; -} diff --git a/kortex_driver/src/common_ros_converter.h b/kortex_driver/src/common_ros_converter.h deleted file mode 100644 index 1ea3e9ad..00000000 --- a/kortex_driver/src/common_ros_converter.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_CommonROS_CONVERTER_H_ -#define _KORTEX_CommonROS_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "kortex_driver/DeviceHandle.h" -#include "kortex_driver/Empty.h" -#include "kortex_driver/NotificationOptions.h" -#include "kortex_driver/SafetyHandle.h" -#include "kortex_driver/NotificationHandle.h" -#include "kortex_driver/SafetyNotification.h" -#include "kortex_driver/Timestamp.h" -#include "kortex_driver/UserProfileHandle.h" -#include "kortex_driver/Connection.h" - - -using namespace Kinova::Api::Common; - -int ToRosData(DeviceHandle input, kortex_driver::DeviceHandle &output); -int ToRosData(Empty input, kortex_driver::Empty &output); -int ToRosData(NotificationOptions input, kortex_driver::NotificationOptions &output); -int ToRosData(SafetyHandle input, kortex_driver::SafetyHandle &output); -int ToRosData(NotificationHandle input, kortex_driver::NotificationHandle &output); -int ToRosData(SafetyNotification input, kortex_driver::SafetyNotification &output); -int ToRosData(Timestamp input, kortex_driver::Timestamp &output); -int ToRosData(UserProfileHandle input, kortex_driver::UserProfileHandle &output); -int ToRosData(Connection input, kortex_driver::Connection &output); - -#endif \ No newline at end of file diff --git a/kortex_driver/src/generated/actuatorconfig_proto_converter.cpp b/kortex_driver/src/generated/actuatorconfig_proto_converter.cpp new file mode 100644 index 00000000..74e8102e --- /dev/null +++ b/kortex_driver/src/generated/actuatorconfig_proto_converter.cpp @@ -0,0 +1,182 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/actuatorconfig_proto_converter.h" + +int ToProtoData(kortex_driver::AxisPosition input, Kinova::Api::ActuatorConfig::AxisPosition *output) +{ + + output->set_position(input.position); + + return 0; +} +int ToProtoData(kortex_driver::AxisOffsets input, Kinova::Api::ActuatorConfig::AxisOffsets *output) +{ + + output->set_absolute_offset(input.absolute_offset); + output->set_relative_offset(input.relative_offset); + + return 0; +} +int ToProtoData(kortex_driver::TorqueCalibration input, Kinova::Api::ActuatorConfig::TorqueCalibration *output) +{ + + output->set_global_gain(input.global_gain); + output->set_global_offset(input.global_offset); + output->clear_gain(); + for(int i = 0; i < input.gain.size(); i++) + { + output->add_gain(input.gain[i]); + } + output->clear_offset(); + for(int i = 0; i < input.offset.size(); i++) + { + output->add_offset(input.offset[i]); + } + + return 0; +} +int ToProtoData(kortex_driver::TorqueOffset input, Kinova::Api::ActuatorConfig::TorqueOffset *output) +{ + + output->set_torque_offset(input.torque_offset); + + return 0; +} +int ToProtoData(kortex_driver::ActuatorConfig_ControlModeInformation input, Kinova::Api::ActuatorConfig::ControlModeInformation *output) +{ + + output->set_control_mode((Kinova::Api::ActuatorConfig::ControlMode)input.control_mode); + + return 0; +} +int ToProtoData(kortex_driver::ControlLoop input, Kinova::Api::ActuatorConfig::ControlLoop *output) +{ + + output->set_control_loop(input.control_loop); + + return 0; +} +int ToProtoData(kortex_driver::LoopSelection input, Kinova::Api::ActuatorConfig::LoopSelection *output) +{ + + output->set_loop_selection((Kinova::Api::ActuatorConfig::ControlLoopSelection)input.loop_selection); + + return 0; +} +int ToProtoData(kortex_driver::VectorDriveParameters input, Kinova::Api::ActuatorConfig::VectorDriveParameters *output) +{ + + output->set_kpq(input.kpq); + output->set_kiq(input.kiq); + output->set_kpd(input.kpd); + output->set_kid(input.kid); + + return 0; +} +int ToProtoData(kortex_driver::EncoderDerivativeParameters input, Kinova::Api::ActuatorConfig::EncoderDerivativeParameters *output) +{ + + output->set_max_window_width(input.max_window_width); + output->set_min_encoder_tick_count(input.min_encoder_tick_count); + + return 0; +} +int ToProtoData(kortex_driver::ControlLoopParameters input, Kinova::Api::ActuatorConfig::ControlLoopParameters *output) +{ + + output->set_loop_selection((Kinova::Api::ActuatorConfig::ControlLoopSelection)input.loop_selection); + output->set_error_saturation(input.error_saturation); + output->set_output_saturation(input.output_saturation); + output->clear_kaz(); + for(int i = 0; i < input.kAz.size(); i++) + { + output->add_kaz(input.kAz[i]); + } + output->clear_kbz(); + for(int i = 0; i < input.kBz.size(); i++) + { + output->add_kbz(input.kBz[i]); + } + output->set_error_dead_band(input.error_dead_band); + + return 0; +} +int ToProtoData(kortex_driver::FrequencyResponse input, Kinova::Api::ActuatorConfig::FrequencyResponse *output) +{ + + output->set_loop_selection((Kinova::Api::ActuatorConfig::ControlLoopSelection)input.loop_selection); + output->set_min_frequency(input.min_frequency); + output->set_max_frequency(input.max_frequency); + output->set_amplitude(input.amplitude); + output->set_duration(input.duration); + + return 0; +} +int ToProtoData(kortex_driver::StepResponse input, Kinova::Api::ActuatorConfig::StepResponse *output) +{ + + output->set_loop_selection((Kinova::Api::ActuatorConfig::ControlLoopSelection)input.loop_selection); + output->set_amplitude(input.amplitude); + output->set_step_delay(input.step_delay); + output->set_duration(input.duration); + + return 0; +} +int ToProtoData(kortex_driver::RampResponse input, Kinova::Api::ActuatorConfig::RampResponse *output) +{ + + output->set_loop_selection((Kinova::Api::ActuatorConfig::ControlLoopSelection)input.loop_selection); + output->set_slope(input.slope); + output->set_ramp_delay(input.ramp_delay); + output->set_duration(input.duration); + + return 0; +} +int ToProtoData(kortex_driver::CustomDataSelection input, Kinova::Api::ActuatorConfig::CustomDataSelection *output) +{ + + output->clear_channel(); + for(int i = 0; i < input.channel.size(); i++) + { + output->add_channel((Kinova::Api::ActuatorConfig::CustomDataIndex)input.channel[i]); + } + + return 0; +} +int ToProtoData(kortex_driver::CommandModeInformation input, Kinova::Api::ActuatorConfig::CommandModeInformation *output) +{ + + output->set_command_mode((Kinova::Api::ActuatorConfig::CommandMode)input.command_mode); + + return 0; +} +int ToProtoData(kortex_driver::Servoing input, Kinova::Api::ActuatorConfig::Servoing *output) +{ + + output->set_enabled(input.enabled); + + return 0; +} +int ToProtoData(kortex_driver::PositionCommand input, Kinova::Api::ActuatorConfig::PositionCommand *output) +{ + + output->set_position(input.position); + output->set_velocity(input.velocity); + output->set_acceleration(input.acceleration); + + return 0; +} diff --git a/kortex_driver/src/generated/actuatorconfig_ros_converter.cpp b/kortex_driver/src/generated/actuatorconfig_ros_converter.cpp new file mode 100644 index 00000000..47e62eee --- /dev/null +++ b/kortex_driver/src/generated/actuatorconfig_ros_converter.cpp @@ -0,0 +1,216 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/actuatorconfig_ros_converter.h" + +int ToRosData(Kinova::Api::ActuatorConfig::AxisPosition input, kortex_driver::AxisPosition &output) +{ + + output.position = input.position(); + + + + return 0; +} +int ToRosData(Kinova::Api::ActuatorConfig::AxisOffsets input, kortex_driver::AxisOffsets &output) +{ + + output.absolute_offset = input.absolute_offset(); + output.relative_offset = input.relative_offset(); + + + + return 0; +} +int ToRosData(Kinova::Api::ActuatorConfig::TorqueCalibration input, kortex_driver::TorqueCalibration &output) +{ + + output.global_gain = input.global_gain(); + output.global_offset = input.global_offset(); + output.gain.clear(); + for(int i = 0; i < input.gain_size(); i++) + { + output.gain.push_back(input.gain(i)); + } + output.offset.clear(); + for(int i = 0; i < input.offset_size(); i++) + { + output.offset.push_back(input.offset(i)); + } + + + + return 0; +} +int ToRosData(Kinova::Api::ActuatorConfig::TorqueOffset input, kortex_driver::TorqueOffset &output) +{ + + output.torque_offset = input.torque_offset(); + + + + return 0; +} +int ToRosData(Kinova::Api::ActuatorConfig::ControlModeInformation input, kortex_driver::ActuatorConfig_ControlModeInformation &output) +{ + + output.control_mode = input.control_mode(); + + + + return 0; +} +int ToRosData(Kinova::Api::ActuatorConfig::ControlLoop input, kortex_driver::ControlLoop &output) +{ + + output.control_loop = input.control_loop(); + + + + return 0; +} +int ToRosData(Kinova::Api::ActuatorConfig::LoopSelection input, kortex_driver::LoopSelection &output) +{ + + output.loop_selection = input.loop_selection(); + + + + return 0; +} +int ToRosData(Kinova::Api::ActuatorConfig::VectorDriveParameters input, kortex_driver::VectorDriveParameters &output) +{ + + output.kpq = input.kpq(); + output.kiq = input.kiq(); + output.kpd = input.kpd(); + output.kid = input.kid(); + + + + return 0; +} +int ToRosData(Kinova::Api::ActuatorConfig::EncoderDerivativeParameters input, kortex_driver::EncoderDerivativeParameters &output) +{ + + output.max_window_width = input.max_window_width(); + output.min_encoder_tick_count = input.min_encoder_tick_count(); + + + + return 0; +} +int ToRosData(Kinova::Api::ActuatorConfig::ControlLoopParameters input, kortex_driver::ControlLoopParameters &output) +{ + + output.loop_selection = input.loop_selection(); + output.error_saturation = input.error_saturation(); + output.output_saturation = input.output_saturation(); + output.kAz.clear(); + for(int i = 0; i < input.kaz_size(); i++) + { + output.kAz.push_back(input.kaz(i)); + } + output.kBz.clear(); + for(int i = 0; i < input.kbz_size(); i++) + { + output.kBz.push_back(input.kbz(i)); + } + output.error_dead_band = input.error_dead_band(); + + + + return 0; +} +int ToRosData(Kinova::Api::ActuatorConfig::FrequencyResponse input, kortex_driver::FrequencyResponse &output) +{ + + output.loop_selection = input.loop_selection(); + output.min_frequency = input.min_frequency(); + output.max_frequency = input.max_frequency(); + output.amplitude = input.amplitude(); + output.duration = input.duration(); + + + + return 0; +} +int ToRosData(Kinova::Api::ActuatorConfig::StepResponse input, kortex_driver::StepResponse &output) +{ + + output.loop_selection = input.loop_selection(); + output.amplitude = input.amplitude(); + output.step_delay = input.step_delay(); + output.duration = input.duration(); + + + + return 0; +} +int ToRosData(Kinova::Api::ActuatorConfig::RampResponse input, kortex_driver::RampResponse &output) +{ + + output.loop_selection = input.loop_selection(); + output.slope = input.slope(); + output.ramp_delay = input.ramp_delay(); + output.duration = input.duration(); + + + + return 0; +} +int ToRosData(Kinova::Api::ActuatorConfig::CustomDataSelection input, kortex_driver::CustomDataSelection &output) +{ + + output.channel.clear(); + for(int i = 0; i < input.channel_size(); i++) + { + output.channel.push_back(input.channel(i)); + } + + + + return 0; +} +int ToRosData(Kinova::Api::ActuatorConfig::CommandModeInformation input, kortex_driver::CommandModeInformation &output) +{ + + output.command_mode = input.command_mode(); + + + + return 0; +} +int ToRosData(Kinova::Api::ActuatorConfig::Servoing input, kortex_driver::Servoing &output) +{ + + output.enabled = input.enabled(); + + + + return 0; +} +int ToRosData(Kinova::Api::ActuatorConfig::PositionCommand input, kortex_driver::PositionCommand &output) +{ + + output.position = input.position(); + output.velocity = input.velocity(); + output.acceleration = input.acceleration(); + + + + return 0; +} diff --git a/kortex_driver/src/generated/actuatorconfig_services.cpp b/kortex_driver/src/generated/actuatorconfig_services.cpp new file mode 100644 index 00000000..3973ad7e --- /dev/null +++ b/kortex_driver/src/generated/actuatorconfig_services.cpp @@ -0,0 +1,656 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/common_proto_converter.h" +#include "kortex_driver/generated/common_ros_converter.h" +#include "kortex_driver/generated/actuatorconfig_proto_converter.h" +#include "kortex_driver/generated/actuatorconfig_ros_converter.h" +#include "kortex_driver/generated/actuatorcyclic_proto_converter.h" +#include "kortex_driver/generated/actuatorcyclic_ros_converter.h" +#include "kortex_driver/generated/productconfiguration_proto_converter.h" +#include "kortex_driver/generated/productconfiguration_ros_converter.h" +#include "kortex_driver/generated/base_proto_converter.h" +#include "kortex_driver/generated/base_ros_converter.h" +#include "kortex_driver/generated/grippercyclic_proto_converter.h" +#include "kortex_driver/generated/grippercyclic_ros_converter.h" +#include "kortex_driver/generated/interconnectcyclic_proto_converter.h" +#include "kortex_driver/generated/interconnectcyclic_ros_converter.h" +#include "kortex_driver/generated/basecyclic_proto_converter.h" +#include "kortex_driver/generated/basecyclic_ros_converter.h" +#include "kortex_driver/generated/controlconfig_proto_converter.h" +#include "kortex_driver/generated/controlconfig_ros_converter.h" +#include "kortex_driver/generated/deviceconfig_proto_converter.h" +#include "kortex_driver/generated/deviceconfig_ros_converter.h" +#include "kortex_driver/generated/devicemanager_proto_converter.h" +#include "kortex_driver/generated/devicemanager_ros_converter.h" +#include "kortex_driver/generated/interconnectconfig_proto_converter.h" +#include "kortex_driver/generated/interconnectconfig_ros_converter.h" +#include "kortex_driver/generated/visionconfig_proto_converter.h" +#include "kortex_driver/generated/visionconfig_ros_converter.h" +#include "kortex_driver/generated/actuatorconfig_services.h" + +ActuatorConfigServices::ActuatorConfigServices(ros::NodeHandle& n, Kinova::Api::ActuatorConfig::ActuatorConfigClient* actuatorconfig, uint32_t device_id, uint32_t timeout_ms): + m_n(n), + m_actuatorconfig(actuatorconfig), + m_current_device_id(device_id) +{ + m_api_options.timeout_ms = timeout_ms; + + m_pub_Error = m_n.advertise("kortex_error", 1000); + + m_serviceSetDeviceID = n.advertiseService("actuator_config/set_device_id", &ActuatorConfigServices::SetDeviceID, this); + m_serviceSetApiOptions = n.advertiseService("actuator_config/set_api_options", &ActuatorConfigServices::SetApiOptions, this); + + m_serviceGetAxisOffsets = m_n.advertiseService("actuator_config/get_axis_offsets", &ActuatorConfigServices::GetAxisOffsets, this); + m_serviceSetAxisOffsets = m_n.advertiseService("actuator_config/set_axis_offsets", &ActuatorConfigServices::SetAxisOffsets, this); + m_serviceSetTorqueOffset = m_n.advertiseService("actuator_config/set_torque_offset", &ActuatorConfigServices::SetTorqueOffset, this); + m_serviceActuatorConfig_GetControlMode = m_n.advertiseService("actuator_config/get_control_mode", &ActuatorConfigServices::ActuatorConfig_GetControlMode, this); + m_serviceSetControlMode = m_n.advertiseService("actuator_config/set_control_mode", &ActuatorConfigServices::SetControlMode, this); + m_serviceGetActivatedControlLoop = m_n.advertiseService("actuator_config/get_activated_control_loop", &ActuatorConfigServices::GetActivatedControlLoop, this); + m_serviceSetActivatedControlLoop = m_n.advertiseService("actuator_config/set_activated_control_loop", &ActuatorConfigServices::SetActivatedControlLoop, this); + m_serviceGetControlLoopParameters = m_n.advertiseService("actuator_config/get_control_loop_parameters", &ActuatorConfigServices::GetControlLoopParameters, this); + m_serviceSetControlLoopParameters = m_n.advertiseService("actuator_config/set_control_loop_parameters", &ActuatorConfigServices::SetControlLoopParameters, this); + m_serviceSelectCustomData = m_n.advertiseService("actuator_config/select_custom_data", &ActuatorConfigServices::SelectCustomData, this); + m_serviceGetSelectedCustomData = m_n.advertiseService("actuator_config/get_selected_custom_data", &ActuatorConfigServices::GetSelectedCustomData, this); + m_serviceSetCommandMode = m_n.advertiseService("actuator_config/set_command_mode", &ActuatorConfigServices::SetCommandMode, this); + m_serviceActuatorConfig_ClearFaults = m_n.advertiseService("actuator_config/clear_faults", &ActuatorConfigServices::ActuatorConfig_ClearFaults, this); + m_serviceSetServoing = m_n.advertiseService("actuator_config/set_servoing", &ActuatorConfigServices::SetServoing, this); + m_serviceMoveToPosition = m_n.advertiseService("actuator_config/move_to_position", &ActuatorConfigServices::MoveToPosition, this); + m_serviceGetCommandMode = m_n.advertiseService("actuator_config/get_command_mode", &ActuatorConfigServices::GetCommandMode, this); + m_serviceGetServoing = m_n.advertiseService("actuator_config/get_servoing", &ActuatorConfigServices::GetServoing, this); + m_serviceGetTorqueOffset = m_n.advertiseService("actuator_config/get_torque_offset", &ActuatorConfigServices::GetTorqueOffset, this); +} + +bool ActuatorConfigServices::SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res) +{ + m_current_device_id = req.device_id; + + return true; +} + +bool ActuatorConfigServices::SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res) +{ + m_api_options.timeout_ms = req.input.timeout_ms; + + return true; +} + + +bool ActuatorConfigServices::GetAxisOffsets(kortex_driver::GetAxisOffsets::Request &req, kortex_driver::GetAxisOffsets::Response &res) +{ + Kinova::Api::ActuatorConfig::AxisOffsets output; + + kortex_driver::KortexError result_error; + + try + { + output = m_actuatorconfig->GetAxisOffsets(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool ActuatorConfigServices::SetAxisOffsets(kortex_driver::SetAxisOffsets::Request &req, kortex_driver::SetAxisOffsets::Response &res) +{ + Kinova::Api::ActuatorConfig::AxisPosition input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_actuatorconfig->SetAxisOffsets(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool ActuatorConfigServices::SetTorqueOffset(kortex_driver::SetTorqueOffset::Request &req, kortex_driver::SetTorqueOffset::Response &res) +{ + Kinova::Api::ActuatorConfig::TorqueOffset input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_actuatorconfig->SetTorqueOffset(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool ActuatorConfigServices::ActuatorConfig_GetControlMode(kortex_driver::ActuatorConfig_GetControlMode::Request &req, kortex_driver::ActuatorConfig_GetControlMode::Response &res) +{ + Kinova::Api::ActuatorConfig::ControlModeInformation output; + + kortex_driver::KortexError result_error; + + try + { + output = m_actuatorconfig->GetControlMode(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool ActuatorConfigServices::SetControlMode(kortex_driver::SetControlMode::Request &req, kortex_driver::SetControlMode::Response &res) +{ + Kinova::Api::ActuatorConfig::ControlModeInformation input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_actuatorconfig->SetControlMode(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool ActuatorConfigServices::GetActivatedControlLoop(kortex_driver::GetActivatedControlLoop::Request &req, kortex_driver::GetActivatedControlLoop::Response &res) +{ + Kinova::Api::ActuatorConfig::ControlLoop output; + + kortex_driver::KortexError result_error; + + try + { + output = m_actuatorconfig->GetActivatedControlLoop(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool ActuatorConfigServices::SetActivatedControlLoop(kortex_driver::SetActivatedControlLoop::Request &req, kortex_driver::SetActivatedControlLoop::Response &res) +{ + Kinova::Api::ActuatorConfig::ControlLoop input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_actuatorconfig->SetActivatedControlLoop(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool ActuatorConfigServices::GetControlLoopParameters(kortex_driver::GetControlLoopParameters::Request &req, kortex_driver::GetControlLoopParameters::Response &res) +{ + Kinova::Api::ActuatorConfig::LoopSelection input; + ToProtoData(req.input, &input); + Kinova::Api::ActuatorConfig::ControlLoopParameters output; + + kortex_driver::KortexError result_error; + + try + { + output = m_actuatorconfig->GetControlLoopParameters(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool ActuatorConfigServices::SetControlLoopParameters(kortex_driver::SetControlLoopParameters::Request &req, kortex_driver::SetControlLoopParameters::Response &res) +{ + Kinova::Api::ActuatorConfig::ControlLoopParameters input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_actuatorconfig->SetControlLoopParameters(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool ActuatorConfigServices::SelectCustomData(kortex_driver::SelectCustomData::Request &req, kortex_driver::SelectCustomData::Response &res) +{ + Kinova::Api::ActuatorConfig::CustomDataSelection input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_actuatorconfig->SelectCustomData(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool ActuatorConfigServices::GetSelectedCustomData(kortex_driver::GetSelectedCustomData::Request &req, kortex_driver::GetSelectedCustomData::Response &res) +{ + Kinova::Api::ActuatorConfig::CustomDataSelection output; + + kortex_driver::KortexError result_error; + + try + { + output = m_actuatorconfig->GetSelectedCustomData(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool ActuatorConfigServices::SetCommandMode(kortex_driver::SetCommandMode::Request &req, kortex_driver::SetCommandMode::Response &res) +{ + Kinova::Api::ActuatorConfig::CommandModeInformation input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_actuatorconfig->SetCommandMode(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool ActuatorConfigServices::ActuatorConfig_ClearFaults(kortex_driver::ActuatorConfig_ClearFaults::Request &req, kortex_driver::ActuatorConfig_ClearFaults::Response &res) +{ + kortex_driver::KortexError result_error; + + try + { + m_actuatorconfig->ClearFaults(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool ActuatorConfigServices::SetServoing(kortex_driver::SetServoing::Request &req, kortex_driver::SetServoing::Response &res) +{ + Kinova::Api::ActuatorConfig::Servoing input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_actuatorconfig->SetServoing(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool ActuatorConfigServices::MoveToPosition(kortex_driver::MoveToPosition::Request &req, kortex_driver::MoveToPosition::Response &res) +{ + Kinova::Api::ActuatorConfig::PositionCommand input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_actuatorconfig->MoveToPosition(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool ActuatorConfigServices::GetCommandMode(kortex_driver::GetCommandMode::Request &req, kortex_driver::GetCommandMode::Response &res) +{ + Kinova::Api::ActuatorConfig::CommandModeInformation output; + + kortex_driver::KortexError result_error; + + try + { + output = m_actuatorconfig->GetCommandMode(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool ActuatorConfigServices::GetServoing(kortex_driver::GetServoing::Request &req, kortex_driver::GetServoing::Response &res) +{ + Kinova::Api::ActuatorConfig::Servoing output; + + kortex_driver::KortexError result_error; + + try + { + output = m_actuatorconfig->GetServoing(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool ActuatorConfigServices::GetTorqueOffset(kortex_driver::GetTorqueOffset::Request &req, kortex_driver::GetTorqueOffset::Response &res) +{ + Kinova::Api::ActuatorConfig::TorqueOffset output; + + kortex_driver::KortexError result_error; + + try + { + output = m_actuatorconfig->GetTorqueOffset(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} diff --git a/kortex_actuator_driver/src/actuatorcyclic_proto_converter.cpp b/kortex_driver/src/generated/actuatorcyclic_proto_converter.cpp similarity index 78% rename from kortex_actuator_driver/src/actuatorcyclic_proto_converter.cpp rename to kortex_driver/src/generated/actuatorcyclic_proto_converter.cpp index dbf2601d..7a1ce565 100644 --- a/kortex_actuator_driver/src/actuatorcyclic_proto_converter.cpp +++ b/kortex_driver/src/generated/actuatorcyclic_proto_converter.cpp @@ -1,7 +1,7 @@ /* * KINOVA (R) KORTEX (TM) * -* Copyright (c) 2018 Kinova inc. All rights reserved. +* Copyright (c) 2019 Kinova inc. All rights reserved. * * This software may be modified and distributed under the * terms of the BSD 3-Clause license. @@ -14,30 +14,30 @@ * This file has been auto-generated and should not be modified. */ -#include "actuatorcyclic_proto_converter.h" +#include "kortex_driver/generated/actuatorcyclic_proto_converter.h" -#include "common_proto_converter.h" - - -int ToProtoData(kortex_actuator_driver::MessageId input, MessageId *output) +int ToProtoData(kortex_driver::ActuatorCyclic_MessageId input, Kinova::Api::ActuatorCyclic::MessageId *output) { + output->set_identifier(input.identifier); - + return 0; } -int ToProtoData(kortex_actuator_driver::Command input, Command *output) +int ToProtoData(kortex_driver::ActuatorCyclic_Command input, Kinova::Api::ActuatorCyclic::Command *output) { + ToProtoData(input.command_id, output->mutable_command_id()); output->set_flags(input.flags); output->set_position(input.position); output->set_velocity(input.velocity); output->set_torque_joint(input.torque_joint); output->set_current_motor(input.current_motor); - + return 0; } -int ToProtoData(kortex_actuator_driver::Feedback input, Feedback *output) +int ToProtoData(kortex_driver::ActuatorCyclic_Feedback input, Kinova::Api::ActuatorCyclic::Feedback *output) { + ToProtoData(input.feedback_id, output->mutable_feedback_id()); output->set_status_flags(input.status_flags); output->set_jitter_comm(input.jitter_comm); @@ -52,11 +52,12 @@ int ToProtoData(kortex_actuator_driver::Feedback input, Feedback *output) output->set_fault_bank_b(input.fault_bank_b); output->set_warning_bank_a(input.warning_bank_a); output->set_warning_bank_b(input.warning_bank_b); - + return 0; } -int ToProtoData(kortex_actuator_driver::CustomData input, CustomData *output) +int ToProtoData(kortex_driver::ActuatorCyclic_CustomData input, Kinova::Api::ActuatorCyclic::CustomData *output) { + ToProtoData(input.custom_data_id, output->mutable_custom_data_id()); output->set_custom_data_0(input.custom_data_0); output->set_custom_data_1(input.custom_data_1); @@ -74,6 +75,6 @@ int ToProtoData(kortex_actuator_driver::CustomData input, CustomData *output) output->set_custom_data_13(input.custom_data_13); output->set_custom_data_14(input.custom_data_14); output->set_custom_data_15(input.custom_data_15); - + return 0; } diff --git a/kortex_actuator_driver/src/actuatorcyclic_ros_converter.cpp b/kortex_driver/src/generated/actuatorcyclic_ros_converter.cpp similarity index 78% rename from kortex_actuator_driver/src/actuatorcyclic_ros_converter.cpp rename to kortex_driver/src/generated/actuatorcyclic_ros_converter.cpp index 94228493..d54c6f17 100644 --- a/kortex_actuator_driver/src/actuatorcyclic_ros_converter.cpp +++ b/kortex_driver/src/generated/actuatorcyclic_ros_converter.cpp @@ -1,7 +1,7 @@ /* * KINOVA (R) KORTEX (TM) * -* Copyright (c) 2018 Kinova inc. All rights reserved. +* Copyright (c) 2019 Kinova inc. All rights reserved. * * This software may be modified and distributed under the * terms of the BSD 3-Clause license. @@ -14,30 +14,34 @@ * This file has been auto-generated and should not be modified. */ -#include "actuatorcyclic_ros_converter.h" +#include "kortex_driver/generated/actuatorcyclic_ros_converter.h" -#include "common_ros_converter.h" - - -int ToRosData(MessageId input, kortex_actuator_driver::MessageId &output) +int ToRosData(Kinova::Api::ActuatorCyclic::MessageId input, kortex_driver::ActuatorCyclic_MessageId &output) { + output.identifier = input.identifier(); + + return 0; } -int ToRosData(Command input, kortex_actuator_driver::Command &output) +int ToRosData(Kinova::Api::ActuatorCyclic::Command input, kortex_driver::ActuatorCyclic_Command &output) { + ToRosData(input.command_id(), output.command_id); output.flags = input.flags(); output.position = input.position(); output.velocity = input.velocity(); output.torque_joint = input.torque_joint(); output.current_motor = input.current_motor(); + + return 0; } -int ToRosData(Feedback input, kortex_actuator_driver::Feedback &output) +int ToRosData(Kinova::Api::ActuatorCyclic::Feedback input, kortex_driver::ActuatorCyclic_Feedback &output) { + ToRosData(input.feedback_id(), output.feedback_id); output.status_flags = input.status_flags(); output.jitter_comm = input.jitter_comm(); @@ -52,11 +56,14 @@ int ToRosData(Feedback input, kortex_actuator_driver::Feedback &output) output.fault_bank_b = input.fault_bank_b(); output.warning_bank_a = input.warning_bank_a(); output.warning_bank_b = input.warning_bank_b(); + + return 0; } -int ToRosData(CustomData input, kortex_actuator_driver::CustomData &output) +int ToRosData(Kinova::Api::ActuatorCyclic::CustomData input, kortex_driver::ActuatorCyclic_CustomData &output) { + ToRosData(input.custom_data_id(), output.custom_data_id); output.custom_data_0 = input.custom_data_0(); output.custom_data_1 = input.custom_data_1(); @@ -74,6 +81,8 @@ int ToRosData(CustomData input, kortex_actuator_driver::CustomData &output) output.custom_data_13 = input.custom_data_13(); output.custom_data_14 = input.custom_data_14(); output.custom_data_15 = input.custom_data_15(); + + return 0; } diff --git a/kortex_driver/src/generated/base_proto_converter.cpp b/kortex_driver/src/generated/base_proto_converter.cpp new file mode 100644 index 00000000..a9679945 --- /dev/null +++ b/kortex_driver/src/generated/base_proto_converter.cpp @@ -0,0 +1,1568 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/base_proto_converter.h" + +int ToProtoData(kortex_driver::FullUserProfile input, Kinova::Api::Base::FullUserProfile *output) +{ + + ToProtoData(input.user_profile, output->mutable_user_profile()); + output->set_password(input.password); + + return 0; +} +int ToProtoData(kortex_driver::UserProfile input, Kinova::Api::Base::UserProfile *output) +{ + + ToProtoData(input.handle, output->mutable_handle()); + output->set_username(input.username); + output->set_firstname(input.firstname); + output->set_lastname(input.lastname); + output->set_application_data(input.application_data); + + return 0; +} +int ToProtoData(kortex_driver::UserProfileList input, Kinova::Api::Base::UserProfileList *output) +{ + + output->clear_user_profiles(); + for(int i = 0; i < input.user_profiles.size(); i++) + { + ToProtoData(input.user_profiles[i], output->add_user_profiles()); + } + + return 0; +} +int ToProtoData(kortex_driver::UserList input, Kinova::Api::Base::UserList *output) +{ + + output->clear_user_handles(); + for(int i = 0; i < input.user_handles.size(); i++) + { + ToProtoData(input.user_handles[i], output->add_user_handles()); + } + + return 0; +} +int ToProtoData(kortex_driver::PasswordChange input, Kinova::Api::Base::PasswordChange *output) +{ + + ToProtoData(input.handle, output->mutable_handle()); + output->set_old_password(input.old_password); + output->set_new_password(input.new_password); + + return 0; +} +int ToProtoData(kortex_driver::SequenceHandle input, Kinova::Api::Base::SequenceHandle *output) +{ + + output->set_identifier(input.identifier); + output->set_permission(input.permission); + + return 0; +} +int ToProtoData(kortex_driver::AdvancedSequenceHandle input, Kinova::Api::Base::AdvancedSequenceHandle *output) +{ + + ToProtoData(input.handle, output->mutable_handle()); + output->set_in_loop(input.in_loop); + + return 0; +} +int ToProtoData(kortex_driver::SequenceTaskHandle input, Kinova::Api::Base::SequenceTaskHandle *output) +{ + + ToProtoData(input.sequence_handle, output->mutable_sequence_handle()); + output->set_task_index(input.task_index); + + return 0; +} +int ToProtoData(kortex_driver::SequenceTask input, Kinova::Api::Base::SequenceTask *output) +{ + + output->set_group_identifier(input.group_identifier); + ToProtoData(input.action, output->mutable_action()); + output->set_application_data(input.application_data); + + return 0; +} +int ToProtoData(kortex_driver::Sequence input, Kinova::Api::Base::Sequence *output) +{ + + ToProtoData(input.handle, output->mutable_handle()); + output->set_name(input.name); + output->set_application_data(input.application_data); + output->clear_tasks(); + for(int i = 0; i < input.tasks.size(); i++) + { + ToProtoData(input.tasks[i], output->add_tasks()); + } + + return 0; +} +int ToProtoData(kortex_driver::SequenceList input, Kinova::Api::Base::SequenceList *output) +{ + + output->clear_sequence_list(); + for(int i = 0; i < input.sequence_list.size(); i++) + { + ToProtoData(input.sequence_list[i], output->add_sequence_list()); + } + + return 0; +} +int ToProtoData(kortex_driver::AppendActionInformation input, Kinova::Api::Base::AppendActionInformation *output) +{ + + ToProtoData(input.sequence_handle, output->mutable_sequence_handle()); + ToProtoData(input.action, output->mutable_action()); + + return 0; +} +int ToProtoData(kortex_driver::ActionHandle input, Kinova::Api::Base::ActionHandle *output) +{ + + output->set_identifier(input.identifier); + output->set_action_type((Kinova::Api::Base::ActionType)input.action_type); + output->set_permission(input.permission); + + return 0; +} +int ToProtoData(kortex_driver::RequestedActionType input, Kinova::Api::Base::RequestedActionType *output) +{ + + output->set_action_type((Kinova::Api::Base::ActionType)input.action_type); + + return 0; +} +int ToProtoData(kortex_driver::Action input, Kinova::Api::Base::Action *output) +{ + + ToProtoData(input.handle, output->mutable_handle()); + output->set_name(input.name); + output->set_application_data(input.application_data); + if(input.oneof_action_parameters.send_twist_command.size() > 0) + { + ToProtoData(input.oneof_action_parameters.send_twist_command[0], output->mutable_send_twist_command()); + } + if(input.oneof_action_parameters.send_wrench_command.size() > 0) + { + ToProtoData(input.oneof_action_parameters.send_wrench_command[0], output->mutable_send_wrench_command()); + } + if(input.oneof_action_parameters.send_joint_speeds.size() > 0) + { + ToProtoData(input.oneof_action_parameters.send_joint_speeds[0], output->mutable_send_joint_speeds()); + } + if(input.oneof_action_parameters.reach_pose.size() > 0) + { + ToProtoData(input.oneof_action_parameters.reach_pose[0], output->mutable_reach_pose()); + } + if(input.oneof_action_parameters.reach_joint_angles.size() > 0) + { + ToProtoData(input.oneof_action_parameters.reach_joint_angles[0], output->mutable_reach_joint_angles()); + } + if(input.oneof_action_parameters.toggle_admittance_mode.size() > 0) + { + output->set_toggle_admittance_mode((Kinova::Api::Base::AdmittanceMode)input.oneof_action_parameters.toggle_admittance_mode[0]); + } + if(input.oneof_action_parameters.switch_control_mapping.size() > 0) + { + ToProtoData(input.oneof_action_parameters.switch_control_mapping[0], output->mutable_switch_control_mapping()); + } + if(input.oneof_action_parameters.navigate_joints.size() > 0) + { + output->set_navigate_joints((Kinova::Api::Base::JointNavigationDirection)input.oneof_action_parameters.navigate_joints[0]); + } + if(input.oneof_action_parameters.navigate_mappings.size() > 0) + { + output->set_navigate_mappings((Kinova::Api::Base::NavigationDirection)input.oneof_action_parameters.navigate_mappings[0]); + } + if(input.oneof_action_parameters.change_twist.size() > 0) + { + ToProtoData(input.oneof_action_parameters.change_twist[0], output->mutable_change_twist()); + } + if(input.oneof_action_parameters.change_joint_speeds.size() > 0) + { + ToProtoData(input.oneof_action_parameters.change_joint_speeds[0], output->mutable_change_joint_speeds()); + } + if(input.oneof_action_parameters.change_wrench.size() > 0) + { + ToProtoData(input.oneof_action_parameters.change_wrench[0], output->mutable_change_wrench()); + } + if(input.oneof_action_parameters.apply_emergency_stop.size() > 0) + { + ToProtoData(input.oneof_action_parameters.apply_emergency_stop[0], output->mutable_apply_emergency_stop()); + } + if(input.oneof_action_parameters.clear_faults.size() > 0) + { + ToProtoData(input.oneof_action_parameters.clear_faults[0], output->mutable_clear_faults()); + } + if(input.oneof_action_parameters.delay.size() > 0) + { + ToProtoData(input.oneof_action_parameters.delay[0], output->mutable_delay()); + } + if(input.oneof_action_parameters.execute_action.size() > 0) + { + ToProtoData(input.oneof_action_parameters.execute_action[0], output->mutable_execute_action()); + } + if(input.oneof_action_parameters.send_gripper_command.size() > 0) + { + ToProtoData(input.oneof_action_parameters.send_gripper_command[0], output->mutable_send_gripper_command()); + } + if(input.oneof_action_parameters.stop_action.size() > 0) + { + ToProtoData(input.oneof_action_parameters.stop_action[0], output->mutable_stop_action()); + } + if(input.oneof_action_parameters.play_pre_computed_trajectory.size() > 0) + { + ToProtoData(input.oneof_action_parameters.play_pre_computed_trajectory[0], output->mutable_play_pre_computed_trajectory()); + } + + return 0; +} +int ToProtoData(kortex_driver::SwitchControlMapping input, Kinova::Api::Base::SwitchControlMapping *output) +{ + + output->set_controller_identifier(input.controller_identifier); + ToProtoData(input.map_group_handle, output->mutable_map_group_handle()); + ToProtoData(input.map_handle, output->mutable_map_handle()); + + return 0; +} +int ToProtoData(kortex_driver::ChangeTwist input, Kinova::Api::Base::ChangeTwist *output) +{ + + output->set_linear(input.linear); + output->set_angular(input.angular); + + return 0; +} +int ToProtoData(kortex_driver::ChangeJointSpeeds input, Kinova::Api::Base::ChangeJointSpeeds *output) +{ + + ToProtoData(input.joint_speeds, output->mutable_joint_speeds()); + + return 0; +} +int ToProtoData(kortex_driver::ChangeWrench input, Kinova::Api::Base::ChangeWrench *output) +{ + + output->set_force(input.force); + output->set_torque(input.torque); + + return 0; +} +int ToProtoData(kortex_driver::EmergencyStop input, Kinova::Api::Base::EmergencyStop *output) +{ + + + return 0; +} +int ToProtoData(kortex_driver::Faults input, Kinova::Api::Base::Faults *output) +{ + + + return 0; +} +int ToProtoData(kortex_driver::Delay input, Kinova::Api::Base::Delay *output) +{ + + output->set_duration(input.duration); + + return 0; +} +int ToProtoData(kortex_driver::Base_Stop input, Kinova::Api::Base::Stop *output) +{ + + + return 0; +} +int ToProtoData(kortex_driver::ActionList input, Kinova::Api::Base::ActionList *output) +{ + + output->clear_action_list(); + for(int i = 0; i < input.action_list.size(); i++) + { + ToProtoData(input.action_list[i], output->add_action_list()); + } + + return 0; +} +int ToProtoData(kortex_driver::Timeout input, Kinova::Api::Base::Timeout *output) +{ + + output->set_value(input.value); + + return 0; +} +int ToProtoData(kortex_driver::Ssid input, Kinova::Api::Base::Ssid *output) +{ + + output->set_identifier(input.identifier); + + return 0; +} +int ToProtoData(kortex_driver::CommunicationInterfaceConfiguration input, Kinova::Api::Base::CommunicationInterfaceConfiguration *output) +{ + + output->set_type((Kinova::Api::Base::NetworkType)input.type); + output->set_enable(input.enable); + + return 0; +} +int ToProtoData(kortex_driver::NetworkHandle input, Kinova::Api::Base::NetworkHandle *output) +{ + + output->set_type((Kinova::Api::Base::NetworkType)input.type); + + return 0; +} +int ToProtoData(kortex_driver::IPv4Configuration input, Kinova::Api::Base::IPv4Configuration *output) +{ + + output->set_ip_address(input.ip_address); + output->set_subnet_mask(input.subnet_mask); + output->set_default_gateway(input.default_gateway); + output->set_dhcp_enabled(input.dhcp_enabled); + + return 0; +} +int ToProtoData(kortex_driver::IPv4Information input, Kinova::Api::Base::IPv4Information *output) +{ + + output->set_ip_address(input.ip_address); + output->set_subnet_mask(input.subnet_mask); + output->set_default_gateway(input.default_gateway); + + return 0; +} +int ToProtoData(kortex_driver::FullIPv4Configuration input, Kinova::Api::Base::FullIPv4Configuration *output) +{ + + ToProtoData(input.handle, output->mutable_handle()); + ToProtoData(input.ipv4_configuration, output->mutable_ipv4_configuration()); + + return 0; +} +int ToProtoData(kortex_driver::WifiInformation input, Kinova::Api::Base::WifiInformation *output) +{ + + ToProtoData(input.ssid, output->mutable_ssid()); + output->set_security_type(input.security_type); + output->set_encryption_type(input.encryption_type); + output->set_signal_quality((Kinova::Api::Base::SignalQuality)input.signal_quality); + output->set_signal_strength(input.signal_strength); + output->set_frequency(input.frequency); + output->set_channel(input.channel); + + return 0; +} +int ToProtoData(kortex_driver::WifiInformationList input, Kinova::Api::Base::WifiInformationList *output) +{ + + output->clear_wifi_information_list(); + for(int i = 0; i < input.wifi_information_list.size(); i++) + { + ToProtoData(input.wifi_information_list[i], output->add_wifi_information_list()); + } + + return 0; +} +int ToProtoData(kortex_driver::WifiConfiguration input, Kinova::Api::Base::WifiConfiguration *output) +{ + + ToProtoData(input.ssid, output->mutable_ssid()); + output->set_security_key(input.security_key); + output->set_connect_automatically(input.connect_automatically); + + return 0; +} +int ToProtoData(kortex_driver::WifiConfigurationList input, Kinova::Api::Base::WifiConfigurationList *output) +{ + + output->clear_wifi_configuration_list(); + for(int i = 0; i < input.wifi_configuration_list.size(); i++) + { + ToProtoData(input.wifi_configuration_list[i], output->add_wifi_configuration_list()); + } + + return 0; +} +int ToProtoData(kortex_driver::ProtectionZoneHandle input, Kinova::Api::Base::ProtectionZoneHandle *output) +{ + + output->set_identifier(input.identifier); + output->set_permission(input.permission); + + return 0; +} +int ToProtoData(kortex_driver::Base_RotationMatrixRow input, Kinova::Api::Base::RotationMatrixRow *output) +{ + + output->set_column1(input.column1); + output->set_column2(input.column2); + output->set_column3(input.column3); + + return 0; +} +int ToProtoData(kortex_driver::Base_RotationMatrix input, Kinova::Api::Base::RotationMatrix *output) +{ + + ToProtoData(input.row1, output->mutable_row1()); + ToProtoData(input.row2, output->mutable_row2()); + ToProtoData(input.row3, output->mutable_row3()); + + return 0; +} +int ToProtoData(kortex_driver::Point input, Kinova::Api::Base::Point *output) +{ + + output->set_x(input.x); + output->set_y(input.y); + output->set_z(input.z); + + return 0; +} +int ToProtoData(kortex_driver::ZoneShape input, Kinova::Api::Base::ZoneShape *output) +{ + + output->set_shape_type((Kinova::Api::Base::ShapeType)input.shape_type); + ToProtoData(input.origin, output->mutable_origin()); + ToProtoData(input.orientation, output->mutable_orientation()); + output->clear_dimensions(); + for(int i = 0; i < input.dimensions.size(); i++) + { + output->add_dimensions(input.dimensions[i]); + } + output->set_envelope_thickness(input.envelope_thickness); + + return 0; +} +int ToProtoData(kortex_driver::ProtectionZone input, Kinova::Api::Base::ProtectionZone *output) +{ + + ToProtoData(input.handle, output->mutable_handle()); + output->set_name(input.name); + output->set_application_data(input.application_data); + output->set_is_enabled(input.is_enabled); + ToProtoData(input.shape, output->mutable_shape()); + output->clear_limitations(); + for(int i = 0; i < input.limitations.size(); i++) + { + ToProtoData(input.limitations[i], output->add_limitations()); + } + output->clear_envelope_limitations(); + for(int i = 0; i < input.envelope_limitations.size(); i++) + { + ToProtoData(input.envelope_limitations[i], output->add_envelope_limitations()); + } + + return 0; +} +int ToProtoData(kortex_driver::ProtectionZoneList input, Kinova::Api::Base::ProtectionZoneList *output) +{ + + output->clear_protection_zones(); + for(int i = 0; i < input.protection_zones.size(); i++) + { + ToProtoData(input.protection_zones[i], output->add_protection_zones()); + } + + return 0; +} +int ToProtoData(kortex_driver::CartesianLimitation input, Kinova::Api::Base::CartesianLimitation *output) +{ + + output->set_type((Kinova::Api::Base::LimitationType)input.type); + output->set_translation(input.translation); + output->set_orientation(input.orientation); + + return 0; +} +int ToProtoData(kortex_driver::TwistLimitation input, Kinova::Api::Base::TwistLimitation *output) +{ + + output->set_linear(input.linear); + output->set_angular(input.angular); + + return 0; +} +int ToProtoData(kortex_driver::WrenchLimitation input, Kinova::Api::Base::WrenchLimitation *output) +{ + + output->set_force(input.force); + output->set_torque(input.torque); + + return 0; +} +int ToProtoData(kortex_driver::CartesianLimitationList input, Kinova::Api::Base::CartesianLimitationList *output) +{ + + output->clear_limitations(); + for(int i = 0; i < input.limitations.size(); i++) + { + ToProtoData(input.limitations[i], output->add_limitations()); + } + + return 0; +} +int ToProtoData(kortex_driver::JointLimitation input, Kinova::Api::Base::JointLimitation *output) +{ + + output->set_joint_identifier(input.joint_identifier); + output->set_type((Kinova::Api::Base::LimitationType)input.type); + output->set_value(input.value); + + return 0; +} +int ToProtoData(kortex_driver::JointsLimitationsList input, Kinova::Api::Base::JointsLimitationsList *output) +{ + + output->clear_joints_limitations(); + for(int i = 0; i < input.joints_limitations.size(); i++) + { + ToProtoData(input.joints_limitations[i], output->add_joints_limitations()); + } + + return 0; +} +int ToProtoData(kortex_driver::Query input, Kinova::Api::Base::Query *output) +{ + + ToProtoData(input.start_timestamp, output->mutable_start_timestamp()); + ToProtoData(input.end_timestamp, output->mutable_end_timestamp()); + output->set_username(input.username); + + return 0; +} +int ToProtoData(kortex_driver::ConfigurationChangeNotification input, Kinova::Api::Base::ConfigurationChangeNotification *output) +{ + + output->set_event((Kinova::Api::Base::ConfigurationNotificationEvent)input.event); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + if(input.oneof_configuration_change.sequence_handle.size() > 0) + { + ToProtoData(input.oneof_configuration_change.sequence_handle[0], output->mutable_sequence_handle()); + } + if(input.oneof_configuration_change.action_handle.size() > 0) + { + ToProtoData(input.oneof_configuration_change.action_handle[0], output->mutable_action_handle()); + } + if(input.oneof_configuration_change.mapping_handle.size() > 0) + { + ToProtoData(input.oneof_configuration_change.mapping_handle[0], output->mutable_mapping_handle()); + } + if(input.oneof_configuration_change.map_group_handle.size() > 0) + { + ToProtoData(input.oneof_configuration_change.map_group_handle[0], output->mutable_map_group_handle()); + } + if(input.oneof_configuration_change.map_handle.size() > 0) + { + ToProtoData(input.oneof_configuration_change.map_handle[0], output->mutable_map_handle()); + } + if(input.oneof_configuration_change.user_profile_handle.size() > 0) + { + ToProtoData(input.oneof_configuration_change.user_profile_handle[0], output->mutable_user_profile_handle()); + } + if(input.oneof_configuration_change.protection_zone_handle.size() > 0) + { + ToProtoData(input.oneof_configuration_change.protection_zone_handle[0], output->mutable_protection_zone_handle()); + } + if(input.oneof_configuration_change.safety_handle.size() > 0) + { + ToProtoData(input.oneof_configuration_change.safety_handle[0], output->mutable_safety_handle()); + } + if(input.oneof_configuration_change.network_handle.size() > 0) + { + ToProtoData(input.oneof_configuration_change.network_handle[0], output->mutable_network_handle()); + } + if(input.oneof_configuration_change.ssid.size() > 0) + { + ToProtoData(input.oneof_configuration_change.ssid[0], output->mutable_ssid()); + } + + return 0; +} +int ToProtoData(kortex_driver::MappingInfoNotification input, Kinova::Api::Base::MappingInfoNotification *output) +{ + + output->set_controller_identifier(input.controller_identifier); + ToProtoData(input.active_map_handle, output->mutable_active_map_handle()); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::Base_ControlModeInformation input, Kinova::Api::Base::ControlModeInformation *output) +{ + + output->set_mode((Kinova::Api::Base::ControlMode)input.mode); + + return 0; +} +int ToProtoData(kortex_driver::ControlModeNotification input, Kinova::Api::Base::ControlModeNotification *output) +{ + + output->set_control_mode((Kinova::Api::Base::ControlMode)input.control_mode); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::ServoingModeInformation input, Kinova::Api::Base::ServoingModeInformation *output) +{ + + output->set_servoing_mode((Kinova::Api::Base::ServoingMode)input.servoing_mode); + + return 0; +} +int ToProtoData(kortex_driver::OperatingModeInformation input, Kinova::Api::Base::OperatingModeInformation *output) +{ + + output->set_operating_mode((Kinova::Api::Base::OperatingMode)input.operating_mode); + ToProtoData(input.device_handle, output->mutable_device_handle()); + + return 0; +} +int ToProtoData(kortex_driver::OperatingModeNotification input, Kinova::Api::Base::OperatingModeNotification *output) +{ + + output->set_operating_mode((Kinova::Api::Base::OperatingMode)input.operating_mode); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + ToProtoData(input.device_handle, output->mutable_device_handle()); + + return 0; +} +int ToProtoData(kortex_driver::ServoingModeNotification input, Kinova::Api::Base::ServoingModeNotification *output) +{ + + output->set_servoing_mode((Kinova::Api::Base::ServoingMode)input.servoing_mode); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::SequenceInfoNotification input, Kinova::Api::Base::SequenceInfoNotification *output) +{ + + output->set_event_identifier((Kinova::Api::Base::EventIdSequenceInfoNotification)input.event_identifier); + ToProtoData(input.sequence_handle, output->mutable_sequence_handle()); + output->set_task_index(input.task_index); + output->set_group_identifier(input.group_identifier); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + output->set_abort_details((Kinova::Api::SubErrorCodes)input.abort_details); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::SequenceInformation input, Kinova::Api::Base::SequenceInformation *output) +{ + + output->set_event_identifier((Kinova::Api::Base::EventIdSequenceInfoNotification)input.event_identifier); + output->set_task_index(input.task_index); + output->set_task_identifier(input.task_identifier); + + return 0; +} +int ToProtoData(kortex_driver::ProtectionZoneNotification input, Kinova::Api::Base::ProtectionZoneNotification *output) +{ + + output->set_event((Kinova::Api::Base::ProtectionZoneEvent)input.event); + ToProtoData(input.handle, output->mutable_handle()); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::ProtectionZoneInformation input, Kinova::Api::Base::ProtectionZoneInformation *output) +{ + + output->set_event((Kinova::Api::Base::ProtectionZoneEvent)input.event); + + return 0; +} +int ToProtoData(kortex_driver::UserNotification input, Kinova::Api::Base::UserNotification *output) +{ + + output->set_user_event((Kinova::Api::Base::UserEvent)input.user_event); + ToProtoData(input.modified_user, output->mutable_modified_user()); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::ControllerHandle input, Kinova::Api::Base::ControllerHandle *output) +{ + + output->set_type((Kinova::Api::Base::ControllerType)input.type); + output->set_controller_identifier(input.controller_identifier); + + return 0; +} +int ToProtoData(kortex_driver::ControllerElementHandle input, Kinova::Api::Base::ControllerElementHandle *output) +{ + + ToProtoData(input.controller_handle, output->mutable_controller_handle()); + if(input.oneof_identifier.button.size() > 0) + { + output->set_button(input.oneof_identifier.button[0]); + } + if(input.oneof_identifier.axis.size() > 0) + { + output->set_axis(input.oneof_identifier.axis[0]); + } + + return 0; +} +int ToProtoData(kortex_driver::ControllerNotification input, Kinova::Api::Base::ControllerNotification *output) +{ + + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + if(input.oneof_state.controller_state.size() > 0) + { + ToProtoData(input.oneof_state.controller_state[0], output->mutable_controller_state()); + } + if(input.oneof_state.controller_element.size() > 0) + { + ToProtoData(input.oneof_state.controller_element[0], output->mutable_controller_element()); + } + + return 0; +} +int ToProtoData(kortex_driver::ControllerList input, Kinova::Api::Base::ControllerList *output) +{ + + output->clear_handles(); + for(int i = 0; i < input.handles.size(); i++) + { + ToProtoData(input.handles[i], output->add_handles()); + } + + return 0; +} +int ToProtoData(kortex_driver::ControllerState input, Kinova::Api::Base::ControllerState *output) +{ + + ToProtoData(input.handle, output->mutable_handle()); + output->set_event_type((Kinova::Api::Base::ControllerEventType)input.event_type); + + return 0; +} +int ToProtoData(kortex_driver::ControllerElementState input, Kinova::Api::Base::ControllerElementState *output) +{ + + ToProtoData(input.handle, output->mutable_handle()); + output->set_event_type((Kinova::Api::Base::ControllerElementEventType)input.event_type); + output->set_axis_value(input.axis_value); + + return 0; +} +int ToProtoData(kortex_driver::ActionNotification input, Kinova::Api::Base::ActionNotification *output) +{ + + output->set_action_event((Kinova::Api::Base::ActionEvent)input.action_event); + ToProtoData(input.handle, output->mutable_handle()); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + output->set_abort_details((Kinova::Api::SubErrorCodes)input.abort_details); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::ActionExecutionState input, Kinova::Api::Base::ActionExecutionState *output) +{ + + output->set_action_event((Kinova::Api::Base::ActionEvent)input.action_event); + ToProtoData(input.handle, output->mutable_handle()); + + return 0; +} +int ToProtoData(kortex_driver::RobotEventNotification input, Kinova::Api::Base::RobotEventNotification *output) +{ + + output->set_event((Kinova::Api::Base::RobotEvent)input.event); + ToProtoData(input.handle, output->mutable_handle()); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::FactoryNotification input, Kinova::Api::Base::FactoryNotification *output) +{ + + output->set_event((Kinova::Api::Base::FactoryEvent)input.event); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::NetworkNotification input, Kinova::Api::Base::NetworkNotification *output) +{ + + output->set_event((Kinova::Api::Base::NetworkEvent)input.event); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::ConfigurationChangeNotificationList input, Kinova::Api::Base::ConfigurationChangeNotificationList *output) +{ + + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::MappingInfoNotificationList input, Kinova::Api::Base::MappingInfoNotificationList *output) +{ + + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::ControlModeNotificationList input, Kinova::Api::Base::ControlModeNotificationList *output) +{ + + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::OperatingModeNotificationList input, Kinova::Api::Base::OperatingModeNotificationList *output) +{ + + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::ServoingModeNotificationList input, Kinova::Api::Base::ServoingModeNotificationList *output) +{ + + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::SequenceInfoNotificationList input, Kinova::Api::Base::SequenceInfoNotificationList *output) +{ + + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::ProtectionZoneNotificationList input, Kinova::Api::Base::ProtectionZoneNotificationList *output) +{ + + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::UserNotificationList input, Kinova::Api::Base::UserNotificationList *output) +{ + + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::SafetyNotificationList input, Kinova::Api::Base::SafetyNotificationList *output) +{ + + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::ControllerNotificationList input, Kinova::Api::Base::ControllerNotificationList *output) +{ + + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::ActionNotificationList input, Kinova::Api::Base::ActionNotificationList *output) +{ + + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::RobotEventNotificationList input, Kinova::Api::Base::RobotEventNotificationList *output) +{ + + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::NetworkNotificationList input, Kinova::Api::Base::NetworkNotificationList *output) +{ + + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::MappingHandle input, Kinova::Api::Base::MappingHandle *output) +{ + + output->set_identifier(input.identifier); + output->set_permission(input.permission); + + return 0; +} +int ToProtoData(kortex_driver::SafetyEvent input, Kinova::Api::Base::SafetyEvent *output) +{ + + ToProtoData(input.safety_handle, output->mutable_safety_handle()); + + return 0; +} +int ToProtoData(kortex_driver::ControllerEvent input, Kinova::Api::Base::ControllerEvent *output) +{ + + output->set_input_type((Kinova::Api::Base::ControllerInputType)input.input_type); + output->set_behavior((Kinova::Api::Base::ControllerBehavior)input.behavior); + output->set_input_identifier(input.input_identifier); + + return 0; +} +int ToProtoData(kortex_driver::GpioEvent input, Kinova::Api::Base::GpioEvent *output) +{ + + output->set_gpio_state((Kinova::Api::Base::GpioState)input.gpio_state); + output->set_device_identifier(input.device_identifier); + + return 0; +} +int ToProtoData(kortex_driver::MapEvent input, Kinova::Api::Base::MapEvent *output) +{ + + output->set_name(input.name); + if(input.oneof_events.safety_event.size() > 0) + { + ToProtoData(input.oneof_events.safety_event[0], output->mutable_safety_event()); + } + if(input.oneof_events.gpio_event.size() > 0) + { + ToProtoData(input.oneof_events.gpio_event[0], output->mutable_gpio_event()); + } + if(input.oneof_events.controller_event.size() > 0) + { + ToProtoData(input.oneof_events.controller_event[0], output->mutable_controller_event()); + } + + return 0; +} +int ToProtoData(kortex_driver::MapElement input, Kinova::Api::Base::MapElement *output) +{ + + ToProtoData(input.event, output->mutable_event()); + ToProtoData(input.action, output->mutable_action()); + + return 0; +} +int ToProtoData(kortex_driver::ActivateMapHandle input, Kinova::Api::Base::ActivateMapHandle *output) +{ + + ToProtoData(input.mapping_handle, output->mutable_mapping_handle()); + ToProtoData(input.map_group_handle, output->mutable_map_group_handle()); + ToProtoData(input.map_handle, output->mutable_map_handle()); + + return 0; +} +int ToProtoData(kortex_driver::Map input, Kinova::Api::Base::Map *output) +{ + + ToProtoData(input.handle, output->mutable_handle()); + output->set_name(input.name); + output->clear_elements(); + for(int i = 0; i < input.elements.size(); i++) + { + ToProtoData(input.elements[i], output->add_elements()); + } + + return 0; +} +int ToProtoData(kortex_driver::MapHandle input, Kinova::Api::Base::MapHandle *output) +{ + + output->set_identifier(input.identifier); + output->set_permission(input.permission); + + return 0; +} +int ToProtoData(kortex_driver::MapList input, Kinova::Api::Base::MapList *output) +{ + + output->clear_map_list(); + for(int i = 0; i < input.map_list.size(); i++) + { + ToProtoData(input.map_list[i], output->add_map_list()); + } + + return 0; +} +int ToProtoData(kortex_driver::MapGroupHandle input, Kinova::Api::Base::MapGroupHandle *output) +{ + + output->set_identifier(input.identifier); + output->set_permission(input.permission); + + return 0; +} +int ToProtoData(kortex_driver::MapGroup input, Kinova::Api::Base::MapGroup *output) +{ + + ToProtoData(input.group_handle, output->mutable_group_handle()); + output->set_name(input.name); + ToProtoData(input.related_mapping_handle, output->mutable_related_mapping_handle()); + ToProtoData(input.parent_group_handle, output->mutable_parent_group_handle()); + output->clear_children_map_group_handles(); + for(int i = 0; i < input.children_map_group_handles.size(); i++) + { + ToProtoData(input.children_map_group_handles[i], output->add_children_map_group_handles()); + } + output->clear_map_handles(); + for(int i = 0; i < input.map_handles.size(); i++) + { + ToProtoData(input.map_handles[i], output->add_map_handles()); + } + output->set_application_data(input.application_data); + + return 0; +} +int ToProtoData(kortex_driver::MapGroupList input, Kinova::Api::Base::MapGroupList *output) +{ + + output->clear_map_groups(); + for(int i = 0; i < input.map_groups.size(); i++) + { + ToProtoData(input.map_groups[i], output->add_map_groups()); + } + + return 0; +} +int ToProtoData(kortex_driver::Mapping input, Kinova::Api::Base::Mapping *output) +{ + + ToProtoData(input.handle, output->mutable_handle()); + output->set_name(input.name); + output->set_controller_identifier(input.controller_identifier); + ToProtoData(input.active_map_group_handle, output->mutable_active_map_group_handle()); + output->clear_map_group_handles(); + for(int i = 0; i < input.map_group_handles.size(); i++) + { + ToProtoData(input.map_group_handles[i], output->add_map_group_handles()); + } + ToProtoData(input.active_map_handle, output->mutable_active_map_handle()); + output->clear_map_handles(); + for(int i = 0; i < input.map_handles.size(); i++) + { + ToProtoData(input.map_handles[i], output->add_map_handles()); + } + output->set_application_data(input.application_data); + + return 0; +} +int ToProtoData(kortex_driver::MappingList input, Kinova::Api::Base::MappingList *output) +{ + + output->clear_mappings(); + for(int i = 0; i < input.mappings.size(); i++) + { + ToProtoData(input.mappings[i], output->add_mappings()); + } + + return 0; +} +int ToProtoData(kortex_driver::TransformationMatrix input, Kinova::Api::Base::TransformationMatrix *output) +{ + + ToProtoData(input.r0, output->mutable_r0()); + ToProtoData(input.r1, output->mutable_r1()); + ToProtoData(input.r2, output->mutable_r2()); + ToProtoData(input.r3, output->mutable_r3()); + + return 0; +} +int ToProtoData(kortex_driver::TransformationRow input, Kinova::Api::Base::TransformationRow *output) +{ + + output->set_c0(input.c0); + output->set_c1(input.c1); + output->set_c2(input.c2); + output->set_c3(input.c3); + + return 0; +} +int ToProtoData(kortex_driver::Pose input, Kinova::Api::Base::Pose *output) +{ + + output->set_x(input.x); + output->set_y(input.y); + output->set_z(input.z); + output->set_theta_x(input.theta_x); + output->set_theta_y(input.theta_y); + output->set_theta_z(input.theta_z); + + return 0; +} +int ToProtoData(kortex_driver::Base_Position input, Kinova::Api::Base::Position *output) +{ + + output->set_x(input.x); + output->set_y(input.y); + output->set_z(input.z); + + return 0; +} +int ToProtoData(kortex_driver::Orientation input, Kinova::Api::Base::Orientation *output) +{ + + output->set_theta_x(input.theta_x); + output->set_theta_y(input.theta_y); + output->set_theta_z(input.theta_z); + + return 0; +} +int ToProtoData(kortex_driver::CartesianSpeed input, Kinova::Api::Base::CartesianSpeed *output) +{ + + output->set_translation(input.translation); + output->set_orientation(input.orientation); + + return 0; +} +int ToProtoData(kortex_driver::CartesianTrajectoryConstraint input, Kinova::Api::Base::CartesianTrajectoryConstraint *output) +{ + + if(input.oneof_type.speed.size() > 0) + { + ToProtoData(input.oneof_type.speed[0], output->mutable_speed()); + } + if(input.oneof_type.duration.size() > 0) + { + output->set_duration(input.oneof_type.duration[0]); + } + + return 0; +} +int ToProtoData(kortex_driver::JointTrajectoryConstraint input, Kinova::Api::Base::JointTrajectoryConstraint *output) +{ + + output->set_type((Kinova::Api::Base::JointTrajectoryConstraintType)input.type); + output->set_value(input.value); + + return 0; +} +int ToProtoData(kortex_driver::Wrench input, Kinova::Api::Base::Wrench *output) +{ + + output->set_force_x(input.force_x); + output->set_force_y(input.force_y); + output->set_force_z(input.force_z); + output->set_torque_x(input.torque_x); + output->set_torque_y(input.torque_y); + output->set_torque_z(input.torque_z); + + return 0; +} +int ToProtoData(kortex_driver::Twist input, Kinova::Api::Base::Twist *output) +{ + + output->set_linear_x(input.linear_x); + output->set_linear_y(input.linear_y); + output->set_linear_z(input.linear_z); + output->set_angular_x(input.angular_x); + output->set_angular_y(input.angular_y); + output->set_angular_z(input.angular_z); + + return 0; +} +int ToProtoData(kortex_driver::Admittance input, Kinova::Api::Base::Admittance *output) +{ + + output->set_admittance_mode((Kinova::Api::Base::AdmittanceMode)input.admittance_mode); + + return 0; +} +int ToProtoData(kortex_driver::ConstrainedPose input, Kinova::Api::Base::ConstrainedPose *output) +{ + + ToProtoData(input.target_pose, output->mutable_target_pose()); + ToProtoData(input.constraint, output->mutable_constraint()); + + return 0; +} +int ToProtoData(kortex_driver::ConstrainedPosition input, Kinova::Api::Base::ConstrainedPosition *output) +{ + + ToProtoData(input.target_position, output->mutable_target_position()); + ToProtoData(input.constraint, output->mutable_constraint()); + + return 0; +} +int ToProtoData(kortex_driver::ConstrainedOrientation input, Kinova::Api::Base::ConstrainedOrientation *output) +{ + + ToProtoData(input.target_orientation, output->mutable_target_orientation()); + ToProtoData(input.constraint, output->mutable_constraint()); + + return 0; +} +int ToProtoData(kortex_driver::WrenchCommand input, Kinova::Api::Base::WrenchCommand *output) +{ + + output->set_reference_frame((Kinova::Api::Common::CartesianReferenceFrame)input.reference_frame); + output->set_mode((Kinova::Api::Base::WrenchMode)input.mode); + ToProtoData(input.wrench, output->mutable_wrench()); + output->set_duration(input.duration); + + return 0; +} +int ToProtoData(kortex_driver::TwistCommand input, Kinova::Api::Base::TwistCommand *output) +{ + + output->set_reference_frame((Kinova::Api::Common::CartesianReferenceFrame)input.reference_frame); + ToProtoData(input.twist, output->mutable_twist()); + output->set_duration(input.duration); + + return 0; +} +int ToProtoData(kortex_driver::ConstrainedJointAngles input, Kinova::Api::Base::ConstrainedJointAngles *output) +{ + + ToProtoData(input.joint_angles, output->mutable_joint_angles()); + ToProtoData(input.constraint, output->mutable_constraint()); + + return 0; +} +int ToProtoData(kortex_driver::ConstrainedJointAngle input, Kinova::Api::Base::ConstrainedJointAngle *output) +{ + + output->set_joint_identifier(input.joint_identifier); + output->set_value(input.value); + ToProtoData(input.constraint, output->mutable_constraint()); + + return 0; +} +int ToProtoData(kortex_driver::JointAngles input, Kinova::Api::Base::JointAngles *output) +{ + + output->clear_joint_angles(); + for(int i = 0; i < input.joint_angles.size(); i++) + { + ToProtoData(input.joint_angles[i], output->add_joint_angles()); + } + + return 0; +} +int ToProtoData(kortex_driver::JointAngle input, Kinova::Api::Base::JointAngle *output) +{ + + output->set_joint_identifier(input.joint_identifier); + output->set_value(input.value); + + return 0; +} +int ToProtoData(kortex_driver::JointSpeeds input, Kinova::Api::Base::JointSpeeds *output) +{ + + output->clear_joint_speeds(); + for(int i = 0; i < input.joint_speeds.size(); i++) + { + ToProtoData(input.joint_speeds[i], output->add_joint_speeds()); + } + output->set_duration(input.duration); + + return 0; +} +int ToProtoData(kortex_driver::JointSpeed input, Kinova::Api::Base::JointSpeed *output) +{ + + output->set_joint_identifier(input.joint_identifier); + output->set_value(input.value); + output->set_duration(input.duration); + + return 0; +} +int ToProtoData(kortex_driver::JointTorques input, Kinova::Api::Base::JointTorques *output) +{ + + output->clear_joint_torques(); + for(int i = 0; i < input.joint_torques.size(); i++) + { + ToProtoData(input.joint_torques[i], output->add_joint_torques()); + } + output->set_duration(input.duration); + + return 0; +} +int ToProtoData(kortex_driver::JointTorque input, Kinova::Api::Base::JointTorque *output) +{ + + output->set_joint_identifier(input.joint_identifier); + output->set_value(input.value); + output->set_duration(input.duration); + + return 0; +} +int ToProtoData(kortex_driver::GripperCommand input, Kinova::Api::Base::GripperCommand *output) +{ + + output->set_mode((Kinova::Api::Base::GripperMode)input.mode); + ToProtoData(input.gripper, output->mutable_gripper()); + output->set_duration(input.duration); + + return 0; +} +int ToProtoData(kortex_driver::GripperRequest input, Kinova::Api::Base::GripperRequest *output) +{ + + output->set_mode((Kinova::Api::Base::GripperMode)input.mode); + + return 0; +} +int ToProtoData(kortex_driver::Gripper input, Kinova::Api::Base::Gripper *output) +{ + + output->clear_finger(); + for(int i = 0; i < input.finger.size(); i++) + { + ToProtoData(input.finger[i], output->add_finger()); + } + + return 0; +} +int ToProtoData(kortex_driver::Finger input, Kinova::Api::Base::Finger *output) +{ + + output->set_finger_identifier(input.finger_identifier); + output->set_value(input.value); + + return 0; +} +int ToProtoData(kortex_driver::SystemTime input, Kinova::Api::Base::SystemTime *output) +{ + + output->set_sec(input.sec); + output->set_min(input.min); + output->set_hour(input.hour); + output->set_mday(input.mday); + output->set_mon(input.mon); + output->set_year(input.year); + + return 0; +} +int ToProtoData(kortex_driver::ActuatorInformation input, Kinova::Api::Base::ActuatorInformation *output) +{ + + output->set_count(input.count); + + return 0; +} +int ToProtoData(kortex_driver::ArmStateInformation input, Kinova::Api::Base::ArmStateInformation *output) +{ + + output->set_active_state((Kinova::Api::Common::ArmState)input.active_state); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::ArmStateNotification input, Kinova::Api::Base::ArmStateNotification *output) +{ + + output->set_active_state((Kinova::Api::Common::ArmState)input.active_state); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::Base_CapSenseConfig input, Kinova::Api::Base::CapSenseConfig *output) +{ + + output->set_identifier(input.identifier); + output->set_mode((Kinova::Api::Base::CapSenseMode)input.mode); + output->set_threshold_a(input.threshold_a); + output->set_threshold_b(input.threshold_b); + output->set_sensitivity_a(input.sensitivity_a); + output->set_sensitivity_b(input.sensitivity_b); + + return 0; +} +int ToProtoData(kortex_driver::BridgeList input, Kinova::Api::Base::BridgeList *output) +{ + + output->clear_bridgeconfig(); + for(int i = 0; i < input.bridgeConfig.size(); i++) + { + ToProtoData(input.bridgeConfig[i], output->add_bridgeconfig()); + } + + return 0; +} +int ToProtoData(kortex_driver::BridgeResult input, Kinova::Api::Base::BridgeResult *output) +{ + + ToProtoData(input.bridge_id, output->mutable_bridge_id()); + output->set_status((Kinova::Api::Base::BridgeStatus)input.status); + + return 0; +} +int ToProtoData(kortex_driver::BridgeIdentifier input, Kinova::Api::Base::BridgeIdentifier *output) +{ + + output->set_bridge_id(input.bridge_id); + + return 0; +} +int ToProtoData(kortex_driver::BridgeConfig input, Kinova::Api::Base::BridgeConfig *output) +{ + + output->set_device_identifier(input.device_identifier); + output->set_bridgetype((Kinova::Api::Base::BridgeType)input.bridgetype); + ToProtoData(input.port_config, output->mutable_port_config()); + ToProtoData(input.bridge_id, output->mutable_bridge_id()); + + return 0; +} +int ToProtoData(kortex_driver::BridgePortConfig input, Kinova::Api::Base::BridgePortConfig *output) +{ + + output->set_target_port(input.target_port); + output->set_out_port(input.out_port); + + return 0; +} +int ToProtoData(kortex_driver::PreComputedJointTrajectory input, Kinova::Api::Base::PreComputedJointTrajectory *output) +{ + + output->set_mode((Kinova::Api::Base::TrajectoryContinuityMode)input.mode); + output->clear_trajectory_elements(); + for(int i = 0; i < input.trajectory_elements.size(); i++) + { + ToProtoData(input.trajectory_elements[i], output->add_trajectory_elements()); + } + + return 0; +} +int ToProtoData(kortex_driver::PreComputedJointTrajectoryElement input, Kinova::Api::Base::PreComputedJointTrajectoryElement *output) +{ + + output->clear_joint_angles(); + for(int i = 0; i < input.joint_angles.size(); i++) + { + output->add_joint_angles(input.joint_angles[i]); + } + output->clear_joint_speeds(); + for(int i = 0; i < input.joint_speeds.size(); i++) + { + output->add_joint_speeds(input.joint_speeds[i]); + } + output->clear_joint_accelerations(); + for(int i = 0; i < input.joint_accelerations.size(); i++) + { + output->add_joint_accelerations(input.joint_accelerations[i]); + } + output->set_time_from_start(input.time_from_start); + + return 0; +} +int ToProtoData(kortex_driver::TrajectoryErrorElement input, Kinova::Api::Base::TrajectoryErrorElement *output) +{ + + output->set_error_type((Kinova::Api::Base::TrajectoryErrorType)input.error_type); + output->set_error_identifier((Kinova::Api::Base::TrajectoryErrorIdentifier)input.error_identifier); + output->set_error_value(input.error_value); + output->set_min_value(input.min_value); + output->set_max_value(input.max_value); + output->set_index(input.index); + output->set_message(input.message); + + return 0; +} +int ToProtoData(kortex_driver::TrajectoryErrorReport input, Kinova::Api::Base::TrajectoryErrorReport *output) +{ + + output->clear_trajectory_error_elements(); + for(int i = 0; i < input.trajectory_error_elements.size(); i++) + { + ToProtoData(input.trajectory_error_elements[i], output->add_trajectory_error_elements()); + } + + return 0; +} diff --git a/kortex_driver/src/generated/base_ros_converter.cpp b/kortex_driver/src/generated/base_ros_converter.cpp new file mode 100644 index 00000000..99b3027e --- /dev/null +++ b/kortex_driver/src/generated/base_ros_converter.cpp @@ -0,0 +1,2094 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/base_ros_converter.h" + +int ToRosData(Kinova::Api::Base::FullUserProfile input, kortex_driver::FullUserProfile &output) +{ + + ToRosData(input.user_profile(), output.user_profile); + output.password = input.password(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::UserProfile input, kortex_driver::UserProfile &output) +{ + + ToRosData(input.handle(), output.handle); + output.username = input.username(); + output.firstname = input.firstname(); + output.lastname = input.lastname(); + output.application_data = input.application_data(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::UserProfileList input, kortex_driver::UserProfileList &output) +{ + + output.user_profiles.clear(); + for(int i = 0; i < input.user_profiles_size(); i++) + { + kortex_driver::UserProfile temp; + ToRosData(input.user_profiles(i), temp); + output.user_profiles.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::UserList input, kortex_driver::UserList &output) +{ + + output.user_handles.clear(); + for(int i = 0; i < input.user_handles_size(); i++) + { + kortex_driver::UserProfileHandle temp; + ToRosData(input.user_handles(i), temp); + output.user_handles.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::PasswordChange input, kortex_driver::PasswordChange &output) +{ + + ToRosData(input.handle(), output.handle); + output.old_password = input.old_password(); + output.new_password = input.new_password(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::SequenceHandle input, kortex_driver::SequenceHandle &output) +{ + + output.identifier = input.identifier(); + output.permission = input.permission(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::AdvancedSequenceHandle input, kortex_driver::AdvancedSequenceHandle &output) +{ + + ToRosData(input.handle(), output.handle); + output.in_loop = input.in_loop(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::SequenceTaskHandle input, kortex_driver::SequenceTaskHandle &output) +{ + + ToRosData(input.sequence_handle(), output.sequence_handle); + output.task_index = input.task_index(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::SequenceTask input, kortex_driver::SequenceTask &output) +{ + + output.group_identifier = input.group_identifier(); + ToRosData(input.action(), output.action); + output.application_data = input.application_data(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::Sequence input, kortex_driver::Sequence &output) +{ + + ToRosData(input.handle(), output.handle); + output.name = input.name(); + output.application_data = input.application_data(); + output.tasks.clear(); + for(int i = 0; i < input.tasks_size(); i++) + { + kortex_driver::SequenceTask temp; + ToRosData(input.tasks(i), temp); + output.tasks.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::SequenceList input, kortex_driver::SequenceList &output) +{ + + output.sequence_list.clear(); + for(int i = 0; i < input.sequence_list_size(); i++) + { + kortex_driver::Sequence temp; + ToRosData(input.sequence_list(i), temp); + output.sequence_list.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::AppendActionInformation input, kortex_driver::AppendActionInformation &output) +{ + + ToRosData(input.sequence_handle(), output.sequence_handle); + ToRosData(input.action(), output.action); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ActionHandle input, kortex_driver::ActionHandle &output) +{ + + output.identifier = input.identifier(); + output.action_type = input.action_type(); + output.permission = input.permission(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::RequestedActionType input, kortex_driver::RequestedActionType &output) +{ + + output.action_type = input.action_type(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::Action input, kortex_driver::Action &output) +{ + + ToRosData(input.handle(), output.handle); + output.name = input.name(); + output.application_data = input.application_data(); + + + auto oneof_type = input.action_parameters_case(); + switch(oneof_type) + { + + case Kinova::Api::Base::Action::kSendTwistCommand: + { + decltype(output.oneof_action_parameters.send_twist_command)::value_type temp; + ToRosData(input.send_twist_command(), temp); + output.oneof_action_parameters.send_twist_command.push_back(temp); + break; + } + + case Kinova::Api::Base::Action::kSendWrenchCommand: + { + decltype(output.oneof_action_parameters.send_wrench_command)::value_type temp; + ToRosData(input.send_wrench_command(), temp); + output.oneof_action_parameters.send_wrench_command.push_back(temp); + break; + } + + case Kinova::Api::Base::Action::kSendJointSpeeds: + { + decltype(output.oneof_action_parameters.send_joint_speeds)::value_type temp; + ToRosData(input.send_joint_speeds(), temp); + output.oneof_action_parameters.send_joint_speeds.push_back(temp); + break; + } + + case Kinova::Api::Base::Action::kReachPose: + { + decltype(output.oneof_action_parameters.reach_pose)::value_type temp; + ToRosData(input.reach_pose(), temp); + output.oneof_action_parameters.reach_pose.push_back(temp); + break; + } + + case Kinova::Api::Base::Action::kReachJointAngles: + { + decltype(output.oneof_action_parameters.reach_joint_angles)::value_type temp; + ToRosData(input.reach_joint_angles(), temp); + output.oneof_action_parameters.reach_joint_angles.push_back(temp); + break; + } + + case Kinova::Api::Base::Action::kToggleAdmittanceMode: + { + output.oneof_action_parameters.toggle_admittance_mode.push_back(input.toggle_admittance_mode()); + + break; + } + + case Kinova::Api::Base::Action::kSwitchControlMapping: + { + decltype(output.oneof_action_parameters.switch_control_mapping)::value_type temp; + ToRosData(input.switch_control_mapping(), temp); + output.oneof_action_parameters.switch_control_mapping.push_back(temp); + break; + } + + case Kinova::Api::Base::Action::kNavigateJoints: + { + output.oneof_action_parameters.navigate_joints.push_back(input.navigate_joints()); + + break; + } + + case Kinova::Api::Base::Action::kNavigateMappings: + { + output.oneof_action_parameters.navigate_mappings.push_back(input.navigate_mappings()); + + break; + } + + case Kinova::Api::Base::Action::kChangeTwist: + { + decltype(output.oneof_action_parameters.change_twist)::value_type temp; + ToRosData(input.change_twist(), temp); + output.oneof_action_parameters.change_twist.push_back(temp); + break; + } + + case Kinova::Api::Base::Action::kChangeJointSpeeds: + { + decltype(output.oneof_action_parameters.change_joint_speeds)::value_type temp; + ToRosData(input.change_joint_speeds(), temp); + output.oneof_action_parameters.change_joint_speeds.push_back(temp); + break; + } + + case Kinova::Api::Base::Action::kChangeWrench: + { + decltype(output.oneof_action_parameters.change_wrench)::value_type temp; + ToRosData(input.change_wrench(), temp); + output.oneof_action_parameters.change_wrench.push_back(temp); + break; + } + + case Kinova::Api::Base::Action::kApplyEmergencyStop: + { + decltype(output.oneof_action_parameters.apply_emergency_stop)::value_type temp; + ToRosData(input.apply_emergency_stop(), temp); + output.oneof_action_parameters.apply_emergency_stop.push_back(temp); + break; + } + + case Kinova::Api::Base::Action::kClearFaults: + { + decltype(output.oneof_action_parameters.clear_faults)::value_type temp; + ToRosData(input.clear_faults(), temp); + output.oneof_action_parameters.clear_faults.push_back(temp); + break; + } + + case Kinova::Api::Base::Action::kDelay: + { + decltype(output.oneof_action_parameters.delay)::value_type temp; + ToRosData(input.delay(), temp); + output.oneof_action_parameters.delay.push_back(temp); + break; + } + + case Kinova::Api::Base::Action::kExecuteAction: + { + decltype(output.oneof_action_parameters.execute_action)::value_type temp; + ToRosData(input.execute_action(), temp); + output.oneof_action_parameters.execute_action.push_back(temp); + break; + } + + case Kinova::Api::Base::Action::kSendGripperCommand: + { + decltype(output.oneof_action_parameters.send_gripper_command)::value_type temp; + ToRosData(input.send_gripper_command(), temp); + output.oneof_action_parameters.send_gripper_command.push_back(temp); + break; + } + + case Kinova::Api::Base::Action::kStopAction: + { + decltype(output.oneof_action_parameters.stop_action)::value_type temp; + ToRosData(input.stop_action(), temp); + output.oneof_action_parameters.stop_action.push_back(temp); + break; + } + + case Kinova::Api::Base::Action::kPlayPreComputedTrajectory: + { + decltype(output.oneof_action_parameters.play_pre_computed_trajectory)::value_type temp; + ToRosData(input.play_pre_computed_trajectory(), temp); + output.oneof_action_parameters.play_pre_computed_trajectory.push_back(temp); + break; + }} + + return 0; +} +int ToRosData(Kinova::Api::Base::SwitchControlMapping input, kortex_driver::SwitchControlMapping &output) +{ + + output.controller_identifier = input.controller_identifier(); + ToRosData(input.map_group_handle(), output.map_group_handle); + ToRosData(input.map_handle(), output.map_handle); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ChangeTwist input, kortex_driver::ChangeTwist &output) +{ + + output.linear = input.linear(); + output.angular = input.angular(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ChangeJointSpeeds input, kortex_driver::ChangeJointSpeeds &output) +{ + + ToRosData(input.joint_speeds(), output.joint_speeds); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ChangeWrench input, kortex_driver::ChangeWrench &output) +{ + + output.force = input.force(); + output.torque = input.torque(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::EmergencyStop input, kortex_driver::EmergencyStop &output) +{ + + + + + return 0; +} +int ToRosData(Kinova::Api::Base::Faults input, kortex_driver::Faults &output) +{ + + + + + return 0; +} +int ToRosData(Kinova::Api::Base::Delay input, kortex_driver::Delay &output) +{ + + output.duration = input.duration(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::Stop input, kortex_driver::Base_Stop &output) +{ + + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ActionList input, kortex_driver::ActionList &output) +{ + + output.action_list.clear(); + for(int i = 0; i < input.action_list_size(); i++) + { + kortex_driver::Action temp; + ToRosData(input.action_list(i), temp); + output.action_list.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::Timeout input, kortex_driver::Timeout &output) +{ + + output.value = input.value(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::Ssid input, kortex_driver::Ssid &output) +{ + + output.identifier = input.identifier(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::CommunicationInterfaceConfiguration input, kortex_driver::CommunicationInterfaceConfiguration &output) +{ + + output.type = input.type(); + output.enable = input.enable(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::NetworkHandle input, kortex_driver::NetworkHandle &output) +{ + + output.type = input.type(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::IPv4Configuration input, kortex_driver::IPv4Configuration &output) +{ + + output.ip_address = input.ip_address(); + output.subnet_mask = input.subnet_mask(); + output.default_gateway = input.default_gateway(); + output.dhcp_enabled = input.dhcp_enabled(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::IPv4Information input, kortex_driver::IPv4Information &output) +{ + + output.ip_address = input.ip_address(); + output.subnet_mask = input.subnet_mask(); + output.default_gateway = input.default_gateway(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::FullIPv4Configuration input, kortex_driver::FullIPv4Configuration &output) +{ + + ToRosData(input.handle(), output.handle); + ToRosData(input.ipv4_configuration(), output.ipv4_configuration); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::WifiInformation input, kortex_driver::WifiInformation &output) +{ + + ToRosData(input.ssid(), output.ssid); + output.security_type = input.security_type(); + output.encryption_type = input.encryption_type(); + output.signal_quality = input.signal_quality(); + output.signal_strength = input.signal_strength(); + output.frequency = input.frequency(); + output.channel = input.channel(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::WifiInformationList input, kortex_driver::WifiInformationList &output) +{ + + output.wifi_information_list.clear(); + for(int i = 0; i < input.wifi_information_list_size(); i++) + { + kortex_driver::WifiInformation temp; + ToRosData(input.wifi_information_list(i), temp); + output.wifi_information_list.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::WifiConfiguration input, kortex_driver::WifiConfiguration &output) +{ + + ToRosData(input.ssid(), output.ssid); + output.security_key = input.security_key(); + output.connect_automatically = input.connect_automatically(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::WifiConfigurationList input, kortex_driver::WifiConfigurationList &output) +{ + + output.wifi_configuration_list.clear(); + for(int i = 0; i < input.wifi_configuration_list_size(); i++) + { + kortex_driver::WifiConfiguration temp; + ToRosData(input.wifi_configuration_list(i), temp); + output.wifi_configuration_list.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ProtectionZoneHandle input, kortex_driver::ProtectionZoneHandle &output) +{ + + output.identifier = input.identifier(); + output.permission = input.permission(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::RotationMatrixRow input, kortex_driver::Base_RotationMatrixRow &output) +{ + + output.column1 = input.column1(); + output.column2 = input.column2(); + output.column3 = input.column3(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::RotationMatrix input, kortex_driver::Base_RotationMatrix &output) +{ + + ToRosData(input.row1(), output.row1); + ToRosData(input.row2(), output.row2); + ToRosData(input.row3(), output.row3); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::Point input, kortex_driver::Point &output) +{ + + output.x = input.x(); + output.y = input.y(); + output.z = input.z(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ZoneShape input, kortex_driver::ZoneShape &output) +{ + + output.shape_type = input.shape_type(); + ToRosData(input.origin(), output.origin); + ToRosData(input.orientation(), output.orientation); + output.dimensions.clear(); + for(int i = 0; i < input.dimensions_size(); i++) + { + output.dimensions.push_back(input.dimensions(i)); + } + output.envelope_thickness = input.envelope_thickness(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ProtectionZone input, kortex_driver::ProtectionZone &output) +{ + + ToRosData(input.handle(), output.handle); + output.name = input.name(); + output.application_data = input.application_data(); + output.is_enabled = input.is_enabled(); + ToRosData(input.shape(), output.shape); + output.limitations.clear(); + for(int i = 0; i < input.limitations_size(); i++) + { + kortex_driver::CartesianLimitation temp; + ToRosData(input.limitations(i), temp); + output.limitations.push_back(temp); + } + output.envelope_limitations.clear(); + for(int i = 0; i < input.envelope_limitations_size(); i++) + { + kortex_driver::CartesianLimitation temp; + ToRosData(input.envelope_limitations(i), temp); + output.envelope_limitations.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ProtectionZoneList input, kortex_driver::ProtectionZoneList &output) +{ + + output.protection_zones.clear(); + for(int i = 0; i < input.protection_zones_size(); i++) + { + kortex_driver::ProtectionZone temp; + ToRosData(input.protection_zones(i), temp); + output.protection_zones.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::CartesianLimitation input, kortex_driver::CartesianLimitation &output) +{ + + output.type = input.type(); + output.translation = input.translation(); + output.orientation = input.orientation(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::TwistLimitation input, kortex_driver::TwistLimitation &output) +{ + + output.linear = input.linear(); + output.angular = input.angular(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::WrenchLimitation input, kortex_driver::WrenchLimitation &output) +{ + + output.force = input.force(); + output.torque = input.torque(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::CartesianLimitationList input, kortex_driver::CartesianLimitationList &output) +{ + + output.limitations.clear(); + for(int i = 0; i < input.limitations_size(); i++) + { + kortex_driver::CartesianLimitation temp; + ToRosData(input.limitations(i), temp); + output.limitations.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::JointLimitation input, kortex_driver::JointLimitation &output) +{ + + output.joint_identifier = input.joint_identifier(); + output.type = input.type(); + output.value = input.value(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::JointsLimitationsList input, kortex_driver::JointsLimitationsList &output) +{ + + output.joints_limitations.clear(); + for(int i = 0; i < input.joints_limitations_size(); i++) + { + kortex_driver::JointLimitation temp; + ToRosData(input.joints_limitations(i), temp); + output.joints_limitations.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::Query input, kortex_driver::Query &output) +{ + + ToRosData(input.start_timestamp(), output.start_timestamp); + ToRosData(input.end_timestamp(), output.end_timestamp); + output.username = input.username(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ConfigurationChangeNotification input, kortex_driver::ConfigurationChangeNotification &output) +{ + + output.event = input.event(); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + + auto oneof_type = input.configuration_change_case(); + switch(oneof_type) + { + + case Kinova::Api::Base::ConfigurationChangeNotification::kSequenceHandle: + { + decltype(output.oneof_configuration_change.sequence_handle)::value_type temp; + ToRosData(input.sequence_handle(), temp); + output.oneof_configuration_change.sequence_handle.push_back(temp); + break; + } + + case Kinova::Api::Base::ConfigurationChangeNotification::kActionHandle: + { + decltype(output.oneof_configuration_change.action_handle)::value_type temp; + ToRosData(input.action_handle(), temp); + output.oneof_configuration_change.action_handle.push_back(temp); + break; + } + + case Kinova::Api::Base::ConfigurationChangeNotification::kMappingHandle: + { + decltype(output.oneof_configuration_change.mapping_handle)::value_type temp; + ToRosData(input.mapping_handle(), temp); + output.oneof_configuration_change.mapping_handle.push_back(temp); + break; + } + + case Kinova::Api::Base::ConfigurationChangeNotification::kMapGroupHandle: + { + decltype(output.oneof_configuration_change.map_group_handle)::value_type temp; + ToRosData(input.map_group_handle(), temp); + output.oneof_configuration_change.map_group_handle.push_back(temp); + break; + } + + case Kinova::Api::Base::ConfigurationChangeNotification::kMapHandle: + { + decltype(output.oneof_configuration_change.map_handle)::value_type temp; + ToRosData(input.map_handle(), temp); + output.oneof_configuration_change.map_handle.push_back(temp); + break; + } + + case Kinova::Api::Base::ConfigurationChangeNotification::kUserProfileHandle: + { + decltype(output.oneof_configuration_change.user_profile_handle)::value_type temp; + ToRosData(input.user_profile_handle(), temp); + output.oneof_configuration_change.user_profile_handle.push_back(temp); + break; + } + + case Kinova::Api::Base::ConfigurationChangeNotification::kProtectionZoneHandle: + { + decltype(output.oneof_configuration_change.protection_zone_handle)::value_type temp; + ToRosData(input.protection_zone_handle(), temp); + output.oneof_configuration_change.protection_zone_handle.push_back(temp); + break; + } + + case Kinova::Api::Base::ConfigurationChangeNotification::kSafetyHandle: + { + decltype(output.oneof_configuration_change.safety_handle)::value_type temp; + ToRosData(input.safety_handle(), temp); + output.oneof_configuration_change.safety_handle.push_back(temp); + break; + } + + case Kinova::Api::Base::ConfigurationChangeNotification::kNetworkHandle: + { + decltype(output.oneof_configuration_change.network_handle)::value_type temp; + ToRosData(input.network_handle(), temp); + output.oneof_configuration_change.network_handle.push_back(temp); + break; + } + + case Kinova::Api::Base::ConfigurationChangeNotification::kSsid: + { + decltype(output.oneof_configuration_change.ssid)::value_type temp; + ToRosData(input.ssid(), temp); + output.oneof_configuration_change.ssid.push_back(temp); + break; + }} + + return 0; +} +int ToRosData(Kinova::Api::Base::MappingInfoNotification input, kortex_driver::MappingInfoNotification &output) +{ + + output.controller_identifier = input.controller_identifier(); + ToRosData(input.active_map_handle(), output.active_map_handle); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ControlModeInformation input, kortex_driver::Base_ControlModeInformation &output) +{ + + output.mode = input.mode(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ControlModeNotification input, kortex_driver::ControlModeNotification &output) +{ + + output.control_mode = input.control_mode(); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ServoingModeInformation input, kortex_driver::ServoingModeInformation &output) +{ + + output.servoing_mode = input.servoing_mode(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::OperatingModeInformation input, kortex_driver::OperatingModeInformation &output) +{ + + output.operating_mode = input.operating_mode(); + ToRosData(input.device_handle(), output.device_handle); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::OperatingModeNotification input, kortex_driver::OperatingModeNotification &output) +{ + + output.operating_mode = input.operating_mode(); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + ToRosData(input.device_handle(), output.device_handle); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ServoingModeNotification input, kortex_driver::ServoingModeNotification &output) +{ + + output.servoing_mode = input.servoing_mode(); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::SequenceInfoNotification input, kortex_driver::SequenceInfoNotification &output) +{ + + output.event_identifier = input.event_identifier(); + ToRosData(input.sequence_handle(), output.sequence_handle); + output.task_index = input.task_index(); + output.group_identifier = input.group_identifier(); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + output.abort_details = input.abort_details(); + ToRosData(input.connection(), output.connection); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::SequenceInformation input, kortex_driver::SequenceInformation &output) +{ + + output.event_identifier = input.event_identifier(); + output.task_index = input.task_index(); + output.task_identifier = input.task_identifier(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ProtectionZoneNotification input, kortex_driver::ProtectionZoneNotification &output) +{ + + output.event = input.event(); + ToRosData(input.handle(), output.handle); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ProtectionZoneInformation input, kortex_driver::ProtectionZoneInformation &output) +{ + + output.event = input.event(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::UserNotification input, kortex_driver::UserNotification &output) +{ + + output.user_event = input.user_event(); + ToRosData(input.modified_user(), output.modified_user); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ControllerHandle input, kortex_driver::ControllerHandle &output) +{ + + output.type = input.type(); + output.controller_identifier = input.controller_identifier(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ControllerElementHandle input, kortex_driver::ControllerElementHandle &output) +{ + + ToRosData(input.controller_handle(), output.controller_handle); + + + auto oneof_type = input.identifier_case(); + switch(oneof_type) + { + + case Kinova::Api::Base::ControllerElementHandle::kButton: + { + break; + } + + case Kinova::Api::Base::ControllerElementHandle::kAxis: + { + break; + }} + + return 0; +} +int ToRosData(Kinova::Api::Base::ControllerNotification input, kortex_driver::ControllerNotification &output) +{ + + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + + auto oneof_type = input.state_case(); + switch(oneof_type) + { + + case Kinova::Api::Base::ControllerNotification::kControllerState: + { + decltype(output.oneof_state.controller_state)::value_type temp; + ToRosData(input.controller_state(), temp); + output.oneof_state.controller_state.push_back(temp); + break; + } + + case Kinova::Api::Base::ControllerNotification::kControllerElement: + { + decltype(output.oneof_state.controller_element)::value_type temp; + ToRosData(input.controller_element(), temp); + output.oneof_state.controller_element.push_back(temp); + break; + }} + + return 0; +} +int ToRosData(Kinova::Api::Base::ControllerList input, kortex_driver::ControllerList &output) +{ + + output.handles.clear(); + for(int i = 0; i < input.handles_size(); i++) + { + kortex_driver::ControllerHandle temp; + ToRosData(input.handles(i), temp); + output.handles.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ControllerState input, kortex_driver::ControllerState &output) +{ + + ToRosData(input.handle(), output.handle); + output.event_type = input.event_type(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ControllerElementState input, kortex_driver::ControllerElementState &output) +{ + + ToRosData(input.handle(), output.handle); + output.event_type = input.event_type(); + output.axis_value = input.axis_value(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ActionNotification input, kortex_driver::ActionNotification &output) +{ + + output.action_event = input.action_event(); + ToRosData(input.handle(), output.handle); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + output.abort_details = input.abort_details(); + ToRosData(input.connection(), output.connection); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ActionExecutionState input, kortex_driver::ActionExecutionState &output) +{ + + output.action_event = input.action_event(); + ToRosData(input.handle(), output.handle); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::RobotEventNotification input, kortex_driver::RobotEventNotification &output) +{ + + output.event = input.event(); + ToRosData(input.handle(), output.handle); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::FactoryNotification input, kortex_driver::FactoryNotification &output) +{ + + output.event = input.event(); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::NetworkNotification input, kortex_driver::NetworkNotification &output) +{ + + output.event = input.event(); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ConfigurationChangeNotificationList input, kortex_driver::ConfigurationChangeNotificationList &output) +{ + + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::ConfigurationChangeNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::MappingInfoNotificationList input, kortex_driver::MappingInfoNotificationList &output) +{ + + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::MappingInfoNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ControlModeNotificationList input, kortex_driver::ControlModeNotificationList &output) +{ + + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::ControlModeNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::OperatingModeNotificationList input, kortex_driver::OperatingModeNotificationList &output) +{ + + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::OperatingModeNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ServoingModeNotificationList input, kortex_driver::ServoingModeNotificationList &output) +{ + + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::ServoingModeNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::SequenceInfoNotificationList input, kortex_driver::SequenceInfoNotificationList &output) +{ + + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::SequenceInfoNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ProtectionZoneNotificationList input, kortex_driver::ProtectionZoneNotificationList &output) +{ + + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::ProtectionZoneNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::UserNotificationList input, kortex_driver::UserNotificationList &output) +{ + + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::UserNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::SafetyNotificationList input, kortex_driver::SafetyNotificationList &output) +{ + + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::SafetyNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ControllerNotificationList input, kortex_driver::ControllerNotificationList &output) +{ + + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::ControllerNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ActionNotificationList input, kortex_driver::ActionNotificationList &output) +{ + + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::ActionNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::RobotEventNotificationList input, kortex_driver::RobotEventNotificationList &output) +{ + + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::RobotEventNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::NetworkNotificationList input, kortex_driver::NetworkNotificationList &output) +{ + + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::NetworkNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::MappingHandle input, kortex_driver::MappingHandle &output) +{ + + output.identifier = input.identifier(); + output.permission = input.permission(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::SafetyEvent input, kortex_driver::SafetyEvent &output) +{ + + ToRosData(input.safety_handle(), output.safety_handle); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ControllerEvent input, kortex_driver::ControllerEvent &output) +{ + + output.input_type = input.input_type(); + output.behavior = input.behavior(); + output.input_identifier = input.input_identifier(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::GpioEvent input, kortex_driver::GpioEvent &output) +{ + + output.gpio_state = input.gpio_state(); + output.device_identifier = input.device_identifier(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::MapEvent input, kortex_driver::MapEvent &output) +{ + + output.name = input.name(); + + + auto oneof_type = input.events_case(); + switch(oneof_type) + { + + case Kinova::Api::Base::MapEvent::kSafetyEvent: + { + decltype(output.oneof_events.safety_event)::value_type temp; + ToRosData(input.safety_event(), temp); + output.oneof_events.safety_event.push_back(temp); + break; + } + + case Kinova::Api::Base::MapEvent::kGpioEvent: + { + decltype(output.oneof_events.gpio_event)::value_type temp; + ToRosData(input.gpio_event(), temp); + output.oneof_events.gpio_event.push_back(temp); + break; + } + + case Kinova::Api::Base::MapEvent::kControllerEvent: + { + decltype(output.oneof_events.controller_event)::value_type temp; + ToRosData(input.controller_event(), temp); + output.oneof_events.controller_event.push_back(temp); + break; + }} + + return 0; +} +int ToRosData(Kinova::Api::Base::MapElement input, kortex_driver::MapElement &output) +{ + + ToRosData(input.event(), output.event); + ToRosData(input.action(), output.action); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ActivateMapHandle input, kortex_driver::ActivateMapHandle &output) +{ + + ToRosData(input.mapping_handle(), output.mapping_handle); + ToRosData(input.map_group_handle(), output.map_group_handle); + ToRosData(input.map_handle(), output.map_handle); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::Map input, kortex_driver::Map &output) +{ + + ToRosData(input.handle(), output.handle); + output.name = input.name(); + output.elements.clear(); + for(int i = 0; i < input.elements_size(); i++) + { + kortex_driver::MapElement temp; + ToRosData(input.elements(i), temp); + output.elements.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::MapHandle input, kortex_driver::MapHandle &output) +{ + + output.identifier = input.identifier(); + output.permission = input.permission(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::MapList input, kortex_driver::MapList &output) +{ + + output.map_list.clear(); + for(int i = 0; i < input.map_list_size(); i++) + { + kortex_driver::Map temp; + ToRosData(input.map_list(i), temp); + output.map_list.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::MapGroupHandle input, kortex_driver::MapGroupHandle &output) +{ + + output.identifier = input.identifier(); + output.permission = input.permission(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::MapGroup input, kortex_driver::MapGroup &output) +{ + + ToRosData(input.group_handle(), output.group_handle); + output.name = input.name(); + ToRosData(input.related_mapping_handle(), output.related_mapping_handle); + ToRosData(input.parent_group_handle(), output.parent_group_handle); + output.children_map_group_handles.clear(); + for(int i = 0; i < input.children_map_group_handles_size(); i++) + { + kortex_driver::MapGroupHandle temp; + ToRosData(input.children_map_group_handles(i), temp); + output.children_map_group_handles.push_back(temp); + } + output.map_handles.clear(); + for(int i = 0; i < input.map_handles_size(); i++) + { + kortex_driver::MapHandle temp; + ToRosData(input.map_handles(i), temp); + output.map_handles.push_back(temp); + } + output.application_data = input.application_data(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::MapGroupList input, kortex_driver::MapGroupList &output) +{ + + output.map_groups.clear(); + for(int i = 0; i < input.map_groups_size(); i++) + { + kortex_driver::MapGroup temp; + ToRosData(input.map_groups(i), temp); + output.map_groups.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::Mapping input, kortex_driver::Mapping &output) +{ + + ToRosData(input.handle(), output.handle); + output.name = input.name(); + output.controller_identifier = input.controller_identifier(); + ToRosData(input.active_map_group_handle(), output.active_map_group_handle); + output.map_group_handles.clear(); + for(int i = 0; i < input.map_group_handles_size(); i++) + { + kortex_driver::MapGroupHandle temp; + ToRosData(input.map_group_handles(i), temp); + output.map_group_handles.push_back(temp); + } + ToRosData(input.active_map_handle(), output.active_map_handle); + output.map_handles.clear(); + for(int i = 0; i < input.map_handles_size(); i++) + { + kortex_driver::MapHandle temp; + ToRosData(input.map_handles(i), temp); + output.map_handles.push_back(temp); + } + output.application_data = input.application_data(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::MappingList input, kortex_driver::MappingList &output) +{ + + output.mappings.clear(); + for(int i = 0; i < input.mappings_size(); i++) + { + kortex_driver::Mapping temp; + ToRosData(input.mappings(i), temp); + output.mappings.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::TransformationMatrix input, kortex_driver::TransformationMatrix &output) +{ + + ToRosData(input.r0(), output.r0); + ToRosData(input.r1(), output.r1); + ToRosData(input.r2(), output.r2); + ToRosData(input.r3(), output.r3); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::TransformationRow input, kortex_driver::TransformationRow &output) +{ + + output.c0 = input.c0(); + output.c1 = input.c1(); + output.c2 = input.c2(); + output.c3 = input.c3(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::Pose input, kortex_driver::Pose &output) +{ + + output.x = input.x(); + output.y = input.y(); + output.z = input.z(); + output.theta_x = input.theta_x(); + output.theta_y = input.theta_y(); + output.theta_z = input.theta_z(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::Position input, kortex_driver::Base_Position &output) +{ + + output.x = input.x(); + output.y = input.y(); + output.z = input.z(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::Orientation input, kortex_driver::Orientation &output) +{ + + output.theta_x = input.theta_x(); + output.theta_y = input.theta_y(); + output.theta_z = input.theta_z(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::CartesianSpeed input, kortex_driver::CartesianSpeed &output) +{ + + output.translation = input.translation(); + output.orientation = input.orientation(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::CartesianTrajectoryConstraint input, kortex_driver::CartesianTrajectoryConstraint &output) +{ + + + + auto oneof_type = input.type_case(); + switch(oneof_type) + { + + case Kinova::Api::Base::CartesianTrajectoryConstraint::kSpeed: + { + decltype(output.oneof_type.speed)::value_type temp; + ToRosData(input.speed(), temp); + output.oneof_type.speed.push_back(temp); + break; + } + + case Kinova::Api::Base::CartesianTrajectoryConstraint::kDuration: + { + break; + }} + + return 0; +} +int ToRosData(Kinova::Api::Base::JointTrajectoryConstraint input, kortex_driver::JointTrajectoryConstraint &output) +{ + + output.type = input.type(); + output.value = input.value(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::Wrench input, kortex_driver::Wrench &output) +{ + + output.force_x = input.force_x(); + output.force_y = input.force_y(); + output.force_z = input.force_z(); + output.torque_x = input.torque_x(); + output.torque_y = input.torque_y(); + output.torque_z = input.torque_z(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::Twist input, kortex_driver::Twist &output) +{ + + output.linear_x = input.linear_x(); + output.linear_y = input.linear_y(); + output.linear_z = input.linear_z(); + output.angular_x = input.angular_x(); + output.angular_y = input.angular_y(); + output.angular_z = input.angular_z(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::Admittance input, kortex_driver::Admittance &output) +{ + + output.admittance_mode = input.admittance_mode(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ConstrainedPose input, kortex_driver::ConstrainedPose &output) +{ + + ToRosData(input.target_pose(), output.target_pose); + ToRosData(input.constraint(), output.constraint); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ConstrainedPosition input, kortex_driver::ConstrainedPosition &output) +{ + + ToRosData(input.target_position(), output.target_position); + ToRosData(input.constraint(), output.constraint); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ConstrainedOrientation input, kortex_driver::ConstrainedOrientation &output) +{ + + ToRosData(input.target_orientation(), output.target_orientation); + ToRosData(input.constraint(), output.constraint); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::WrenchCommand input, kortex_driver::WrenchCommand &output) +{ + + output.reference_frame = input.reference_frame(); + output.mode = input.mode(); + ToRosData(input.wrench(), output.wrench); + output.duration = input.duration(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::TwistCommand input, kortex_driver::TwistCommand &output) +{ + + output.reference_frame = input.reference_frame(); + ToRosData(input.twist(), output.twist); + output.duration = input.duration(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ConstrainedJointAngles input, kortex_driver::ConstrainedJointAngles &output) +{ + + ToRosData(input.joint_angles(), output.joint_angles); + ToRosData(input.constraint(), output.constraint); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ConstrainedJointAngle input, kortex_driver::ConstrainedJointAngle &output) +{ + + output.joint_identifier = input.joint_identifier(); + output.value = input.value(); + ToRosData(input.constraint(), output.constraint); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::JointAngles input, kortex_driver::JointAngles &output) +{ + + output.joint_angles.clear(); + for(int i = 0; i < input.joint_angles_size(); i++) + { + kortex_driver::JointAngle temp; + ToRosData(input.joint_angles(i), temp); + output.joint_angles.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::JointAngle input, kortex_driver::JointAngle &output) +{ + + output.joint_identifier = input.joint_identifier(); + output.value = input.value(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::JointSpeeds input, kortex_driver::JointSpeeds &output) +{ + + output.joint_speeds.clear(); + for(int i = 0; i < input.joint_speeds_size(); i++) + { + kortex_driver::JointSpeed temp; + ToRosData(input.joint_speeds(i), temp); + output.joint_speeds.push_back(temp); + } + output.duration = input.duration(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::JointSpeed input, kortex_driver::JointSpeed &output) +{ + + output.joint_identifier = input.joint_identifier(); + output.value = input.value(); + output.duration = input.duration(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::JointTorques input, kortex_driver::JointTorques &output) +{ + + output.joint_torques.clear(); + for(int i = 0; i < input.joint_torques_size(); i++) + { + kortex_driver::JointTorque temp; + ToRosData(input.joint_torques(i), temp); + output.joint_torques.push_back(temp); + } + output.duration = input.duration(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::JointTorque input, kortex_driver::JointTorque &output) +{ + + output.joint_identifier = input.joint_identifier(); + output.value = input.value(); + output.duration = input.duration(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::GripperCommand input, kortex_driver::GripperCommand &output) +{ + + output.mode = input.mode(); + ToRosData(input.gripper(), output.gripper); + output.duration = input.duration(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::GripperRequest input, kortex_driver::GripperRequest &output) +{ + + output.mode = input.mode(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::Gripper input, kortex_driver::Gripper &output) +{ + + output.finger.clear(); + for(int i = 0; i < input.finger_size(); i++) + { + kortex_driver::Finger temp; + ToRosData(input.finger(i), temp); + output.finger.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::Finger input, kortex_driver::Finger &output) +{ + + output.finger_identifier = input.finger_identifier(); + output.value = input.value(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::SystemTime input, kortex_driver::SystemTime &output) +{ + + output.sec = input.sec(); + output.min = input.min(); + output.hour = input.hour(); + output.mday = input.mday(); + output.mon = input.mon(); + output.year = input.year(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ActuatorInformation input, kortex_driver::ActuatorInformation &output) +{ + + output.count = input.count(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ArmStateInformation input, kortex_driver::ArmStateInformation &output) +{ + + output.active_state = input.active_state(); + ToRosData(input.connection(), output.connection); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::ArmStateNotification input, kortex_driver::ArmStateNotification &output) +{ + + output.active_state = input.active_state(); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.connection(), output.connection); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::CapSenseConfig input, kortex_driver::Base_CapSenseConfig &output) +{ + + output.identifier = input.identifier(); + output.mode = input.mode(); + output.threshold_a = input.threshold_a(); + output.threshold_b = input.threshold_b(); + output.sensitivity_a = input.sensitivity_a(); + output.sensitivity_b = input.sensitivity_b(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::BridgeList input, kortex_driver::BridgeList &output) +{ + + output.bridgeConfig.clear(); + for(int i = 0; i < input.bridgeconfig_size(); i++) + { + kortex_driver::BridgeConfig temp; + ToRosData(input.bridgeconfig(i), temp); + output.bridgeConfig.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::BridgeResult input, kortex_driver::BridgeResult &output) +{ + + ToRosData(input.bridge_id(), output.bridge_id); + output.status = input.status(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::BridgeIdentifier input, kortex_driver::BridgeIdentifier &output) +{ + + output.bridge_id = input.bridge_id(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::BridgeConfig input, kortex_driver::BridgeConfig &output) +{ + + output.device_identifier = input.device_identifier(); + output.bridgetype = input.bridgetype(); + ToRosData(input.port_config(), output.port_config); + ToRosData(input.bridge_id(), output.bridge_id); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::BridgePortConfig input, kortex_driver::BridgePortConfig &output) +{ + + output.target_port = input.target_port(); + output.out_port = input.out_port(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::PreComputedJointTrajectory input, kortex_driver::PreComputedJointTrajectory &output) +{ + + output.mode = input.mode(); + output.trajectory_elements.clear(); + for(int i = 0; i < input.trajectory_elements_size(); i++) + { + kortex_driver::PreComputedJointTrajectoryElement temp; + ToRosData(input.trajectory_elements(i), temp); + output.trajectory_elements.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::Base::PreComputedJointTrajectoryElement input, kortex_driver::PreComputedJointTrajectoryElement &output) +{ + + output.joint_angles.clear(); + for(int i = 0; i < input.joint_angles_size(); i++) + { + output.joint_angles.push_back(input.joint_angles(i)); + } + output.joint_speeds.clear(); + for(int i = 0; i < input.joint_speeds_size(); i++) + { + output.joint_speeds.push_back(input.joint_speeds(i)); + } + output.joint_accelerations.clear(); + for(int i = 0; i < input.joint_accelerations_size(); i++) + { + output.joint_accelerations.push_back(input.joint_accelerations(i)); + } + output.time_from_start = input.time_from_start(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::TrajectoryErrorElement input, kortex_driver::TrajectoryErrorElement &output) +{ + + output.error_type = input.error_type(); + output.error_identifier = input.error_identifier(); + output.error_value = input.error_value(); + output.min_value = input.min_value(); + output.max_value = input.max_value(); + output.index = input.index(); + output.message = input.message(); + + + + return 0; +} +int ToRosData(Kinova::Api::Base::TrajectoryErrorReport input, kortex_driver::TrajectoryErrorReport &output) +{ + + output.trajectory_error_elements.clear(); + for(int i = 0; i < input.trajectory_error_elements_size(); i++) + { + kortex_driver::TrajectoryErrorElement temp; + ToRosData(input.trajectory_error_elements(i), temp); + output.trajectory_error_elements.push_back(temp); + } + + + + return 0; +} diff --git a/kortex_driver/src/generated/base_services.cpp b/kortex_driver/src/generated/base_services.cpp new file mode 100644 index 00000000..303a144d --- /dev/null +++ b/kortex_driver/src/generated/base_services.cpp @@ -0,0 +1,4394 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/common_proto_converter.h" +#include "kortex_driver/generated/common_ros_converter.h" +#include "kortex_driver/generated/actuatorconfig_proto_converter.h" +#include "kortex_driver/generated/actuatorconfig_ros_converter.h" +#include "kortex_driver/generated/actuatorcyclic_proto_converter.h" +#include "kortex_driver/generated/actuatorcyclic_ros_converter.h" +#include "kortex_driver/generated/productconfiguration_proto_converter.h" +#include "kortex_driver/generated/productconfiguration_ros_converter.h" +#include "kortex_driver/generated/base_proto_converter.h" +#include "kortex_driver/generated/base_ros_converter.h" +#include "kortex_driver/generated/grippercyclic_proto_converter.h" +#include "kortex_driver/generated/grippercyclic_ros_converter.h" +#include "kortex_driver/generated/interconnectcyclic_proto_converter.h" +#include "kortex_driver/generated/interconnectcyclic_ros_converter.h" +#include "kortex_driver/generated/basecyclic_proto_converter.h" +#include "kortex_driver/generated/basecyclic_ros_converter.h" +#include "kortex_driver/generated/controlconfig_proto_converter.h" +#include "kortex_driver/generated/controlconfig_ros_converter.h" +#include "kortex_driver/generated/deviceconfig_proto_converter.h" +#include "kortex_driver/generated/deviceconfig_ros_converter.h" +#include "kortex_driver/generated/devicemanager_proto_converter.h" +#include "kortex_driver/generated/devicemanager_ros_converter.h" +#include "kortex_driver/generated/interconnectconfig_proto_converter.h" +#include "kortex_driver/generated/interconnectconfig_ros_converter.h" +#include "kortex_driver/generated/visionconfig_proto_converter.h" +#include "kortex_driver/generated/visionconfig_ros_converter.h" +#include "kortex_driver/generated/base_services.h" + +BaseServices::BaseServices(ros::NodeHandle& n, Kinova::Api::Base::BaseClient* base, uint32_t device_id, uint32_t timeout_ms): + m_n(n), + m_base(base), + m_current_device_id(device_id) +{ + m_api_options.timeout_ms = timeout_ms; + + m_pub_Error = m_n.advertise("kortex_error", 1000); + m_pub_ConfigurationChangeTopic = m_n.advertise("configuration_change_topic", 1000); + m_pub_MappingInfoTopic = m_n.advertise("mapping_info_topic", 1000); + m_pub_ControlModeTopic = m_n.advertise("control_mode_topic", 1000); + m_pub_OperatingModeTopic = m_n.advertise("operating_mode_topic", 1000); + m_pub_SequenceInfoTopic = m_n.advertise("sequence_info_topic", 1000); + m_pub_ProtectionZoneTopic = m_n.advertise("protection_zone_topic", 1000); + m_pub_UserTopic = m_n.advertise("user_topic", 1000); + m_pub_ControllerTopic = m_n.advertise("controller_topic", 1000); + m_pub_ActionTopic = m_n.advertise("action_topic", 1000); + m_pub_RobotEventTopic = m_n.advertise("robot_event_topic", 1000); + m_pub_ServoingModeTopic = m_n.advertise("servoing_mode_topic", 1000); + m_pub_FactoryTopic = m_n.advertise("factory_topic", 1000); + m_pub_NetworkTopic = m_n.advertise("network_topic", 1000); + m_pub_ArmStateTopic = m_n.advertise("arm_state_topic", 1000); + + m_serviceSetDeviceID = n.advertiseService("base/set_device_id", &BaseServices::SetDeviceID, this); + m_serviceSetApiOptions = n.advertiseService("base/set_api_options", &BaseServices::SetApiOptions, this); + + m_serviceCreateUserProfile = m_n.advertiseService("base/create_user_profile", &BaseServices::CreateUserProfile, this); + m_serviceUpdateUserProfile = m_n.advertiseService("base/update_user_profile", &BaseServices::UpdateUserProfile, this); + m_serviceReadUserProfile = m_n.advertiseService("base/read_user_profile", &BaseServices::ReadUserProfile, this); + m_serviceDeleteUserProfile = m_n.advertiseService("base/delete_user_profile", &BaseServices::DeleteUserProfile, this); + m_serviceReadAllUserProfiles = m_n.advertiseService("base/read_all_user_profiles", &BaseServices::ReadAllUserProfiles, this); + m_serviceReadAllUsers = m_n.advertiseService("base/read_all_users", &BaseServices::ReadAllUsers, this); + m_serviceChangePassword = m_n.advertiseService("base/change_password", &BaseServices::ChangePassword, this); + m_serviceCreateSequence = m_n.advertiseService("base/create_sequence", &BaseServices::CreateSequence, this); + m_serviceUpdateSequence = m_n.advertiseService("base/update_sequence", &BaseServices::UpdateSequence, this); + m_serviceReadSequence = m_n.advertiseService("base/read_sequence", &BaseServices::ReadSequence, this); + m_serviceDeleteSequence = m_n.advertiseService("base/delete_sequence", &BaseServices::DeleteSequence, this); + m_serviceReadAllSequences = m_n.advertiseService("base/read_all_sequences", &BaseServices::ReadAllSequences, this); + m_serviceDeleteSequenceTask = m_n.advertiseService("base/delete_sequence_task", &BaseServices::DeleteSequenceTask, this); + m_serviceDeleteAllSequenceTasks = m_n.advertiseService("base/delete_all_sequence_tasks", &BaseServices::DeleteAllSequenceTasks, this); + m_servicePlaySequence = m_n.advertiseService("base/play_sequence", &BaseServices::PlaySequence, this); + m_servicePlayAdvancedSequence = m_n.advertiseService("base/play_advanced_sequence", &BaseServices::PlayAdvancedSequence, this); + m_serviceStopSequence = m_n.advertiseService("base/stop_sequence", &BaseServices::StopSequence, this); + m_servicePauseSequence = m_n.advertiseService("base/pause_sequence", &BaseServices::PauseSequence, this); + m_serviceResumeSequence = m_n.advertiseService("base/resume_sequence", &BaseServices::ResumeSequence, this); + m_serviceCreateProtectionZone = m_n.advertiseService("base/create_protection_zone", &BaseServices::CreateProtectionZone, this); + m_serviceUpdateProtectionZone = m_n.advertiseService("base/update_protection_zone", &BaseServices::UpdateProtectionZone, this); + m_serviceReadProtectionZone = m_n.advertiseService("base/read_protection_zone", &BaseServices::ReadProtectionZone, this); + m_serviceDeleteProtectionZone = m_n.advertiseService("base/delete_protection_zone", &BaseServices::DeleteProtectionZone, this); + m_serviceReadAllProtectionZones = m_n.advertiseService("base/read_all_protection_zones", &BaseServices::ReadAllProtectionZones, this); + m_serviceCreateMapping = m_n.advertiseService("base/create_mapping", &BaseServices::CreateMapping, this); + m_serviceReadMapping = m_n.advertiseService("base/read_mapping", &BaseServices::ReadMapping, this); + m_serviceReadAllMappings = m_n.advertiseService("base/read_all_mappings", &BaseServices::ReadAllMappings, this); + m_serviceCreateMap = m_n.advertiseService("base/create_map", &BaseServices::CreateMap, this); + m_serviceReadAllMaps = m_n.advertiseService("base/read_all_maps", &BaseServices::ReadAllMaps, this); + m_serviceActivateMap = m_n.advertiseService("base/activate_map", &BaseServices::ActivateMap, this); + m_serviceCreateAction = m_n.advertiseService("base/create_action", &BaseServices::CreateAction, this); + m_serviceReadAction = m_n.advertiseService("base/read_action", &BaseServices::ReadAction, this); + m_serviceReadAllActions = m_n.advertiseService("base/read_all_actions", &BaseServices::ReadAllActions, this); + m_serviceDeleteAction = m_n.advertiseService("base/delete_action", &BaseServices::DeleteAction, this); + m_serviceUpdateAction = m_n.advertiseService("base/update_action", &BaseServices::UpdateAction, this); + m_serviceExecuteActionFromReference = m_n.advertiseService("base/execute_action_from_reference", &BaseServices::ExecuteActionFromReference, this); + m_serviceExecuteAction = m_n.advertiseService("base/execute_action", &BaseServices::ExecuteAction, this); + m_servicePauseAction = m_n.advertiseService("base/pause_action", &BaseServices::PauseAction, this); + m_serviceStopAction = m_n.advertiseService("base/stop_action", &BaseServices::StopAction, this); + m_serviceResumeAction = m_n.advertiseService("base/resume_action", &BaseServices::ResumeAction, this); + m_serviceGetIPv4Configuration = m_n.advertiseService("base/get_i_pv4_configuration", &BaseServices::GetIPv4Configuration, this); + m_serviceSetIPv4Configuration = m_n.advertiseService("base/set_i_pv4_configuration", &BaseServices::SetIPv4Configuration, this); + m_serviceSetCommunicationInterfaceEnable = m_n.advertiseService("base/set_communication_interface_enable", &BaseServices::SetCommunicationInterfaceEnable, this); + m_serviceIsCommunicationInterfaceEnable = m_n.advertiseService("base/is_communication_interface_enable", &BaseServices::IsCommunicationInterfaceEnable, this); + m_serviceGetAvailableWifi = m_n.advertiseService("base/get_available_wifi", &BaseServices::GetAvailableWifi, this); + m_serviceGetWifiInformation = m_n.advertiseService("base/get_wifi_information", &BaseServices::GetWifiInformation, this); + m_serviceAddWifiConfiguration = m_n.advertiseService("base/add_wifi_configuration", &BaseServices::AddWifiConfiguration, this); + m_serviceDeleteWifiConfiguration = m_n.advertiseService("base/delete_wifi_configuration", &BaseServices::DeleteWifiConfiguration, this); + m_serviceGetAllConfiguredWifis = m_n.advertiseService("base/get_all_configured_wifis", &BaseServices::GetAllConfiguredWifis, this); + m_serviceConnectWifi = m_n.advertiseService("base/connect_wifi", &BaseServices::ConnectWifi, this); + m_serviceDisconnectWifi = m_n.advertiseService("base/disconnect_wifi", &BaseServices::DisconnectWifi, this); + m_serviceGetConnectedWifiInformation = m_n.advertiseService("base/get_connected_wifi_information", &BaseServices::GetConnectedWifiInformation, this); + m_serviceBase_Unsubscribe = m_n.advertiseService("base/unsubscribe", &BaseServices::Base_Unsubscribe, this); + m_serviceOnNotificationConfigurationChangeTopic = m_n.advertiseService("base/activate_publishing_of_configuration_change_topic", &BaseServices::OnNotificationConfigurationChangeTopic, this); + m_serviceOnNotificationMappingInfoTopic = m_n.advertiseService("base/activate_publishing_of_mapping_info_topic", &BaseServices::OnNotificationMappingInfoTopic, this); + m_serviceOnNotificationControlModeTopic = m_n.advertiseService("base/activate_publishing_of_control_mode_topic", &BaseServices::OnNotificationControlModeTopic, this); + m_serviceOnNotificationOperatingModeTopic = m_n.advertiseService("base/activate_publishing_of_operating_mode_topic", &BaseServices::OnNotificationOperatingModeTopic, this); + m_serviceOnNotificationSequenceInfoTopic = m_n.advertiseService("base/activate_publishing_of_sequence_info_topic", &BaseServices::OnNotificationSequenceInfoTopic, this); + m_serviceOnNotificationProtectionZoneTopic = m_n.advertiseService("base/activate_publishing_of_protection_zone_topic", &BaseServices::OnNotificationProtectionZoneTopic, this); + m_serviceOnNotificationUserTopic = m_n.advertiseService("base/activate_publishing_of_user_topic", &BaseServices::OnNotificationUserTopic, this); + m_serviceOnNotificationControllerTopic = m_n.advertiseService("base/activate_publishing_of_controller_topic", &BaseServices::OnNotificationControllerTopic, this); + m_serviceOnNotificationActionTopic = m_n.advertiseService("base/activate_publishing_of_action_topic", &BaseServices::OnNotificationActionTopic, this); + m_serviceOnNotificationRobotEventTopic = m_n.advertiseService("base/activate_publishing_of_robot_event_topic", &BaseServices::OnNotificationRobotEventTopic, this); + m_servicePlayCartesianTrajectory = m_n.advertiseService("base/play_cartesian_trajectory", &BaseServices::PlayCartesianTrajectory, this); + m_servicePlayCartesianTrajectoryPosition = m_n.advertiseService("base/play_cartesian_trajectory_position", &BaseServices::PlayCartesianTrajectoryPosition, this); + m_servicePlayCartesianTrajectoryOrientation = m_n.advertiseService("base/play_cartesian_trajectory_orientation", &BaseServices::PlayCartesianTrajectoryOrientation, this); + m_serviceStop = m_n.advertiseService("base/stop", &BaseServices::Stop, this); + m_serviceGetMeasuredCartesianPose = m_n.advertiseService("base/get_measured_cartesian_pose", &BaseServices::GetMeasuredCartesianPose, this); + m_serviceSendWrenchCommand = m_n.advertiseService("base/send_wrench_command", &BaseServices::SendWrenchCommand, this); + m_serviceSendWrenchJoystickCommand = m_n.advertiseService("base/send_wrench_joystick_command", &BaseServices::SendWrenchJoystickCommand, this); + m_serviceSendTwistJoystickCommand = m_n.advertiseService("base/send_twist_joystick_command", &BaseServices::SendTwistJoystickCommand, this); + m_serviceSendTwistCommand = m_n.advertiseService("base/send_twist_command", &BaseServices::SendTwistCommand, this); + m_servicePlayJointTrajectory = m_n.advertiseService("base/play_joint_trajectory", &BaseServices::PlayJointTrajectory, this); + m_servicePlaySelectedJointTrajectory = m_n.advertiseService("base/play_selected_joint_trajectory", &BaseServices::PlaySelectedJointTrajectory, this); + m_serviceGetMeasuredJointAngles = m_n.advertiseService("base/get_measured_joint_angles", &BaseServices::GetMeasuredJointAngles, this); + m_serviceSendJointSpeedsCommand = m_n.advertiseService("base/send_joint_speeds_command", &BaseServices::SendJointSpeedsCommand, this); + m_serviceSendSelectedJointSpeedCommand = m_n.advertiseService("base/send_selected_joint_speed_command", &BaseServices::SendSelectedJointSpeedCommand, this); + m_serviceSendGripperCommand = m_n.advertiseService("base/send_gripper_command", &BaseServices::SendGripperCommand, this); + m_serviceGetMeasuredGripperMovement = m_n.advertiseService("base/get_measured_gripper_movement", &BaseServices::GetMeasuredGripperMovement, this); + m_serviceSetAdmittance = m_n.advertiseService("base/set_admittance", &BaseServices::SetAdmittance, this); + m_serviceSetOperatingMode = m_n.advertiseService("base/set_operating_mode", &BaseServices::SetOperatingMode, this); + m_serviceApplyEmergencyStop = m_n.advertiseService("base/apply_emergency_stop", &BaseServices::ApplyEmergencyStop, this); + m_serviceBase_ClearFaults = m_n.advertiseService("base/clear_faults", &BaseServices::Base_ClearFaults, this); + m_serviceBase_GetControlMode = m_n.advertiseService("base/get_control_mode", &BaseServices::Base_GetControlMode, this); + m_serviceGetOperatingMode = m_n.advertiseService("base/get_operating_mode", &BaseServices::GetOperatingMode, this); + m_serviceSetServoingMode = m_n.advertiseService("base/set_servoing_mode", &BaseServices::SetServoingMode, this); + m_serviceGetServoingMode = m_n.advertiseService("base/get_servoing_mode", &BaseServices::GetServoingMode, this); + m_serviceOnNotificationServoingModeTopic = m_n.advertiseService("base/activate_publishing_of_servoing_mode_topic", &BaseServices::OnNotificationServoingModeTopic, this); + m_serviceRestoreFactorySettings = m_n.advertiseService("base/restore_factory_settings", &BaseServices::RestoreFactorySettings, this); + m_serviceOnNotificationFactoryTopic = m_n.advertiseService("base/activate_publishing_of_factory_topic", &BaseServices::OnNotificationFactoryTopic, this); + m_serviceGetAllConnectedControllers = m_n.advertiseService("base/get_all_connected_controllers", &BaseServices::GetAllConnectedControllers, this); + m_serviceGetControllerState = m_n.advertiseService("base/get_controller_state", &BaseServices::GetControllerState, this); + m_serviceGetActuatorCount = m_n.advertiseService("base/get_actuator_count", &BaseServices::GetActuatorCount, this); + m_serviceStartWifiScan = m_n.advertiseService("base/start_wifi_scan", &BaseServices::StartWifiScan, this); + m_serviceGetConfiguredWifi = m_n.advertiseService("base/get_configured_wifi", &BaseServices::GetConfiguredWifi, this); + m_serviceOnNotificationNetworkTopic = m_n.advertiseService("base/activate_publishing_of_network_topic", &BaseServices::OnNotificationNetworkTopic, this); + m_serviceGetArmState = m_n.advertiseService("base/get_arm_state", &BaseServices::GetArmState, this); + m_serviceOnNotificationArmStateTopic = m_n.advertiseService("base/activate_publishing_of_arm_state_topic", &BaseServices::OnNotificationArmStateTopic, this); + m_serviceGetIPv4Information = m_n.advertiseService("base/get_i_pv4_information", &BaseServices::GetIPv4Information, this); + m_serviceSetWifiCountryCode = m_n.advertiseService("base/set_wifi_country_code", &BaseServices::SetWifiCountryCode, this); + m_serviceGetWifiCountryCode = m_n.advertiseService("base/get_wifi_country_code", &BaseServices::GetWifiCountryCode, this); + m_serviceBase_SetCapSenseConfig = m_n.advertiseService("base/set_cap_sense_config", &BaseServices::Base_SetCapSenseConfig, this); + m_serviceBase_GetCapSenseConfig = m_n.advertiseService("base/get_cap_sense_config", &BaseServices::Base_GetCapSenseConfig, this); + m_serviceGetAllJointsSpeedHardLimitation = m_n.advertiseService("base/get_all_joints_speed_hard_limitation", &BaseServices::GetAllJointsSpeedHardLimitation, this); + m_serviceGetAllJointsTorqueHardLimitation = m_n.advertiseService("base/get_all_joints_torque_hard_limitation", &BaseServices::GetAllJointsTorqueHardLimitation, this); + m_serviceGetTwistHardLimitation = m_n.advertiseService("base/get_twist_hard_limitation", &BaseServices::GetTwistHardLimitation, this); + m_serviceGetWrenchHardLimitation = m_n.advertiseService("base/get_wrench_hard_limitation", &BaseServices::GetWrenchHardLimitation, this); + m_serviceSendJointSpeedsJoystickCommand = m_n.advertiseService("base/send_joint_speeds_joystick_command", &BaseServices::SendJointSpeedsJoystickCommand, this); + m_serviceSendSelectedJointSpeedJoystickCommand = m_n.advertiseService("base/send_selected_joint_speed_joystick_command", &BaseServices::SendSelectedJointSpeedJoystickCommand, this); + m_serviceEnableBridge = m_n.advertiseService("base/enable_bridge", &BaseServices::EnableBridge, this); + m_serviceDisableBridge = m_n.advertiseService("base/disable_bridge", &BaseServices::DisableBridge, this); + m_serviceGetBridgeList = m_n.advertiseService("base/get_bridge_list", &BaseServices::GetBridgeList, this); + m_serviceGetBridgeConfig = m_n.advertiseService("base/get_bridge_config", &BaseServices::GetBridgeConfig, this); + m_servicePlayPreComputedJointTrajectory = m_n.advertiseService("base/play_pre_computed_joint_trajectory", &BaseServices::PlayPreComputedJointTrajectory, this); + m_serviceGetProductConfiguration = m_n.advertiseService("base/get_product_configuration", &BaseServices::GetProductConfiguration, this); + m_serviceUpdateDegreeOfFreedomConfiguration = m_n.advertiseService("base/update_degree_of_freedom_configuration", &BaseServices::UpdateDegreeOfFreedomConfiguration, this); + m_serviceUpdateBaseTypeConfiguration = m_n.advertiseService("base/update_base_type_configuration", &BaseServices::UpdateBaseTypeConfiguration, this); + m_serviceUpdateEndEffectorTypeConfiguration = m_n.advertiseService("base/update_end_effector_type_configuration", &BaseServices::UpdateEndEffectorTypeConfiguration, this); + m_serviceUpdateVisionModuleTypeConfiguration = m_n.advertiseService("base/update_vision_module_type_configuration", &BaseServices::UpdateVisionModuleTypeConfiguration, this); + m_serviceUpdateInterfaceModuleTypeConfiguration = m_n.advertiseService("base/update_interface_module_type_configuration", &BaseServices::UpdateInterfaceModuleTypeConfiguration, this); + m_serviceUpdateArmLateralityConfiguration = m_n.advertiseService("base/update_arm_laterality_configuration", &BaseServices::UpdateArmLateralityConfiguration, this); + m_serviceUpdateWristTypeConfiguration = m_n.advertiseService("base/update_wrist_type_configuration", &BaseServices::UpdateWristTypeConfiguration, this); + m_serviceRestoreFactoryProductConfiguration = m_n.advertiseService("base/restore_factory_product_configuration", &BaseServices::RestoreFactoryProductConfiguration, this); + m_serviceGetTrajectoryErrorReport = m_n.advertiseService("base/get_trajectory_error_report", &BaseServices::GetTrajectoryErrorReport, this); + m_serviceGetAllJointsSpeedSoftLimitation = m_n.advertiseService("base/get_all_joints_speed_soft_limitation", &BaseServices::GetAllJointsSpeedSoftLimitation, this); + m_serviceGetAllJointsTorqueSoftLimitation = m_n.advertiseService("base/get_all_joints_torque_soft_limitation", &BaseServices::GetAllJointsTorqueSoftLimitation, this); + m_serviceGetTwistSoftLimitation = m_n.advertiseService("base/get_twist_soft_limitation", &BaseServices::GetTwistSoftLimitation, this); + m_serviceGetWrenchSoftLimitation = m_n.advertiseService("base/get_wrench_soft_limitation", &BaseServices::GetWrenchSoftLimitation, this); +} + +bool BaseServices::SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res) +{ + m_current_device_id = req.device_id; + + return true; +} + +bool BaseServices::SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res) +{ + m_api_options.timeout_ms = req.input.timeout_ms; + + return true; +} + + +bool BaseServices::CreateUserProfile(kortex_driver::CreateUserProfile::Request &req, kortex_driver::CreateUserProfile::Response &res) +{ + Kinova::Api::Base::FullUserProfile input; + ToProtoData(req.input, &input); + Kinova::Api::Common::UserProfileHandle output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->CreateUserProfile(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::UpdateUserProfile(kortex_driver::UpdateUserProfile::Request &req, kortex_driver::UpdateUserProfile::Response &res) +{ + Kinova::Api::Base::UserProfile input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->UpdateUserProfile(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::ReadUserProfile(kortex_driver::ReadUserProfile::Request &req, kortex_driver::ReadUserProfile::Response &res) +{ + Kinova::Api::Common::UserProfileHandle input; + ToProtoData(req.input, &input); + Kinova::Api::Base::UserProfile output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadUserProfile(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::DeleteUserProfile(kortex_driver::DeleteUserProfile::Request &req, kortex_driver::DeleteUserProfile::Response &res) +{ + Kinova::Api::Common::UserProfileHandle input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->DeleteUserProfile(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::ReadAllUserProfiles(kortex_driver::ReadAllUserProfiles::Request &req, kortex_driver::ReadAllUserProfiles::Response &res) +{ + Kinova::Api::Base::UserProfileList output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadAllUserProfiles(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::ReadAllUsers(kortex_driver::ReadAllUsers::Request &req, kortex_driver::ReadAllUsers::Response &res) +{ + Kinova::Api::Base::UserList output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadAllUsers(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::ChangePassword(kortex_driver::ChangePassword::Request &req, kortex_driver::ChangePassword::Response &res) +{ + Kinova::Api::Base::PasswordChange input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->ChangePassword(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::CreateSequence(kortex_driver::CreateSequence::Request &req, kortex_driver::CreateSequence::Response &res) +{ + Kinova::Api::Base::Sequence input; + ToProtoData(req.input, &input); + Kinova::Api::Base::SequenceHandle output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->CreateSequence(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::UpdateSequence(kortex_driver::UpdateSequence::Request &req, kortex_driver::UpdateSequence::Response &res) +{ + Kinova::Api::Base::Sequence input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->UpdateSequence(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::ReadSequence(kortex_driver::ReadSequence::Request &req, kortex_driver::ReadSequence::Response &res) +{ + Kinova::Api::Base::SequenceHandle input; + ToProtoData(req.input, &input); + Kinova::Api::Base::Sequence output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadSequence(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::DeleteSequence(kortex_driver::DeleteSequence::Request &req, kortex_driver::DeleteSequence::Response &res) +{ + Kinova::Api::Base::SequenceHandle input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->DeleteSequence(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::ReadAllSequences(kortex_driver::ReadAllSequences::Request &req, kortex_driver::ReadAllSequences::Response &res) +{ + Kinova::Api::Base::SequenceList output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadAllSequences(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::DeleteSequenceTask(kortex_driver::DeleteSequenceTask::Request &req, kortex_driver::DeleteSequenceTask::Response &res) +{ + Kinova::Api::Base::SequenceTaskHandle input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->DeleteSequenceTask(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::DeleteAllSequenceTasks(kortex_driver::DeleteAllSequenceTasks::Request &req, kortex_driver::DeleteAllSequenceTasks::Response &res) +{ + Kinova::Api::Base::SequenceHandle input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->DeleteAllSequenceTasks(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::PlaySequence(kortex_driver::PlaySequence::Request &req, kortex_driver::PlaySequence::Response &res) +{ + Kinova::Api::Base::SequenceHandle input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->PlaySequence(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::PlayAdvancedSequence(kortex_driver::PlayAdvancedSequence::Request &req, kortex_driver::PlayAdvancedSequence::Response &res) +{ + Kinova::Api::Base::AdvancedSequenceHandle input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->PlayAdvancedSequence(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::StopSequence(kortex_driver::StopSequence::Request &req, kortex_driver::StopSequence::Response &res) +{ + kortex_driver::KortexError result_error; + + try + { + m_base->StopSequence(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::PauseSequence(kortex_driver::PauseSequence::Request &req, kortex_driver::PauseSequence::Response &res) +{ + kortex_driver::KortexError result_error; + + try + { + m_base->PauseSequence(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::ResumeSequence(kortex_driver::ResumeSequence::Request &req, kortex_driver::ResumeSequence::Response &res) +{ + kortex_driver::KortexError result_error; + + try + { + m_base->ResumeSequence(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::CreateProtectionZone(kortex_driver::CreateProtectionZone::Request &req, kortex_driver::CreateProtectionZone::Response &res) +{ + Kinova::Api::Base::ProtectionZone input; + ToProtoData(req.input, &input); + Kinova::Api::Base::ProtectionZoneHandle output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->CreateProtectionZone(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::UpdateProtectionZone(kortex_driver::UpdateProtectionZone::Request &req, kortex_driver::UpdateProtectionZone::Response &res) +{ + Kinova::Api::Base::ProtectionZone input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->UpdateProtectionZone(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::ReadProtectionZone(kortex_driver::ReadProtectionZone::Request &req, kortex_driver::ReadProtectionZone::Response &res) +{ + Kinova::Api::Base::ProtectionZoneHandle input; + ToProtoData(req.input, &input); + Kinova::Api::Base::ProtectionZone output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadProtectionZone(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::DeleteProtectionZone(kortex_driver::DeleteProtectionZone::Request &req, kortex_driver::DeleteProtectionZone::Response &res) +{ + Kinova::Api::Base::ProtectionZoneHandle input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->DeleteProtectionZone(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::ReadAllProtectionZones(kortex_driver::ReadAllProtectionZones::Request &req, kortex_driver::ReadAllProtectionZones::Response &res) +{ + Kinova::Api::Base::ProtectionZoneList output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadAllProtectionZones(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::CreateMapping(kortex_driver::CreateMapping::Request &req, kortex_driver::CreateMapping::Response &res) +{ + Kinova::Api::Base::Mapping input; + ToProtoData(req.input, &input); + Kinova::Api::Base::MappingHandle output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->CreateMapping(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::ReadMapping(kortex_driver::ReadMapping::Request &req, kortex_driver::ReadMapping::Response &res) +{ + Kinova::Api::Base::MappingHandle input; + ToProtoData(req.input, &input); + Kinova::Api::Base::Mapping output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadMapping(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::ReadAllMappings(kortex_driver::ReadAllMappings::Request &req, kortex_driver::ReadAllMappings::Response &res) +{ + Kinova::Api::Base::MappingList output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadAllMappings(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::CreateMap(kortex_driver::CreateMap::Request &req, kortex_driver::CreateMap::Response &res) +{ + Kinova::Api::Base::Map input; + ToProtoData(req.input, &input); + Kinova::Api::Base::MapHandle output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->CreateMap(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::ReadAllMaps(kortex_driver::ReadAllMaps::Request &req, kortex_driver::ReadAllMaps::Response &res) +{ + Kinova::Api::Base::MappingHandle input; + ToProtoData(req.input, &input); + Kinova::Api::Base::MapList output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadAllMaps(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::ActivateMap(kortex_driver::ActivateMap::Request &req, kortex_driver::ActivateMap::Response &res) +{ + Kinova::Api::Base::ActivateMapHandle input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->ActivateMap(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::CreateAction(kortex_driver::CreateAction::Request &req, kortex_driver::CreateAction::Response &res) +{ + Kinova::Api::Base::Action input; + ToProtoData(req.input, &input); + Kinova::Api::Base::ActionHandle output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->CreateAction(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::ReadAction(kortex_driver::ReadAction::Request &req, kortex_driver::ReadAction::Response &res) +{ + Kinova::Api::Base::ActionHandle input; + ToProtoData(req.input, &input); + Kinova::Api::Base::Action output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadAction(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::ReadAllActions(kortex_driver::ReadAllActions::Request &req, kortex_driver::ReadAllActions::Response &res) +{ + Kinova::Api::Base::RequestedActionType input; + ToProtoData(req.input, &input); + Kinova::Api::Base::ActionList output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadAllActions(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::DeleteAction(kortex_driver::DeleteAction::Request &req, kortex_driver::DeleteAction::Response &res) +{ + Kinova::Api::Base::ActionHandle input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->DeleteAction(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::UpdateAction(kortex_driver::UpdateAction::Request &req, kortex_driver::UpdateAction::Response &res) +{ + Kinova::Api::Base::Action input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->UpdateAction(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::ExecuteActionFromReference(kortex_driver::ExecuteActionFromReference::Request &req, kortex_driver::ExecuteActionFromReference::Response &res) +{ + Kinova::Api::Base::ActionHandle input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->ExecuteActionFromReference(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::ExecuteAction(kortex_driver::ExecuteAction::Request &req, kortex_driver::ExecuteAction::Response &res) +{ + Kinova::Api::Base::Action input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->ExecuteAction(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::PauseAction(kortex_driver::PauseAction::Request &req, kortex_driver::PauseAction::Response &res) +{ + kortex_driver::KortexError result_error; + + try + { + m_base->PauseAction(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::StopAction(kortex_driver::StopAction::Request &req, kortex_driver::StopAction::Response &res) +{ + kortex_driver::KortexError result_error; + + try + { + m_base->StopAction(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::ResumeAction(kortex_driver::ResumeAction::Request &req, kortex_driver::ResumeAction::Response &res) +{ + kortex_driver::KortexError result_error; + + try + { + m_base->ResumeAction(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::GetIPv4Configuration(kortex_driver::GetIPv4Configuration::Request &req, kortex_driver::GetIPv4Configuration::Response &res) +{ + Kinova::Api::Base::NetworkHandle input; + ToProtoData(req.input, &input); + Kinova::Api::Base::IPv4Configuration output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetIPv4Configuration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::SetIPv4Configuration(kortex_driver::SetIPv4Configuration::Request &req, kortex_driver::SetIPv4Configuration::Response &res) +{ + Kinova::Api::Base::FullIPv4Configuration input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->SetIPv4Configuration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::SetCommunicationInterfaceEnable(kortex_driver::SetCommunicationInterfaceEnable::Request &req, kortex_driver::SetCommunicationInterfaceEnable::Response &res) +{ + Kinova::Api::Base::CommunicationInterfaceConfiguration input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->SetCommunicationInterfaceEnable(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::IsCommunicationInterfaceEnable(kortex_driver::IsCommunicationInterfaceEnable::Request &req, kortex_driver::IsCommunicationInterfaceEnable::Response &res) +{ + Kinova::Api::Base::NetworkHandle input; + ToProtoData(req.input, &input); + Kinova::Api::Base::CommunicationInterfaceConfiguration output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->IsCommunicationInterfaceEnable(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetAvailableWifi(kortex_driver::GetAvailableWifi::Request &req, kortex_driver::GetAvailableWifi::Response &res) +{ + Kinova::Api::Base::WifiInformationList output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetAvailableWifi(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetWifiInformation(kortex_driver::GetWifiInformation::Request &req, kortex_driver::GetWifiInformation::Response &res) +{ + Kinova::Api::Base::Ssid input; + ToProtoData(req.input, &input); + Kinova::Api::Base::WifiInformation output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetWifiInformation(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::AddWifiConfiguration(kortex_driver::AddWifiConfiguration::Request &req, kortex_driver::AddWifiConfiguration::Response &res) +{ + Kinova::Api::Base::WifiConfiguration input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->AddWifiConfiguration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::DeleteWifiConfiguration(kortex_driver::DeleteWifiConfiguration::Request &req, kortex_driver::DeleteWifiConfiguration::Response &res) +{ + Kinova::Api::Base::Ssid input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->DeleteWifiConfiguration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::GetAllConfiguredWifis(kortex_driver::GetAllConfiguredWifis::Request &req, kortex_driver::GetAllConfiguredWifis::Response &res) +{ + Kinova::Api::Base::WifiConfigurationList output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetAllConfiguredWifis(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::ConnectWifi(kortex_driver::ConnectWifi::Request &req, kortex_driver::ConnectWifi::Response &res) +{ + Kinova::Api::Base::Ssid input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->ConnectWifi(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::DisconnectWifi(kortex_driver::DisconnectWifi::Request &req, kortex_driver::DisconnectWifi::Response &res) +{ + kortex_driver::KortexError result_error; + + try + { + m_base->DisconnectWifi(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::GetConnectedWifiInformation(kortex_driver::GetConnectedWifiInformation::Request &req, kortex_driver::GetConnectedWifiInformation::Response &res) +{ + Kinova::Api::Base::WifiInformation output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetConnectedWifiInformation(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::Base_Unsubscribe(kortex_driver::Base_Unsubscribe::Request &req, kortex_driver::Base_Unsubscribe::Response &res) +{ + Kinova::Api::Common::NotificationHandle input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->Unsubscribe(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::OnNotificationConfigurationChangeTopic(kortex_driver::OnNotificationConfigurationChangeTopic::Request &req, kortex_driver::OnNotificationConfigurationChangeTopic::Response &res) +{ + Kinova::Api::Common::NotificationOptions input; + ToProtoData(req.input, &input); + Kinova::Api::Common::NotificationHandle output; + + kortex_driver::KortexError result_error; + + try + { + std::function< void (Kinova::Api::Base::ConfigurationChangeNotification) > callback = std::bind(&BaseServices::cb_ConfigurationChangeTopic, this, std::placeholders::_1); + output = m_base->OnNotificationConfigurationChangeTopic(callback, input, m_current_device_id); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_ConfigurationChangeTopic(Kinova::Api::Base::ConfigurationChangeNotification notif) +{ + kortex_driver::ConfigurationChangeNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_ConfigurationChangeTopic.publish(ros_msg); +} + +bool BaseServices::OnNotificationMappingInfoTopic(kortex_driver::OnNotificationMappingInfoTopic::Request &req, kortex_driver::OnNotificationMappingInfoTopic::Response &res) +{ + Kinova::Api::Common::NotificationOptions input; + ToProtoData(req.input, &input); + Kinova::Api::Common::NotificationHandle output; + + kortex_driver::KortexError result_error; + + try + { + std::function< void (Kinova::Api::Base::MappingInfoNotification) > callback = std::bind(&BaseServices::cb_MappingInfoTopic, this, std::placeholders::_1); + output = m_base->OnNotificationMappingInfoTopic(callback, input, m_current_device_id); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_MappingInfoTopic(Kinova::Api::Base::MappingInfoNotification notif) +{ + kortex_driver::MappingInfoNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_MappingInfoTopic.publish(ros_msg); +} + +bool BaseServices::OnNotificationControlModeTopic(kortex_driver::OnNotificationControlModeTopic::Request &req, kortex_driver::OnNotificationControlModeTopic::Response &res) +{ + Kinova::Api::Common::NotificationOptions input; + ToProtoData(req.input, &input); + Kinova::Api::Common::NotificationHandle output; + + kortex_driver::KortexError result_error; + + try + { + std::function< void (Kinova::Api::Base::ControlModeNotification) > callback = std::bind(&BaseServices::cb_ControlModeTopic, this, std::placeholders::_1); + output = m_base->OnNotificationControlModeTopic(callback, input, m_current_device_id); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_ControlModeTopic(Kinova::Api::Base::ControlModeNotification notif) +{ + kortex_driver::ControlModeNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_ControlModeTopic.publish(ros_msg); +} + +bool BaseServices::OnNotificationOperatingModeTopic(kortex_driver::OnNotificationOperatingModeTopic::Request &req, kortex_driver::OnNotificationOperatingModeTopic::Response &res) +{ + Kinova::Api::Common::NotificationOptions input; + ToProtoData(req.input, &input); + Kinova::Api::Common::NotificationHandle output; + + kortex_driver::KortexError result_error; + + try + { + std::function< void (Kinova::Api::Base::OperatingModeNotification) > callback = std::bind(&BaseServices::cb_OperatingModeTopic, this, std::placeholders::_1); + output = m_base->OnNotificationOperatingModeTopic(callback, input, m_current_device_id); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_OperatingModeTopic(Kinova::Api::Base::OperatingModeNotification notif) +{ + kortex_driver::OperatingModeNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_OperatingModeTopic.publish(ros_msg); +} + +bool BaseServices::OnNotificationSequenceInfoTopic(kortex_driver::OnNotificationSequenceInfoTopic::Request &req, kortex_driver::OnNotificationSequenceInfoTopic::Response &res) +{ + Kinova::Api::Common::NotificationOptions input; + ToProtoData(req.input, &input); + Kinova::Api::Common::NotificationHandle output; + + kortex_driver::KortexError result_error; + + try + { + std::function< void (Kinova::Api::Base::SequenceInfoNotification) > callback = std::bind(&BaseServices::cb_SequenceInfoTopic, this, std::placeholders::_1); + output = m_base->OnNotificationSequenceInfoTopic(callback, input, m_current_device_id); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_SequenceInfoTopic(Kinova::Api::Base::SequenceInfoNotification notif) +{ + kortex_driver::SequenceInfoNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_SequenceInfoTopic.publish(ros_msg); +} + +bool BaseServices::OnNotificationProtectionZoneTopic(kortex_driver::OnNotificationProtectionZoneTopic::Request &req, kortex_driver::OnNotificationProtectionZoneTopic::Response &res) +{ + Kinova::Api::Common::NotificationOptions input; + ToProtoData(req.input, &input); + Kinova::Api::Common::NotificationHandle output; + + kortex_driver::KortexError result_error; + + try + { + std::function< void (Kinova::Api::Base::ProtectionZoneNotification) > callback = std::bind(&BaseServices::cb_ProtectionZoneTopic, this, std::placeholders::_1); + output = m_base->OnNotificationProtectionZoneTopic(callback, input, m_current_device_id); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_ProtectionZoneTopic(Kinova::Api::Base::ProtectionZoneNotification notif) +{ + kortex_driver::ProtectionZoneNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_ProtectionZoneTopic.publish(ros_msg); +} + +bool BaseServices::OnNotificationUserTopic(kortex_driver::OnNotificationUserTopic::Request &req, kortex_driver::OnNotificationUserTopic::Response &res) +{ + Kinova::Api::Common::NotificationOptions input; + ToProtoData(req.input, &input); + Kinova::Api::Common::NotificationHandle output; + + kortex_driver::KortexError result_error; + + try + { + std::function< void (Kinova::Api::Base::UserNotification) > callback = std::bind(&BaseServices::cb_UserTopic, this, std::placeholders::_1); + output = m_base->OnNotificationUserTopic(callback, input, m_current_device_id); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_UserTopic(Kinova::Api::Base::UserNotification notif) +{ + kortex_driver::UserNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_UserTopic.publish(ros_msg); +} + +bool BaseServices::OnNotificationControllerTopic(kortex_driver::OnNotificationControllerTopic::Request &req, kortex_driver::OnNotificationControllerTopic::Response &res) +{ + Kinova::Api::Common::NotificationOptions input; + ToProtoData(req.input, &input); + Kinova::Api::Common::NotificationHandle output; + + kortex_driver::KortexError result_error; + + try + { + std::function< void (Kinova::Api::Base::ControllerNotification) > callback = std::bind(&BaseServices::cb_ControllerTopic, this, std::placeholders::_1); + output = m_base->OnNotificationControllerTopic(callback, input, m_current_device_id); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_ControllerTopic(Kinova::Api::Base::ControllerNotification notif) +{ + kortex_driver::ControllerNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_ControllerTopic.publish(ros_msg); +} + +bool BaseServices::OnNotificationActionTopic(kortex_driver::OnNotificationActionTopic::Request &req, kortex_driver::OnNotificationActionTopic::Response &res) +{ + Kinova::Api::Common::NotificationOptions input; + ToProtoData(req.input, &input); + Kinova::Api::Common::NotificationHandle output; + + kortex_driver::KortexError result_error; + + try + { + std::function< void (Kinova::Api::Base::ActionNotification) > callback = std::bind(&BaseServices::cb_ActionTopic, this, std::placeholders::_1); + output = m_base->OnNotificationActionTopic(callback, input, m_current_device_id); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_ActionTopic(Kinova::Api::Base::ActionNotification notif) +{ + kortex_driver::ActionNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_ActionTopic.publish(ros_msg); +} + +bool BaseServices::OnNotificationRobotEventTopic(kortex_driver::OnNotificationRobotEventTopic::Request &req, kortex_driver::OnNotificationRobotEventTopic::Response &res) +{ + Kinova::Api::Common::NotificationOptions input; + ToProtoData(req.input, &input); + Kinova::Api::Common::NotificationHandle output; + + kortex_driver::KortexError result_error; + + try + { + std::function< void (Kinova::Api::Base::RobotEventNotification) > callback = std::bind(&BaseServices::cb_RobotEventTopic, this, std::placeholders::_1); + output = m_base->OnNotificationRobotEventTopic(callback, input, m_current_device_id); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_RobotEventTopic(Kinova::Api::Base::RobotEventNotification notif) +{ + kortex_driver::RobotEventNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_RobotEventTopic.publish(ros_msg); +} + +bool BaseServices::PlayCartesianTrajectory(kortex_driver::PlayCartesianTrajectory::Request &req, kortex_driver::PlayCartesianTrajectory::Response &res) +{ + Kinova::Api::Base::ConstrainedPose input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->PlayCartesianTrajectory(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::PlayCartesianTrajectoryPosition(kortex_driver::PlayCartesianTrajectoryPosition::Request &req, kortex_driver::PlayCartesianTrajectoryPosition::Response &res) +{ + Kinova::Api::Base::ConstrainedPosition input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->PlayCartesianTrajectoryPosition(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::PlayCartesianTrajectoryOrientation(kortex_driver::PlayCartesianTrajectoryOrientation::Request &req, kortex_driver::PlayCartesianTrajectoryOrientation::Response &res) +{ + Kinova::Api::Base::ConstrainedOrientation input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->PlayCartesianTrajectoryOrientation(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::Stop(kortex_driver::Stop::Request &req, kortex_driver::Stop::Response &res) +{ + kortex_driver::KortexError result_error; + + try + { + m_base->Stop(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::GetMeasuredCartesianPose(kortex_driver::GetMeasuredCartesianPose::Request &req, kortex_driver::GetMeasuredCartesianPose::Response &res) +{ + Kinova::Api::Base::Pose output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetMeasuredCartesianPose(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::SendWrenchCommand(kortex_driver::SendWrenchCommand::Request &req, kortex_driver::SendWrenchCommand::Response &res) +{ + Kinova::Api::Base::WrenchCommand input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->SendWrenchCommand(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::SendWrenchJoystickCommand(kortex_driver::SendWrenchJoystickCommand::Request &req, kortex_driver::SendWrenchJoystickCommand::Response &res) +{ + Kinova::Api::Base::WrenchCommand input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->SendWrenchJoystickCommand(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::SendTwistJoystickCommand(kortex_driver::SendTwistJoystickCommand::Request &req, kortex_driver::SendTwistJoystickCommand::Response &res) +{ + Kinova::Api::Base::TwistCommand input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->SendTwistJoystickCommand(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::SendTwistCommand(kortex_driver::SendTwistCommand::Request &req, kortex_driver::SendTwistCommand::Response &res) +{ + Kinova::Api::Base::TwistCommand input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->SendTwistCommand(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::PlayJointTrajectory(kortex_driver::PlayJointTrajectory::Request &req, kortex_driver::PlayJointTrajectory::Response &res) +{ + Kinova::Api::Base::ConstrainedJointAngles input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->PlayJointTrajectory(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::PlaySelectedJointTrajectory(kortex_driver::PlaySelectedJointTrajectory::Request &req, kortex_driver::PlaySelectedJointTrajectory::Response &res) +{ + Kinova::Api::Base::ConstrainedJointAngle input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->PlaySelectedJointTrajectory(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::GetMeasuredJointAngles(kortex_driver::GetMeasuredJointAngles::Request &req, kortex_driver::GetMeasuredJointAngles::Response &res) +{ + Kinova::Api::Base::JointAngles output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetMeasuredJointAngles(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::SendJointSpeedsCommand(kortex_driver::SendJointSpeedsCommand::Request &req, kortex_driver::SendJointSpeedsCommand::Response &res) +{ + Kinova::Api::Base::JointSpeeds input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->SendJointSpeedsCommand(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::SendSelectedJointSpeedCommand(kortex_driver::SendSelectedJointSpeedCommand::Request &req, kortex_driver::SendSelectedJointSpeedCommand::Response &res) +{ + Kinova::Api::Base::JointSpeed input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->SendSelectedJointSpeedCommand(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::SendGripperCommand(kortex_driver::SendGripperCommand::Request &req, kortex_driver::SendGripperCommand::Response &res) +{ + Kinova::Api::Base::GripperCommand input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->SendGripperCommand(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::GetMeasuredGripperMovement(kortex_driver::GetMeasuredGripperMovement::Request &req, kortex_driver::GetMeasuredGripperMovement::Response &res) +{ + Kinova::Api::Base::GripperRequest input; + ToProtoData(req.input, &input); + Kinova::Api::Base::Gripper output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetMeasuredGripperMovement(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::SetAdmittance(kortex_driver::SetAdmittance::Request &req, kortex_driver::SetAdmittance::Response &res) +{ + Kinova::Api::Base::Admittance input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->SetAdmittance(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::SetOperatingMode(kortex_driver::SetOperatingMode::Request &req, kortex_driver::SetOperatingMode::Response &res) +{ + Kinova::Api::Base::OperatingModeInformation input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->SetOperatingMode(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::ApplyEmergencyStop(kortex_driver::ApplyEmergencyStop::Request &req, kortex_driver::ApplyEmergencyStop::Response &res) +{ + kortex_driver::KortexError result_error; + + try + { + m_base->ApplyEmergencyStop(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::Base_ClearFaults(kortex_driver::Base_ClearFaults::Request &req, kortex_driver::Base_ClearFaults::Response &res) +{ + kortex_driver::KortexError result_error; + + try + { + m_base->ClearFaults(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::Base_GetControlMode(kortex_driver::Base_GetControlMode::Request &req, kortex_driver::Base_GetControlMode::Response &res) +{ + Kinova::Api::Base::ControlModeInformation output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetControlMode(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetOperatingMode(kortex_driver::GetOperatingMode::Request &req, kortex_driver::GetOperatingMode::Response &res) +{ + Kinova::Api::Base::OperatingModeInformation output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetOperatingMode(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::SetServoingMode(kortex_driver::SetServoingMode::Request &req, kortex_driver::SetServoingMode::Response &res) +{ + Kinova::Api::Base::ServoingModeInformation input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->SetServoingMode(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::GetServoingMode(kortex_driver::GetServoingMode::Request &req, kortex_driver::GetServoingMode::Response &res) +{ + Kinova::Api::Base::ServoingModeInformation output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetServoingMode(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::OnNotificationServoingModeTopic(kortex_driver::OnNotificationServoingModeTopic::Request &req, kortex_driver::OnNotificationServoingModeTopic::Response &res) +{ + Kinova::Api::Common::NotificationOptions input; + ToProtoData(req.input, &input); + Kinova::Api::Common::NotificationHandle output; + + kortex_driver::KortexError result_error; + + try + { + std::function< void (Kinova::Api::Base::ServoingModeNotification) > callback = std::bind(&BaseServices::cb_ServoingModeTopic, this, std::placeholders::_1); + output = m_base->OnNotificationServoingModeTopic(callback, input, m_current_device_id); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_ServoingModeTopic(Kinova::Api::Base::ServoingModeNotification notif) +{ + kortex_driver::ServoingModeNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_ServoingModeTopic.publish(ros_msg); +} + +bool BaseServices::RestoreFactorySettings(kortex_driver::RestoreFactorySettings::Request &req, kortex_driver::RestoreFactorySettings::Response &res) +{ + kortex_driver::KortexError result_error; + + try + { + m_base->RestoreFactorySettings(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::OnNotificationFactoryTopic(kortex_driver::OnNotificationFactoryTopic::Request &req, kortex_driver::OnNotificationFactoryTopic::Response &res) +{ + Kinova::Api::Common::NotificationOptions input; + ToProtoData(req.input, &input); + Kinova::Api::Common::NotificationHandle output; + + kortex_driver::KortexError result_error; + + try + { + std::function< void (Kinova::Api::Base::FactoryNotification) > callback = std::bind(&BaseServices::cb_FactoryTopic, this, std::placeholders::_1); + output = m_base->OnNotificationFactoryTopic(callback, input, m_current_device_id); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_FactoryTopic(Kinova::Api::Base::FactoryNotification notif) +{ + kortex_driver::FactoryNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_FactoryTopic.publish(ros_msg); +} + +bool BaseServices::GetAllConnectedControllers(kortex_driver::GetAllConnectedControllers::Request &req, kortex_driver::GetAllConnectedControllers::Response &res) +{ + Kinova::Api::Base::ControllerList output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetAllConnectedControllers(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetControllerState(kortex_driver::GetControllerState::Request &req, kortex_driver::GetControllerState::Response &res) +{ + Kinova::Api::Base::ControllerHandle input; + ToProtoData(req.input, &input); + Kinova::Api::Base::ControllerState output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetControllerState(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetActuatorCount(kortex_driver::GetActuatorCount::Request &req, kortex_driver::GetActuatorCount::Response &res) +{ + Kinova::Api::Base::ActuatorInformation output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetActuatorCount(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::StartWifiScan(kortex_driver::StartWifiScan::Request &req, kortex_driver::StartWifiScan::Response &res) +{ + kortex_driver::KortexError result_error; + + try + { + m_base->StartWifiScan(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::GetConfiguredWifi(kortex_driver::GetConfiguredWifi::Request &req, kortex_driver::GetConfiguredWifi::Response &res) +{ + Kinova::Api::Base::Ssid input; + ToProtoData(req.input, &input); + Kinova::Api::Base::WifiConfiguration output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetConfiguredWifi(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::OnNotificationNetworkTopic(kortex_driver::OnNotificationNetworkTopic::Request &req, kortex_driver::OnNotificationNetworkTopic::Response &res) +{ + Kinova::Api::Common::NotificationOptions input; + ToProtoData(req.input, &input); + Kinova::Api::Common::NotificationHandle output; + + kortex_driver::KortexError result_error; + + try + { + std::function< void (Kinova::Api::Base::NetworkNotification) > callback = std::bind(&BaseServices::cb_NetworkTopic, this, std::placeholders::_1); + output = m_base->OnNotificationNetworkTopic(callback, input, m_current_device_id); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_NetworkTopic(Kinova::Api::Base::NetworkNotification notif) +{ + kortex_driver::NetworkNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_NetworkTopic.publish(ros_msg); +} + +bool BaseServices::GetArmState(kortex_driver::GetArmState::Request &req, kortex_driver::GetArmState::Response &res) +{ + Kinova::Api::Base::ArmStateInformation output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetArmState(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::OnNotificationArmStateTopic(kortex_driver::OnNotificationArmStateTopic::Request &req, kortex_driver::OnNotificationArmStateTopic::Response &res) +{ + Kinova::Api::Common::NotificationOptions input; + ToProtoData(req.input, &input); + Kinova::Api::Common::NotificationHandle output; + + kortex_driver::KortexError result_error; + + try + { + std::function< void (Kinova::Api::Base::ArmStateNotification) > callback = std::bind(&BaseServices::cb_ArmStateTopic, this, std::placeholders::_1); + output = m_base->OnNotificationArmStateTopic(callback, input, m_current_device_id); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_ArmStateTopic(Kinova::Api::Base::ArmStateNotification notif) +{ + kortex_driver::ArmStateNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_ArmStateTopic.publish(ros_msg); +} + +bool BaseServices::GetIPv4Information(kortex_driver::GetIPv4Information::Request &req, kortex_driver::GetIPv4Information::Response &res) +{ + Kinova::Api::Base::NetworkHandle input; + ToProtoData(req.input, &input); + Kinova::Api::Base::IPv4Information output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetIPv4Information(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::SetWifiCountryCode(kortex_driver::SetWifiCountryCode::Request &req, kortex_driver::SetWifiCountryCode::Response &res) +{ + Kinova::Api::Common::CountryCode input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->SetWifiCountryCode(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::GetWifiCountryCode(kortex_driver::GetWifiCountryCode::Request &req, kortex_driver::GetWifiCountryCode::Response &res) +{ + Kinova::Api::Common::CountryCode output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetWifiCountryCode(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::Base_SetCapSenseConfig(kortex_driver::Base_SetCapSenseConfig::Request &req, kortex_driver::Base_SetCapSenseConfig::Response &res) +{ + Kinova::Api::Base::CapSenseConfig input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->SetCapSenseConfig(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::Base_GetCapSenseConfig(kortex_driver::Base_GetCapSenseConfig::Request &req, kortex_driver::Base_GetCapSenseConfig::Response &res) +{ + Kinova::Api::Base::CapSenseConfig output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetCapSenseConfig(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetAllJointsSpeedHardLimitation(kortex_driver::GetAllJointsSpeedHardLimitation::Request &req, kortex_driver::GetAllJointsSpeedHardLimitation::Response &res) +{ + Kinova::Api::Base::JointsLimitationsList output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetAllJointsSpeedHardLimitation(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetAllJointsTorqueHardLimitation(kortex_driver::GetAllJointsTorqueHardLimitation::Request &req, kortex_driver::GetAllJointsTorqueHardLimitation::Response &res) +{ + Kinova::Api::Base::JointsLimitationsList output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetAllJointsTorqueHardLimitation(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetTwistHardLimitation(kortex_driver::GetTwistHardLimitation::Request &req, kortex_driver::GetTwistHardLimitation::Response &res) +{ + Kinova::Api::Base::TwistLimitation output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetTwistHardLimitation(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetWrenchHardLimitation(kortex_driver::GetWrenchHardLimitation::Request &req, kortex_driver::GetWrenchHardLimitation::Response &res) +{ + Kinova::Api::Base::WrenchLimitation output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetWrenchHardLimitation(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::SendJointSpeedsJoystickCommand(kortex_driver::SendJointSpeedsJoystickCommand::Request &req, kortex_driver::SendJointSpeedsJoystickCommand::Response &res) +{ + Kinova::Api::Base::JointSpeeds input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->SendJointSpeedsJoystickCommand(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::SendSelectedJointSpeedJoystickCommand(kortex_driver::SendSelectedJointSpeedJoystickCommand::Request &req, kortex_driver::SendSelectedJointSpeedJoystickCommand::Response &res) +{ + Kinova::Api::Base::JointSpeed input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->SendSelectedJointSpeedJoystickCommand(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::EnableBridge(kortex_driver::EnableBridge::Request &req, kortex_driver::EnableBridge::Response &res) +{ + Kinova::Api::Base::BridgeConfig input; + ToProtoData(req.input, &input); + Kinova::Api::Base::BridgeResult output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->EnableBridge(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::DisableBridge(kortex_driver::DisableBridge::Request &req, kortex_driver::DisableBridge::Response &res) +{ + Kinova::Api::Base::BridgeIdentifier input; + ToProtoData(req.input, &input); + Kinova::Api::Base::BridgeResult output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->DisableBridge(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetBridgeList(kortex_driver::GetBridgeList::Request &req, kortex_driver::GetBridgeList::Response &res) +{ + Kinova::Api::Base::BridgeList output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetBridgeList(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetBridgeConfig(kortex_driver::GetBridgeConfig::Request &req, kortex_driver::GetBridgeConfig::Response &res) +{ + Kinova::Api::Base::BridgeIdentifier input; + ToProtoData(req.input, &input); + Kinova::Api::Base::BridgeConfig output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetBridgeConfig(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::PlayPreComputedJointTrajectory(kortex_driver::PlayPreComputedJointTrajectory::Request &req, kortex_driver::PlayPreComputedJointTrajectory::Response &res) +{ + Kinova::Api::Base::PreComputedJointTrajectory input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->PlayPreComputedJointTrajectory(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::GetProductConfiguration(kortex_driver::GetProductConfiguration::Request &req, kortex_driver::GetProductConfiguration::Response &res) +{ + Kinova::Api::ProductConfiguration::CompleteProductConfiguration output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetProductConfiguration(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::UpdateDegreeOfFreedomConfiguration(kortex_driver::UpdateDegreeOfFreedomConfiguration::Request &req, kortex_driver::UpdateDegreeOfFreedomConfiguration::Response &res) +{ + Kinova::Api::ProductConfiguration::ProductConfigurationDegreeOfFreedom input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->UpdateDegreeOfFreedomConfiguration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::UpdateBaseTypeConfiguration(kortex_driver::UpdateBaseTypeConfiguration::Request &req, kortex_driver::UpdateBaseTypeConfiguration::Response &res) +{ + Kinova::Api::ProductConfiguration::ProductConfigurationBaseType input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->UpdateBaseTypeConfiguration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::UpdateEndEffectorTypeConfiguration(kortex_driver::UpdateEndEffectorTypeConfiguration::Request &req, kortex_driver::UpdateEndEffectorTypeConfiguration::Response &res) +{ + Kinova::Api::ProductConfiguration::ProductConfigurationEndEffectorType input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->UpdateEndEffectorTypeConfiguration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::UpdateVisionModuleTypeConfiguration(kortex_driver::UpdateVisionModuleTypeConfiguration::Request &req, kortex_driver::UpdateVisionModuleTypeConfiguration::Response &res) +{ + Kinova::Api::ProductConfiguration::ProductConfigurationVisionModuleType input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->UpdateVisionModuleTypeConfiguration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::UpdateInterfaceModuleTypeConfiguration(kortex_driver::UpdateInterfaceModuleTypeConfiguration::Request &req, kortex_driver::UpdateInterfaceModuleTypeConfiguration::Response &res) +{ + Kinova::Api::ProductConfiguration::ProductConfigurationInterfaceModuleType input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->UpdateInterfaceModuleTypeConfiguration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::UpdateArmLateralityConfiguration(kortex_driver::UpdateArmLateralityConfiguration::Request &req, kortex_driver::UpdateArmLateralityConfiguration::Response &res) +{ + Kinova::Api::ProductConfiguration::ProductConfigurationLaterality input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->UpdateArmLateralityConfiguration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::UpdateWristTypeConfiguration(kortex_driver::UpdateWristTypeConfiguration::Request &req, kortex_driver::UpdateWristTypeConfiguration::Response &res) +{ + Kinova::Api::ProductConfiguration::ProductConfigurationWristType input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_base->UpdateWristTypeConfiguration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::RestoreFactoryProductConfiguration(kortex_driver::RestoreFactoryProductConfiguration::Request &req, kortex_driver::RestoreFactoryProductConfiguration::Response &res) +{ + kortex_driver::KortexError result_error; + + try + { + m_base->RestoreFactoryProductConfiguration(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool BaseServices::GetTrajectoryErrorReport(kortex_driver::GetTrajectoryErrorReport::Request &req, kortex_driver::GetTrajectoryErrorReport::Response &res) +{ + Kinova::Api::Base::TrajectoryErrorReport output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetTrajectoryErrorReport(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetAllJointsSpeedSoftLimitation(kortex_driver::GetAllJointsSpeedSoftLimitation::Request &req, kortex_driver::GetAllJointsSpeedSoftLimitation::Response &res) +{ + Kinova::Api::Base::JointsLimitationsList output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetAllJointsSpeedSoftLimitation(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetAllJointsTorqueSoftLimitation(kortex_driver::GetAllJointsTorqueSoftLimitation::Request &req, kortex_driver::GetAllJointsTorqueSoftLimitation::Response &res) +{ + Kinova::Api::Base::JointsLimitationsList output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetAllJointsTorqueSoftLimitation(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetTwistSoftLimitation(kortex_driver::GetTwistSoftLimitation::Request &req, kortex_driver::GetTwistSoftLimitation::Response &res) +{ + Kinova::Api::Base::TwistLimitation output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetTwistSoftLimitation(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetWrenchSoftLimitation(kortex_driver::GetWrenchSoftLimitation::Request &req, kortex_driver::GetWrenchSoftLimitation::Response &res) +{ + Kinova::Api::Base::WrenchLimitation output; + + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetWrenchSoftLimitation(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} diff --git a/kortex_driver/src/generated/basecyclic_proto_converter.cpp b/kortex_driver/src/generated/basecyclic_proto_converter.cpp new file mode 100644 index 00000000..321ab90f --- /dev/null +++ b/kortex_driver/src/generated/basecyclic_proto_converter.cpp @@ -0,0 +1,167 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/basecyclic_proto_converter.h" + +int ToProtoData(kortex_driver::ActuatorCommand input, Kinova::Api::BaseCyclic::ActuatorCommand *output) +{ + + output->set_command_id(input.command_id); + output->set_flags(input.flags); + output->set_position(input.position); + output->set_velocity(input.velocity); + output->set_torque_joint(input.torque_joint); + output->set_current_motor(input.current_motor); + + return 0; +} +int ToProtoData(kortex_driver::ActuatorFeedback input, Kinova::Api::BaseCyclic::ActuatorFeedback *output) +{ + + output->set_command_id(input.command_id); + output->set_status_flags(input.status_flags); + output->set_jitter_comm(input.jitter_comm); + output->set_position(input.position); + output->set_velocity(input.velocity); + output->set_torque(input.torque); + output->set_current_motor(input.current_motor); + output->set_voltage(input.voltage); + output->set_temperature_motor(input.temperature_motor); + output->set_temperature_core(input.temperature_core); + output->set_fault_bank_a(input.fault_bank_a); + output->set_fault_bank_b(input.fault_bank_b); + output->set_warning_bank_a(input.warning_bank_a); + output->set_warning_bank_b(input.warning_bank_b); + + return 0; +} +int ToProtoData(kortex_driver::ActuatorCustomData input, Kinova::Api::BaseCyclic::ActuatorCustomData *output) +{ + + output->set_command_id(input.command_id); + output->set_custom_data_0(input.custom_data_0); + output->set_custom_data_1(input.custom_data_1); + output->set_custom_data_2(input.custom_data_2); + output->set_custom_data_3(input.custom_data_3); + output->set_custom_data_4(input.custom_data_4); + output->set_custom_data_5(input.custom_data_5); + output->set_custom_data_6(input.custom_data_6); + output->set_custom_data_7(input.custom_data_7); + output->set_custom_data_8(input.custom_data_8); + output->set_custom_data_9(input.custom_data_9); + output->set_custom_data_10(input.custom_data_10); + output->set_custom_data_11(input.custom_data_11); + output->set_custom_data_12(input.custom_data_12); + output->set_custom_data_13(input.custom_data_13); + output->set_custom_data_14(input.custom_data_14); + output->set_custom_data_15(input.custom_data_15); + + return 0; +} +int ToProtoData(kortex_driver::BaseFeedback input, Kinova::Api::BaseCyclic::BaseFeedback *output) +{ + + output->set_active_state_connection_identifier(input.active_state_connection_identifier); + output->set_active_state((Kinova::Api::Common::ArmState)input.active_state); + output->set_arm_voltage(input.arm_voltage); + output->set_arm_current(input.arm_current); + output->set_temperature_cpu(input.temperature_cpu); + output->set_temperature_ambient(input.temperature_ambient); + output->set_imu_acceleration_x(input.imu_acceleration_x); + output->set_imu_acceleration_y(input.imu_acceleration_y); + output->set_imu_acceleration_z(input.imu_acceleration_z); + output->set_imu_angular_velocity_x(input.imu_angular_velocity_x); + output->set_imu_angular_velocity_y(input.imu_angular_velocity_y); + output->set_imu_angular_velocity_z(input.imu_angular_velocity_z); + output->set_tool_pose_x(input.tool_pose_x); + output->set_tool_pose_y(input.tool_pose_y); + output->set_tool_pose_z(input.tool_pose_z); + output->set_tool_pose_theta_x(input.tool_pose_theta_x); + output->set_tool_pose_theta_y(input.tool_pose_theta_y); + output->set_tool_pose_theta_z(input.tool_pose_theta_z); + output->set_tool_twist_linear_x(input.tool_twist_linear_x); + output->set_tool_twist_linear_y(input.tool_twist_linear_y); + output->set_tool_twist_linear_z(input.tool_twist_linear_z); + output->set_tool_twist_angular_x(input.tool_twist_angular_x); + output->set_tool_twist_angular_y(input.tool_twist_angular_y); + output->set_tool_twist_angular_z(input.tool_twist_angular_z); + output->set_tool_external_wrench_force_x(input.tool_external_wrench_force_x); + output->set_tool_external_wrench_force_y(input.tool_external_wrench_force_y); + output->set_tool_external_wrench_force_z(input.tool_external_wrench_force_z); + output->set_tool_external_wrench_torque_x(input.tool_external_wrench_torque_x); + output->set_tool_external_wrench_torque_y(input.tool_external_wrench_torque_y); + output->set_tool_external_wrench_torque_z(input.tool_external_wrench_torque_z); + output->set_fault_bank_a(input.fault_bank_a); + output->set_fault_bank_b(input.fault_bank_b); + output->set_warning_bank_a(input.warning_bank_a); + output->set_warning_bank_b(input.warning_bank_b); + output->set_commanded_tool_pose_x(input.commanded_tool_pose_x); + output->set_commanded_tool_pose_y(input.commanded_tool_pose_y); + output->set_commanded_tool_pose_z(input.commanded_tool_pose_z); + output->set_commanded_tool_pose_theta_x(input.commanded_tool_pose_theta_x); + output->set_commanded_tool_pose_theta_y(input.commanded_tool_pose_theta_y); + output->set_commanded_tool_pose_theta_z(input.commanded_tool_pose_theta_z); + + return 0; +} +int ToProtoData(kortex_driver::BaseCyclic_CustomData input, Kinova::Api::BaseCyclic::CustomData *output) +{ + + output->set_frame_id(input.frame_id); + output->set_custom_data_0(input.custom_data_0); + output->set_custom_data_1(input.custom_data_1); + output->set_custom_data_2(input.custom_data_2); + output->set_custom_data_3(input.custom_data_3); + output->set_custom_data_4(input.custom_data_4); + output->set_custom_data_5(input.custom_data_5); + output->set_custom_data_6(input.custom_data_6); + output->set_custom_data_7(input.custom_data_7); + output->clear_actuators_custom_data(); + for(int i = 0; i < input.actuators_custom_data.size(); i++) + { + ToProtoData(input.actuators_custom_data[i], output->add_actuators_custom_data()); + } + ToProtoData(input.interconnect_custom_data, output->mutable_interconnect_custom_data()); + + return 0; +} +int ToProtoData(kortex_driver::BaseCyclic_Command input, Kinova::Api::BaseCyclic::Command *output) +{ + + output->set_frame_id(input.frame_id); + output->clear_actuators(); + for(int i = 0; i < input.actuators.size(); i++) + { + ToProtoData(input.actuators[i], output->add_actuators()); + } + ToProtoData(input.interconnect, output->mutable_interconnect()); + + return 0; +} +int ToProtoData(kortex_driver::BaseCyclic_Feedback input, Kinova::Api::BaseCyclic::Feedback *output) +{ + + output->set_frame_id(input.frame_id); + ToProtoData(input.base, output->mutable_base()); + output->clear_actuators(); + for(int i = 0; i < input.actuators.size(); i++) + { + ToProtoData(input.actuators[i], output->add_actuators()); + } + ToProtoData(input.interconnect, output->mutable_interconnect()); + + return 0; +} diff --git a/kortex_driver/src/generated/basecyclic_ros_converter.cpp b/kortex_driver/src/generated/basecyclic_ros_converter.cpp new file mode 100644 index 00000000..6399d0b7 --- /dev/null +++ b/kortex_driver/src/generated/basecyclic_ros_converter.cpp @@ -0,0 +1,187 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/basecyclic_ros_converter.h" + +int ToRosData(Kinova::Api::BaseCyclic::ActuatorCommand input, kortex_driver::ActuatorCommand &output) +{ + + output.command_id = input.command_id(); + output.flags = input.flags(); + output.position = input.position(); + output.velocity = input.velocity(); + output.torque_joint = input.torque_joint(); + output.current_motor = input.current_motor(); + + + + return 0; +} +int ToRosData(Kinova::Api::BaseCyclic::ActuatorFeedback input, kortex_driver::ActuatorFeedback &output) +{ + + output.command_id = input.command_id(); + output.status_flags = input.status_flags(); + output.jitter_comm = input.jitter_comm(); + output.position = input.position(); + output.velocity = input.velocity(); + output.torque = input.torque(); + output.current_motor = input.current_motor(); + output.voltage = input.voltage(); + output.temperature_motor = input.temperature_motor(); + output.temperature_core = input.temperature_core(); + output.fault_bank_a = input.fault_bank_a(); + output.fault_bank_b = input.fault_bank_b(); + output.warning_bank_a = input.warning_bank_a(); + output.warning_bank_b = input.warning_bank_b(); + + + + return 0; +} +int ToRosData(Kinova::Api::BaseCyclic::ActuatorCustomData input, kortex_driver::ActuatorCustomData &output) +{ + + output.command_id = input.command_id(); + output.custom_data_0 = input.custom_data_0(); + output.custom_data_1 = input.custom_data_1(); + output.custom_data_2 = input.custom_data_2(); + output.custom_data_3 = input.custom_data_3(); + output.custom_data_4 = input.custom_data_4(); + output.custom_data_5 = input.custom_data_5(); + output.custom_data_6 = input.custom_data_6(); + output.custom_data_7 = input.custom_data_7(); + output.custom_data_8 = input.custom_data_8(); + output.custom_data_9 = input.custom_data_9(); + output.custom_data_10 = input.custom_data_10(); + output.custom_data_11 = input.custom_data_11(); + output.custom_data_12 = input.custom_data_12(); + output.custom_data_13 = input.custom_data_13(); + output.custom_data_14 = input.custom_data_14(); + output.custom_data_15 = input.custom_data_15(); + + + + return 0; +} +int ToRosData(Kinova::Api::BaseCyclic::BaseFeedback input, kortex_driver::BaseFeedback &output) +{ + + output.active_state_connection_identifier = input.active_state_connection_identifier(); + output.active_state = input.active_state(); + output.arm_voltage = input.arm_voltage(); + output.arm_current = input.arm_current(); + output.temperature_cpu = input.temperature_cpu(); + output.temperature_ambient = input.temperature_ambient(); + output.imu_acceleration_x = input.imu_acceleration_x(); + output.imu_acceleration_y = input.imu_acceleration_y(); + output.imu_acceleration_z = input.imu_acceleration_z(); + output.imu_angular_velocity_x = input.imu_angular_velocity_x(); + output.imu_angular_velocity_y = input.imu_angular_velocity_y(); + output.imu_angular_velocity_z = input.imu_angular_velocity_z(); + output.tool_pose_x = input.tool_pose_x(); + output.tool_pose_y = input.tool_pose_y(); + output.tool_pose_z = input.tool_pose_z(); + output.tool_pose_theta_x = input.tool_pose_theta_x(); + output.tool_pose_theta_y = input.tool_pose_theta_y(); + output.tool_pose_theta_z = input.tool_pose_theta_z(); + output.tool_twist_linear_x = input.tool_twist_linear_x(); + output.tool_twist_linear_y = input.tool_twist_linear_y(); + output.tool_twist_linear_z = input.tool_twist_linear_z(); + output.tool_twist_angular_x = input.tool_twist_angular_x(); + output.tool_twist_angular_y = input.tool_twist_angular_y(); + output.tool_twist_angular_z = input.tool_twist_angular_z(); + output.tool_external_wrench_force_x = input.tool_external_wrench_force_x(); + output.tool_external_wrench_force_y = input.tool_external_wrench_force_y(); + output.tool_external_wrench_force_z = input.tool_external_wrench_force_z(); + output.tool_external_wrench_torque_x = input.tool_external_wrench_torque_x(); + output.tool_external_wrench_torque_y = input.tool_external_wrench_torque_y(); + output.tool_external_wrench_torque_z = input.tool_external_wrench_torque_z(); + output.fault_bank_a = input.fault_bank_a(); + output.fault_bank_b = input.fault_bank_b(); + output.warning_bank_a = input.warning_bank_a(); + output.warning_bank_b = input.warning_bank_b(); + output.commanded_tool_pose_x = input.commanded_tool_pose_x(); + output.commanded_tool_pose_y = input.commanded_tool_pose_y(); + output.commanded_tool_pose_z = input.commanded_tool_pose_z(); + output.commanded_tool_pose_theta_x = input.commanded_tool_pose_theta_x(); + output.commanded_tool_pose_theta_y = input.commanded_tool_pose_theta_y(); + output.commanded_tool_pose_theta_z = input.commanded_tool_pose_theta_z(); + + + + return 0; +} +int ToRosData(Kinova::Api::BaseCyclic::CustomData input, kortex_driver::BaseCyclic_CustomData &output) +{ + + output.frame_id = input.frame_id(); + output.custom_data_0 = input.custom_data_0(); + output.custom_data_1 = input.custom_data_1(); + output.custom_data_2 = input.custom_data_2(); + output.custom_data_3 = input.custom_data_3(); + output.custom_data_4 = input.custom_data_4(); + output.custom_data_5 = input.custom_data_5(); + output.custom_data_6 = input.custom_data_6(); + output.custom_data_7 = input.custom_data_7(); + output.actuators_custom_data.clear(); + for(int i = 0; i < input.actuators_custom_data_size(); i++) + { + kortex_driver::ActuatorCustomData temp; + ToRosData(input.actuators_custom_data(i), temp); + output.actuators_custom_data.push_back(temp); + } + ToRosData(input.interconnect_custom_data(), output.interconnect_custom_data); + + + + return 0; +} +int ToRosData(Kinova::Api::BaseCyclic::Command input, kortex_driver::BaseCyclic_Command &output) +{ + + output.frame_id = input.frame_id(); + output.actuators.clear(); + for(int i = 0; i < input.actuators_size(); i++) + { + kortex_driver::ActuatorCommand temp; + ToRosData(input.actuators(i), temp); + output.actuators.push_back(temp); + } + ToRosData(input.interconnect(), output.interconnect); + + + + return 0; +} +int ToRosData(Kinova::Api::BaseCyclic::Feedback input, kortex_driver::BaseCyclic_Feedback &output) +{ + + output.frame_id = input.frame_id(); + ToRosData(input.base(), output.base); + output.actuators.clear(); + for(int i = 0; i < input.actuators_size(); i++) + { + kortex_driver::ActuatorFeedback temp; + ToRosData(input.actuators(i), temp); + output.actuators.push_back(temp); + } + ToRosData(input.interconnect(), output.interconnect); + + + + return 0; +} diff --git a/kortex_driver/src/generated/common_proto_converter.cpp b/kortex_driver/src/generated/common_proto_converter.cpp new file mode 100644 index 00000000..e0211113 --- /dev/null +++ b/kortex_driver/src/generated/common_proto_converter.cpp @@ -0,0 +1,118 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/common_proto_converter.h" + +int ToProtoData(kortex_driver::DeviceHandle input, Kinova::Api::Common::DeviceHandle *output) +{ + + output->set_device_type((Kinova::Api::Common::DeviceTypes)input.device_type); + output->set_device_identifier(input.device_identifier); + output->set_order(input.order); + + return 0; +} +int ToProtoData(kortex_driver::Empty input, Kinova::Api::Common::Empty *output) +{ + + + return 0; +} +int ToProtoData(kortex_driver::NotificationOptions input, Kinova::Api::Common::NotificationOptions *output) +{ + + output->set_type((Kinova::Api::Common::NotificationType)input.type); + output->set_rate_m_sec(input.rate_m_sec); + output->set_threshold_value(input.threshold_value); + + return 0; +} +int ToProtoData(kortex_driver::SafetyHandle input, Kinova::Api::Common::SafetyHandle *output) +{ + + output->set_identifier(input.identifier); + + return 0; +} +int ToProtoData(kortex_driver::NotificationHandle input, Kinova::Api::Common::NotificationHandle *output) +{ + + output->set_identifier(input.identifier); + + return 0; +} +int ToProtoData(kortex_driver::SafetyNotification input, Kinova::Api::Common::SafetyNotification *output) +{ + + ToProtoData(input.safety_handle, output->mutable_safety_handle()); + output->set_value((Kinova::Api::Common::SafetyStatusValue)input.value); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::Timestamp input, Kinova::Api::Common::Timestamp *output) +{ + + output->set_sec(input.sec); + output->set_usec(input.usec); + + return 0; +} +int ToProtoData(kortex_driver::UserProfileHandle input, Kinova::Api::Common::UserProfileHandle *output) +{ + + output->set_identifier(input.identifier); + output->set_permission(input.permission); + + return 0; +} +int ToProtoData(kortex_driver::Connection input, Kinova::Api::Common::Connection *output) +{ + + ToProtoData(input.user_handle, output->mutable_user_handle()); + output->set_connection_information(input.connection_information); + output->set_connection_identifier(input.connection_identifier); + + return 0; +} +int ToProtoData(kortex_driver::UARTConfiguration input, Kinova::Api::Common::UARTConfiguration *output) +{ + + output->set_port_id(input.port_id); + output->set_enabled(input.enabled); + output->set_speed((Kinova::Api::Common::UARTSpeed)input.speed); + output->set_word_length((Kinova::Api::Common::UARTWordLength)input.word_length); + output->set_stop_bits((Kinova::Api::Common::UARTStopBits)input.stop_bits); + output->set_parity((Kinova::Api::Common::UARTParity)input.parity); + + return 0; +} +int ToProtoData(kortex_driver::UARTDeviceIdentification input, Kinova::Api::Common::UARTDeviceIdentification *output) +{ + + output->set_port_id(input.port_id); + + return 0; +} +int ToProtoData(kortex_driver::CountryCode input, Kinova::Api::Common::CountryCode *output) +{ + + output->set_identifier((Kinova::Api::Common::CountryCodeIdentifier)input.identifier); + + return 0; +} diff --git a/kortex_driver/src/generated/common_ros_converter.cpp b/kortex_driver/src/generated/common_ros_converter.cpp new file mode 100644 index 00000000..d9cb8e82 --- /dev/null +++ b/kortex_driver/src/generated/common_ros_converter.cpp @@ -0,0 +1,142 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/common_ros_converter.h" + +int ToRosData(Kinova::Api::Common::DeviceHandle input, kortex_driver::DeviceHandle &output) +{ + + output.device_type = input.device_type(); + output.device_identifier = input.device_identifier(); + output.order = input.order(); + + + + return 0; +} +int ToRosData(Kinova::Api::Common::Empty input, kortex_driver::Empty &output) +{ + + + + + return 0; +} +int ToRosData(Kinova::Api::Common::NotificationOptions input, kortex_driver::NotificationOptions &output) +{ + + output.type = input.type(); + output.rate_m_sec = input.rate_m_sec(); + output.threshold_value = input.threshold_value(); + + + + return 0; +} +int ToRosData(Kinova::Api::Common::SafetyHandle input, kortex_driver::SafetyHandle &output) +{ + + output.identifier = input.identifier(); + + + + return 0; +} +int ToRosData(Kinova::Api::Common::NotificationHandle input, kortex_driver::NotificationHandle &output) +{ + + output.identifier = input.identifier(); + + + + return 0; +} +int ToRosData(Kinova::Api::Common::SafetyNotification input, kortex_driver::SafetyNotification &output) +{ + + ToRosData(input.safety_handle(), output.safety_handle); + output.value = input.value(); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + + + return 0; +} +int ToRosData(Kinova::Api::Common::Timestamp input, kortex_driver::Timestamp &output) +{ + + output.sec = input.sec(); + output.usec = input.usec(); + + + + return 0; +} +int ToRosData(Kinova::Api::Common::UserProfileHandle input, kortex_driver::UserProfileHandle &output) +{ + + output.identifier = input.identifier(); + output.permission = input.permission(); + + + + return 0; +} +int ToRosData(Kinova::Api::Common::Connection input, kortex_driver::Connection &output) +{ + + ToRosData(input.user_handle(), output.user_handle); + output.connection_information = input.connection_information(); + output.connection_identifier = input.connection_identifier(); + + + + return 0; +} +int ToRosData(Kinova::Api::Common::UARTConfiguration input, kortex_driver::UARTConfiguration &output) +{ + + output.port_id = input.port_id(); + output.enabled = input.enabled(); + output.speed = input.speed(); + output.word_length = input.word_length(); + output.stop_bits = input.stop_bits(); + output.parity = input.parity(); + + + + return 0; +} +int ToRosData(Kinova::Api::Common::UARTDeviceIdentification input, kortex_driver::UARTDeviceIdentification &output) +{ + + output.port_id = input.port_id(); + + + + return 0; +} +int ToRosData(Kinova::Api::Common::CountryCode input, kortex_driver::CountryCode &output) +{ + + output.identifier = input.identifier(); + + + + return 0; +} diff --git a/kortex_driver/src/generated/controlconfig_proto_converter.cpp b/kortex_driver/src/generated/controlconfig_proto_converter.cpp new file mode 100644 index 00000000..2e53bcb1 --- /dev/null +++ b/kortex_driver/src/generated/controlconfig_proto_converter.cpp @@ -0,0 +1,82 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/controlconfig_proto_converter.h" + +int ToProtoData(kortex_driver::GravityVector input, Kinova::Api::ControlConfig::GravityVector *output) +{ + + output->set_x(input.x); + output->set_y(input.y); + output->set_z(input.z); + + return 0; +} +int ToProtoData(kortex_driver::ControlConfig_Position input, Kinova::Api::ControlConfig::Position *output) +{ + + output->set_x(input.x); + output->set_y(input.y); + output->set_z(input.z); + + return 0; +} +int ToProtoData(kortex_driver::PayloadInformation input, Kinova::Api::ControlConfig::PayloadInformation *output) +{ + + output->set_payload_mass(input.payload_mass); + ToProtoData(input.payload_mass_center, output->mutable_payload_mass_center()); + + return 0; +} +int ToProtoData(kortex_driver::CartesianTransform input, Kinova::Api::ControlConfig::CartesianTransform *output) +{ + + output->set_x(input.x); + output->set_y(input.y); + output->set_z(input.z); + output->set_theta_x(input.theta_x); + output->set_theta_y(input.theta_y); + output->set_theta_z(input.theta_z); + + return 0; +} +int ToProtoData(kortex_driver::ToolConfiguration input, Kinova::Api::ControlConfig::ToolConfiguration *output) +{ + + ToProtoData(input.tool_transform, output->mutable_tool_transform()); + output->set_tool_mass(input.tool_mass); + ToProtoData(input.tool_mass_center, output->mutable_tool_mass_center()); + + return 0; +} +int ToProtoData(kortex_driver::ControlConfigurationNotification input, Kinova::Api::ControlConfig::ControlConfigurationNotification *output) +{ + + output->set_event((Kinova::Api::ControlConfig::ControlConfigurationEvent)input.event); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::CartesianReferenceFrameInfo input, Kinova::Api::ControlConfig::CartesianReferenceFrameInfo *output) +{ + + output->set_reference_frame((Kinova::Api::Common::CartesianReferenceFrame)input.reference_frame); + + return 0; +} diff --git a/kortex_driver/src/generated/controlconfig_ros_converter.cpp b/kortex_driver/src/generated/controlconfig_ros_converter.cpp new file mode 100644 index 00000000..00d0c776 --- /dev/null +++ b/kortex_driver/src/generated/controlconfig_ros_converter.cpp @@ -0,0 +1,96 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/controlconfig_ros_converter.h" + +int ToRosData(Kinova::Api::ControlConfig::GravityVector input, kortex_driver::GravityVector &output) +{ + + output.x = input.x(); + output.y = input.y(); + output.z = input.z(); + + + + return 0; +} +int ToRosData(Kinova::Api::ControlConfig::Position input, kortex_driver::ControlConfig_Position &output) +{ + + output.x = input.x(); + output.y = input.y(); + output.z = input.z(); + + + + return 0; +} +int ToRosData(Kinova::Api::ControlConfig::PayloadInformation input, kortex_driver::PayloadInformation &output) +{ + + output.payload_mass = input.payload_mass(); + ToRosData(input.payload_mass_center(), output.payload_mass_center); + + + + return 0; +} +int ToRosData(Kinova::Api::ControlConfig::CartesianTransform input, kortex_driver::CartesianTransform &output) +{ + + output.x = input.x(); + output.y = input.y(); + output.z = input.z(); + output.theta_x = input.theta_x(); + output.theta_y = input.theta_y(); + output.theta_z = input.theta_z(); + + + + return 0; +} +int ToRosData(Kinova::Api::ControlConfig::ToolConfiguration input, kortex_driver::ToolConfiguration &output) +{ + + ToRosData(input.tool_transform(), output.tool_transform); + output.tool_mass = input.tool_mass(); + ToRosData(input.tool_mass_center(), output.tool_mass_center); + + + + return 0; +} +int ToRosData(Kinova::Api::ControlConfig::ControlConfigurationNotification input, kortex_driver::ControlConfigurationNotification &output) +{ + + output.event = input.event(); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + + + return 0; +} +int ToRosData(Kinova::Api::ControlConfig::CartesianReferenceFrameInfo input, kortex_driver::CartesianReferenceFrameInfo &output) +{ + + output.reference_frame = input.reference_frame(); + + + + return 0; +} diff --git a/kortex_driver/src/generated/controlconfig_services.cpp b/kortex_driver/src/generated/controlconfig_services.cpp new file mode 100644 index 00000000..1b8d1303 --- /dev/null +++ b/kortex_driver/src/generated/controlconfig_services.cpp @@ -0,0 +1,407 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/common_proto_converter.h" +#include "kortex_driver/generated/common_ros_converter.h" +#include "kortex_driver/generated/actuatorconfig_proto_converter.h" +#include "kortex_driver/generated/actuatorconfig_ros_converter.h" +#include "kortex_driver/generated/actuatorcyclic_proto_converter.h" +#include "kortex_driver/generated/actuatorcyclic_ros_converter.h" +#include "kortex_driver/generated/productconfiguration_proto_converter.h" +#include "kortex_driver/generated/productconfiguration_ros_converter.h" +#include "kortex_driver/generated/base_proto_converter.h" +#include "kortex_driver/generated/base_ros_converter.h" +#include "kortex_driver/generated/grippercyclic_proto_converter.h" +#include "kortex_driver/generated/grippercyclic_ros_converter.h" +#include "kortex_driver/generated/interconnectcyclic_proto_converter.h" +#include "kortex_driver/generated/interconnectcyclic_ros_converter.h" +#include "kortex_driver/generated/basecyclic_proto_converter.h" +#include "kortex_driver/generated/basecyclic_ros_converter.h" +#include "kortex_driver/generated/controlconfig_proto_converter.h" +#include "kortex_driver/generated/controlconfig_ros_converter.h" +#include "kortex_driver/generated/deviceconfig_proto_converter.h" +#include "kortex_driver/generated/deviceconfig_ros_converter.h" +#include "kortex_driver/generated/devicemanager_proto_converter.h" +#include "kortex_driver/generated/devicemanager_ros_converter.h" +#include "kortex_driver/generated/interconnectconfig_proto_converter.h" +#include "kortex_driver/generated/interconnectconfig_ros_converter.h" +#include "kortex_driver/generated/visionconfig_proto_converter.h" +#include "kortex_driver/generated/visionconfig_ros_converter.h" +#include "kortex_driver/generated/controlconfig_services.h" + +ControlConfigServices::ControlConfigServices(ros::NodeHandle& n, Kinova::Api::ControlConfig::ControlConfigClient* controlconfig, uint32_t device_id, uint32_t timeout_ms): + m_n(n), + m_controlconfig(controlconfig), + m_current_device_id(device_id) +{ + m_api_options.timeout_ms = timeout_ms; + + m_pub_Error = m_n.advertise("kortex_error", 1000); + m_pub_ControlConfigurationTopic = m_n.advertise("control_configuration_topic", 1000); + + m_serviceSetDeviceID = n.advertiseService("control_config/set_device_id", &ControlConfigServices::SetDeviceID, this); + m_serviceSetApiOptions = n.advertiseService("control_config/set_api_options", &ControlConfigServices::SetApiOptions, this); + + m_serviceSetGravityVector = m_n.advertiseService("control_config/set_gravity_vector", &ControlConfigServices::SetGravityVector, this); + m_serviceGetGravityVector = m_n.advertiseService("control_config/get_gravity_vector", &ControlConfigServices::GetGravityVector, this); + m_serviceSetPayloadInformation = m_n.advertiseService("control_config/set_payload_information", &ControlConfigServices::SetPayloadInformation, this); + m_serviceGetPayloadInformation = m_n.advertiseService("control_config/get_payload_information", &ControlConfigServices::GetPayloadInformation, this); + m_serviceSetToolConfiguration = m_n.advertiseService("control_config/set_tool_configuration", &ControlConfigServices::SetToolConfiguration, this); + m_serviceGetToolConfiguration = m_n.advertiseService("control_config/get_tool_configuration", &ControlConfigServices::GetToolConfiguration, this); + m_serviceOnNotificationControlConfigurationTopic = m_n.advertiseService("control_config/activate_publishing_of_control_configuration_topic", &ControlConfigServices::OnNotificationControlConfigurationTopic, this); + m_serviceControlConfig_Unsubscribe = m_n.advertiseService("control_config/unsubscribe", &ControlConfigServices::ControlConfig_Unsubscribe, this); + m_serviceSetCartesianReferenceFrame = m_n.advertiseService("control_config/set_cartesian_reference_frame", &ControlConfigServices::SetCartesianReferenceFrame, this); + m_serviceGetCartesianReferenceFrame = m_n.advertiseService("control_config/get_cartesian_reference_frame", &ControlConfigServices::GetCartesianReferenceFrame, this); +} + +bool ControlConfigServices::SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res) +{ + m_current_device_id = req.device_id; + + return true; +} + +bool ControlConfigServices::SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res) +{ + m_api_options.timeout_ms = req.input.timeout_ms; + + return true; +} + + +bool ControlConfigServices::SetGravityVector(kortex_driver::SetGravityVector::Request &req, kortex_driver::SetGravityVector::Response &res) +{ + Kinova::Api::ControlConfig::GravityVector input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_controlconfig->SetGravityVector(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool ControlConfigServices::GetGravityVector(kortex_driver::GetGravityVector::Request &req, kortex_driver::GetGravityVector::Response &res) +{ + Kinova::Api::ControlConfig::GravityVector output; + + kortex_driver::KortexError result_error; + + try + { + output = m_controlconfig->GetGravityVector(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool ControlConfigServices::SetPayloadInformation(kortex_driver::SetPayloadInformation::Request &req, kortex_driver::SetPayloadInformation::Response &res) +{ + Kinova::Api::ControlConfig::PayloadInformation input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_controlconfig->SetPayloadInformation(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool ControlConfigServices::GetPayloadInformation(kortex_driver::GetPayloadInformation::Request &req, kortex_driver::GetPayloadInformation::Response &res) +{ + Kinova::Api::ControlConfig::PayloadInformation output; + + kortex_driver::KortexError result_error; + + try + { + output = m_controlconfig->GetPayloadInformation(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool ControlConfigServices::SetToolConfiguration(kortex_driver::SetToolConfiguration::Request &req, kortex_driver::SetToolConfiguration::Response &res) +{ + Kinova::Api::ControlConfig::ToolConfiguration input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_controlconfig->SetToolConfiguration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool ControlConfigServices::GetToolConfiguration(kortex_driver::GetToolConfiguration::Request &req, kortex_driver::GetToolConfiguration::Response &res) +{ + Kinova::Api::ControlConfig::ToolConfiguration output; + + kortex_driver::KortexError result_error; + + try + { + output = m_controlconfig->GetToolConfiguration(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool ControlConfigServices::OnNotificationControlConfigurationTopic(kortex_driver::OnNotificationControlConfigurationTopic::Request &req, kortex_driver::OnNotificationControlConfigurationTopic::Response &res) +{ + Kinova::Api::Common::NotificationOptions input; + ToProtoData(req.input, &input); + Kinova::Api::Common::NotificationHandle output; + + kortex_driver::KortexError result_error; + + try + { + std::function< void (Kinova::Api::ControlConfig::ControlConfigurationNotification) > callback = std::bind(&ControlConfigServices::cb_ControlConfigurationTopic, this, std::placeholders::_1); + output = m_controlconfig->OnNotificationControlConfigurationTopic(callback, input, m_current_device_id); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} +void ControlConfigServices::cb_ControlConfigurationTopic(Kinova::Api::ControlConfig::ControlConfigurationNotification notif) +{ + kortex_driver::ControlConfigurationNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_ControlConfigurationTopic.publish(ros_msg); +} + +bool ControlConfigServices::ControlConfig_Unsubscribe(kortex_driver::ControlConfig_Unsubscribe::Request &req, kortex_driver::ControlConfig_Unsubscribe::Response &res) +{ + Kinova::Api::Common::NotificationHandle input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_controlconfig->Unsubscribe(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool ControlConfigServices::SetCartesianReferenceFrame(kortex_driver::SetCartesianReferenceFrame::Request &req, kortex_driver::SetCartesianReferenceFrame::Response &res) +{ + Kinova::Api::ControlConfig::CartesianReferenceFrameInfo input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_controlconfig->SetCartesianReferenceFrame(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool ControlConfigServices::GetCartesianReferenceFrame(kortex_driver::GetCartesianReferenceFrame::Request &req, kortex_driver::GetCartesianReferenceFrame::Response &res) +{ + Kinova::Api::ControlConfig::CartesianReferenceFrameInfo output; + + kortex_driver::KortexError result_error; + + try + { + output = m_controlconfig->GetCartesianReferenceFrame(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} diff --git a/kortex_driver/src/generated/deviceconfig_proto_converter.cpp b/kortex_driver/src/generated/deviceconfig_proto_converter.cpp new file mode 100644 index 00000000..636e6201 --- /dev/null +++ b/kortex_driver/src/generated/deviceconfig_proto_converter.cpp @@ -0,0 +1,239 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/deviceconfig_proto_converter.h" + +int ToProtoData(kortex_driver::DeviceType input, Kinova::Api::DeviceConfig::DeviceType *output) +{ + + output->set_device_type((Kinova::Api::Common::DeviceTypes)input.device_type); + + return 0; +} +int ToProtoData(kortex_driver::RunMode input, Kinova::Api::DeviceConfig::RunMode *output) +{ + + output->set_run_mode((Kinova::Api::DeviceConfig::RunModes)input.run_mode); + + return 0; +} +int ToProtoData(kortex_driver::FirmwareVersion input, Kinova::Api::DeviceConfig::FirmwareVersion *output) +{ + + output->set_firmware_version(input.firmware_version); + + return 0; +} +int ToProtoData(kortex_driver::BootloaderVersion input, Kinova::Api::DeviceConfig::BootloaderVersion *output) +{ + + output->set_bootloader_version(input.bootloader_version); + + return 0; +} +int ToProtoData(kortex_driver::ModelNumber input, Kinova::Api::DeviceConfig::ModelNumber *output) +{ + + output->set_model_number(input.model_number); + + return 0; +} +int ToProtoData(kortex_driver::PartNumber input, Kinova::Api::DeviceConfig::PartNumber *output) +{ + + output->set_part_number(input.part_number); + + return 0; +} +int ToProtoData(kortex_driver::SerialNumber input, Kinova::Api::DeviceConfig::SerialNumber *output) +{ + + output->set_serial_number(input.serial_number); + + return 0; +} +int ToProtoData(kortex_driver::MACAddress input, Kinova::Api::DeviceConfig::MACAddress *output) +{ + + output->set_mac_address(std::string(input.mac_address.begin(), input.mac_address.end())); + + return 0; +} +int ToProtoData(kortex_driver::IPv4Settings input, Kinova::Api::DeviceConfig::IPv4Settings *output) +{ + + output->set_ipv4_address(input.ipv4_address); + output->set_ipv4_subnet_mask(input.ipv4_subnet_mask); + output->set_ipv4_default_gateway(input.ipv4_default_gateway); + + return 0; +} +int ToProtoData(kortex_driver::PartNumberRevision input, Kinova::Api::DeviceConfig::PartNumberRevision *output) +{ + + output->set_part_number_revision(input.part_number_revision); + + return 0; +} +int ToProtoData(kortex_driver::PowerOnSelfTestResult input, Kinova::Api::DeviceConfig::PowerOnSelfTestResult *output) +{ + + output->set_power_on_self_test_result(input.power_on_self_test_result); + + return 0; +} +int ToProtoData(kortex_driver::RebootRqst input, Kinova::Api::DeviceConfig::RebootRqst *output) +{ + + output->set_delay(input.delay); + + return 0; +} +int ToProtoData(kortex_driver::SafetyInformation input, Kinova::Api::DeviceConfig::SafetyInformation *output) +{ + + ToProtoData(input.handle, output->mutable_handle()); + output->set_can_change_safety_state(input.can_change_safety_state); + output->set_has_warning_threshold(input.has_warning_threshold); + output->set_has_error_threshold(input.has_error_threshold); + output->set_limit_type((Kinova::Api::DeviceConfig::SafetyLimitType)input.limit_type); + output->set_default_warning_threshold(input.default_warning_threshold); + output->set_default_error_threshold(input.default_error_threshold); + output->set_upper_hard_limit(input.upper_hard_limit); + output->set_lower_hard_limit(input.lower_hard_limit); + output->set_status((Kinova::Api::Common::SafetyStatusValue)input.status); + output->set_unit((Kinova::Api::Common::Unit)input.unit); + + return 0; +} +int ToProtoData(kortex_driver::SafetyInformationList input, Kinova::Api::DeviceConfig::SafetyInformationList *output) +{ + + output->clear_information(); + for(int i = 0; i < input.information.size(); i++) + { + ToProtoData(input.information[i], output->add_information()); + } + + return 0; +} +int ToProtoData(kortex_driver::SafetyEnable input, Kinova::Api::DeviceConfig::SafetyEnable *output) +{ + + ToProtoData(input.handle, output->mutable_handle()); + output->set_enable(input.enable); + + return 0; +} +int ToProtoData(kortex_driver::SafetyThreshold input, Kinova::Api::DeviceConfig::SafetyThreshold *output) +{ + + ToProtoData(input.handle, output->mutable_handle()); + output->set_value(input.value); + + return 0; +} +int ToProtoData(kortex_driver::SafetyConfiguration input, Kinova::Api::DeviceConfig::SafetyConfiguration *output) +{ + + ToProtoData(input.handle, output->mutable_handle()); + output->set_error_threshold(input.error_threshold); + output->set_warning_threshold(input.warning_threshold); + ToProtoData(input.enable, output->mutable_enable()); + + return 0; +} +int ToProtoData(kortex_driver::SafetyConfigurationList input, Kinova::Api::DeviceConfig::SafetyConfigurationList *output) +{ + + output->clear_configuration(); + for(int i = 0; i < input.configuration.size(); i++) + { + ToProtoData(input.configuration[i], output->add_configuration()); + } + + return 0; +} +int ToProtoData(kortex_driver::SafetyStatus input, Kinova::Api::DeviceConfig::SafetyStatus *output) +{ + + output->set_value((Kinova::Api::Common::SafetyStatusValue)input.value); + + return 0; +} +int ToProtoData(kortex_driver::CalibrationParameter input, Kinova::Api::DeviceConfig::CalibrationParameter *output) +{ + + output->set_calibration_parameter_identifier(input.calibration_parameter_identifier); + if(input.oneof_value.signedIntValue.size() > 0) + { + output->set_signedintvalue(input.oneof_value.signedIntValue[0]); + } + if(input.oneof_value.unsignedIntValue.size() > 0) + { + output->set_unsignedintvalue(input.oneof_value.unsignedIntValue[0]); + } + if(input.oneof_value.floatValue.size() > 0) + { + output->set_floatvalue(input.oneof_value.floatValue[0]); + } + + return 0; +} +int ToProtoData(kortex_driver::Calibration input, Kinova::Api::DeviceConfig::Calibration *output) +{ + + output->set_calibration_item((Kinova::Api::DeviceConfig::CalibrationItem)input.calibration_item); + output->clear_calibration_parameter(); + for(int i = 0; i < input.calibration_parameter.size(); i++) + { + ToProtoData(input.calibration_parameter[i], output->add_calibration_parameter()); + } + + return 0; +} +int ToProtoData(kortex_driver::CalibrationElement input, Kinova::Api::DeviceConfig::CalibrationElement *output) +{ + + output->set_calibration_item((Kinova::Api::DeviceConfig::CalibrationItem)input.calibration_item); + + return 0; +} +int ToProtoData(kortex_driver::CalibrationResult input, Kinova::Api::DeviceConfig::CalibrationResult *output) +{ + + output->set_calibration_status((Kinova::Api::DeviceConfig::CalibrationStatus)input.calibration_status); + output->set_calibration_details(input.calibration_details); + + return 0; +} +int ToProtoData(kortex_driver::DeviceConfig_CapSenseConfig input, Kinova::Api::DeviceConfig::CapSenseConfig *output) +{ + + output->set_mode((Kinova::Api::DeviceConfig::CapSenseMode)input.mode); + output->set_threshold_a(input.threshold_a); + output->set_threshold_b(input.threshold_b); + + return 0; +} +int ToProtoData(kortex_driver::CapSenseRegister input, Kinova::Api::DeviceConfig::CapSenseRegister *output) +{ + + output->set_address(input.address); + output->set_value(input.value); + + return 0; +} diff --git a/kortex_driver/src/generated/deviceconfig_ros_converter.cpp b/kortex_driver/src/generated/deviceconfig_ros_converter.cpp new file mode 100644 index 00000000..12825da7 --- /dev/null +++ b/kortex_driver/src/generated/deviceconfig_ros_converter.cpp @@ -0,0 +1,301 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/deviceconfig_ros_converter.h" + +int ToRosData(Kinova::Api::DeviceConfig::DeviceType input, kortex_driver::DeviceType &output) +{ + + output.device_type = input.device_type(); + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::RunMode input, kortex_driver::RunMode &output) +{ + + output.run_mode = input.run_mode(); + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::FirmwareVersion input, kortex_driver::FirmwareVersion &output) +{ + + output.firmware_version = input.firmware_version(); + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::BootloaderVersion input, kortex_driver::BootloaderVersion &output) +{ + + output.bootloader_version = input.bootloader_version(); + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::ModelNumber input, kortex_driver::ModelNumber &output) +{ + + output.model_number = input.model_number(); + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::PartNumber input, kortex_driver::PartNumber &output) +{ + + output.part_number = input.part_number(); + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::SerialNumber input, kortex_driver::SerialNumber &output) +{ + + output.serial_number = input.serial_number(); + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::MACAddress input, kortex_driver::MACAddress &output) +{ + + output.mac_address = std::vector(input.mac_address().begin(), input.mac_address().end()); + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::IPv4Settings input, kortex_driver::IPv4Settings &output) +{ + + output.ipv4_address = input.ipv4_address(); + output.ipv4_subnet_mask = input.ipv4_subnet_mask(); + output.ipv4_default_gateway = input.ipv4_default_gateway(); + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::PartNumberRevision input, kortex_driver::PartNumberRevision &output) +{ + + output.part_number_revision = input.part_number_revision(); + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::PowerOnSelfTestResult input, kortex_driver::PowerOnSelfTestResult &output) +{ + + output.power_on_self_test_result = input.power_on_self_test_result(); + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::RebootRqst input, kortex_driver::RebootRqst &output) +{ + + output.delay = input.delay(); + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::SafetyInformation input, kortex_driver::SafetyInformation &output) +{ + + ToRosData(input.handle(), output.handle); + output.can_change_safety_state = input.can_change_safety_state(); + output.has_warning_threshold = input.has_warning_threshold(); + output.has_error_threshold = input.has_error_threshold(); + output.limit_type = input.limit_type(); + output.default_warning_threshold = input.default_warning_threshold(); + output.default_error_threshold = input.default_error_threshold(); + output.upper_hard_limit = input.upper_hard_limit(); + output.lower_hard_limit = input.lower_hard_limit(); + output.status = input.status(); + output.unit = input.unit(); + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::SafetyInformationList input, kortex_driver::SafetyInformationList &output) +{ + + output.information.clear(); + for(int i = 0; i < input.information_size(); i++) + { + kortex_driver::SafetyInformation temp; + ToRosData(input.information(i), temp); + output.information.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::SafetyEnable input, kortex_driver::SafetyEnable &output) +{ + + ToRosData(input.handle(), output.handle); + output.enable = input.enable(); + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::SafetyThreshold input, kortex_driver::SafetyThreshold &output) +{ + + ToRosData(input.handle(), output.handle); + output.value = input.value(); + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::SafetyConfiguration input, kortex_driver::SafetyConfiguration &output) +{ + + ToRosData(input.handle(), output.handle); + output.error_threshold = input.error_threshold(); + output.warning_threshold = input.warning_threshold(); + ToRosData(input.enable(), output.enable); + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::SafetyConfigurationList input, kortex_driver::SafetyConfigurationList &output) +{ + + output.configuration.clear(); + for(int i = 0; i < input.configuration_size(); i++) + { + kortex_driver::SafetyConfiguration temp; + ToRosData(input.configuration(i), temp); + output.configuration.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::SafetyStatus input, kortex_driver::SafetyStatus &output) +{ + + output.value = input.value(); + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::CalibrationParameter input, kortex_driver::CalibrationParameter &output) +{ + + output.calibration_parameter_identifier = input.calibration_parameter_identifier(); + + + auto oneof_type = input.value_case(); + switch(oneof_type) + { + + case Kinova::Api::DeviceConfig::CalibrationParameter::kSignedIntValue: + { + break; + } + + case Kinova::Api::DeviceConfig::CalibrationParameter::kUnsignedIntValue: + { + break; + } + + case Kinova::Api::DeviceConfig::CalibrationParameter::kFloatValue: + { + break; + }} + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::Calibration input, kortex_driver::Calibration &output) +{ + + output.calibration_item = input.calibration_item(); + output.calibration_parameter.clear(); + for(int i = 0; i < input.calibration_parameter_size(); i++) + { + kortex_driver::CalibrationParameter temp; + ToRosData(input.calibration_parameter(i), temp); + output.calibration_parameter.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::CalibrationElement input, kortex_driver::CalibrationElement &output) +{ + + output.calibration_item = input.calibration_item(); + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::CalibrationResult input, kortex_driver::CalibrationResult &output) +{ + + output.calibration_status = input.calibration_status(); + output.calibration_details = input.calibration_details(); + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::CapSenseConfig input, kortex_driver::DeviceConfig_CapSenseConfig &output) +{ + + output.mode = input.mode(); + output.threshold_a = input.threshold_a(); + output.threshold_b = input.threshold_b(); + + + + return 0; +} +int ToRosData(Kinova::Api::DeviceConfig::CapSenseRegister input, kortex_driver::CapSenseRegister &output) +{ + + output.address = input.address(); + output.value = input.value(); + + + + return 0; +} diff --git a/kortex_driver/src/generated/deviceconfig_services.cpp b/kortex_driver/src/generated/deviceconfig_services.cpp new file mode 100644 index 00000000..6d458637 --- /dev/null +++ b/kortex_driver/src/generated/deviceconfig_services.cpp @@ -0,0 +1,1134 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/common_proto_converter.h" +#include "kortex_driver/generated/common_ros_converter.h" +#include "kortex_driver/generated/actuatorconfig_proto_converter.h" +#include "kortex_driver/generated/actuatorconfig_ros_converter.h" +#include "kortex_driver/generated/actuatorcyclic_proto_converter.h" +#include "kortex_driver/generated/actuatorcyclic_ros_converter.h" +#include "kortex_driver/generated/productconfiguration_proto_converter.h" +#include "kortex_driver/generated/productconfiguration_ros_converter.h" +#include "kortex_driver/generated/base_proto_converter.h" +#include "kortex_driver/generated/base_ros_converter.h" +#include "kortex_driver/generated/grippercyclic_proto_converter.h" +#include "kortex_driver/generated/grippercyclic_ros_converter.h" +#include "kortex_driver/generated/interconnectcyclic_proto_converter.h" +#include "kortex_driver/generated/interconnectcyclic_ros_converter.h" +#include "kortex_driver/generated/basecyclic_proto_converter.h" +#include "kortex_driver/generated/basecyclic_ros_converter.h" +#include "kortex_driver/generated/controlconfig_proto_converter.h" +#include "kortex_driver/generated/controlconfig_ros_converter.h" +#include "kortex_driver/generated/deviceconfig_proto_converter.h" +#include "kortex_driver/generated/deviceconfig_ros_converter.h" +#include "kortex_driver/generated/devicemanager_proto_converter.h" +#include "kortex_driver/generated/devicemanager_ros_converter.h" +#include "kortex_driver/generated/interconnectconfig_proto_converter.h" +#include "kortex_driver/generated/interconnectconfig_ros_converter.h" +#include "kortex_driver/generated/visionconfig_proto_converter.h" +#include "kortex_driver/generated/visionconfig_ros_converter.h" +#include "kortex_driver/generated/deviceconfig_services.h" + +DeviceConfigServices::DeviceConfigServices(ros::NodeHandle& n, Kinova::Api::DeviceConfig::DeviceConfigClient* deviceconfig, uint32_t device_id, uint32_t timeout_ms): + m_n(n), + m_deviceconfig(deviceconfig), + m_current_device_id(device_id) +{ + m_api_options.timeout_ms = timeout_ms; + + m_pub_Error = m_n.advertise("kortex_error", 1000); + m_pub_SafetyTopic = m_n.advertise("safety_topic", 1000); + + m_serviceSetDeviceID = n.advertiseService("device_config/set_device_id", &DeviceConfigServices::SetDeviceID, this); + m_serviceSetApiOptions = n.advertiseService("device_config/set_api_options", &DeviceConfigServices::SetApiOptions, this); + + m_serviceGetRunMode = m_n.advertiseService("device_config/get_run_mode", &DeviceConfigServices::GetRunMode, this); + m_serviceSetRunMode = m_n.advertiseService("device_config/set_run_mode", &DeviceConfigServices::SetRunMode, this); + m_serviceGetDeviceType = m_n.advertiseService("device_config/get_device_type", &DeviceConfigServices::GetDeviceType, this); + m_serviceGetFirmwareVersion = m_n.advertiseService("device_config/get_firmware_version", &DeviceConfigServices::GetFirmwareVersion, this); + m_serviceGetBootloaderVersion = m_n.advertiseService("device_config/get_bootloader_version", &DeviceConfigServices::GetBootloaderVersion, this); + m_serviceGetModelNumber = m_n.advertiseService("device_config/get_model_number", &DeviceConfigServices::GetModelNumber, this); + m_serviceGetPartNumber = m_n.advertiseService("device_config/get_part_number", &DeviceConfigServices::GetPartNumber, this); + m_serviceGetSerialNumber = m_n.advertiseService("device_config/get_serial_number", &DeviceConfigServices::GetSerialNumber, this); + m_serviceGetMACAddress = m_n.advertiseService("device_config/get_m_a_c_address", &DeviceConfigServices::GetMACAddress, this); + m_serviceGetIPv4Settings = m_n.advertiseService("device_config/get_i_pv4_settings", &DeviceConfigServices::GetIPv4Settings, this); + m_serviceSetIPv4Settings = m_n.advertiseService("device_config/set_i_pv4_settings", &DeviceConfigServices::SetIPv4Settings, this); + m_serviceGetPartNumberRevision = m_n.advertiseService("device_config/get_part_number_revision", &DeviceConfigServices::GetPartNumberRevision, this); + m_serviceRebootRequest = m_n.advertiseService("device_config/reboot_request", &DeviceConfigServices::RebootRequest, this); + m_serviceSetSafetyEnable = m_n.advertiseService("device_config/set_safety_enable", &DeviceConfigServices::SetSafetyEnable, this); + m_serviceSetSafetyErrorThreshold = m_n.advertiseService("device_config/set_safety_error_threshold", &DeviceConfigServices::SetSafetyErrorThreshold, this); + m_serviceSetSafetyWarningThreshold = m_n.advertiseService("device_config/set_safety_warning_threshold", &DeviceConfigServices::SetSafetyWarningThreshold, this); + m_serviceSetSafetyConfiguration = m_n.advertiseService("device_config/set_safety_configuration", &DeviceConfigServices::SetSafetyConfiguration, this); + m_serviceGetSafetyConfiguration = m_n.advertiseService("device_config/get_safety_configuration", &DeviceConfigServices::GetSafetyConfiguration, this); + m_serviceGetSafetyInformation = m_n.advertiseService("device_config/get_safety_information", &DeviceConfigServices::GetSafetyInformation, this); + m_serviceGetSafetyEnable = m_n.advertiseService("device_config/get_safety_enable", &DeviceConfigServices::GetSafetyEnable, this); + m_serviceGetSafetyStatus = m_n.advertiseService("device_config/get_safety_status", &DeviceConfigServices::GetSafetyStatus, this); + m_serviceClearAllSafetyStatus = m_n.advertiseService("device_config/clear_all_safety_status", &DeviceConfigServices::ClearAllSafetyStatus, this); + m_serviceClearSafetyStatus = m_n.advertiseService("device_config/clear_safety_status", &DeviceConfigServices::ClearSafetyStatus, this); + m_serviceGetAllSafetyConfiguration = m_n.advertiseService("device_config/get_all_safety_configuration", &DeviceConfigServices::GetAllSafetyConfiguration, this); + m_serviceGetAllSafetyInformation = m_n.advertiseService("device_config/get_all_safety_information", &DeviceConfigServices::GetAllSafetyInformation, this); + m_serviceResetSafetyDefaults = m_n.advertiseService("device_config/reset_safety_defaults", &DeviceConfigServices::ResetSafetyDefaults, this); + m_serviceOnNotificationSafetyTopic = m_n.advertiseService("device_config/activate_publishing_of_safety_topic", &DeviceConfigServices::OnNotificationSafetyTopic, this); + m_serviceExecuteCalibration = m_n.advertiseService("device_config/execute_calibration", &DeviceConfigServices::ExecuteCalibration, this); + m_serviceGetCalibrationResult = m_n.advertiseService("device_config/get_calibration_result", &DeviceConfigServices::GetCalibrationResult, this); + m_serviceStopCalibration = m_n.advertiseService("device_config/stop_calibration", &DeviceConfigServices::StopCalibration, this); + m_serviceDeviceConfig_SetCapSenseConfig = m_n.advertiseService("device_config/set_cap_sense_config", &DeviceConfigServices::DeviceConfig_SetCapSenseConfig, this); + m_serviceDeviceConfig_GetCapSenseConfig = m_n.advertiseService("device_config/get_cap_sense_config", &DeviceConfigServices::DeviceConfig_GetCapSenseConfig, this); +} + +bool DeviceConfigServices::SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res) +{ + m_current_device_id = req.device_id; + + return true; +} + +bool DeviceConfigServices::SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res) +{ + m_api_options.timeout_ms = req.input.timeout_ms; + + return true; +} + + +bool DeviceConfigServices::GetRunMode(kortex_driver::GetRunMode::Request &req, kortex_driver::GetRunMode::Response &res) +{ + Kinova::Api::DeviceConfig::RunMode output; + + kortex_driver::KortexError result_error; + + try + { + output = m_deviceconfig->GetRunMode(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool DeviceConfigServices::SetRunMode(kortex_driver::SetRunMode::Request &req, kortex_driver::SetRunMode::Response &res) +{ + Kinova::Api::DeviceConfig::RunMode input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_deviceconfig->SetRunMode(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool DeviceConfigServices::GetDeviceType(kortex_driver::GetDeviceType::Request &req, kortex_driver::GetDeviceType::Response &res) +{ + Kinova::Api::DeviceConfig::DeviceType output; + + kortex_driver::KortexError result_error; + + try + { + output = m_deviceconfig->GetDeviceType(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool DeviceConfigServices::GetFirmwareVersion(kortex_driver::GetFirmwareVersion::Request &req, kortex_driver::GetFirmwareVersion::Response &res) +{ + Kinova::Api::DeviceConfig::FirmwareVersion output; + + kortex_driver::KortexError result_error; + + try + { + output = m_deviceconfig->GetFirmwareVersion(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool DeviceConfigServices::GetBootloaderVersion(kortex_driver::GetBootloaderVersion::Request &req, kortex_driver::GetBootloaderVersion::Response &res) +{ + Kinova::Api::DeviceConfig::BootloaderVersion output; + + kortex_driver::KortexError result_error; + + try + { + output = m_deviceconfig->GetBootloaderVersion(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool DeviceConfigServices::GetModelNumber(kortex_driver::GetModelNumber::Request &req, kortex_driver::GetModelNumber::Response &res) +{ + Kinova::Api::DeviceConfig::ModelNumber output; + + kortex_driver::KortexError result_error; + + try + { + output = m_deviceconfig->GetModelNumber(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool DeviceConfigServices::GetPartNumber(kortex_driver::GetPartNumber::Request &req, kortex_driver::GetPartNumber::Response &res) +{ + Kinova::Api::DeviceConfig::PartNumber output; + + kortex_driver::KortexError result_error; + + try + { + output = m_deviceconfig->GetPartNumber(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool DeviceConfigServices::GetSerialNumber(kortex_driver::GetSerialNumber::Request &req, kortex_driver::GetSerialNumber::Response &res) +{ + Kinova::Api::DeviceConfig::SerialNumber output; + + kortex_driver::KortexError result_error; + + try + { + output = m_deviceconfig->GetSerialNumber(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool DeviceConfigServices::GetMACAddress(kortex_driver::GetMACAddress::Request &req, kortex_driver::GetMACAddress::Response &res) +{ + Kinova::Api::DeviceConfig::MACAddress output; + + kortex_driver::KortexError result_error; + + try + { + output = m_deviceconfig->GetMACAddress(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool DeviceConfigServices::GetIPv4Settings(kortex_driver::GetIPv4Settings::Request &req, kortex_driver::GetIPv4Settings::Response &res) +{ + Kinova::Api::DeviceConfig::IPv4Settings output; + + kortex_driver::KortexError result_error; + + try + { + output = m_deviceconfig->GetIPv4Settings(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool DeviceConfigServices::SetIPv4Settings(kortex_driver::SetIPv4Settings::Request &req, kortex_driver::SetIPv4Settings::Response &res) +{ + Kinova::Api::DeviceConfig::IPv4Settings input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_deviceconfig->SetIPv4Settings(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool DeviceConfigServices::GetPartNumberRevision(kortex_driver::GetPartNumberRevision::Request &req, kortex_driver::GetPartNumberRevision::Response &res) +{ + Kinova::Api::DeviceConfig::PartNumberRevision output; + + kortex_driver::KortexError result_error; + + try + { + output = m_deviceconfig->GetPartNumberRevision(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool DeviceConfigServices::RebootRequest(kortex_driver::RebootRequest::Request &req, kortex_driver::RebootRequest::Response &res) +{ + Kinova::Api::DeviceConfig::RebootRqst input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_deviceconfig->RebootRequest(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool DeviceConfigServices::SetSafetyEnable(kortex_driver::SetSafetyEnable::Request &req, kortex_driver::SetSafetyEnable::Response &res) +{ + Kinova::Api::DeviceConfig::SafetyEnable input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_deviceconfig->SetSafetyEnable(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool DeviceConfigServices::SetSafetyErrorThreshold(kortex_driver::SetSafetyErrorThreshold::Request &req, kortex_driver::SetSafetyErrorThreshold::Response &res) +{ + Kinova::Api::DeviceConfig::SafetyThreshold input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_deviceconfig->SetSafetyErrorThreshold(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool DeviceConfigServices::SetSafetyWarningThreshold(kortex_driver::SetSafetyWarningThreshold::Request &req, kortex_driver::SetSafetyWarningThreshold::Response &res) +{ + Kinova::Api::DeviceConfig::SafetyThreshold input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_deviceconfig->SetSafetyWarningThreshold(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool DeviceConfigServices::SetSafetyConfiguration(kortex_driver::SetSafetyConfiguration::Request &req, kortex_driver::SetSafetyConfiguration::Response &res) +{ + Kinova::Api::DeviceConfig::SafetyConfiguration input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_deviceconfig->SetSafetyConfiguration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool DeviceConfigServices::GetSafetyConfiguration(kortex_driver::GetSafetyConfiguration::Request &req, kortex_driver::GetSafetyConfiguration::Response &res) +{ + Kinova::Api::Common::SafetyHandle input; + ToProtoData(req.input, &input); + Kinova::Api::DeviceConfig::SafetyConfiguration output; + + kortex_driver::KortexError result_error; + + try + { + output = m_deviceconfig->GetSafetyConfiguration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool DeviceConfigServices::GetSafetyInformation(kortex_driver::GetSafetyInformation::Request &req, kortex_driver::GetSafetyInformation::Response &res) +{ + Kinova::Api::Common::SafetyHandle input; + ToProtoData(req.input, &input); + Kinova::Api::DeviceConfig::SafetyInformation output; + + kortex_driver::KortexError result_error; + + try + { + output = m_deviceconfig->GetSafetyInformation(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool DeviceConfigServices::GetSafetyEnable(kortex_driver::GetSafetyEnable::Request &req, kortex_driver::GetSafetyEnable::Response &res) +{ + Kinova::Api::Common::SafetyHandle input; + ToProtoData(req.input, &input); + Kinova::Api::DeviceConfig::SafetyEnable output; + + kortex_driver::KortexError result_error; + + try + { + output = m_deviceconfig->GetSafetyEnable(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool DeviceConfigServices::GetSafetyStatus(kortex_driver::GetSafetyStatus::Request &req, kortex_driver::GetSafetyStatus::Response &res) +{ + Kinova::Api::Common::SafetyHandle input; + ToProtoData(req.input, &input); + Kinova::Api::DeviceConfig::SafetyStatus output; + + kortex_driver::KortexError result_error; + + try + { + output = m_deviceconfig->GetSafetyStatus(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool DeviceConfigServices::ClearAllSafetyStatus(kortex_driver::ClearAllSafetyStatus::Request &req, kortex_driver::ClearAllSafetyStatus::Response &res) +{ + kortex_driver::KortexError result_error; + + try + { + m_deviceconfig->ClearAllSafetyStatus(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool DeviceConfigServices::ClearSafetyStatus(kortex_driver::ClearSafetyStatus::Request &req, kortex_driver::ClearSafetyStatus::Response &res) +{ + Kinova::Api::Common::SafetyHandle input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_deviceconfig->ClearSafetyStatus(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool DeviceConfigServices::GetAllSafetyConfiguration(kortex_driver::GetAllSafetyConfiguration::Request &req, kortex_driver::GetAllSafetyConfiguration::Response &res) +{ + Kinova::Api::DeviceConfig::SafetyConfigurationList output; + + kortex_driver::KortexError result_error; + + try + { + output = m_deviceconfig->GetAllSafetyConfiguration(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool DeviceConfigServices::GetAllSafetyInformation(kortex_driver::GetAllSafetyInformation::Request &req, kortex_driver::GetAllSafetyInformation::Response &res) +{ + Kinova::Api::DeviceConfig::SafetyInformationList output; + + kortex_driver::KortexError result_error; + + try + { + output = m_deviceconfig->GetAllSafetyInformation(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool DeviceConfigServices::ResetSafetyDefaults(kortex_driver::ResetSafetyDefaults::Request &req, kortex_driver::ResetSafetyDefaults::Response &res) +{ + kortex_driver::KortexError result_error; + + try + { + m_deviceconfig->ResetSafetyDefaults(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool DeviceConfigServices::OnNotificationSafetyTopic(kortex_driver::OnNotificationSafetyTopic::Request &req, kortex_driver::OnNotificationSafetyTopic::Response &res) +{ + Kinova::Api::Common::NotificationOptions input; + ToProtoData(req.input, &input); + Kinova::Api::Common::NotificationHandle output; + + kortex_driver::KortexError result_error; + + try + { + std::function< void (Kinova::Api::Common::SafetyNotification) > callback = std::bind(&DeviceConfigServices::cb_SafetyTopic, this, std::placeholders::_1); + output = m_deviceconfig->OnNotificationSafetyTopic(callback, input, m_current_device_id); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} +void DeviceConfigServices::cb_SafetyTopic(Kinova::Api::Common::SafetyNotification notif) +{ + kortex_driver::SafetyNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_SafetyTopic.publish(ros_msg); +} + +bool DeviceConfigServices::ExecuteCalibration(kortex_driver::ExecuteCalibration::Request &req, kortex_driver::ExecuteCalibration::Response &res) +{ + Kinova::Api::DeviceConfig::Calibration input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_deviceconfig->ExecuteCalibration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool DeviceConfigServices::GetCalibrationResult(kortex_driver::GetCalibrationResult::Request &req, kortex_driver::GetCalibrationResult::Response &res) +{ + Kinova::Api::DeviceConfig::CalibrationElement input; + ToProtoData(req.input, &input); + Kinova::Api::DeviceConfig::CalibrationResult output; + + kortex_driver::KortexError result_error; + + try + { + output = m_deviceconfig->GetCalibrationResult(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool DeviceConfigServices::StopCalibration(kortex_driver::StopCalibration::Request &req, kortex_driver::StopCalibration::Response &res) +{ + Kinova::Api::DeviceConfig::Calibration input; + ToProtoData(req.input, &input); + Kinova::Api::DeviceConfig::CalibrationResult output; + + kortex_driver::KortexError result_error; + + try + { + output = m_deviceconfig->StopCalibration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool DeviceConfigServices::DeviceConfig_SetCapSenseConfig(kortex_driver::DeviceConfig_SetCapSenseConfig::Request &req, kortex_driver::DeviceConfig_SetCapSenseConfig::Response &res) +{ + Kinova::Api::DeviceConfig::CapSenseConfig input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_deviceconfig->SetCapSenseConfig(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool DeviceConfigServices::DeviceConfig_GetCapSenseConfig(kortex_driver::DeviceConfig_GetCapSenseConfig::Request &req, kortex_driver::DeviceConfig_GetCapSenseConfig::Response &res) +{ + Kinova::Api::DeviceConfig::CapSenseConfig output; + + kortex_driver::KortexError result_error; + + try + { + output = m_deviceconfig->GetCapSenseConfig(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} diff --git a/kortex_driver/src/generated/devicemanager_proto_converter.cpp b/kortex_driver/src/generated/devicemanager_proto_converter.cpp new file mode 100644 index 00000000..31785e68 --- /dev/null +++ b/kortex_driver/src/generated/devicemanager_proto_converter.cpp @@ -0,0 +1,29 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/devicemanager_proto_converter.h" + +int ToProtoData(kortex_driver::DeviceHandles input, Kinova::Api::DeviceManager::DeviceHandles *output) +{ + + output->clear_device_handle(); + for(int i = 0; i < input.device_handle.size(); i++) + { + ToProtoData(input.device_handle[i], output->add_device_handle()); + } + + return 0; +} diff --git a/kortex_driver/src/generated/devicemanager_ros_converter.cpp b/kortex_driver/src/generated/devicemanager_ros_converter.cpp new file mode 100644 index 00000000..c9a2115d --- /dev/null +++ b/kortex_driver/src/generated/devicemanager_ros_converter.cpp @@ -0,0 +1,33 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/devicemanager_ros_converter.h" + +int ToRosData(Kinova::Api::DeviceManager::DeviceHandles input, kortex_driver::DeviceHandles &output) +{ + + output.device_handle.clear(); + for(int i = 0; i < input.device_handle_size(); i++) + { + kortex_driver::DeviceHandle temp; + ToRosData(input.device_handle(i), temp); + output.device_handle.push_back(temp); + } + + + + return 0; +} diff --git a/kortex_driver/src/generated/devicemanager_services.cpp b/kortex_driver/src/generated/devicemanager_services.cpp new file mode 100644 index 00000000..a32ed70b --- /dev/null +++ b/kortex_driver/src/generated/devicemanager_services.cpp @@ -0,0 +1,105 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/common_proto_converter.h" +#include "kortex_driver/generated/common_ros_converter.h" +#include "kortex_driver/generated/actuatorconfig_proto_converter.h" +#include "kortex_driver/generated/actuatorconfig_ros_converter.h" +#include "kortex_driver/generated/actuatorcyclic_proto_converter.h" +#include "kortex_driver/generated/actuatorcyclic_ros_converter.h" +#include "kortex_driver/generated/productconfiguration_proto_converter.h" +#include "kortex_driver/generated/productconfiguration_ros_converter.h" +#include "kortex_driver/generated/base_proto_converter.h" +#include "kortex_driver/generated/base_ros_converter.h" +#include "kortex_driver/generated/grippercyclic_proto_converter.h" +#include "kortex_driver/generated/grippercyclic_ros_converter.h" +#include "kortex_driver/generated/interconnectcyclic_proto_converter.h" +#include "kortex_driver/generated/interconnectcyclic_ros_converter.h" +#include "kortex_driver/generated/basecyclic_proto_converter.h" +#include "kortex_driver/generated/basecyclic_ros_converter.h" +#include "kortex_driver/generated/controlconfig_proto_converter.h" +#include "kortex_driver/generated/controlconfig_ros_converter.h" +#include "kortex_driver/generated/deviceconfig_proto_converter.h" +#include "kortex_driver/generated/deviceconfig_ros_converter.h" +#include "kortex_driver/generated/devicemanager_proto_converter.h" +#include "kortex_driver/generated/devicemanager_ros_converter.h" +#include "kortex_driver/generated/interconnectconfig_proto_converter.h" +#include "kortex_driver/generated/interconnectconfig_ros_converter.h" +#include "kortex_driver/generated/visionconfig_proto_converter.h" +#include "kortex_driver/generated/visionconfig_ros_converter.h" +#include "kortex_driver/generated/devicemanager_services.h" + +DeviceManagerServices::DeviceManagerServices(ros::NodeHandle& n, Kinova::Api::DeviceManager::DeviceManagerClient* devicemanager, uint32_t device_id, uint32_t timeout_ms): + m_n(n), + m_devicemanager(devicemanager), + m_current_device_id(device_id) +{ + m_api_options.timeout_ms = timeout_ms; + + m_pub_Error = m_n.advertise("kortex_error", 1000); + + m_serviceSetDeviceID = n.advertiseService("device_manager/set_device_id", &DeviceManagerServices::SetDeviceID, this); + m_serviceSetApiOptions = n.advertiseService("device_manager/set_api_options", &DeviceManagerServices::SetApiOptions, this); + + m_serviceReadAllDevices = m_n.advertiseService("device_manager/read_all_devices", &DeviceManagerServices::ReadAllDevices, this); +} + +bool DeviceManagerServices::SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res) +{ + m_current_device_id = req.device_id; + + return true; +} + +bool DeviceManagerServices::SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res) +{ + m_api_options.timeout_ms = req.input.timeout_ms; + + return true; +} + + +bool DeviceManagerServices::ReadAllDevices(kortex_driver::ReadAllDevices::Request &req, kortex_driver::ReadAllDevices::Response &res) +{ + Kinova::Api::DeviceManager::DeviceHandles output; + + kortex_driver::KortexError result_error; + + try + { + output = m_devicemanager->ReadAllDevices(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} diff --git a/kortex_driver/src/generated/grippercyclic_proto_converter.cpp b/kortex_driver/src/generated/grippercyclic_proto_converter.cpp new file mode 100644 index 00000000..f5840258 --- /dev/null +++ b/kortex_driver/src/generated/grippercyclic_proto_converter.cpp @@ -0,0 +1,112 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/grippercyclic_proto_converter.h" + +int ToProtoData(kortex_driver::GripperCyclic_MessageId input, Kinova::Api::GripperCyclic::MessageId *output) +{ + + output->set_identifier(input.identifier); + + return 0; +} +int ToProtoData(kortex_driver::MotorCommand input, Kinova::Api::GripperCyclic::MotorCommand *output) +{ + + output->set_motor_id(input.motor_id); + output->set_position(input.position); + output->set_velocity(input.velocity); + output->set_force(input.force); + + return 0; +} +int ToProtoData(kortex_driver::GripperCyclic_Command input, Kinova::Api::GripperCyclic::Command *output) +{ + + ToProtoData(input.command_id, output->mutable_command_id()); + output->set_flags(input.flags); + output->clear_motor_cmd(); + for(int i = 0; i < input.motor_cmd.size(); i++) + { + ToProtoData(input.motor_cmd[i], output->add_motor_cmd()); + } + + return 0; +} +int ToProtoData(kortex_driver::MotorFeedback input, Kinova::Api::GripperCyclic::MotorFeedback *output) +{ + + output->set_motor_id(input.motor_id); + output->set_position(input.position); + output->set_velocity(input.velocity); + output->set_current_motor(input.current_motor); + output->set_voltage(input.voltage); + output->set_temperature_motor(input.temperature_motor); + + return 0; +} +int ToProtoData(kortex_driver::GripperCyclic_Feedback input, Kinova::Api::GripperCyclic::Feedback *output) +{ + + ToProtoData(input.feedback_id, output->mutable_feedback_id()); + output->set_status_flags(input.status_flags); + output->set_fault_bank_a(input.fault_bank_a); + output->set_fault_bank_b(input.fault_bank_b); + output->set_warning_bank_a(input.warning_bank_a); + output->set_warning_bank_b(input.warning_bank_b); + output->clear_motor(); + for(int i = 0; i < input.motor.size(); i++) + { + ToProtoData(input.motor[i], output->add_motor()); + } + + return 0; +} +int ToProtoData(kortex_driver::CustomDataUnit input, Kinova::Api::GripperCyclic::CustomDataUnit *output) +{ + + output->set_custom_data_0(input.custom_data_0); + output->set_custom_data_1(input.custom_data_1); + output->set_custom_data_2(input.custom_data_2); + output->set_custom_data_3(input.custom_data_3); + output->set_custom_data_4(input.custom_data_4); + output->set_custom_data_5(input.custom_data_5); + output->set_custom_data_6(input.custom_data_6); + output->set_custom_data_7(input.custom_data_7); + output->set_custom_data_8(input.custom_data_8); + output->set_custom_data_9(input.custom_data_9); + output->set_custom_data_10(input.custom_data_10); + output->set_custom_data_11(input.custom_data_11); + output->set_custom_data_12(input.custom_data_12); + output->set_custom_data_13(input.custom_data_13); + output->set_custom_data_14(input.custom_data_14); + output->set_custom_data_15(input.custom_data_15); + + return 0; +} +int ToProtoData(kortex_driver::GripperCyclic_CustomData input, Kinova::Api::GripperCyclic::CustomData *output) +{ + + ToProtoData(input.custom_data_id, output->mutable_custom_data_id()); + ToProtoData(input.gripper_custom_data, output->mutable_gripper_custom_data()); + output->clear_motor_custom_data(); + for(int i = 0; i < input.motor_custom_data.size(); i++) + { + ToProtoData(input.motor_custom_data[i], output->add_motor_custom_data()); + } + + return 0; +} diff --git a/kortex_driver/src/generated/grippercyclic_ros_converter.cpp b/kortex_driver/src/generated/grippercyclic_ros_converter.cpp new file mode 100644 index 00000000..5dd097e2 --- /dev/null +++ b/kortex_driver/src/generated/grippercyclic_ros_converter.cpp @@ -0,0 +1,132 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/grippercyclic_ros_converter.h" + +int ToRosData(Kinova::Api::GripperCyclic::MessageId input, kortex_driver::GripperCyclic_MessageId &output) +{ + + output.identifier = input.identifier(); + + + + return 0; +} +int ToRosData(Kinova::Api::GripperCyclic::MotorCommand input, kortex_driver::MotorCommand &output) +{ + + output.motor_id = input.motor_id(); + output.position = input.position(); + output.velocity = input.velocity(); + output.force = input.force(); + + + + return 0; +} +int ToRosData(Kinova::Api::GripperCyclic::Command input, kortex_driver::GripperCyclic_Command &output) +{ + + ToRosData(input.command_id(), output.command_id); + output.flags = input.flags(); + output.motor_cmd.clear(); + for(int i = 0; i < input.motor_cmd_size(); i++) + { + kortex_driver::MotorCommand temp; + ToRosData(input.motor_cmd(i), temp); + output.motor_cmd.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::GripperCyclic::MotorFeedback input, kortex_driver::MotorFeedback &output) +{ + + output.motor_id = input.motor_id(); + output.position = input.position(); + output.velocity = input.velocity(); + output.current_motor = input.current_motor(); + output.voltage = input.voltage(); + output.temperature_motor = input.temperature_motor(); + + + + return 0; +} +int ToRosData(Kinova::Api::GripperCyclic::Feedback input, kortex_driver::GripperCyclic_Feedback &output) +{ + + ToRosData(input.feedback_id(), output.feedback_id); + output.status_flags = input.status_flags(); + output.fault_bank_a = input.fault_bank_a(); + output.fault_bank_b = input.fault_bank_b(); + output.warning_bank_a = input.warning_bank_a(); + output.warning_bank_b = input.warning_bank_b(); + output.motor.clear(); + for(int i = 0; i < input.motor_size(); i++) + { + kortex_driver::MotorFeedback temp; + ToRosData(input.motor(i), temp); + output.motor.push_back(temp); + } + + + + return 0; +} +int ToRosData(Kinova::Api::GripperCyclic::CustomDataUnit input, kortex_driver::CustomDataUnit &output) +{ + + output.custom_data_0 = input.custom_data_0(); + output.custom_data_1 = input.custom_data_1(); + output.custom_data_2 = input.custom_data_2(); + output.custom_data_3 = input.custom_data_3(); + output.custom_data_4 = input.custom_data_4(); + output.custom_data_5 = input.custom_data_5(); + output.custom_data_6 = input.custom_data_6(); + output.custom_data_7 = input.custom_data_7(); + output.custom_data_8 = input.custom_data_8(); + output.custom_data_9 = input.custom_data_9(); + output.custom_data_10 = input.custom_data_10(); + output.custom_data_11 = input.custom_data_11(); + output.custom_data_12 = input.custom_data_12(); + output.custom_data_13 = input.custom_data_13(); + output.custom_data_14 = input.custom_data_14(); + output.custom_data_15 = input.custom_data_15(); + + + + return 0; +} +int ToRosData(Kinova::Api::GripperCyclic::CustomData input, kortex_driver::GripperCyclic_CustomData &output) +{ + + ToRosData(input.custom_data_id(), output.custom_data_id); + ToRosData(input.gripper_custom_data(), output.gripper_custom_data); + output.motor_custom_data.clear(); + for(int i = 0; i < input.motor_custom_data_size(); i++) + { + kortex_driver::CustomDataUnit temp; + ToRosData(input.motor_custom_data(i), temp); + output.motor_custom_data.push_back(temp); + } + + + + return 0; +} diff --git a/kortex_driver/src/generated/interconnectconfig_proto_converter.cpp b/kortex_driver/src/generated/interconnectconfig_proto_converter.cpp new file mode 100644 index 00000000..e210b6a0 --- /dev/null +++ b/kortex_driver/src/generated/interconnectconfig_proto_converter.cpp @@ -0,0 +1,129 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/interconnectconfig_proto_converter.h" + +int ToProtoData(kortex_driver::EthernetDeviceIdentification input, Kinova::Api::InterconnectConfig::EthernetDeviceIdentification *output) +{ + + output->set_device((Kinova::Api::InterconnectConfig::EthernetDevice)input.device); + + return 0; +} +int ToProtoData(kortex_driver::EthernetConfiguration input, Kinova::Api::InterconnectConfig::EthernetConfiguration *output) +{ + + output->set_device((Kinova::Api::InterconnectConfig::EthernetDevice)input.device); + output->set_enabled(input.enabled); + output->set_speed((Kinova::Api::InterconnectConfig::EthernetSpeed)input.speed); + output->set_duplex((Kinova::Api::InterconnectConfig::EthernetDuplex)input.duplex); + + return 0; +} +int ToProtoData(kortex_driver::GPIOIdentification input, Kinova::Api::InterconnectConfig::GPIOIdentification *output) +{ + + output->set_identifier((Kinova::Api::InterconnectConfig::GPIOIdentifier)input.identifier); + + return 0; +} +int ToProtoData(kortex_driver::GPIOConfiguration input, Kinova::Api::InterconnectConfig::GPIOConfiguration *output) +{ + + output->set_identifier((Kinova::Api::InterconnectConfig::GPIOIdentifier)input.identifier); + output->set_mode((Kinova::Api::InterconnectConfig::GPIOMode)input.mode); + output->set_pull((Kinova::Api::InterconnectConfig::GPIOPull)input.pull); + output->set_default_value((Kinova::Api::InterconnectConfig::GPIOValue)input.default_value); + + return 0; +} +int ToProtoData(kortex_driver::GPIOState input, Kinova::Api::InterconnectConfig::GPIOState *output) +{ + + output->set_identifier((Kinova::Api::InterconnectConfig::GPIOIdentifier)input.identifier); + output->set_value((Kinova::Api::InterconnectConfig::GPIOValue)input.value); + + return 0; +} +int ToProtoData(kortex_driver::I2CDeviceIdentification input, Kinova::Api::InterconnectConfig::I2CDeviceIdentification *output) +{ + + output->set_device((Kinova::Api::InterconnectConfig::I2CDevice)input.device); + + return 0; +} +int ToProtoData(kortex_driver::I2CConfiguration input, Kinova::Api::InterconnectConfig::I2CConfiguration *output) +{ + + output->set_device((Kinova::Api::InterconnectConfig::I2CDevice)input.device); + output->set_enabled(input.enabled); + output->set_mode((Kinova::Api::InterconnectConfig::I2CMode)input.mode); + output->set_addressing((Kinova::Api::InterconnectConfig::I2CDeviceAddressing)input.addressing); + + return 0; +} +int ToProtoData(kortex_driver::I2CReadParameter input, Kinova::Api::InterconnectConfig::I2CReadParameter *output) +{ + + output->set_device((Kinova::Api::InterconnectConfig::I2CDevice)input.device); + output->set_device_address(input.device_address); + output->set_size(input.size); + output->set_timeout(input.timeout); + + return 0; +} +int ToProtoData(kortex_driver::I2CReadRegisterParameter input, Kinova::Api::InterconnectConfig::I2CReadRegisterParameter *output) +{ + + output->set_device((Kinova::Api::InterconnectConfig::I2CDevice)input.device); + output->set_device_address(input.device_address); + output->set_register_address(input.register_address); + output->set_register_address_size((Kinova::Api::InterconnectConfig::I2CRegisterAddressSize)input.register_address_size); + output->set_size(input.size); + output->set_timeout(input.timeout); + + return 0; +} +int ToProtoData(kortex_driver::I2CWriteParameter input, Kinova::Api::InterconnectConfig::I2CWriteParameter *output) +{ + + output->set_device((Kinova::Api::InterconnectConfig::I2CDevice)input.device); + output->set_device_address(input.device_address); + output->set_timeout(input.timeout); + ToProtoData(input.data, output->mutable_data()); + + return 0; +} +int ToProtoData(kortex_driver::I2CWriteRegisterParameter input, Kinova::Api::InterconnectConfig::I2CWriteRegisterParameter *output) +{ + + output->set_device((Kinova::Api::InterconnectConfig::I2CDevice)input.device); + output->set_device_address(input.device_address); + output->set_register_address(input.register_address); + output->set_register_address_size((Kinova::Api::InterconnectConfig::I2CRegisterAddressSize)input.register_address_size); + output->set_timeout(input.timeout); + ToProtoData(input.data, output->mutable_data()); + + return 0; +} +int ToProtoData(kortex_driver::I2CData input, Kinova::Api::InterconnectConfig::I2CData *output) +{ + + output->set_data(std::string(input.data.begin(), input.data.end())); + output->set_size(input.size); + + return 0; +} diff --git a/kortex_driver/src/generated/interconnectconfig_ros_converter.cpp b/kortex_driver/src/generated/interconnectconfig_ros_converter.cpp new file mode 100644 index 00000000..356d96e4 --- /dev/null +++ b/kortex_driver/src/generated/interconnectconfig_ros_converter.cpp @@ -0,0 +1,153 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/interconnectconfig_ros_converter.h" + +int ToRosData(Kinova::Api::InterconnectConfig::EthernetDeviceIdentification input, kortex_driver::EthernetDeviceIdentification &output) +{ + + output.device = input.device(); + + + + return 0; +} +int ToRosData(Kinova::Api::InterconnectConfig::EthernetConfiguration input, kortex_driver::EthernetConfiguration &output) +{ + + output.device = input.device(); + output.enabled = input.enabled(); + output.speed = input.speed(); + output.duplex = input.duplex(); + + + + return 0; +} +int ToRosData(Kinova::Api::InterconnectConfig::GPIOIdentification input, kortex_driver::GPIOIdentification &output) +{ + + output.identifier = input.identifier(); + + + + return 0; +} +int ToRosData(Kinova::Api::InterconnectConfig::GPIOConfiguration input, kortex_driver::GPIOConfiguration &output) +{ + + output.identifier = input.identifier(); + output.mode = input.mode(); + output.pull = input.pull(); + output.default_value = input.default_value(); + + + + return 0; +} +int ToRosData(Kinova::Api::InterconnectConfig::GPIOState input, kortex_driver::GPIOState &output) +{ + + output.identifier = input.identifier(); + output.value = input.value(); + + + + return 0; +} +int ToRosData(Kinova::Api::InterconnectConfig::I2CDeviceIdentification input, kortex_driver::I2CDeviceIdentification &output) +{ + + output.device = input.device(); + + + + return 0; +} +int ToRosData(Kinova::Api::InterconnectConfig::I2CConfiguration input, kortex_driver::I2CConfiguration &output) +{ + + output.device = input.device(); + output.enabled = input.enabled(); + output.mode = input.mode(); + output.addressing = input.addressing(); + + + + return 0; +} +int ToRosData(Kinova::Api::InterconnectConfig::I2CReadParameter input, kortex_driver::I2CReadParameter &output) +{ + + output.device = input.device(); + output.device_address = input.device_address(); + output.size = input.size(); + output.timeout = input.timeout(); + + + + return 0; +} +int ToRosData(Kinova::Api::InterconnectConfig::I2CReadRegisterParameter input, kortex_driver::I2CReadRegisterParameter &output) +{ + + output.device = input.device(); + output.device_address = input.device_address(); + output.register_address = input.register_address(); + output.register_address_size = input.register_address_size(); + output.size = input.size(); + output.timeout = input.timeout(); + + + + return 0; +} +int ToRosData(Kinova::Api::InterconnectConfig::I2CWriteParameter input, kortex_driver::I2CWriteParameter &output) +{ + + output.device = input.device(); + output.device_address = input.device_address(); + output.timeout = input.timeout(); + ToRosData(input.data(), output.data); + + + + return 0; +} +int ToRosData(Kinova::Api::InterconnectConfig::I2CWriteRegisterParameter input, kortex_driver::I2CWriteRegisterParameter &output) +{ + + output.device = input.device(); + output.device_address = input.device_address(); + output.register_address = input.register_address(); + output.register_address_size = input.register_address_size(); + output.timeout = input.timeout(); + ToRosData(input.data(), output.data); + + + + return 0; +} +int ToRosData(Kinova::Api::InterconnectConfig::I2CData input, kortex_driver::I2CData &output) +{ + + output.data = std::vector(input.data().begin(), input.data().end()); + output.size = input.size(); + + + + return 0; +} diff --git a/kortex_driver/src/generated/interconnectconfig_services.cpp b/kortex_driver/src/generated/interconnectconfig_services.cpp new file mode 100644 index 00000000..6f0127ea --- /dev/null +++ b/kortex_driver/src/generated/interconnectconfig_services.cpp @@ -0,0 +1,541 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/common_proto_converter.h" +#include "kortex_driver/generated/common_ros_converter.h" +#include "kortex_driver/generated/actuatorconfig_proto_converter.h" +#include "kortex_driver/generated/actuatorconfig_ros_converter.h" +#include "kortex_driver/generated/actuatorcyclic_proto_converter.h" +#include "kortex_driver/generated/actuatorcyclic_ros_converter.h" +#include "kortex_driver/generated/productconfiguration_proto_converter.h" +#include "kortex_driver/generated/productconfiguration_ros_converter.h" +#include "kortex_driver/generated/base_proto_converter.h" +#include "kortex_driver/generated/base_ros_converter.h" +#include "kortex_driver/generated/grippercyclic_proto_converter.h" +#include "kortex_driver/generated/grippercyclic_ros_converter.h" +#include "kortex_driver/generated/interconnectcyclic_proto_converter.h" +#include "kortex_driver/generated/interconnectcyclic_ros_converter.h" +#include "kortex_driver/generated/basecyclic_proto_converter.h" +#include "kortex_driver/generated/basecyclic_ros_converter.h" +#include "kortex_driver/generated/controlconfig_proto_converter.h" +#include "kortex_driver/generated/controlconfig_ros_converter.h" +#include "kortex_driver/generated/deviceconfig_proto_converter.h" +#include "kortex_driver/generated/deviceconfig_ros_converter.h" +#include "kortex_driver/generated/devicemanager_proto_converter.h" +#include "kortex_driver/generated/devicemanager_ros_converter.h" +#include "kortex_driver/generated/interconnectconfig_proto_converter.h" +#include "kortex_driver/generated/interconnectconfig_ros_converter.h" +#include "kortex_driver/generated/visionconfig_proto_converter.h" +#include "kortex_driver/generated/visionconfig_ros_converter.h" +#include "kortex_driver/generated/interconnectconfig_services.h" + +InterconnectConfigServices::InterconnectConfigServices(ros::NodeHandle& n, Kinova::Api::InterconnectConfig::InterconnectConfigClient* interconnectconfig, uint32_t device_id, uint32_t timeout_ms): + m_n(n), + m_interconnectconfig(interconnectconfig), + m_current_device_id(device_id) +{ + m_api_options.timeout_ms = timeout_ms; + + m_pub_Error = m_n.advertise("kortex_error", 1000); + + m_serviceSetDeviceID = n.advertiseService("interconnect_config/set_device_id", &InterconnectConfigServices::SetDeviceID, this); + m_serviceSetApiOptions = n.advertiseService("interconnect_config/set_api_options", &InterconnectConfigServices::SetApiOptions, this); + + m_serviceGetUARTConfiguration = m_n.advertiseService("interconnect_config/get_u_a_r_t_configuration", &InterconnectConfigServices::GetUARTConfiguration, this); + m_serviceSetUARTConfiguration = m_n.advertiseService("interconnect_config/set_u_a_r_t_configuration", &InterconnectConfigServices::SetUARTConfiguration, this); + m_serviceGetEthernetConfiguration = m_n.advertiseService("interconnect_config/get_ethernet_configuration", &InterconnectConfigServices::GetEthernetConfiguration, this); + m_serviceSetEthernetConfiguration = m_n.advertiseService("interconnect_config/set_ethernet_configuration", &InterconnectConfigServices::SetEthernetConfiguration, this); + m_serviceGetGPIOConfiguration = m_n.advertiseService("interconnect_config/get_g_p_i_o_configuration", &InterconnectConfigServices::GetGPIOConfiguration, this); + m_serviceSetGPIOConfiguration = m_n.advertiseService("interconnect_config/set_g_p_i_o_configuration", &InterconnectConfigServices::SetGPIOConfiguration, this); + m_serviceGetGPIOState = m_n.advertiseService("interconnect_config/get_g_p_i_o_state", &InterconnectConfigServices::GetGPIOState, this); + m_serviceSetGPIOState = m_n.advertiseService("interconnect_config/set_g_p_i_o_state", &InterconnectConfigServices::SetGPIOState, this); + m_serviceGetI2CConfiguration = m_n.advertiseService("interconnect_config/get_i2_c_configuration", &InterconnectConfigServices::GetI2CConfiguration, this); + m_serviceSetI2CConfiguration = m_n.advertiseService("interconnect_config/set_i2_c_configuration", &InterconnectConfigServices::SetI2CConfiguration, this); + m_serviceI2CRead = m_n.advertiseService("interconnect_config/i2_c_read", &InterconnectConfigServices::I2CRead, this); + m_serviceI2CReadRegister = m_n.advertiseService("interconnect_config/i2_c_read_register", &InterconnectConfigServices::I2CReadRegister, this); + m_serviceI2CWrite = m_n.advertiseService("interconnect_config/i2_c_write", &InterconnectConfigServices::I2CWrite, this); + m_serviceI2CWriteRegister = m_n.advertiseService("interconnect_config/i2_c_write_register", &InterconnectConfigServices::I2CWriteRegister, this); +} + +bool InterconnectConfigServices::SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res) +{ + m_current_device_id = req.device_id; + + return true; +} + +bool InterconnectConfigServices::SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res) +{ + m_api_options.timeout_ms = req.input.timeout_ms; + + return true; +} + + +bool InterconnectConfigServices::GetUARTConfiguration(kortex_driver::GetUARTConfiguration::Request &req, kortex_driver::GetUARTConfiguration::Response &res) +{ + Kinova::Api::Common::UARTDeviceIdentification input; + ToProtoData(req.input, &input); + Kinova::Api::Common::UARTConfiguration output; + + kortex_driver::KortexError result_error; + + try + { + output = m_interconnectconfig->GetUARTConfiguration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool InterconnectConfigServices::SetUARTConfiguration(kortex_driver::SetUARTConfiguration::Request &req, kortex_driver::SetUARTConfiguration::Response &res) +{ + Kinova::Api::Common::UARTConfiguration input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_interconnectconfig->SetUARTConfiguration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool InterconnectConfigServices::GetEthernetConfiguration(kortex_driver::GetEthernetConfiguration::Request &req, kortex_driver::GetEthernetConfiguration::Response &res) +{ + Kinova::Api::InterconnectConfig::EthernetDeviceIdentification input; + ToProtoData(req.input, &input); + Kinova::Api::InterconnectConfig::EthernetConfiguration output; + + kortex_driver::KortexError result_error; + + try + { + output = m_interconnectconfig->GetEthernetConfiguration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool InterconnectConfigServices::SetEthernetConfiguration(kortex_driver::SetEthernetConfiguration::Request &req, kortex_driver::SetEthernetConfiguration::Response &res) +{ + Kinova::Api::InterconnectConfig::EthernetConfiguration input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_interconnectconfig->SetEthernetConfiguration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool InterconnectConfigServices::GetGPIOConfiguration(kortex_driver::GetGPIOConfiguration::Request &req, kortex_driver::GetGPIOConfiguration::Response &res) +{ + Kinova::Api::InterconnectConfig::GPIOIdentification input; + ToProtoData(req.input, &input); + Kinova::Api::InterconnectConfig::GPIOConfiguration output; + + kortex_driver::KortexError result_error; + + try + { + output = m_interconnectconfig->GetGPIOConfiguration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool InterconnectConfigServices::SetGPIOConfiguration(kortex_driver::SetGPIOConfiguration::Request &req, kortex_driver::SetGPIOConfiguration::Response &res) +{ + Kinova::Api::InterconnectConfig::GPIOConfiguration input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_interconnectconfig->SetGPIOConfiguration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool InterconnectConfigServices::GetGPIOState(kortex_driver::GetGPIOState::Request &req, kortex_driver::GetGPIOState::Response &res) +{ + Kinova::Api::InterconnectConfig::GPIOIdentification input; + ToProtoData(req.input, &input); + Kinova::Api::InterconnectConfig::GPIOState output; + + kortex_driver::KortexError result_error; + + try + { + output = m_interconnectconfig->GetGPIOState(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool InterconnectConfigServices::SetGPIOState(kortex_driver::SetGPIOState::Request &req, kortex_driver::SetGPIOState::Response &res) +{ + Kinova::Api::InterconnectConfig::GPIOState input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_interconnectconfig->SetGPIOState(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool InterconnectConfigServices::GetI2CConfiguration(kortex_driver::GetI2CConfiguration::Request &req, kortex_driver::GetI2CConfiguration::Response &res) +{ + Kinova::Api::InterconnectConfig::I2CDeviceIdentification input; + ToProtoData(req.input, &input); + Kinova::Api::InterconnectConfig::I2CConfiguration output; + + kortex_driver::KortexError result_error; + + try + { + output = m_interconnectconfig->GetI2CConfiguration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool InterconnectConfigServices::SetI2CConfiguration(kortex_driver::SetI2CConfiguration::Request &req, kortex_driver::SetI2CConfiguration::Response &res) +{ + Kinova::Api::InterconnectConfig::I2CConfiguration input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_interconnectconfig->SetI2CConfiguration(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool InterconnectConfigServices::I2CRead(kortex_driver::I2CRead::Request &req, kortex_driver::I2CRead::Response &res) +{ + Kinova::Api::InterconnectConfig::I2CReadParameter input; + ToProtoData(req.input, &input); + Kinova::Api::InterconnectConfig::I2CData output; + + kortex_driver::KortexError result_error; + + try + { + output = m_interconnectconfig->I2CRead(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool InterconnectConfigServices::I2CReadRegister(kortex_driver::I2CReadRegister::Request &req, kortex_driver::I2CReadRegister::Response &res) +{ + Kinova::Api::InterconnectConfig::I2CReadRegisterParameter input; + ToProtoData(req.input, &input); + Kinova::Api::InterconnectConfig::I2CData output; + + kortex_driver::KortexError result_error; + + try + { + output = m_interconnectconfig->I2CReadRegister(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool InterconnectConfigServices::I2CWrite(kortex_driver::I2CWrite::Request &req, kortex_driver::I2CWrite::Response &res) +{ + Kinova::Api::InterconnectConfig::I2CWriteParameter input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_interconnectconfig->I2CWrite(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool InterconnectConfigServices::I2CWriteRegister(kortex_driver::I2CWriteRegister::Request &req, kortex_driver::I2CWriteRegister::Response &res) +{ + Kinova::Api::InterconnectConfig::I2CWriteRegisterParameter input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_interconnectconfig->I2CWriteRegister(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} diff --git a/kortex_driver/src/generated/interconnectcyclic_proto_converter.cpp b/kortex_driver/src/generated/interconnectcyclic_proto_converter.cpp new file mode 100644 index 00000000..2698cc16 --- /dev/null +++ b/kortex_driver/src/generated/interconnectcyclic_proto_converter.cpp @@ -0,0 +1,89 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/interconnectcyclic_proto_converter.h" + +int ToProtoData(kortex_driver::InterconnectCyclic_MessageId input, Kinova::Api::InterconnectCyclic::MessageId *output) +{ + + output->set_identifier(input.identifier); + + return 0; +} +int ToProtoData(kortex_driver::InterconnectCyclic_Command input, Kinova::Api::InterconnectCyclic::Command *output) +{ + + ToProtoData(input.command_id, output->mutable_command_id()); + output->set_flags(input.flags); + if(input.oneof_tool_command.gripper_command.size() > 0) + { + ToProtoData(input.oneof_tool_command.gripper_command[0], output->mutable_gripper_command()); + } + + return 0; +} +int ToProtoData(kortex_driver::InterconnectCyclic_Feedback input, Kinova::Api::InterconnectCyclic::Feedback *output) +{ + + ToProtoData(input.feedback_id, output->mutable_feedback_id()); + output->set_status_flags(input.status_flags); + output->set_jitter_comm(input.jitter_comm); + output->set_imu_acceleration_x(input.imu_acceleration_x); + output->set_imu_acceleration_y(input.imu_acceleration_y); + output->set_imu_acceleration_z(input.imu_acceleration_z); + output->set_imu_angular_velocity_x(input.imu_angular_velocity_x); + output->set_imu_angular_velocity_y(input.imu_angular_velocity_y); + output->set_imu_angular_velocity_z(input.imu_angular_velocity_z); + output->set_voltage(input.voltage); + output->set_temperature_core(input.temperature_core); + output->set_fault_bank_a(input.fault_bank_a); + output->set_fault_bank_b(input.fault_bank_b); + output->set_warning_bank_a(input.warning_bank_a); + output->set_warning_bank_b(input.warning_bank_b); + if(input.oneof_tool_feedback.gripper_feedback.size() > 0) + { + ToProtoData(input.oneof_tool_feedback.gripper_feedback[0], output->mutable_gripper_feedback()); + } + + return 0; +} +int ToProtoData(kortex_driver::InterconnectCyclic_CustomData input, Kinova::Api::InterconnectCyclic::CustomData *output) +{ + + ToProtoData(input.custom_data_id, output->mutable_custom_data_id()); + output->set_custom_data_0(input.custom_data_0); + output->set_custom_data_1(input.custom_data_1); + output->set_custom_data_2(input.custom_data_2); + output->set_custom_data_3(input.custom_data_3); + output->set_custom_data_4(input.custom_data_4); + output->set_custom_data_5(input.custom_data_5); + output->set_custom_data_6(input.custom_data_6); + output->set_custom_data_7(input.custom_data_7); + output->set_custom_data_8(input.custom_data_8); + output->set_custom_data_9(input.custom_data_9); + output->set_custom_data_10(input.custom_data_10); + output->set_custom_data_11(input.custom_data_11); + output->set_custom_data_12(input.custom_data_12); + output->set_custom_data_13(input.custom_data_13); + output->set_custom_data_14(input.custom_data_14); + output->set_custom_data_15(input.custom_data_15); + if(input.oneof_tool_customData.gripper_custom_data.size() > 0) + { + ToProtoData(input.oneof_tool_customData.gripper_custom_data[0], output->mutable_gripper_custom_data()); + } + + return 0; +} diff --git a/kortex_driver/src/generated/interconnectcyclic_ros_converter.cpp b/kortex_driver/src/generated/interconnectcyclic_ros_converter.cpp new file mode 100644 index 00000000..0dac92e9 --- /dev/null +++ b/kortex_driver/src/generated/interconnectcyclic_ros_converter.cpp @@ -0,0 +1,118 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/interconnectcyclic_ros_converter.h" + +int ToRosData(Kinova::Api::InterconnectCyclic::MessageId input, kortex_driver::InterconnectCyclic_MessageId &output) +{ + + output.identifier = input.identifier(); + + + + return 0; +} +int ToRosData(Kinova::Api::InterconnectCyclic::Command input, kortex_driver::InterconnectCyclic_Command &output) +{ + + ToRosData(input.command_id(), output.command_id); + output.flags = input.flags(); + + + auto oneof_type = input.tool_command_case(); + switch(oneof_type) + { + + case Kinova::Api::InterconnectCyclic::Command::kGripperCommand: + { + decltype(output.oneof_tool_command.gripper_command)::value_type temp; + ToRosData(input.gripper_command(), temp); + output.oneof_tool_command.gripper_command.push_back(temp); + break; + }} + + return 0; +} +int ToRosData(Kinova::Api::InterconnectCyclic::Feedback input, kortex_driver::InterconnectCyclic_Feedback &output) +{ + + ToRosData(input.feedback_id(), output.feedback_id); + output.status_flags = input.status_flags(); + output.jitter_comm = input.jitter_comm(); + output.imu_acceleration_x = input.imu_acceleration_x(); + output.imu_acceleration_y = input.imu_acceleration_y(); + output.imu_acceleration_z = input.imu_acceleration_z(); + output.imu_angular_velocity_x = input.imu_angular_velocity_x(); + output.imu_angular_velocity_y = input.imu_angular_velocity_y(); + output.imu_angular_velocity_z = input.imu_angular_velocity_z(); + output.voltage = input.voltage(); + output.temperature_core = input.temperature_core(); + output.fault_bank_a = input.fault_bank_a(); + output.fault_bank_b = input.fault_bank_b(); + output.warning_bank_a = input.warning_bank_a(); + output.warning_bank_b = input.warning_bank_b(); + + + auto oneof_type = input.tool_feedback_case(); + switch(oneof_type) + { + + case Kinova::Api::InterconnectCyclic::Feedback::kGripperFeedback: + { + decltype(output.oneof_tool_feedback.gripper_feedback)::value_type temp; + ToRosData(input.gripper_feedback(), temp); + output.oneof_tool_feedback.gripper_feedback.push_back(temp); + break; + }} + + return 0; +} +int ToRosData(Kinova::Api::InterconnectCyclic::CustomData input, kortex_driver::InterconnectCyclic_CustomData &output) +{ + + ToRosData(input.custom_data_id(), output.custom_data_id); + output.custom_data_0 = input.custom_data_0(); + output.custom_data_1 = input.custom_data_1(); + output.custom_data_2 = input.custom_data_2(); + output.custom_data_3 = input.custom_data_3(); + output.custom_data_4 = input.custom_data_4(); + output.custom_data_5 = input.custom_data_5(); + output.custom_data_6 = input.custom_data_6(); + output.custom_data_7 = input.custom_data_7(); + output.custom_data_8 = input.custom_data_8(); + output.custom_data_9 = input.custom_data_9(); + output.custom_data_10 = input.custom_data_10(); + output.custom_data_11 = input.custom_data_11(); + output.custom_data_12 = input.custom_data_12(); + output.custom_data_13 = input.custom_data_13(); + output.custom_data_14 = input.custom_data_14(); + output.custom_data_15 = input.custom_data_15(); + + + auto oneof_type = input.tool_customData_case(); + switch(oneof_type) + { + + case Kinova::Api::InterconnectCyclic::CustomData::kGripperCustomData: + { + decltype(output.oneof_tool_customData.gripper_custom_data)::value_type temp; + ToRosData(input.gripper_custom_data(), temp); + output.oneof_tool_customData.gripper_custom_data.push_back(temp); + break; + }} + + return 0; +} diff --git a/kortex_driver/src/generated/productconfiguration_proto_converter.cpp b/kortex_driver/src/generated/productconfiguration_proto_converter.cpp new file mode 100644 index 00000000..293ee64f --- /dev/null +++ b/kortex_driver/src/generated/productconfiguration_proto_converter.cpp @@ -0,0 +1,85 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/productconfiguration_proto_converter.h" + +int ToProtoData(kortex_driver::CompleteProductConfiguration input, Kinova::Api::ProductConfiguration::CompleteProductConfiguration *output) +{ + + output->set_kin(input.kin); + output->set_model((Kinova::Api::ProductConfiguration::ModelId)input.model); + ToProtoData(input.country_code, output->mutable_country_code()); + output->set_assembly_plant(input.assembly_plant); + output->set_model_year(input.model_year); + output->set_degree_of_freedom(input.degree_of_freedom); + output->set_base_type((Kinova::Api::ProductConfiguration::BaseType)input.base_type); + output->set_end_effector_type((Kinova::Api::ProductConfiguration::EndEffectorType)input.end_effector_type); + output->set_vision_module_type((Kinova::Api::ProductConfiguration::VisionModuleType)input.vision_module_type); + output->set_interface_module_type((Kinova::Api::ProductConfiguration::InterfaceModuleType)input.interface_module_type); + output->set_arm_laterality((Kinova::Api::ProductConfiguration::ArmLaterality)input.arm_laterality); + output->set_wrist_type((Kinova::Api::ProductConfiguration::WristType)input.wrist_type); + + return 0; +} +int ToProtoData(kortex_driver::ProductConfigurationDegreeOfFreedom input, Kinova::Api::ProductConfiguration::ProductConfigurationDegreeOfFreedom *output) +{ + + output->set_degree_of_freedom(input.degree_of_freedom); + + return 0; +} +int ToProtoData(kortex_driver::ProductConfigurationBaseType input, Kinova::Api::ProductConfiguration::ProductConfigurationBaseType *output) +{ + + output->set_base_type((Kinova::Api::ProductConfiguration::BaseType)input.base_type); + + return 0; +} +int ToProtoData(kortex_driver::ProductConfigurationEndEffectorType input, Kinova::Api::ProductConfiguration::ProductConfigurationEndEffectorType *output) +{ + + output->set_end_effector_type((Kinova::Api::ProductConfiguration::EndEffectorType)input.end_effector_type); + + return 0; +} +int ToProtoData(kortex_driver::ProductConfigurationVisionModuleType input, Kinova::Api::ProductConfiguration::ProductConfigurationVisionModuleType *output) +{ + + output->set_vision_module_type((Kinova::Api::ProductConfiguration::VisionModuleType)input.vision_module_type); + + return 0; +} +int ToProtoData(kortex_driver::ProductConfigurationInterfaceModuleType input, Kinova::Api::ProductConfiguration::ProductConfigurationInterfaceModuleType *output) +{ + + output->set_interface_module_type((Kinova::Api::ProductConfiguration::InterfaceModuleType)input.interface_module_type); + + return 0; +} +int ToProtoData(kortex_driver::ProductConfigurationLaterality input, Kinova::Api::ProductConfiguration::ProductConfigurationLaterality *output) +{ + + output->set_arm_laterality((Kinova::Api::ProductConfiguration::ArmLaterality)input.arm_laterality); + + return 0; +} +int ToProtoData(kortex_driver::ProductConfigurationWristType input, Kinova::Api::ProductConfiguration::ProductConfigurationWristType *output) +{ + + output->set_wrist_type((Kinova::Api::ProductConfiguration::WristType)input.wrist_type); + + return 0; +} diff --git a/kortex_driver/src/generated/productconfiguration_ros_converter.cpp b/kortex_driver/src/generated/productconfiguration_ros_converter.cpp new file mode 100644 index 00000000..926cc257 --- /dev/null +++ b/kortex_driver/src/generated/productconfiguration_ros_converter.cpp @@ -0,0 +1,101 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/productconfiguration_ros_converter.h" + +int ToRosData(Kinova::Api::ProductConfiguration::CompleteProductConfiguration input, kortex_driver::CompleteProductConfiguration &output) +{ + + output.kin = input.kin(); + output.model = input.model(); + ToRosData(input.country_code(), output.country_code); + output.assembly_plant = input.assembly_plant(); + output.model_year = input.model_year(); + output.degree_of_freedom = input.degree_of_freedom(); + output.base_type = input.base_type(); + output.end_effector_type = input.end_effector_type(); + output.vision_module_type = input.vision_module_type(); + output.interface_module_type = input.interface_module_type(); + output.arm_laterality = input.arm_laterality(); + output.wrist_type = input.wrist_type(); + + + + return 0; +} +int ToRosData(Kinova::Api::ProductConfiguration::ProductConfigurationDegreeOfFreedom input, kortex_driver::ProductConfigurationDegreeOfFreedom &output) +{ + + output.degree_of_freedom = input.degree_of_freedom(); + + + + return 0; +} +int ToRosData(Kinova::Api::ProductConfiguration::ProductConfigurationBaseType input, kortex_driver::ProductConfigurationBaseType &output) +{ + + output.base_type = input.base_type(); + + + + return 0; +} +int ToRosData(Kinova::Api::ProductConfiguration::ProductConfigurationEndEffectorType input, kortex_driver::ProductConfigurationEndEffectorType &output) +{ + + output.end_effector_type = input.end_effector_type(); + + + + return 0; +} +int ToRosData(Kinova::Api::ProductConfiguration::ProductConfigurationVisionModuleType input, kortex_driver::ProductConfigurationVisionModuleType &output) +{ + + output.vision_module_type = input.vision_module_type(); + + + + return 0; +} +int ToRosData(Kinova::Api::ProductConfiguration::ProductConfigurationInterfaceModuleType input, kortex_driver::ProductConfigurationInterfaceModuleType &output) +{ + + output.interface_module_type = input.interface_module_type(); + + + + return 0; +} +int ToRosData(Kinova::Api::ProductConfiguration::ProductConfigurationLaterality input, kortex_driver::ProductConfigurationLaterality &output) +{ + + output.arm_laterality = input.arm_laterality(); + + + + return 0; +} +int ToRosData(Kinova::Api::ProductConfiguration::ProductConfigurationWristType input, kortex_driver::ProductConfigurationWristType &output) +{ + + output.wrist_type = input.wrist_type(); + + + + return 0; +} diff --git a/kortex_driver/src/generated/visionconfig_proto_converter.cpp b/kortex_driver/src/generated/visionconfig_proto_converter.cpp new file mode 100644 index 00000000..233a91c4 --- /dev/null +++ b/kortex_driver/src/generated/visionconfig_proto_converter.cpp @@ -0,0 +1,173 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/visionconfig_proto_converter.h" + +int ToProtoData(kortex_driver::SensorSettings input, Kinova::Api::VisionConfig::SensorSettings *output) +{ + + output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); + output->set_resolution((Kinova::Api::VisionConfig::Resolution)input.resolution); + output->set_frame_rate((Kinova::Api::VisionConfig::FrameRate)input.frame_rate); + output->set_bit_rate((Kinova::Api::VisionConfig::BitRate)input.bit_rate); + + return 0; +} +int ToProtoData(kortex_driver::SensorIdentifier input, Kinova::Api::VisionConfig::SensorIdentifier *output) +{ + + output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); + + return 0; +} +int ToProtoData(kortex_driver::IntrinsicProfileIdentifier input, Kinova::Api::VisionConfig::IntrinsicProfileIdentifier *output) +{ + + output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); + output->set_resolution((Kinova::Api::VisionConfig::Resolution)input.resolution); + + return 0; +} +int ToProtoData(kortex_driver::OptionIdentifier input, Kinova::Api::VisionConfig::OptionIdentifier *output) +{ + + output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); + output->set_option((Kinova::Api::VisionConfig::Option)input.option); + + return 0; +} +int ToProtoData(kortex_driver::OptionValue input, Kinova::Api::VisionConfig::OptionValue *output) +{ + + output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); + output->set_option((Kinova::Api::VisionConfig::Option)input.option); + output->set_value(input.value); + + return 0; +} +int ToProtoData(kortex_driver::OptionInformation input, Kinova::Api::VisionConfig::OptionInformation *output) +{ + + output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); + output->set_option((Kinova::Api::VisionConfig::Option)input.option); + output->set_supported(input.supported); + output->set_read_only(input.read_only); + output->set_minimum(input.minimum); + output->set_maximum(input.maximum); + output->set_step(input.step); + output->set_default_value(input.default_value); + + return 0; +} +int ToProtoData(kortex_driver::SensorFocusAction input, Kinova::Api::VisionConfig::SensorFocusAction *output) +{ + + output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); + output->set_focus_action((Kinova::Api::VisionConfig::FocusAction)input.focus_action); + if(input.oneof_action_parameters.focus_point.size() > 0) + { + ToProtoData(input.oneof_action_parameters.focus_point[0], output->mutable_focus_point()); + } + if(input.oneof_action_parameters.manual_focus.size() > 0) + { + ToProtoData(input.oneof_action_parameters.manual_focus[0], output->mutable_manual_focus()); + } + + return 0; +} +int ToProtoData(kortex_driver::FocusPoint input, Kinova::Api::VisionConfig::FocusPoint *output) +{ + + output->set_x(input.x); + output->set_y(input.y); + + return 0; +} +int ToProtoData(kortex_driver::ManualFocus input, Kinova::Api::VisionConfig::ManualFocus *output) +{ + + output->set_value(input.value); + + return 0; +} +int ToProtoData(kortex_driver::VisionNotification input, Kinova::Api::VisionConfig::VisionNotification *output) +{ + + output->set_event((Kinova::Api::VisionConfig::VisionEvent)input.event); + output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); + output->set_option((Kinova::Api::VisionConfig::Option)input.option); + + return 0; +} +int ToProtoData(kortex_driver::IntrinsicParameters input, Kinova::Api::VisionConfig::IntrinsicParameters *output) +{ + + output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); + output->set_resolution((Kinova::Api::VisionConfig::Resolution)input.resolution); + output->set_principal_point_x(input.principal_point_x); + output->set_principal_point_y(input.principal_point_y); + output->set_focal_length_x(input.focal_length_x); + output->set_focal_length_y(input.focal_length_y); + ToProtoData(input.distortion_coeffs, output->mutable_distortion_coeffs()); + + return 0; +} +int ToProtoData(kortex_driver::DistortionCoefficients input, Kinova::Api::VisionConfig::DistortionCoefficients *output) +{ + + output->set_k1(input.k1); + output->set_k2(input.k2); + output->set_k3(input.k3); + output->set_p1(input.p1); + output->set_p2(input.p2); + + return 0; +} +int ToProtoData(kortex_driver::ExtrinsicParameters input, Kinova::Api::VisionConfig::ExtrinsicParameters *output) +{ + + ToProtoData(input.rotation, output->mutable_rotation()); + ToProtoData(input.translation, output->mutable_translation()); + + return 0; +} +int ToProtoData(kortex_driver::VisionConfig_RotationMatrix input, Kinova::Api::VisionConfig::RotationMatrix *output) +{ + + ToProtoData(input.row1, output->mutable_row1()); + ToProtoData(input.row2, output->mutable_row2()); + ToProtoData(input.row3, output->mutable_row3()); + + return 0; +} +int ToProtoData(kortex_driver::VisionConfig_RotationMatrixRow input, Kinova::Api::VisionConfig::RotationMatrixRow *output) +{ + + output->set_column1(input.column1); + output->set_column2(input.column2); + output->set_column3(input.column3); + + return 0; +} +int ToProtoData(kortex_driver::TranslationVector input, Kinova::Api::VisionConfig::TranslationVector *output) +{ + + output->set_t_x(input.t_x); + output->set_t_y(input.t_y); + output->set_t_z(input.t_z); + + return 0; +} diff --git a/kortex_driver/src/generated/visionconfig_ros_converter.cpp b/kortex_driver/src/generated/visionconfig_ros_converter.cpp new file mode 100644 index 00000000..0dcf881c --- /dev/null +++ b/kortex_driver/src/generated/visionconfig_ros_converter.cpp @@ -0,0 +1,216 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/visionconfig_ros_converter.h" + +int ToRosData(Kinova::Api::VisionConfig::SensorSettings input, kortex_driver::SensorSettings &output) +{ + + output.sensor = input.sensor(); + output.resolution = input.resolution(); + output.frame_rate = input.frame_rate(); + output.bit_rate = input.bit_rate(); + + + + return 0; +} +int ToRosData(Kinova::Api::VisionConfig::SensorIdentifier input, kortex_driver::SensorIdentifier &output) +{ + + output.sensor = input.sensor(); + + + + return 0; +} +int ToRosData(Kinova::Api::VisionConfig::IntrinsicProfileIdentifier input, kortex_driver::IntrinsicProfileIdentifier &output) +{ + + output.sensor = input.sensor(); + output.resolution = input.resolution(); + + + + return 0; +} +int ToRosData(Kinova::Api::VisionConfig::OptionIdentifier input, kortex_driver::OptionIdentifier &output) +{ + + output.sensor = input.sensor(); + output.option = input.option(); + + + + return 0; +} +int ToRosData(Kinova::Api::VisionConfig::OptionValue input, kortex_driver::OptionValue &output) +{ + + output.sensor = input.sensor(); + output.option = input.option(); + output.value = input.value(); + + + + return 0; +} +int ToRosData(Kinova::Api::VisionConfig::OptionInformation input, kortex_driver::OptionInformation &output) +{ + + output.sensor = input.sensor(); + output.option = input.option(); + output.supported = input.supported(); + output.read_only = input.read_only(); + output.minimum = input.minimum(); + output.maximum = input.maximum(); + output.step = input.step(); + output.default_value = input.default_value(); + + + + return 0; +} +int ToRosData(Kinova::Api::VisionConfig::SensorFocusAction input, kortex_driver::SensorFocusAction &output) +{ + + output.sensor = input.sensor(); + output.focus_action = input.focus_action(); + + + auto oneof_type = input.action_parameters_case(); + switch(oneof_type) + { + + case Kinova::Api::VisionConfig::SensorFocusAction::kFocusPoint: + { + decltype(output.oneof_action_parameters.focus_point)::value_type temp; + ToRosData(input.focus_point(), temp); + output.oneof_action_parameters.focus_point.push_back(temp); + break; + } + + case Kinova::Api::VisionConfig::SensorFocusAction::kManualFocus: + { + decltype(output.oneof_action_parameters.manual_focus)::value_type temp; + ToRosData(input.manual_focus(), temp); + output.oneof_action_parameters.manual_focus.push_back(temp); + break; + }} + + return 0; +} +int ToRosData(Kinova::Api::VisionConfig::FocusPoint input, kortex_driver::FocusPoint &output) +{ + + output.x = input.x(); + output.y = input.y(); + + + + return 0; +} +int ToRosData(Kinova::Api::VisionConfig::ManualFocus input, kortex_driver::ManualFocus &output) +{ + + output.value = input.value(); + + + + return 0; +} +int ToRosData(Kinova::Api::VisionConfig::VisionNotification input, kortex_driver::VisionNotification &output) +{ + + output.event = input.event(); + output.sensor = input.sensor(); + output.option = input.option(); + + + + return 0; +} +int ToRosData(Kinova::Api::VisionConfig::IntrinsicParameters input, kortex_driver::IntrinsicParameters &output) +{ + + output.sensor = input.sensor(); + output.resolution = input.resolution(); + output.principal_point_x = input.principal_point_x(); + output.principal_point_y = input.principal_point_y(); + output.focal_length_x = input.focal_length_x(); + output.focal_length_y = input.focal_length_y(); + ToRosData(input.distortion_coeffs(), output.distortion_coeffs); + + + + return 0; +} +int ToRosData(Kinova::Api::VisionConfig::DistortionCoefficients input, kortex_driver::DistortionCoefficients &output) +{ + + output.k1 = input.k1(); + output.k2 = input.k2(); + output.k3 = input.k3(); + output.p1 = input.p1(); + output.p2 = input.p2(); + + + + return 0; +} +int ToRosData(Kinova::Api::VisionConfig::ExtrinsicParameters input, kortex_driver::ExtrinsicParameters &output) +{ + + ToRosData(input.rotation(), output.rotation); + ToRosData(input.translation(), output.translation); + + + + return 0; +} +int ToRosData(Kinova::Api::VisionConfig::RotationMatrix input, kortex_driver::VisionConfig_RotationMatrix &output) +{ + + ToRosData(input.row1(), output.row1); + ToRosData(input.row2(), output.row2); + ToRosData(input.row3(), output.row3); + + + + return 0; +} +int ToRosData(Kinova::Api::VisionConfig::RotationMatrixRow input, kortex_driver::VisionConfig_RotationMatrixRow &output) +{ + + output.column1 = input.column1(); + output.column2 = input.column2(); + output.column3 = input.column3(); + + + + return 0; +} +int ToRosData(Kinova::Api::VisionConfig::TranslationVector input, kortex_driver::TranslationVector &output) +{ + + output.t_x = input.t_x(); + output.t_y = input.t_y(); + output.t_z = input.t_z(); + + + + return 0; +} diff --git a/kortex_driver/src/generated/visionconfig_services.cpp b/kortex_driver/src/generated/visionconfig_services.cpp new file mode 100644 index 00000000..0ddada0b --- /dev/null +++ b/kortex_driver/src/generated/visionconfig_services.cpp @@ -0,0 +1,483 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "kortex_driver/generated/common_proto_converter.h" +#include "kortex_driver/generated/common_ros_converter.h" +#include "kortex_driver/generated/actuatorconfig_proto_converter.h" +#include "kortex_driver/generated/actuatorconfig_ros_converter.h" +#include "kortex_driver/generated/actuatorcyclic_proto_converter.h" +#include "kortex_driver/generated/actuatorcyclic_ros_converter.h" +#include "kortex_driver/generated/productconfiguration_proto_converter.h" +#include "kortex_driver/generated/productconfiguration_ros_converter.h" +#include "kortex_driver/generated/base_proto_converter.h" +#include "kortex_driver/generated/base_ros_converter.h" +#include "kortex_driver/generated/grippercyclic_proto_converter.h" +#include "kortex_driver/generated/grippercyclic_ros_converter.h" +#include "kortex_driver/generated/interconnectcyclic_proto_converter.h" +#include "kortex_driver/generated/interconnectcyclic_ros_converter.h" +#include "kortex_driver/generated/basecyclic_proto_converter.h" +#include "kortex_driver/generated/basecyclic_ros_converter.h" +#include "kortex_driver/generated/controlconfig_proto_converter.h" +#include "kortex_driver/generated/controlconfig_ros_converter.h" +#include "kortex_driver/generated/deviceconfig_proto_converter.h" +#include "kortex_driver/generated/deviceconfig_ros_converter.h" +#include "kortex_driver/generated/devicemanager_proto_converter.h" +#include "kortex_driver/generated/devicemanager_ros_converter.h" +#include "kortex_driver/generated/interconnectconfig_proto_converter.h" +#include "kortex_driver/generated/interconnectconfig_ros_converter.h" +#include "kortex_driver/generated/visionconfig_proto_converter.h" +#include "kortex_driver/generated/visionconfig_ros_converter.h" +#include "kortex_driver/generated/visionconfig_services.h" + +VisionConfigServices::VisionConfigServices(ros::NodeHandle& n, Kinova::Api::VisionConfig::VisionConfigClient* visionconfig, uint32_t device_id, uint32_t timeout_ms): + m_n(n), + m_visionconfig(visionconfig), + m_current_device_id(device_id) +{ + m_api_options.timeout_ms = timeout_ms; + + m_pub_Error = m_n.advertise("kortex_error", 1000); + m_pub_VisionTopic = m_n.advertise("vision_topic", 1000); + + m_serviceSetDeviceID = n.advertiseService("vision_config/set_device_id", &VisionConfigServices::SetDeviceID, this); + m_serviceSetApiOptions = n.advertiseService("vision_config/set_api_options", &VisionConfigServices::SetApiOptions, this); + + m_serviceSetSensorSettings = m_n.advertiseService("vision_config/set_sensor_settings", &VisionConfigServices::SetSensorSettings, this); + m_serviceGetSensorSettings = m_n.advertiseService("vision_config/get_sensor_settings", &VisionConfigServices::GetSensorSettings, this); + m_serviceGetOptionValue = m_n.advertiseService("vision_config/get_option_value", &VisionConfigServices::GetOptionValue, this); + m_serviceSetOptionValue = m_n.advertiseService("vision_config/set_option_value", &VisionConfigServices::SetOptionValue, this); + m_serviceGetOptionInformation = m_n.advertiseService("vision_config/get_option_information", &VisionConfigServices::GetOptionInformation, this); + m_serviceOnNotificationVisionTopic = m_n.advertiseService("vision_config/activate_publishing_of_vision_topic", &VisionConfigServices::OnNotificationVisionTopic, this); + m_serviceDoSensorFocusAction = m_n.advertiseService("vision_config/do_sensor_focus_action", &VisionConfigServices::DoSensorFocusAction, this); + m_serviceGetIntrinsicParameters = m_n.advertiseService("vision_config/get_intrinsic_parameters", &VisionConfigServices::GetIntrinsicParameters, this); + m_serviceGetIntrinsicParametersProfile = m_n.advertiseService("vision_config/get_intrinsic_parameters_profile", &VisionConfigServices::GetIntrinsicParametersProfile, this); + m_serviceSetIntrinsicParameters = m_n.advertiseService("vision_config/set_intrinsic_parameters", &VisionConfigServices::SetIntrinsicParameters, this); + m_serviceGetExtrinsicParameters = m_n.advertiseService("vision_config/get_extrinsic_parameters", &VisionConfigServices::GetExtrinsicParameters, this); + m_serviceSetExtrinsicParameters = m_n.advertiseService("vision_config/set_extrinsic_parameters", &VisionConfigServices::SetExtrinsicParameters, this); +} + +bool VisionConfigServices::SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res) +{ + m_current_device_id = req.device_id; + + return true; +} + +bool VisionConfigServices::SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res) +{ + m_api_options.timeout_ms = req.input.timeout_ms; + + return true; +} + + +bool VisionConfigServices::SetSensorSettings(kortex_driver::SetSensorSettings::Request &req, kortex_driver::SetSensorSettings::Response &res) +{ + Kinova::Api::VisionConfig::SensorSettings input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_visionconfig->SetSensorSettings(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool VisionConfigServices::GetSensorSettings(kortex_driver::GetSensorSettings::Request &req, kortex_driver::GetSensorSettings::Response &res) +{ + Kinova::Api::VisionConfig::SensorIdentifier input; + ToProtoData(req.input, &input); + Kinova::Api::VisionConfig::SensorSettings output; + + kortex_driver::KortexError result_error; + + try + { + output = m_visionconfig->GetSensorSettings(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool VisionConfigServices::GetOptionValue(kortex_driver::GetOptionValue::Request &req, kortex_driver::GetOptionValue::Response &res) +{ + Kinova::Api::VisionConfig::OptionIdentifier input; + ToProtoData(req.input, &input); + Kinova::Api::VisionConfig::OptionValue output; + + kortex_driver::KortexError result_error; + + try + { + output = m_visionconfig->GetOptionValue(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool VisionConfigServices::SetOptionValue(kortex_driver::SetOptionValue::Request &req, kortex_driver::SetOptionValue::Response &res) +{ + Kinova::Api::VisionConfig::OptionValue input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_visionconfig->SetOptionValue(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool VisionConfigServices::GetOptionInformation(kortex_driver::GetOptionInformation::Request &req, kortex_driver::GetOptionInformation::Response &res) +{ + Kinova::Api::VisionConfig::OptionIdentifier input; + ToProtoData(req.input, &input); + Kinova::Api::VisionConfig::OptionInformation output; + + kortex_driver::KortexError result_error; + + try + { + output = m_visionconfig->GetOptionInformation(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool VisionConfigServices::OnNotificationVisionTopic(kortex_driver::OnNotificationVisionTopic::Request &req, kortex_driver::OnNotificationVisionTopic::Response &res) +{ + Kinova::Api::Common::NotificationOptions input; + ToProtoData(req.input, &input); + Kinova::Api::Common::NotificationHandle output; + + kortex_driver::KortexError result_error; + + try + { + std::function< void (Kinova::Api::VisionConfig::VisionNotification) > callback = std::bind(&VisionConfigServices::cb_VisionTopic, this, std::placeholders::_1); + output = m_visionconfig->OnNotificationVisionTopic(callback, input, m_current_device_id); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} +void VisionConfigServices::cb_VisionTopic(Kinova::Api::VisionConfig::VisionNotification notif) +{ + kortex_driver::VisionNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_VisionTopic.publish(ros_msg); +} + +bool VisionConfigServices::DoSensorFocusAction(kortex_driver::DoSensorFocusAction::Request &req, kortex_driver::DoSensorFocusAction::Response &res) +{ + Kinova::Api::VisionConfig::SensorFocusAction input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_visionconfig->DoSensorFocusAction(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool VisionConfigServices::GetIntrinsicParameters(kortex_driver::GetIntrinsicParameters::Request &req, kortex_driver::GetIntrinsicParameters::Response &res) +{ + Kinova::Api::VisionConfig::SensorIdentifier input; + ToProtoData(req.input, &input); + Kinova::Api::VisionConfig::IntrinsicParameters output; + + kortex_driver::KortexError result_error; + + try + { + output = m_visionconfig->GetIntrinsicParameters(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool VisionConfigServices::GetIntrinsicParametersProfile(kortex_driver::GetIntrinsicParametersProfile::Request &req, kortex_driver::GetIntrinsicParametersProfile::Response &res) +{ + Kinova::Api::VisionConfig::IntrinsicProfileIdentifier input; + ToProtoData(req.input, &input); + Kinova::Api::VisionConfig::IntrinsicParameters output; + + kortex_driver::KortexError result_error; + + try + { + output = m_visionconfig->GetIntrinsicParametersProfile(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool VisionConfigServices::SetIntrinsicParameters(kortex_driver::SetIntrinsicParameters::Request &req, kortex_driver::SetIntrinsicParameters::Response &res) +{ + Kinova::Api::VisionConfig::IntrinsicParameters input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_visionconfig->SetIntrinsicParameters(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} + +bool VisionConfigServices::GetExtrinsicParameters(kortex_driver::GetExtrinsicParameters::Request &req, kortex_driver::GetExtrinsicParameters::Response &res) +{ + Kinova::Api::VisionConfig::ExtrinsicParameters output; + + kortex_driver::KortexError result_error; + + try + { + output = m_visionconfig->GetExtrinsicParameters(m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + ToRosData(output, res.output); + return true; +} + +bool VisionConfigServices::SetExtrinsicParameters(kortex_driver::SetExtrinsicParameters::Request &req, kortex_driver::SetExtrinsicParameters::Response &res) +{ + Kinova::Api::VisionConfig::ExtrinsicParameters input; + ToProtoData(req.input, &input); + kortex_driver::KortexError result_error; + + try + { + m_visionconfig->SetExtrinsicParameters(input, m_current_device_id, m_api_options); + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + return true; +} diff --git a/kortex_driver/src/main.cpp b/kortex_driver/src/main.cpp deleted file mode 100644 index b0784e11..00000000 --- a/kortex_driver/src/main.cpp +++ /dev/null @@ -1,277 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "node.h" -#include "math_util.h" - -#include -#include - -#define JOINT_COUNT 7 - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "BaseServices"); - - uint32_t cyclic_data_rate = 100; - - ros::NodeHandle n; - bool valid_ip = false; - - if(argc > 2) - { - ROS_INFO("Connecting to IP = %s - node refresh rate = %s", argv[1], argv[2]); - - //Converting the second parameter(the cyclic rate) to an unsigned int variable. - stringstream tempRate; - tempRate << argv[2]; - tempRate >> cyclic_data_rate; - if(tempRate.fail() || tempRate.bad()) - { - ROS_INFO("ERROR - Bad error rate, shutting down the node..."); - ros::shutdown(); - return 0; - } - } - else - { - ROS_INFO("You need to provide an IP adresse as the first parameter and a cycle rate(Hertz) as the second parameter. ex: rosrun package node 192.168.1.1 100"); - ros::shutdown(); - return 0; - } - - BaseServices services_object(argv[1], n); - - ros::ServiceServer serviceSetDeviceID = n.advertiseService("SetDeviceID", &BaseServices::SetDeviceID, &services_object); - - ros::ServiceServer serviceRefresh = n.advertiseService("Refresh", &BaseServices::Refresh, &services_object); - ros::ServiceServer serviceRefreshCommand = n.advertiseService("RefreshCommand", &BaseServices::RefreshCommand, &services_object); - ros::ServiceServer serviceRefreshFeedback = n.advertiseService("RefreshFeedback", &BaseServices::RefreshFeedback, &services_object); - ros::ServiceServer serviceRefreshCustomData = n.advertiseService("RefreshCustomData", &BaseServices::RefreshCustomData, &services_object); - ros::ServiceServer serviceCreateUserProfile = n.advertiseService("CreateUserProfile", &BaseServices::CreateUserProfile, &services_object); - ros::ServiceServer serviceUpdateUserProfile = n.advertiseService("UpdateUserProfile", &BaseServices::UpdateUserProfile, &services_object); - ros::ServiceServer serviceReadUserProfile = n.advertiseService("ReadUserProfile", &BaseServices::ReadUserProfile, &services_object); - ros::ServiceServer serviceDeleteUserProfile = n.advertiseService("DeleteUserProfile", &BaseServices::DeleteUserProfile, &services_object); - ros::ServiceServer serviceReadAllUserProfiles = n.advertiseService("ReadAllUserProfiles", &BaseServices::ReadAllUserProfiles, &services_object); - ros::ServiceServer serviceReadAllUsers = n.advertiseService("ReadAllUsers", &BaseServices::ReadAllUsers, &services_object); - ros::ServiceServer serviceChangePassword = n.advertiseService("ChangePassword", &BaseServices::ChangePassword, &services_object); - ros::ServiceServer serviceCreateSequence = n.advertiseService("CreateSequence", &BaseServices::CreateSequence, &services_object); - ros::ServiceServer serviceUpdateSequence = n.advertiseService("UpdateSequence", &BaseServices::UpdateSequence, &services_object); - ros::ServiceServer serviceReadSequence = n.advertiseService("ReadSequence", &BaseServices::ReadSequence, &services_object); - ros::ServiceServer serviceDeleteSequence = n.advertiseService("DeleteSequence", &BaseServices::DeleteSequence, &services_object); - ros::ServiceServer serviceReadAllSequences = n.advertiseService("ReadAllSequences", &BaseServices::ReadAllSequences, &services_object); - ros::ServiceServer serviceDeleteSequenceTask = n.advertiseService("DeleteSequenceTask", &BaseServices::DeleteSequenceTask, &services_object); - ros::ServiceServer serviceDeleteAllSequenceTasks = n.advertiseService("DeleteAllSequenceTasks", &BaseServices::DeleteAllSequenceTasks, &services_object); - ros::ServiceServer servicePlaySequence = n.advertiseService("PlaySequence", &BaseServices::PlaySequence, &services_object); - ros::ServiceServer servicePlayAdvancedSequence = n.advertiseService("PlayAdvancedSequence", &BaseServices::PlayAdvancedSequence, &services_object); - ros::ServiceServer serviceStopSequence = n.advertiseService("StopSequence", &BaseServices::StopSequence, &services_object); - ros::ServiceServer servicePauseSequence = n.advertiseService("PauseSequence", &BaseServices::PauseSequence, &services_object); - ros::ServiceServer serviceResumeSequence = n.advertiseService("ResumeSequence", &BaseServices::ResumeSequence, &services_object); - ros::ServiceServer serviceCreateProtectionZone = n.advertiseService("CreateProtectionZone", &BaseServices::CreateProtectionZone, &services_object); - ros::ServiceServer serviceUpdateProtectionZone = n.advertiseService("UpdateProtectionZone", &BaseServices::UpdateProtectionZone, &services_object); - ros::ServiceServer serviceReadProtectionZone = n.advertiseService("ReadProtectionZone", &BaseServices::ReadProtectionZone, &services_object); - ros::ServiceServer serviceDeleteProtectionZone = n.advertiseService("DeleteProtectionZone", &BaseServices::DeleteProtectionZone, &services_object); - ros::ServiceServer serviceReadAllProtectionZones = n.advertiseService("ReadAllProtectionZones", &BaseServices::ReadAllProtectionZones, &services_object); - ros::ServiceServer serviceCreateMapping = n.advertiseService("CreateMapping", &BaseServices::CreateMapping, &services_object); - ros::ServiceServer serviceReadMapping = n.advertiseService("ReadMapping", &BaseServices::ReadMapping, &services_object); - ros::ServiceServer serviceReadAllMappings = n.advertiseService("ReadAllMappings", &BaseServices::ReadAllMappings, &services_object); - ros::ServiceServer serviceCreateMap = n.advertiseService("CreateMap", &BaseServices::CreateMap, &services_object); - ros::ServiceServer serviceReadAllMaps = n.advertiseService("ReadAllMaps", &BaseServices::ReadAllMaps, &services_object); - ros::ServiceServer serviceActivateMap = n.advertiseService("ActivateMap", &BaseServices::ActivateMap, &services_object); - ros::ServiceServer serviceCreateAction = n.advertiseService("CreateAction", &BaseServices::CreateAction, &services_object); - ros::ServiceServer serviceReadAction = n.advertiseService("ReadAction", &BaseServices::ReadAction, &services_object); - ros::ServiceServer serviceReadAllActions = n.advertiseService("ReadAllActions", &BaseServices::ReadAllActions, &services_object); - ros::ServiceServer serviceDeleteAction = n.advertiseService("DeleteAction", &BaseServices::DeleteAction, &services_object); - ros::ServiceServer serviceUpdateAction = n.advertiseService("UpdateAction", &BaseServices::UpdateAction, &services_object); - ros::ServiceServer serviceExecuteActionFromReference = n.advertiseService("ExecuteActionFromReference", &BaseServices::ExecuteActionFromReference, &services_object); - ros::ServiceServer serviceExecuteAction = n.advertiseService("ExecuteAction", &BaseServices::ExecuteAction, &services_object); - ros::ServiceServer servicePauseAction = n.advertiseService("PauseAction", &BaseServices::PauseAction, &services_object); - ros::ServiceServer serviceStopAction = n.advertiseService("StopAction", &BaseServices::StopAction, &services_object); - ros::ServiceServer serviceResumeAction = n.advertiseService("ResumeAction", &BaseServices::ResumeAction, &services_object); - ros::ServiceServer serviceGetIPv4Configuration = n.advertiseService("GetIPv4Configuration", &BaseServices::GetIPv4Configuration, &services_object); - ros::ServiceServer serviceSetIPv4Configuration = n.advertiseService("SetIPv4Configuration", &BaseServices::SetIPv4Configuration, &services_object); - ros::ServiceServer serviceSetCommunicationInterfaceEnable = n.advertiseService("SetCommunicationInterfaceEnable", &BaseServices::SetCommunicationInterfaceEnable, &services_object); - ros::ServiceServer serviceIsCommunicationInterfaceEnable = n.advertiseService("IsCommunicationInterfaceEnable", &BaseServices::IsCommunicationInterfaceEnable, &services_object); - ros::ServiceServer serviceGetAvailableWifi = n.advertiseService("GetAvailableWifi", &BaseServices::GetAvailableWifi, &services_object); - ros::ServiceServer serviceGetWifiInformation = n.advertiseService("GetWifiInformation", &BaseServices::GetWifiInformation, &services_object); - ros::ServiceServer serviceAddWifiConfiguration = n.advertiseService("AddWifiConfiguration", &BaseServices::AddWifiConfiguration, &services_object); - ros::ServiceServer serviceDeleteWifiConfiguration = n.advertiseService("DeleteWifiConfiguration", &BaseServices::DeleteWifiConfiguration, &services_object); - ros::ServiceServer serviceGetAllConfiguredWifis = n.advertiseService("GetAllConfiguredWifis", &BaseServices::GetAllConfiguredWifis, &services_object); - ros::ServiceServer serviceConnectWifi = n.advertiseService("ConnectWifi", &BaseServices::ConnectWifi, &services_object); - ros::ServiceServer serviceDisconnectWifi = n.advertiseService("DisconnectWifi", &BaseServices::DisconnectWifi, &services_object); - ros::ServiceServer serviceGetConnectedWifiInformation = n.advertiseService("GetConnectedWifiInformation", &BaseServices::GetConnectedWifiInformation, &services_object); - ros::ServiceServer serviceUnsubscribe = n.advertiseService("Unsubscribe", &BaseServices::Unsubscribe, &services_object); - ros::ServiceServer serviceOnNotificationConfigurationChangeTopic = n.advertiseService("OnNotificationConfigurationChangeTopic", &BaseServices::OnNotificationConfigurationChangeTopic, &services_object); - ros::ServiceServer serviceOnNotificationMappingInfoTopic = n.advertiseService("OnNotificationMappingInfoTopic", &BaseServices::OnNotificationMappingInfoTopic, &services_object); - ros::ServiceServer serviceOnNotificationControlModeTopic = n.advertiseService("OnNotificationControlModeTopic", &BaseServices::OnNotificationControlModeTopic, &services_object); - ros::ServiceServer serviceOnNotificationOperatingModeTopic = n.advertiseService("OnNotificationOperatingModeTopic", &BaseServices::OnNotificationOperatingModeTopic, &services_object); - ros::ServiceServer serviceOnNotificationSequenceInfoTopic = n.advertiseService("OnNotificationSequenceInfoTopic", &BaseServices::OnNotificationSequenceInfoTopic, &services_object); - ros::ServiceServer serviceOnNotificationProtectionZoneTopic = n.advertiseService("OnNotificationProtectionZoneTopic", &BaseServices::OnNotificationProtectionZoneTopic, &services_object); - ros::ServiceServer serviceOnNotificationUserTopic = n.advertiseService("OnNotificationUserTopic", &BaseServices::OnNotificationUserTopic, &services_object); - ros::ServiceServer serviceOnNotificationControllerTopic = n.advertiseService("OnNotificationControllerTopic", &BaseServices::OnNotificationControllerTopic, &services_object); - ros::ServiceServer serviceOnNotificationActionTopic = n.advertiseService("OnNotificationActionTopic", &BaseServices::OnNotificationActionTopic, &services_object); - ros::ServiceServer serviceOnNotificationRobotEventTopic = n.advertiseService("OnNotificationRobotEventTopic", &BaseServices::OnNotificationRobotEventTopic, &services_object); - ros::ServiceServer serviceGetFwdKinematics = n.advertiseService("GetFwdKinematics", &BaseServices::GetFwdKinematics, &services_object); - ros::ServiceServer servicePlayCartesianTrajectory = n.advertiseService("PlayCartesianTrajectory", &BaseServices::PlayCartesianTrajectory, &services_object); - ros::ServiceServer servicePlayCartesianTrajectoryPosition = n.advertiseService("PlayCartesianTrajectoryPosition", &BaseServices::PlayCartesianTrajectoryPosition, &services_object); - ros::ServiceServer servicePlayCartesianTrajectoryOrientation = n.advertiseService("PlayCartesianTrajectoryOrientation", &BaseServices::PlayCartesianTrajectoryOrientation, &services_object); - ros::ServiceServer servicePause = n.advertiseService("Pause", &BaseServices::Pause, &services_object); - ros::ServiceServer serviceResume = n.advertiseService("Resume", &BaseServices::Resume, &services_object); - ros::ServiceServer serviceGetMeasuredCartesianPose = n.advertiseService("GetMeasuredCartesianPose", &BaseServices::GetMeasuredCartesianPose, &services_object); - ros::ServiceServer serviceGetCommandedCartesianPose = n.advertiseService("GetCommandedCartesianPose", &BaseServices::GetCommandedCartesianPose, &services_object); - ros::ServiceServer serviceGetTargetedCartesianPose = n.advertiseService("GetTargetedCartesianPose", &BaseServices::GetTargetedCartesianPose, &services_object); - ros::ServiceServer serviceSendTwistCommand = n.advertiseService("SendTwistCommand", &BaseServices::SendTwistCommand, &services_object); - ros::ServiceServer serviceGetMeasuredTwist = n.advertiseService("GetMeasuredTwist", &BaseServices::GetMeasuredTwist, &services_object); - ros::ServiceServer serviceGetCommandedTwist = n.advertiseService("GetCommandedTwist", &BaseServices::GetCommandedTwist, &services_object); - ros::ServiceServer servicePlayJointTrajectory = n.advertiseService("PlayJointTrajectory", &BaseServices::PlayJointTrajectory, &services_object); - ros::ServiceServer servicePlaySelectedJointTrajectory = n.advertiseService("PlaySelectedJointTrajectory", &BaseServices::PlaySelectedJointTrajectory, &services_object); - ros::ServiceServer serviceGetMeasuredJointAngles = n.advertiseService("GetMeasuredJointAngles", &BaseServices::GetMeasuredJointAngles, &services_object); - ros::ServiceServer serviceGetCommandedJointAngles = n.advertiseService("GetCommandedJointAngles", &BaseServices::GetCommandedJointAngles, &services_object); - ros::ServiceServer serviceSendJointSpeedsCommmand = n.advertiseService("SendJointSpeedsCommmand", &BaseServices::SendJointSpeedsCommmand, &services_object); - ros::ServiceServer serviceSendSelectedJointSpeedCommand = n.advertiseService("SendSelectedJointSpeedCommand", &BaseServices::SendSelectedJointSpeedCommand, &services_object); - ros::ServiceServer serviceGetMeasuredJointSpeeds = n.advertiseService("GetMeasuredJointSpeeds", &BaseServices::GetMeasuredJointSpeeds, &services_object); - ros::ServiceServer serviceGetCommandedJointSpeeds = n.advertiseService("GetCommandedJointSpeeds", &BaseServices::GetCommandedJointSpeeds, &services_object); - ros::ServiceServer serviceSendGripperCommand = n.advertiseService("SendGripperCommand", &BaseServices::SendGripperCommand, &services_object); - ros::ServiceServer serviceGetMeasuredGripperMovement = n.advertiseService("GetMeasuredGripperMovement", &BaseServices::GetMeasuredGripperMovement, &services_object); - ros::ServiceServer serviceGetCommandedGripperMovement = n.advertiseService("GetCommandedGripperMovement", &BaseServices::GetCommandedGripperMovement, &services_object); - ros::ServiceServer serviceSetAdmittance = n.advertiseService("SetAdmittance", &BaseServices::SetAdmittance, &services_object); - ros::ServiceServer serviceSetTwistWrenchReferenceFrame = n.advertiseService("SetTwistWrenchReferenceFrame", &BaseServices::SetTwistWrenchReferenceFrame, &services_object); - ros::ServiceServer serviceSetOperatingMode = n.advertiseService("SetOperatingMode", &BaseServices::SetOperatingMode, &services_object); - ros::ServiceServer serviceApplyEmergencyStop = n.advertiseService("ApplyEmergencyStop", &BaseServices::ApplyEmergencyStop, &services_object); - ros::ServiceServer serviceClearFaults = n.advertiseService("ClearFaults", &BaseServices::ClearFaults, &services_object); - ros::ServiceServer serviceGetActiveMap = n.advertiseService("GetActiveMap", &BaseServices::GetActiveMap, &services_object); - ros::ServiceServer serviceGetControlMode = n.advertiseService("GetControlMode", &BaseServices::GetControlMode, &services_object); - ros::ServiceServer serviceGetOperatingMode = n.advertiseService("GetOperatingMode", &BaseServices::GetOperatingMode, &services_object); - ros::ServiceServer serviceSetServoingMode = n.advertiseService("SetServoingMode", &BaseServices::SetServoingMode, &services_object); - ros::ServiceServer serviceGetServoingMode = n.advertiseService("GetServoingMode", &BaseServices::GetServoingMode, &services_object); - ros::ServiceServer serviceOnNotificationServoingModeTopic = n.advertiseService("OnNotificationServoingModeTopic", &BaseServices::OnNotificationServoingModeTopic, &services_object); - ros::ServiceServer serviceGetSequenceState = n.advertiseService("GetSequenceState", &BaseServices::GetSequenceState, &services_object); - ros::ServiceServer serviceGetProtectionZoneState = n.advertiseService("GetProtectionZoneState", &BaseServices::GetProtectionZoneState, &services_object); - ros::ServiceServer serviceGetActionExecutionState = n.advertiseService("GetActionExecutionState", &BaseServices::GetActionExecutionState, &services_object); - ros::ServiceServer serviceRestoreFactorySettings = n.advertiseService("RestoreFactorySettings", &BaseServices::RestoreFactorySettings, &services_object); - ros::ServiceServer serviceRestoreNetworkFactorySettings = n.advertiseService("RestoreNetworkFactorySettings", &BaseServices::RestoreNetworkFactorySettings, &services_object); - ros::ServiceServer serviceReboot = n.advertiseService("Reboot", &BaseServices::Reboot, &services_object); - ros::ServiceServer serviceOnNotificationFactoryTopic = n.advertiseService("OnNotificationFactoryTopic", &BaseServices::OnNotificationFactoryTopic, &services_object); - ros::ServiceServer serviceGetAllConnectedControllers = n.advertiseService("GetAllConnectedControllers", &BaseServices::GetAllConnectedControllers, &services_object); - ros::ServiceServer serviceGetControllerState = n.advertiseService("GetControllerState", &BaseServices::GetControllerState, &services_object); - ros::ServiceServer serviceGetActuatorCount = n.advertiseService("GetActuatorCount", &BaseServices::GetActuatorCount, &services_object); - ros::ServiceServer serviceStartWifiScan = n.advertiseService("StartWifiScan", &BaseServices::StartWifiScan, &services_object); - ros::ServiceServer serviceGetConfiguredWifi = n.advertiseService("GetConfiguredWifi", &BaseServices::GetConfiguredWifi, &services_object); - ros::ServiceServer serviceOnNotificationNetworkTopic = n.advertiseService("OnNotificationNetworkTopic", &BaseServices::OnNotificationNetworkTopic, &services_object); - ros::ServiceServer serviceGetArmState = n.advertiseService("GetArmState", &BaseServices::GetArmState, &services_object); - ros::ServiceServer serviceOnNotificationArmStateTopic = n.advertiseService("OnNotificationArmStateTopic", &BaseServices::OnNotificationArmStateTopic, &services_object); - ros::ServiceServer serviceGetIPv4Information = n.advertiseService("GetIPv4Information", &BaseServices::GetIPv4Information, &services_object); - ros::ServiceServer serviceSetCountryCode = n.advertiseService("SetCountryCode", &BaseServices::SetCountryCode, &services_object); - ros::ServiceServer serviceGetCountryCode = n.advertiseService("GetCountryCode", &BaseServices::GetCountryCode, &services_object); - - - ROS_INFO("Node's services initialized correctly."); - - ros::Publisher pub_base_feedback = n.advertise("base_feedback", 1000); - ros::Publisher pub_joint_state = n.advertise("base_feedback/joint_state", 1000); - - kortex_driver::Feedback base_feedback; - kortex_driver::RefreshFeedback::Request req; - kortex_driver::RefreshFeedback::Response res; - - sensor_msgs::JointState joint_state; - - ros::Rate rate(cyclic_data_rate); - while (!ros::isShuttingDown()) - { - services_object.RefreshFeedback(req, res); - - base_feedback.frame_id = res.output.frame_id; - - base_feedback.base.arm_voltage = res.output.base.arm_voltage; - base_feedback.base.arm_current = res.output.base.arm_current; - base_feedback.base.temperature_cpu = res.output.base.temperature_cpu; - base_feedback.base.temperature_ambient = res.output.base.temperature_ambient; - base_feedback.base.imu_acceleration_x = res.output.base.imu_acceleration_x; - base_feedback.base.imu_acceleration_y = res.output.base.imu_acceleration_y; - base_feedback.base.imu_acceleration_z = res.output.base.imu_acceleration_z; - base_feedback.base.imu_angular_velocity_x = res.output.base.imu_angular_velocity_x; - base_feedback.base.imu_angular_velocity_y = res.output.base.imu_angular_velocity_y; - base_feedback.base.imu_angular_velocity_z = res.output.base.imu_angular_velocity_z; - base_feedback.base.tool_pose_x = res.output.base.tool_pose_x; - base_feedback.base.tool_pose_y = res.output.base.tool_pose_y; - base_feedback.base.tool_pose_z = res.output.base.tool_pose_z; - base_feedback.base.tool_pose_theta_x = res.output.base.tool_pose_theta_x; - base_feedback.base.tool_pose_theta_y = res.output.base.tool_pose_theta_y; - base_feedback.base.tool_pose_theta_z = res.output.base.tool_pose_theta_z; - base_feedback.base.tool_external_wrench_force_x = res.output.base.tool_external_wrench_force_x; - base_feedback.base.tool_external_wrench_force_y = res.output.base.tool_external_wrench_force_y; - base_feedback.base.tool_external_wrench_force_z = res.output.base.tool_external_wrench_force_z; - base_feedback.base.tool_external_wrench_torque_x = res.output.base.tool_external_wrench_torque_x; - base_feedback.base.tool_external_wrench_torque_y = res.output.base.tool_external_wrench_torque_y; - base_feedback.base.tool_external_wrench_torque_z = res.output.base.tool_external_wrench_torque_z; - base_feedback.base.fault_bank_a = res.output.base.fault_bank_a; - base_feedback.base.fault_bank_b = res.output.base.fault_bank_b; - base_feedback.base.warning_bank_a = res.output.base.warning_bank_a; - base_feedback.base.warning_bank_b = res.output.base.warning_bank_b; - - base_feedback.actuators.clear(); - - joint_state.position.resize(JOINT_COUNT); - joint_state.velocity.resize(JOINT_COUNT); - joint_state.effort.resize(JOINT_COUNT); - joint_state.name.resize(JOINT_COUNT); - - for(int i = 0; i < JOINT_COUNT; i++) - { - kortex_driver::ActuatorFeedback temp; - - temp.status_flags = res.output.actuators[i].status_flags; - temp.jitter_comm = res.output.actuators[i].jitter_comm; - temp.position = res.output.actuators[i].position; - temp.velocity = res.output.actuators[i].velocity; - temp.torque = res.output.actuators[i].torque; - temp.current_motor = res.output.actuators[i].current_motor; - temp.voltage = res.output.actuators[i].voltage; - temp.temperature_motor = res.output.actuators[i].temperature_motor; - temp.temperature_core = res.output.actuators[i].temperature_core; - temp.fault_bank_a = res.output.actuators[i].fault_bank_a; - temp.fault_bank_b = res.output.actuators[i].fault_bank_b; - temp.warning_bank_a = res.output.actuators[i].warning_bank_a; - temp.warning_bank_b = res.output.actuators[i].warning_bank_b; - - base_feedback.actuators.push_back(temp); - - joint_state.name[i] = "joint_" + std::to_string(i + 1); - joint_state.position[i] = TO_RAD(res.output.actuators[i].position); - joint_state.velocity[i] = TO_RAD(res.output.actuators[i].velocity); - joint_state.effort[i] = res.output.actuators[i].torque; - } - base_feedback.interconnect.position = res.output.interconnect.position; - - - - joint_state.header.stamp = ros::Time::now(); - joint_state.header.frame_id = std::to_string(res.output.frame_id); - - pub_base_feedback.publish(base_feedback); - pub_joint_state.publish(joint_state); - - - ros::spinOnce(); - - - - rate.sleep(); - } - - return 1; -} \ No newline at end of file diff --git a/kortex_driver/src/node.cpp b/kortex_driver/src/node.cpp deleted file mode 100644 index 33dd9198..00000000 --- a/kortex_driver/src/node.cpp +++ /dev/null @@ -1,4010 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "node.h" -#include "common_ros_converter.h" -#include "common_proto_converter.h" -#include "basecyclic_ros_converter.h" -#include "basecyclic_proto_converter.h" - -#include "base_ros_converter.h" -#include "base_proto_converter.h" -BaseServices::BaseServices(char* ip, ros::NodeHandle& n) : m_n(n) -{ - m_transport = new TransportClientUdp(); - m_transport->connect(ip, 10000); - - m_router = new RouterClient(m_transport, [](KError err) { cout << "_________ callback error _________" << err.toString(); }); - m_CurrentDeviceID = 0; - m_apiOptions.timeout_ms = 3000; - - m_basecyclic = new BaseCyclic::BaseCyclicClient(m_router); - m_base = new Base::BaseClient(m_router); - m_SessionManager = new SessionManager(m_router); - auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); - - createSessionInfo.set_username("admin"); - createSessionInfo.set_password("admin"); - createSessionInfo.set_session_inactivity_timeout(35000); - - m_SessionManager->CreateSession(createSessionInfo); - std::cout << "\nSession Created\n"; - - m_pub_Error = m_n.advertise("KortexError", 1000); - m_pub_ConfigurationChangeTopic = m_n.advertise("ConfigurationChangeTopic", 1000); - m_pub_MappingInfoTopic = m_n.advertise("MappingInfoTopic", 1000); - m_pub_ControlModeTopic = m_n.advertise("ControlModeTopic", 1000); - m_pub_OperatingModeTopic = m_n.advertise("OperatingModeTopic", 1000); - m_pub_SequenceInfoTopic = m_n.advertise("SequenceInfoTopic", 1000); - m_pub_ProtectionZoneTopic = m_n.advertise("ProtectionZoneTopic", 1000); - m_pub_UserTopic = m_n.advertise("UserTopic", 1000); - m_pub_ControllerTopic = m_n.advertise("ControllerTopic", 1000); - m_pub_ActionTopic = m_n.advertise("ActionTopic", 1000); - m_pub_RobotEventTopic = m_n.advertise("RobotEventTopic", 1000); - m_pub_ServoingModeTopic = m_n.advertise("ServoingModeTopic", 1000); - m_pub_FactoryTopic = m_n.advertise("FactoryTopic", 1000); - m_pub_NetworkTopic = m_n.advertise("NetworkTopic", 1000); - m_pub_ArmStateTopic = m_n.advertise("ArmStateTopic", 1000);std::this_thread::sleep_for(std::chrono::milliseconds(2000)); -} - -bool BaseServices::SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res) -{ - m_CurrentDeviceID = req.device_id; - - return true; -} - -bool BaseServices::SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res) -{ - m_apiOptions.timeout_ms = req.input.timeout_ms; - - return true; -} - - - - -bool BaseServices::Refresh(kortex_driver::Refresh::Request &req, kortex_driver::Refresh::Response &res) -{ - Command input; - ToProtoData(req.input, &input); - Feedback output; - kortex_driver::KortexError result_error; - - try - { - output = m_basecyclic->Refresh(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::RefreshCommand(kortex_driver::RefreshCommand::Request &req, kortex_driver::RefreshCommand::Response &res) -{ - Command input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_basecyclic->RefreshCommand(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::RefreshFeedback(kortex_driver::RefreshFeedback::Request &req, kortex_driver::RefreshFeedback::Response &res) -{ - Empty input; - Feedback output; - kortex_driver::KortexError result_error; - - try - { - output = m_basecyclic->RefreshFeedback(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::RefreshCustomData(kortex_driver::RefreshCustomData::Request &req, kortex_driver::RefreshCustomData::Response &res) -{ - CustomData input; - ToProtoData(req.input, &input); - CustomData output; - kortex_driver::KortexError result_error; - - try - { - output = m_basecyclic->RefreshCustomData(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - - - -bool BaseServices::CreateUserProfile(kortex_driver::CreateUserProfile::Request &req, kortex_driver::CreateUserProfile::Response &res) -{ - FullUserProfile input; - ToProtoData(req.input, &input); - UserProfileHandle output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->CreateUserProfile(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::UpdateUserProfile(kortex_driver::UpdateUserProfile::Request &req, kortex_driver::UpdateUserProfile::Response &res) -{ - UserProfile input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->UpdateUserProfile(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::ReadUserProfile(kortex_driver::ReadUserProfile::Request &req, kortex_driver::ReadUserProfile::Response &res) -{ - UserProfileHandle input; - ToProtoData(req.input, &input); - UserProfile output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->ReadUserProfile(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::DeleteUserProfile(kortex_driver::DeleteUserProfile::Request &req, kortex_driver::DeleteUserProfile::Response &res) -{ - UserProfileHandle input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->DeleteUserProfile(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::ReadAllUserProfiles(kortex_driver::ReadAllUserProfiles::Request &req, kortex_driver::ReadAllUserProfiles::Response &res) -{ - Empty input; - UserProfileList output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->ReadAllUserProfiles(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::ReadAllUsers(kortex_driver::ReadAllUsers::Request &req, kortex_driver::ReadAllUsers::Response &res) -{ - Empty input; - UserList output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->ReadAllUsers(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::ChangePassword(kortex_driver::ChangePassword::Request &req, kortex_driver::ChangePassword::Response &res) -{ - PasswordChange input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->ChangePassword(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::CreateSequence(kortex_driver::CreateSequence::Request &req, kortex_driver::CreateSequence::Response &res) -{ - Sequence input; - ToProtoData(req.input, &input); - SequenceHandle output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->CreateSequence(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::UpdateSequence(kortex_driver::UpdateSequence::Request &req, kortex_driver::UpdateSequence::Response &res) -{ - Sequence input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->UpdateSequence(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::ReadSequence(kortex_driver::ReadSequence::Request &req, kortex_driver::ReadSequence::Response &res) -{ - SequenceHandle input; - ToProtoData(req.input, &input); - Sequence output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->ReadSequence(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::DeleteSequence(kortex_driver::DeleteSequence::Request &req, kortex_driver::DeleteSequence::Response &res) -{ - SequenceHandle input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->DeleteSequence(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::ReadAllSequences(kortex_driver::ReadAllSequences::Request &req, kortex_driver::ReadAllSequences::Response &res) -{ - Empty input; - SequenceList output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->ReadAllSequences(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::DeleteSequenceTask(kortex_driver::DeleteSequenceTask::Request &req, kortex_driver::DeleteSequenceTask::Response &res) -{ - SequenceTaskHandle input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->DeleteSequenceTask(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::DeleteAllSequenceTasks(kortex_driver::DeleteAllSequenceTasks::Request &req, kortex_driver::DeleteAllSequenceTasks::Response &res) -{ - SequenceHandle input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->DeleteAllSequenceTasks(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::PlaySequence(kortex_driver::PlaySequence::Request &req, kortex_driver::PlaySequence::Response &res) -{ - SequenceHandle input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->PlaySequence(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::PlayAdvancedSequence(kortex_driver::PlayAdvancedSequence::Request &req, kortex_driver::PlayAdvancedSequence::Response &res) -{ - AdvancedSequenceHandle input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->PlayAdvancedSequence(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::StopSequence(kortex_driver::StopSequence::Request &req, kortex_driver::StopSequence::Response &res) -{ - Empty input; - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->StopSequence(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::PauseSequence(kortex_driver::PauseSequence::Request &req, kortex_driver::PauseSequence::Response &res) -{ - Empty input; - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->PauseSequence(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::ResumeSequence(kortex_driver::ResumeSequence::Request &req, kortex_driver::ResumeSequence::Response &res) -{ - Empty input; - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->ResumeSequence(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::CreateProtectionZone(kortex_driver::CreateProtectionZone::Request &req, kortex_driver::CreateProtectionZone::Response &res) -{ - ProtectionZone input; - ToProtoData(req.input, &input); - ProtectionZoneHandle output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->CreateProtectionZone(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::UpdateProtectionZone(kortex_driver::UpdateProtectionZone::Request &req, kortex_driver::UpdateProtectionZone::Response &res) -{ - ProtectionZone input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->UpdateProtectionZone(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::ReadProtectionZone(kortex_driver::ReadProtectionZone::Request &req, kortex_driver::ReadProtectionZone::Response &res) -{ - ProtectionZoneHandle input; - ToProtoData(req.input, &input); - ProtectionZone output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->ReadProtectionZone(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::DeleteProtectionZone(kortex_driver::DeleteProtectionZone::Request &req, kortex_driver::DeleteProtectionZone::Response &res) -{ - ProtectionZoneHandle input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->DeleteProtectionZone(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::ReadAllProtectionZones(kortex_driver::ReadAllProtectionZones::Request &req, kortex_driver::ReadAllProtectionZones::Response &res) -{ - Empty input; - ProtectionZoneList output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->ReadAllProtectionZones(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::CreateMapping(kortex_driver::CreateMapping::Request &req, kortex_driver::CreateMapping::Response &res) -{ - Mapping input; - ToProtoData(req.input, &input); - MappingHandle output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->CreateMapping(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::ReadMapping(kortex_driver::ReadMapping::Request &req, kortex_driver::ReadMapping::Response &res) -{ - MappingHandle input; - ToProtoData(req.input, &input); - Mapping output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->ReadMapping(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::ReadAllMappings(kortex_driver::ReadAllMappings::Request &req, kortex_driver::ReadAllMappings::Response &res) -{ - Empty input; - MappingList output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->ReadAllMappings(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::CreateMap(kortex_driver::CreateMap::Request &req, kortex_driver::CreateMap::Response &res) -{ - Map input; - ToProtoData(req.input, &input); - MapHandle output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->CreateMap(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::ReadAllMaps(kortex_driver::ReadAllMaps::Request &req, kortex_driver::ReadAllMaps::Response &res) -{ - MappingHandle input; - ToProtoData(req.input, &input); - MapList output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->ReadAllMaps(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::ActivateMap(kortex_driver::ActivateMap::Request &req, kortex_driver::ActivateMap::Response &res) -{ - ActivateMapHandle input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->ActivateMap(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::CreateAction(kortex_driver::CreateAction::Request &req, kortex_driver::CreateAction::Response &res) -{ - Action input; - ToProtoData(req.input, &input); - ActionHandle output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->CreateAction(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::ReadAction(kortex_driver::ReadAction::Request &req, kortex_driver::ReadAction::Response &res) -{ - ActionHandle input; - ToProtoData(req.input, &input); - Action output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->ReadAction(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::ReadAllActions(kortex_driver::ReadAllActions::Request &req, kortex_driver::ReadAllActions::Response &res) -{ - RequestedActionType input; - ToProtoData(req.input, &input); - ActionList output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->ReadAllActions(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::DeleteAction(kortex_driver::DeleteAction::Request &req, kortex_driver::DeleteAction::Response &res) -{ - ActionHandle input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->DeleteAction(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::UpdateAction(kortex_driver::UpdateAction::Request &req, kortex_driver::UpdateAction::Response &res) -{ - Action input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->UpdateAction(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::ExecuteActionFromReference(kortex_driver::ExecuteActionFromReference::Request &req, kortex_driver::ExecuteActionFromReference::Response &res) -{ - ActionHandle input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->ExecuteActionFromReference(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::ExecuteAction(kortex_driver::ExecuteAction::Request &req, kortex_driver::ExecuteAction::Response &res) -{ - Action input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->ExecuteAction(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::PauseAction(kortex_driver::PauseAction::Request &req, kortex_driver::PauseAction::Response &res) -{ - Empty input; - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->PauseAction(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::StopAction(kortex_driver::StopAction::Request &req, kortex_driver::StopAction::Response &res) -{ - Empty input; - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->StopAction(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::ResumeAction(kortex_driver::ResumeAction::Request &req, kortex_driver::ResumeAction::Response &res) -{ - Empty input; - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->ResumeAction(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::GetIPv4Configuration(kortex_driver::GetIPv4Configuration::Request &req, kortex_driver::GetIPv4Configuration::Response &res) -{ - NetworkHandle input; - ToProtoData(req.input, &input); - IPv4Configuration output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetIPv4Configuration(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::SetIPv4Configuration(kortex_driver::SetIPv4Configuration::Request &req, kortex_driver::SetIPv4Configuration::Response &res) -{ - FullIPv4Configuration input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->SetIPv4Configuration(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::SetCommunicationInterfaceEnable(kortex_driver::SetCommunicationInterfaceEnable::Request &req, kortex_driver::SetCommunicationInterfaceEnable::Response &res) -{ - CommunicationInterfaceConfiguration input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->SetCommunicationInterfaceEnable(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::IsCommunicationInterfaceEnable(kortex_driver::IsCommunicationInterfaceEnable::Request &req, kortex_driver::IsCommunicationInterfaceEnable::Response &res) -{ - NetworkHandle input; - ToProtoData(req.input, &input); - CommunicationInterfaceConfiguration output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->IsCommunicationInterfaceEnable(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::GetAvailableWifi(kortex_driver::GetAvailableWifi::Request &req, kortex_driver::GetAvailableWifi::Response &res) -{ - Empty input; - WifiInformationList output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetAvailableWifi(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::GetWifiInformation(kortex_driver::GetWifiInformation::Request &req, kortex_driver::GetWifiInformation::Response &res) -{ - Ssid input; - ToProtoData(req.input, &input); - WifiInformation output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetWifiInformation(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::AddWifiConfiguration(kortex_driver::AddWifiConfiguration::Request &req, kortex_driver::AddWifiConfiguration::Response &res) -{ - WifiConfiguration input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->AddWifiConfiguration(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::DeleteWifiConfiguration(kortex_driver::DeleteWifiConfiguration::Request &req, kortex_driver::DeleteWifiConfiguration::Response &res) -{ - Ssid input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->DeleteWifiConfiguration(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::GetAllConfiguredWifis(kortex_driver::GetAllConfiguredWifis::Request &req, kortex_driver::GetAllConfiguredWifis::Response &res) -{ - Empty input; - WifiConfigurationList output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetAllConfiguredWifis(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::ConnectWifi(kortex_driver::ConnectWifi::Request &req, kortex_driver::ConnectWifi::Response &res) -{ - Ssid input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->ConnectWifi(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::DisconnectWifi(kortex_driver::DisconnectWifi::Request &req, kortex_driver::DisconnectWifi::Response &res) -{ - Empty input; - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->DisconnectWifi(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::GetConnectedWifiInformation(kortex_driver::GetConnectedWifiInformation::Request &req, kortex_driver::GetConnectedWifiInformation::Response &res) -{ - Empty input; - WifiInformation output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetConnectedWifiInformation(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::Unsubscribe(kortex_driver::Unsubscribe::Request &req, kortex_driver::Unsubscribe::Response &res) -{ - NotificationHandle input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->Unsubscribe(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::OnNotificationConfigurationChangeTopic(kortex_driver::OnNotificationConfigurationChangeTopic::Request &req, kortex_driver::OnNotificationConfigurationChangeTopic::Response &res) -{ - NotificationOptions input; - ToProtoData(req.input, &input); - NotificationHandle output; - kortex_driver::KortexError result_error; - - try - { - std::function< void (Base::ConfigurationChangeNotification) > callback = std::bind(&BaseServices::cb_ConfigurationChangeTopic, this, std::placeholders::_1); - output = m_base->OnNotificationConfigurationChangeTopic(callback, input); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} -void BaseServices::cb_ConfigurationChangeTopic(Base::ConfigurationChangeNotification notif) -{ - kortex_driver::ConfigurationChangeNotification ros_msg; - ToRosData(notif, ros_msg); - m_pub_ConfigurationChangeTopic.publish(ros_msg); -} - -bool BaseServices::OnNotificationMappingInfoTopic(kortex_driver::OnNotificationMappingInfoTopic::Request &req, kortex_driver::OnNotificationMappingInfoTopic::Response &res) -{ - NotificationOptions input; - ToProtoData(req.input, &input); - NotificationHandle output; - kortex_driver::KortexError result_error; - - try - { - std::function< void (Base::MappingInfoNotification) > callback = std::bind(&BaseServices::cb_MappingInfoTopic, this, std::placeholders::_1); - output = m_base->OnNotificationMappingInfoTopic(callback, input); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} -void BaseServices::cb_MappingInfoTopic(Base::MappingInfoNotification notif) -{ - kortex_driver::MappingInfoNotification ros_msg; - ToRosData(notif, ros_msg); - m_pub_MappingInfoTopic.publish(ros_msg); -} - -bool BaseServices::OnNotificationControlModeTopic(kortex_driver::OnNotificationControlModeTopic::Request &req, kortex_driver::OnNotificationControlModeTopic::Response &res) -{ - NotificationOptions input; - ToProtoData(req.input, &input); - NotificationHandle output; - kortex_driver::KortexError result_error; - - try - { - std::function< void (Base::ControlModeNotification) > callback = std::bind(&BaseServices::cb_ControlModeTopic, this, std::placeholders::_1); - output = m_base->OnNotificationControlModeTopic(callback, input); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} -void BaseServices::cb_ControlModeTopic(Base::ControlModeNotification notif) -{ - kortex_driver::ControlModeNotification ros_msg; - ToRosData(notif, ros_msg); - m_pub_ControlModeTopic.publish(ros_msg); -} - -bool BaseServices::OnNotificationOperatingModeTopic(kortex_driver::OnNotificationOperatingModeTopic::Request &req, kortex_driver::OnNotificationOperatingModeTopic::Response &res) -{ - NotificationOptions input; - ToProtoData(req.input, &input); - NotificationHandle output; - kortex_driver::KortexError result_error; - - try - { - std::function< void (Base::OperatingModeNotification) > callback = std::bind(&BaseServices::cb_OperatingModeTopic, this, std::placeholders::_1); - output = m_base->OnNotificationOperatingModeTopic(callback, input); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} -void BaseServices::cb_OperatingModeTopic(Base::OperatingModeNotification notif) -{ - kortex_driver::OperatingModeNotification ros_msg; - ToRosData(notif, ros_msg); - m_pub_OperatingModeTopic.publish(ros_msg); -} - -bool BaseServices::OnNotificationSequenceInfoTopic(kortex_driver::OnNotificationSequenceInfoTopic::Request &req, kortex_driver::OnNotificationSequenceInfoTopic::Response &res) -{ - NotificationOptions input; - ToProtoData(req.input, &input); - NotificationHandle output; - kortex_driver::KortexError result_error; - - try - { - std::function< void (Base::SequenceInfoNotification) > callback = std::bind(&BaseServices::cb_SequenceInfoTopic, this, std::placeholders::_1); - output = m_base->OnNotificationSequenceInfoTopic(callback, input); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} -void BaseServices::cb_SequenceInfoTopic(Base::SequenceInfoNotification notif) -{ - kortex_driver::SequenceInfoNotification ros_msg; - ToRosData(notif, ros_msg); - m_pub_SequenceInfoTopic.publish(ros_msg); -} - -bool BaseServices::OnNotificationProtectionZoneTopic(kortex_driver::OnNotificationProtectionZoneTopic::Request &req, kortex_driver::OnNotificationProtectionZoneTopic::Response &res) -{ - NotificationOptions input; - ToProtoData(req.input, &input); - NotificationHandle output; - kortex_driver::KortexError result_error; - - try - { - std::function< void (Base::ProtectionZoneNotification) > callback = std::bind(&BaseServices::cb_ProtectionZoneTopic, this, std::placeholders::_1); - output = m_base->OnNotificationProtectionZoneTopic(callback, input); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} -void BaseServices::cb_ProtectionZoneTopic(Base::ProtectionZoneNotification notif) -{ - kortex_driver::ProtectionZoneNotification ros_msg; - ToRosData(notif, ros_msg); - m_pub_ProtectionZoneTopic.publish(ros_msg); -} - -bool BaseServices::OnNotificationUserTopic(kortex_driver::OnNotificationUserTopic::Request &req, kortex_driver::OnNotificationUserTopic::Response &res) -{ - NotificationOptions input; - ToProtoData(req.input, &input); - NotificationHandle output; - kortex_driver::KortexError result_error; - - try - { - std::function< void (Base::UserNotification) > callback = std::bind(&BaseServices::cb_UserTopic, this, std::placeholders::_1); - output = m_base->OnNotificationUserTopic(callback, input); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} -void BaseServices::cb_UserTopic(Base::UserNotification notif) -{ - kortex_driver::UserNotification ros_msg; - ToRosData(notif, ros_msg); - m_pub_UserTopic.publish(ros_msg); -} - -bool BaseServices::OnNotificationControllerTopic(kortex_driver::OnNotificationControllerTopic::Request &req, kortex_driver::OnNotificationControllerTopic::Response &res) -{ - NotificationOptions input; - ToProtoData(req.input, &input); - NotificationHandle output; - kortex_driver::KortexError result_error; - - try - { - std::function< void (Base::ControllerNotification) > callback = std::bind(&BaseServices::cb_ControllerTopic, this, std::placeholders::_1); - output = m_base->OnNotificationControllerTopic(callback, input); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} -void BaseServices::cb_ControllerTopic(Base::ControllerNotification notif) -{ - kortex_driver::ControllerNotification ros_msg; - ToRosData(notif, ros_msg); - m_pub_ControllerTopic.publish(ros_msg); -} - -bool BaseServices::OnNotificationActionTopic(kortex_driver::OnNotificationActionTopic::Request &req, kortex_driver::OnNotificationActionTopic::Response &res) -{ - NotificationOptions input; - ToProtoData(req.input, &input); - NotificationHandle output; - kortex_driver::KortexError result_error; - - try - { - std::function< void (Base::ActionNotification) > callback = std::bind(&BaseServices::cb_ActionTopic, this, std::placeholders::_1); - output = m_base->OnNotificationActionTopic(callback, input); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} -void BaseServices::cb_ActionTopic(Base::ActionNotification notif) -{ - kortex_driver::ActionNotification ros_msg; - ToRosData(notif, ros_msg); - m_pub_ActionTopic.publish(ros_msg); -} - -bool BaseServices::OnNotificationRobotEventTopic(kortex_driver::OnNotificationRobotEventTopic::Request &req, kortex_driver::OnNotificationRobotEventTopic::Response &res) -{ - NotificationOptions input; - ToProtoData(req.input, &input); - NotificationHandle output; - kortex_driver::KortexError result_error; - - try - { - std::function< void (Base::RobotEventNotification) > callback = std::bind(&BaseServices::cb_RobotEventTopic, this, std::placeholders::_1); - output = m_base->OnNotificationRobotEventTopic(callback, input); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} -void BaseServices::cb_RobotEventTopic(Base::RobotEventNotification notif) -{ - kortex_driver::RobotEventNotification ros_msg; - ToRosData(notif, ros_msg); - m_pub_RobotEventTopic.publish(ros_msg); -} - -bool BaseServices::GetFwdKinematics(kortex_driver::GetFwdKinematics::Request &req, kortex_driver::GetFwdKinematics::Response &res) -{ - Empty input; - TransformationMatrix output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetFwdKinematics(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::PlayCartesianTrajectory(kortex_driver::PlayCartesianTrajectory::Request &req, kortex_driver::PlayCartesianTrajectory::Response &res) -{ - ConstrainedPose input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->PlayCartesianTrajectory(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::PlayCartesianTrajectoryPosition(kortex_driver::PlayCartesianTrajectoryPosition::Request &req, kortex_driver::PlayCartesianTrajectoryPosition::Response &res) -{ - ConstrainedPosition input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->PlayCartesianTrajectoryPosition(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::PlayCartesianTrajectoryOrientation(kortex_driver::PlayCartesianTrajectoryOrientation::Request &req, kortex_driver::PlayCartesianTrajectoryOrientation::Response &res) -{ - ConstrainedOrientation input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->PlayCartesianTrajectoryOrientation(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::Pause(kortex_driver::Pause::Request &req, kortex_driver::Pause::Response &res) -{ - Empty input; - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->Pause(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::Resume(kortex_driver::Resume::Request &req, kortex_driver::Resume::Response &res) -{ - Empty input; - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->Resume(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::GetMeasuredCartesianPose(kortex_driver::GetMeasuredCartesianPose::Request &req, kortex_driver::GetMeasuredCartesianPose::Response &res) -{ - Empty input; - Pose output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetMeasuredCartesianPose(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::GetCommandedCartesianPose(kortex_driver::GetCommandedCartesianPose::Request &req, kortex_driver::GetCommandedCartesianPose::Response &res) -{ - Empty input; - Pose output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetCommandedCartesianPose(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::GetTargetedCartesianPose(kortex_driver::GetTargetedCartesianPose::Request &req, kortex_driver::GetTargetedCartesianPose::Response &res) -{ - Empty input; - Pose output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetTargetedCartesianPose(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::SendTwistCommand(kortex_driver::SendTwistCommand::Request &req, kortex_driver::SendTwistCommand::Response &res) -{ - TwistCommand input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->SendTwistCommand(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::GetMeasuredTwist(kortex_driver::GetMeasuredTwist::Request &req, kortex_driver::GetMeasuredTwist::Response &res) -{ - Empty input; - Twist output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetMeasuredTwist(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::GetCommandedTwist(kortex_driver::GetCommandedTwist::Request &req, kortex_driver::GetCommandedTwist::Response &res) -{ - Empty input; - Twist output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetCommandedTwist(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::PlayJointTrajectory(kortex_driver::PlayJointTrajectory::Request &req, kortex_driver::PlayJointTrajectory::Response &res) -{ - ConstrainedJointAngles input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->PlayJointTrajectory(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::PlaySelectedJointTrajectory(kortex_driver::PlaySelectedJointTrajectory::Request &req, kortex_driver::PlaySelectedJointTrajectory::Response &res) -{ - ConstrainedJointAngle input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->PlaySelectedJointTrajectory(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::GetMeasuredJointAngles(kortex_driver::GetMeasuredJointAngles::Request &req, kortex_driver::GetMeasuredJointAngles::Response &res) -{ - Empty input; - JointAngles output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetMeasuredJointAngles(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::GetCommandedJointAngles(kortex_driver::GetCommandedJointAngles::Request &req, kortex_driver::GetCommandedJointAngles::Response &res) -{ - Empty input; - JointAngles output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetCommandedJointAngles(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::SendJointSpeedsCommmand(kortex_driver::SendJointSpeedsCommmand::Request &req, kortex_driver::SendJointSpeedsCommmand::Response &res) -{ - JointSpeeds input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->SendJointSpeedsCommmand(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::SendSelectedJointSpeedCommand(kortex_driver::SendSelectedJointSpeedCommand::Request &req, kortex_driver::SendSelectedJointSpeedCommand::Response &res) -{ - JointSpeed input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->SendSelectedJointSpeedCommand(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::GetMeasuredJointSpeeds(kortex_driver::GetMeasuredJointSpeeds::Request &req, kortex_driver::GetMeasuredJointSpeeds::Response &res) -{ - Empty input; - JointSpeeds output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetMeasuredJointSpeeds(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::GetCommandedJointSpeeds(kortex_driver::GetCommandedJointSpeeds::Request &req, kortex_driver::GetCommandedJointSpeeds::Response &res) -{ - Empty input; - JointSpeeds output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetCommandedJointSpeeds(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::SendGripperCommand(kortex_driver::SendGripperCommand::Request &req, kortex_driver::SendGripperCommand::Response &res) -{ - GripperCommand input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->SendGripperCommand(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::GetMeasuredGripperMovement(kortex_driver::GetMeasuredGripperMovement::Request &req, kortex_driver::GetMeasuredGripperMovement::Response &res) -{ - GripperRequest input; - ToProtoData(req.input, &input); - Gripper output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetMeasuredGripperMovement(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::GetCommandedGripperMovement(kortex_driver::GetCommandedGripperMovement::Request &req, kortex_driver::GetCommandedGripperMovement::Response &res) -{ - GripperRequest input; - ToProtoData(req.input, &input); - Gripper output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetCommandedGripperMovement(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::SetAdmittance(kortex_driver::SetAdmittance::Request &req, kortex_driver::SetAdmittance::Response &res) -{ - Admittance input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->SetAdmittance(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::SetTwistWrenchReferenceFrame(kortex_driver::SetTwistWrenchReferenceFrame::Request &req, kortex_driver::SetTwistWrenchReferenceFrame::Response &res) -{ - CartesianReferenceFrameRequest input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->SetTwistWrenchReferenceFrame(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::SetOperatingMode(kortex_driver::SetOperatingMode::Request &req, kortex_driver::SetOperatingMode::Response &res) -{ - OperatingModeInformation input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->SetOperatingMode(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::ApplyEmergencyStop(kortex_driver::ApplyEmergencyStop::Request &req, kortex_driver::ApplyEmergencyStop::Response &res) -{ - Empty input; - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->ApplyEmergencyStop(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::ClearFaults(kortex_driver::ClearFaults::Request &req, kortex_driver::ClearFaults::Response &res) -{ - Empty input; - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->ClearFaults(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::GetActiveMap(kortex_driver::GetActiveMap::Request &req, kortex_driver::GetActiveMap::Response &res) -{ - MappingHandle input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->GetActiveMap(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::GetControlMode(kortex_driver::GetControlMode::Request &req, kortex_driver::GetControlMode::Response &res) -{ - Empty input; - ControlModeInformation output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetControlMode(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::GetOperatingMode(kortex_driver::GetOperatingMode::Request &req, kortex_driver::GetOperatingMode::Response &res) -{ - Empty input; - OperatingModeInformation output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetOperatingMode(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::SetServoingMode(kortex_driver::SetServoingMode::Request &req, kortex_driver::SetServoingMode::Response &res) -{ - ServoingModeInformation input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->SetServoingMode(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::GetServoingMode(kortex_driver::GetServoingMode::Request &req, kortex_driver::GetServoingMode::Response &res) -{ - Empty input; - ServoingModeInformation output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetServoingMode(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::OnNotificationServoingModeTopic(kortex_driver::OnNotificationServoingModeTopic::Request &req, kortex_driver::OnNotificationServoingModeTopic::Response &res) -{ - NotificationOptions input; - ToProtoData(req.input, &input); - NotificationHandle output; - kortex_driver::KortexError result_error; - - try - { - std::function< void (Base::ServoingModeNotification) > callback = std::bind(&BaseServices::cb_ServoingModeTopic, this, std::placeholders::_1); - output = m_base->OnNotificationServoingModeTopic(callback, input); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} -void BaseServices::cb_ServoingModeTopic(Base::ServoingModeNotification notif) -{ - kortex_driver::ServoingModeNotification ros_msg; - ToRosData(notif, ros_msg); - m_pub_ServoingModeTopic.publish(ros_msg); -} - -bool BaseServices::GetSequenceState(kortex_driver::GetSequenceState::Request &req, kortex_driver::GetSequenceState::Response &res) -{ - SequenceHandle input; - ToProtoData(req.input, &input); - SequenceInformation output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetSequenceState(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::GetProtectionZoneState(kortex_driver::GetProtectionZoneState::Request &req, kortex_driver::GetProtectionZoneState::Response &res) -{ - ProtectionZoneHandle input; - ToProtoData(req.input, &input); - ProtectionZoneInformation output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetProtectionZoneState(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::GetActionExecutionState(kortex_driver::GetActionExecutionState::Request &req, kortex_driver::GetActionExecutionState::Response &res) -{ - Empty input; - ActionExecutionState output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetActionExecutionState(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::RestoreFactorySettings(kortex_driver::RestoreFactorySettings::Request &req, kortex_driver::RestoreFactorySettings::Response &res) -{ - Empty input; - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->RestoreFactorySettings(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::RestoreNetworkFactorySettings(kortex_driver::RestoreNetworkFactorySettings::Request &req, kortex_driver::RestoreNetworkFactorySettings::Response &res) -{ - Empty input; - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->RestoreNetworkFactorySettings(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::Reboot(kortex_driver::Reboot::Request &req, kortex_driver::Reboot::Response &res) -{ - Empty input; - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->Reboot(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::OnNotificationFactoryTopic(kortex_driver::OnNotificationFactoryTopic::Request &req, kortex_driver::OnNotificationFactoryTopic::Response &res) -{ - NotificationOptions input; - ToProtoData(req.input, &input); - NotificationHandle output; - kortex_driver::KortexError result_error; - - try - { - std::function< void (Base::FactoryNotification) > callback = std::bind(&BaseServices::cb_FactoryTopic, this, std::placeholders::_1); - output = m_base->OnNotificationFactoryTopic(callback, input); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} -void BaseServices::cb_FactoryTopic(Base::FactoryNotification notif) -{ - kortex_driver::FactoryNotification ros_msg; - ToRosData(notif, ros_msg); - m_pub_FactoryTopic.publish(ros_msg); -} - -bool BaseServices::GetAllConnectedControllers(kortex_driver::GetAllConnectedControllers::Request &req, kortex_driver::GetAllConnectedControllers::Response &res) -{ - Empty input; - ControllerList output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetAllConnectedControllers(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::GetControllerState(kortex_driver::GetControllerState::Request &req, kortex_driver::GetControllerState::Response &res) -{ - ControllerHandle input; - ToProtoData(req.input, &input); - ControllerState output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetControllerState(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::GetActuatorCount(kortex_driver::GetActuatorCount::Request &req, kortex_driver::GetActuatorCount::Response &res) -{ - Empty input; - ActuatorInformation output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetActuatorCount(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::StartWifiScan(kortex_driver::StartWifiScan::Request &req, kortex_driver::StartWifiScan::Response &res) -{ - Empty input; - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->StartWifiScan(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::GetConfiguredWifi(kortex_driver::GetConfiguredWifi::Request &req, kortex_driver::GetConfiguredWifi::Response &res) -{ - Ssid input; - ToProtoData(req.input, &input); - WifiConfiguration output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetConfiguredWifi(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::OnNotificationNetworkTopic(kortex_driver::OnNotificationNetworkTopic::Request &req, kortex_driver::OnNotificationNetworkTopic::Response &res) -{ - NotificationOptions input; - ToProtoData(req.input, &input); - NotificationHandle output; - kortex_driver::KortexError result_error; - - try - { - std::function< void (Base::NetworkNotification) > callback = std::bind(&BaseServices::cb_NetworkTopic, this, std::placeholders::_1); - output = m_base->OnNotificationNetworkTopic(callback, input); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} -void BaseServices::cb_NetworkTopic(Base::NetworkNotification notif) -{ - kortex_driver::NetworkNotification ros_msg; - ToRosData(notif, ros_msg); - m_pub_NetworkTopic.publish(ros_msg); -} - -bool BaseServices::GetArmState(kortex_driver::GetArmState::Request &req, kortex_driver::GetArmState::Response &res) -{ - Empty input; - ArmStateInformation output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetArmState(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::OnNotificationArmStateTopic(kortex_driver::OnNotificationArmStateTopic::Request &req, kortex_driver::OnNotificationArmStateTopic::Response &res) -{ - NotificationOptions input; - ToProtoData(req.input, &input); - NotificationHandle output; - kortex_driver::KortexError result_error; - - try - { - std::function< void (Base::ArmStateNotification) > callback = std::bind(&BaseServices::cb_ArmStateTopic, this, std::placeholders::_1); - output = m_base->OnNotificationArmStateTopic(callback, input); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} -void BaseServices::cb_ArmStateTopic(Base::ArmStateNotification notif) -{ - kortex_driver::ArmStateNotification ros_msg; - ToRosData(notif, ros_msg); - m_pub_ArmStateTopic.publish(ros_msg); -} - -bool BaseServices::GetIPv4Information(kortex_driver::GetIPv4Information::Request &req, kortex_driver::GetIPv4Information::Response &res) -{ - NetworkHandle input; - ToProtoData(req.input, &input); - IPv4Information output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetIPv4Information(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool BaseServices::SetCountryCode(kortex_driver::SetCountryCode::Request &req, kortex_driver::SetCountryCode::Response &res) -{ - CountryCode input; - ToProtoData(req.input, &input); - Empty output; - kortex_driver::KortexError result_error; - - try - { - m_base->SetCountryCode(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool BaseServices::GetCountryCode(kortex_driver::GetCountryCode::Request &req, kortex_driver::GetCountryCode::Response &res) -{ - Empty input; - CountryCode output; - kortex_driver::KortexError result_error; - - try - { - output = m_base->GetCountryCode(m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} diff --git a/kortex_driver/src/node.h b/kortex_driver/src/node.h deleted file mode 100644 index 7465d244..00000000 --- a/kortex_driver/src/node.h +++ /dev/null @@ -1,363 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_SERVICES_H_ -#define _KORTEX_SERVICES_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include "kortex_driver/Refresh.h" -#include "kortex_driver/RefreshCommand.h" -#include "kortex_driver/RefreshFeedback.h" -#include "kortex_driver/RefreshCustomData.h" -#include "kortex_driver/CreateUserProfile.h" -#include "kortex_driver/UpdateUserProfile.h" -#include "kortex_driver/ReadUserProfile.h" -#include "kortex_driver/DeleteUserProfile.h" -#include "kortex_driver/ReadAllUserProfiles.h" -#include "kortex_driver/ReadAllUsers.h" -#include "kortex_driver/ChangePassword.h" -#include "kortex_driver/CreateSequence.h" -#include "kortex_driver/UpdateSequence.h" -#include "kortex_driver/ReadSequence.h" -#include "kortex_driver/DeleteSequence.h" -#include "kortex_driver/ReadAllSequences.h" -#include "kortex_driver/DeleteSequenceTask.h" -#include "kortex_driver/DeleteAllSequenceTasks.h" -#include "kortex_driver/PlaySequence.h" -#include "kortex_driver/PlayAdvancedSequence.h" -#include "kortex_driver/StopSequence.h" -#include "kortex_driver/PauseSequence.h" -#include "kortex_driver/ResumeSequence.h" -#include "kortex_driver/CreateProtectionZone.h" -#include "kortex_driver/UpdateProtectionZone.h" -#include "kortex_driver/ReadProtectionZone.h" -#include "kortex_driver/DeleteProtectionZone.h" -#include "kortex_driver/ReadAllProtectionZones.h" -#include "kortex_driver/CreateMapping.h" -#include "kortex_driver/ReadMapping.h" -#include "kortex_driver/ReadAllMappings.h" -#include "kortex_driver/CreateMap.h" -#include "kortex_driver/ReadAllMaps.h" -#include "kortex_driver/ActivateMap.h" -#include "kortex_driver/CreateAction.h" -#include "kortex_driver/ReadAction.h" -#include "kortex_driver/ReadAllActions.h" -#include "kortex_driver/DeleteAction.h" -#include "kortex_driver/UpdateAction.h" -#include "kortex_driver/ExecuteActionFromReference.h" -#include "kortex_driver/ExecuteAction.h" -#include "kortex_driver/PauseAction.h" -#include "kortex_driver/StopAction.h" -#include "kortex_driver/ResumeAction.h" -#include "kortex_driver/GetIPv4Configuration.h" -#include "kortex_driver/SetIPv4Configuration.h" -#include "kortex_driver/SetCommunicationInterfaceEnable.h" -#include "kortex_driver/IsCommunicationInterfaceEnable.h" -#include "kortex_driver/GetAvailableWifi.h" -#include "kortex_driver/GetWifiInformation.h" -#include "kortex_driver/AddWifiConfiguration.h" -#include "kortex_driver/DeleteWifiConfiguration.h" -#include "kortex_driver/GetAllConfiguredWifis.h" -#include "kortex_driver/ConnectWifi.h" -#include "kortex_driver/DisconnectWifi.h" -#include "kortex_driver/GetConnectedWifiInformation.h" -#include "kortex_driver/Unsubscribe.h" -#include "kortex_driver/OnNotificationConfigurationChangeTopic.h" -#include "kortex_driver/ConfigurationChangeNotification.h" -#include "kortex_driver/OnNotificationMappingInfoTopic.h" -#include "kortex_driver/MappingInfoNotification.h" -#include "kortex_driver/OnNotificationControlModeTopic.h" -#include "kortex_driver/ControlModeNotification.h" -#include "kortex_driver/OnNotificationOperatingModeTopic.h" -#include "kortex_driver/OperatingModeNotification.h" -#include "kortex_driver/OnNotificationSequenceInfoTopic.h" -#include "kortex_driver/SequenceInfoNotification.h" -#include "kortex_driver/OnNotificationProtectionZoneTopic.h" -#include "kortex_driver/ProtectionZoneNotification.h" -#include "kortex_driver/OnNotificationUserTopic.h" -#include "kortex_driver/UserNotification.h" -#include "kortex_driver/OnNotificationControllerTopic.h" -#include "kortex_driver/ControllerNotification.h" -#include "kortex_driver/OnNotificationActionTopic.h" -#include "kortex_driver/ActionNotification.h" -#include "kortex_driver/OnNotificationRobotEventTopic.h" -#include "kortex_driver/RobotEventNotification.h" -#include "kortex_driver/GetFwdKinematics.h" -#include "kortex_driver/PlayCartesianTrajectory.h" -#include "kortex_driver/PlayCartesianTrajectoryPosition.h" -#include "kortex_driver/PlayCartesianTrajectoryOrientation.h" -#include "kortex_driver/Pause.h" -#include "kortex_driver/Resume.h" -#include "kortex_driver/GetMeasuredCartesianPose.h" -#include "kortex_driver/GetCommandedCartesianPose.h" -#include "kortex_driver/GetTargetedCartesianPose.h" -#include "kortex_driver/SendTwistCommand.h" -#include "kortex_driver/GetMeasuredTwist.h" -#include "kortex_driver/GetCommandedTwist.h" -#include "kortex_driver/PlayJointTrajectory.h" -#include "kortex_driver/PlaySelectedJointTrajectory.h" -#include "kortex_driver/GetMeasuredJointAngles.h" -#include "kortex_driver/GetCommandedJointAngles.h" -#include "kortex_driver/SendJointSpeedsCommmand.h" -#include "kortex_driver/SendSelectedJointSpeedCommand.h" -#include "kortex_driver/GetMeasuredJointSpeeds.h" -#include "kortex_driver/GetCommandedJointSpeeds.h" -#include "kortex_driver/SendGripperCommand.h" -#include "kortex_driver/GetMeasuredGripperMovement.h" -#include "kortex_driver/GetCommandedGripperMovement.h" -#include "kortex_driver/SetAdmittance.h" -#include "kortex_driver/SetTwistWrenchReferenceFrame.h" -#include "kortex_driver/SetOperatingMode.h" -#include "kortex_driver/ApplyEmergencyStop.h" -#include "kortex_driver/ClearFaults.h" -#include "kortex_driver/GetActiveMap.h" -#include "kortex_driver/GetControlMode.h" -#include "kortex_driver/GetOperatingMode.h" -#include "kortex_driver/SetServoingMode.h" -#include "kortex_driver/GetServoingMode.h" -#include "kortex_driver/OnNotificationServoingModeTopic.h" -#include "kortex_driver/ServoingModeNotification.h" -#include "kortex_driver/GetSequenceState.h" -#include "kortex_driver/GetProtectionZoneState.h" -#include "kortex_driver/GetActionExecutionState.h" -#include "kortex_driver/RestoreFactorySettings.h" -#include "kortex_driver/RestoreNetworkFactorySettings.h" -#include "kortex_driver/Reboot.h" -#include "kortex_driver/OnNotificationFactoryTopic.h" -#include "kortex_driver/FactoryNotification.h" -#include "kortex_driver/GetAllConnectedControllers.h" -#include "kortex_driver/GetControllerState.h" -#include "kortex_driver/GetActuatorCount.h" -#include "kortex_driver/StartWifiScan.h" -#include "kortex_driver/GetConfiguredWifi.h" -#include "kortex_driver/OnNotificationNetworkTopic.h" -#include "kortex_driver/NetworkNotification.h" -#include "kortex_driver/GetArmState.h" -#include "kortex_driver/OnNotificationArmStateTopic.h" -#include "kortex_driver/ArmStateNotification.h" -#include "kortex_driver/GetIPv4Information.h" -#include "kortex_driver/SetCountryCode.h" -#include "kortex_driver/GetCountryCode.h" -#include "kortex_driver/KortexError.h" -#include "kortex_driver/SetDeviceID.h" -#include "kortex_driver/SetApiOptions.h" - -#include "kortex_driver/ApiOptions.h" - -using namespace std; -using namespace Kinova::Api; -using namespace Kinova::Api::Common; -using namespace Kinova::Api::BaseCyclic; -using namespace Kinova::Api; -using namespace Kinova::Api::Base; - -class BaseServices -{ - public: - BaseServices(char* ip, ros::NodeHandle& n); - bool SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res); - bool SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res); - - - bool Refresh(kortex_driver::Refresh::Request &req, kortex_driver::Refresh::Response &res); - bool RefreshCommand(kortex_driver::RefreshCommand::Request &req, kortex_driver::RefreshCommand::Response &res); - bool RefreshFeedback(kortex_driver::RefreshFeedback::Request &req, kortex_driver::RefreshFeedback::Response &res); - bool RefreshCustomData(kortex_driver::RefreshCustomData::Request &req, kortex_driver::RefreshCustomData::Response &res); - - - bool CreateUserProfile(kortex_driver::CreateUserProfile::Request &req, kortex_driver::CreateUserProfile::Response &res); - bool UpdateUserProfile(kortex_driver::UpdateUserProfile::Request &req, kortex_driver::UpdateUserProfile::Response &res); - bool ReadUserProfile(kortex_driver::ReadUserProfile::Request &req, kortex_driver::ReadUserProfile::Response &res); - bool DeleteUserProfile(kortex_driver::DeleteUserProfile::Request &req, kortex_driver::DeleteUserProfile::Response &res); - bool ReadAllUserProfiles(kortex_driver::ReadAllUserProfiles::Request &req, kortex_driver::ReadAllUserProfiles::Response &res); - bool ReadAllUsers(kortex_driver::ReadAllUsers::Request &req, kortex_driver::ReadAllUsers::Response &res); - bool ChangePassword(kortex_driver::ChangePassword::Request &req, kortex_driver::ChangePassword::Response &res); - bool CreateSequence(kortex_driver::CreateSequence::Request &req, kortex_driver::CreateSequence::Response &res); - bool UpdateSequence(kortex_driver::UpdateSequence::Request &req, kortex_driver::UpdateSequence::Response &res); - bool ReadSequence(kortex_driver::ReadSequence::Request &req, kortex_driver::ReadSequence::Response &res); - bool DeleteSequence(kortex_driver::DeleteSequence::Request &req, kortex_driver::DeleteSequence::Response &res); - bool ReadAllSequences(kortex_driver::ReadAllSequences::Request &req, kortex_driver::ReadAllSequences::Response &res); - bool DeleteSequenceTask(kortex_driver::DeleteSequenceTask::Request &req, kortex_driver::DeleteSequenceTask::Response &res); - bool DeleteAllSequenceTasks(kortex_driver::DeleteAllSequenceTasks::Request &req, kortex_driver::DeleteAllSequenceTasks::Response &res); - bool PlaySequence(kortex_driver::PlaySequence::Request &req, kortex_driver::PlaySequence::Response &res); - bool PlayAdvancedSequence(kortex_driver::PlayAdvancedSequence::Request &req, kortex_driver::PlayAdvancedSequence::Response &res); - bool StopSequence(kortex_driver::StopSequence::Request &req, kortex_driver::StopSequence::Response &res); - bool PauseSequence(kortex_driver::PauseSequence::Request &req, kortex_driver::PauseSequence::Response &res); - bool ResumeSequence(kortex_driver::ResumeSequence::Request &req, kortex_driver::ResumeSequence::Response &res); - bool CreateProtectionZone(kortex_driver::CreateProtectionZone::Request &req, kortex_driver::CreateProtectionZone::Response &res); - bool UpdateProtectionZone(kortex_driver::UpdateProtectionZone::Request &req, kortex_driver::UpdateProtectionZone::Response &res); - bool ReadProtectionZone(kortex_driver::ReadProtectionZone::Request &req, kortex_driver::ReadProtectionZone::Response &res); - bool DeleteProtectionZone(kortex_driver::DeleteProtectionZone::Request &req, kortex_driver::DeleteProtectionZone::Response &res); - bool ReadAllProtectionZones(kortex_driver::ReadAllProtectionZones::Request &req, kortex_driver::ReadAllProtectionZones::Response &res); - bool CreateMapping(kortex_driver::CreateMapping::Request &req, kortex_driver::CreateMapping::Response &res); - bool ReadMapping(kortex_driver::ReadMapping::Request &req, kortex_driver::ReadMapping::Response &res); - bool ReadAllMappings(kortex_driver::ReadAllMappings::Request &req, kortex_driver::ReadAllMappings::Response &res); - bool CreateMap(kortex_driver::CreateMap::Request &req, kortex_driver::CreateMap::Response &res); - bool ReadAllMaps(kortex_driver::ReadAllMaps::Request &req, kortex_driver::ReadAllMaps::Response &res); - bool ActivateMap(kortex_driver::ActivateMap::Request &req, kortex_driver::ActivateMap::Response &res); - bool CreateAction(kortex_driver::CreateAction::Request &req, kortex_driver::CreateAction::Response &res); - bool ReadAction(kortex_driver::ReadAction::Request &req, kortex_driver::ReadAction::Response &res); - bool ReadAllActions(kortex_driver::ReadAllActions::Request &req, kortex_driver::ReadAllActions::Response &res); - bool DeleteAction(kortex_driver::DeleteAction::Request &req, kortex_driver::DeleteAction::Response &res); - bool UpdateAction(kortex_driver::UpdateAction::Request &req, kortex_driver::UpdateAction::Response &res); - bool ExecuteActionFromReference(kortex_driver::ExecuteActionFromReference::Request &req, kortex_driver::ExecuteActionFromReference::Response &res); - bool ExecuteAction(kortex_driver::ExecuteAction::Request &req, kortex_driver::ExecuteAction::Response &res); - bool PauseAction(kortex_driver::PauseAction::Request &req, kortex_driver::PauseAction::Response &res); - bool StopAction(kortex_driver::StopAction::Request &req, kortex_driver::StopAction::Response &res); - bool ResumeAction(kortex_driver::ResumeAction::Request &req, kortex_driver::ResumeAction::Response &res); - bool GetIPv4Configuration(kortex_driver::GetIPv4Configuration::Request &req, kortex_driver::GetIPv4Configuration::Response &res); - bool SetIPv4Configuration(kortex_driver::SetIPv4Configuration::Request &req, kortex_driver::SetIPv4Configuration::Response &res); - bool SetCommunicationInterfaceEnable(kortex_driver::SetCommunicationInterfaceEnable::Request &req, kortex_driver::SetCommunicationInterfaceEnable::Response &res); - bool IsCommunicationInterfaceEnable(kortex_driver::IsCommunicationInterfaceEnable::Request &req, kortex_driver::IsCommunicationInterfaceEnable::Response &res); - bool GetAvailableWifi(kortex_driver::GetAvailableWifi::Request &req, kortex_driver::GetAvailableWifi::Response &res); - bool GetWifiInformation(kortex_driver::GetWifiInformation::Request &req, kortex_driver::GetWifiInformation::Response &res); - bool AddWifiConfiguration(kortex_driver::AddWifiConfiguration::Request &req, kortex_driver::AddWifiConfiguration::Response &res); - bool DeleteWifiConfiguration(kortex_driver::DeleteWifiConfiguration::Request &req, kortex_driver::DeleteWifiConfiguration::Response &res); - bool GetAllConfiguredWifis(kortex_driver::GetAllConfiguredWifis::Request &req, kortex_driver::GetAllConfiguredWifis::Response &res); - bool ConnectWifi(kortex_driver::ConnectWifi::Request &req, kortex_driver::ConnectWifi::Response &res); - bool DisconnectWifi(kortex_driver::DisconnectWifi::Request &req, kortex_driver::DisconnectWifi::Response &res); - bool GetConnectedWifiInformation(kortex_driver::GetConnectedWifiInformation::Request &req, kortex_driver::GetConnectedWifiInformation::Response &res); - bool Unsubscribe(kortex_driver::Unsubscribe::Request &req, kortex_driver::Unsubscribe::Response &res); - bool OnNotificationConfigurationChangeTopic(kortex_driver::OnNotificationConfigurationChangeTopic::Request &req, kortex_driver::OnNotificationConfigurationChangeTopic::Response &res); - void cb_ConfigurationChangeTopic(ConfigurationChangeNotification notif); - bool OnNotificationMappingInfoTopic(kortex_driver::OnNotificationMappingInfoTopic::Request &req, kortex_driver::OnNotificationMappingInfoTopic::Response &res); - void cb_MappingInfoTopic(MappingInfoNotification notif); - bool OnNotificationControlModeTopic(kortex_driver::OnNotificationControlModeTopic::Request &req, kortex_driver::OnNotificationControlModeTopic::Response &res); - void cb_ControlModeTopic(ControlModeNotification notif); - bool OnNotificationOperatingModeTopic(kortex_driver::OnNotificationOperatingModeTopic::Request &req, kortex_driver::OnNotificationOperatingModeTopic::Response &res); - void cb_OperatingModeTopic(OperatingModeNotification notif); - bool OnNotificationSequenceInfoTopic(kortex_driver::OnNotificationSequenceInfoTopic::Request &req, kortex_driver::OnNotificationSequenceInfoTopic::Response &res); - void cb_SequenceInfoTopic(SequenceInfoNotification notif); - bool OnNotificationProtectionZoneTopic(kortex_driver::OnNotificationProtectionZoneTopic::Request &req, kortex_driver::OnNotificationProtectionZoneTopic::Response &res); - void cb_ProtectionZoneTopic(ProtectionZoneNotification notif); - bool OnNotificationUserTopic(kortex_driver::OnNotificationUserTopic::Request &req, kortex_driver::OnNotificationUserTopic::Response &res); - void cb_UserTopic(UserNotification notif); - bool OnNotificationControllerTopic(kortex_driver::OnNotificationControllerTopic::Request &req, kortex_driver::OnNotificationControllerTopic::Response &res); - void cb_ControllerTopic(ControllerNotification notif); - bool OnNotificationActionTopic(kortex_driver::OnNotificationActionTopic::Request &req, kortex_driver::OnNotificationActionTopic::Response &res); - void cb_ActionTopic(ActionNotification notif); - bool OnNotificationRobotEventTopic(kortex_driver::OnNotificationRobotEventTopic::Request &req, kortex_driver::OnNotificationRobotEventTopic::Response &res); - void cb_RobotEventTopic(RobotEventNotification notif); - bool GetFwdKinematics(kortex_driver::GetFwdKinematics::Request &req, kortex_driver::GetFwdKinematics::Response &res); - bool PlayCartesianTrajectory(kortex_driver::PlayCartesianTrajectory::Request &req, kortex_driver::PlayCartesianTrajectory::Response &res); - bool PlayCartesianTrajectoryPosition(kortex_driver::PlayCartesianTrajectoryPosition::Request &req, kortex_driver::PlayCartesianTrajectoryPosition::Response &res); - bool PlayCartesianTrajectoryOrientation(kortex_driver::PlayCartesianTrajectoryOrientation::Request &req, kortex_driver::PlayCartesianTrajectoryOrientation::Response &res); - bool Pause(kortex_driver::Pause::Request &req, kortex_driver::Pause::Response &res); - bool Resume(kortex_driver::Resume::Request &req, kortex_driver::Resume::Response &res); - bool GetMeasuredCartesianPose(kortex_driver::GetMeasuredCartesianPose::Request &req, kortex_driver::GetMeasuredCartesianPose::Response &res); - bool GetCommandedCartesianPose(kortex_driver::GetCommandedCartesianPose::Request &req, kortex_driver::GetCommandedCartesianPose::Response &res); - bool GetTargetedCartesianPose(kortex_driver::GetTargetedCartesianPose::Request &req, kortex_driver::GetTargetedCartesianPose::Response &res); - bool SendTwistCommand(kortex_driver::SendTwistCommand::Request &req, kortex_driver::SendTwistCommand::Response &res); - bool GetMeasuredTwist(kortex_driver::GetMeasuredTwist::Request &req, kortex_driver::GetMeasuredTwist::Response &res); - bool GetCommandedTwist(kortex_driver::GetCommandedTwist::Request &req, kortex_driver::GetCommandedTwist::Response &res); - bool PlayJointTrajectory(kortex_driver::PlayJointTrajectory::Request &req, kortex_driver::PlayJointTrajectory::Response &res); - bool PlaySelectedJointTrajectory(kortex_driver::PlaySelectedJointTrajectory::Request &req, kortex_driver::PlaySelectedJointTrajectory::Response &res); - bool GetMeasuredJointAngles(kortex_driver::GetMeasuredJointAngles::Request &req, kortex_driver::GetMeasuredJointAngles::Response &res); - bool GetCommandedJointAngles(kortex_driver::GetCommandedJointAngles::Request &req, kortex_driver::GetCommandedJointAngles::Response &res); - bool SendJointSpeedsCommmand(kortex_driver::SendJointSpeedsCommmand::Request &req, kortex_driver::SendJointSpeedsCommmand::Response &res); - bool SendSelectedJointSpeedCommand(kortex_driver::SendSelectedJointSpeedCommand::Request &req, kortex_driver::SendSelectedJointSpeedCommand::Response &res); - bool GetMeasuredJointSpeeds(kortex_driver::GetMeasuredJointSpeeds::Request &req, kortex_driver::GetMeasuredJointSpeeds::Response &res); - bool GetCommandedJointSpeeds(kortex_driver::GetCommandedJointSpeeds::Request &req, kortex_driver::GetCommandedJointSpeeds::Response &res); - bool SendGripperCommand(kortex_driver::SendGripperCommand::Request &req, kortex_driver::SendGripperCommand::Response &res); - bool GetMeasuredGripperMovement(kortex_driver::GetMeasuredGripperMovement::Request &req, kortex_driver::GetMeasuredGripperMovement::Response &res); - bool GetCommandedGripperMovement(kortex_driver::GetCommandedGripperMovement::Request &req, kortex_driver::GetCommandedGripperMovement::Response &res); - bool SetAdmittance(kortex_driver::SetAdmittance::Request &req, kortex_driver::SetAdmittance::Response &res); - bool SetTwistWrenchReferenceFrame(kortex_driver::SetTwistWrenchReferenceFrame::Request &req, kortex_driver::SetTwistWrenchReferenceFrame::Response &res); - bool SetOperatingMode(kortex_driver::SetOperatingMode::Request &req, kortex_driver::SetOperatingMode::Response &res); - bool ApplyEmergencyStop(kortex_driver::ApplyEmergencyStop::Request &req, kortex_driver::ApplyEmergencyStop::Response &res); - bool ClearFaults(kortex_driver::ClearFaults::Request &req, kortex_driver::ClearFaults::Response &res); - bool GetActiveMap(kortex_driver::GetActiveMap::Request &req, kortex_driver::GetActiveMap::Response &res); - bool GetControlMode(kortex_driver::GetControlMode::Request &req, kortex_driver::GetControlMode::Response &res); - bool GetOperatingMode(kortex_driver::GetOperatingMode::Request &req, kortex_driver::GetOperatingMode::Response &res); - bool SetServoingMode(kortex_driver::SetServoingMode::Request &req, kortex_driver::SetServoingMode::Response &res); - bool GetServoingMode(kortex_driver::GetServoingMode::Request &req, kortex_driver::GetServoingMode::Response &res); - bool OnNotificationServoingModeTopic(kortex_driver::OnNotificationServoingModeTopic::Request &req, kortex_driver::OnNotificationServoingModeTopic::Response &res); - void cb_ServoingModeTopic(ServoingModeNotification notif); - bool GetSequenceState(kortex_driver::GetSequenceState::Request &req, kortex_driver::GetSequenceState::Response &res); - bool GetProtectionZoneState(kortex_driver::GetProtectionZoneState::Request &req, kortex_driver::GetProtectionZoneState::Response &res); - bool GetActionExecutionState(kortex_driver::GetActionExecutionState::Request &req, kortex_driver::GetActionExecutionState::Response &res); - bool RestoreFactorySettings(kortex_driver::RestoreFactorySettings::Request &req, kortex_driver::RestoreFactorySettings::Response &res); - bool RestoreNetworkFactorySettings(kortex_driver::RestoreNetworkFactorySettings::Request &req, kortex_driver::RestoreNetworkFactorySettings::Response &res); - bool Reboot(kortex_driver::Reboot::Request &req, kortex_driver::Reboot::Response &res); - bool OnNotificationFactoryTopic(kortex_driver::OnNotificationFactoryTopic::Request &req, kortex_driver::OnNotificationFactoryTopic::Response &res); - void cb_FactoryTopic(FactoryNotification notif); - bool GetAllConnectedControllers(kortex_driver::GetAllConnectedControllers::Request &req, kortex_driver::GetAllConnectedControllers::Response &res); - bool GetControllerState(kortex_driver::GetControllerState::Request &req, kortex_driver::GetControllerState::Response &res); - bool GetActuatorCount(kortex_driver::GetActuatorCount::Request &req, kortex_driver::GetActuatorCount::Response &res); - bool StartWifiScan(kortex_driver::StartWifiScan::Request &req, kortex_driver::StartWifiScan::Response &res); - bool GetConfiguredWifi(kortex_driver::GetConfiguredWifi::Request &req, kortex_driver::GetConfiguredWifi::Response &res); - bool OnNotificationNetworkTopic(kortex_driver::OnNotificationNetworkTopic::Request &req, kortex_driver::OnNotificationNetworkTopic::Response &res); - void cb_NetworkTopic(NetworkNotification notif); - bool GetArmState(kortex_driver::GetArmState::Request &req, kortex_driver::GetArmState::Response &res); - bool OnNotificationArmStateTopic(kortex_driver::OnNotificationArmStateTopic::Request &req, kortex_driver::OnNotificationArmStateTopic::Response &res); - void cb_ArmStateTopic(ArmStateNotification notif); - bool GetIPv4Information(kortex_driver::GetIPv4Information::Request &req, kortex_driver::GetIPv4Information::Response &res); - bool SetCountryCode(kortex_driver::SetCountryCode::Request &req, kortex_driver::SetCountryCode::Response &res); - bool GetCountryCode(kortex_driver::GetCountryCode::Request &req, kortex_driver::GetCountryCode::Response &res); - - -private: - TransportClientUdp* m_transport; - RouterClient* m_router; - - BaseCyclicClient* m_basecyclic; - BaseClient* m_base; - uint32_t m_CurrentDeviceID; - RouterClientSendOptions m_apiOptions; - - SessionManager* m_SessionManager; - - ros::NodeHandle m_n; - ros::Publisher m_pub_Error; - ros::Publisher m_pub_ConfigurationChangeTopic; - ros::Publisher m_pub_MappingInfoTopic; - ros::Publisher m_pub_ControlModeTopic; - ros::Publisher m_pub_OperatingModeTopic; - ros::Publisher m_pub_SequenceInfoTopic; - ros::Publisher m_pub_ProtectionZoneTopic; - ros::Publisher m_pub_UserTopic; - ros::Publisher m_pub_ControllerTopic; - ros::Publisher m_pub_ActionTopic; - ros::Publisher m_pub_RobotEventTopic; - ros::Publisher m_pub_ServoingModeTopic; - ros::Publisher m_pub_FactoryTopic; - ros::Publisher m_pub_NetworkTopic; - ros::Publisher m_pub_ArmStateTopic; -}; -#endif diff --git a/kortex_driver/src/non-generated/kortex_arm_driver.cpp b/kortex_driver/src/non-generated/kortex_arm_driver.cpp new file mode 100644 index 00000000..7b97089c --- /dev/null +++ b/kortex_driver/src/non-generated/kortex_arm_driver.cpp @@ -0,0 +1,422 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +#include "kortex_driver/non-generated/kortex_arm_driver.h" + +KortexArmDriver::KortexArmDriver(ros::NodeHandle nh): m_node_handle(nh), m_node_is_running(true), m_consecutive_base_cyclic_timeouts(0) +{ + // Start the node in the different initialization functions + parseRosArguments(); + initApi(); + verifyProductConfiguration(); + initRosServices(); + startActionServers(); + + // Start the thread to publish the feedback and joint states + m_pub_base_feedback = m_node_handle.advertise("base_feedback", 1000); + m_pub_joint_state = m_node_handle.advertise("base_feedback/joint_state", 1000); + m_publish_feedback_thread = std::thread(&KortexArmDriver::publishFeedback, this); + + // If we get here and no error was thrown we started the node correctly + ROS_INFO("%sThe Kortex driver has been initialized correctly!%s", GREEN_COLOR_CONSOLE, RESET_COLOR_CONSOLE); +} + +KortexArmDriver::~KortexArmDriver() +{ + // Kill the thread that publishes the joint states and feedback + m_node_is_running = false; + if (m_publish_feedback_thread.joinable()) + { + m_publish_feedback_thread.join(); + } + + delete m_action_server_follow_joint_trajectory; + if (m_action_server_gripper_command) + { + delete m_action_server_gripper_command; + } + + delete m_actuator_config_ros_services; + delete m_base_ros_services; + delete m_control_config_ros_services; + delete m_device_config_ros_services; + delete m_device_manager_ros_services; + delete m_interconnect_config_ros_services; + delete m_vision_config_ros_services; + + m_tcp_session_manager->CloseSession(); + m_udp_session_manager->CloseSession(); + m_tcp_router->SetActivationStatus(false); + m_udp_router->SetActivationStatus(false); + m_tcp_transport->disconnect(); + m_udp_transport->disconnect(); + + delete m_actuator_config; + delete m_base; + delete m_control_config; + delete m_device_config; + delete m_device_manager; + delete m_interconnect_config; + delete m_vision_config; + delete m_base_cyclic; + + delete m_tcp_session_manager; + delete m_udp_session_manager; + + delete m_tcp_router; + delete m_udp_router; + delete m_tcp_transport; + delete m_udp_transport; +} + +void KortexArmDriver::parseRosArguments() +{ + bool use_sim_time = false; + if (ros::param::get("/use_sim_time", use_sim_time)) + { + if (use_sim_time) + { + std::string error_string = "ROS parameter /use_sim_time is true : you may experience problems and you should set it to false and restart the driver."; + ROS_WARN("%s", error_string.c_str()); + } + } + + if (!ros::param::get("~ip_address", m_ip_address)) + { + std::string error_string = "IP address of the robot was not specified in the launch file, shutting down the node..."; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + + if (!ros::param::get("~cyclic_data_publish_rate", m_cyclic_data_publish_rate)) + { + std::string error_string = "Publish rate of the cyclic data was not specified in the launch file, shutting down the node..."; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + + if (!ros::param::get("~api_rpc_timeout_ms", m_api_rpc_timeout_ms)) + { + std::string error_string = "API RPC timeout duration was not specified in the launch file, shutting down the node..."; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + + if (!ros::param::get("~api_session_inactivity_timeout_ms", m_api_session_inactivity_timeout_ms)) + { + std::string error_string = "API session inactivity timeout duration was not specified in the launch file, shutting down the node..."; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + + if (!ros::param::get("~api_connection_inactivity_timeout_ms", m_api_connection_inactivity_timeout_ms)) + { + std::string error_string = "API connection inactivity timeout duration was not specified in the launch file, shutting down the node..."; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + + if (!ros::param::get("~arm", m_arm_name)) + { + std::string error_string = "Arm name was not specified in the launch file, shutting down the node..."; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + + if (!ros::param::get("~joint_names", m_arm_joint_names)) + { + std::string error_string = "Arm joint_names were not specified, shutting down the node..."; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + + if (!ros::param::get("~gripper", m_gripper_name)) + { + std::string error_string = "Gripper name was not specified in the launch file, shutting down the node..."; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + + if (isGripperPresent()) + { + // Get the gripper_joint_names size + if (!ros::param::get("~gripper_joint_names", m_gripper_joint_names)) + { + std::string error_string = "Gripper joint names were not specified in the launch file, shutting down the node..."; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + + // Get the gripper_joint_limits size + if (!ros::param::get("~gripper_joint_limits", m_gripper_joint_limits)) + { + std::string error_string = "Gripper joint limits were not specified in the launch file, shutting down the node..."; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + } +} + +void KortexArmDriver::initApi() +{ + // Create the transport objects and connect to the robot + // TCP for all the Config services + // UDP for the Cyclic services (the feedback) + m_tcp_transport = new Kinova::Api::TransportClientTcp(); + m_udp_transport = new Kinova::Api::TransportClientUdp(); + m_tcp_transport->connect(m_ip_address, TCP_PORT); + m_udp_transport->connect(m_ip_address, UDP_PORT); + + // Create the routers + m_tcp_router = new Kinova::Api::RouterClient(m_tcp_transport, [](Kinova::Api::KError err) { ROS_ERROR("Kortex API error was encountered with the TCP router: %s", err.toString().c_str()); }); + m_udp_router = new Kinova::Api::RouterClient(m_udp_transport, [](Kinova::Api::KError err) { ROS_ERROR("Kortex API error was encountered with the UDP router: %s", err.toString().c_str()); }); + + // Create the Protobuf services we are going to use in the ServiceProxy's + m_actuator_config = new Kinova::Api::ActuatorConfig::ActuatorConfigClient(m_tcp_router); + m_base = new Kinova::Api::Base::BaseClient(m_tcp_router); + m_control_config = new Kinova::Api::ControlConfig::ControlConfigClient(m_tcp_router); + m_device_config = new Kinova::Api::DeviceConfig::DeviceConfigClient(m_tcp_router); + m_device_manager = new Kinova::Api::DeviceManager::DeviceManagerClient(m_tcp_router); + m_interconnect_config = new Kinova::Api::InterconnectConfig::InterconnectConfigClient(m_tcp_router); + m_vision_config = new Kinova::Api::VisionConfig::VisionConfigClient(m_tcp_router); + + // Create the BaseCyclic Protobuf service for the feedback + m_base_cyclic = new Kinova::Api::BaseCyclic::BaseCyclicClient(m_udp_router); + + // Create the sessions so we can start using the robot + auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); + createSessionInfo.set_username("admin"); + createSessionInfo.set_password("admin"); + createSessionInfo.set_session_inactivity_timeout(m_api_session_inactivity_timeout_ms); + createSessionInfo.set_connection_inactivity_timeout(m_api_connection_inactivity_timeout_ms); + + m_tcp_session_manager = new Kinova::Api::SessionManager(m_tcp_router); + m_udp_session_manager = new Kinova::Api::SessionManager(m_udp_router); + + try + { + m_tcp_session_manager->CreateSession(createSessionInfo); + ROS_INFO("Session created successfully for TCP services"); + + m_udp_session_manager->CreateSession(createSessionInfo); + ROS_INFO("Session created successfully for UDP services"); + } + catch(std::runtime_error& ex_runtime) + { + std::string error_string = "The node could not connect to the arm. Did you specify the right IP address and is the arm powered on?"; + ROS_ERROR("%s", error_string.c_str()); + throw ex_runtime; + } +} + +void KortexArmDriver::verifyProductConfiguration() +{ + // Retrieve the Product Configuration + Kinova::Api::ProductConfiguration::CompleteProductConfiguration product_config = m_base->GetProductConfiguration(); + + // Compare arm model (ModelId) + if (m_arm_name == "gen3") + { + if (product_config.model() != Kinova::Api::ProductConfiguration::ModelId::MODEL_ID_L53) + { + std::string error_string = "The arm model specified in the launch file doesn't match the detected arm's model, shutting down the node..."; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + } + else if (m_arm_name == "pico") + { + if (product_config.model() != Kinova::Api::ProductConfiguration::ModelId::MODEL_ID_L31) + { + std::string error_string = "The arm model specified in the launch file doesn't match the detected arm's model, shutting down the node..."; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + } + else + { + std::string error_string = "The arm model specified in the launch file is not supported, shutting down the node..."; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + + // Compare gripper type (EndEffectorType) + if (!isGripperPresent()) + { + if (product_config.end_effector_type() != Kinova::Api::ProductConfiguration::EndEffectorType::END_EFFECTOR_TYPE_NOT_INSTALLED) + { + std::string error_string = "The gripper model specified in the launch file doesn't match the detected arm's gripper model, shutting down the node..."; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + } + else if (m_gripper_name == "robotiq_2f_85") + { + if (product_config.end_effector_type() != Kinova::Api::ProductConfiguration::EndEffectorType::END_EFFECTOR_TYPE_ROBOTIQ_2F_85) + { + std::string error_string = "The gripper model specified in the launch file doesn't match the detected arm's gripper model, shutting down the node..."; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + } + else + { + std::string error_string = "The gripper model specified in the launch file is not supported, shutting down the node..."; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + + // Set the ROS Param for the degrees of freedom + m_node_handle.setParam("degrees_of_freedom", int(product_config.degree_of_freedom())); + m_node_handle.setParam("is_gripper_present", isGripperPresent()); + + // Find all the devices and print the device ID's + ROS_INFO("-------------------------------------------------"); + ROS_INFO("Scanning all devices in robot... "); + auto devices = m_device_manager->ReadAllDevices(); + for (auto device : devices.device_handle()) + { + if (device.device_type() == Kinova::Api::Common::DeviceTypes::BASE) + { + ROS_INFO("Base device was found on device identifier %u", device.device_identifier()); + } + else if (device.device_type() == Kinova::Api::Common::DeviceTypes::SMALL_ACTUATOR + || device.device_type() == Kinova::Api::Common::DeviceTypes::MEDIUM_ACTUATOR + || device.device_type() == Kinova::Api::Common::DeviceTypes::BIG_ACTUATOR + || device.device_type() == Kinova::Api::Common::DeviceTypes::XBIG_ACTUATOR) + { + ROS_INFO("Actuator device of type %s was found on device identifier %u", Kinova::Api::Common::DeviceTypes_Name(device.device_type()).c_str(), device.device_identifier()); + } + else if (device.device_type() == Kinova::Api::Common::DeviceTypes::INTERCONNECT) + { + m_interconnect_device_id = device.device_identifier(); + ROS_INFO("Interconnect device was found on device identifier %u", m_interconnect_device_id); + } + else if (device.device_type() == Kinova::Api::Common::DeviceTypes::VISION) + { + m_vision_device_id = device.device_identifier(); + ROS_INFO("Vision device was found on device identifier %u", m_vision_device_id); + } + } + ROS_INFO("-------------------------------------------------"); +} + +void KortexArmDriver::initRosServices() +{ + ROS_INFO("-------------------------------------------------"); + ROS_INFO("Initializing Kortex Driver's services..."); + m_actuator_config_ros_services = new ActuatorConfigServices(m_node_handle, m_actuator_config, 0, m_api_rpc_timeout_ms); + m_base_ros_services = new BaseServices(m_node_handle, m_base, 0, m_api_rpc_timeout_ms); + m_control_config_ros_services = new ControlConfigServices(m_node_handle, m_control_config, 0, m_api_rpc_timeout_ms); + m_device_config_ros_services = new DeviceConfigServices(m_node_handle, m_device_config, 0, m_api_rpc_timeout_ms); + m_device_manager_ros_services = new DeviceManagerServices(m_node_handle, m_device_manager, 0, m_api_rpc_timeout_ms); + m_interconnect_config_ros_services = new InterconnectConfigServices(m_node_handle, m_interconnect_config, m_interconnect_device_id, m_api_rpc_timeout_ms); + m_vision_config_ros_services = new VisionConfigServices(m_node_handle, m_vision_config, m_vision_device_id, m_api_rpc_timeout_ms); + std::this_thread::sleep_for(std::chrono::milliseconds(2000)); + ROS_INFO("Kortex Driver's services initialized correctly."); + ROS_INFO("-------------------------------------------------"); +} + +void KortexArmDriver::startActionServers() +{ + // Start Action servers + m_action_server_follow_joint_trajectory = new PreComputedJointTrajectoryActionServer(m_arm_name + "_joint_trajectory_controller/follow_joint_trajectory", m_node_handle, m_base, m_base_cyclic); + // Start Gripper Action Server if the arm has a gripper + m_action_server_gripper_command = nullptr; + if (m_gripper_name == "robotiq_2f_85") + { + m_action_server_gripper_command = new RobotiqGripperCommandActionServer(m_gripper_name + "_gripper_controller/gripper_cmd", m_gripper_joint_names[0], m_gripper_joint_limits[0], m_node_handle, m_base, m_base_cyclic); + } +} + +bool KortexArmDriver::isGripperPresent() +{ + return m_gripper_name != ""; +} + +void KortexArmDriver::publishFeedback() +{ + + Kinova::Api::BaseCyclic::Feedback feedback_from_api; + sensor_msgs::JointState joint_state; + + ros::Rate rate(m_cyclic_data_publish_rate); + while (m_node_is_running) + { + try + { + feedback_from_api = m_base_cyclic->RefreshFeedback(); + } + catch (Kinova::Api::KDetailedException& ex) + { + ROS_WARN("Kortex exception while getting the base_feedback"); + ROS_WARN("Error code: %s\n", Kinova::Api::ErrorCodes_Name(ex.getErrorInfo().getError().error_code()).c_str()); + ROS_WARN("Error sub code: %s\n", Kinova::Api::SubErrorCodes_Name(Kinova::Api::SubErrorCodes(ex.getErrorInfo().getError().error_sub_code())).c_str()); + ROS_WARN("Error description: %s\n", ex.what()); + } + catch (std::runtime_error& ex_runtime) + { + ROS_DEBUG("Runtime exception detected while getting feedback! %d", ++m_consecutive_base_cyclic_timeouts); + ROS_DEBUG("%s", ex_runtime.what()); + } + catch (std::future_error& ex_future) + { + ROS_DEBUG("Future exception detected while getting feedback : %s", ex_future.what()); + } + + // If the arm has disconnected, the node cannot continue running + if (m_consecutive_base_cyclic_timeouts > MAX_CONSECUTIVE_TIMEOUTS_BEFORE_SHUTDOWN) + { + std::string error_string = "Too many consecutive timeouts : killing the node."; + ROS_ERROR("%s", error_string.c_str()); + ros::shutdown(); + return; + } + + m_consecutive_base_cyclic_timeouts = 0; + kortex_driver::BaseCyclic_Feedback base_feedback; + ToRosData(feedback_from_api, base_feedback); + + joint_state.name.resize(base_feedback.actuators.size() + base_feedback.interconnect.oneof_tool_feedback.gripper_feedback[0].motor.size()); + joint_state.position.resize(base_feedback.actuators.size() + base_feedback.interconnect.oneof_tool_feedback.gripper_feedback[0].motor.size()); + joint_state.velocity.resize(base_feedback.actuators.size() + base_feedback.interconnect.oneof_tool_feedback.gripper_feedback[0].motor.size()); + joint_state.effort.resize(base_feedback.actuators.size() + base_feedback.interconnect.oneof_tool_feedback.gripper_feedback[0].motor.size()); + joint_state.header.stamp = ros::Time::now(); + + for (int i = 0; i < base_feedback.actuators.size(); i++) + { + joint_state.name[i] = m_arm_joint_names[i]; + joint_state.position[i] = m_math_util.wrapRadiansFromMinusPiToPi(m_math_util.toRad(base_feedback.actuators[i].position)); + joint_state.velocity[i] = m_math_util.toRad(base_feedback.actuators[i].velocity); + joint_state.effort[i] = base_feedback.actuators[i].torque; + } + + if (m_gripper_name == "robotiq_2f_85") + { + for (int i = 0; i < base_feedback.interconnect.oneof_tool_feedback.gripper_feedback[0].motor.size(); i++) + { + int joint_state_index = base_feedback.actuators.size() + i; + joint_state.name[joint_state_index] = m_gripper_joint_names[i]; + // Arm feedback is between 0 and 100, and upper limit in URDF is specified in gripper_joint_limits[i] parameter + joint_state.position[joint_state_index] = base_feedback.interconnect.oneof_tool_feedback.gripper_feedback[0].motor[i].position / 100.0 * m_gripper_joint_limits[i]; + joint_state.velocity[joint_state_index] = base_feedback.interconnect.oneof_tool_feedback.gripper_feedback[0].motor[i].velocity; + // Not supported for now + joint_state.effort[joint_state_index] = 0.0; + } + } + + m_pub_base_feedback.publish(base_feedback); + m_pub_joint_state.publish(joint_state); + + rate.sleep(); + } +} diff --git a/kortex_driver/src/non-generated/kortex_math_util.cpp b/kortex_driver/src/non-generated/kortex_math_util.cpp new file mode 100644 index 00000000..469f6e0e --- /dev/null +++ b/kortex_driver/src/non-generated/kortex_math_util.cpp @@ -0,0 +1,65 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +#include "kortex_driver/non-generated/kortex_math_util.h" + +double KortexMathUtil::toRad(double degree) +{ + return degree * M_PI / 180.0; +} + +double KortexMathUtil::toDeg(double rad) +{ + return rad * 180.0 / M_PI; +} + +double KortexMathUtil::wrapRadiansFromMinusPiToPi(double rad_not_wrapped) +{ + bool properly_wrapped = false; + do + { + if (rad_not_wrapped > M_PI) + { + rad_not_wrapped -= 2.0*M_PI; + } + else if (rad_not_wrapped < -M_PI) + { + rad_not_wrapped += 2.0*M_PI; + } + else + { + properly_wrapped = true; + } + } while(!properly_wrapped); + return rad_not_wrapped; +} + +double KortexMathUtil::wrapDegreesFromZeroTo360(double deg_not_wrapped) +{ + bool properly_wrapped = false; + do + { + if (deg_not_wrapped > 360.0) + { + deg_not_wrapped -= 360.0; + } + else if (deg_not_wrapped < 0.0) + { + deg_not_wrapped += 360.0; + } + else + { + properly_wrapped = true; + } + } while(!properly_wrapped); + return deg_not_wrapped; +} diff --git a/kortex_driver/src/non-generated/main.cpp b/kortex_driver/src/non-generated/main.cpp new file mode 100644 index 00000000..82dde097 --- /dev/null +++ b/kortex_driver/src/non-generated/main.cpp @@ -0,0 +1,30 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +#include "kortex_driver/non-generated/kortex_arm_driver.h" + +int main(int argc, char **argv) +{ + ros::init(argc, argv, "kortex_arm_driver"); + + // if(ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME, ros::console::levels::Info) ) { + // ros::console::notifyLoggerLevelsChanged(); + // } + + ros::NodeHandle n; + + KortexArmDriver kortex_arm_driver(n); + + ros::spin(); + + return 1; +} \ No newline at end of file diff --git a/kortex_driver/src/non-generated/pre_computed_joint_trajectory_action_server.cpp b/kortex_driver/src/non-generated/pre_computed_joint_trajectory_action_server.cpp new file mode 100644 index 00000000..88731819 --- /dev/null +++ b/kortex_driver/src/non-generated/pre_computed_joint_trajectory_action_server.cpp @@ -0,0 +1,511 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +#include "kortex_driver/non-generated/pre_computed_joint_trajectory_action_server.h" +#include +#include + +PreComputedJointTrajectoryActionServer::PreComputedJointTrajectoryActionServer(const std::string& server_name, ros::NodeHandle& nh, Kinova::Api::Base::BaseClient* base, Kinova::Api::BaseCyclic::BaseCyclicClient* base_cyclic): + m_server_name(server_name), + m_node_handle(nh), + m_server(nh, server_name, boost::bind(&PreComputedJointTrajectoryActionServer::goal_received_callback, this, _1), boost::bind(&PreComputedJointTrajectoryActionServer::preempt_received_callback, this, _1), false), + m_base(base), + m_base_cyclic(base_cyclic), + m_server_state(ActionServerState::INITIALIZING) +{ + // Get the ROS params + if (!ros::param::get("~default_goal_time_tolerance", m_default_goal_time_tolerance)) + { + ROS_WARN("Parameter default_goal_time_tolerance was not specified; assuming 0.5 as default value."); + m_default_goal_time_tolerance = 0.5; + } + if (!ros::param::get("~default_goal_tolerance", m_default_goal_tolerance)) + { + ROS_WARN("Parameter default_goal_tolerance was not specified; assuming 0.5 as default value."); + m_default_goal_time_tolerance = 0.5; + } + if (!ros::param::get("~joint_names", m_joint_names)) + { + std::string error_string = "Parameter joint_names was not specified"; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + + // Subscribe to the arm's Action Notifications + m_sub_action_notif_handle = m_base->OnNotificationActionTopic(std::bind(&PreComputedJointTrajectoryActionServer::action_notif_callback, this, std::placeholders::_1), Kinova::Api::Common::NotificationOptions()); + + // Ready to receive goal + m_server.start(); + set_server_state(ActionServerState::IDLE); +} + +PreComputedJointTrajectoryActionServer::~PreComputedJointTrajectoryActionServer() +{ + m_base->Unsubscribe(m_sub_action_notif_handle); +} + +void PreComputedJointTrajectoryActionServer::goal_received_callback(actionlib::ActionServer::GoalHandle new_goal_handle) +{ + ROS_INFO("New goal received."); + if (!is_goal_acceptable(new_goal_handle)) + { + ROS_ERROR("Joint Trajectory Goal is rejected."); + new_goal_handle.setRejected(); + return; + } + + if (m_server_state != ActionServerState::IDLE) + { + ROS_WARN("There is already an active goal. It is being cancelled."); + // We have to call Stop after having received the ACTION_START notification from the arm + stop_all_movement(); + } + + // Make sure to clear the faults before moving the robot + m_base->ClearFaults(); + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); + + // Accept the goal + ROS_INFO("Joint Trajectory Goal is accepted."); + m_goal = new_goal_handle; + m_goal.setAccepted(); + + // Check if we are already there physically + if (is_goal_tolerance_respected(false, false)) + { + ROS_INFO("We already reached the goal position : nothing to do."); + m_goal.setSucceeded(); + return; + } + + // Construct the Protobuf object trajectory + trajectory_msgs::JointTrajectory ros_trajectory = m_goal.getGoal()->trajectory; + + Kinova::Api::Base::PreComputedJointTrajectory proto_trajectory; + + // Set the continuity mode + proto_trajectory.set_mode(Kinova::Api::Base::TrajectoryContinuityMode::TRAJECTORY_CONTINUITY_MODE_POSITION); + + // Copy the trajectory points from the ROS structure to the Protobuf structure + for (auto traj_point : m_goal.getGoal()->trajectory.points) + { + Kinova::Api::Base::PreComputedJointTrajectoryElement* proto_element = proto_trajectory.add_trajectory_elements(); + for (auto position : traj_point.positions) + { + proto_element->add_joint_angles(m_math_util.toDeg(position)); + } + for (auto velocity : traj_point.velocities) + { + proto_element->add_joint_speeds(m_math_util.toDeg(velocity)); + } + for (auto acceleration : traj_point.accelerations) + { + proto_element->add_joint_accelerations(m_math_util.toDeg(acceleration)); + } + proto_element->set_time_from_start(traj_point.time_from_start.toSec()); + } + + // Send the trajectory to the robot + try + { + m_base->PlayPreComputedJointTrajectory(proto_trajectory); + set_server_state(ActionServerState::PRE_PROCESSING_PENDING); + } + catch (Kinova::Api::KDetailedException& ex) + { + ROS_ERROR("Kortex exception while sending the trajectory"); + ROS_ERROR("Error code: %s\n", Kinova::Api::ErrorCodes_Name(ex.getErrorInfo().getError().error_code()).c_str()); + ROS_ERROR("Error sub code: %s\n", Kinova::Api::SubErrorCodes_Name(Kinova::Api::SubErrorCodes(ex.getErrorInfo().getError().error_sub_code())).c_str()); + ROS_ERROR("Error description: %s\n", ex.what()); + m_goal.setAborted(); + } + catch (std::runtime_error& ex_runtime) + { + ROS_ERROR("Runtime exception detected while sending the trajectory"); + ROS_ERROR("%s", ex_runtime.what()); + m_goal.setAborted(); + } + catch (std::future_error& ex_future) + { + ROS_ERROR("Future exception detected while getting feedback"); + ROS_ERROR("%s", ex_future.what()); + m_goal.setAborted(); + } +} + +// Called in a separate thread when a preempt request comes in from the Action Client +void PreComputedJointTrajectoryActionServer::preempt_received_callback(actionlib::ActionServer::GoalHandle goal_handle) +{ + if (m_server_state == ActionServerState::TRAJECTORY_EXECUTION_IN_PROGRESS) + { + stop_all_movement(); + } +} + +// Called in a separate thread when a notification comes in +void PreComputedJointTrajectoryActionServer::action_notif_callback(Kinova::Api::Base::ActionNotification notif) +{ + ROS_DEBUG("Action notification received."); + Kinova::Api::Base::ActionEvent event = notif.action_event(); + Kinova::Api::Base::ActionHandle handle = notif.handle(); + Kinova::Api::Base::ActionType type = handle.action_type(); + + control_msgs::FollowJointTrajectoryResult result; + std::ostringstream oss; + + if (type == Kinova::Api::Base::ActionType::PLAY_PRE_COMPUTED_TRAJECTORY) + { + switch (event) + { + // The pre-processing is starting in the arm + case Kinova::Api::Base::ActionEvent::ACTION_PREPROCESS_START: + // It should be starting + if (m_server_state == ActionServerState::PRE_PROCESSING_PENDING) + { + ROS_INFO("Preprocessing has started in the arm."); + set_server_state(ActionServerState::PRE_PROCESSING_IN_PROGRESS); + } + // We should not have received that + else + { + ROS_ERROR("Notification mismatch : received ACTION_PREPROCESS_START but we are in %s", actionServerStateNames[int(m_server_state)]); + } + break; + + // The pre-processing has ended successfully in the arm + case Kinova::Api::Base::ActionEvent::ACTION_PREPROCESS_END: + // It was ongoing and now it ended + if (m_server_state == ActionServerState::PRE_PROCESSING_PENDING || + m_server_state == ActionServerState::PRE_PROCESSING_IN_PROGRESS) + { + ROS_INFO("Preprocessing has finished in the arm and goal has been accepted."); + set_server_state(ActionServerState::TRAJECTORY_EXECUTION_PENDING); + } + // We should not have received that + else + { + ROS_ERROR("Notification mismatch : received ACTION_PREPROCESS_END but we are in %s", actionServerStateNames[int(m_server_state)]); + } + break; + + // The pre-processing has failed in the arm + case Kinova::Api::Base::ActionEvent::ACTION_PREPROCESS_ABORT: + // It was ongoing and now it ended (and failed) + if ((m_server_state == ActionServerState::PRE_PROCESSING_IN_PROGRESS)) + { + ROS_ERROR("Preprocessing has finished in the arm and goal has been rejected. Fetching the error report from the arm..."); + + result.error_code = result.INVALID_GOAL; + + // Get the error report and show errors here + Kinova::Api::Base::TrajectoryErrorReport report = m_base->GetTrajectoryErrorReport(); + oss << "Error report has been fetched and error elements are listed below : " << std::endl; + int i = 1; + for (auto error_element : report.trajectory_error_elements()) + { + oss << "-----------------------------" << std::endl; + oss << "Error #" << i << std::endl; + oss << "Type : " << Kinova::Api::Base::TrajectoryErrorType_Name(error_element.error_type()) << std::endl; + oss << "Identifier : " << Kinova::Api::Base::TrajectoryErrorIdentifier_Name(error_element.error_identifier()) << std::endl; + oss << "Actuator : " << error_element.index()+1 << std::endl; + oss << "Erroneous value is " << error_element.error_value() << " but minimum permitted is " << error_element.min_value() << " and maximum permitted is " << error_element.max_value() << std::endl; + if (error_element.message() != "") + { + oss << "Additional message is : " << error_element.message() << std::endl; + } + oss << "-----------------------------" << std::endl; + + i++; + } + + ROS_ERROR("%s", oss.str().c_str()); + + result.error_string = oss.str(); + m_goal.setAborted(result); + + set_server_state(ActionServerState::IDLE); + } + // We should not have received that + else + { + ROS_ERROR("Notification mismatch : received ACTION_PREPROCESS_ABORT but we are in %s", actionServerStateNames[int(m_server_state)]); + } + break; + + // The arm is starting to move + case Kinova::Api::Base::ActionEvent::ACTION_START: + // The preprocessing was done and the goal is still active (not preempted) + if ((m_server_state == ActionServerState::TRAJECTORY_EXECUTION_PENDING) && + m_goal.getGoalStatus().status == actionlib_msgs::GoalStatus::ACTIVE) + { + ROS_INFO("Trajectory has started."); + set_server_state(ActionServerState::TRAJECTORY_EXECUTION_IN_PROGRESS); + // Remember when the trajectory started + m_trajectory_start_time = std::chrono::system_clock::now(); + } + // The preprocessing was done but the goal put to "PREEMPTING" by the client while preprocessing + // The stop_all_movement() call will trigger a ACTION_ABORT notification + else if ((m_server_state == ActionServerState::TRAJECTORY_EXECUTION_PENDING) && + m_goal.getGoalStatus().status == actionlib_msgs::GoalStatus::PREEMPTING) + { + ROS_INFO("Trajectory has started but goal was cancelled : stopping all movement."); + stop_all_movement(); + } + // We should not have received that + else + { + ROS_ERROR("Notification mismatch : received ACTION_START but we are in %s", actionServerStateNames[int(m_server_state)]); + } + break; + + // The action was started in the arm, but it aborted + case Kinova::Api::Base::ActionEvent::ACTION_ABORT: + // The goal is still active, but we received a ABORT before starting, or during execution + if (m_goal.getGoalStatus().status == actionlib_msgs::GoalStatus::ACTIVE && + (m_server_state == ActionServerState::TRAJECTORY_EXECUTION_IN_PROGRESS || + m_server_state == ActionServerState::TRAJECTORY_EXECUTION_PENDING)) + { + ROS_ERROR("Trajectory has been aborted."); + + result.error_code = result.PATH_TOLERANCE_VIOLATED; + oss << "Trajectory execution failed in the arm with sub error code " << notif.abort_details() << std::endl; + if (notif.abort_details() == Kinova::Api::SubErrorCodes::CONTROL_WRONG_STARTING_POINT) + { + oss << "The starting point for the trajectory did not match the actual commanded joint angles." << std::endl; + } + else if (notif.abort_details() == Kinova::Api::SubErrorCodes::CONTROL_MANUAL_STOP) + { + oss << "The speed while executing the trajectory was too damn high and caused the robot to stop." << std::endl; + } + result.error_string = oss.str(); + m_goal.setAborted(result); + + ROS_ERROR("%s", oss.str().c_str()); + set_server_state(ActionServerState::IDLE); + } + // The goal was cancelled and we received a ACTION_ABORT : this means the trajectory was cancelled successfully in the arm + else if (m_goal.getGoalStatus().status == actionlib_msgs::GoalStatus::PREEMPTING && + (m_server_state == ActionServerState::TRAJECTORY_EXECUTION_IN_PROGRESS || + m_server_state == ActionServerState::TRAJECTORY_EXECUTION_PENDING)) + { + ROS_INFO("Trajectory has been cancelled successfully in the arm."); + m_goal.setCanceled(); + set_server_state(ActionServerState::IDLE); + } + // We should not have received that + else + { + ROS_ERROR("Notification mismatch : received ACTION_ABORT but we are in %s", actionServerStateNames[int(m_server_state)]); + } + break; + + // The trajectory just ended + case Kinova::Api::Base::ActionEvent::ACTION_END: + { + // The trajectory was ongoing + if ((m_server_state == ActionServerState::TRAJECTORY_EXECUTION_IN_PROGRESS)) + { + ROS_INFO("Trajectory has finished in the arm."); + m_trajectory_end_time = std::chrono::system_clock::now(); + bool is_tolerance_respected = is_goal_tolerance_respected(true, true); + if (is_tolerance_respected) + { + result.error_code = result.SUCCESSFUL; + ROS_INFO("Trajectory execution succeeded."); + m_goal.setSucceeded(result); + } + else + { + result.error_code = result.PATH_TOLERANCE_VIOLATED; + oss << "After validation, trajectory execution failed in the arm with sub error code " << notif.abort_details(); + result.error_string = oss.str(); + + ROS_ERROR("%s", oss.str().c_str()); + m_goal.setAborted(result); + } + set_server_state(ActionServerState::IDLE); + } + // We should not have received that + else + { + ROS_ERROR("Notification mismatch : received ACTION_END but we are in %s", actionServerStateNames[int(m_server_state)]); + } + break; + } + + case Kinova::Api::Base::ActionEvent::ACTION_PAUSE: + ROS_WARN("Action pause event was just received and this should never happen."); + break; + + default: + ROS_WARN("Unknown action event was just received and this should never happen."); + break; + } + } + // Wrong action type. Rejecting the notification. Action server state unchanged. + else + { + return; + } + + oss.flush(); +} + +bool PreComputedJointTrajectoryActionServer::is_goal_acceptable(actionlib::ActionServer::GoalHandle goal_handle) +{ + // First check if goal is valid + if (!goal_handle.isValid()) + { + return false; + } + + // Retrieve the goal + control_msgs::FollowJointTrajectoryGoalConstPtr goal = goal_handle.getGoal(); + + // Goal does not command the right number of actuators + if (goal->trajectory.joint_names.size() != m_joint_names.size()) + { + ROS_ERROR("Goal commands %lu actuators, but arm has %lu.", goal->trajectory.joint_names.size(), m_joint_names.size()); + return false; + } + + // Goal does not command the right actuators + if (m_joint_names != goal->trajectory.joint_names) + { + ROS_ERROR("There is a mismatch between the goal's joint names and the action server's joint names."); + ROS_INFO("Action server joint names are :"); + for (auto j : m_joint_names) + { + std::cout << j << ", "; + } + std::cout << std::endl; + ROS_INFO("Goal joint names are :"); + for (auto j : goal->trajectory.joint_names) + { + std::cout << j << ", "; + } + std::cout << std::endl; + return false; + } + + // Goal needs to have 1msec timesteps intervals between all trajectory points to not be rejected + double difference = 0.0; + bool result = true; + trajectory_msgs::JointTrajectoryPoint traj_point; + for (int i = 1; i < goal->trajectory.points.size() && result; i++) + { + difference = goal->trajectory.points.at(i).time_from_start.toSec() - goal->trajectory.points.at(i-1).time_from_start.toSec(); + if (i > 0 && i < goal->trajectory.points.size()-1) + { + result = (fabs(difference-0.001) < 10.0*FLT_EPSILON); + } + } + return result; +} + +bool PreComputedJointTrajectoryActionServer::is_goal_tolerance_respected(bool enable_prints, bool check_time_tolerance) +{ + // Get feedback from arm + bool is_goal_respected = true; + Kinova::Api::BaseCyclic::Feedback feedback = m_base_cyclic->RefreshFeedback(); + auto goal = m_goal.getGoal(); + + // Check the goal_time_tolerance for trajectory execution + if (check_time_tolerance) + { + double actual_trajectory_duration = std::chrono::duration(m_trajectory_end_time - m_trajectory_start_time).count(); + double desired_trajectory_duration = goal->trajectory.points.at(goal->trajectory.points.size()-1).time_from_start.toSec(); + double time_tolerance = goal->goal_time_tolerance.toSec() == 0.0 ? m_default_goal_time_tolerance : goal->goal_time_tolerance.toSec(); + if (actual_trajectory_duration > desired_trajectory_duration + time_tolerance ) + { + if (enable_prints) + ROS_ERROR("Goal duration tolerance was exceeded. Maximum desired duration was %f seconds and actual duration was %f", desired_trajectory_duration + time_tolerance, actual_trajectory_duration); + return false; + } + else if (actual_trajectory_duration < desired_trajectory_duration - time_tolerance) + { + if (enable_prints) + ROS_ERROR("Goal duration threshold was not reached. Minimum desired duration was %f seconds and actual duration was %f", desired_trajectory_duration - time_tolerance, actual_trajectory_duration); + return false; + } + } + + // If position tolerances were specified, use them. + // If the goal->goal_tolerance vector is empty, fill it with default values + std::vector goal_tolerances; + if (goal->goal_tolerance.empty()) + { + ROS_DEBUG("Goal did not specify tolerances, using default tolerance of %f degrees for every joint.", m_default_goal_tolerance); + for (int i = 0; i < m_joint_names.size(); i++) + { + goal_tolerances.push_back(m_default_goal_tolerance); + } + } + else + { + for (auto tol : goal->goal_tolerance) + { + goal_tolerances.push_back(tol.position); + } + } + + // Check the joint tolerances on the goal's end position + int current_index = 0; + for (auto act: feedback.actuators()) + { + double actual_position = act.position(); // in degrees + double desired_position = m_math_util.wrapDegreesFromZeroTo360(m_math_util.toDeg(goal->trajectory.points.at(goal->trajectory.points.size()-1).positions[current_index])); + double tolerance = 0.0; + + if (goal_tolerances[current_index] == -1.0) + { + current_index++; + continue; // no tolerance set for this joint + } + else + { + tolerance = m_math_util.toDeg(goal_tolerances[current_index]); + } + + double error = m_math_util.wrapDegreesFromZeroTo360(std::min(fabs(actual_position - desired_position), fabs(fabs(actual_position - desired_position) - 360.0))); + if (error > tolerance) + { + is_goal_respected = false; + if (enable_prints) + ROS_ERROR("The tolerance for joint %u was not met. Desired position is %f and actual position is %f", current_index + 1, desired_position, actual_position); + } + current_index++; + } + + return is_goal_respected; +} + +void PreComputedJointTrajectoryActionServer::stop_all_movement() +{ + ROS_INFO("Calling Stop on the robot."); + try + { + m_base->Stop(); + } + catch(const Kinova::Api::KBasicException& e) + { + ROS_WARN("Stop failed : %s", e.what()); + } +} + +void PreComputedJointTrajectoryActionServer::set_server_state(ActionServerState s) +{ + std::lock_guard guard(m_server_state_lock); + ActionServerState old_state = m_server_state; + m_server_state = s; + ROS_INFO("State changed from %s to %s\n", actionServerStateNames[int(old_state)], actionServerStateNames[int(s)]); +} diff --git a/kortex_driver/src/non-generated/robotiq_gripper_command_action_server.cpp b/kortex_driver/src/non-generated/robotiq_gripper_command_action_server.cpp new file mode 100644 index 00000000..442cc6b1 --- /dev/null +++ b/kortex_driver/src/non-generated/robotiq_gripper_command_action_server.cpp @@ -0,0 +1,223 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +#include "kortex_driver/non-generated/robotiq_gripper_command_action_server.h" + +RobotiqGripperCommandActionServer::RobotiqGripperCommandActionServer(const std::string& server_name, const std::string& gripper_joint_name, double gripper_joint_limit, ros::NodeHandle& nh, Kinova::Api::Base::BaseClient* base, Kinova::Api::BaseCyclic::BaseCyclicClient* base_cyclic): + m_server_name(server_name), + m_gripper_joint_name(gripper_joint_name), + m_gripper_joint_limit(gripper_joint_limit), + m_node_handle(nh), + m_server(nh, server_name, boost::bind(&RobotiqGripperCommandActionServer::goal_received_callback, this, _1), boost::bind(&RobotiqGripperCommandActionServer::preempt_received_callback, this, _1), false), + m_base(base), + m_base_cyclic(base_cyclic), + m_is_trajectory_running(false) +{ + // Construct cancel gripper command now so we can just send it whenever we need to + m_cancel_gripper_command.set_mode(Kinova::Api::Base::GripperMode::GRIPPER_SPEED); + auto g = m_cancel_gripper_command.mutable_gripper(); + auto f = g->add_finger(); + f->set_finger_identifier(0); + f->set_value(0); + + // Ready to receive goal + m_server.start(); +} + +RobotiqGripperCommandActionServer::~RobotiqGripperCommandActionServer() +{ + join_polling_thread(); +} + +void RobotiqGripperCommandActionServer::goal_received_callback(actionlib::ActionServer::GoalHandle new_goal_handle) +{ + ROS_INFO("New goal received."); + if (!is_goal_acceptable(new_goal_handle)) + { + ROS_ERROR("Gripper Command Goal is rejected."); + new_goal_handle.setRejected(); + return; + } + + // Deal with active goals + if (m_is_trajectory_running) + { + ROS_WARN("There is already an active goal. It is being cancelled."); + stop_all_movement(); + } + + // Accept the goal + m_goal = new_goal_handle; + m_goal.setAccepted(); + + // Construct the Protobuf gripper command + control_msgs::GripperCommand ros_gripper_command = m_goal.getGoal()->command; + Kinova::Api::Base::GripperCommand proto_gripper_command; + + proto_gripper_command.set_mode(Kinova::Api::Base::GripperMode::GRIPPER_POSITION); + auto gripper = proto_gripper_command.mutable_gripper(); + // Position for a finger must be between relative (between 0 and 1), but position is absolute in the Goal coming from ROS + double relative_position = relative_position_from_absolute(ros_gripper_command.position); + auto finger = gripper->add_finger(); + finger->set_finger_identifier(0); + finger->set_value(relative_position); + + // Send the gripper command to the robot + m_base->SendGripperCommand(proto_gripper_command); + m_is_trajectory_running_lock.lock(); + m_is_trajectory_running = true; + m_is_trajectory_running_lock.unlock(); + + // Start the thread to monitor the position + join_polling_thread(); + m_gripper_position_polling_thread = std::thread(&RobotiqGripperCommandActionServer::gripper_position_polling_thread, this); +} + +// Called in a separate thread when a preempt request comes in from the Action Client +void RobotiqGripperCommandActionServer::preempt_received_callback(actionlib::ActionServer::GoalHandle goal_handle) +{ + ROS_WARN("Preempt received from client"); + if (m_is_trajectory_running) + { + stop_all_movement(); + } + else + { + ROS_WARN("Trajectory is not running but we received a pre-empt request from client."); + } +} + +// Called in a separate thread when a notification comes in +void RobotiqGripperCommandActionServer::gripper_position_polling_thread() +{ + std::chrono::system_clock::time_point now = m_trajectory_start_time = std::chrono::system_clock::now(); + Kinova::Api::BaseCyclic::Feedback feedback = m_base_cyclic->RefreshFeedback(); + //TODO When position feedback will be between 0 and 1, remove the *100 ot /100 in this file + double previous_gripper_position = feedback.interconnect().gripper_feedback().motor(0).position() / 100.0; + double actual_gripper_position; + int n_stuck = 0; + + // Break the loop if the trajectory is not running or if the trajectory lasted more than the timeout limit + while(m_is_trajectory_running && (std::chrono::duration(now - m_trajectory_start_time).count() < GRIPPER_TRAJECTORY_TIME_LIMIT)) + { + // Every 50ms + std::this_thread::sleep_for(std::chrono::milliseconds(50)); + + // Get gripper position and find if we're stuck + feedback = m_base_cyclic->RefreshFeedback(); + actual_gripper_position = feedback.interconnect().gripper_feedback().motor(0).position() / 100.0; + if (fabs(actual_gripper_position - previous_gripper_position) > ROBOTIQ_GRIPPER_RELATIVE_ERROR) + { + n_stuck = 0; + } + else + { + n_stuck++; + } + previous_gripper_position = actual_gripper_position; + + // If we're stuck, the trajectory is over + if (n_stuck >= 2) // 100ms in the same position + { + m_is_trajectory_running_lock.lock(); + m_is_trajectory_running = false; + m_is_trajectory_running_lock.unlock(); + } + } + + // We got out this loop, meaning the trajectory is over or the time is up + // The trajectory is not running, meaning it's finished or it was stopped + if (!m_is_trajectory_running) + { + if (is_goal_tolerance_respected()) + { + m_goal.setSucceeded(); + } + else + { + m_goal.setAborted(); + } + } + + // Timeout was reached + // This shouldn't happen, really + else + { + m_goal.setAborted(); + } + + return; +} + +bool RobotiqGripperCommandActionServer::is_goal_acceptable(actionlib::ActionServer::GoalHandle goal_handle) +{ + // First check if goal is valid + if (!goal_handle.isValid()) + { + return false; + } + + // Retrieve the goal + control_msgs::GripperCommandGoalConstPtr goal = goal_handle.getGoal(); + + // If the position is not in the joint limits range, reject the goal + double relative_position = relative_position_from_absolute(goal_handle.getGoal()->command.position); + if (relative_position > 1 || relative_position < 0) + { + return false; + } + + return true; +} + +bool RobotiqGripperCommandActionServer::is_goal_tolerance_respected() +{ + Kinova::Api::BaseCyclic::Feedback feedback = m_base_cyclic->RefreshFeedback(); + double actual_gripper_position = feedback.interconnect().gripper_feedback().motor(0).position() / 100.0; + + return m_goal.getGoal()->command.position < absolute_position_from_relative(actual_gripper_position + ROBOTIQ_GRIPPER_RELATIVE_ERROR) && + m_goal.getGoal()->command.position > absolute_position_from_relative(actual_gripper_position - ROBOTIQ_GRIPPER_RELATIVE_ERROR); +} + +void RobotiqGripperCommandActionServer::join_polling_thread() +{ + if (m_gripper_position_polling_thread.joinable()) + { + m_gripper_position_polling_thread.join(); + } +} + +void RobotiqGripperCommandActionServer::stop_all_movement() +{ + ROS_INFO("Sending zero-speed Gripper Command on the robot."); + try + { + m_base->SendGripperCommand(m_cancel_gripper_command); + m_is_trajectory_running_lock.lock(); + m_is_trajectory_running = false; + m_is_trajectory_running_lock.unlock(); + } + catch(const Kinova::Api::KBasicException& e) + { + ROS_ERROR("Sending a gripper speed of 0 failed : %s", e.what()); + } +} + +double RobotiqGripperCommandActionServer::relative_position_from_absolute(double absolute_position) +{ + return absolute_position / m_gripper_joint_limit; +} + +double RobotiqGripperCommandActionServer::absolute_position_from_relative(double relative_position) +{ + return relative_position * m_gripper_joint_limit; +} diff --git a/kortex_driver/src/util/diagnostic.h b/kortex_driver/src/util/diagnostic.h deleted file mode 100644 index cfcedd90..00000000 --- a/kortex_driver/src/util/diagnostic.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright (c) 2018 Kinova inc. All rights reserved. - * - * This software may be modified and distributed under the - * terms of the BSD 3-Clause license. - * - * Refer to the LICENSE file for details. - * - */ - -#include - -struct kortex_error -{ - int error_code; - std::string description; -}; \ No newline at end of file diff --git a/kortex_driver/src/util/math_util.h b/kortex_driver/src/util/math_util.h deleted file mode 100644 index cd4daeb3..00000000 --- a/kortex_driver/src/util/math_util.h +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright (c) 2018 Kinova inc. All rights reserved. - * - * This software may be modified and distributed under the - * terms of the BSD 3-Clause license. - * - * Refer to the LICENSE file for details. - * - */ - -#include - -#define TO_RAD(degree) degree * M_PI / 180.0 \ No newline at end of file diff --git a/kortex_driver/srv/ClearFaults.srv b/kortex_driver/srv/ClearFaults.srv deleted file mode 100644 index 4d7a11a3..00000000 --- a/kortex_driver/srv/ClearFaults.srv +++ /dev/null @@ -1,3 +0,0 @@ -Empty input ---- -Empty output \ No newline at end of file diff --git a/kortex_driver/srv/GetActionExecutionState.srv b/kortex_driver/srv/GetActionExecutionState.srv deleted file mode 100644 index 32c9d22d..00000000 --- a/kortex_driver/srv/GetActionExecutionState.srv +++ /dev/null @@ -1,3 +0,0 @@ -Empty input ---- -ActionExecutionState output \ No newline at end of file diff --git a/kortex_driver/srv/GetActiveMap.srv b/kortex_driver/srv/GetActiveMap.srv deleted file mode 100644 index ea8df28a..00000000 --- a/kortex_driver/srv/GetActiveMap.srv +++ /dev/null @@ -1,3 +0,0 @@ -MappingHandle input ---- -Empty output \ No newline at end of file diff --git a/kortex_driver/srv/GetCommandedCartesianPose.srv b/kortex_driver/srv/GetCommandedCartesianPose.srv deleted file mode 100644 index a79dc7e6..00000000 --- a/kortex_driver/srv/GetCommandedCartesianPose.srv +++ /dev/null @@ -1,3 +0,0 @@ -Empty input ---- -Pose output \ No newline at end of file diff --git a/kortex_driver/srv/GetCommandedGripperMovement.srv b/kortex_driver/srv/GetCommandedGripperMovement.srv deleted file mode 100644 index 1311aa77..00000000 --- a/kortex_driver/srv/GetCommandedGripperMovement.srv +++ /dev/null @@ -1,3 +0,0 @@ -GripperRequest input ---- -Gripper output \ No newline at end of file diff --git a/kortex_driver/srv/GetCommandedJointAngles.srv b/kortex_driver/srv/GetCommandedJointAngles.srv deleted file mode 100644 index bc24fba9..00000000 --- a/kortex_driver/srv/GetCommandedJointAngles.srv +++ /dev/null @@ -1,3 +0,0 @@ -Empty input ---- -JointAngles output \ No newline at end of file diff --git a/kortex_driver/srv/GetCommandedJointSpeeds.srv b/kortex_driver/srv/GetCommandedJointSpeeds.srv deleted file mode 100644 index 43ff467a..00000000 --- a/kortex_driver/srv/GetCommandedJointSpeeds.srv +++ /dev/null @@ -1,3 +0,0 @@ -Empty input ---- -JointSpeeds output \ No newline at end of file diff --git a/kortex_driver/srv/GetCommandedTwist.srv b/kortex_driver/srv/GetCommandedTwist.srv deleted file mode 100644 index fe4d93d5..00000000 --- a/kortex_driver/srv/GetCommandedTwist.srv +++ /dev/null @@ -1,3 +0,0 @@ -Empty input ---- -Twist output \ No newline at end of file diff --git a/kortex_driver/srv/GetControlMode.srv b/kortex_driver/srv/GetControlMode.srv deleted file mode 100644 index 6eb15fb1..00000000 --- a/kortex_driver/srv/GetControlMode.srv +++ /dev/null @@ -1,3 +0,0 @@ -Empty input ---- -ControlModeInformation output \ No newline at end of file diff --git a/kortex_driver/srv/GetFwdKinematics.srv b/kortex_driver/srv/GetFwdKinematics.srv deleted file mode 100644 index 0489367a..00000000 --- a/kortex_driver/srv/GetFwdKinematics.srv +++ /dev/null @@ -1,3 +0,0 @@ -Empty input ---- -TransformationMatrix output \ No newline at end of file diff --git a/kortex_driver/srv/GetMeasuredJointSpeeds.srv b/kortex_driver/srv/GetMeasuredJointSpeeds.srv deleted file mode 100644 index 43ff467a..00000000 --- a/kortex_driver/srv/GetMeasuredJointSpeeds.srv +++ /dev/null @@ -1,3 +0,0 @@ -Empty input ---- -JointSpeeds output \ No newline at end of file diff --git a/kortex_driver/srv/GetMeasuredTwist.srv b/kortex_driver/srv/GetMeasuredTwist.srv deleted file mode 100644 index fe4d93d5..00000000 --- a/kortex_driver/srv/GetMeasuredTwist.srv +++ /dev/null @@ -1,3 +0,0 @@ -Empty input ---- -Twist output \ No newline at end of file diff --git a/kortex_driver/srv/GetProtectionZoneState.srv b/kortex_driver/srv/GetProtectionZoneState.srv deleted file mode 100644 index 9d4d6a1c..00000000 --- a/kortex_driver/srv/GetProtectionZoneState.srv +++ /dev/null @@ -1,3 +0,0 @@ -ProtectionZoneHandle input ---- -ProtectionZoneInformation output \ No newline at end of file diff --git a/kortex_driver/srv/GetSequenceState.srv b/kortex_driver/srv/GetSequenceState.srv deleted file mode 100644 index 65790b89..00000000 --- a/kortex_driver/srv/GetSequenceState.srv +++ /dev/null @@ -1,3 +0,0 @@ -SequenceHandle input ---- -SequenceInformation output \ No newline at end of file diff --git a/kortex_driver/srv/GetTargetedCartesianPose.srv b/kortex_driver/srv/GetTargetedCartesianPose.srv deleted file mode 100644 index a79dc7e6..00000000 --- a/kortex_driver/srv/GetTargetedCartesianPose.srv +++ /dev/null @@ -1,3 +0,0 @@ -Empty input ---- -Pose output \ No newline at end of file diff --git a/kortex_driver/srv/Pause.srv b/kortex_driver/srv/Pause.srv deleted file mode 100644 index 4d7a11a3..00000000 --- a/kortex_driver/srv/Pause.srv +++ /dev/null @@ -1,3 +0,0 @@ -Empty input ---- -Empty output \ No newline at end of file diff --git a/kortex_driver/srv/Reboot.srv b/kortex_driver/srv/Reboot.srv deleted file mode 100644 index 4d7a11a3..00000000 --- a/kortex_driver/srv/Reboot.srv +++ /dev/null @@ -1,3 +0,0 @@ -Empty input ---- -Empty output \ No newline at end of file diff --git a/kortex_driver/srv/Refresh.srv b/kortex_driver/srv/Refresh.srv deleted file mode 100644 index 432de516..00000000 --- a/kortex_driver/srv/Refresh.srv +++ /dev/null @@ -1,3 +0,0 @@ -Command input ---- -Feedback output \ No newline at end of file diff --git a/kortex_driver/srv/RefreshCommand.srv b/kortex_driver/srv/RefreshCommand.srv deleted file mode 100644 index 9bd2e9fc..00000000 --- a/kortex_driver/srv/RefreshCommand.srv +++ /dev/null @@ -1,3 +0,0 @@ -Command input ---- -Empty output \ No newline at end of file diff --git a/kortex_driver/srv/RefreshCustomData.srv b/kortex_driver/srv/RefreshCustomData.srv deleted file mode 100644 index 301250e4..00000000 --- a/kortex_driver/srv/RefreshCustomData.srv +++ /dev/null @@ -1,3 +0,0 @@ -CustomData input ---- -CustomData output \ No newline at end of file diff --git a/kortex_driver/srv/RefreshFeedback.srv b/kortex_driver/srv/RefreshFeedback.srv deleted file mode 100644 index c2102f1a..00000000 --- a/kortex_driver/srv/RefreshFeedback.srv +++ /dev/null @@ -1,3 +0,0 @@ -Empty input ---- -Feedback output \ No newline at end of file diff --git a/kortex_driver/srv/RestoreNetworkFactorySettings.srv b/kortex_driver/srv/RestoreNetworkFactorySettings.srv deleted file mode 100644 index 4d7a11a3..00000000 --- a/kortex_driver/srv/RestoreNetworkFactorySettings.srv +++ /dev/null @@ -1,3 +0,0 @@ -Empty input ---- -Empty output \ No newline at end of file diff --git a/kortex_driver/srv/Resume.srv b/kortex_driver/srv/Resume.srv deleted file mode 100644 index 4d7a11a3..00000000 --- a/kortex_driver/srv/Resume.srv +++ /dev/null @@ -1,3 +0,0 @@ -Empty input ---- -Empty output \ No newline at end of file diff --git a/kortex_driver/srv/SetTwistWrenchReferenceFrame.srv b/kortex_driver/srv/SetTwistWrenchReferenceFrame.srv deleted file mode 100644 index 0ac82544..00000000 --- a/kortex_driver/srv/SetTwistWrenchReferenceFrame.srv +++ /dev/null @@ -1,3 +0,0 @@ -CartesianReferenceFrameRequest input ---- -Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/ClearFaults.srv b/kortex_driver/srv/generated/actuator_config/ActuatorConfig_ClearFaults.srv similarity index 100% rename from kortex_actuator_driver/srv/ClearFaults.srv rename to kortex_driver/srv/generated/actuator_config/ActuatorConfig_ClearFaults.srv diff --git a/kortex_driver/srv/generated/actuator_config/ActuatorConfig_GetControlMode.srv b/kortex_driver/srv/generated/actuator_config/ActuatorConfig_GetControlMode.srv new file mode 100644 index 00000000..e6993e17 --- /dev/null +++ b/kortex_driver/srv/generated/actuator_config/ActuatorConfig_GetControlMode.srv @@ -0,0 +1,3 @@ +Empty input +--- +ActuatorConfig_ControlModeInformation output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/GetActivatedControlLoop.srv b/kortex_driver/srv/generated/actuator_config/GetActivatedControlLoop.srv similarity index 100% rename from kortex_actuator_driver/srv/GetActivatedControlLoop.srv rename to kortex_driver/srv/generated/actuator_config/GetActivatedControlLoop.srv diff --git a/kortex_actuator_driver/srv/GetAxisOffsets.srv b/kortex_driver/srv/generated/actuator_config/GetAxisOffsets.srv similarity index 100% rename from kortex_actuator_driver/srv/GetAxisOffsets.srv rename to kortex_driver/srv/generated/actuator_config/GetAxisOffsets.srv diff --git a/kortex_actuator_driver/srv/GetCommandMode.srv b/kortex_driver/srv/generated/actuator_config/GetCommandMode.srv similarity index 100% rename from kortex_actuator_driver/srv/GetCommandMode.srv rename to kortex_driver/srv/generated/actuator_config/GetCommandMode.srv diff --git a/kortex_actuator_driver/srv/GetControlLoopParameters.srv b/kortex_driver/srv/generated/actuator_config/GetControlLoopParameters.srv similarity index 100% rename from kortex_actuator_driver/srv/GetControlLoopParameters.srv rename to kortex_driver/srv/generated/actuator_config/GetControlLoopParameters.srv diff --git a/kortex_actuator_driver/srv/GetSelectedCustomData.srv b/kortex_driver/srv/generated/actuator_config/GetSelectedCustomData.srv similarity index 100% rename from kortex_actuator_driver/srv/GetSelectedCustomData.srv rename to kortex_driver/srv/generated/actuator_config/GetSelectedCustomData.srv diff --git a/kortex_actuator_driver/srv/GetServoing.srv b/kortex_driver/srv/generated/actuator_config/GetServoing.srv similarity index 100% rename from kortex_actuator_driver/srv/GetServoing.srv rename to kortex_driver/srv/generated/actuator_config/GetServoing.srv diff --git a/kortex_actuator_driver/srv/GetTorqueOffset.srv b/kortex_driver/srv/generated/actuator_config/GetTorqueOffset.srv similarity index 100% rename from kortex_actuator_driver/srv/GetTorqueOffset.srv rename to kortex_driver/srv/generated/actuator_config/GetTorqueOffset.srv diff --git a/kortex_actuator_driver/srv/MoveToPosition.srv b/kortex_driver/srv/generated/actuator_config/MoveToPosition.srv similarity index 100% rename from kortex_actuator_driver/srv/MoveToPosition.srv rename to kortex_driver/srv/generated/actuator_config/MoveToPosition.srv diff --git a/kortex_actuator_driver/srv/SelectCustomData.srv b/kortex_driver/srv/generated/actuator_config/SelectCustomData.srv similarity index 100% rename from kortex_actuator_driver/srv/SelectCustomData.srv rename to kortex_driver/srv/generated/actuator_config/SelectCustomData.srv diff --git a/kortex_actuator_driver/srv/SetActivatedControlLoop.srv b/kortex_driver/srv/generated/actuator_config/SetActivatedControlLoop.srv similarity index 100% rename from kortex_actuator_driver/srv/SetActivatedControlLoop.srv rename to kortex_driver/srv/generated/actuator_config/SetActivatedControlLoop.srv diff --git a/kortex_actuator_driver/srv/SetAxisOffsets.srv b/kortex_driver/srv/generated/actuator_config/SetAxisOffsets.srv similarity index 100% rename from kortex_actuator_driver/srv/SetAxisOffsets.srv rename to kortex_driver/srv/generated/actuator_config/SetAxisOffsets.srv diff --git a/kortex_actuator_driver/srv/SetCommandMode.srv b/kortex_driver/srv/generated/actuator_config/SetCommandMode.srv similarity index 100% rename from kortex_actuator_driver/srv/SetCommandMode.srv rename to kortex_driver/srv/generated/actuator_config/SetCommandMode.srv diff --git a/kortex_actuator_driver/srv/SetControlLoopParameters.srv b/kortex_driver/srv/generated/actuator_config/SetControlLoopParameters.srv similarity index 100% rename from kortex_actuator_driver/srv/SetControlLoopParameters.srv rename to kortex_driver/srv/generated/actuator_config/SetControlLoopParameters.srv diff --git a/kortex_driver/srv/generated/actuator_config/SetControlMode.srv b/kortex_driver/srv/generated/actuator_config/SetControlMode.srv new file mode 100644 index 00000000..679458cc --- /dev/null +++ b/kortex_driver/srv/generated/actuator_config/SetControlMode.srv @@ -0,0 +1,3 @@ +ActuatorConfig_ControlModeInformation input +--- +Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/SetServoing.srv b/kortex_driver/srv/generated/actuator_config/SetServoing.srv similarity index 100% rename from kortex_actuator_driver/srv/SetServoing.srv rename to kortex_driver/srv/generated/actuator_config/SetServoing.srv diff --git a/kortex_actuator_driver/srv/SetTorqueOffset.srv b/kortex_driver/srv/generated/actuator_config/SetTorqueOffset.srv similarity index 100% rename from kortex_actuator_driver/srv/SetTorqueOffset.srv rename to kortex_driver/srv/generated/actuator_config/SetTorqueOffset.srv diff --git a/kortex_driver/srv/ActivateMap.srv b/kortex_driver/srv/generated/base/ActivateMap.srv similarity index 100% rename from kortex_driver/srv/ActivateMap.srv rename to kortex_driver/srv/generated/base/ActivateMap.srv diff --git a/kortex_driver/srv/AddWifiConfiguration.srv b/kortex_driver/srv/generated/base/AddWifiConfiguration.srv similarity index 100% rename from kortex_driver/srv/AddWifiConfiguration.srv rename to kortex_driver/srv/generated/base/AddWifiConfiguration.srv diff --git a/kortex_driver/srv/ApplyEmergencyStop.srv b/kortex_driver/srv/generated/base/ApplyEmergencyStop.srv similarity index 100% rename from kortex_driver/srv/ApplyEmergencyStop.srv rename to kortex_driver/srv/generated/base/ApplyEmergencyStop.srv diff --git a/kortex_actuator_driver/srv/StopFrequencyResponse.srv b/kortex_driver/srv/generated/base/Base_ClearFaults.srv similarity index 100% rename from kortex_actuator_driver/srv/StopFrequencyResponse.srv rename to kortex_driver/srv/generated/base/Base_ClearFaults.srv diff --git a/kortex_driver/srv/generated/base/Base_GetCapSenseConfig.srv b/kortex_driver/srv/generated/base/Base_GetCapSenseConfig.srv new file mode 100644 index 00000000..7e64acdf --- /dev/null +++ b/kortex_driver/srv/generated/base/Base_GetCapSenseConfig.srv @@ -0,0 +1,3 @@ +Empty input +--- +Base_CapSenseConfig output \ No newline at end of file diff --git a/kortex_driver/srv/generated/base/Base_GetControlMode.srv b/kortex_driver/srv/generated/base/Base_GetControlMode.srv new file mode 100644 index 00000000..7a9f0adb --- /dev/null +++ b/kortex_driver/srv/generated/base/Base_GetControlMode.srv @@ -0,0 +1,3 @@ +Empty input +--- +Base_ControlModeInformation output \ No newline at end of file diff --git a/kortex_driver/srv/generated/base/Base_SetCapSenseConfig.srv b/kortex_driver/srv/generated/base/Base_SetCapSenseConfig.srv new file mode 100644 index 00000000..0e2e7265 --- /dev/null +++ b/kortex_driver/srv/generated/base/Base_SetCapSenseConfig.srv @@ -0,0 +1,3 @@ +Base_CapSenseConfig input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/Unsubscribe.srv b/kortex_driver/srv/generated/base/Base_Unsubscribe.srv similarity index 100% rename from kortex_driver/srv/Unsubscribe.srv rename to kortex_driver/srv/generated/base/Base_Unsubscribe.srv diff --git a/kortex_driver/srv/ChangePassword.srv b/kortex_driver/srv/generated/base/ChangePassword.srv similarity index 100% rename from kortex_driver/srv/ChangePassword.srv rename to kortex_driver/srv/generated/base/ChangePassword.srv diff --git a/kortex_driver/srv/ConnectWifi.srv b/kortex_driver/srv/generated/base/ConnectWifi.srv similarity index 100% rename from kortex_driver/srv/ConnectWifi.srv rename to kortex_driver/srv/generated/base/ConnectWifi.srv diff --git a/kortex_driver/srv/CreateAction.srv b/kortex_driver/srv/generated/base/CreateAction.srv similarity index 100% rename from kortex_driver/srv/CreateAction.srv rename to kortex_driver/srv/generated/base/CreateAction.srv diff --git a/kortex_driver/srv/CreateMap.srv b/kortex_driver/srv/generated/base/CreateMap.srv similarity index 100% rename from kortex_driver/srv/CreateMap.srv rename to kortex_driver/srv/generated/base/CreateMap.srv diff --git a/kortex_driver/srv/CreateMapping.srv b/kortex_driver/srv/generated/base/CreateMapping.srv similarity index 100% rename from kortex_driver/srv/CreateMapping.srv rename to kortex_driver/srv/generated/base/CreateMapping.srv diff --git a/kortex_driver/srv/CreateProtectionZone.srv b/kortex_driver/srv/generated/base/CreateProtectionZone.srv similarity index 100% rename from kortex_driver/srv/CreateProtectionZone.srv rename to kortex_driver/srv/generated/base/CreateProtectionZone.srv diff --git a/kortex_driver/srv/CreateSequence.srv b/kortex_driver/srv/generated/base/CreateSequence.srv similarity index 100% rename from kortex_driver/srv/CreateSequence.srv rename to kortex_driver/srv/generated/base/CreateSequence.srv diff --git a/kortex_driver/srv/CreateUserProfile.srv b/kortex_driver/srv/generated/base/CreateUserProfile.srv similarity index 100% rename from kortex_driver/srv/CreateUserProfile.srv rename to kortex_driver/srv/generated/base/CreateUserProfile.srv diff --git a/kortex_driver/srv/DeleteAction.srv b/kortex_driver/srv/generated/base/DeleteAction.srv similarity index 100% rename from kortex_driver/srv/DeleteAction.srv rename to kortex_driver/srv/generated/base/DeleteAction.srv diff --git a/kortex_driver/srv/DeleteAllSequenceTasks.srv b/kortex_driver/srv/generated/base/DeleteAllSequenceTasks.srv similarity index 100% rename from kortex_driver/srv/DeleteAllSequenceTasks.srv rename to kortex_driver/srv/generated/base/DeleteAllSequenceTasks.srv diff --git a/kortex_driver/srv/DeleteProtectionZone.srv b/kortex_driver/srv/generated/base/DeleteProtectionZone.srv similarity index 100% rename from kortex_driver/srv/DeleteProtectionZone.srv rename to kortex_driver/srv/generated/base/DeleteProtectionZone.srv diff --git a/kortex_driver/srv/DeleteSequence.srv b/kortex_driver/srv/generated/base/DeleteSequence.srv similarity index 100% rename from kortex_driver/srv/DeleteSequence.srv rename to kortex_driver/srv/generated/base/DeleteSequence.srv diff --git a/kortex_driver/srv/DeleteSequenceTask.srv b/kortex_driver/srv/generated/base/DeleteSequenceTask.srv similarity index 100% rename from kortex_driver/srv/DeleteSequenceTask.srv rename to kortex_driver/srv/generated/base/DeleteSequenceTask.srv diff --git a/kortex_driver/srv/DeleteUserProfile.srv b/kortex_driver/srv/generated/base/DeleteUserProfile.srv similarity index 100% rename from kortex_driver/srv/DeleteUserProfile.srv rename to kortex_driver/srv/generated/base/DeleteUserProfile.srv diff --git a/kortex_driver/srv/DeleteWifiConfiguration.srv b/kortex_driver/srv/generated/base/DeleteWifiConfiguration.srv similarity index 100% rename from kortex_driver/srv/DeleteWifiConfiguration.srv rename to kortex_driver/srv/generated/base/DeleteWifiConfiguration.srv diff --git a/kortex_driver/srv/generated/base/DisableBridge.srv b/kortex_driver/srv/generated/base/DisableBridge.srv new file mode 100644 index 00000000..70f1c9fb --- /dev/null +++ b/kortex_driver/srv/generated/base/DisableBridge.srv @@ -0,0 +1,3 @@ +BridgeIdentifier input +--- +BridgeResult output \ No newline at end of file diff --git a/kortex_driver/srv/DisconnectWifi.srv b/kortex_driver/srv/generated/base/DisconnectWifi.srv similarity index 100% rename from kortex_driver/srv/DisconnectWifi.srv rename to kortex_driver/srv/generated/base/DisconnectWifi.srv diff --git a/kortex_driver/srv/generated/base/EnableBridge.srv b/kortex_driver/srv/generated/base/EnableBridge.srv new file mode 100644 index 00000000..59fca2a4 --- /dev/null +++ b/kortex_driver/srv/generated/base/EnableBridge.srv @@ -0,0 +1,3 @@ +BridgeConfig input +--- +BridgeResult output \ No newline at end of file diff --git a/kortex_driver/srv/ExecuteAction.srv b/kortex_driver/srv/generated/base/ExecuteAction.srv similarity index 100% rename from kortex_driver/srv/ExecuteAction.srv rename to kortex_driver/srv/generated/base/ExecuteAction.srv diff --git a/kortex_driver/srv/ExecuteActionFromReference.srv b/kortex_driver/srv/generated/base/ExecuteActionFromReference.srv similarity index 100% rename from kortex_driver/srv/ExecuteActionFromReference.srv rename to kortex_driver/srv/generated/base/ExecuteActionFromReference.srv diff --git a/kortex_driver/srv/GetActuatorCount.srv b/kortex_driver/srv/generated/base/GetActuatorCount.srv similarity index 100% rename from kortex_driver/srv/GetActuatorCount.srv rename to kortex_driver/srv/generated/base/GetActuatorCount.srv diff --git a/kortex_driver/srv/GetAllConfiguredWifis.srv b/kortex_driver/srv/generated/base/GetAllConfiguredWifis.srv similarity index 100% rename from kortex_driver/srv/GetAllConfiguredWifis.srv rename to kortex_driver/srv/generated/base/GetAllConfiguredWifis.srv diff --git a/kortex_driver/srv/GetAllConnectedControllers.srv b/kortex_driver/srv/generated/base/GetAllConnectedControllers.srv similarity index 100% rename from kortex_driver/srv/GetAllConnectedControllers.srv rename to kortex_driver/srv/generated/base/GetAllConnectedControllers.srv diff --git a/kortex_driver/srv/generated/base/GetAllJointsSpeedHardLimitation.srv b/kortex_driver/srv/generated/base/GetAllJointsSpeedHardLimitation.srv new file mode 100644 index 00000000..2725503b --- /dev/null +++ b/kortex_driver/srv/generated/base/GetAllJointsSpeedHardLimitation.srv @@ -0,0 +1,3 @@ +Empty input +--- +JointsLimitationsList output \ No newline at end of file diff --git a/kortex_driver/srv/generated/base/GetAllJointsSpeedSoftLimitation.srv b/kortex_driver/srv/generated/base/GetAllJointsSpeedSoftLimitation.srv new file mode 100644 index 00000000..2725503b --- /dev/null +++ b/kortex_driver/srv/generated/base/GetAllJointsSpeedSoftLimitation.srv @@ -0,0 +1,3 @@ +Empty input +--- +JointsLimitationsList output \ No newline at end of file diff --git a/kortex_driver/srv/generated/base/GetAllJointsTorqueHardLimitation.srv b/kortex_driver/srv/generated/base/GetAllJointsTorqueHardLimitation.srv new file mode 100644 index 00000000..2725503b --- /dev/null +++ b/kortex_driver/srv/generated/base/GetAllJointsTorqueHardLimitation.srv @@ -0,0 +1,3 @@ +Empty input +--- +JointsLimitationsList output \ No newline at end of file diff --git a/kortex_driver/srv/generated/base/GetAllJointsTorqueSoftLimitation.srv b/kortex_driver/srv/generated/base/GetAllJointsTorqueSoftLimitation.srv new file mode 100644 index 00000000..2725503b --- /dev/null +++ b/kortex_driver/srv/generated/base/GetAllJointsTorqueSoftLimitation.srv @@ -0,0 +1,3 @@ +Empty input +--- +JointsLimitationsList output \ No newline at end of file diff --git a/kortex_driver/srv/GetArmState.srv b/kortex_driver/srv/generated/base/GetArmState.srv similarity index 100% rename from kortex_driver/srv/GetArmState.srv rename to kortex_driver/srv/generated/base/GetArmState.srv diff --git a/kortex_driver/srv/GetAvailableWifi.srv b/kortex_driver/srv/generated/base/GetAvailableWifi.srv similarity index 100% rename from kortex_driver/srv/GetAvailableWifi.srv rename to kortex_driver/srv/generated/base/GetAvailableWifi.srv diff --git a/kortex_driver/srv/generated/base/GetBridgeConfig.srv b/kortex_driver/srv/generated/base/GetBridgeConfig.srv new file mode 100644 index 00000000..9c546ec7 --- /dev/null +++ b/kortex_driver/srv/generated/base/GetBridgeConfig.srv @@ -0,0 +1,3 @@ +BridgeIdentifier input +--- +BridgeConfig output \ No newline at end of file diff --git a/kortex_driver/srv/generated/base/GetBridgeList.srv b/kortex_driver/srv/generated/base/GetBridgeList.srv new file mode 100644 index 00000000..2da2a77a --- /dev/null +++ b/kortex_driver/srv/generated/base/GetBridgeList.srv @@ -0,0 +1,3 @@ +Empty input +--- +BridgeList output \ No newline at end of file diff --git a/kortex_driver/srv/GetConfiguredWifi.srv b/kortex_driver/srv/generated/base/GetConfiguredWifi.srv similarity index 100% rename from kortex_driver/srv/GetConfiguredWifi.srv rename to kortex_driver/srv/generated/base/GetConfiguredWifi.srv diff --git a/kortex_driver/srv/GetConnectedWifiInformation.srv b/kortex_driver/srv/generated/base/GetConnectedWifiInformation.srv similarity index 100% rename from kortex_driver/srv/GetConnectedWifiInformation.srv rename to kortex_driver/srv/generated/base/GetConnectedWifiInformation.srv diff --git a/kortex_driver/srv/GetControllerState.srv b/kortex_driver/srv/generated/base/GetControllerState.srv similarity index 100% rename from kortex_driver/srv/GetControllerState.srv rename to kortex_driver/srv/generated/base/GetControllerState.srv diff --git a/kortex_driver/srv/GetIPv4Configuration.srv b/kortex_driver/srv/generated/base/GetIPv4Configuration.srv similarity index 100% rename from kortex_driver/srv/GetIPv4Configuration.srv rename to kortex_driver/srv/generated/base/GetIPv4Configuration.srv diff --git a/kortex_driver/srv/GetIPv4Information.srv b/kortex_driver/srv/generated/base/GetIPv4Information.srv similarity index 100% rename from kortex_driver/srv/GetIPv4Information.srv rename to kortex_driver/srv/generated/base/GetIPv4Information.srv diff --git a/kortex_driver/srv/GetMeasuredCartesianPose.srv b/kortex_driver/srv/generated/base/GetMeasuredCartesianPose.srv similarity index 100% rename from kortex_driver/srv/GetMeasuredCartesianPose.srv rename to kortex_driver/srv/generated/base/GetMeasuredCartesianPose.srv diff --git a/kortex_driver/srv/GetMeasuredGripperMovement.srv b/kortex_driver/srv/generated/base/GetMeasuredGripperMovement.srv similarity index 100% rename from kortex_driver/srv/GetMeasuredGripperMovement.srv rename to kortex_driver/srv/generated/base/GetMeasuredGripperMovement.srv diff --git a/kortex_driver/srv/GetMeasuredJointAngles.srv b/kortex_driver/srv/generated/base/GetMeasuredJointAngles.srv similarity index 100% rename from kortex_driver/srv/GetMeasuredJointAngles.srv rename to kortex_driver/srv/generated/base/GetMeasuredJointAngles.srv diff --git a/kortex_driver/srv/GetOperatingMode.srv b/kortex_driver/srv/generated/base/GetOperatingMode.srv similarity index 100% rename from kortex_driver/srv/GetOperatingMode.srv rename to kortex_driver/srv/generated/base/GetOperatingMode.srv diff --git a/kortex_driver/srv/generated/base/GetProductConfiguration.srv b/kortex_driver/srv/generated/base/GetProductConfiguration.srv new file mode 100644 index 00000000..9d34ae4e --- /dev/null +++ b/kortex_driver/srv/generated/base/GetProductConfiguration.srv @@ -0,0 +1,3 @@ +Empty input +--- +CompleteProductConfiguration output \ No newline at end of file diff --git a/kortex_driver/srv/GetServoingMode.srv b/kortex_driver/srv/generated/base/GetServoingMode.srv similarity index 100% rename from kortex_driver/srv/GetServoingMode.srv rename to kortex_driver/srv/generated/base/GetServoingMode.srv diff --git a/kortex_driver/srv/generated/base/GetTrajectoryErrorReport.srv b/kortex_driver/srv/generated/base/GetTrajectoryErrorReport.srv new file mode 100644 index 00000000..6fc9f2cb --- /dev/null +++ b/kortex_driver/srv/generated/base/GetTrajectoryErrorReport.srv @@ -0,0 +1,3 @@ +Empty input +--- +TrajectoryErrorReport output \ No newline at end of file diff --git a/kortex_driver/srv/generated/base/GetTwistHardLimitation.srv b/kortex_driver/srv/generated/base/GetTwistHardLimitation.srv new file mode 100644 index 00000000..57c7808e --- /dev/null +++ b/kortex_driver/srv/generated/base/GetTwistHardLimitation.srv @@ -0,0 +1,3 @@ +Empty input +--- +TwistLimitation output \ No newline at end of file diff --git a/kortex_driver/srv/generated/base/GetTwistSoftLimitation.srv b/kortex_driver/srv/generated/base/GetTwistSoftLimitation.srv new file mode 100644 index 00000000..57c7808e --- /dev/null +++ b/kortex_driver/srv/generated/base/GetTwistSoftLimitation.srv @@ -0,0 +1,3 @@ +Empty input +--- +TwistLimitation output \ No newline at end of file diff --git a/kortex_driver/srv/GetCountryCode.srv b/kortex_driver/srv/generated/base/GetWifiCountryCode.srv similarity index 100% rename from kortex_driver/srv/GetCountryCode.srv rename to kortex_driver/srv/generated/base/GetWifiCountryCode.srv diff --git a/kortex_driver/srv/GetWifiInformation.srv b/kortex_driver/srv/generated/base/GetWifiInformation.srv similarity index 100% rename from kortex_driver/srv/GetWifiInformation.srv rename to kortex_driver/srv/generated/base/GetWifiInformation.srv diff --git a/kortex_driver/srv/generated/base/GetWrenchHardLimitation.srv b/kortex_driver/srv/generated/base/GetWrenchHardLimitation.srv new file mode 100644 index 00000000..ff151a91 --- /dev/null +++ b/kortex_driver/srv/generated/base/GetWrenchHardLimitation.srv @@ -0,0 +1,3 @@ +Empty input +--- +WrenchLimitation output \ No newline at end of file diff --git a/kortex_driver/srv/generated/base/GetWrenchSoftLimitation.srv b/kortex_driver/srv/generated/base/GetWrenchSoftLimitation.srv new file mode 100644 index 00000000..ff151a91 --- /dev/null +++ b/kortex_driver/srv/generated/base/GetWrenchSoftLimitation.srv @@ -0,0 +1,3 @@ +Empty input +--- +WrenchLimitation output \ No newline at end of file diff --git a/kortex_driver/srv/IsCommunicationInterfaceEnable.srv b/kortex_driver/srv/generated/base/IsCommunicationInterfaceEnable.srv similarity index 100% rename from kortex_driver/srv/IsCommunicationInterfaceEnable.srv rename to kortex_driver/srv/generated/base/IsCommunicationInterfaceEnable.srv diff --git a/kortex_driver/srv/OnNotificationActionTopic.srv b/kortex_driver/srv/generated/base/OnNotificationActionTopic.srv similarity index 100% rename from kortex_driver/srv/OnNotificationActionTopic.srv rename to kortex_driver/srv/generated/base/OnNotificationActionTopic.srv diff --git a/kortex_driver/srv/OnNotificationArmStateTopic.srv b/kortex_driver/srv/generated/base/OnNotificationArmStateTopic.srv similarity index 100% rename from kortex_driver/srv/OnNotificationArmStateTopic.srv rename to kortex_driver/srv/generated/base/OnNotificationArmStateTopic.srv diff --git a/kortex_driver/srv/OnNotificationConfigurationChangeTopic.srv b/kortex_driver/srv/generated/base/OnNotificationConfigurationChangeTopic.srv similarity index 100% rename from kortex_driver/srv/OnNotificationConfigurationChangeTopic.srv rename to kortex_driver/srv/generated/base/OnNotificationConfigurationChangeTopic.srv diff --git a/kortex_driver/srv/OnNotificationControlModeTopic.srv b/kortex_driver/srv/generated/base/OnNotificationControlModeTopic.srv similarity index 100% rename from kortex_driver/srv/OnNotificationControlModeTopic.srv rename to kortex_driver/srv/generated/base/OnNotificationControlModeTopic.srv diff --git a/kortex_driver/srv/OnNotificationControllerTopic.srv b/kortex_driver/srv/generated/base/OnNotificationControllerTopic.srv similarity index 100% rename from kortex_driver/srv/OnNotificationControllerTopic.srv rename to kortex_driver/srv/generated/base/OnNotificationControllerTopic.srv diff --git a/kortex_driver/srv/OnNotificationFactoryTopic.srv b/kortex_driver/srv/generated/base/OnNotificationFactoryTopic.srv similarity index 100% rename from kortex_driver/srv/OnNotificationFactoryTopic.srv rename to kortex_driver/srv/generated/base/OnNotificationFactoryTopic.srv diff --git a/kortex_driver/srv/OnNotificationMappingInfoTopic.srv b/kortex_driver/srv/generated/base/OnNotificationMappingInfoTopic.srv similarity index 100% rename from kortex_driver/srv/OnNotificationMappingInfoTopic.srv rename to kortex_driver/srv/generated/base/OnNotificationMappingInfoTopic.srv diff --git a/kortex_driver/srv/OnNotificationNetworkTopic.srv b/kortex_driver/srv/generated/base/OnNotificationNetworkTopic.srv similarity index 100% rename from kortex_driver/srv/OnNotificationNetworkTopic.srv rename to kortex_driver/srv/generated/base/OnNotificationNetworkTopic.srv diff --git a/kortex_driver/srv/OnNotificationOperatingModeTopic.srv b/kortex_driver/srv/generated/base/OnNotificationOperatingModeTopic.srv similarity index 100% rename from kortex_driver/srv/OnNotificationOperatingModeTopic.srv rename to kortex_driver/srv/generated/base/OnNotificationOperatingModeTopic.srv diff --git a/kortex_driver/srv/OnNotificationProtectionZoneTopic.srv b/kortex_driver/srv/generated/base/OnNotificationProtectionZoneTopic.srv similarity index 100% rename from kortex_driver/srv/OnNotificationProtectionZoneTopic.srv rename to kortex_driver/srv/generated/base/OnNotificationProtectionZoneTopic.srv diff --git a/kortex_driver/srv/OnNotificationRobotEventTopic.srv b/kortex_driver/srv/generated/base/OnNotificationRobotEventTopic.srv similarity index 100% rename from kortex_driver/srv/OnNotificationRobotEventTopic.srv rename to kortex_driver/srv/generated/base/OnNotificationRobotEventTopic.srv diff --git a/kortex_driver/srv/OnNotificationSequenceInfoTopic.srv b/kortex_driver/srv/generated/base/OnNotificationSequenceInfoTopic.srv similarity index 100% rename from kortex_driver/srv/OnNotificationSequenceInfoTopic.srv rename to kortex_driver/srv/generated/base/OnNotificationSequenceInfoTopic.srv diff --git a/kortex_driver/srv/OnNotificationServoingModeTopic.srv b/kortex_driver/srv/generated/base/OnNotificationServoingModeTopic.srv similarity index 100% rename from kortex_driver/srv/OnNotificationServoingModeTopic.srv rename to kortex_driver/srv/generated/base/OnNotificationServoingModeTopic.srv diff --git a/kortex_driver/srv/OnNotificationUserTopic.srv b/kortex_driver/srv/generated/base/OnNotificationUserTopic.srv similarity index 100% rename from kortex_driver/srv/OnNotificationUserTopic.srv rename to kortex_driver/srv/generated/base/OnNotificationUserTopic.srv diff --git a/kortex_driver/srv/PauseAction.srv b/kortex_driver/srv/generated/base/PauseAction.srv similarity index 100% rename from kortex_driver/srv/PauseAction.srv rename to kortex_driver/srv/generated/base/PauseAction.srv diff --git a/kortex_driver/srv/PauseSequence.srv b/kortex_driver/srv/generated/base/PauseSequence.srv similarity index 100% rename from kortex_driver/srv/PauseSequence.srv rename to kortex_driver/srv/generated/base/PauseSequence.srv diff --git a/kortex_driver/srv/PlayAdvancedSequence.srv b/kortex_driver/srv/generated/base/PlayAdvancedSequence.srv similarity index 100% rename from kortex_driver/srv/PlayAdvancedSequence.srv rename to kortex_driver/srv/generated/base/PlayAdvancedSequence.srv diff --git a/kortex_driver/srv/PlayCartesianTrajectory.srv b/kortex_driver/srv/generated/base/PlayCartesianTrajectory.srv similarity index 100% rename from kortex_driver/srv/PlayCartesianTrajectory.srv rename to kortex_driver/srv/generated/base/PlayCartesianTrajectory.srv diff --git a/kortex_driver/srv/PlayCartesianTrajectoryOrientation.srv b/kortex_driver/srv/generated/base/PlayCartesianTrajectoryOrientation.srv similarity index 100% rename from kortex_driver/srv/PlayCartesianTrajectoryOrientation.srv rename to kortex_driver/srv/generated/base/PlayCartesianTrajectoryOrientation.srv diff --git a/kortex_driver/srv/PlayCartesianTrajectoryPosition.srv b/kortex_driver/srv/generated/base/PlayCartesianTrajectoryPosition.srv similarity index 100% rename from kortex_driver/srv/PlayCartesianTrajectoryPosition.srv rename to kortex_driver/srv/generated/base/PlayCartesianTrajectoryPosition.srv diff --git a/kortex_driver/srv/PlayJointTrajectory.srv b/kortex_driver/srv/generated/base/PlayJointTrajectory.srv similarity index 100% rename from kortex_driver/srv/PlayJointTrajectory.srv rename to kortex_driver/srv/generated/base/PlayJointTrajectory.srv diff --git a/kortex_driver/srv/generated/base/PlayPreComputedJointTrajectory.srv b/kortex_driver/srv/generated/base/PlayPreComputedJointTrajectory.srv new file mode 100644 index 00000000..264c3b0d --- /dev/null +++ b/kortex_driver/srv/generated/base/PlayPreComputedJointTrajectory.srv @@ -0,0 +1,3 @@ +PreComputedJointTrajectory input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/PlaySelectedJointTrajectory.srv b/kortex_driver/srv/generated/base/PlaySelectedJointTrajectory.srv similarity index 100% rename from kortex_driver/srv/PlaySelectedJointTrajectory.srv rename to kortex_driver/srv/generated/base/PlaySelectedJointTrajectory.srv diff --git a/kortex_driver/srv/PlaySequence.srv b/kortex_driver/srv/generated/base/PlaySequence.srv similarity index 100% rename from kortex_driver/srv/PlaySequence.srv rename to kortex_driver/srv/generated/base/PlaySequence.srv diff --git a/kortex_driver/srv/ReadAction.srv b/kortex_driver/srv/generated/base/ReadAction.srv similarity index 100% rename from kortex_driver/srv/ReadAction.srv rename to kortex_driver/srv/generated/base/ReadAction.srv diff --git a/kortex_driver/srv/ReadAllActions.srv b/kortex_driver/srv/generated/base/ReadAllActions.srv similarity index 100% rename from kortex_driver/srv/ReadAllActions.srv rename to kortex_driver/srv/generated/base/ReadAllActions.srv diff --git a/kortex_driver/srv/ReadAllMappings.srv b/kortex_driver/srv/generated/base/ReadAllMappings.srv similarity index 100% rename from kortex_driver/srv/ReadAllMappings.srv rename to kortex_driver/srv/generated/base/ReadAllMappings.srv diff --git a/kortex_driver/srv/ReadAllMaps.srv b/kortex_driver/srv/generated/base/ReadAllMaps.srv similarity index 100% rename from kortex_driver/srv/ReadAllMaps.srv rename to kortex_driver/srv/generated/base/ReadAllMaps.srv diff --git a/kortex_driver/srv/ReadAllProtectionZones.srv b/kortex_driver/srv/generated/base/ReadAllProtectionZones.srv similarity index 100% rename from kortex_driver/srv/ReadAllProtectionZones.srv rename to kortex_driver/srv/generated/base/ReadAllProtectionZones.srv diff --git a/kortex_driver/srv/ReadAllSequences.srv b/kortex_driver/srv/generated/base/ReadAllSequences.srv similarity index 100% rename from kortex_driver/srv/ReadAllSequences.srv rename to kortex_driver/srv/generated/base/ReadAllSequences.srv diff --git a/kortex_driver/srv/ReadAllUserProfiles.srv b/kortex_driver/srv/generated/base/ReadAllUserProfiles.srv similarity index 100% rename from kortex_driver/srv/ReadAllUserProfiles.srv rename to kortex_driver/srv/generated/base/ReadAllUserProfiles.srv diff --git a/kortex_driver/srv/ReadAllUsers.srv b/kortex_driver/srv/generated/base/ReadAllUsers.srv similarity index 100% rename from kortex_driver/srv/ReadAllUsers.srv rename to kortex_driver/srv/generated/base/ReadAllUsers.srv diff --git a/kortex_driver/srv/ReadMapping.srv b/kortex_driver/srv/generated/base/ReadMapping.srv similarity index 100% rename from kortex_driver/srv/ReadMapping.srv rename to kortex_driver/srv/generated/base/ReadMapping.srv diff --git a/kortex_driver/srv/ReadProtectionZone.srv b/kortex_driver/srv/generated/base/ReadProtectionZone.srv similarity index 100% rename from kortex_driver/srv/ReadProtectionZone.srv rename to kortex_driver/srv/generated/base/ReadProtectionZone.srv diff --git a/kortex_driver/srv/ReadSequence.srv b/kortex_driver/srv/generated/base/ReadSequence.srv similarity index 100% rename from kortex_driver/srv/ReadSequence.srv rename to kortex_driver/srv/generated/base/ReadSequence.srv diff --git a/kortex_driver/srv/ReadUserProfile.srv b/kortex_driver/srv/generated/base/ReadUserProfile.srv similarity index 100% rename from kortex_driver/srv/ReadUserProfile.srv rename to kortex_driver/srv/generated/base/ReadUserProfile.srv diff --git a/kortex_actuator_driver/srv/StopRampResponse.srv b/kortex_driver/srv/generated/base/RestoreFactoryProductConfiguration.srv similarity index 100% rename from kortex_actuator_driver/srv/StopRampResponse.srv rename to kortex_driver/srv/generated/base/RestoreFactoryProductConfiguration.srv diff --git a/kortex_driver/srv/RestoreFactorySettings.srv b/kortex_driver/srv/generated/base/RestoreFactorySettings.srv similarity index 100% rename from kortex_driver/srv/RestoreFactorySettings.srv rename to kortex_driver/srv/generated/base/RestoreFactorySettings.srv diff --git a/kortex_driver/srv/ResumeAction.srv b/kortex_driver/srv/generated/base/ResumeAction.srv similarity index 100% rename from kortex_driver/srv/ResumeAction.srv rename to kortex_driver/srv/generated/base/ResumeAction.srv diff --git a/kortex_driver/srv/ResumeSequence.srv b/kortex_driver/srv/generated/base/ResumeSequence.srv similarity index 100% rename from kortex_driver/srv/ResumeSequence.srv rename to kortex_driver/srv/generated/base/ResumeSequence.srv diff --git a/kortex_driver/srv/SendGripperCommand.srv b/kortex_driver/srv/generated/base/SendGripperCommand.srv similarity index 100% rename from kortex_driver/srv/SendGripperCommand.srv rename to kortex_driver/srv/generated/base/SendGripperCommand.srv diff --git a/kortex_driver/srv/SendJointSpeedsCommmand.srv b/kortex_driver/srv/generated/base/SendJointSpeedsCommand.srv similarity index 100% rename from kortex_driver/srv/SendJointSpeedsCommmand.srv rename to kortex_driver/srv/generated/base/SendJointSpeedsCommand.srv diff --git a/kortex_driver/srv/generated/base/SendJointSpeedsJoystickCommand.srv b/kortex_driver/srv/generated/base/SendJointSpeedsJoystickCommand.srv new file mode 100644 index 00000000..18656d38 --- /dev/null +++ b/kortex_driver/srv/generated/base/SendJointSpeedsJoystickCommand.srv @@ -0,0 +1,3 @@ +JointSpeeds input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/SendSelectedJointSpeedCommand.srv b/kortex_driver/srv/generated/base/SendSelectedJointSpeedCommand.srv similarity index 100% rename from kortex_driver/srv/SendSelectedJointSpeedCommand.srv rename to kortex_driver/srv/generated/base/SendSelectedJointSpeedCommand.srv diff --git a/kortex_driver/srv/generated/base/SendSelectedJointSpeedJoystickCommand.srv b/kortex_driver/srv/generated/base/SendSelectedJointSpeedJoystickCommand.srv new file mode 100644 index 00000000..2cc32856 --- /dev/null +++ b/kortex_driver/srv/generated/base/SendSelectedJointSpeedJoystickCommand.srv @@ -0,0 +1,3 @@ +JointSpeed input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/SendTwistCommand.srv b/kortex_driver/srv/generated/base/SendTwistCommand.srv similarity index 100% rename from kortex_driver/srv/SendTwistCommand.srv rename to kortex_driver/srv/generated/base/SendTwistCommand.srv diff --git a/kortex_driver/srv/generated/base/SendTwistJoystickCommand.srv b/kortex_driver/srv/generated/base/SendTwistJoystickCommand.srv new file mode 100644 index 00000000..afa8aa1d --- /dev/null +++ b/kortex_driver/srv/generated/base/SendTwistJoystickCommand.srv @@ -0,0 +1,3 @@ +TwistCommand input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/generated/base/SendWrenchCommand.srv b/kortex_driver/srv/generated/base/SendWrenchCommand.srv new file mode 100644 index 00000000..3d23b951 --- /dev/null +++ b/kortex_driver/srv/generated/base/SendWrenchCommand.srv @@ -0,0 +1,3 @@ +WrenchCommand input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/generated/base/SendWrenchJoystickCommand.srv b/kortex_driver/srv/generated/base/SendWrenchJoystickCommand.srv new file mode 100644 index 00000000..3d23b951 --- /dev/null +++ b/kortex_driver/srv/generated/base/SendWrenchJoystickCommand.srv @@ -0,0 +1,3 @@ +WrenchCommand input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/SetAdmittance.srv b/kortex_driver/srv/generated/base/SetAdmittance.srv similarity index 100% rename from kortex_driver/srv/SetAdmittance.srv rename to kortex_driver/srv/generated/base/SetAdmittance.srv diff --git a/kortex_driver/srv/SetCommunicationInterfaceEnable.srv b/kortex_driver/srv/generated/base/SetCommunicationInterfaceEnable.srv similarity index 100% rename from kortex_driver/srv/SetCommunicationInterfaceEnable.srv rename to kortex_driver/srv/generated/base/SetCommunicationInterfaceEnable.srv diff --git a/kortex_driver/srv/SetIPv4Configuration.srv b/kortex_driver/srv/generated/base/SetIPv4Configuration.srv similarity index 100% rename from kortex_driver/srv/SetIPv4Configuration.srv rename to kortex_driver/srv/generated/base/SetIPv4Configuration.srv diff --git a/kortex_driver/srv/SetOperatingMode.srv b/kortex_driver/srv/generated/base/SetOperatingMode.srv similarity index 100% rename from kortex_driver/srv/SetOperatingMode.srv rename to kortex_driver/srv/generated/base/SetOperatingMode.srv diff --git a/kortex_driver/srv/SetServoingMode.srv b/kortex_driver/srv/generated/base/SetServoingMode.srv similarity index 100% rename from kortex_driver/srv/SetServoingMode.srv rename to kortex_driver/srv/generated/base/SetServoingMode.srv diff --git a/kortex_driver/srv/SetCountryCode.srv b/kortex_driver/srv/generated/base/SetWifiCountryCode.srv similarity index 100% rename from kortex_driver/srv/SetCountryCode.srv rename to kortex_driver/srv/generated/base/SetWifiCountryCode.srv diff --git a/kortex_driver/srv/StartWifiScan.srv b/kortex_driver/srv/generated/base/StartWifiScan.srv similarity index 100% rename from kortex_driver/srv/StartWifiScan.srv rename to kortex_driver/srv/generated/base/StartWifiScan.srv diff --git a/kortex_actuator_driver/srv/StopStepResponse.srv b/kortex_driver/srv/generated/base/Stop.srv similarity index 100% rename from kortex_actuator_driver/srv/StopStepResponse.srv rename to kortex_driver/srv/generated/base/Stop.srv diff --git a/kortex_driver/srv/StopAction.srv b/kortex_driver/srv/generated/base/StopAction.srv similarity index 100% rename from kortex_driver/srv/StopAction.srv rename to kortex_driver/srv/generated/base/StopAction.srv diff --git a/kortex_driver/srv/StopSequence.srv b/kortex_driver/srv/generated/base/StopSequence.srv similarity index 100% rename from kortex_driver/srv/StopSequence.srv rename to kortex_driver/srv/generated/base/StopSequence.srv diff --git a/kortex_driver/srv/UpdateAction.srv b/kortex_driver/srv/generated/base/UpdateAction.srv similarity index 100% rename from kortex_driver/srv/UpdateAction.srv rename to kortex_driver/srv/generated/base/UpdateAction.srv diff --git a/kortex_driver/srv/generated/base/UpdateArmLateralityConfiguration.srv b/kortex_driver/srv/generated/base/UpdateArmLateralityConfiguration.srv new file mode 100644 index 00000000..0fcf0437 --- /dev/null +++ b/kortex_driver/srv/generated/base/UpdateArmLateralityConfiguration.srv @@ -0,0 +1,3 @@ +ProductConfigurationLaterality input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/generated/base/UpdateBaseTypeConfiguration.srv b/kortex_driver/srv/generated/base/UpdateBaseTypeConfiguration.srv new file mode 100644 index 00000000..af530c3c --- /dev/null +++ b/kortex_driver/srv/generated/base/UpdateBaseTypeConfiguration.srv @@ -0,0 +1,3 @@ +ProductConfigurationBaseType input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/generated/base/UpdateDegreeOfFreedomConfiguration.srv b/kortex_driver/srv/generated/base/UpdateDegreeOfFreedomConfiguration.srv new file mode 100644 index 00000000..c3728f89 --- /dev/null +++ b/kortex_driver/srv/generated/base/UpdateDegreeOfFreedomConfiguration.srv @@ -0,0 +1,3 @@ +ProductConfigurationDegreeOfFreedom input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/generated/base/UpdateEndEffectorTypeConfiguration.srv b/kortex_driver/srv/generated/base/UpdateEndEffectorTypeConfiguration.srv new file mode 100644 index 00000000..52bb1c54 --- /dev/null +++ b/kortex_driver/srv/generated/base/UpdateEndEffectorTypeConfiguration.srv @@ -0,0 +1,3 @@ +ProductConfigurationEndEffectorType input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/generated/base/UpdateInterfaceModuleTypeConfiguration.srv b/kortex_driver/srv/generated/base/UpdateInterfaceModuleTypeConfiguration.srv new file mode 100644 index 00000000..38f4773f --- /dev/null +++ b/kortex_driver/srv/generated/base/UpdateInterfaceModuleTypeConfiguration.srv @@ -0,0 +1,3 @@ +ProductConfigurationInterfaceModuleType input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/UpdateProtectionZone.srv b/kortex_driver/srv/generated/base/UpdateProtectionZone.srv similarity index 100% rename from kortex_driver/srv/UpdateProtectionZone.srv rename to kortex_driver/srv/generated/base/UpdateProtectionZone.srv diff --git a/kortex_driver/srv/UpdateSequence.srv b/kortex_driver/srv/generated/base/UpdateSequence.srv similarity index 100% rename from kortex_driver/srv/UpdateSequence.srv rename to kortex_driver/srv/generated/base/UpdateSequence.srv diff --git a/kortex_driver/srv/UpdateUserProfile.srv b/kortex_driver/srv/generated/base/UpdateUserProfile.srv similarity index 100% rename from kortex_driver/srv/UpdateUserProfile.srv rename to kortex_driver/srv/generated/base/UpdateUserProfile.srv diff --git a/kortex_driver/srv/generated/base/UpdateVisionModuleTypeConfiguration.srv b/kortex_driver/srv/generated/base/UpdateVisionModuleTypeConfiguration.srv new file mode 100644 index 00000000..f27a89f1 --- /dev/null +++ b/kortex_driver/srv/generated/base/UpdateVisionModuleTypeConfiguration.srv @@ -0,0 +1,3 @@ +ProductConfigurationVisionModuleType input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/generated/base/UpdateWristTypeConfiguration.srv b/kortex_driver/srv/generated/base/UpdateWristTypeConfiguration.srv new file mode 100644 index 00000000..79142039 --- /dev/null +++ b/kortex_driver/srv/generated/base/UpdateWristTypeConfiguration.srv @@ -0,0 +1,3 @@ +ProductConfigurationWristType input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/generated/control_config/ControlConfig_Unsubscribe.srv b/kortex_driver/srv/generated/control_config/ControlConfig_Unsubscribe.srv new file mode 100644 index 00000000..403ee3b9 --- /dev/null +++ b/kortex_driver/srv/generated/control_config/ControlConfig_Unsubscribe.srv @@ -0,0 +1,3 @@ +NotificationHandle input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/generated/control_config/GetCartesianReferenceFrame.srv b/kortex_driver/srv/generated/control_config/GetCartesianReferenceFrame.srv new file mode 100644 index 00000000..918b6270 --- /dev/null +++ b/kortex_driver/srv/generated/control_config/GetCartesianReferenceFrame.srv @@ -0,0 +1,3 @@ +Empty input +--- +CartesianReferenceFrameInfo output \ No newline at end of file diff --git a/kortex_driver/srv/generated/control_config/GetGravityVector.srv b/kortex_driver/srv/generated/control_config/GetGravityVector.srv new file mode 100644 index 00000000..2d7fb24a --- /dev/null +++ b/kortex_driver/srv/generated/control_config/GetGravityVector.srv @@ -0,0 +1,3 @@ +Empty input +--- +GravityVector output \ No newline at end of file diff --git a/kortex_driver/srv/generated/control_config/GetPayloadInformation.srv b/kortex_driver/srv/generated/control_config/GetPayloadInformation.srv new file mode 100644 index 00000000..8ace35bb --- /dev/null +++ b/kortex_driver/srv/generated/control_config/GetPayloadInformation.srv @@ -0,0 +1,3 @@ +Empty input +--- +PayloadInformation output \ No newline at end of file diff --git a/kortex_driver/srv/generated/control_config/GetToolConfiguration.srv b/kortex_driver/srv/generated/control_config/GetToolConfiguration.srv new file mode 100644 index 00000000..f7aad83b --- /dev/null +++ b/kortex_driver/srv/generated/control_config/GetToolConfiguration.srv @@ -0,0 +1,3 @@ +Empty input +--- +ToolConfiguration output \ No newline at end of file diff --git a/kortex_device_manager/srv/OnNotificationSafetyTopic.srv b/kortex_driver/srv/generated/control_config/OnNotificationControlConfigurationTopic.srv similarity index 100% rename from kortex_device_manager/srv/OnNotificationSafetyTopic.srv rename to kortex_driver/srv/generated/control_config/OnNotificationControlConfigurationTopic.srv diff --git a/kortex_driver/srv/generated/control_config/SetCartesianReferenceFrame.srv b/kortex_driver/srv/generated/control_config/SetCartesianReferenceFrame.srv new file mode 100644 index 00000000..9e68bf77 --- /dev/null +++ b/kortex_driver/srv/generated/control_config/SetCartesianReferenceFrame.srv @@ -0,0 +1,3 @@ +CartesianReferenceFrameInfo input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/generated/control_config/SetGravityVector.srv b/kortex_driver/srv/generated/control_config/SetGravityVector.srv new file mode 100644 index 00000000..a8918bf3 --- /dev/null +++ b/kortex_driver/srv/generated/control_config/SetGravityVector.srv @@ -0,0 +1,3 @@ +GravityVector input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/generated/control_config/SetPayloadInformation.srv b/kortex_driver/srv/generated/control_config/SetPayloadInformation.srv new file mode 100644 index 00000000..961ff3af --- /dev/null +++ b/kortex_driver/srv/generated/control_config/SetPayloadInformation.srv @@ -0,0 +1,3 @@ +PayloadInformation input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/generated/control_config/SetToolConfiguration.srv b/kortex_driver/srv/generated/control_config/SetToolConfiguration.srv new file mode 100644 index 00000000..c076f1f3 --- /dev/null +++ b/kortex_driver/srv/generated/control_config/SetToolConfiguration.srv @@ -0,0 +1,3 @@ +ToolConfiguration input +--- +Empty output \ No newline at end of file diff --git a/kortex_device_manager/srv/ClearAllSafetyStatus.srv b/kortex_driver/srv/generated/device_config/ClearAllSafetyStatus.srv similarity index 100% rename from kortex_device_manager/srv/ClearAllSafetyStatus.srv rename to kortex_driver/srv/generated/device_config/ClearAllSafetyStatus.srv diff --git a/kortex_device_manager/srv/ClearSafetyStatus.srv b/kortex_driver/srv/generated/device_config/ClearSafetyStatus.srv similarity index 100% rename from kortex_device_manager/srv/ClearSafetyStatus.srv rename to kortex_driver/srv/generated/device_config/ClearSafetyStatus.srv diff --git a/kortex_driver/srv/generated/device_config/DeviceConfig_GetCapSenseConfig.srv b/kortex_driver/srv/generated/device_config/DeviceConfig_GetCapSenseConfig.srv new file mode 100644 index 00000000..9502cbd6 --- /dev/null +++ b/kortex_driver/srv/generated/device_config/DeviceConfig_GetCapSenseConfig.srv @@ -0,0 +1,3 @@ +Empty input +--- +DeviceConfig_CapSenseConfig output \ No newline at end of file diff --git a/kortex_driver/srv/generated/device_config/DeviceConfig_SetCapSenseConfig.srv b/kortex_driver/srv/generated/device_config/DeviceConfig_SetCapSenseConfig.srv new file mode 100644 index 00000000..94302cf7 --- /dev/null +++ b/kortex_driver/srv/generated/device_config/DeviceConfig_SetCapSenseConfig.srv @@ -0,0 +1,3 @@ +DeviceConfig_CapSenseConfig input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/generated/device_config/ExecuteCalibration.srv b/kortex_driver/srv/generated/device_config/ExecuteCalibration.srv new file mode 100644 index 00000000..bf707a7f --- /dev/null +++ b/kortex_driver/srv/generated/device_config/ExecuteCalibration.srv @@ -0,0 +1,3 @@ +Calibration input +--- +Empty output \ No newline at end of file diff --git a/kortex_device_manager/srv/GetAllSafetyConfiguration.srv b/kortex_driver/srv/generated/device_config/GetAllSafetyConfiguration.srv similarity index 100% rename from kortex_device_manager/srv/GetAllSafetyConfiguration.srv rename to kortex_driver/srv/generated/device_config/GetAllSafetyConfiguration.srv diff --git a/kortex_device_manager/srv/GetAllSafetyInformation.srv b/kortex_driver/srv/generated/device_config/GetAllSafetyInformation.srv similarity index 100% rename from kortex_device_manager/srv/GetAllSafetyInformation.srv rename to kortex_driver/srv/generated/device_config/GetAllSafetyInformation.srv diff --git a/kortex_device_manager/srv/GetBootloaderVersion.srv b/kortex_driver/srv/generated/device_config/GetBootloaderVersion.srv similarity index 100% rename from kortex_device_manager/srv/GetBootloaderVersion.srv rename to kortex_driver/srv/generated/device_config/GetBootloaderVersion.srv diff --git a/kortex_driver/srv/generated/device_config/GetCalibrationResult.srv b/kortex_driver/srv/generated/device_config/GetCalibrationResult.srv new file mode 100644 index 00000000..b88c306b --- /dev/null +++ b/kortex_driver/srv/generated/device_config/GetCalibrationResult.srv @@ -0,0 +1,3 @@ +CalibrationElement input +--- +CalibrationResult output \ No newline at end of file diff --git a/kortex_device_manager/srv/GetDeviceType.srv b/kortex_driver/srv/generated/device_config/GetDeviceType.srv similarity index 100% rename from kortex_device_manager/srv/GetDeviceType.srv rename to kortex_driver/srv/generated/device_config/GetDeviceType.srv diff --git a/kortex_device_manager/srv/GetFirmwareVersion.srv b/kortex_driver/srv/generated/device_config/GetFirmwareVersion.srv similarity index 100% rename from kortex_device_manager/srv/GetFirmwareVersion.srv rename to kortex_driver/srv/generated/device_config/GetFirmwareVersion.srv diff --git a/kortex_device_manager/srv/GetIPv4Settings.srv b/kortex_driver/srv/generated/device_config/GetIPv4Settings.srv similarity index 100% rename from kortex_device_manager/srv/GetIPv4Settings.srv rename to kortex_driver/srv/generated/device_config/GetIPv4Settings.srv diff --git a/kortex_device_manager/srv/GetMACAddress.srv b/kortex_driver/srv/generated/device_config/GetMACAddress.srv similarity index 100% rename from kortex_device_manager/srv/GetMACAddress.srv rename to kortex_driver/srv/generated/device_config/GetMACAddress.srv diff --git a/kortex_device_manager/srv/GetModelNumber.srv b/kortex_driver/srv/generated/device_config/GetModelNumber.srv similarity index 100% rename from kortex_device_manager/srv/GetModelNumber.srv rename to kortex_driver/srv/generated/device_config/GetModelNumber.srv diff --git a/kortex_device_manager/srv/GetPartNumber.srv b/kortex_driver/srv/generated/device_config/GetPartNumber.srv similarity index 100% rename from kortex_device_manager/srv/GetPartNumber.srv rename to kortex_driver/srv/generated/device_config/GetPartNumber.srv diff --git a/kortex_device_manager/srv/GetPartNumberRevision.srv b/kortex_driver/srv/generated/device_config/GetPartNumberRevision.srv similarity index 100% rename from kortex_device_manager/srv/GetPartNumberRevision.srv rename to kortex_driver/srv/generated/device_config/GetPartNumberRevision.srv diff --git a/kortex_device_manager/srv/GetRunMode.srv b/kortex_driver/srv/generated/device_config/GetRunMode.srv similarity index 100% rename from kortex_device_manager/srv/GetRunMode.srv rename to kortex_driver/srv/generated/device_config/GetRunMode.srv diff --git a/kortex_device_manager/srv/GetSafetyConfiguration.srv b/kortex_driver/srv/generated/device_config/GetSafetyConfiguration.srv similarity index 100% rename from kortex_device_manager/srv/GetSafetyConfiguration.srv rename to kortex_driver/srv/generated/device_config/GetSafetyConfiguration.srv diff --git a/kortex_device_manager/srv/GetSafetyEnable.srv b/kortex_driver/srv/generated/device_config/GetSafetyEnable.srv similarity index 100% rename from kortex_device_manager/srv/GetSafetyEnable.srv rename to kortex_driver/srv/generated/device_config/GetSafetyEnable.srv diff --git a/kortex_device_manager/srv/GetSafetyInformation.srv b/kortex_driver/srv/generated/device_config/GetSafetyInformation.srv similarity index 100% rename from kortex_device_manager/srv/GetSafetyInformation.srv rename to kortex_driver/srv/generated/device_config/GetSafetyInformation.srv diff --git a/kortex_device_manager/srv/GetSafetyStatus.srv b/kortex_driver/srv/generated/device_config/GetSafetyStatus.srv similarity index 100% rename from kortex_device_manager/srv/GetSafetyStatus.srv rename to kortex_driver/srv/generated/device_config/GetSafetyStatus.srv diff --git a/kortex_device_manager/srv/GetSerialNumber.srv b/kortex_driver/srv/generated/device_config/GetSerialNumber.srv similarity index 100% rename from kortex_device_manager/srv/GetSerialNumber.srv rename to kortex_driver/srv/generated/device_config/GetSerialNumber.srv diff --git a/kortex_vision_config_driver/srv/OnNotificationVisionTopic.srv b/kortex_driver/srv/generated/device_config/OnNotificationSafetyTopic.srv similarity index 100% rename from kortex_vision_config_driver/srv/OnNotificationVisionTopic.srv rename to kortex_driver/srv/generated/device_config/OnNotificationSafetyTopic.srv diff --git a/kortex_device_manager/srv/RebootRequest.srv b/kortex_driver/srv/generated/device_config/RebootRequest.srv similarity index 100% rename from kortex_device_manager/srv/RebootRequest.srv rename to kortex_driver/srv/generated/device_config/RebootRequest.srv diff --git a/kortex_device_manager/srv/ResetSafetyDefaults.srv b/kortex_driver/srv/generated/device_config/ResetSafetyDefaults.srv similarity index 100% rename from kortex_device_manager/srv/ResetSafetyDefaults.srv rename to kortex_driver/srv/generated/device_config/ResetSafetyDefaults.srv diff --git a/kortex_device_manager/srv/SetIPv4Settings.srv b/kortex_driver/srv/generated/device_config/SetIPv4Settings.srv similarity index 100% rename from kortex_device_manager/srv/SetIPv4Settings.srv rename to kortex_driver/srv/generated/device_config/SetIPv4Settings.srv diff --git a/kortex_device_manager/srv/SetRunMode.srv b/kortex_driver/srv/generated/device_config/SetRunMode.srv similarity index 100% rename from kortex_device_manager/srv/SetRunMode.srv rename to kortex_driver/srv/generated/device_config/SetRunMode.srv diff --git a/kortex_device_manager/srv/SetSafetyConfiguration.srv b/kortex_driver/srv/generated/device_config/SetSafetyConfiguration.srv similarity index 100% rename from kortex_device_manager/srv/SetSafetyConfiguration.srv rename to kortex_driver/srv/generated/device_config/SetSafetyConfiguration.srv diff --git a/kortex_device_manager/srv/SetSafetyEnable.srv b/kortex_driver/srv/generated/device_config/SetSafetyEnable.srv similarity index 100% rename from kortex_device_manager/srv/SetSafetyEnable.srv rename to kortex_driver/srv/generated/device_config/SetSafetyEnable.srv diff --git a/kortex_device_manager/srv/SetSafetyErrorThreshold.srv b/kortex_driver/srv/generated/device_config/SetSafetyErrorThreshold.srv similarity index 100% rename from kortex_device_manager/srv/SetSafetyErrorThreshold.srv rename to kortex_driver/srv/generated/device_config/SetSafetyErrorThreshold.srv diff --git a/kortex_device_manager/srv/SetSafetyWarningThreshold.srv b/kortex_driver/srv/generated/device_config/SetSafetyWarningThreshold.srv similarity index 100% rename from kortex_device_manager/srv/SetSafetyWarningThreshold.srv rename to kortex_driver/srv/generated/device_config/SetSafetyWarningThreshold.srv diff --git a/kortex_driver/srv/generated/device_config/StopCalibration.srv b/kortex_driver/srv/generated/device_config/StopCalibration.srv new file mode 100644 index 00000000..8fccb473 --- /dev/null +++ b/kortex_driver/srv/generated/device_config/StopCalibration.srv @@ -0,0 +1,3 @@ +Calibration input +--- +CalibrationResult output \ No newline at end of file diff --git a/kortex_device_manager/srv/ReadAllDevices.srv b/kortex_driver/srv/generated/device_manager/ReadAllDevices.srv similarity index 100% rename from kortex_device_manager/srv/ReadAllDevices.srv rename to kortex_driver/srv/generated/device_manager/ReadAllDevices.srv diff --git a/kortex_driver/srv/generated/interconnect_config/GetEthernetConfiguration.srv b/kortex_driver/srv/generated/interconnect_config/GetEthernetConfiguration.srv new file mode 100644 index 00000000..222659c7 --- /dev/null +++ b/kortex_driver/srv/generated/interconnect_config/GetEthernetConfiguration.srv @@ -0,0 +1,3 @@ +EthernetDeviceIdentification input +--- +EthernetConfiguration output \ No newline at end of file diff --git a/kortex_driver/srv/generated/interconnect_config/GetGPIOConfiguration.srv b/kortex_driver/srv/generated/interconnect_config/GetGPIOConfiguration.srv new file mode 100644 index 00000000..4674efd1 --- /dev/null +++ b/kortex_driver/srv/generated/interconnect_config/GetGPIOConfiguration.srv @@ -0,0 +1,3 @@ +GPIOIdentification input +--- +GPIOConfiguration output \ No newline at end of file diff --git a/kortex_driver/srv/generated/interconnect_config/GetGPIOState.srv b/kortex_driver/srv/generated/interconnect_config/GetGPIOState.srv new file mode 100644 index 00000000..586a5f44 --- /dev/null +++ b/kortex_driver/srv/generated/interconnect_config/GetGPIOState.srv @@ -0,0 +1,3 @@ +GPIOIdentification input +--- +GPIOState output \ No newline at end of file diff --git a/kortex_driver/srv/generated/interconnect_config/GetI2CConfiguration.srv b/kortex_driver/srv/generated/interconnect_config/GetI2CConfiguration.srv new file mode 100644 index 00000000..bc9ca675 --- /dev/null +++ b/kortex_driver/srv/generated/interconnect_config/GetI2CConfiguration.srv @@ -0,0 +1,3 @@ +I2CDeviceIdentification input +--- +I2CConfiguration output \ No newline at end of file diff --git a/kortex_driver/srv/generated/interconnect_config/GetUARTConfiguration.srv b/kortex_driver/srv/generated/interconnect_config/GetUARTConfiguration.srv new file mode 100644 index 00000000..506bdf16 --- /dev/null +++ b/kortex_driver/srv/generated/interconnect_config/GetUARTConfiguration.srv @@ -0,0 +1,3 @@ +UARTDeviceIdentification input +--- +UARTConfiguration output \ No newline at end of file diff --git a/kortex_driver/srv/generated/interconnect_config/I2CRead.srv b/kortex_driver/srv/generated/interconnect_config/I2CRead.srv new file mode 100644 index 00000000..c2fc6c43 --- /dev/null +++ b/kortex_driver/srv/generated/interconnect_config/I2CRead.srv @@ -0,0 +1,3 @@ +I2CReadParameter input +--- +I2CData output \ No newline at end of file diff --git a/kortex_driver/srv/generated/interconnect_config/I2CReadRegister.srv b/kortex_driver/srv/generated/interconnect_config/I2CReadRegister.srv new file mode 100644 index 00000000..5368c96e --- /dev/null +++ b/kortex_driver/srv/generated/interconnect_config/I2CReadRegister.srv @@ -0,0 +1,3 @@ +I2CReadRegisterParameter input +--- +I2CData output \ No newline at end of file diff --git a/kortex_driver/srv/generated/interconnect_config/I2CWrite.srv b/kortex_driver/srv/generated/interconnect_config/I2CWrite.srv new file mode 100644 index 00000000..bd9d0f25 --- /dev/null +++ b/kortex_driver/srv/generated/interconnect_config/I2CWrite.srv @@ -0,0 +1,3 @@ +I2CWriteParameter input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/generated/interconnect_config/I2CWriteRegister.srv b/kortex_driver/srv/generated/interconnect_config/I2CWriteRegister.srv new file mode 100644 index 00000000..faab28f5 --- /dev/null +++ b/kortex_driver/srv/generated/interconnect_config/I2CWriteRegister.srv @@ -0,0 +1,3 @@ +I2CWriteRegisterParameter input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/generated/interconnect_config/SetEthernetConfiguration.srv b/kortex_driver/srv/generated/interconnect_config/SetEthernetConfiguration.srv new file mode 100644 index 00000000..f7e62e52 --- /dev/null +++ b/kortex_driver/srv/generated/interconnect_config/SetEthernetConfiguration.srv @@ -0,0 +1,3 @@ +EthernetConfiguration input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/generated/interconnect_config/SetGPIOConfiguration.srv b/kortex_driver/srv/generated/interconnect_config/SetGPIOConfiguration.srv new file mode 100644 index 00000000..0cefe47e --- /dev/null +++ b/kortex_driver/srv/generated/interconnect_config/SetGPIOConfiguration.srv @@ -0,0 +1,3 @@ +GPIOConfiguration input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/generated/interconnect_config/SetGPIOState.srv b/kortex_driver/srv/generated/interconnect_config/SetGPIOState.srv new file mode 100644 index 00000000..b77f87d5 --- /dev/null +++ b/kortex_driver/srv/generated/interconnect_config/SetGPIOState.srv @@ -0,0 +1,3 @@ +GPIOState input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/generated/interconnect_config/SetI2CConfiguration.srv b/kortex_driver/srv/generated/interconnect_config/SetI2CConfiguration.srv new file mode 100644 index 00000000..c8e8419f --- /dev/null +++ b/kortex_driver/srv/generated/interconnect_config/SetI2CConfiguration.srv @@ -0,0 +1,3 @@ +I2CConfiguration input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/generated/interconnect_config/SetUARTConfiguration.srv b/kortex_driver/srv/generated/interconnect_config/SetUARTConfiguration.srv new file mode 100644 index 00000000..66e7f87b --- /dev/null +++ b/kortex_driver/srv/generated/interconnect_config/SetUARTConfiguration.srv @@ -0,0 +1,3 @@ +UARTConfiguration input +--- +Empty output \ No newline at end of file diff --git a/kortex_vision_config_driver/srv/DoSensorFocusAction.srv b/kortex_driver/srv/generated/vision_config/DoSensorFocusAction.srv similarity index 100% rename from kortex_vision_config_driver/srv/DoSensorFocusAction.srv rename to kortex_driver/srv/generated/vision_config/DoSensorFocusAction.srv diff --git a/kortex_driver/srv/generated/vision_config/GetExtrinsicParameters.srv b/kortex_driver/srv/generated/vision_config/GetExtrinsicParameters.srv new file mode 100644 index 00000000..c7705f13 --- /dev/null +++ b/kortex_driver/srv/generated/vision_config/GetExtrinsicParameters.srv @@ -0,0 +1,3 @@ +Empty input +--- +ExtrinsicParameters output \ No newline at end of file diff --git a/kortex_vision_config_driver/srv/GetIntrinsicParameters.srv b/kortex_driver/srv/generated/vision_config/GetIntrinsicParameters.srv similarity index 100% rename from kortex_vision_config_driver/srv/GetIntrinsicParameters.srv rename to kortex_driver/srv/generated/vision_config/GetIntrinsicParameters.srv diff --git a/kortex_driver/srv/generated/vision_config/GetIntrinsicParametersProfile.srv b/kortex_driver/srv/generated/vision_config/GetIntrinsicParametersProfile.srv new file mode 100644 index 00000000..66ec9a92 --- /dev/null +++ b/kortex_driver/srv/generated/vision_config/GetIntrinsicParametersProfile.srv @@ -0,0 +1,3 @@ +IntrinsicProfileIdentifier input +--- +IntrinsicParameters output \ No newline at end of file diff --git a/kortex_vision_config_driver/srv/GetOptionInformation.srv b/kortex_driver/srv/generated/vision_config/GetOptionInformation.srv similarity index 100% rename from kortex_vision_config_driver/srv/GetOptionInformation.srv rename to kortex_driver/srv/generated/vision_config/GetOptionInformation.srv diff --git a/kortex_vision_config_driver/srv/GetOptionValue.srv b/kortex_driver/srv/generated/vision_config/GetOptionValue.srv similarity index 100% rename from kortex_vision_config_driver/srv/GetOptionValue.srv rename to kortex_driver/srv/generated/vision_config/GetOptionValue.srv diff --git a/kortex_vision_config_driver/srv/GetSensorSettings.srv b/kortex_driver/srv/generated/vision_config/GetSensorSettings.srv similarity index 100% rename from kortex_vision_config_driver/srv/GetSensorSettings.srv rename to kortex_driver/srv/generated/vision_config/GetSensorSettings.srv diff --git a/kortex_driver/srv/generated/vision_config/OnNotificationVisionTopic.srv b/kortex_driver/srv/generated/vision_config/OnNotificationVisionTopic.srv new file mode 100644 index 00000000..43c15c71 --- /dev/null +++ b/kortex_driver/srv/generated/vision_config/OnNotificationVisionTopic.srv @@ -0,0 +1,3 @@ +NotificationOptions input +--- +NotificationHandle output \ No newline at end of file diff --git a/kortex_driver/srv/generated/vision_config/SetExtrinsicParameters.srv b/kortex_driver/srv/generated/vision_config/SetExtrinsicParameters.srv new file mode 100644 index 00000000..6a05356a --- /dev/null +++ b/kortex_driver/srv/generated/vision_config/SetExtrinsicParameters.srv @@ -0,0 +1,3 @@ +ExtrinsicParameters input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/generated/vision_config/SetIntrinsicParameters.srv b/kortex_driver/srv/generated/vision_config/SetIntrinsicParameters.srv new file mode 100644 index 00000000..24db7c39 --- /dev/null +++ b/kortex_driver/srv/generated/vision_config/SetIntrinsicParameters.srv @@ -0,0 +1,3 @@ +IntrinsicParameters input +--- +Empty output \ No newline at end of file diff --git a/kortex_vision_config_driver/srv/SetOptionValue.srv b/kortex_driver/srv/generated/vision_config/SetOptionValue.srv similarity index 100% rename from kortex_vision_config_driver/srv/SetOptionValue.srv rename to kortex_driver/srv/generated/vision_config/SetOptionValue.srv diff --git a/kortex_vision_config_driver/srv/SetSensorSettings.srv b/kortex_driver/srv/generated/vision_config/SetSensorSettings.srv similarity index 100% rename from kortex_vision_config_driver/srv/SetSensorSettings.srv rename to kortex_driver/srv/generated/vision_config/SetSensorSettings.srv diff --git a/kortex_driver/templates/NodeServices.cpp.jinja2 b/kortex_driver/templates/NodeServices.cpp.jinja2 deleted file mode 100644 index 94d27245..00000000 --- a/kortex_driver/templates/NodeServices.cpp.jinja2 +++ /dev/null @@ -1,145 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "node.h" -{% for package in detailedPackages %} -{%- if package.HasMessage == 1 -%} -#include "{{package.filename|lower}}_ros_converter.h" -#include "{{package.filename|lower}}_proto_converter.h" -{%- endif %} -{% endfor -%} - -BaseServices::BaseServices(char* ip, ros::NodeHandle& n) : m_n(n) -{ - m_transport = new TransportClientUdp(); - m_transport->connect(ip, 10000); - - m_router = new RouterClient(m_transport, [](KError err) { cout << "_________ callback error _________" << err.toString(); }); - m_CurrentDeviceID = 0; - m_apiOptions.timeout_ms = 3000; -{% for package in detailedPackages %} - {%- if package.HasRPC == 1 %} - m_{{package.name|lower}} = new {{package.name}}::{{package.name}}Client(m_router); - {%- endif -%} - -{% endfor %} - m_SessionManager = new SessionManager(m_router); - auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); - - createSessionInfo.set_username("admin"); - createSessionInfo.set_password("admin"); - createSessionInfo.set_session_inactivity_timeout(35000); - - m_SessionManager->CreateSession(createSessionInfo); - std::cout << "\nSession Created\n"; - - m_pub_Error = m_n.advertise("KortexError", 1000); -{%- for package in detailedPackages -%} -{%- for method in package.service.method -%} -{%- if 'Topic' in method.name %} - m_pub_{{method.name}} = m_n.advertise("{{method.name}}", 1000); -{%- endif -%} -{%- endfor -%} -{%- endfor -%} - - std::this_thread::sleep_for(std::chrono::milliseconds(2000)); -} - -bool BaseServices::SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res) -{ - m_CurrentDeviceID = req.device_id; - - return true; -} - -bool BaseServices::SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res) -{ - m_apiOptions.timeout_ms = req.input.timeout_ms; - - return true; -} - -{% for package in detailedPackages %} -{% for method in package.service.method %} -{%- if 'Topic' in method.name %} -bool BaseServices::OnNotification{{method.name}}(kortex_driver::OnNotification{{method.name}}::Request &req, kortex_driver::OnNotification{{method.name}}::Response &res) -{%- else %} -bool BaseServices::{{method.name}}(kortex_driver::{{method.name}}::Request &req, kortex_driver::{{method.name}}::Response &res) -{%- endif %} -{ - {%- set splitInputTypeName = method.input_type.split('.') -%} - {% set splitOutputTypeName = method.output_type.split('.') %} - {{splitInputTypeName[4]}} input; - {%- if not method.input_type.split('.')[4] == "Empty" %} - ToProtoData(req.input, &input); - {%- endif %} - {{splitOutputTypeName[4]}} output; - kortex_driver::KortexError result_error; - - try - { - {%- if not method.output_type.split('.')[4] == "Empty" %} - {%- if not method.input_type.split('.')[4] == "Empty" %} - {%- if 'Topic' in method.name %} - std::function< void ({{package.name}}::{{method.name|replace("Topic", "")}}Notification) > callback = std::bind(&BaseServices::cb_{{method.name}}, this, std::placeholders::_1); - output = m_{{package.name|lower}}->OnNotification{{method.name}}(callback, input); - {%- else %} - output = m_{{package.name|lower}}->{{method.name}}(input, m_CurrentDeviceID, m_apiOptions); - {%- endif %} - {%- else %} - output = m_{{package.name|lower}}->{{method.name}}(m_CurrentDeviceID, m_apiOptions); - {%- endif %} - {%- else %} - {%- if not method.input_type.split('.')[4] == "Empty" %} - m_{{package.name|lower}}->{{method.name}}(input, m_CurrentDeviceID, m_apiOptions); - {%- else %} - m_{{package.name|lower}}->{{method.name}}(m_CurrentDeviceID, m_apiOptions); - {%- endif %} - {%- endif %} - } - catch (KDetailedException& ex) - - - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.toString(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - {%- if not method.output_type.split('.')[4] == "Empty" %} - ToRosData(output, res.output); - {%- endif %} - return true; -} -{%- if 'Topic' in method.name %} -void BaseServices::cb_{{method.name}}({{package.name}}::{{method.name|replace("Topic", "")}}Notification notif) -{ - kortex_driver::{{method.name|replace("Topic", "")}}Notification ros_msg; - ToRosData(notif, ros_msg); - m_pub_{{method.name}}.publish(ros_msg); -} -{%- endif %} -{% endfor -%} -{% endfor -%} \ No newline at end of file diff --git a/kortex_driver/templates/NodeServices.h.jinja2 b/kortex_driver/templates/NodeServices.h.jinja2 deleted file mode 100644 index 3bb26a72..00000000 --- a/kortex_driver/templates/NodeServices.h.jinja2 +++ /dev/null @@ -1,112 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_{{packageName}}SERVICES_H_ -#define _KORTEX_{{packageName}}SERVICES_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -{%- for package in detailedPackages %} -#include <{{package.filename}}.pb.h> -{%- endfor %} - -#include -#include - -#include -#include - -{%- for package in detailedPackages %} -{%- if package.HasRPC == 1 %} -#include <{{package.name}}ClientRpc.h> -{%- endif %} -{%- endfor %} -#include -#include - -{%- for package in detailedPackages %} -{%- for method in package.service.method %} -{%- if 'Topic' in method.name %} -#include "kortex_driver/OnNotification{{method.name}}.h" -#include "kortex_driver/{{method.name|replace("Topic", "")}}Notification.h" -{%- else %} -#include "kortex_driver/{{method.name}}.h" -{%- endif %} -{%- endfor %} -{%- endfor %} -#include "kortex_driver/KortexError.h" -#include "kortex_driver/SetDeviceID.h" -#include "kortex_driver/SetApiOptions.h" - -#include "kortex_driver/ApiOptions.h" - -using namespace std; -using namespace Kinova::Api; -{%- for package in detailedPackages %} -using namespace {{package.namespace}}; -{%- endfor %} - -class BaseServices -{ - public: - BaseServices(char* ip, ros::NodeHandle& n); - bool SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res); - bool SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res); -{% for package in detailedPackages %} -{%- for method in package.service.method %} -{%- if 'Topic' in method.name %} - bool OnNotification{{method.name}}(kortex_driver::OnNotification{{method.name}}::Request &req, kortex_driver::OnNotification{{method.name}}::Response &res); - void cb_{{method.name}}({{method.name|replace("Topic", "")}}Notification notif); -{%- else %} - bool {{method.name}}(kortex_driver::{{method.name}}::Request &req, kortex_driver::{{method.name}}::Response &res); -{%- endif %} -{%- endfor %} -{% endfor %} - -private: - TransportClientUdp* m_transport; - RouterClient* m_router; - {% for package in detailedPackages %} - {%- if package.HasRPC == 1 %} - {{package.name}}Client* m_{{package.name|lower}}; - {%- endif -%} - {% endfor %} - uint32_t m_CurrentDeviceID; - RouterClientSendOptions m_apiOptions; - - SessionManager* m_SessionManager; - - ros::NodeHandle m_n; - ros::Publisher m_pub_Error; - - {%- for package in detailedPackages %} - {%- for method in package.service.method %} - {%- if 'Topic' in method.name %} - ros::Publisher m_pub_{{method.name}}; - {%- endif %} - {%- endfor %} - {%- endfor %} -}; -#endif - diff --git a/kortex_driver/templates/main.jinja2 b/kortex_driver/templates/main.jinja2 deleted file mode 100644 index 4d509fbb..00000000 --- a/kortex_driver/templates/main.jinja2 +++ /dev/null @@ -1,160 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "node.h" -#include "math_util.h" - -#include -#include - -#define JOINT_COUNT 7 - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "BaseServices"); - - uint32_t cyclic_data_rate = 100; - - ros::NodeHandle n; - bool valid_ip = false; - - if(argc > 2) - { - ROS_INFO("Connecting to IP = %s - node refresh rate = %s", argv[1], argv[2]); - - //Converting the second parameter(the cyclic rate) to an unsigned int variable. - stringstream tempRate; - tempRate << argv[2]; - tempRate >> cyclic_data_rate; - if(tempRate.fail() || tempRate.bad()) - { - ROS_INFO("ERROR - Bad error rate, shutting down the node..."); - ros::shutdown(); - return 0; - } - } - else - { - ROS_INFO("You need to provide an IP adresse as the first parameter and a cycle rate(Hertz) as the second parameter. ex: rosrun package node 192.168.1.1 100"); - ros::shutdown(); - return 0; - } - - BaseServices services_object(argv[1], n); - - ros::ServiceServer serviceSetDeviceID = n.advertiseService("SetDeviceID", &BaseServices::SetDeviceID, &services_object); - - {% for function in list_function -%} - ros::ServiceServer service{{function}} = n.advertiseService("{{function}}", &BaseServices::{{function}}, &services_object); - {% endfor %} - - ROS_INFO("Node's services initialized correctly."); - - ros::Publisher pub_base_feedback = n.advertise("base_feedback", 1000); - ros::Publisher pub_joint_state = n.advertise("base_feedback/joint_state", 1000); - - kortex_driver::Feedback base_feedback; - kortex_driver::RefreshFeedback::Request req; - kortex_driver::RefreshFeedback::Response res; - - sensor_msgs::JointState joint_state; - - ros::Rate rate(cyclic_data_rate); - while (!ros::isShuttingDown()) - { - services_object.RefreshFeedback(req, res); - - base_feedback.frame_id = res.output.frame_id; - - base_feedback.base.arm_voltage = res.output.base.arm_voltage; - base_feedback.base.arm_current = res.output.base.arm_current; - base_feedback.base.temperature_cpu = res.output.base.temperature_cpu; - base_feedback.base.temperature_ambient = res.output.base.temperature_ambient; - base_feedback.base.imu_acceleration_x = res.output.base.imu_acceleration_x; - base_feedback.base.imu_acceleration_y = res.output.base.imu_acceleration_y; - base_feedback.base.imu_acceleration_z = res.output.base.imu_acceleration_z; - base_feedback.base.imu_angular_velocity_x = res.output.base.imu_angular_velocity_x; - base_feedback.base.imu_angular_velocity_y = res.output.base.imu_angular_velocity_y; - base_feedback.base.imu_angular_velocity_z = res.output.base.imu_angular_velocity_z; - base_feedback.base.tool_pose_x = res.output.base.tool_pose_x; - base_feedback.base.tool_pose_y = res.output.base.tool_pose_y; - base_feedback.base.tool_pose_z = res.output.base.tool_pose_z; - base_feedback.base.tool_pose_theta_x = res.output.base.tool_pose_theta_x; - base_feedback.base.tool_pose_theta_y = res.output.base.tool_pose_theta_y; - base_feedback.base.tool_pose_theta_z = res.output.base.tool_pose_theta_z; - base_feedback.base.tool_external_wrench_force_x = res.output.base.tool_external_wrench_force_x; - base_feedback.base.tool_external_wrench_force_y = res.output.base.tool_external_wrench_force_y; - base_feedback.base.tool_external_wrench_force_z = res.output.base.tool_external_wrench_force_z; - base_feedback.base.tool_external_wrench_torque_x = res.output.base.tool_external_wrench_torque_x; - base_feedback.base.tool_external_wrench_torque_y = res.output.base.tool_external_wrench_torque_y; - base_feedback.base.tool_external_wrench_torque_z = res.output.base.tool_external_wrench_torque_z; - base_feedback.base.fault_bank_a = res.output.base.fault_bank_a; - base_feedback.base.fault_bank_b = res.output.base.fault_bank_b; - base_feedback.base.warning_bank_a = res.output.base.warning_bank_a; - base_feedback.base.warning_bank_b = res.output.base.warning_bank_b; - - base_feedback.actuators.clear(); - - joint_state.position.resize(JOINT_COUNT); - joint_state.velocity.resize(JOINT_COUNT); - joint_state.effort.resize(JOINT_COUNT); - joint_state.name.resize(JOINT_COUNT); - - for(int i = 0; i < JOINT_COUNT; i++) - { - kortex_driver::ActuatorFeedback temp; - - temp.status_flags = res.output.actuators[i].status_flags; - temp.jitter_comm = res.output.actuators[i].jitter_comm; - temp.position = res.output.actuators[i].position; - temp.velocity = res.output.actuators[i].velocity; - temp.torque = res.output.actuators[i].torque; - temp.current_motor = res.output.actuators[i].current_motor; - temp.voltage = res.output.actuators[i].voltage; - temp.temperature_motor = res.output.actuators[i].temperature_motor; - temp.temperature_core = res.output.actuators[i].temperature_core; - temp.fault_bank_a = res.output.actuators[i].fault_bank_a; - temp.fault_bank_b = res.output.actuators[i].fault_bank_b; - temp.warning_bank_a = res.output.actuators[i].warning_bank_a; - temp.warning_bank_b = res.output.actuators[i].warning_bank_b; - - base_feedback.actuators.push_back(temp); - - joint_state.name[i] = "joint_" + std::to_string(i + 1); - joint_state.position[i] = TO_RAD(res.output.actuators[i].position); - joint_state.velocity[i] = TO_RAD(res.output.actuators[i].velocity); - joint_state.effort[i] = res.output.actuators[i].torque; - } - base_feedback.interconnect.position = res.output.interconnect.position; - - - - joint_state.header.stamp = ros::Time::now(); - joint_state.header.frame_id = std::to_string(res.output.frame_id); - - pub_base_feedback.publish(base_feedback); - pub_joint_state.publish(joint_state); - - - ros::spinOnce(); - - - - rate.sleep(); - } - - return 1; -} diff --git a/kortex_driver/templates/proto_converter.cpp.jinja2 b/kortex_driver/templates/proto_converter.cpp.jinja2 index e37a427f..8ce16a7c 100644 --- a/kortex_driver/templates/proto_converter.cpp.jinja2 +++ b/kortex_driver/templates/proto_converter.cpp.jinja2 @@ -1,7 +1,7 @@ /* * KINOVA (R) KORTEX (TM) * -* Copyright (c) 2018 Kinova inc. All rights reserved. +* Copyright (c) 2019 Kinova inc. All rights reserved. * * This software may be modified and distributed under the * terms of the BSD 3-Clause license. @@ -14,35 +14,37 @@ * This file has been auto-generated and should not be modified. */ -#include "{{currentPackageName|lower}}_proto_converter.h" -{% if 'Common' not in currentPackageName %} -#include "common_proto_converter.h" -{% endif %} +#include "{{current_header_filename}}" -{% for detailed_message in item -%} -int ToProtoData(kortex_driver::{{detailed_message.message.name}} input, {{detailed_message.message.name}} *output) +{% for detailed_message in package.messages -%} +int ToProtoData(kortex_driver::{{detailed_message.prepend_message_name}}{{detailed_message.name}} input, {{detailed_message.cpp_namespace}}::{{detailed_message.name}} *output) { - {%- for field in detailed_message.message.field %} + {% for field in detailed_message.message.field -%} {%- if not field.HasField("oneof_index") -%} - {%- if field.label == 3 %} {# Si c'est un repeated #} - {%- if field.type == 11 %} + {%- if field.label == 3 -%} {# REPEATED #} + {%- if field.type == 11 %} {# MESSAGE #} output->clear_{{field.name|lower}}(); for(int i = 0; i < input.{{field.name}}.size(); i++) { ToProtoData(input.{{field.name}}[i], output->add_{{field.name|lower}}()); } + {%- elif field.type == 14 %} {# ENUM #} + output->clear_{{field.name|lower}}(); + for(int i = 0; i < input.{{field.name}}.size(); i++) + { + output->add_{{field.name}}(({{field.type_name|replace(".", "", 1)|replace(".", "::")}})input.{{field.name}}[i]); + } {%- else %} output->clear_{{field.name|lower}}(); - for(int i = 0; i < input.{{field.name|lower}}.size(); i++) + for(int i = 0; i < input.{{field.name}}.size(); i++) { - output->add_{{field.name|lower}}(input.{{field.name|lower}}[i]); + output->add_{{field.name|lower}}(input.{{field.name}}[i]); } - {% endif -%} - {% else -%} - {%- if field.type == 11 %} + {%- endif -%} + {%- else -%} {# NOT REPEATED #} + {%- if field.type == 11 %} {# MESSAGE #} ToProtoData(input.{{field.name}}, output->mutable_{{field.name}}()); {%- elif field.type == 14 %}{# ENUM #} - {%- set list1 = field.type_name.split('.') -%} {# Cette ligne sert à enlever les namespace dans le nom du type #} output->set_{{field.name}}(({{field.type_name|replace(".", "", 1)|replace(".", "::")}})input.{{field.name}}); {%- elif field.type == 12 %} output->set_{{field.name}}(std::string(input.{{field.name}}.begin(), input.{{field.name}}.end())); @@ -52,26 +54,22 @@ int ToProtoData(kortex_driver::{{detailed_message.message.name}} input, {{detail {%- endif -%} {%- endif -%} {%- endfor -%} - - {% if detailed_message.HasOneOf == "true" %} - - {% for field in detailed_message.message.field %} - {%- if field.HasField("oneof_index") -%} - if(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.size() > 0) + + {% for detailed_one_of in detailed_message.one_of_list -%} + {%- for field in detailed_one_of.fields %} + if(input.oneof_{{detailed_one_of.name}}.{{field.name}}.size() > 0) { - {% if field.type == 11 -%} - ToProtoData(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0], output->mutable_{{field.name}}()); + {%- if field.type == 11 %} + ToProtoData(input.oneof_{{detailed_one_of.name}}.{{field.name}}[0], output->mutable_{{field.name}}()); {%- elif field.type == 14 %} - {%- set list1 = field.type_name.split('.') -%} - output->set_{{field.name}}(({{list1[4]}})input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0]); + output->set_{{field.name}}(({{field.type_name|replace(".", "", 1)|replace(".", "::")}})input.oneof_{{detailed_one_of.name}}.{{field.name}}[0]); {%- else %} - output->set_{{field.name}}(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0]); + output->set_{{field.name|lower}}(input.oneof_{{detailed_one_of.name}}.{{field.name}}[0]); {%- endif %} } - {% endif %} {%- endfor -%} - {% endif %} - + {%- endfor %} + return 0; } {% endfor %} diff --git a/kortex_driver/templates/proto_converter.h.jinja2 b/kortex_driver/templates/proto_converter.h.jinja2 index ec4abc80..ae6ae752 100644 --- a/kortex_driver/templates/proto_converter.h.jinja2 +++ b/kortex_driver/templates/proto_converter.h.jinja2 @@ -1,7 +1,7 @@ /* * KINOVA (R) KORTEX (TM) * -* Copyright (c) 2018 Kinova inc. All rights reserved. +* Copyright (c) 2019 Kinova inc. All rights reserved. * * This software may be modified and distributed under the * terms of the BSD 3-Clause license. @@ -14,8 +14,8 @@ * This file has been auto-generated and should not be modified. */ -#ifndef _KORTEX_{{currentPackageName}}PROTO_CONVERTER_H_ -#define _KORTEX_{{currentPackageName}}PROTO_CONVERTER_H_ +#ifndef _KORTEX_{{package.short_name.upper()}}_PROTO_CONVERTER_H_ +#define _KORTEX_{{package.short_name.upper()}}_PROTO_CONVERTER_H_ #include "ros/ros.h" @@ -25,28 +25,19 @@ #include #include -#include -#include -#include <{{currentFilename}}.pb.h> +#include <{{package.short_name}}.pb.h> -#include -#include +{% for file in include_file_names -%} +{%- if file != current_filename-%} +#include "{{file}}" +{% endif -%} +{%- endfor %} -#include -#include - -#include -#include -#include -#include - -{% for detailed_message in item -%} -#include "kortex_driver/{{detailed_message.message.name}}.h" +{% for detailed_message in package.messages -%} +#include "kortex_driver/{{detailed_message.prepend_message_name}}{{detailed_message.name}}.h" {% endfor %} -using namespace {{currentNamespace}}; - -{% for detailed_message in item -%} -int ToProtoData(kortex_driver::{{detailed_message.message.name}} intput, {{detailed_message.message.name}} *output); +{% for detailed_message in package.messages -%} +int ToProtoData(kortex_driver::{{detailed_message.prepend_message_name}}{{detailed_message.name}} input, {{detailed_message.cpp_namespace}}::{{detailed_message.name}} *output); {% endfor %} #endif \ No newline at end of file diff --git a/kortex_driver/templates/ros_converter.cpp.jinja2 b/kortex_driver/templates/ros_converter.cpp.jinja2 index 80fd8dde..811082ab 100644 --- a/kortex_driver/templates/ros_converter.cpp.jinja2 +++ b/kortex_driver/templates/ros_converter.cpp.jinja2 @@ -1,7 +1,7 @@ /* * KINOVA (R) KORTEX (TM) * -* Copyright (c) 2018 Kinova inc. All rights reserved. +* Copyright (c) 2019 Kinova inc. All rights reserved. * * This software may be modified and distributed under the * terms of the BSD 3-Clause license. @@ -14,24 +14,20 @@ * This file has been auto-generated and should not be modified. */ -#include "{{currentPackageName|lower}}_ros_converter.h" -{% if 'Common' not in currentPackageName %} -#include "common_ros_converter.h" -{% endif %} +#include "{{current_header_filename}}" -{% for detailed_message in item -%} -int ToRosData({{detailed_message.message.name}} input, kortex_driver::{{detailed_message.message.name}} &output) +{% for detailed_message in package.messages -%} +int ToRosData({{detailed_message.cpp_namespace}}::{{detailed_message.name}} input, kortex_driver::{{detailed_message.prepend_message_name}}{{detailed_message.name}} &output) { - {%- for field in detailed_message.message.field %} - {%- if not field.HasField("oneof_index") %} - {%- if field.label == 3 %} {# Si c'est un repeated #} - {% if field.type == 11 %} - {%- set splitTypeName = field.type_name.split('.') -%} - output.{{field.name|lower}}.clear(); + {% for field in detailed_message.message.field -%} + {%- if not field.HasField("oneof_index") -%} + {%- if field.label == 3 -%} {# REPEATED #} + {%- if field.type == 11 %} + output.{{field.name}}.clear(); for(int i = 0; i < input.{{field.name|lower}}_size(); i++) { - kortex_driver::{{splitTypeName[4]}} temp; - ToRosData(input.{{field.name}}(i), temp); + kortex_driver::{{field.type_name.split(".")[-1]}} temp; + ToRosData(input.{{field.name|lower}}(i), temp); output.{{field.name}}.push_back(temp); } {%- else %} @@ -45,7 +41,6 @@ int ToRosData({{detailed_message.message.name}} input, kortex_driver::{{detailed {%- if field.type == 11 %} ToRosData(input.{{field.name}}(), output.{{field.name}}); {%- elif field.type == 14 %} - {%- set list1 = field.type_name.split('.') -%} {# Cette ligne sert à enlever les namespace dans le nom du type #} output.{{field.name}} = input.{{field.name}}(); {%- elif field.type == 12 %} output.{{field.name}} = std::vector(input.{{field.name}}().begin(), input.{{field.name}}().end()); @@ -55,32 +50,30 @@ int ToRosData({{detailed_message.message.name}} input, kortex_driver::{{detailed {%- endif %} {%- endif %} {%- endfor %} - - {% if detailed_message.HasOneOf == "true" %} - auto oneof_type = input.{{detailed_message.message.ListFields()[-1][1][0].name}}_case(); + {% for detailed_one_of in detailed_message.one_of_list %} + auto oneof_type = input.{{detailed_one_of.name}}_case(); switch(oneof_type) { - {%- for field in detailed_message.message.field -%} - {%- if field.HasField("oneof_index") -%} - {%- set splitTypeName = field.type_name.split('.') %} - {%- set EnumName = field.name.replace("_", " ").title().replace(" ", "") %} - case {{detailed_message.message.name}}::k{{EnumName}}: + {%- for field in detailed_one_of.fields %} + {%- if "_" in field.name -%} {%- set EnumName = field.name.replace("_", " ").title().replace(" ", "") -%} {# In case the field is in the form of "gripper_command" #} + {%- else -%} {%- set EnumName = field.name[0]|upper + field.name[1:] -%} {%- endif %} {# In case the field is in the form of "gripperCommand" #} + + case {{detailed_message.cpp_namespace}}::{{detailed_message.message.name}}::k{{EnumName}}: { {%- if field.type == 11 %} - kortex_driver::{{splitTypeName[4]}} temp; + decltype(output.oneof_{{detailed_one_of.name}}.{{field.name}})::value_type temp; ToRosData(input.{{field.name}}(), temp); - output.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.push_back(temp); + output.oneof_{{detailed_one_of.name}}.{{field.name}}.push_back(temp); {%- elif field.type == 14 %} - output.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.push_back(input.{{field.name}}()); + output.oneof_{{detailed_one_of.name}}.{{field.name}}.push_back(input.{{field.name}}()); {% endif %} break; } - {% endif %} - {%- endfor %} + {%- endfor -%} } - {% endif -%} - + {%- endfor %} + return 0; } {% endfor %} diff --git a/kortex_driver/templates/ros_converter.h.jinja2 b/kortex_driver/templates/ros_converter.h.jinja2 index f7162018..f2ddd2a2 100644 --- a/kortex_driver/templates/ros_converter.h.jinja2 +++ b/kortex_driver/templates/ros_converter.h.jinja2 @@ -1,7 +1,7 @@ /* * KINOVA (R) KORTEX (TM) * -* Copyright (c) 2018 Kinova inc. All rights reserved. +* Copyright (c) 2019 Kinova inc. All rights reserved. * * This software may be modified and distributed under the * terms of the BSD 3-Clause license. @@ -14,8 +14,8 @@ * This file has been auto-generated and should not be modified. */ -#ifndef _KORTEX_{{currentPackageName}}ROS_CONVERTER_H_ -#define _KORTEX_{{currentPackageName}}ROS_CONVERTER_H_ +#ifndef _KORTEX_{{package.short_name.upper()}}_ROS_CONVERTER_H_ +#define _KORTEX_{{package.short_name.upper()}}_ROS_CONVERTER_H_ #include "ros/ros.h" @@ -25,28 +25,19 @@ #include #include -#include -#include -#include <{{currentFilename}}.pb.h> +#include <{{package.short_name}}.pb.h> -#include -#include +{% for file in include_file_names -%} +{%- if file != current_filename-%} +#include "{{file}}" +{% endif -%} +{%- endfor %} -#include -#include - -#include -#include -#include -#include - -{% for detailed_message in item -%} -#include "kortex_driver/{{detailed_message.message.name}}.h" +{% for detailed_message in package.messages -%} +#include "kortex_driver/{{detailed_message.prepend_message_name}}{{detailed_message.name}}.h" {% endfor %} -using namespace {{currentNamespace}}; - -{% for detailed_message in item -%} -int ToRosData({{detailed_message.message.name}} input, kortex_driver::{{detailed_message.message.name}} &output); +{% for detailed_message in package.messages -%} +int ToRosData({{detailed_message.cpp_namespace}}::{{detailed_message.name}} input, kortex_driver::{{detailed_message.prepend_message_name}}{{detailed_message.name}} &output); {% endfor %} #endif \ No newline at end of file diff --git a/kortex_driver/templates/ros_enum.jinja2 b/kortex_driver/templates/ros_enum.jinja2 deleted file mode 100644 index 164146fc..00000000 --- a/kortex_driver/templates/ros_enum.jinja2 +++ /dev/null @@ -1,3 +0,0 @@ -{% for member in item.value %} -uint32 {{member.name}} = {{member.number}} -{% endfor %} diff --git a/kortex_driver/templates/ros_enum.msg.jinja2 b/kortex_driver/templates/ros_enum.msg.jinja2 new file mode 100644 index 00000000..d358808b --- /dev/null +++ b/kortex_driver/templates/ros_enum.msg.jinja2 @@ -0,0 +1,3 @@ +{% for member in item.message.value %} +uint32 {{member.name}} = {{member.number}} +{% endfor %} diff --git a/kortex_driver/templates/ros_message.jinja2 b/kortex_driver/templates/ros_message.jinja2 deleted file mode 100644 index 746188b6..00000000 --- a/kortex_driver/templates/ros_message.jinja2 +++ /dev/null @@ -1,44 +0,0 @@ -{%- for member in item.field -%} -{%- if not member.HasField("oneof_index") -%} -{%- if member.type == 9 %} {# TYPE_STRING #} -string{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 12 %} {# TYPE_BYTES #} -uint8[] {{member.name}} -{%- elif member.type == 1 %} {# TYPE_DOUBLE #} -float64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 7 %} {# TYPE_FIXED32 #} -uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 6 %} {# TYPE_FIXED64 #} -uint64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 2 %} {# TYPE_FLOAT #} -float32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 5 %} {# TYPE_INT32 #} -int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 3 %} {# TYPE_INT64 #} -int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 15 %} {# TYPE_SFIXED32 #} -int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 16 %} {# TYPE_SFIXED64 #} -int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 17 %} {# TYPE_SINT32 #} -int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 18 %} {# TYPE_SINT64 #} -int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 13 %} {# TYPE_UINT32 #} -uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 4 %} {# TYPE_UINT64 #} -uint64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 14 -%} {# TYPE_ENUM #} -{% set list1 = member.type_name.split('.') %} -uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 8 %} {# TYPE_BOOL #} -bool {{member.name}} -{%- elif member.type == 11 %}{# TYPE MESSAGE #} -{% set list1 = member.type_name.split('.') %} -{{list1[4]}}{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- endif -%} -{%- endif -%} -{%- endfor -%} -{%- if HasOneOf %} -{{item.name}}_{{item.ListFields()[-1][1][0].name}} oneof_{{item.ListFields()[-1][1][0].name}} -{%- endif -%} \ No newline at end of file diff --git a/kortex_driver/templates/ros_message.msg.jinja2 b/kortex_driver/templates/ros_message.msg.jinja2 new file mode 100644 index 00000000..45270bc7 --- /dev/null +++ b/kortex_driver/templates/ros_message.msg.jinja2 @@ -0,0 +1,47 @@ +{%- for member in item.message.field -%} +{%- if not member.HasField("oneof_index") -%} +{%- if member.type == field_descriptor_class.TYPE_STRING %} +string{%- if member.label == field_descriptor_class.LABEL_REPEATED -%}[]{% endif %} {{member.name}} +{%- elif member.type == field_descriptor_class.TYPE_BYTES %} +uint8[] {{member.name}} +{%- elif member.type == field_descriptor_class.TYPE_DOUBLE %} +float64{%- if member.label == field_descriptor_class.LABEL_REPEATED -%}[]{% endif %} {{member.name}} +{%- elif member.type == field_descriptor_class.TYPE_FIXED32 %} +uint32{%- if member.label == field_descriptor_class.LABEL_REPEATED -%}[]{% endif %} {{member.name}} +{%- elif member.type == field_descriptor_class.TYPE_FIXED64 %} +uint64{%- if member.label == field_descriptor_class.LABEL_REPEATED -%}[]{% endif %} {{member.name}} +{%- elif member.type == field_descriptor_class.TYPE_FLOAT %} +float32{%- if member.label == field_descriptor_class.LABEL_REPEATED -%}[]{% endif %} {{member.name}} +{%- elif member.type == field_descriptor_class.TYPE_INT32 %} +int32{%- if member.label == field_descriptor_class.LABEL_REPEATED -%}[]{% endif %} {{member.name}} +{%- elif member.type == field_descriptor_class.TYPE_INT64 %} +int64{%- if member.label == field_descriptor_class.LABEL_REPEATED -%}[]{% endif %} {{member.name}} +{%- elif member.type == field_descriptor_class.TYPE_SFIXED32 %} +int32{%- if member.label == field_descriptor_class.LABEL_REPEATED -%}[]{% endif %} {{member.name}} +{%- elif member.type == field_descriptor_class.TYPE_SFIXED64 %} +int64{%- if member.label == field_descriptor_class.LABEL_REPEATED -%}[]{% endif %} {{member.name}} +{%- elif member.type == field_descriptor_class.TYPE_SINT32 %} +int32{%- if member.label == field_descriptor_class.LABEL_REPEATED -%}[]{% endif %} {{member.name}} +{%- elif member.type == field_descriptor_class.TYPE_SINT64 %} +int64{%- if member.label == field_descriptor_class.LABEL_REPEATED -%}[]{% endif %} {{member.name}} +{%- elif member.type == field_descriptor_class.TYPE_UINT32 %} +uint32{%- if member.label == field_descriptor_class.LABEL_REPEATED -%}[]{% endif %} {{member.name}} +{%- elif member.type == field_descriptor_class.TYPE_UINT64 %} +uint64{%- if member.label == field_descriptor_class.LABEL_REPEATED -%}[]{% endif %} {{member.name}} +{%- elif member.type == field_descriptor_class.TYPE_ENUM %} +uint32{%- if member.label == field_descriptor_class.LABEL_REPEATED -%}[]{% endif %} {{member.name}} +{%- elif member.type == field_descriptor_class.TYPE_BOOL %} +bool {{member.name}} +{%- elif member.type == field_descriptor_class.TYPE_MESSAGE %} +{% set split_message_type = member.type_name.split('.') -%} +{%- if split_message_type[-1] in item.duplicated_fields -%} +{{split_message_type[-2]}}_{{split_message_type[-1]}}{%- if member.label == field_descriptor_class.LABEL_REPEATED -%}[]{% endif %} {{member.name}} +{%- else -%} +{{split_message_type[-1]}}{%- if member.label == field_descriptor_class.LABEL_REPEATED -%}[]{% endif %} {{member.name}} +{%- endif %} +{%- endif -%} +{%- endif -%} +{%- endfor -%} +{% for one_of in item.one_of_list %} +{{item.prepend_message_name}}{{item.name}}_{{one_of.name}} oneof_{{one_of.name}} +{%- endfor -%} \ No newline at end of file diff --git a/kortex_driver/templates/ros_oneof.jinja2 b/kortex_driver/templates/ros_oneof.jinja2 deleted file mode 100644 index 4fac302a..00000000 --- a/kortex_driver/templates/ros_oneof.jinja2 +++ /dev/null @@ -1,9 +0,0 @@ -{%- for member in item.field -%} -{% if member.HasField("oneof_index") %} -{% if member.type == 11 %} -{% set list1 = member.type_name.split('.') %}{{list1[4]}}[] {{member.name}} -{%- else -%} -uint32[] {{member.name}} -{%- endif -%} -{%- endif -%} -{% endfor %} \ No newline at end of file diff --git a/kortex_driver/templates/ros_oneof.msg.jinja2 b/kortex_driver/templates/ros_oneof.msg.jinja2 new file mode 100644 index 00000000..7569820a --- /dev/null +++ b/kortex_driver/templates/ros_oneof.msg.jinja2 @@ -0,0 +1,12 @@ +{% for field in detailed_one_of.fields %} +{% if field.type == field_descriptor_class.TYPE_MESSAGE %} +{%- set split_message_type = field.type_name.split('.') -%} +{%- if split_message_type[-1] in detailed_one_of.duplicated_fields -%} +{{split_message_type[-2]}}_{{split_message_type[-1]}}[] {{field.name}} +{%- else -%} +{{split_message_type[-1]}}[] {{field.name}} +{%- endif -%} +{%- else -%} +uint32[] {{field.name}} +{%- endif -%} +{% endfor %} \ No newline at end of file diff --git a/kortex_driver/templates/ros_service.jinja2 b/kortex_driver/templates/ros_service.jinja2 deleted file mode 100644 index cc015cf8..00000000 --- a/kortex_driver/templates/ros_service.jinja2 +++ /dev/null @@ -1,5 +0,0 @@ -{% set split_input_type = item.input_type.split('.') %} -{%- set split_output_type = item.output_type.split('.') -%} -{{split_input_type[4]}} input ---- -{{split_output_type[4]}} output \ No newline at end of file diff --git a/kortex_driver/templates/ros_service.srv.jinja2 b/kortex_driver/templates/ros_service.srv.jinja2 new file mode 100644 index 00000000..e6c85e0b --- /dev/null +++ b/kortex_driver/templates/ros_service.srv.jinja2 @@ -0,0 +1,3 @@ +{{item.ros_service_input_name}} input +--- +{{item.ros_service_output_name}} output diff --git a/kortex_driver/templates/services.cpp.jinja2 b/kortex_driver/templates/services.cpp.jinja2 new file mode 100644 index 00000000..79f03317 --- /dev/null +++ b/kortex_driver/templates/services.cpp.jinja2 @@ -0,0 +1,121 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +{% for include_file_name in include_file_names -%} +#include "{{include_file_name}}" +{% endfor -%} +#include "{{current_header_filename}}" + +{{package.short_name}}Services::{{package.short_name}}Services(ros::NodeHandle& n, {{package.cpp_namespace}}::{{package.short_name}}Client* {{package.short_name|lower}}, uint32_t device_id, uint32_t timeout_ms): + m_n(n), + m_{{package.short_name|lower}}({{package.short_name|lower}}), + m_current_device_id(device_id) +{ + m_api_options.timeout_ms = timeout_ms; + + m_pub_Error = m_n.advertise("kortex_error", 1000); +{%- for method in package.methods -%} +{%- if method.is_notification_rpc %} + m_pub_{{method.name}} = m_n.advertise("{{method.name_lowercase_with_underscores}}", 1000); +{%- endif -%} +{%- endfor %} + + m_serviceSetDeviceID = n.advertiseService("{{package.short_name_lowercase_with_underscores}}/set_device_id", &{{package.short_name}}Services::SetDeviceID, this); + m_serviceSetApiOptions = n.advertiseService("{{package.short_name_lowercase_with_underscores}}/set_api_options", &{{package.short_name}}Services::SetApiOptions, this); +{% for method in package.methods %} + m_service{{method.prepend_rpc_package_name}}{{method.prepend_on_notification}}{{method.name}} = m_n.advertiseService("{{package.short_name_lowercase_with_underscores}}/{%- if method.prepend_on_notification -%}activate_publishing_of_{%- endif -%}{{method.name_lowercase_with_underscores}}", &{{package.short_name}}Services::{{method.prepend_rpc_package_name}}{{method.prepend_on_notification}}{{method.name}}, this); +{%- endfor %} +} + +bool {{package.short_name}}Services::SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res) +{ + m_current_device_id = req.device_id; + + return true; +} + +bool {{package.short_name}}Services::SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res) +{ + m_api_options.timeout_ms = req.input.timeout_ms; + + return true; +} + +{% for method in package.methods %} +bool {{package.short_name}}Services::{{method.prepend_rpc_package_name}}{{method.prepend_on_notification}}{{method.name}}(kortex_driver::{{method.prepend_rpc_package_name}}{{method.prepend_on_notification}}{{method.name}}::Request &req, kortex_driver::{{method.prepend_rpc_package_name}}{{method.prepend_on_notification}}{{method.name}}::Response &res) +{ + {%- if not method.input_type_short_name == "Empty" %} + {{method.input_type_cpp_namespace}}::{{method.input_type_short_name}} input; + ToProtoData(req.input, &input); + {%- endif %} + {%- if not method.output_type_short_name == "Empty" %} + {{method.output_type_cpp_namespace}}::{{method.output_type_short_name}} output; + {% endif %} + kortex_driver::KortexError result_error; + + try + { + {%- if not method.output_type_short_name == "Empty" %} + {%- if not method.input_type_short_name == "Empty" %} + {%- if method.is_notification_rpc %} + std::function< void ({{method.notification_message_cpp_namespace}}::{{method.name|replace("Topic", "")}}Notification) > callback = std::bind(&{{package.short_name}}Services::cb_{{method.name}}, this, std::placeholders::_1); + output = m_{{package.short_name|lower}}->{{method.prepend_on_notification}}{{method.name}}(callback, input, m_current_device_id); + {%- else %} + output = m_{{package.short_name|lower}}->{{method.name}}(input, m_current_device_id, m_api_options); + {%- endif %} + {%- else %} + output = m_{{package.short_name|lower}}->{{method.name}}(m_current_device_id, m_api_options); + {%- endif %} + {%- else %} + {%- if not method.input_type_short_name == "Empty" %} + m_{{package.short_name|lower}}->{{method.name}}(input, m_current_device_id, m_api_options); + {%- else %} + m_{{package.short_name|lower}}->{{method.name}}(m_current_device_id, m_api_options); + {%- endif %} + {%- endif %} + } + + catch (Kinova::Api::KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + ROS_INFO("%s", ex2.what()); + return false; + } + {%- if not method.output_type_short_name == "Empty" %} + ToRosData(output, res.output); + {%- endif %} + return true; +} +{%- if method.is_notification_rpc %} +void {{package.short_name}}Services::cb_{{method.name}}({{method.notification_message_cpp_namespace}}::{{method.name|replace("Topic", "")}}Notification notif) +{ + kortex_driver::{{method.name|replace("Topic", "")}}Notification ros_msg; + ToRosData(notif, ros_msg); + m_pub_{{method.name}}.publish(ros_msg); +} +{%- endif %} +{% endfor -%} diff --git a/kortex_driver/templates/services.h.jinja2 b/kortex_driver/templates/services.h.jinja2 new file mode 100644 index 00000000..f36c45c3 --- /dev/null +++ b/kortex_driver/templates/services.h.jinja2 @@ -0,0 +1,81 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2019 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_{{package.short_name|upper}}_SERVICES_H_ +#define _KORTEX_{{package.short_name|upper}}_SERVICES_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include <{{package.short_name}}.pb.h> +#include <{{package.short_name}}ClientRpc.h> + +{%- for method in package.methods %} +#include "kortex_driver/{{method.prepend_rpc_package_name}}{{method.prepend_on_notification}}{{method.name}}.h" +{%- if method.is_notification_rpc %} +#include "kortex_driver/{{method_prepend_rpc_package_name}}{{method.name|replace("Topic", "")}}Notification.h" +{%- endif %} +{%- endfor %} + +#include "kortex_driver/KortexError.h" +#include "kortex_driver/SetDeviceID.h" +#include "kortex_driver/SetApiOptions.h" +#include "kortex_driver/ApiOptions.h" + +using namespace std; + +class {{package.short_name}}Services +{ + public: + {{package.short_name}}Services(ros::NodeHandle& n, {{package.cpp_namespace}}::{{package.short_name}}Client* {{package.short_name|lower}}, uint32_t device_id, uint32_t timeout_ms); + + bool SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res); + bool SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res); +{%- for method in package.methods %} + bool {{method.prepend_rpc_package_name}}{{method.prepend_on_notification}}{{method.name}}(kortex_driver::{{method.prepend_rpc_package_name}}{{method.prepend_on_notification}}{{method.name}}::Request &req, kortex_driver::{{method.prepend_rpc_package_name}}{{method.prepend_on_notification}}{{method.name}}::Response &res); +{%- if method.is_notification_rpc %} + void cb_{{method.name}}({{method.notification_message_cpp_namespace}}::{{method.prepend_rpc_package_name}}{{method.name|replace("Topic", "")}}Notification notif); +{%- endif %} +{%- endfor %} + +private: + uint32_t m_current_device_id; + Kinova::Api::RouterClientSendOptions m_api_options; + + {{package.cpp_namespace}}::{{package.short_name}}Client* m_{{package.short_name|lower}}; + + ros::NodeHandle m_n; + ros::Publisher m_pub_Error; + +{%- for method in package.methods %} +{%- if method.is_notification_rpc %} + ros::Publisher m_pub_{{method.name}}; +{%- endif %} +{%- endfor %} + + ros::ServiceServer m_serviceSetDeviceID; + ros::ServiceServer m_serviceSetApiOptions; +{% for method in package.methods %} + ros::ServiceServer m_service{{method.prepend_rpc_package_name}}{{method.prepend_on_notification}}{{method.name}}; +{%- endfor %} +}; +#endif + diff --git a/kortex_examples/CMakeLists.txt b/kortex_examples/CMakeLists.txt index f439ff67..fce6994a 100644 --- a/kortex_examples/CMakeLists.txt +++ b/kortex_examples/CMakeLists.txt @@ -6,12 +6,11 @@ add_compile_options(-std=c++11) add_definitions(-D_OS_UNIX) ## Find catkin and any catkin packages -find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation kortex_driver kortex_actuator_driver kortex_vision_config_driver kortex_device_manager) - -file(GLOB_RECURSE cpp_list RELATIVE ${PROJECT_SOURCE_DIR} "cpp/*.cpp") +find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation kortex_driver) ## Declare a catkin package catkin_package() +catkin_python_setup() include_directories(include ${catkin_INCLUDE_DIRS}) include_directories(include ${PROJECT_SOURCE_DIR}/src) @@ -19,28 +18,15 @@ include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/client) include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/client_stubs) include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/messages) include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/common) -include_directories(include ${PROJECT_SOURCE_DIR}/src/util) - -add_executable(PlayCartesian cpp/example_play_cartesian.cpp) -add_dependencies(PlayCartesian ${catkin_EXPORTED_TARGETS}) -target_link_libraries(PlayCartesian ${catkin_LIBRARIES} ) - -add_executable(PlayCartesianPosition cpp/example_play_cartesian_position.cpp) -add_dependencies(PlayCartesianPosition ${catkin_EXPORTED_TARGETS}) -target_link_libraries(PlayCartesianPosition ${catkin_LIBRARIES} ) - -add_executable(GetControlLoopParameters cpp/example_get_control_loop_parameters.cpp) -add_dependencies(GetControlLoopParameters ${catkin_EXPORTED_TARGETS}) -target_link_libraries(GetControlLoopParameters ${catkin_LIBRARIES} ) -add_executable(SetControlLoopParameters cpp/example_set_control_loop_parameters.cpp) -add_dependencies(SetControlLoopParameters ${catkin_EXPORTED_TARGETS}) -target_link_libraries(SetControlLoopParameters ${catkin_LIBRARIES} ) +add_executable(example_actuator_configuration_cpp cpp/actuator_config/example_actuator_configuration.cpp) +add_dependencies(example_actuator_configuration_cpp ${catkin_EXPORTED_TARGETS}) +target_link_libraries(example_actuator_configuration_cpp ${catkin_LIBRARIES} ) -add_executable(GetSensorSettings cpp/example_get_sensor_settings.cpp) -add_dependencies(GetSensorSettings ${catkin_EXPORTED_TARGETS}) -target_link_libraries(GetSensorSettings ${catkin_LIBRARIES} ) +add_executable(example_vision_configuration_cpp cpp/vision_config/example_vision_configuration.cpp) +add_dependencies(example_vision_configuration_cpp ${catkin_EXPORTED_TARGETS}) +target_link_libraries(example_vision_configuration_cpp ${catkin_LIBRARIES} ) -add_executable(ReadAllDevices cpp/example_read_all_devices.cpp) -add_dependencies(ReadAllDevices ${catkin_EXPORTED_TARGETS}) -target_link_libraries(ReadAllDevices ${catkin_LIBRARIES} ) +add_executable(example_full_arm_movement_cpp cpp/full_arm/example_full_arm_movement.cpp) +add_dependencies(example_full_arm_movement_cpp ${catkin_EXPORTED_TARGETS}) +target_link_libraries(example_full_arm_movement_cpp ${catkin_LIBRARIES} ) diff --git a/kortex_examples/cpp/actuator_config/example_actuator_configuration.cpp b/kortex_examples/cpp/actuator_config/example_actuator_configuration.cpp new file mode 100644 index 00000000..70d7650d --- /dev/null +++ b/kortex_examples/cpp/actuator_config/example_actuator_configuration.cpp @@ -0,0 +1,209 @@ +/* + * KINOVA (R) KORTEX (TM) + * + * Copyright (c) 2019 Kinova inc. All rights reserved. + * + * This software may be modified and distributed + * under the terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ + +#include "ros/ros.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +std::string control_loop_to_string(uint32_t int_control_loop) +{ + switch (int_control_loop) + { + case kortex_driver::ControlLoopSelection::RESERVED: + return "RESERVED"; + case kortex_driver::ControlLoopSelection::JOINT_POSITION: + return "JOINT POSITION"; + case kortex_driver::ControlLoopSelection::MOTOR_POSITION: + return "MOTOR POSITION"; + case kortex_driver::ControlLoopSelection::JOINT_VELOCITY: + return "JOINT VELOCITY"; + case kortex_driver::ControlLoopSelection::MOTOR_VELOCITY: + return "MOTOR VELOCITY"; + case kortex_driver::ControlLoopSelection::JOINT_TORQUE: + return "JOINT TORQUE"; + case kortex_driver::ControlLoopSelection::MOTOR_CURRENT: + return "MOTOR CURRENT"; + default: + return "UNKNOWN CONTROL LOOP TYPE"; + } +} + +void example_find_actuators_and_set_device_id(ros::NodeHandle& n, const std::string& robot_name, uint32_t device_id) +{ + ros::ServiceClient service_client_read_all_devices = n.serviceClient("/" + robot_name + "/device_manager/read_all_devices"); + kortex_driver::ReadAllDevices service_read_all_devices; + kortex_driver::DeviceTypes device_type; + std::vector device_id_vector; + + std::ostringstream oss; + oss << std::endl; + + if (service_client_read_all_devices.call(service_read_all_devices)) + { + auto output = service_read_all_devices.response.output; + // Cycle through all found devices to find actuators + for(int i = 0; i < output.device_handle.size(); i++) + { + + if((output.device_handle[i].device_type == device_type.BIG_ACTUATOR) || + (output.device_handle[i].device_type == device_type.SMALL_ACTUATOR)) + { + // Add the device_id to the vector if we found an actuator + device_id_vector.push_back(output.device_handle[i].device_identifier); + oss << "Found an actuator with device id " << output.device_handle[i].device_identifier << std::endl; + } + } + } + else + { + std::string error_string = "Failed to call ReadAllDevices"; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + + oss << "----------------------------"; + ROS_INFO("%s", oss.str().c_str()); + oss.clear(); + + // Check if the specified device_id is in the vector + if (std::find(device_id_vector.begin(), device_id_vector.end(), device_id) != device_id_vector.end()) + { + ROS_INFO("Device id %u is a valid actuator device id.", device_id); + } + else + { + std::string error_string = "Device id " + std::to_string(device_id) + " does not correspond to an actuator's device id."; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + + // We need to set the device ID of the actuator we want to configure + ros::ServiceClient service_client_set_device_id = n.serviceClient("/" + robot_name + "/actuator_config/set_device_id"); + kortex_driver::SetDeviceID service_set_device_id; + service_set_device_id.request.device_id = device_id; + if (service_client_set_device_id.call(service_set_device_id)) + { + ROS_INFO("Device ID was properly set."); + } + else + { + std::string error_string = "Failed to call SetDeviceID"; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + +} + +void example_clear_actuator_faults(ros::NodeHandle& n, const std::string& robot_name) +{ + ros::ServiceClient service_client_clear_faults = n.serviceClient("/" + robot_name + "/actuator_config/clear_faults"); + kortex_driver::ActuatorConfig_ClearFaults service_clear_faults; + if (service_client_clear_faults.call(service_clear_faults)) + { + ROS_INFO("Faults were cleared properly."); + } + else + { + std::string error_string = "Failed to call ActuatorConfig_ClearFaults"; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } +} + +kortex_driver::GetControlLoopParameters::Response::_output_type example_get_control_loop_parameters(ros::NodeHandle& n, const std::string& robot_name) +{ + // Get the actuator control loop parameters + ros::ServiceClient service_client_get_control_loop_parameters = n.serviceClient("/" + robot_name + "/actuator_config/get_control_loop_parameters"); + kortex_driver::GetControlLoopParameters service_get_control_loop_parameters; + std::ostringstream oss; + if (service_client_get_control_loop_parameters.call(service_get_control_loop_parameters)) + { + // The msg file can be found at kortex_driver/msg/generated/actuator_config/ControlLoopParameters.msg + kortex_driver::GetControlLoopParametersResponse::_output_type initial_parameters = service_get_control_loop_parameters.response.output; + oss << std::endl << "Control Loop Parameters : " << std::endl; + oss << "Loop selection : " << control_loop_to_string(initial_parameters.loop_selection) << std::endl; + oss << "Error saturation : " << initial_parameters.error_saturation << std::endl; + oss << "Output saturation : " << initial_parameters.output_saturation << std::endl; + oss << "kAz : ["; + for (auto element : initial_parameters.kAz) + oss << element << "; "; + oss << "]" << std::endl; + oss << "kBz : ["; + for (auto element : initial_parameters.kBz) + oss << element << "; "; + oss << "]" << std::endl; + oss << "Error dead band : " << initial_parameters.error_dead_band << std::endl; + ROS_INFO("%s", oss.str().c_str()); + return initial_parameters; + } + else + { + std::string error_string = "Failed to call GetControlLoopParameters"; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } +} + +int main(int argc, char **argv) +{ + // Init the node and get the namespace parameter + ros::init(argc, argv, "actuator_configuration_example_cpp"); + + ros::NodeHandle n; + std::string robot_name = "my_gen3"; + int device_id = 1; + + // Parameter robot_name + if (!ros::param::get("~robot_name", robot_name)) + { + std::string error_string = "Parameter robot_name was not specified, defaulting to " + robot_name + " as namespace"; + ROS_WARN("%s", error_string.c_str()); + } + else + { + std::string error_string = "Using robot_name " + robot_name + " as namespace"; + ROS_INFO("%s", error_string.c_str()); + } + + // Parameter device_id + if (!ros::param::get("~device_id", device_id)) + { + std::string error_string = "Parameter device_id was not specified, defaulting to " + std::to_string(device_id); + ROS_WARN("%s", error_string.c_str()); + } + else + { + std::string error_string = "Using device_id " + std::to_string(device_id); + ROS_INFO("%s", error_string.c_str()); + } + + //------------------------------------------------------------- + // Find actuators and set which one we want to configure + example_find_actuators_and_set_device_id(n, robot_name, device_id); + + //------------------------------------------------------------- + // Clear the faults on a specific actuator + example_clear_actuator_faults(n, robot_name); + + //------------------------------------------------------------- + // Get the control loop parameters on a specific actuator + auto control_loop_parameters = example_get_control_loop_parameters(n, robot_name); + + return 0; +} \ No newline at end of file diff --git a/kortex_examples/cpp/example_get_control_loop_parameters.cpp b/kortex_examples/cpp/example_get_control_loop_parameters.cpp deleted file mode 100644 index 8cc87c04..00000000 --- a/kortex_examples/cpp/example_get_control_loop_parameters.cpp +++ /dev/null @@ -1,85 +0,0 @@ -#include "ros/ros.h" -#include -#include -#include "kortex_actuator_driver/SetDeviceID.h" -#include "kortex_device_manager/DeviceTypes.h" -#include "kortex_device_manager/ReadAllDevices.h" - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "Actuator_GetControlLoopParameters"); - - ros::NodeHandle n; - - ros::ServiceClient service_GetControlLoopParameters = n.serviceClient("GetControlLoopParameters"); - ros::ServiceClient service_SetDeviceID = n.serviceClient("SetDeviceID"); - ros::ServiceClient service_ReadAllDevices = n.serviceClient("ReadAllDevices"); - - kortex_actuator_driver::GetControlLoopParameters srvGetControlLoopParameters; - kortex_actuator_driver::SetDeviceID srvSetDeviceID; - kortex_device_manager::ReadAllDevices srvReadAllDevices; - - kortex_actuator_driver::ControlLoopSelection loopSelection; - kortex_device_manager::DeviceTypes device_type; - - srvGetControlLoopParameters.request.input.loop_selection = loopSelection.MOTOR_VELOCITY; - - bool actuatorFound = false; - uint32_t actuator_id = 0; - - if (service_ReadAllDevices.call(srvReadAllDevices)) - { - - for(int i = 0; i < srvReadAllDevices.response.output.device_handle.size(); i++) - { - if((srvReadAllDevices.response.output.device_handle[i].device_type == device_type.BIG_ACTUATOR) || - (srvReadAllDevices.response.output.device_handle[i].device_type == device_type.SMALL_ACTUATOR)) - { - - actuator_id = srvReadAllDevices.response.output.device_handle[i].device_identifier; - actuatorFound = true; - srvSetDeviceID.request.device_id = actuator_id; - - if (!service_SetDeviceID.call(srvSetDeviceID)) - { - ROS_ERROR("Failed to call SetDeviceID"); - } - - break; - } - } - } - else - { - ROS_ERROR("Failed to call ReadAllDevices"); - return 1; - } - - if(actuatorFound) - { - ROS_INFO("Found 1 actuator.\n"); - - if (service_GetControlLoopParameters.call(srvGetControlLoopParameters)) - { - ROS_INFO("loop_selection: %d", srvGetControlLoopParameters.response.output.loop_selection); - ROS_INFO("error_saturation: %f", srvGetControlLoopParameters.response.output.error_saturation); - ROS_INFO("output_saturation: %f", srvGetControlLoopParameters.response.output.output_saturation); - - for(int i = 0; i < srvGetControlLoopParameters.response.output.kAz.size(); i++) - { - ROS_INFO("kAz[%d]: %f", i, srvGetControlLoopParameters.response.output.kAz[i]); - } - for(int i = 0; i < srvGetControlLoopParameters.response.output.kBz.size(); i++) - { - ROS_INFO("kBz[%d]: %f", i, srvGetControlLoopParameters.response.output.kBz[i]); - } - } - else - { - ROS_ERROR("Failed to call GetControlLoopParameters"); - return 1; - } - } - - return 0; -} \ No newline at end of file diff --git a/kortex_examples/cpp/example_get_sensor_settings.cpp b/kortex_examples/cpp/example_get_sensor_settings.cpp deleted file mode 100644 index 022b4d04..00000000 --- a/kortex_examples/cpp/example_get_sensor_settings.cpp +++ /dev/null @@ -1,92 +0,0 @@ -/* - * KINOVA (R) KORTEX (TM) - * - * Copyright (c) 2018 Kinova inc. All rights reserved. - * - * This software may be modified and distributed - * under the terms of the BSD 3-Clause license. - * - * Refer to the LICENSE file for details. - * - */ - -#include "ros/ros.h" -#include "kortex_vision_config_driver/GetSensorSettings.h" -#include "kortex_vision_config_driver/Sensor.h" -#include "kortex_vision_config_driver/SetDeviceID.h" -#include "kortex_device_manager/DeviceTypes.h" -#include "kortex_device_manager/ReadAllDevices.h" -#include -#include - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "VisionConfig_GetSensorSettings"); - - ros::NodeHandle n; - - ros::ServiceClient service_GetSensorSettings = n.serviceClient("GetSensorSettings"); - ros::ServiceClient service_SetDeviceID = n.serviceClient("SetDeviceID"); - ros::ServiceClient service_ReadAllDevices = n.serviceClient("ReadAllDevices"); - - kortex_vision_config_driver::GetSensorSettings srvGetSensorSettings; - kortex_vision_config_driver::SetDeviceID srvSetDeviceID; - kortex_device_manager::ReadAllDevices srvReadAllDevices; - - kortex_vision_config_driver::Sensor sensor_type; - kortex_device_manager::DeviceTypes device_type; - - srvGetSensorSettings.request.input.sensor = sensor_type.SENSOR_COLOR; - - bool visionFound = false; - uint32_t vision_id = 0; - - if (service_ReadAllDevices.call(srvReadAllDevices)) - { - - for(int i = 0; i < srvReadAllDevices.response.output.device_handle.size(); i++) - { - if(srvReadAllDevices.response.output.device_handle[i].device_type == device_type.VISION) - { - - vision_id = srvReadAllDevices.response.output.device_handle[i].device_identifier; - visionFound = true; - srvSetDeviceID.request.device_id = vision_id; - - if (!service_SetDeviceID.call(srvSetDeviceID)) - { - ROS_ERROR("Failed to call SetDeviceID"); - } - } - } - } - else - { - ROS_ERROR("Failed to call ReadAllDevices"); - return 1; - } - - if(visionFound) - { - ROS_INFO("Found 1 vision module.\n"); - - if (service_GetSensorSettings.call(srvGetSensorSettings)) - { - ROS_INFO("sensor: %d", srvGetSensorSettings.response.output.sensor); - ROS_INFO("resolution: %d", srvGetSensorSettings.response.output.resolution); - ROS_INFO("frame_rate: %d", srvGetSensorSettings.response.output.frame_rate); - ROS_INFO("bit_rate: %d", srvGetSensorSettings.response.output.bit_rate); - } - else - { - ROS_ERROR("Failed to call GetSensorSettings"); - return 1; - } - } - else - { - ROS_INFO("Could not find any vision module on the target robot."); - } - - return 0; -} \ No newline at end of file diff --git a/kortex_examples/cpp/example_play_cartesian.cpp b/kortex_examples/cpp/example_play_cartesian.cpp deleted file mode 100644 index 6d0fd53a..00000000 --- a/kortex_examples/cpp/example_play_cartesian.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* - * KINOVA (R) KORTEX (TM) - * - * Copyright (c) 2018 Kinova inc. All rights reserved. - * - * This software may be modified and distributed - * under the terms of the BSD 3-Clause license. - * - * Refer to the LICENSE file for details. - * - */ - -#include "ros/ros.h" -#include -#include -#include - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "Sequence"); - - ros::NodeHandle n; - - ros::ServiceClient client_PlayCartesianTrajectory = n.serviceClient("PlayCartesianTrajectory"); - ros::ServiceClient client_RefreshFeedback = n.serviceClient("RefreshFeedback"); - - kortex_driver::PlayCartesianTrajectory srvPlayCartesianTrajectory; - kortex_driver::RefreshFeedback srvRefreshFeedback; - - float current_x = 0.0f; - float current_y = 0.0f; - float current_z = 0.0f; - - float current_theta_x = 0.0f; - float current_theta_y = 0.0f; - float current_theta_z = 0.0f; - - if (client_RefreshFeedback.call(srvRefreshFeedback)) - { - current_x = srvRefreshFeedback.response.output.base.tool_pose_x; - current_y = srvRefreshFeedback.response.output.base.tool_pose_y; - current_z = srvRefreshFeedback.response.output.base.tool_pose_z; - - current_theta_x = srvRefreshFeedback.response.output.base.tool_pose_theta_x; - current_theta_y = srvRefreshFeedback.response.output.base.tool_pose_theta_y; - current_theta_z = srvRefreshFeedback.response.output.base.tool_pose_theta_z; - - ROS_INFO("Getting cyclic data from the robot - x= %f y= %f z= %f theta x = %f theta y = %f theta z = %f", - current_x, current_y, current_z, current_theta_x, current_theta_y, current_theta_z); - } - else - { - ROS_ERROR("Failed to retrieve the cyclic data."); - return 1; - } - - //Creating our next target (a Cartesian pose) - srvPlayCartesianTrajectory.request.input.target_pose.x = current_x; - srvPlayCartesianTrajectory.request.input.target_pose.y = current_y; - srvPlayCartesianTrajectory.request.input.target_pose.z = current_z + 0.1; - - srvPlayCartesianTrajectory.request.input.target_pose.theta_x = current_theta_x; - srvPlayCartesianTrajectory.request.input.target_pose.theta_y = current_theta_y; - srvPlayCartesianTrajectory.request.input.target_pose.theta_z = current_theta_z; - - kortex_driver::CartesianSpeed poseSpeed; - poseSpeed.translation = 0.1; - poseSpeed.orientation = 15; - - srvPlayCartesianTrajectory.request.input.constraint.oneof_type.speed.push_back(poseSpeed); - - ROS_INFO("CALL PlayCartesianTrajectory"); - if (client_PlayCartesianTrajectory.call(srvPlayCartesianTrajectory)) - { - ROS_INFO("pose sent"); - } - else - { - ROS_ERROR("Failed to call PlayCartesianTrajectory"); - return 1; - } - - return 0; -} \ No newline at end of file diff --git a/kortex_examples/cpp/example_play_cartesian_position.cpp b/kortex_examples/cpp/example_play_cartesian_position.cpp deleted file mode 100644 index 7902c7b6..00000000 --- a/kortex_examples/cpp/example_play_cartesian_position.cpp +++ /dev/null @@ -1,71 +0,0 @@ -/* - * KINOVA (R) KORTEX (TM) - * - * Copyright (c) 2018 Kinova inc. All rights reserved. - * - * This software may be modified and distributed - * under the terms of the BSD 3-Clause license. - * - * Refer to the LICENSE file for details. - * - */ - -#include "ros/ros.h" -#include -#include -#include - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "example_play_cartesian_position"); - - ros::NodeHandle n; - - ros::ServiceClient client_PlayCartesianTrajectoryPosition = n.serviceClient("PlayCartesianTrajectoryPosition"); - ros::ServiceClient client_RefreshFeedback = n.serviceClient("RefreshFeedback"); - - kortex_driver::PlayCartesianTrajectoryPosition srvPlayCartesianTrajectoryPosition; - kortex_driver::RefreshFeedback srvRefreshFeedback; - - float current_x = 0.0f; - float current_y = 0.0f; - float current_z = 0.0f; - - if (client_RefreshFeedback.call(srvRefreshFeedback)) - { - current_x = srvRefreshFeedback.response.output.base.tool_pose_x; - current_y = srvRefreshFeedback.response.output.base.tool_pose_y; - current_z = srvRefreshFeedback.response.output.base.tool_pose_z; - ROS_INFO("Getting cyclic data from the robot - x= %f y= %f z= %f", current_x, current_y, current_z); - } - else - { - ROS_ERROR("Failed to retrieve the cyclic data."); - return 1; - } - - - - //Creating our next target (a Cartesian pose) - srvPlayCartesianTrajectoryPosition.request.input.target_position.x = current_x; - srvPlayCartesianTrajectoryPosition.request.input.target_position.y = current_y; - srvPlayCartesianTrajectoryPosition.request.input.target_position.z = current_z + 0.1; - - kortex_driver::CartesianSpeed poseSpeed; - poseSpeed.translation = 0.1; - - srvPlayCartesianTrajectoryPosition.request.input.constraint.oneof_type.speed.push_back(poseSpeed); - - ROS_INFO("CALL PlayCartesianTrajectory"); - if (client_PlayCartesianTrajectoryPosition.call(srvPlayCartesianTrajectoryPosition)) - { - ROS_INFO("pose sent"); - } - else - { - ROS_ERROR("Failed to call PlayCartesianTrajectoryPosition"); - return 1; - } - - return 0; -} \ No newline at end of file diff --git a/kortex_examples/cpp/example_read_all_devices.cpp b/kortex_examples/cpp/example_read_all_devices.cpp deleted file mode 100644 index b4a262da..00000000 --- a/kortex_examples/cpp/example_read_all_devices.cpp +++ /dev/null @@ -1,46 +0,0 @@ -/* - * KINOVA (R) KORTEX (TM) - * - * Copyright (c) 2018 Kinova inc. All rights reserved. - * - * This software may be modified and distributed - * under the terms of the BSD 3-Clause license. - * - * Refer to the LICENSE file for details. - * - */ - -#include "ros/ros.h" -#include "kortex_device_manager/ReadAllDevices.h" -#include -#include - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "Example_DeviceManager_ReadAllDevices"); - - ros::NodeHandle n; - - ros::ServiceClient service_ReadAllDevices = n.serviceClient("ReadAllDevices"); - - kortex_device_manager::ReadAllDevices srvReadAllDevices; - - ROS_INFO("CALL ReadAllDevices"); - - if (service_ReadAllDevices.call(srvReadAllDevices)) - { - for(int i = 0; i < srvReadAllDevices.response.output.device_handle.size(); i++) - { - ROS_INFO("device_type: %d", srvReadAllDevices.response.output.device_handle[i].device_type); - ROS_INFO("device_identifier: %d", srvReadAllDevices.response.output.device_handle[i].device_identifier); - ROS_INFO("order: %d", srvReadAllDevices.response.output.device_handle[i].order); - } - } - else - { - ROS_ERROR("Failed to call ReadAllDevices"); - return 1; - } - - return 0; -} \ No newline at end of file diff --git a/kortex_examples/cpp/example_set_control_loop_parameters.cpp b/kortex_examples/cpp/example_set_control_loop_parameters.cpp deleted file mode 100644 index 93223e31..00000000 --- a/kortex_examples/cpp/example_set_control_loop_parameters.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* - * KINOVA (R) KORTEX (TM) - * - * Copyright (c) 2018 Kinova inc. All rights reserved. - * - * This software may be modified and distributed - * under the terms of the BSD 3-Clause license. - * - * Refer to the LICENSE file for details. - * - */ - -#include "ros/ros.h" -#include "kortex_actuator_driver/SetControlLoopParameters.h" -#include "kortex_actuator_driver/ControlLoopSelection.h" -#include "kortex_actuator_driver/SetDeviceID.h" -#include "kortex_device_manager/DeviceTypes.h" -#include "kortex_device_manager/ReadAllDevices.h" - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "Example_Actuator_SetControlLoopParameters"); - - ros::NodeHandle n; - - ros::ServiceClient service_SetControlLoopParameters = n.serviceClient("SetControlLoopParameters"); - ros::ServiceClient service_SetDeviceID = n.serviceClient("SetDeviceID"); - ros::ServiceClient service_ReadAllDevices = n.serviceClient("ReadAllDevices"); - - - kortex_actuator_driver::SetControlLoopParameters srvSetControlLoopParameters; - kortex_actuator_driver::ControlLoopSelection loopSelection; - kortex_actuator_driver::SetDeviceID srvSetDeviceID; - kortex_device_manager::ReadAllDevices srvReadAllDevices; - - srvSetControlLoopParameters.request.input.loop_selection = loopSelection.MOTOR_VELOCITY; - kortex_device_manager::DeviceTypes device_type; - - bool actuatorFound = false; - uint32_t actuator_id = 0; - - if (service_ReadAllDevices.call(srvReadAllDevices)) - { - - for(int i = 0; i < srvReadAllDevices.response.output.device_handle.size(); i++) - { - if((srvReadAllDevices.response.output.device_handle[i].device_type == device_type.BIG_ACTUATOR) || - (srvReadAllDevices.response.output.device_handle[i].device_type == device_type.SMALL_ACTUATOR)) - { - - actuator_id = srvReadAllDevices.response.output.device_handle[i].device_identifier; - actuatorFound = true; - srvSetDeviceID.request.device_id = actuator_id; - - if (!service_SetDeviceID.call(srvSetDeviceID)) - { - ROS_ERROR("Failed to call SetDeviceID"); - } - - break; - } - } - } - else - { - ROS_ERROR("Failed to call ReadAllDevices"); - return 1; - } - - if(actuatorFound) - { - if (service_SetControlLoopParameters.call(srvSetControlLoopParameters)) - { - ROS_INFO("ControlLoopParameters sent with success"); - } - else - { - ROS_ERROR("Failed to call SetControlLoopParameters"); - return 1; - } - } - - return 0; -} \ No newline at end of file diff --git a/kortex_examples/cpp/full_arm/example_full_arm_movement.cpp b/kortex_examples/cpp/full_arm/example_full_arm_movement.cpp new file mode 100644 index 00000000..bbd16930 --- /dev/null +++ b/kortex_examples/cpp/full_arm/example_full_arm_movement.cpp @@ -0,0 +1,298 @@ +/* + * KINOVA (R) KORTEX (TM) + * + * Copyright (c) 2019 Kinova inc. All rights reserved. + * + * This software may be modified and distributed + * under the terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ +#include + +#include "ros/ros.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define HOME_ACTION_IDENTIFIER 2 + +void example_clear_faults(ros::NodeHandle n, std::string robot_name) +{ + ros::ServiceClient service_client_clear_faults = n.serviceClient("/" + robot_name + "/base/clear_faults"); + kortex_driver::Base_ClearFaults service_clear_faults; + + // Clear the faults + if (!service_client_clear_faults.call(service_clear_faults)) + { + std::string error_string = "Failed to clear the faults"; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + + // Wait a bit + std::this_thread::sleep_for(std::chrono::milliseconds(500)); +} + +void example_home_the_robot(ros::NodeHandle n, std::string robot_name) +{ + ros::ServiceClient service_client_read_action = n.serviceClient("/" + robot_name + "/base/read_action"); + kortex_driver::ReadAction service_read_action; + + // The Home Action is used to home the robot. It cannot be deleted and is always ID #2: + service_read_action.request.input.identifier = HOME_ACTION_IDENTIFIER; + + if (!service_client_read_action.call(service_read_action)) + { + std::string error_string = "Failed to call ReadAction"; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + + // We can now execute the Action that we read + ros::ServiceClient service_client_execute_action = n.serviceClient("/" + robot_name + "/base/execute_action"); + kortex_driver::ExecuteAction service_execute_action; + + service_execute_action.request.input = service_read_action.response.output; + + if (service_client_execute_action.call(service_execute_action)) + { + ROS_INFO("The Home position action was sent to the robot."); + } + else + { + std::string error_string = "Failed to call ExecuteAction"; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } +} + +void example_set_cartesian_reference_frame(ros::NodeHandle n, std::string robot_name) +{ + // Initialize the ServiceClient + ros::ServiceClient service_client_set_cartesian_reference_frame = n.serviceClient("/" + robot_name + "/control_config/set_cartesian_reference_frame"); + kortex_driver::SetCartesianReferenceFrame service_set_cartesian_reference_frame; + + service_set_cartesian_reference_frame.request.input.reference_frame = kortex_driver::CartesianReferenceFrame::CARTESIAN_REFERENCE_FRAME_MIXED; + if (!service_client_set_cartesian_reference_frame.call(service_set_cartesian_reference_frame)) + { + std::string error_string = "Failed to call SetCartesianReferenceFrame"; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + + // Wait a bit + std::this_thread::sleep_for(std::chrono::milliseconds(250)); +} + +void example_send_cartesian_pose(ros::NodeHandle n, std::string robot_name) +{ + // Get the actual cartesian pose to increment it + // You can create a subscriber to listen to the base_feedback + // Here we only need the latest message in the topic though + auto feedback = ros::topic::waitForMessage("/" + robot_name + "/base_feedback"); + + // Initialize the ServiceClient for the cartesian pose + ros::ServiceClient service_client_play_cartesian_trajectory = n.serviceClient("/" + robot_name + "/base/play_cartesian_trajectory"); + kortex_driver::PlayCartesianTrajectory service_play_cartesian_trajectory; + + // Initialize input + float current_x = feedback->base.commanded_tool_pose_x; + float current_y = feedback->base.commanded_tool_pose_y; + float current_z = feedback->base.commanded_tool_pose_z; + float current_theta_x = feedback->base.commanded_tool_pose_theta_x; + float current_theta_y = feedback->base.commanded_tool_pose_theta_y; + float current_theta_z = feedback->base.commanded_tool_pose_theta_z; + + // Creating the target pose + service_play_cartesian_trajectory.request.input.target_pose.x = current_x; + service_play_cartesian_trajectory.request.input.target_pose.y = current_y; + service_play_cartesian_trajectory.request.input.target_pose.z = current_z + 0.15; + service_play_cartesian_trajectory.request.input.target_pose.theta_x = current_theta_x; + service_play_cartesian_trajectory.request.input.target_pose.theta_y = current_theta_y; + service_play_cartesian_trajectory.request.input.target_pose.theta_z = current_theta_z + 35; + + kortex_driver::CartesianSpeed poseSpeed; + poseSpeed.translation = 0.1; + poseSpeed.orientation = 15; + + // The constraint is a one_of in Protobuf. The one_of concept does not exist in ROS + // To specify a one_of, create it and put it in the appropriate vector of the oneof_type member of the ROS object : + service_play_cartesian_trajectory.request.input.constraint.oneof_type.speed.push_back(poseSpeed); + + if (service_client_play_cartesian_trajectory.call(service_play_cartesian_trajectory)) + { + ROS_INFO("The new cartesian pose was sent to the robot."); + } + else + { + std::string error_string = "Failed to call PlayCartesianTrajectory"; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } +} + +void example_send_joint_angles(ros::NodeHandle n, std::string robot_name, int degrees_of_freedom) +{ + // Initialize the ServiceClient + ros::ServiceClient service_client_play_joint_trajectory = n.serviceClient("/" + robot_name + "/base/play_joint_trajectory"); + kortex_driver::PlayJointTrajectory service_play_joint_trajectory; + + std::vector angles_to_send; + for (unsigned int i = 0; i < degrees_of_freedom; i++) + { + angles_to_send.push_back(0.0); + } + + for (int i = 0; i < degrees_of_freedom; i++) + { + kortex_driver::JointAngle temp_angle; + temp_angle.joint_identifier = i; + temp_angle.value = angles_to_send[i]; + service_play_joint_trajectory.request.input.joint_angles.joint_angles.push_back(temp_angle); + } + + if (service_client_play_joint_trajectory.call(service_play_joint_trajectory)) + { + ROS_INFO("The joint angles were sent to the robot."); + } + else + { + std::string error_string = "Failed to call PlayJointTrajectory"; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } +} + +void example_send_gripper_command(ros::NodeHandle n, std::string robot_name, double value) +{ + // Initialize the ServiceClient + ros::ServiceClient service_client_send_gripper_command = n.serviceClient("/" + robot_name + "/base/send_gripper_command"); + kortex_driver::SendGripperCommand service_send_gripper_command; + + // Initialize the request + kortex_driver::Finger finger; + finger.finger_identifier = 0; + finger.value = value; + service_send_gripper_command.request.input.gripper.finger.push_back(finger); + service_send_gripper_command.request.input.mode = kortex_driver::GripperMode::GRIPPER_POSITION; + + if (service_client_send_gripper_command.call(service_send_gripper_command)) + { + ROS_INFO("The gripper command was sent to the robot."); + } + else + { + std::string error_string = "Failed to call SendGripperCommand"; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } +} + +int main(int argc, char **argv) +{ + ros::init(argc, argv, "full_arm_movement_example_cpp"); + + //******************************************************************************* + // ROS Parameters + ros::NodeHandle n; + std::string robot_name = "my_gen3"; + int degrees_of_freedom = 7; + bool is_gripper_present = false; + + // Parameter robot_name + if (!ros::param::get("~robot_name", robot_name)) + { + std::string error_string = "Parameter robot_name was not specified, defaulting to " + robot_name + " as namespace"; + ROS_WARN("%s", error_string.c_str()); + } + else + { + std::string error_string = "Using robot_name " + robot_name + " as namespace"; + ROS_INFO("%s", error_string.c_str()); + } + + // Parameter degrees_of_freedom + if (!ros::param::get("/" + robot_name + "/degrees_of_freedom", degrees_of_freedom)) + { + std::string error_string = "Parameter /" + robot_name + "/degrees_of_freedom was not specified, defaulting to " + std::to_string(degrees_of_freedom) + " as degrees of freedom"; + ROS_WARN("%s", error_string.c_str()); + } + else + { + std::string error_string = "Using degrees_of_freedom " + std::to_string(degrees_of_freedom) + " as degrees_of_freedom"; + ROS_INFO("%s", error_string.c_str()); + } + + // Parameter is_gripper_present + if (!ros::param::get("/" + robot_name + "/is_gripper_present", is_gripper_present)) + { + std::string error_string = "Parameter /" + robot_name + "/is_gripper_present was not specified, defaulting to " + std::to_string(is_gripper_present); + ROS_WARN("%s", error_string.c_str()); + } + else + { + std::string error_string = "Using is_gripper_present " + std::to_string(is_gripper_present); + ROS_INFO("%s", error_string.c_str()); + } + //******************************************************************************* + + //******************************************************************************* + // Make sure to clear the robot's faults else it won't move if it's already in fault + example_clear_faults(n, robot_name); + //******************************************************************************* + + //******************************************************************************* + // Move the robot to the Home position with an Action + example_home_the_robot(n, robot_name); + std::this_thread::sleep_for(std::chrono::milliseconds(10000)); + //******************************************************************************* + + //******************************************************************************* + // Example of gripper command + // Let's close the gripper + if (is_gripper_present) + { + example_send_gripper_command(n, robot_name, 0.0); + std::this_thread::sleep_for(std::chrono::milliseconds(2000)); + } + //******************************************************************************* + + //******************************************************************************* + // Set the reference frame to "Mixed" + example_set_cartesian_reference_frame(n, robot_name); + + // Example of cartesian pose + // Let's make it move in Z + example_send_cartesian_pose(n, robot_name); + std::this_thread::sleep_for(std::chrono::milliseconds(10000)); + //******************************************************************************* + + //******************************************************************************* + // Example of angular position + // Let's send the arm to vertical position + example_send_joint_angles(n, robot_name, degrees_of_freedom); + std::this_thread::sleep_for(std::chrono::milliseconds(10000)); + //******************************************************************************* + + //******************************************************************************* + // Example of gripper command + // Let's close the gripper + if (is_gripper_present) + { + example_send_gripper_command(n, robot_name, 0.5); + std::this_thread::sleep_for(std::chrono::milliseconds(2000)); + } + //******************************************************************************* + + return 0; +} \ No newline at end of file diff --git a/kortex_examples/cpp/vision_config/example_vision_configuration.cpp b/kortex_examples/cpp/vision_config/example_vision_configuration.cpp new file mode 100644 index 00000000..5826f816 --- /dev/null +++ b/kortex_examples/cpp/vision_config/example_vision_configuration.cpp @@ -0,0 +1,345 @@ +/* + * KINOVA (R) KORTEX (TM) + * + * Copyright (c) 2019 Kinova inc. All rights reserved. + * + * This software may be modified and distributed + * under the terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ + +#include "ros/ros.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +std::string sensor_type_enum_to_string(uint32_t enum_value) +{ + std::string s = ""; + switch (enum_value) + { + case kortex_driver::Sensor::SENSOR_COLOR: + s = "Color"; + break; + + case kortex_driver::Sensor::SENSOR_DEPTH: + s = "Depth"; + break; + + default: + case kortex_driver::Sensor::SENSOR_UNSPECIFIED: + s = "Unspecified"; + break; + } + return s; +} + +std::string resolution_enum_to_string(uint32_t enum_value) +{ + std::string s = ""; + switch (enum_value) + { + case kortex_driver::Resolution::RESOLUTION_320x240: + s = "320 x 240"; + break; + case kortex_driver::Resolution::RESOLUTION_424x240: + s = "424 x 240"; + break; + case kortex_driver::Resolution::RESOLUTION_480x270: + s = "480 x 270"; + break; + case kortex_driver::Resolution::RESOLUTION_640x480: + s = "640 x 480"; + break; + case kortex_driver::Resolution::RESOLUTION_1280x720: + s = "1280 x 720"; + break; + case kortex_driver::Resolution::RESOLUTION_1920x1080: + s = "1920 x 1080"; + break; + default: + case kortex_driver::Resolution::RESOLUTION_UNSPECIFIED: + s = "Unspecified"; + break; + } + return s; +} + +std::string framerate_enum_to_string(uint32_t enum_value) +{ + std::string s = ""; + switch (enum_value) + { + case kortex_driver::FrameRate::FRAMERATE_6_FPS: + s = "6 FPS"; + break; + case kortex_driver::FrameRate::FRAMERATE_15_FPS: + s = "15 FPS"; + break; + case kortex_driver::FrameRate::FRAMERATE_30_FPS: + s = "30 FPS"; + break; + default: + case kortex_driver::FrameRate::FRAMERATE_UNSPECIFIED: + s = "Unspecified"; + break; + } + return s; +} + +std::string bitrate_enum_to_string(uint32_t enum_value) +{ + std::string s = ""; + switch (enum_value) + { + case kortex_driver::BitRate::BITRATE_10_MBPS: + s = "10 MBPS"; + break; + case kortex_driver::BitRate::BITRATE_15_MBPS: + s = "15 MBPS"; + break; + case kortex_driver::BitRate::BITRATE_20_MBPS: + s = "20 MBPS"; + break; + case kortex_driver::BitRate::BITRATE_25_MBPS: + s = "25 MBPS"; + break; + default: + case kortex_driver::BitRate::BITRATE_UNSPECIFIED: + s = "Unspecified"; + break; + } + return s; +} + +void example_get_intrinsic_parameters(ros::NodeHandle n, const std::string& robot_name) +{ + ros::ServiceClient service_client_get_intrinsic_parameters = n.serviceClient("/" + robot_name + "/vision_config/get_intrinsic_parameters"); + kortex_driver::GetIntrinsicParameters service_get_intrinsic_parameters; + + // Get the parameters from the color sensor + kortex_driver::GetIntrinsicParametersRequest req; + req.input.sensor = kortex_driver::Sensor::SENSOR_COLOR; // Change to SENSOR_DEPTH for the depth sensor + service_get_intrinsic_parameters.request = req; + + if (!service_client_get_intrinsic_parameters.call(service_get_intrinsic_parameters)) + { + std::string error_string = "Failed to call GetIntrinsicParameters"; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + auto output = service_get_intrinsic_parameters.response.output; + // The message description can be seen at msg/generated/vision_config/IntrinsicParameters.msg + std::ostringstream oss; + oss << std::endl << "---------------------------------" << std::endl + << "Intrinsic parameters are : " << std::endl + << "Focal length in x is : " << output.focal_length_x << std::endl + << "Focal length in y is : " << output.focal_length_y << std::endl + << "Principal point in x is : " << output.principal_point_x << std::endl + << "Principal point in y is : " << output.principal_point_y << std::endl + << "Distortion coefficients are : [" << + "k1 = " << output.distortion_coeffs.k1 << "; " << + "k2 = " << output.distortion_coeffs.k2 << "; " << + "k3 = " << output.distortion_coeffs.k3 << "; " << + "p1 = " << output.distortion_coeffs.p1 << "; " << + "p2 = " << output.distortion_coeffs.p2 << "]" << std::endl; + + // The Sensor enum can be seen at msg/generated/vision_config/Sensor.msg + oss << "Sensor type is : " << sensor_type_enum_to_string(output.sensor) << std::endl; + + // The Resolution enum can be seen at msg/generated/vision_config/Resolution.msg + oss << "Resolution is : " << resolution_enum_to_string(output.resolution) << std::endl + << "---------------------------------"; + + ROS_INFO("%s", oss.str().c_str()); +} + +void example_get_extrinsic_parameters(ros::NodeHandle n, const std::string& robot_name) +{ + ros::ServiceClient service_client_get_extrinsic_parameters = n.serviceClient("/" + robot_name + "/vision_config/get_extrinsic_parameters"); + kortex_driver::GetExtrinsicParameters service_get_extrinsic_parameters; + + kortex_driver::GetExtrinsicParametersRequest req; + + if (!service_client_get_extrinsic_parameters.call(service_get_extrinsic_parameters)) + { + std::string error_string = "Failed to call GetExtrinsicParameters"; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + auto output = service_get_extrinsic_parameters.response.output; + // The message description can be seen at msg/generated/vision_config/ExtrinsicParameters.msg + std::ostringstream oss; + oss << std::endl << "---------------------------------" << std::endl + << "Extrinsic parameters are : " << std::endl + << "Rotation parameters matrix is : " << std::endl + << "| " << output.rotation.row1.column1 << " ; " << output.rotation.row1.column2 << " ; " << output.rotation.row1.column3 << " |" << std::endl + << "| " << output.rotation.row2.column1 << " ; " << output.rotation.row2.column2 << " ; " << output.rotation.row2.column3 << " |" << std::endl + << "| " << output.rotation.row3.column1 << " ; " << output.rotation.row3.column2 << " ; " << output.rotation.row3.column3 << " |" << std::endl; + + oss << "Translation parameters are : " << + "[ x = " << output.translation.t_x << + " ; y = " << output.translation.t_y << + " ; z = " << output.translation.t_z << " ]" + << std::endl << "---------------------------------" << std::endl; + + ROS_INFO("%s", oss.str().c_str()); +} + +void example_get_sensor_settings(ros::NodeHandle n, const std::string& robot_name) +{ + ros::ServiceClient service_client_get_sensor_settings = n.serviceClient("/" + robot_name + "/vision_config/get_sensor_settings"); + kortex_driver::GetSensorSettings service_get_sensor_settings; + + kortex_driver::GetSensorSettingsRequest req; + + // Get settings for the color sensor + req.input.sensor = kortex_driver::Sensor::SENSOR_COLOR; + service_get_sensor_settings.request = req; + + if (!service_client_get_sensor_settings.call(service_get_sensor_settings)) + { + std::string error_string = "Failed to call GetSensorSettings"; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + + auto output = service_get_sensor_settings.response.output; + + std::ostringstream oss; + oss << std::endl << + "---------------------------------" << std::endl << + "Get sensor settings : " << std::endl << + "Bit rate : " << bitrate_enum_to_string(output.bit_rate) << std::endl << + "Frame rate : " << framerate_enum_to_string(output.frame_rate) << std::endl << + "Resolution : " << resolution_enum_to_string(output.resolution) << std::endl << + "---------------------------------"; + + ROS_INFO("%s", oss.str().c_str()); +} + +void example_change_the_resolution(ros::NodeHandle n, const std::string& robot_name) +{ + ros::ServiceClient service_client_set_sensor_settings = n.serviceClient("/" + robot_name + "/vision_config/set_sensor_settings"); + kortex_driver::SetSensorSettings service_set_sensor_settings; + + kortex_driver::SetSensorSettingsRequest req; + + ROS_INFO("Changing the resolution..."); + + // Set the resolution to be 640 x 480 on the color sensor + // You have to specify all parameters else the call will return an INVALID_PARAM error + req.input.sensor = kortex_driver::Sensor::SENSOR_COLOR; + req.input.resolution = kortex_driver::Resolution::RESOLUTION_1280x720; + req.input.bit_rate = kortex_driver::BitRate::BITRATE_10_MBPS; + req.input.frame_rate = kortex_driver::FrameRate::FRAMERATE_30_FPS; + + service_set_sensor_settings.request = req; + + if (!service_client_set_sensor_settings.call(service_set_sensor_settings)) + { + std::string error_string = "Failed to call SetSensorSettings"; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + + ROS_INFO("Resolution changed successfully."); +} + +void example_get_sensor_option_value(ros::NodeHandle n, const std::string& robot_name) +{ + ros::ServiceClient service_client_get_sensor_option_value = n.serviceClient("/" + robot_name + "/vision_config/get_option_value"); + kortex_driver::GetOptionValue service_get_sensor_option_value; + + kortex_driver::GetOptionValueRequest req; + + // The only supported options for now are: + // For Color sensor : + // OPTION_BRIGHTNESS, OPTION_CONTRAST, OPTION_SATURATION + // For Depth sensor : + // OPTION_EXPOSURE, OPTION_GAIN, OPTION_ENABLE_AUTO_EXPOSURE, OPTION_VISUAL_PRESET, OPTION_FRAMES_QUEUE_SIZE, + // OPTION_ERROR_POLLING_ENABLE, OPTION_OUTPUT_TRIGGER_ENABLED, OPTION_DEPTH_UNITS, + // OPTION_STEREO_BASELINE (read-only) + + // Trying to call an unsupported option in this service (or in the SetOptionValue service) will generate an error + // Get the actual value the color sensor's contrast + req.input.sensor = kortex_driver::Sensor::SENSOR_COLOR; + req.input.option = kortex_driver::Option::OPTION_CONTRAST; + + service_get_sensor_option_value.request = req; + + if (!service_client_get_sensor_option_value.call(service_get_sensor_option_value)) + { + std::string error_string = "Failed to call GetOptionValue"; + ROS_ERROR("%s", error_string.c_str()); + throw new std::runtime_error(error_string); + } + + auto output = service_get_sensor_option_value.response.output; + std::ostringstream oss; + oss << std::endl << "---------------------------------" << std::endl + << "Get Option value : " << std::endl + << "Option value is : " << std::endl + << "For sensor : " << output.sensor << std::endl + << "For option : " << output.option << std::endl + << "The value is : " << output.value << std::endl + << "---------------------------------" << std::endl; + + ROS_INFO("%s", oss.str().c_str()); +} + +int main(int argc, char **argv) +{ + // Init the node and get the namespace parameter + ros::init(argc, argv, "vision_configuration_example_cpp"); + + ros::NodeHandle n; + std::string robot_name = "my_gen3"; + + // Parameter robot_name + if (!ros::param::get("~robot_name", robot_name)) + { + std::string error_string = "Parameter robot_name was not specified, defaulting to " + robot_name + " as namespace"; + ROS_WARN("%s", error_string.c_str()); + } + else + { + std::string error_string = "Using robot_name " + robot_name + " as namespace"; + ROS_INFO("%s", error_string.c_str()); + } + + //------------------------------------------------------------- + // Get the intrinsic parameters for a given sensor + example_get_intrinsic_parameters(n, robot_name); + + //------------------------------------------------------------- + // Get the extrinsic parameters for a given sensor + example_get_extrinsic_parameters(n, robot_name); + + //------------------------------------------------------------- + // Get the sensor settings for a given sensor + example_get_sensor_settings(n, robot_name); + + //------------------------------------------------------------- + // Set the extrinsic parameters for a given sensor + example_change_the_resolution(n, robot_name); + + //------------------------------------------------------------- + // Get an option value + example_get_sensor_option_value(n, robot_name); + + return 0; +} \ No newline at end of file diff --git a/kortex_examples/package.xml b/kortex_examples/package.xml index 38f6ad99..b202d6d3 100644 --- a/kortex_examples/package.xml +++ b/kortex_examples/package.xml @@ -1,10 +1,10 @@ kortex_examples - 1.0.0 + 2.0.0 THe kortex package that act as a robot's driver. - KINOVA + BSD @@ -20,11 +20,9 @@ std_msgs message_generation kortex_driver - kortex_actuator_driver - kortex_vision_config_driver - kortex_device_manager message_runtime - + moveit_commander + moveit_commander diff --git a/kortex_examples/python/GetControlLoopParameters.py b/kortex_examples/python/GetControlLoopParameters.py deleted file mode 100644 index a3cf9a4f..00000000 --- a/kortex_examples/python/GetControlLoopParameters.py +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env python -### -# KINOVA (R) KORTEX (TM) -# -# Copyright (c) 2018 Kinova inc. All rights reserved. -# -# This software may be modified and distributed -# under the terms of the BSD 3-Clause license. -# -# Refer to the LICENSE file for details. -# -### - -import sys -import rospy -import time -from kortex_actuator_driver.srv import * -from kortex_actuator_driver.msg import * -from kortex_device_manager.srv import * -from kortex_device_manager.msg import * - -def GetControlLoopParameters_Client(): - rospy.wait_for_service('GetControlLoopParameters') - - try: - function_GetControlLoopParameters = rospy.ServiceProxy('GetControlLoopParameters', GetControlLoopParameters) - function_SetDeviceID = rospy.ServiceProxy('SetDeviceID', SetDeviceID) - function_ReadAllDevices = rospy.ServiceProxy('ReadAllDevices', ReadAllDevices) - - reqGetControlLoopParameters = GetControlLoopParametersRequest() - reqReadAllDevices = ReadAllDevicesRequest() - reqSetDeviceID = SetDeviceIDRequest() - - reqGetControlLoopParameters.input.loop_selection = ControlLoopSelection.MOTOR_VELOCITY; - - actuatorFound = False; - actuator_id = 0; - - responseReadAllDevices = function_ReadAllDevices(reqReadAllDevices) - - for index, device in enumerate(responseReadAllDevices.output.device_handle): - if device.device_type is DeviceTypes.BIG_ACTUATOR or device.device_type is DeviceTypes.SMALL_ACTUATOR: - actuator_id = device.device_identifier - actuatorFound = True - reqSetDeviceID.device_id = actuator_id - function_SetDeviceID(reqSetDeviceID) - break - - if actuatorFound: - responseGetControlLoopParameters = function_GetControlLoopParameters(reqGetControlLoopParameters) - - print("loop_selection = {}".format(responseGetControlLoopParameters.output.loop_selection)) - print("error_saturation = {}".format(responseGetControlLoopParameters.output.error_saturation)) - print("output_saturation = {}\n".format(responseGetControlLoopParameters.output.output_saturation)) - - for index, gainA in enumerate(responseGetControlLoopParameters.output.kAz): - print("kAz[{}] = {}".format(index, gainA)) - - print("\n") - - for index, gainB in enumerate(responseGetControlLoopParameters.output.kBz): - print("kBz[{}] = {}".format(index, gainB)) - - except rospy.ServiceException as e: - print "Service call failed: %s"%e - -if __name__ == "__main__": - GetControlLoopParameters_Client() \ No newline at end of file diff --git a/kortex_examples/python/GetSensorSettings.py b/kortex_examples/python/GetSensorSettings.py deleted file mode 100644 index 54880c82..00000000 --- a/kortex_examples/python/GetSensorSettings.py +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env python -### -# KINOVA (R) KORTEX (TM) -# -# Copyright (c) 2018 Kinova inc. All rights reserved. -# -# This software may be modified and distributed -# under the terms of the BSD 3-Clause license. -# -# Refer to the LICENSE file for details. -# -### - -import sys -import rospy -import time -from kortex_vision_config_driver.srv import * -from kortex_vision_config_driver.msg import * -from kortex_device_manager.srv import * -from kortex_device_manager.msg import * - -def GetSensorSettings_Client(): - - rospy.wait_for_service('ReadAllDevices') - - try: - function_SetDeviceID = rospy.ServiceProxy('SetDeviceID', SetDeviceID) - function_ReadAllDevices = rospy.ServiceProxy('ReadAllDevices', ReadAllDevices) - - reqReadAllDevices = ReadAllDevicesRequest() - reqSetDeviceID = SetDeviceIDRequest() - - responseReadAllDevices = function_ReadAllDevices(reqReadAllDevices) - - for index, device in enumerate(responseReadAllDevices.output.device_handle): - if device.device_type is DeviceTypes.VISION: - device_id = device.device_identifier - vision = True - reqSetDeviceID.device_id = device_id - function_SetDeviceID(reqSetDeviceID) - break - - except rospy.ServiceException as e: - print "Service call failed: %s"%e - - if vision is True: - rospy.wait_for_service('GetSensorSettings') - try: - function_GetSensorSettings = rospy.ServiceProxy('GetSensorSettings', GetSensorSettings) - - req = GetSensorSettingsRequest() - - req.input.sensor = Sensor.SENSOR_COLOR; - - response = function_GetSensorSettings(req) - - print(response) - except rospy.ServiceException as e: - print "Service call failed: %s"%e - - else: - print("Cannot find vision module") - - -if __name__ == "__main__": - GetSensorSettings_Client() \ No newline at end of file diff --git a/kortex_examples/python/PlayCartesian.py b/kortex_examples/python/PlayCartesian.py deleted file mode 100644 index cccd8c57..00000000 --- a/kortex_examples/python/PlayCartesian.py +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env python -### -# KINOVA (R) KORTEX (TM) -# -# Copyright (c) 2018 Kinova inc. All rights reserved. -# -# This software may be modified and distributed -# under the terms of the BSD 3-Clause license. -# -# Refer to the LICENSE file for details. -# -### - -import sys -import rospy -from kortex_driver.srv import * -from kortex_driver.msg import * - -def PlayCartesian_client(): - - rospy.wait_for_service('PlayCartesianTrajectory') - rospy.wait_for_service('RefreshFeedback') - - try: - function_PlayCartesianTrajectory = rospy.ServiceProxy('PlayCartesianTrajectory', PlayCartesianTrajectory) - function_RefreshFeedback = rospy.ServiceProxy('RefreshFeedback', RefreshFeedback) - - current_feedback = function_RefreshFeedback() - request = PlayCartesianTrajectoryRequest() - - current_x = current_feedback.output.base.tool_pose_x - current_y = current_feedback.output.base.tool_pose_y - current_z = current_feedback.output.base.tool_pose_z - - current_theta_x = current_feedback.output.base.tool_pose_theta_x - current_theta_y = current_feedback.output.base.tool_pose_theta_y - current_theta_z = current_feedback.output.base.tool_pose_theta_z - - #Creating our next target (a Cartesian pose) - request.input.target_pose.x = current_x - request.input.target_pose.y = current_y - request.input.target_pose.z = current_z + 0.1 - - request.input.target_pose.theta_x = current_theta_x - request.input.target_pose.theta_y = current_theta_y - request.input.target_pose.theta_z = current_theta_z - - poseSpeed = CartesianSpeed() - poseSpeed.translation = 0.1 - poseSpeed.orientation = 15 - - request.input.constraint.oneof_type.speed.append(poseSpeed) - - function_PlayCartesianTrajectory(request) - - except rospy.ServiceException as e: - print "Service call failed: %s"%e - -if __name__ == "__main__": - PlayCartesian_client() \ No newline at end of file diff --git a/kortex_examples/python/ReadAllDevices.py b/kortex_examples/python/ReadAllDevices.py deleted file mode 100644 index e4572473..00000000 --- a/kortex_examples/python/ReadAllDevices.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env python -### -# KINOVA (R) KORTEX (TM) -# -# Copyright (c) 2018 Kinova inc. All rights reserved. -# -# This software may be modified and distributed -# under the terms of the BSD 3-Clause license. -# -# Refer to the LICENSE file for details. -# -### - -import sys -import rospy -from kortex_device_manager.srv import * - -def ReadAllDevices_client(): - rospy.wait_for_service('ReadAllDevices') - try: - function_ReadAllDevices = rospy.ServiceProxy('ReadAllDevices', ReadAllDevices) - resp1 = function_ReadAllDevices() - print(resp1) - except rospy.ServiceException as e: - print "Service call failed: %s"%e - - - -if __name__ == "__main__": - ReadAllDevices_client() \ No newline at end of file diff --git a/kortex_examples/python/SetControlLoopParameters.py b/kortex_examples/python/SetControlLoopParameters.py deleted file mode 100644 index 4b0ece8c..00000000 --- a/kortex_examples/python/SetControlLoopParameters.py +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env python -### -# KINOVA (R) KORTEX (TM) -# -# Copyright (c) 2018 Kinova inc. All rights reserved. -# -# This software may be modified and distributed -# under the terms of the BSD 3-Clause license. -# -# Refer to the LICENSE file for details. -# -### - -import sys -import rospy -import time -from kortex_actuator_driver.srv import * -from kortex_actuator_driver.msg import * -from kortex_device_manager.srv import * -from kortex_device_manager.msg import * - -def _function_SetControlLoopParameters(): - rospy.wait_for_service('SetControlLoopParameters') - - try: - function_SetControlLoopParameters = rospy.ServiceProxy('SetControlLoopParameters', SetControlLoopParameters) - function_SetDeviceID = rospy.ServiceProxy('SetDeviceID', SetDeviceID) - function_ReadAllDevices = rospy.ServiceProxy('ReadAllDevices', ReadAllDevices) - - req = SetControlLoopParametersRequest() - reqReadAllDevices = ReadAllDevicesRequest() - reqSetDeviceID = SetDeviceIDRequest() - - req.input.loop_selection = ControlLoopSelection.MOTOR_VELOCITY; - - actuatorFound = False; - actuator_id = 0; - - responseReadAllDevices = function_ReadAllDevices(reqReadAllDevices) - - for index, device in enumerate(responseReadAllDevices.output.device_handle): - if device.device_type is DeviceTypes.BIG_ACTUATOR or device.device_type is DeviceTypes.SMALL_ACTUATOR: - actuator_id = device.device_identifier - actuatorFound = True - reqSetDeviceID.device_id = actuator_id - function_SetDeviceID(reqSetDeviceID) - break - - if actuatorFound: - function_SetControlLoopParameters(req) - - except rospy.ServiceException as e: - print "Service call failed: %s"%e - -if __name__ == "__main__": - _function_SetControlLoopParameters() \ No newline at end of file diff --git a/kortex_examples/python/actuator_config/example_actuator_configuration.py b/kortex_examples/python/actuator_config/example_actuator_configuration.py new file mode 100755 index 00000000..b859dee9 --- /dev/null +++ b/kortex_examples/python/actuator_config/example_actuator_configuration.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python +### +# KINOVA (R) KORTEX (TM) +# +# Copyright (c) 2019 Kinova inc. All rights reserved. +# +# This software may be modified and distributed +# under the terms of the BSD 3-Clause license. +# +# Refer to the LICENSE file for details. +# +### + +import sys +import rospy +from kortex_driver.srv import * +from kortex_driver.msg import * + +class ExampleActuatorConfiguration: + def __init__(self): + rospy.init_node('example_actuator_configuration_python') + + # Get node params + self.robot_name = rospy.get_param('~robot_name', "my_gen3") + self.device_id = rospy.get_param('~device_id', 1) + rospy.loginfo("Using robot_name " + self.robot_name + " and device_id " + str(self.device_id)) + + # Init the services + read_all_devices_full_name = '/' + self.robot_name + '/device_manager/read_all_devices' + rospy.wait_for_service(read_all_devices_full_name) + self.read_all_devices = rospy.ServiceProxy(read_all_devices_full_name, ReadAllDevices) + + set_device_id_full_name = '/' + self.robot_name + '/actuator_config/set_device_id' + rospy.wait_for_service(set_device_id_full_name) + self.set_device_id = rospy.ServiceProxy(set_device_id_full_name, SetDeviceID) + + clear_faults_full_name = '/' + self.robot_name + '/actuator_config/clear_faults' + rospy.wait_for_service(clear_faults_full_name) + self.clear_faults = rospy.ServiceProxy(clear_faults_full_name, ActuatorConfig_ClearFaults) + + get_control_loop_parameters_full_name = '/' + self.robot_name + '/actuator_config/get_control_loop_parameters' + rospy.wait_for_service(get_control_loop_parameters_full_name) + self.get_control_loop_parameters = rospy.ServiceProxy(get_control_loop_parameters_full_name, GetControlLoopParameters) + + def control_loop_to_string(self, control_loop): + if control_loop == ControlLoopSelection.RESERVED: + return "RESERVED" + elif control_loop == ControlLoopSelection.JOINT_POSITION: + return "JOINT POSITION" + elif control_loop == ControlLoopSelection.MOTOR_POSITION: + return "MOTOR POSITION" + elif control_loop == ControlLoopSelection.JOINT_VELOCITY: + return "JOINT VELOCITY" + elif control_loop == ControlLoopSelection.MOTOR_VELOCITY: + return "MOTOR VELOCITY" + elif control_loop == ControlLoopSelection.JOINT_TORQUE: + return "JOINT TORQUE" + elif control_loop == ControlLoopSelection.MOTOR_CURRENT: + return "MOTOR CURRENT" + else: + return "UNKNOWN CONTROL LOOP TYPE"; + + def example_find_actuators_and_set_device_id(self): + rospy.loginfo("-------------------------------") + rospy.loginfo("Finding actuators...") + + actuator_device_ids = [] + + try: + all_devices = self.read_all_devices() + for device in all_devices.output.device_handle: + if device.device_type == DeviceTypes.BIG_ACTUATOR or device.device_type == DeviceTypes.SMALL_ACTUATOR: + # Add the device_id to the list if we found an actuator + actuator_device_ids.append(device.device_identifier) + rospy.loginfo("Found an actuator with device id " + str(device.device_identifier)) + + except rospy.ServiceException: + rospy.logerr("Failed to call ReadAllDevices.") + + else: + rospy.loginfo("-------------------------------") + + # Check if the specified device_id is in the list + if self.device_id in actuator_device_ids: + rospy.loginfo("Device id " + str(self.device_id) + " is a valid actuator device id.") + else: + raise ValueError("Device id " + str(self.device_id) + " does not correspond to an actuator's device id.") + + # We need to set the device ID of the actuator we want to configure + req = SetDeviceIDRequest() + req.device_id = self.device_id + try: + self.set_device_id(req) + except rospy.ServiceException: + rospy.logerr("Failed to call SetDeviceId") + + def example_clear_actuator_faults(self): + try: + self.clear_faults() + rospy.loginfo("Faults were cleared successfully on actuator " + str(self.device_id)) + except rospy.ServiceException: + rospy.logerr("Failed to call ActuatorConfig_ClearFaults") + + def example_get_control_loop_parameters(self): + try: + control_loop_parameters_response = self.get_control_loop_parameters() + except rospy.ServiceException: + rospy.logerr("Failed to call GetControlLoopParameters") + return None + else: + # The msg file can be found at kortex_driver/msg/generated/actuator_config/ControlLoopParameters.msg + oss = "" + control_loop_parameters = control_loop_parameters_response.output + oss = oss + "\nControl Loop parameters :\n" + oss = oss + "Loop selection : " + self.control_loop_to_string(control_loop_parameters.loop_selection) + "\n" + oss = oss + "Error saturation : " + str(control_loop_parameters.error_saturation) + "\n" + oss = oss + "Output saturation : " + str(control_loop_parameters.output_saturation) + "\n" + oss = oss + "kAz : [" + for element in control_loop_parameters.kAz: + oss = oss + str(element) + " ;" + oss = oss + "]\n" + oss = oss + "kBz : [" + for element in control_loop_parameters.kBz: + oss = oss + str(element) + " ; " + oss = oss + "]\n" + oss = oss + "Error dead band : " + str(control_loop_parameters.error_dead_band) + "\n" + rospy.loginfo(oss) + + return control_loop_parameters + + def main(self): + + #------------------------------------------------------------- + # Find actuators and set which one we want to configure + self.example_find_actuators_and_set_device_id() + + #------------------------------------------------------------- + # Clear the faults on a specific actuator + self.example_clear_actuator_faults() + + #------------------------------------------------------------- + # Get the control loop parameters on a specific actuator + control_loop_parameters = self.example_get_control_loop_parameters() + +if __name__ == "__main__": + ex = ExampleActuatorConfiguration() + ex.main() diff --git a/kortex_examples/python/full_arm/example_full_arm_movement.py b/kortex_examples/python/full_arm/example_full_arm_movement.py new file mode 100755 index 00000000..472272ed --- /dev/null +++ b/kortex_examples/python/full_arm/example_full_arm_movement.py @@ -0,0 +1,222 @@ +#!/usr/bin/env python +### +# KINOVA (R) KORTEX (TM) +# +# Copyright (c) 2019 Kinova inc. All rights reserved. +# +# This software may be modified and distributed +# under the terms of the BSD 3-Clause license. +# +# Refer to the LICENSE file for details. +# +### + +import sys +import rospy +from kortex_driver.srv import * +from kortex_driver.msg import * + +class ExampleFullArmMovement: + def __init__(self): + rospy.init_node('example_full_arm_movement_python') + + self.HOME_ACTION_IDENTIFIER = 2 + + # Get node params + self.robot_name = rospy.get_param('~robot_name', "my_gen3") + self.degrees_of_freedom = rospy.get_param("/" + self.robot_name + "/degrees_of_freedom", 7) + self.is_gripper_present = rospy.get_param("/" + self.robot_name + "/is_gripper_present", False) + + rospy.loginfo("Using robot_name " + self.robot_name + " , robot has " + str(self.degrees_of_freedom) + " degrees of freedom and is_gripper_present is " + str(self.is_gripper_present)) + + # Init the services + clear_faults_full_name = '/' + self.robot_name + '/base/clear_faults' + rospy.wait_for_service(clear_faults_full_name) + self.clear_faults = rospy.ServiceProxy(clear_faults_full_name, Base_ClearFaults) + + read_action_full_name = '/' + self.robot_name + '/base/read_action' + rospy.wait_for_service(read_action_full_name) + self.read_action = rospy.ServiceProxy(read_action_full_name, ReadAction) + + execute_action_full_name = '/' + self.robot_name + '/base/execute_action' + rospy.wait_for_service(execute_action_full_name) + self.execute_action = rospy.ServiceProxy(execute_action_full_name, ExecuteAction) + + set_cartesian_reference_frame_full_name = '/' + self.robot_name + '/control_config/set_cartesian_reference_frame' + rospy.wait_for_service(set_cartesian_reference_frame_full_name) + self.set_cartesian_reference_frame = rospy.ServiceProxy(set_cartesian_reference_frame_full_name, SetCartesianReferenceFrame) + + play_cartesian_trajectory_full_name = '/' + self.robot_name + '/base/play_cartesian_trajectory' + rospy.wait_for_service(play_cartesian_trajectory_full_name) + self.play_cartesian_trajectory = rospy.ServiceProxy(play_cartesian_trajectory_full_name, PlayCartesianTrajectory) + + play_joint_trajectory_full_name = '/' + self.robot_name + '/base/play_joint_trajectory' + rospy.wait_for_service(play_joint_trajectory_full_name) + self.play_joint_trajectory = rospy.ServiceProxy(play_joint_trajectory_full_name, PlayJointTrajectory) + + send_gripper_command_full_name = '/' + self.robot_name + '/base/send_gripper_command' + rospy.wait_for_service(send_gripper_command_full_name) + self.send_gripper_command = rospy.ServiceProxy(send_gripper_command_full_name, SendGripperCommand) + + def example_clear_faults(self): + try: + self.clear_faults() + except rospy.ServiceException: + rospy.logerr("Failed to call ClearFaults") + else: + rospy.loginfo("Cleared the faults successfully") + rospy.sleep(2.5) + + def example_home_the_robot(self): + # The Home Action is used to home the robot. It cannot be deleted and is always ID #2: + req = ReadActionRequest() + req.input.identifier = self.HOME_ACTION_IDENTIFIER + try: + res = self.read_action(req) + except rospy.ServiceException: + rospy.logerr("Failed to call ReadAction") + # Execute the HOME action if we could read it + else: + # What we just read is the input of the ExecuteAction service + req = ExecuteActionRequest() + req.input = res.output + rospy.loginfo("Sending the robot home...") + try: + self.execute_action(req) + except rospy.ServiceException: + rospy.logerr("Failed to call ExecuteAction") + + def example_set_cartesian_reference_frame(self): + # Prepare the request with the frame we want to set + req = SetCartesianReferenceFrameRequest() + req.input.reference_frame = CartesianReferenceFrame.CARTESIAN_REFERENCE_FRAME_MIXED + + # Call the service + try: + self.set_cartesian_reference_frame() + except rospy.ServiceException: + rospy.logerr("Failed to call SetCartesianReferenceFrame") + else: + rospy.loginfo("Set the cartesian reference frame successfully") + + # Wait a bit + rospy.sleep(0.25) + + def example_send_cartesian_pose(self): + # Get the actual cartesian pose to increment it + # You can create a subscriber to listen to the base_feedback + # Here we only need the latest message in the topic though + feedback = rospy.wait_for_message("/" + self.robot_name + "/base_feedback", BaseCyclic_Feedback) + + req = PlayCartesianTrajectoryRequest() + req.input.target_pose.x = feedback.base.commanded_tool_pose_x + req.input.target_pose.y = feedback.base.commanded_tool_pose_y + req.input.target_pose.z = feedback.base.commanded_tool_pose_z + 0.15 + req.input.target_pose.theta_x = feedback.base.commanded_tool_pose_theta_x + req.input.target_pose.theta_y = feedback.base.commanded_tool_pose_theta_y + req.input.target_pose.theta_z = feedback.base.commanded_tool_pose_theta_z + 35 + + pose_speed = CartesianSpeed() + pose_speed.translation = 0.1 + pose_speed.orientation = 15 + + # The constraint is a one_of in Protobuf. The one_of concept does not exist in ROS + # To specify a one_of, create it and put it in the appropriate list of the oneof_type member of the ROS object : + req.input.constraint.oneof_type.speed.append(pose_speed) + + # Call the service + rospy.loginfo("Sending the robot to the cartesian pose...") + try: + self.play_cartesian_trajectory(req) + except rospy.ServiceException: + rospy.logerr("Failed to call PlayCartesianTrajectory") + + def example_send_joint_angles(self): + # Create the list of angles + req = PlayJointTrajectoryRequest() + # Here the arm is vertical (all zeros) + for i in range(self.degrees_of_freedom): + temp_angle = JointAngle() + temp_angle.joint_identifier = i + temp_angle.value = 0.0 + req.input.joint_angles.joint_angles.append(temp_angle) + + # Send the angles + rospy.loginfo("Sending the robot vertical...") + try: + self.play_joint_trajectory(req) + except rospy.ServiceException: + rospy.logerr("Failed to call PlayJointTrajectory") + + def example_send_gripper_command(self, value): + # Initialize the request + # This works for the Robotiq Gripper 2F_85 + # Close the gripper + req = SendGripperCommandRequest() + finger = Finger() + finger.finger_identifier = 0 + finger.value = value + req.input.gripper.finger.append(finger) + req.input.mode = GripperMode.GRIPPER_POSITION + + rospy.loginfo("Sending the gripper command...") + + # Call the service + try: + self.send_gripper_command(req) + except rospy.ServiceException: + rospy.logerr("Failed to call SendGripperCommand") + + def main(self): + #******************************************************************************* + # Make sure to clear the robot's faults else it won't move if it's already in fault + self.example_clear_faults() + #******************************************************************************* + + #******************************************************************************* + # Move the robot to the Home position with an Action + self.example_home_the_robot() + rospy.sleep(10.0) + #******************************************************************************* + + #******************************************************************************* + # Example of gripper command + # Let's fully open the gripper + if self.is_gripper_present: + self.example_send_gripper_command(0.0) + rospy.sleep(2.0) + else: + rospy.logwarn("No gripper is present on the arm.") + #******************************************************************************* + + #******************************************************************************* + # Set the reference frame to "Mixed" + self.example_set_cartesian_reference_frame() + + # Example of cartesian pose + # Let's make it move in Z + self.example_send_cartesian_pose() + rospy.sleep(10.0) + #******************************************************************************* + + #******************************************************************************* + # Example of angular position + # Let's send the arm to vertical position + self.example_send_joint_angles() + rospy.sleep(10.0) + #******************************************************************************* + + #******************************************************************************* + # Example of gripper command + # Let's close the gripper at 50% + if self.is_gripper_present: + self.example_send_gripper_command(0.5) + rospy.sleep(2.0) + else: + rospy.logwarn("No gripper is present on the arm.") + #******************************************************************************* + + +if __name__ == "__main__": + ex = ExampleFullArmMovement() + ex.main() diff --git a/kortex_examples/python/move_it/example_move_it_trajectories.py b/kortex_examples/python/move_it/example_move_it_trajectories.py new file mode 100755 index 00000000..d4110f7c --- /dev/null +++ b/kortex_examples/python/move_it/example_move_it_trajectories.py @@ -0,0 +1,205 @@ +#!/usr/bin/env python + +# Software License Agreement (BSD License) +# +# Copyright (c) 2013, SRI International +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of SRI International nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# Author: Acorn Pooley, Mike Lautman + +# Inspired from http://docs.ros.org/kinetic/api/moveit_tutorials/html/doc/move_group_python_interface/move_group_python_interface_tutorial.html +# Modified by Alexandre Vannobel to test the FollowJointTrajectory Action Server for the Kinova Gen3 robot + +# To run this node in a given namespace with rosrun (for example 'my_gen3'), start a Kortex driver and then run : +# rosrun kortex_examples example_moveit_trajectories.py __ns:=my_gen3 + +import sys +import time +import rospy +import moveit_commander +import moveit_msgs.msg +import geometry_msgs.msg +from math import pi +from std_srvs.srv import Empty + +class ExampleMoveItTrajectories(object): + """ExampleMoveItTrajectories""" + def __init__(self): + + # Initialize the node + super(ExampleMoveItTrajectories, self).__init__() + moveit_commander.roscpp_initialize(sys.argv) + rospy.init_node('example_move_it_trajectories') + + self.is_gripper_present = rospy.get_param(rospy.get_namespace() + "is_gripper_present", False) + + # Create the MoveItInterface necessary objects + arm_group_name = "arm" + self.robot = moveit_commander.RobotCommander("robot_description") + self.scene = moveit_commander.PlanningSceneInterface(ns=rospy.get_namespace()) + self.arm_group = moveit_commander.MoveGroupCommander(arm_group_name, ns=rospy.get_namespace()) + self.display_trajectory_publisher = rospy.Publisher(rospy.get_namespace() + 'move_group/display_planned_path', + moveit_msgs.msg.DisplayTrajectory, + queue_size=20) + + if self.is_gripper_present: + gripper_group_name = "gripper" + self.gripper_group = moveit_commander.MoveGroupCommander(gripper_group_name, ns=rospy.get_namespace()) + + rospy.loginfo("Initializing node in namespace " + rospy.get_namespace()) + + def reach_named_position(self, target): + arm_group = self.arm_group + + # Going to one of those targets + rospy.loginfo("Going to named target " + target) + # Set the target + arm_group.set_named_target(target) + # Plan the trajectory + planned_path1 = arm_group.plan() + # Execute the trajectory and block while it's not finished + arm_group.execute(planned_path1, wait=True) + + def reach_joint_angles(self, tolerance): + arm_group = self.arm_group + + # Get the current joint positions + joint_positions = arm_group.get_current_joint_values() + rospy.loginfo("Printing current joint positions before movement :") + for p in joint_positions: rospy.loginfo(p) + + # Set the goal joint tolerance + self.arm_group.set_goal_joint_tolerance(tolerance) + + # Set the joint target configuration + joint_positions[0] = pi/2 + joint_positions[1] = 0 + joint_positions[2] = pi/4 + joint_positions[3] = -pi/4 + joint_positions[4] = 0 + joint_positions[5] = pi/2 + joint_positions[6] = 0.2 + arm_group.set_joint_value_target(joint_positions) + + # Plan and execute in one command + arm_group.go(wait=True) + + # Show joint positions after movement + new_joint_positions = arm_group.get_current_joint_values() + rospy.loginfo("Printing current joint positions after movement :") + for p in new_joint_positions: rospy.loginfo(p) + + def get_cartesian_pose(self): + arm_group = self.arm_group + + # Get the current pose and display it + pose = arm_group.get_current_pose() + rospy.loginfo("Actual cartesian pose is : ") + rospy.loginfo(pose.pose) + + return pose.pose + + def reach_cartesian_pose(self, pose, tolerance, constraints): + arm_group = self.arm_group + + # Set the tolerance + arm_group.set_goal_position_tolerance(tolerance) + + # Set the trajectory constraint if one is specified + if constraints is not None: + #import pdb; pdb.set_trace() + arm_group.set_path_constraints(constraints) + + # Get the current Cartesian Position + arm_group.set_pose_target(pose) + + # Plan and execute + rospy.loginfo("Planning and going to the Cartesian Pose") + arm_group.go(wait=True) + + def reach_gripper_position(self, relative_position): + gripper_group = self.gripper_group + + # We only have to move this joint because all others are mimic! + gripper_joint = self.robot.get_joint("gripper_finger1_joint") + gripper_max_absolute_pos = gripper_joint.max_bound() + gripper_joint.move(relative_position * gripper_max_absolute_pos, True) + +def main(): + example = ExampleMoveItTrajectories() + + rospy.loginfo("Press any key to start Named Target Vertical sub example") + raw_input() + example.reach_named_position("vertical") + + rospy.loginfo("Press any key to start Reach Joint Angles sub example") + raw_input() + example.reach_joint_angles(tolerance=0.01) #rad + + rospy.loginfo("Press any key to start Named Target Home sub example") + raw_input() + example.reach_named_position("home") + + rospy.loginfo("Press any key to start Reach Cartesian Pose sub example") + raw_input() + actual_pose = example.get_cartesian_pose() + actual_pose.position.x -= 0.1 + actual_pose.position.y += 0.3 + actual_pose.position.z += 0.3 + example.reach_cartesian_pose(pose=actual_pose, tolerance=0.01, constraints=None) + + if example.is_gripper_present: + + rospy.loginfo("Press any key to start Reach Cartesian Pose With Constraints sub example") + raw_input() + + # Get actual pose + actual_pose = example.get_cartesian_pose() + actual_pose.position.y -= 0.3 + + # Orientation constraint (we want the end effector to stay the same orientation) + constraints = moveit_msgs.msg.Constraints() + orientation_constraint = moveit_msgs.msg.OrientationConstraint() + orientation_constraint.orientation = actual_pose.orientation + constraints.orientation_constraints.append(orientation_constraint) + + # Send the goal + example.reach_cartesian_pose(pose=actual_pose, tolerance=0.01, constraints=constraints) + + rospy.loginfo("Press any key to open the gripper sub example") + raw_input() + example.reach_gripper_position(0) + + rospy.loginfo("Press any key to bring the gripper to half-closed sub example") + raw_input() + example.reach_gripper_position(0.5) + +if __name__ == '__main__': + main() diff --git a/kortex_examples/python/move_it/simulation_pid_tuning.py b/kortex_examples/python/move_it/simulation_pid_tuning.py new file mode 100755 index 00000000..78e5c42a --- /dev/null +++ b/kortex_examples/python/move_it/simulation_pid_tuning.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python + +# Software License Agreement (BSD License) +# +# Copyright (c) 2013, SRI International +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of SRI International nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# Author: Acorn Pooley, Mike Lautman + +# Inspired from http://docs.ros.org/kinetic/api/moveit_tutorials/html/doc/move_group_python_interface/move_group_python_interface_tutorial.html +# Modified by Alexandre Vannobel to tune the simulated controller's PID for Gazebo and the Gen3 robot + +# Usage : +# rosrun kortex_examples simulation_pid_tuning.py _inertia:=low _actuator:=3 _sleep_time:=2 +# inertia : low or high +# actuator : 1 to max number (7 for Gen3) +# sleep_time : time to sleep between trajectories (in seconds) + +import sys +import time +import rospy +import moveit_commander +import moveit_msgs.msg +import geometry_msgs.msg +from math import pi +from std_srvs.srv import Empty + +high_inertia = [[[0, 1.57, 0, 0, 0, 0, 0],[0, 1.57, 0, 0, 0, 0, 0],[0, 1.57, 1.57, 0, 0, 0, 0],[0, 0, 0, 1.57, 0, 0, 0],[0, 0.78, 0, 0.78, 0, 0, 0],[0, 0.78, 0, 0.78, 0, 0.25, 0],[0, 0.78, 0, 0.78, 0, 0, 0]], \ + [[0.25, 1.57, 0, 0, 0, 0, 0],[0, 1.25, 0, 0, 0, 0, 0],[0, 1.57, 1.25, 0, 0, 0, 0],[0, 0, 0, 1.25, 0, 0, 0],[0, 0.78, 0, 0.78, 0.25, 0, 0],[0, 0.78, 0, 0.78, 0, 0, 0],[0, 0.78, 0, 0.78, 0, 0, 0.25]]] + +low_inertia = [[[0, 0, 0, 0, 0, 0, 0],[0, 1.57, 1.57, 1.57, 0, 1.57, 0],[0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 1.57, 0, 1.57, 0],[0, 0, 0, 0, 0, 0, 0],[0, 0.78, 0, 0.78, 0, 1.57, 0],[0, 0, 0, 0, 0, 0, 0]], \ + [[0.25, 0, 0, 0, 0, 0, 0], [0, 1.25, 1.57, 1.57, 0, 1.57, 0], [0, 0, 0.25, 0, 0, 0, 0], [0, 0, 0, 1.25, 0, 1.57, 0], [0, 0, 0, 0, 0.25, 0, 0],[0, 0.78, 0, 0.78, 0, 1.25, 0],[0, 0, 0, 0, 0, 0, 0.25]]] + +class MoveItPIDTuning(object): + """MoveItPIDTuning""" + def __init__(self): + + # Initialize the node + super(MoveItPIDTuning, self).__init__() + moveit_commander.roscpp_initialize(sys.argv) + rospy.init_node('MoveItPIDTuning_node') + + self.actuator = rospy.get_param("~actuator") + if self.actuator < 1 or self.actuator > 7: + rospy.logerr("Actuator must be between 1 and 7 inclusively for gen3") + exit(0) + self.inertia = rospy.get_param("~inertia") + rospy.loginfo("---{}---".format(self.inertia)) + if self.inertia != "low" and self.inertia != "high": + rospy.logerr("Inertia must be low or high") + exit(0) + self.sleep_time = rospy.get_param("~sleep_time") + + # Create the MoveItInterface necessary objects + arm_group_name = "arm" + self.robot = moveit_commander.RobotCommander() + self.scene = moveit_commander.PlanningSceneInterface() + self.arm_group = moveit_commander.MoveGroupCommander(arm_group_name) + + def reach_joint_angles(self, using_one): + arm_group = self.arm_group + + # Set the joint target configuration + joint_target = [] + if self.inertia == "high": + if using_one is True: + joint_target = high_inertia[0][self.actuator-1] + else: + joint_target = high_inertia[1][self.actuator-1] + if self.inertia == "low": + if using_one is True: + joint_target = low_inertia[0][self.actuator-1] + else: + joint_target = low_inertia[1][self.actuator-1] + + arm_group.set_joint_value_target(joint_target) + + # Plan and execute in one command + arm_group.go(wait=True) + +def main(): + tuner = MoveItPIDTuning() + rospy.loginfo("Going to first position, then will wait 10 secs before starting") + tuner.reach_joint_angles(True) + rospy.sleep(10) + while(True): + tuner.reach_joint_angles(True) + rospy.sleep(tuner.sleep_time) + tuner.reach_joint_angles(False) + rospy.sleep(tuner.sleep_time) + +if __name__ == '__main__': + main() diff --git a/kortex_examples/python/vision_config/example_vision_configuration.py b/kortex_examples/python/vision_config/example_vision_configuration.py new file mode 100755 index 00000000..3e56004c --- /dev/null +++ b/kortex_examples/python/vision_config/example_vision_configuration.py @@ -0,0 +1,255 @@ +#!/usr/bin/env python +### +# KINOVA (R) KORTEX (TM) +# +# Copyright (c) 2019 Kinova inc. All rights reserved. +# +# This software may be modified and distributed +# under the terms of the BSD 3-Clause license. +# +# Refer to the LICENSE file for details. +# +### + +import sys +import rospy +from kortex_driver.srv import * +from kortex_driver.msg import * + +class ExampleVisionConfiguration: + def __init__(self): + rospy.init_node('example_vision_configuration_python') + + # Get node params + self.robot_name = rospy.get_param('~robot_name', "my_gen3") + rospy.loginfo("Using robot_name " + self.robot_name) + + # Init the services + get_intrinsic_parameters_full_name = '/' + self.robot_name + '/vision_config/get_intrinsic_parameters' + rospy.wait_for_service(get_intrinsic_parameters_full_name) + self.get_intrinsic_parameters = rospy.ServiceProxy(get_intrinsic_parameters_full_name, GetIntrinsicParameters) + + get_extrinsic_parameters_full_name = '/' + self.robot_name + '/vision_config/get_extrinsic_parameters' + rospy.wait_for_service(get_extrinsic_parameters_full_name) + self.get_extrinsic_parameters = rospy.ServiceProxy(get_extrinsic_parameters_full_name, GetExtrinsicParameters) + + get_sensor_settings_full_name = '/' + self.robot_name + '/vision_config/get_sensor_settings' + rospy.wait_for_service(get_sensor_settings_full_name) + self.get_sensor_settings = rospy.ServiceProxy(get_sensor_settings_full_name, GetSensorSettings) + + set_sensor_settings_full_name = '/' + self.robot_name + '/vision_config/set_sensor_settings' + rospy.wait_for_service(set_sensor_settings_full_name) + self.set_sensor_settings = rospy.ServiceProxy(set_sensor_settings_full_name, SetSensorSettings) + + get_option_value_full_name = '/' + self.robot_name + '/vision_config/get_option_value' + rospy.wait_for_service(get_option_value_full_name) + self.get_option_value = rospy.ServiceProxy(get_option_value_full_name, GetOptionValue) + + def sensor_type_enum_to_string(self, enum_value): + s = "" + if enum_value == Sensor.SENSOR_COLOR: + s = "Color" + elif enum_value == Sensor.SENSOR_DEPTH: + s = "Depth" + else: + s = "Unspecified" + return s + + def resolution_enum_to_string(self, enum_value): + s = "" + if enum_value == Resolution.RESOLUTION_320x240: + s = "320 x 240" + elif enum_value == Resolution.RESOLUTION_424x240: + s = "424 x 240" + elif enum_value == Resolution.RESOLUTION_480x270: + s = "480 x 270" + elif enum_value == Resolution.RESOLUTION_640x480: + s = "640 x 480" + elif enum_value == Resolution.RESOLUTION_1280x720: + s = "1280 x 720" + elif enum_value == Resolution.RESOLUTION_1920x1080: + s = "1920 x 1080" + else: + s = "Unspecified" + return s + + def framerate_enum_to_string(self, enum_value): + s = "" + if enum_value == FrameRate.FRAMERATE_6_FPS: + s = "6 FPS" + elif enum_value == FrameRate.FRAMERATE_15_FPS: + s = "15 FPS" + elif enum_value == FrameRate.FRAMERATE_30_FPS: + s = "30 FPS" + else: + s = "Unspecified" + return s + + def bitrate_enum_to_string(self, enum_value): + s = "" + if enum_value == BitRate.BITRATE_10_MBPS: + s = "10 MBPS" + elif enum_value == BitRate.BITRATE_15_MBPS: + s = "15 MBPS" + elif enum_value == BitRate.BITRATE_20_MBPS: + s = "20 MBPS" + elif enum_value == BitRate.BITRATE_25_MBPS: + s = "25 MBPS" + else: + s = "Unspecified" + return s + + def example_get_intrinsic_parameters(self): + # Call the service to get the params + req = GetIntrinsicParametersRequest() + req.input.sensor = Sensor.SENSOR_COLOR # Change to SENSOR_DEPTH for the depth sensor + try: + res = self.get_intrinsic_parameters(req) + except rospy.ServiceException: + rospy.logerr("Failed to call GetIntrinsicParameters") + else: + # Print them + # The message description can be seen at msg/generated/vision_config/IntrinsicParameters.msg + intrinsic_parameters = res.output + out = "" + out += "\n----------------------------------\n" + out += "Intrinsic parameters are :\n" + out += "Focal length in x is : " + str(intrinsic_parameters.focal_length_x) + "\n" + out += "Focal length in y is : " + str(intrinsic_parameters.focal_length_y) + "\n" + out += "Principal point in x is : " + str(intrinsic_parameters.principal_point_x) + "\n" + out += "Principal point in y is : " + str(intrinsic_parameters.principal_point_y) + "\n" + out += "Distortion coefficients are : [" + out += "k1 = " + str(intrinsic_parameters.distortion_coeffs.k1) + "; " + out += "k2 = " + str(intrinsic_parameters.distortion_coeffs.k2) + "; " + out += "k3 = " + str(intrinsic_parameters.distortion_coeffs.k3) + "; " + out += "p1 = " + str(intrinsic_parameters.distortion_coeffs.p1) + "; " + out += "p2 = " + str(intrinsic_parameters.distortion_coeffs.p2) + "]" + "\n" + + # The Sensor enum can be seen at msg/generated/vision_config/Sensor.msg + out += "Sensor type is : " + self.sensor_type_enum_to_string(intrinsic_parameters.sensor) + "\n" + + # The Resolution enum can be seen at msg/generated/vision_config/Resolution.msg + out += "Resolution is : " + self.resolution_enum_to_string(intrinsic_parameters.resolution) + "\n" + out += "----------------------------------" + + rospy.loginfo(out) + + def example_get_extrinsic_parameters(self): + # Call the service + try: + res = self.get_extrinsic_parameters() + except rospy.ServiceException: + rospy.logerr("Failed to call GetExtrinsicParameters") + else: + # Print the result + # The message description can be seen at msg/generated/vision_config/ExtrinsicParameters.msg + extrinsic_parameters = res.output + out = "\n----------------------------------\n" + out += "Extrinsic parameters are :\n" + out += "Rotation parameters matrix is : " + "\n" + out += "| " + str(extrinsic_parameters.rotation.row1.column1) + " ; " + str(extrinsic_parameters.rotation.row1.column2) + " ; " + str(extrinsic_parameters.rotation.row1.column3) + " |" + "\n" + out += "| " + str(extrinsic_parameters.rotation.row2.column1) + " ; " + str(extrinsic_parameters.rotation.row2.column2) + " ; " + str(extrinsic_parameters.rotation.row2.column3) + " |" + "\n" + out += "| " + str(extrinsic_parameters.rotation.row3.column1) + " ; " + str(extrinsic_parameters.rotation.row3.column2) + " ; " + str(extrinsic_parameters.rotation.row3.column3) + " |" + "\n" + + out += "Translation parameters are : " + out += "[ x = " + str(extrinsic_parameters.translation.t_x) + out += " ; y = " + str(extrinsic_parameters.translation.t_y) + out += " ; z = " + str(extrinsic_parameters.translation.t_z) + " ]" + out += "\n" + "---------------------------------" + "\n" + + rospy.loginfo(out) + + def example_get_sensor_settings(self): + # Call the service + req = GetSensorSettingsRequest() + req.input.sensor = Sensor.SENSOR_COLOR + try: + res = self.get_sensor_settings(req) + except rospy.ServiceException: + rospy.logerr("Failed to call GetSensorSettings") + else: + # Print the result + sensor_settings = res.output + out = "\n----------------------------------\n" + out += "Get sensor settings : " "\n" + out += "Bit rate : " + self.bitrate_enum_to_string(sensor_settings.bit_rate) + "\n" + out += "Frame rate : " + self.framerate_enum_to_string(sensor_settings.frame_rate) + "\n" + out += "Resolution : " + self.resolution_enum_to_string(sensor_settings.resolution) + "\n" + out += "---------------------------------" + + rospy.loginfo(out) + + def example_change_the_resolution(self): + rospy.loginfo("Changing the resolution...") + req = SetSensorSettingsRequest() + # Set the resolution to be 640 x 480 on the color sensor + # You have to specify all parameters else the call will return an INVALID_PARAM error + req.input.sensor = Sensor.SENSOR_COLOR + req.input.resolution = Resolution.RESOLUTION_1280x720 + req.input.bit_rate = BitRate.BITRATE_10_MBPS + req.input.frame_rate = FrameRate.FRAMERATE_30_FPS + try: + self.set_sensor_settings(req) + except rospy.ServiceException: + rospy.logerr("Failed to call SetSensorSettings and change the resolution") + else: + rospy.loginfo("Resolution changed successfully") + + def example_get_sensor_option_value(self): + req = GetOptionValueRequest() + + # The only supported options for now are: + # For Color sensor : + # OPTION_BRIGHTNESS, OPTION_CONTRAST, OPTION_SATURATION + # For Depth sensor : + # OPTION_EXPOSURE, OPTION_GAIN, OPTION_ENABLE_AUTO_EXPOSURE, OPTION_VISUAL_PRESET, OPTION_FRAMES_QUEUE_SIZE, + # OPTION_ERROR_POLLING_ENABLE, OPTION_OUTPUT_TRIGGER_ENABLED, OPTION_DEPTH_UNITS, + # OPTION_STEREO_BASELINE (read-only) + # Trying to call an unsupported option in this service (or in the SetOptionValue service) will generate an error + + # Get the actual value the color sensor's contrast + req.input.sensor = Sensor.SENSOR_COLOR + req.input.option = Option.OPTION_CONTRAST + + try: + res = self.get_option_value(req) + except rospy.ServiceException: + rospy.logerr("Failed to call GetOptionValue") + else: + option_value = res.output + out = "\n---------------------------------\n" + out += "Get Option value :\n" + out += "Option value is : \n" + out += "For sensor : " + self.sensor_type_enum_to_string(option_value.sensor) + "\n" + # You can see the Option enum at msg/generated/vision_config/Option.msg + out += "For option : " + str(option_value.option) + "\n" + out += "The value is : " + str(option_value.value) + "\n" + out += "---------------------------------\n" + + rospy.loginfo(out) + + def main(self): + + #------------------------------------------------------------- + # Get the intrinsic parameters for a given sensor + self.example_get_intrinsic_parameters() + + #------------------------------------------------------------- + # Get the extrinsic parameters for a given sensor + self.example_get_extrinsic_parameters() + + #------------------------------------------------------------- + # Get the sensor settings for a given sensor + self.example_get_sensor_settings() + + #------------------------------------------------------------- + # Set the extrinsic parameters for a given sensor + self.example_change_the_resolution() + + #------------------------------------------------------------- + # Get an option value + self.example_get_sensor_option_value() + +if __name__ == "__main__": + ex = ExampleVisionConfiguration() + ex.main() diff --git a/kortex_examples/readme.md b/kortex_examples/readme.md index fdc7b11d..e999034a 100644 --- a/kortex_examples/readme.md +++ b/kortex_examples/readme.md @@ -14,100 +14,74 @@ -1. [Get control loop parameters](#get-control-loop-parameters) -1. [Set control loop parameters](#set-control-loop-parameters) -1. [Play Cartesian](#play-cartesian) -1. [Play Cartesian position](#play-cartesian-position) -1. [Get sensor settings](#get-sensor-settings) -1. [Read all devices](#read-all-devices) +1. [Before running an example](#first_of_all) +2. [Actuator configuration examples](#actuator_config) +3. [Full arm movement examples](#full_arm) +4. [Vision module configuration examples](#vision_config) +5. [MoveIt! examples](#move_it) + +## Before running an example - -## Get control loop parameters -

-Gets the control loop parameters from a Gen3 robot actuator. -

+Before you run any example, make sure : +- You have already built the packages using `catkin_make`. +- You are physically connected to an arm (or you are connected over Wi-Fi). +- You have started the `kortex_driver` node by following the [instructions](../kortex_driver/readme.md). +- The node started correctly and without errors. -To run this example, the following nodes need to be running: -> - kortex\_device\_manager (**rosrun kortex\_device\_manager kortex\_device\_manager 192.168.1.10**) -> - kortex\_actuator\_driver (**rosrun kortex\_actuator\_driver kortex\_actuator\_driver 192.168.1.10 100**) -\* Note here that the address **192.168.1.10** is the default robot IP address - you can use any IP address that suits you. + +## Actuator configuration examples +*Examples to show how to use actuator_config ROS services to configure a given actuator.* -To run the example: +The examples look for advertised services in the **my_gen3** namespace by default and configures the first actuator. -rosrun kortex_examples GetControlLoopParameters +To run the C++ example: `rosrun kortex_examples example_actuator_configuration_cpp` - -## Set control loop parameters -

-Sets the control loop parameters from a Gen3 robot actuator. -

+To run the Python example: `rosrun kortex_examples example_actuator_configuration.py` -This example needs the following nodes to be running: -> - kortex\_device\_manager (**rosrun kortex\_device\_manager kortex\_device\_manager 192.168.1.10**) -> - kortex\_actuator\_driver (**rosrun kortex\_actuator\_driver kortex\_actuator\_driver 192.168.1.10 100**) +If you started the `kortex_driver` node in a non-default namespace (not **my_gen3**) or if you want to test the example on another actuator than the first one, you will have to supply node parameters in the command line (the syntax doesn't change if you run the C++ or Python example) : -\* Note here that the address **192.168.1.10** is the default robot IP address - you can use any IP address that suits you. +`rosrun kortex_examples example_actuator_configuration_cpp _robot_name:= _device_id:=` - -## Play Cartesian -

-Move the end effector of a Gen3 robot along the z axis by +0,1 meter and rotate around the Theta Z axis by +60°. -

+ +## Full arm examples +*Examples to show how to use the base ROS services to move and configure the arm.* -To run this example, the following nodes need to be running: -> - kortex\_driver (**rosrun kortex\_driver kortex\_driver 192.168.1.10 100**) +The examples look for advertised services in the **my_gen3** namespace by default. -\* Note here that the address **192.168.1.10** is the default robot IP address - you can use any IP address that suits you. +To run the C++ example: `rosrun kortex_examples example_full_arm_movement_cpp` -To run the example: +To run the Python example: `rosrun kortex_examples example_full_arm_movement.py` -rosrun kortex_examples PlayCartesian +If you started the `kortex_driver` node in a non-default namespace (not **my_gen3**), you will have to supply the node a parameter in the command line (the syntax doesn't change if you run the C++ or Python example) : - -## Play cartesian position +`rosrun kortex_examples example_full_arm_movement_cpp _robot_name:=` -

-Move the end effector of a Gen3 robot along the z axis by +0,1. -

+ +## Vision module configuration examples +*Examples to show how to use the vision_config ROS services to configure the vision module.* -To run this example, the following nodes need to be running: -> - kortex\_driver (**rosrun kortex\_driver kortex\_driver 192.168.1.10 100**) +The examples look for advertised services in the **my_gen3** namespace by default. -\* Note here that the address **192.168.1.10** is the default robot IP address - you can use any IP address that suits you. +To run the C++ example: `rosrun kortex_examples example_vision_configuration_cpp` -To run the example: +To run the Python example: `rosrun kortex_examples example_vision_configuration.py` -rosrun kortex_examples PlayCartesianPosition +If you started the `kortex_driver` node in a non-default namespace (not **my_gen3**), you will have to supply the node a parameter in the command line (the syntax doesn't change if you run the C++ or Python example) : - -## Get sensor settings -

- Gets the settings of all the sensors from the Vision module. In this example, we assume that the targeted Vision module is part of a robot and you want to communicate with it via the base device routing feature. -

+`rosrun kortex_examples example_full_arm_movement_cpp _robot_name:=` -To run this example, the following nodes need to be running: -> - kortex\_device\_manager (**rosrun kortex\_device\_manager kortex\_device\_manager 192.168.1.10**) -> - kortex\_vision\_config\_driver (**rosrun kortex\_vision\_config\_driver kortex\_vision\_config\_driver 192.168.1.10**) + +## MoveIt! example +*Example to show how to use the Python MoveIt! API to move the arm.* -Then to run it: +The example looks for advertised services and topics in the **my_gen3** namespace by default. -rosrun kortex_examples GetSensorSettings - - -## Read all devices -

- Get a list of all the devices available on a Gen3 robot base. This example is useful when you want to communicate with a device that is a part of a robot using the device routing feature. -

- -To run this example, the following nodes need to be running: -> - kortex\_device\_manager (**rosrun kortex\_device\_manager kortex\_device\_manager 192.168.1.10**) - -Then to run it: - -rosrun kortex_examples ReadAllDevices +To run the example: `rosrun kortex_examples example_move_it_trajectories.py` +If you started the `kortex_driver` node in a non-default namespace (not **my_gen3**), you will have to supply the node your own namespace in the command line : +`rosrun kortex_examples example_full_arm_movement_cpp __ns:=` diff --git a/kortex_examples/setup.py b/kortex_examples/setup.py new file mode 100644 index 00000000..6d5a2ada --- /dev/null +++ b/kortex_examples/setup.py @@ -0,0 +1,7 @@ +from distutils.core import setup +from catkin_pkg.python_setup import generate_distutils_setup + +setup(**generate_distutils_setup( + packages=['kortex_examples'], + package_dir={'': 'python'} +)) \ No newline at end of file diff --git a/kortex_gazebo/CMakeLists.txt b/kortex_gazebo/CMakeLists.txt new file mode 100644 index 00000000..0de0abab --- /dev/null +++ b/kortex_gazebo/CMakeLists.txt @@ -0,0 +1,30 @@ +cmake_minimum_required(VERSION 2.8.3) + +project(kortex_gazebo) + +# This is added to remove policy CMP0054 warning (see https://stackoverflow.com/questions/45900159/how-to-use-variables-and-avoid-cmp0054-policy-violations) +cmake_policy(SET CMP0054 NEW) + +find_package(catkin REQUIRED) + +find_package(gazebo) + +catkin_package() + +find_package(roslaunch) + +foreach(dir config launch meshes urdf) + install(DIRECTORY ${dir}/ + DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/${dir}) +endforeach(dir) + +# Gazebo is compiled with Protobuf 2.6.1 and Kortex with Protobuf 3.5.1 +# The 2.6.1 includes are prepended to the include_directories so the Gazebo plugins we compile here build +include_directories(BEFORE ./include/) +include_directories(${GAZEBO_INCLUDE_DIRS}) +link_directories(${GAZEBO_LIBRARY_DIRS}) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GAZEBO_CXX_FLAGS}") + +# To add your Gazebo plugin to this package, put your source file under src and uncomment/modify those lines +# add_library(my_gazebo_plugin SHARED src/my_gazebo_plugin.cpp) +# target_link_libraries(my_gazebo_plugin ${GAZEBO_LIBRARIES}) diff --git a/kortex_gazebo/include/google/protobuf/compiler/code_generator.h b/kortex_gazebo/include/google/protobuf/compiler/code_generator.h new file mode 100644 index 00000000..321a8ccd --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/compiler/code_generator.h @@ -0,0 +1,145 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// Defines the abstract interface implemented by each of the language-specific +// code generators. + +#ifndef GOOGLE_PROTOBUF_COMPILER_CODE_GENERATOR_H__ +#define GOOGLE_PROTOBUF_COMPILER_CODE_GENERATOR_H__ + +#include +#include +#include +#include + +namespace google { +namespace protobuf { + +namespace io { class ZeroCopyOutputStream; } +class FileDescriptor; + +namespace compiler { + +// Defined in this file. +class CodeGenerator; +class GeneratorContext; + +// The abstract interface to a class which generates code implementing a +// particular proto file in a particular language. A number of these may +// be registered with CommandLineInterface to support various languages. +class LIBPROTOC_EXPORT CodeGenerator { + public: + inline CodeGenerator() {} + virtual ~CodeGenerator(); + + // Generates code for the given proto file, generating one or more files in + // the given output directory. + // + // A parameter to be passed to the generator can be specified on the + // command line. This is intended to be used by Java and similar languages + // to specify which specific class from the proto file is to be generated, + // though it could have other uses as well. It is empty if no parameter was + // given. + // + // Returns true if successful. Otherwise, sets *error to a description of + // the problem (e.g. "invalid parameter") and returns false. + virtual bool Generate(const FileDescriptor* file, + const string& parameter, + GeneratorContext* generator_context, + string* error) const = 0; + + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CodeGenerator); +}; + +// CodeGenerators generate one or more files in a given directory. This +// abstract interface represents the directory to which the CodeGenerator is +// to write and other information about the context in which the Generator +// runs. +class LIBPROTOC_EXPORT GeneratorContext { + public: + inline GeneratorContext() {} + virtual ~GeneratorContext(); + + // Opens the given file, truncating it if it exists, and returns a + // ZeroCopyOutputStream that writes to the file. The caller takes ownership + // of the returned object. This method never fails (a dummy stream will be + // returned instead). + // + // The filename given should be relative to the root of the source tree. + // E.g. the C++ generator, when generating code for "foo/bar.proto", will + // generate the files "foo/bar.pb.h" and "foo/bar.pb.cc"; note that + // "foo/" is included in these filenames. The filename is not allowed to + // contain "." or ".." components. + virtual io::ZeroCopyOutputStream* Open(const string& filename) = 0; + + // Similar to Open() but the output will be appended to the file if exists + virtual io::ZeroCopyOutputStream* OpenForAppend(const string& filename); + + // Creates a ZeroCopyOutputStream which will insert code into the given file + // at the given insertion point. See plugin.proto (plugin.pb.h) for more + // information on insertion points. The default implementation + // assert-fails -- it exists only for backwards-compatibility. + // + // WARNING: This feature is currently EXPERIMENTAL and is subject to change. + virtual io::ZeroCopyOutputStream* OpenForInsert( + const string& filename, const string& insertion_point); + + // Returns a vector of FileDescriptors for all the files being compiled + // in this run. Useful for languages, such as Go, that treat files + // differently when compiled as a set rather than individually. + virtual void ListParsedFiles(vector* output); + + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(GeneratorContext); +}; + +// The type GeneratorContext was once called OutputDirectory. This typedef +// provides backward compatibility. +typedef GeneratorContext OutputDirectory; + +// Several code generators treat the parameter argument as holding a +// list of options separated by commas. This helper function parses +// a set of comma-delimited name/value pairs: e.g., +// "foo=bar,baz,qux=corge" +// parses to the pairs: +// ("foo", "bar"), ("baz", ""), ("qux", "corge") +extern void ParseGeneratorParameter(const string&, + vector >*); + +} // namespace compiler +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_COMPILER_CODE_GENERATOR_H__ diff --git a/kortex_gazebo/include/google/protobuf/compiler/command_line_interface.h b/kortex_gazebo/include/google/protobuf/compiler/command_line_interface.h new file mode 100644 index 00000000..47f28919 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/compiler/command_line_interface.h @@ -0,0 +1,378 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// Implements the Protocol Compiler front-end such that it may be reused by +// custom compilers written to support other languages. + +#ifndef GOOGLE_PROTOBUF_COMPILER_COMMAND_LINE_INTERFACE_H__ +#define GOOGLE_PROTOBUF_COMPILER_COMMAND_LINE_INTERFACE_H__ + +#include +#include +#include +#include +#include +#include + +namespace google { +namespace protobuf { + +class Descriptor; // descriptor.h +class DescriptorPool; // descriptor.h +class FileDescriptor; // descriptor.h +class FileDescriptorProto; // descriptor.pb.h +template class RepeatedPtrField; // repeated_field.h + +namespace compiler { + +class CodeGenerator; // code_generator.h +class GeneratorContext; // code_generator.h +class DiskSourceTree; // importer.h + +// This class implements the command-line interface to the protocol compiler. +// It is designed to make it very easy to create a custom protocol compiler +// supporting the languages of your choice. For example, if you wanted to +// create a custom protocol compiler binary which includes both the regular +// C++ support plus support for your own custom output "Foo", you would +// write a class "FooGenerator" which implements the CodeGenerator interface, +// then write a main() procedure like this: +// +// int main(int argc, char* argv[]) { +// google::protobuf::compiler::CommandLineInterface cli; +// +// // Support generation of C++ source and headers. +// google::protobuf::compiler::cpp::CppGenerator cpp_generator; +// cli.RegisterGenerator("--cpp_out", &cpp_generator, +// "Generate C++ source and header."); +// +// // Support generation of Foo code. +// FooGenerator foo_generator; +// cli.RegisterGenerator("--foo_out", &foo_generator, +// "Generate Foo file."); +// +// return cli.Run(argc, argv); +// } +// +// The compiler is invoked with syntax like: +// protoc --cpp_out=outdir --foo_out=outdir --proto_path=src src/foo.proto +// +// For a full description of the command-line syntax, invoke it with --help. +class LIBPROTOC_EXPORT CommandLineInterface { + public: + CommandLineInterface(); + ~CommandLineInterface(); + + // Register a code generator for a language. + // + // Parameters: + // * flag_name: The command-line flag used to specify an output file of + // this type. The name must start with a '-'. If the name is longer + // than one letter, it must start with two '-'s. + // * generator: The CodeGenerator which will be called to generate files + // of this type. + // * help_text: Text describing this flag in the --help output. + // + // Some generators accept extra parameters. You can specify this parameter + // on the command-line by placing it before the output directory, separated + // by a colon: + // protoc --foo_out=enable_bar:outdir + // The text before the colon is passed to CodeGenerator::Generate() as the + // "parameter". + void RegisterGenerator(const string& flag_name, + CodeGenerator* generator, + const string& help_text); + + // Register a code generator for a language. + // Besides flag_name you can specify another option_flag_name that could be + // used to pass extra parameters to the registered code generator. + // Suppose you have registered a generator by calling: + // command_line_interface.RegisterGenerator("--foo_out", "--foo_opt", ...) + // Then you could invoke the compiler with a command like: + // protoc --foo_out=enable_bar:outdir --foo_opt=enable_baz + // This will pass "enable_bar,enable_baz" as the parameter to the generator. + void RegisterGenerator(const string& flag_name, + const string& option_flag_name, + CodeGenerator* generator, + const string& help_text); + + // Enables "plugins". In this mode, if a command-line flag ends with "_out" + // but does not match any registered generator, the compiler will attempt to + // find a "plugin" to implement the generator. Plugins are just executables. + // They should live somewhere in the PATH. + // + // The compiler determines the executable name to search for by concatenating + // exe_name_prefix with the unrecognized flag name, removing "_out". So, for + // example, if exe_name_prefix is "protoc-" and you pass the flag --foo_out, + // the compiler will try to run the program "protoc-foo". + // + // The plugin program should implement the following usage: + // plugin [--out=OUTDIR] [--parameter=PARAMETER] PROTO_FILES < DESCRIPTORS + // --out indicates the output directory (as passed to the --foo_out + // parameter); if omitted, the current directory should be used. --parameter + // gives the generator parameter, if any was provided. The PROTO_FILES list + // the .proto files which were given on the compiler command-line; these are + // the files for which the plugin is expected to generate output code. + // Finally, DESCRIPTORS is an encoded FileDescriptorSet (as defined in + // descriptor.proto). This is piped to the plugin's stdin. The set will + // include descriptors for all the files listed in PROTO_FILES as well as + // all files that they import. The plugin MUST NOT attempt to read the + // PROTO_FILES directly -- it must use the FileDescriptorSet. + // + // The plugin should generate whatever files are necessary, as code generators + // normally do. It should write the names of all files it generates to + // stdout. The names should be relative to the output directory, NOT absolute + // names or relative to the current directory. If any errors occur, error + // messages should be written to stderr. If an error is fatal, the plugin + // should exit with a non-zero exit code. + void AllowPlugins(const string& exe_name_prefix); + + // Run the Protocol Compiler with the given command-line parameters. + // Returns the error code which should be returned by main(). + // + // It may not be safe to call Run() in a multi-threaded environment because + // it calls strerror(). I'm not sure why you'd want to do this anyway. + int Run(int argc, const char* const argv[]); + + // Call SetInputsAreCwdRelative(true) if the input files given on the command + // line should be interpreted relative to the proto import path specified + // using --proto_path or -I flags. Otherwise, input file names will be + // interpreted relative to the current working directory (or as absolute + // paths if they start with '/'), though they must still reside inside + // a directory given by --proto_path or the compiler will fail. The latter + // mode is generally more intuitive and easier to use, especially e.g. when + // defining implicit rules in Makefiles. + void SetInputsAreProtoPathRelative(bool enable) { + inputs_are_proto_path_relative_ = enable; + } + + // Provides some text which will be printed when the --version flag is + // used. The version of libprotoc will also be printed on the next line + // after this text. + void SetVersionInfo(const string& text) { + version_info_ = text; + } + + + private: + // ----------------------------------------------------------------- + + class ErrorPrinter; + class GeneratorContextImpl; + class MemoryOutputStream; + + // Clear state from previous Run(). + void Clear(); + + // Remaps each file in input_files_ so that it is relative to one of the + // directories in proto_path_. Returns false if an error occurred. This + // is only used if inputs_are_proto_path_relative_ is false. + bool MakeInputsBeProtoPathRelative( + DiskSourceTree* source_tree); + + // Return status for ParseArguments() and InterpretArgument(). + enum ParseArgumentStatus { + PARSE_ARGUMENT_DONE_AND_CONTINUE, + PARSE_ARGUMENT_DONE_AND_EXIT, + PARSE_ARGUMENT_FAIL + }; + + // Parse all command-line arguments. + ParseArgumentStatus ParseArguments(int argc, const char* const argv[]); + + // Parses a command-line argument into a name/value pair. Returns + // true if the next argument in the argv should be used as the value, + // false otherwise. + // + // Exmaples: + // "-Isrc/protos" -> + // name = "-I", value = "src/protos" + // "--cpp_out=src/foo.pb2.cc" -> + // name = "--cpp_out", value = "src/foo.pb2.cc" + // "foo.proto" -> + // name = "", value = "foo.proto" + bool ParseArgument(const char* arg, string* name, string* value); + + // Interprets arguments parsed with ParseArgument. + ParseArgumentStatus InterpretArgument(const string& name, + const string& value); + + // Print the --help text to stderr. + void PrintHelpText(); + + // Generate the given output file from the given input. + struct OutputDirective; // see below + bool GenerateOutput(const vector& parsed_files, + const OutputDirective& output_directive, + GeneratorContext* generator_context); + bool GeneratePluginOutput(const vector& parsed_files, + const string& plugin_name, + const string& parameter, + GeneratorContext* generator_context, + string* error); + + // Implements --encode and --decode. + bool EncodeOrDecode(const DescriptorPool* pool); + + // Implements the --descriptor_set_out option. + bool WriteDescriptorSet(const vector parsed_files); + + // Get all transitive dependencies of the given file (including the file + // itself), adding them to the given list of FileDescriptorProtos. The + // protos will be ordered such that every file is listed before any file that + // depends on it, so that you can call DescriptorPool::BuildFile() on them + // in order. Any files in *already_seen will not be added, and each file + // added will be inserted into *already_seen. If include_source_code_info is + // true then include the source code information in the FileDescriptorProtos. + static void GetTransitiveDependencies( + const FileDescriptor* file, + bool include_source_code_info, + set* already_seen, + RepeatedPtrField* output); + + // Implements the --print_free_field_numbers. This function prints free field + // numbers into stdout for the message and it's nested message types in + // post-order, i.e. nested types first. Printed range are left-right + // inclusive, i.e. [a, b]. + // + // Groups: + // For historical reasons, groups are considered to share the same + // field number space with the parent message, thus it will not print free + // field numbers for groups. The field numbers used in the groups are + // excluded in the free field numbers of the parent message. + // + // Extension Ranges: + // Extension ranges are considered ocuppied field numbers and they will not be + // listed as free numbers in the output. + void PrintFreeFieldNumbers(const Descriptor* descriptor); + + // ----------------------------------------------------------------- + + // The name of the executable as invoked (i.e. argv[0]). + string executable_name_; + + // Version info set with SetVersionInfo(). + string version_info_; + + // Registered generators. + struct GeneratorInfo { + string flag_name; + string option_flag_name; + CodeGenerator* generator; + string help_text; + }; + typedef map GeneratorMap; + GeneratorMap generators_by_flag_name_; + GeneratorMap generators_by_option_name_; + // A map from generator names to the parameters specified using the option + // flag. For example, if the user invokes the compiler with: + // protoc --foo_out=outputdir --foo_opt=enable_bar ... + // Then there will be an entry ("--foo_out", "enable_bar") in this map. + map generator_parameters_; + + // See AllowPlugins(). If this is empty, plugins aren't allowed. + string plugin_prefix_; + + // Maps specific plugin names to files. When executing a plugin, this map + // is searched first to find the plugin executable. If not found here, the + // PATH (or other OS-specific search strategy) is searched. + map plugins_; + + // Stuff parsed from command line. + enum Mode { + MODE_COMPILE, // Normal mode: parse .proto files and compile them. + MODE_ENCODE, // --encode: read text from stdin, write binary to stdout. + MODE_DECODE, // --decode: read binary from stdin, write text to stdout. + MODE_PRINT, // Print mode: print info of the given .proto files and exit. + }; + + Mode mode_; + + enum PrintMode { + PRINT_NONE, // Not in MODE_PRINT + PRINT_FREE_FIELDS, // --print_free_fields + }; + + PrintMode print_mode_; + + enum ErrorFormat { + ERROR_FORMAT_GCC, // GCC error output format (default). + ERROR_FORMAT_MSVS // Visual Studio output (--error_format=msvs). + }; + + ErrorFormat error_format_; + + vector > proto_path_; // Search path for proto files. + vector input_files_; // Names of the input proto files. + + // output_directives_ lists all the files we are supposed to output and what + // generator to use for each. + struct OutputDirective { + string name; // E.g. "--foo_out" + CodeGenerator* generator; // NULL for plugins + string parameter; + string output_location; + }; + vector output_directives_; + + // When using --encode or --decode, this names the type we are encoding or + // decoding. (Empty string indicates --decode_raw.) + string codec_type_; + + // If --descriptor_set_out was given, this is the filename to which the + // FileDescriptorSet should be written. Otherwise, empty. + string descriptor_set_name_; + + // True if --include_imports was given, meaning that we should + // write all transitive dependencies to the DescriptorSet. Otherwise, only + // the .proto files listed on the command-line are added. + bool imports_in_descriptor_set_; + + // True if --include_source_info was given, meaning that we should not strip + // SourceCodeInfo from the DescriptorSet. + bool source_info_in_descriptor_set_; + + // Was the --disallow_services flag used? + bool disallow_services_; + + // See SetInputsAreProtoPathRelative(). + bool inputs_are_proto_path_relative_; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CommandLineInterface); +}; + +} // namespace compiler +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_COMPILER_COMMAND_LINE_INTERFACE_H__ diff --git a/kortex_gazebo/include/google/protobuf/compiler/cpp/cpp_generator.h b/kortex_gazebo/include/google/protobuf/compiler/cpp/cpp_generator.h new file mode 100644 index 00000000..3d517cf4 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/compiler/cpp/cpp_generator.h @@ -0,0 +1,72 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// Generates C++ code for a given .proto file. + +#ifndef GOOGLE_PROTOBUF_COMPILER_CPP_GENERATOR_H__ +#define GOOGLE_PROTOBUF_COMPILER_CPP_GENERATOR_H__ + +#include +#include + +namespace google { +namespace protobuf { +namespace compiler { +namespace cpp { + +// CodeGenerator implementation which generates a C++ source file and +// header. If you create your own protocol compiler binary and you want +// it to support C++ output, you can do so by registering an instance of this +// CodeGenerator with the CommandLineInterface in your main() function. +class LIBPROTOC_EXPORT CppGenerator : public CodeGenerator { + public: + CppGenerator(); + ~CppGenerator(); + + // implements CodeGenerator ---------------------------------------- + bool Generate(const FileDescriptor* file, + const string& parameter, + GeneratorContext* generator_context, + string* error) const; + + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CppGenerator); +}; + +} // namespace cpp +} // namespace compiler +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_COMPILER_CPP_GENERATOR_H__ diff --git a/kortex_gazebo/include/google/protobuf/compiler/importer.h b/kortex_gazebo/include/google/protobuf/compiler/importer.h new file mode 100644 index 00000000..f010fd08 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/compiler/importer.h @@ -0,0 +1,317 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// This file is the public interface to the .proto file parser. + +#ifndef GOOGLE_PROTOBUF_COMPILER_IMPORTER_H__ +#define GOOGLE_PROTOBUF_COMPILER_IMPORTER_H__ + +#include +#include +#include +#include +#include +#include +#include + +namespace google { +namespace protobuf { + +namespace io { class ZeroCopyInputStream; } + +namespace compiler { + +// Defined in this file. +class Importer; +class MultiFileErrorCollector; +class SourceTree; +class DiskSourceTree; + +// TODO(kenton): Move all SourceTree stuff to a separate file? + +// An implementation of DescriptorDatabase which loads files from a SourceTree +// and parses them. +// +// Note: This class is not thread-safe since it maintains a table of source +// code locations for error reporting. However, when a DescriptorPool wraps +// a DescriptorDatabase, it uses mutex locking to make sure only one method +// of the database is called at a time, even if the DescriptorPool is used +// from multiple threads. Therefore, there is only a problem if you create +// multiple DescriptorPools wrapping the same SourceTreeDescriptorDatabase +// and use them from multiple threads. +// +// Note: This class does not implement FindFileContainingSymbol() or +// FindFileContainingExtension(); these will always return false. +class LIBPROTOBUF_EXPORT SourceTreeDescriptorDatabase : public DescriptorDatabase { + public: + SourceTreeDescriptorDatabase(SourceTree* source_tree); + ~SourceTreeDescriptorDatabase(); + + // Instructs the SourceTreeDescriptorDatabase to report any parse errors + // to the given MultiFileErrorCollector. This should be called before + // parsing. error_collector must remain valid until either this method + // is called again or the SourceTreeDescriptorDatabase is destroyed. + void RecordErrorsTo(MultiFileErrorCollector* error_collector) { + error_collector_ = error_collector; + } + + // Gets a DescriptorPool::ErrorCollector which records errors to the + // MultiFileErrorCollector specified with RecordErrorsTo(). This collector + // has the ability to determine exact line and column numbers of errors + // from the information given to it by the DescriptorPool. + DescriptorPool::ErrorCollector* GetValidationErrorCollector() { + using_validation_error_collector_ = true; + return &validation_error_collector_; + } + + // implements DescriptorDatabase ----------------------------------- + bool FindFileByName(const string& filename, FileDescriptorProto* output); + bool FindFileContainingSymbol(const string& symbol_name, + FileDescriptorProto* output); + bool FindFileContainingExtension(const string& containing_type, + int field_number, + FileDescriptorProto* output); + + private: + class SingleFileErrorCollector; + + SourceTree* source_tree_; + MultiFileErrorCollector* error_collector_; + + class LIBPROTOBUF_EXPORT ValidationErrorCollector : public DescriptorPool::ErrorCollector { + public: + ValidationErrorCollector(SourceTreeDescriptorDatabase* owner); + ~ValidationErrorCollector(); + + // implements ErrorCollector --------------------------------------- + void AddError(const string& filename, + const string& element_name, + const Message* descriptor, + ErrorLocation location, + const string& message); + + private: + SourceTreeDescriptorDatabase* owner_; + }; + friend class ValidationErrorCollector; + + bool using_validation_error_collector_; + SourceLocationTable source_locations_; + ValidationErrorCollector validation_error_collector_; +}; + +// Simple interface for parsing .proto files. This wraps the process +// of opening the file, parsing it with a Parser, recursively parsing all its +// imports, and then cross-linking the results to produce a FileDescriptor. +// +// This is really just a thin wrapper around SourceTreeDescriptorDatabase. +// You may find that SourceTreeDescriptorDatabase is more flexible. +// +// TODO(kenton): I feel like this class is not well-named. +class LIBPROTOBUF_EXPORT Importer { + public: + Importer(SourceTree* source_tree, + MultiFileErrorCollector* error_collector); + ~Importer(); + + // Import the given file and build a FileDescriptor representing it. If + // the file is already in the DescriptorPool, the existing FileDescriptor + // will be returned. The FileDescriptor is property of the DescriptorPool, + // and will remain valid until it is destroyed. If any errors occur, they + // will be reported using the error collector and Import() will return NULL. + // + // A particular Importer object will only report errors for a particular + // file once. All future attempts to import the same file will return NULL + // without reporting any errors. The idea is that you might want to import + // a lot of files without seeing the same errors over and over again. If + // you want to see errors for the same files repeatedly, you can use a + // separate Importer object to import each one (but use the same + // DescriptorPool so that they can be cross-linked). + const FileDescriptor* Import(const string& filename); + + // The DescriptorPool in which all imported FileDescriptors and their + // contents are stored. + inline const DescriptorPool* pool() const { + return &pool_; + } + + void AddUnusedImportTrackFile(const string& file_name); + void ClearUnusedImportTrackFiles(); + + private: + SourceTreeDescriptorDatabase database_; + DescriptorPool pool_; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Importer); +}; + +// If the importer encounters problems while trying to import the proto files, +// it reports them to a MultiFileErrorCollector. +class LIBPROTOBUF_EXPORT MultiFileErrorCollector { + public: + inline MultiFileErrorCollector() {} + virtual ~MultiFileErrorCollector(); + + // Line and column numbers are zero-based. A line number of -1 indicates + // an error with the entire file (e.g. "not found"). + virtual void AddError(const string& filename, int line, int column, + const string& message) = 0; + + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MultiFileErrorCollector); +}; + +// Abstract interface which represents a directory tree containing proto files. +// Used by the default implementation of Importer to resolve import statements +// Most users will probably want to use the DiskSourceTree implementation, +// below. +class LIBPROTOBUF_EXPORT SourceTree { + public: + inline SourceTree() {} + virtual ~SourceTree(); + + // Open the given file and return a stream that reads it, or NULL if not + // found. The caller takes ownership of the returned object. The filename + // must be a path relative to the root of the source tree and must not + // contain "." or ".." components. + virtual io::ZeroCopyInputStream* Open(const string& filename) = 0; + + // If Open() returns NULL, calling this method immediately will return an + // description of the error. + // Subclasses should implement this method and return a meaningful value for + // better error reporting. + // TODO(xiaofeng): change this to a pure virtual function. + virtual string GetLastErrorMessage(); + + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(SourceTree); +}; + +// An implementation of SourceTree which loads files from locations on disk. +// Multiple mappings can be set up to map locations in the DiskSourceTree to +// locations in the physical filesystem. +class LIBPROTOBUF_EXPORT DiskSourceTree : public SourceTree { + public: + DiskSourceTree(); + ~DiskSourceTree(); + + // Map a path on disk to a location in the SourceTree. The path may be + // either a file or a directory. If it is a directory, the entire tree + // under it will be mapped to the given virtual location. To map a directory + // to the root of the source tree, pass an empty string for virtual_path. + // + // If multiple mapped paths apply when opening a file, they will be searched + // in order. For example, if you do: + // MapPath("bar", "foo/bar"); + // MapPath("", "baz"); + // and then you do: + // Open("bar/qux"); + // the DiskSourceTree will first try to open foo/bar/qux, then baz/bar/qux, + // returning the first one that opens successfuly. + // + // disk_path may be an absolute path or relative to the current directory, + // just like a path you'd pass to open(). + void MapPath(const string& virtual_path, const string& disk_path); + + // Return type for DiskFileToVirtualFile(). + enum DiskFileToVirtualFileResult { + SUCCESS, + SHADOWED, + CANNOT_OPEN, + NO_MAPPING + }; + + // Given a path to a file on disk, find a virtual path mapping to that + // file. The first mapping created with MapPath() whose disk_path contains + // the filename is used. However, that virtual path may not actually be + // usable to open the given file. Possible return values are: + // * SUCCESS: The mapping was found. *virtual_file is filled in so that + // calling Open(*virtual_file) will open the file named by disk_file. + // * SHADOWED: A mapping was found, but using Open() to open this virtual + // path will end up returning some different file. This is because some + // other mapping with a higher precedence also matches this virtual path + // and maps it to a different file that exists on disk. *virtual_file + // is filled in as it would be in the SUCCESS case. *shadowing_disk_file + // is filled in with the disk path of the file which would be opened if + // you were to call Open(*virtual_file). + // * CANNOT_OPEN: The mapping was found and was not shadowed, but the + // file specified cannot be opened. When this value is returned, + // errno will indicate the reason the file cannot be opened. *virtual_file + // will be set to the virtual path as in the SUCCESS case, even though + // it is not useful. + // * NO_MAPPING: Indicates that no mapping was found which contains this + // file. + DiskFileToVirtualFileResult + DiskFileToVirtualFile(const string& disk_file, + string* virtual_file, + string* shadowing_disk_file); + + // Given a virtual path, find the path to the file on disk. + // Return true and update disk_file with the on-disk path if the file exists. + // Return false and leave disk_file untouched if the file doesn't exist. + bool VirtualFileToDiskFile(const string& virtual_file, string* disk_file); + + // implements SourceTree ------------------------------------------- + virtual io::ZeroCopyInputStream* Open(const string& filename); + + virtual string GetLastErrorMessage(); + + private: + struct Mapping { + string virtual_path; + string disk_path; + + inline Mapping(const string& virtual_path_param, + const string& disk_path_param) + : virtual_path(virtual_path_param), disk_path(disk_path_param) {} + }; + vector mappings_; + string last_error_message_; + + // Like Open(), but returns the on-disk path in disk_file if disk_file is + // non-NULL and the file could be successfully opened. + io::ZeroCopyInputStream* OpenVirtualFile(const string& virtual_file, + string* disk_file); + + // Like Open() but given the actual on-disk path. + io::ZeroCopyInputStream* OpenDiskFile(const string& filename); + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(DiskSourceTree); +}; + +} // namespace compiler +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_COMPILER_IMPORTER_H__ diff --git a/kortex_gazebo/include/google/protobuf/compiler/java/java_generator.h b/kortex_gazebo/include/google/protobuf/compiler/java/java_generator.h new file mode 100644 index 00000000..47f76be9 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/compiler/java/java_generator.h @@ -0,0 +1,72 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// Generates Java code for a given .proto file. + +#ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_GENERATOR_H__ +#define GOOGLE_PROTOBUF_COMPILER_JAVA_GENERATOR_H__ + +#include +#include + +namespace google { +namespace protobuf { +namespace compiler { +namespace java { + +// CodeGenerator implementation which generates Java code. If you create your +// own protocol compiler binary and you want it to support Java output, you +// can do so by registering an instance of this CodeGenerator with the +// CommandLineInterface in your main() function. +class LIBPROTOC_EXPORT JavaGenerator : public CodeGenerator { + public: + JavaGenerator(); + ~JavaGenerator(); + + // implements CodeGenerator ---------------------------------------- + bool Generate(const FileDescriptor* file, + const string& parameter, + GeneratorContext* context, + string* error) const; + + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(JavaGenerator); +}; + +} // namespace java +} // namespace compiler +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_COMPILER_JAVA_GENERATOR_H__ diff --git a/kortex_gazebo/include/google/protobuf/compiler/parser.h b/kortex_gazebo/include/google/protobuf/compiler/parser.h new file mode 100644 index 00000000..d0a2359b --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/compiler/parser.h @@ -0,0 +1,522 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// Implements parsing of .proto files to FileDescriptorProtos. + +#ifndef GOOGLE_PROTOBUF_COMPILER_PARSER_H__ +#define GOOGLE_PROTOBUF_COMPILER_PARSER_H__ + +#include +#include +#include +#include +#include +#include +#include + +namespace google { +namespace protobuf { class Message; } + +namespace protobuf { +namespace compiler { + +// Defined in this file. +class Parser; +class SourceLocationTable; + +// Implements parsing of protocol definitions (such as .proto files). +// +// Note that most users will be more interested in the Importer class. +// Parser is a lower-level class which simply converts a single .proto file +// to a FileDescriptorProto. It does not resolve import directives or perform +// many other kinds of validation needed to construct a complete +// FileDescriptor. +class LIBPROTOBUF_EXPORT Parser { + public: + Parser(); + ~Parser(); + + // Parse the entire input and construct a FileDescriptorProto representing + // it. Returns true if no errors occurred, false otherwise. + bool Parse(io::Tokenizer* input, FileDescriptorProto* file); + + // Optional fetaures: + + // DEPRECATED: New code should use the SourceCodeInfo embedded in the + // FileDescriptorProto. + // + // Requests that locations of certain definitions be recorded to the given + // SourceLocationTable while parsing. This can be used to look up exact line + // and column numbers for errors reported by DescriptorPool during validation. + // Set to NULL (the default) to discard source location information. + void RecordSourceLocationsTo(SourceLocationTable* location_table) { + source_location_table_ = location_table; + } + + // Requests that errors be recorded to the given ErrorCollector while + // parsing. Set to NULL (the default) to discard error messages. + void RecordErrorsTo(io::ErrorCollector* error_collector) { + error_collector_ = error_collector; + } + + // Returns the identifier used in the "syntax = " declaration, if one was + // seen during the last call to Parse(), or the empty string otherwise. + const string& GetSyntaxIdentifier() { return syntax_identifier_; } + + // If set true, input files will be required to begin with a syntax + // identifier. Otherwise, files may omit this. If a syntax identifier + // is provided, it must be 'syntax = "proto2";' and must appear at the + // top of this file regardless of whether or not it was required. + void SetRequireSyntaxIdentifier(bool value) { + require_syntax_identifier_ = value; + } + + // Call SetStopAfterSyntaxIdentifier(true) to tell the parser to stop + // parsing as soon as it has seen the syntax identifier, or lack thereof. + // This is useful for quickly identifying the syntax of the file without + // parsing the whole thing. If this is enabled, no error will be recorded + // if the syntax identifier is something other than "proto2" (since + // presumably the caller intends to deal with that), but other kinds of + // errors (e.g. parse errors) will still be reported. When this is enabled, + // you may pass a NULL FileDescriptorProto to Parse(). + void SetStopAfterSyntaxIdentifier(bool value) { + stop_after_syntax_identifier_ = value; + } + + private: + class LocationRecorder; + + // ================================================================= + // Error recovery helpers + + // Consume the rest of the current statement. This consumes tokens + // until it sees one of: + // ';' Consumes the token and returns. + // '{' Consumes the brace then calls SkipRestOfBlock(). + // '}' Returns without consuming. + // EOF Returns (can't consume). + // The Parser often calls SkipStatement() after encountering a syntax + // error. This allows it to go on parsing the following lines, allowing + // it to report more than just one error in the file. + void SkipStatement(); + + // Consume the rest of the current block, including nested blocks, + // ending after the closing '}' is encountered and consumed, or at EOF. + void SkipRestOfBlock(); + + // ----------------------------------------------------------------- + // Single-token consuming helpers + // + // These make parsing code more readable. + + // True if the current token is TYPE_END. + inline bool AtEnd(); + + // True if the next token matches the given text. + inline bool LookingAt(const char* text); + // True if the next token is of the given type. + inline bool LookingAtType(io::Tokenizer::TokenType token_type); + + // If the next token exactly matches the text given, consume it and return + // true. Otherwise, return false without logging an error. + bool TryConsume(const char* text); + + // These attempt to read some kind of token from the input. If successful, + // they return true. Otherwise they return false and add the given error + // to the error list. + + // Consume a token with the exact text given. + bool Consume(const char* text, const char* error); + // Same as above, but automatically generates the error "Expected \"text\".", + // where "text" is the expected token text. + bool Consume(const char* text); + // Consume a token of type IDENTIFIER and store its text in "output". + bool ConsumeIdentifier(string* output, const char* error); + // Consume an integer and store its value in "output". + bool ConsumeInteger(int* output, const char* error); + // Consume a signed integer and store its value in "output". + bool ConsumeSignedInteger(int* output, const char* error); + // Consume a 64-bit integer and store its value in "output". If the value + // is greater than max_value, an error will be reported. + bool ConsumeInteger64(uint64 max_value, uint64* output, const char* error); + // Consume a number and store its value in "output". This will accept + // tokens of either INTEGER or FLOAT type. + bool ConsumeNumber(double* output, const char* error); + // Consume a string literal and store its (unescaped) value in "output". + bool ConsumeString(string* output, const char* error); + + // Consume a token representing the end of the statement. Comments between + // this token and the next will be harvested for documentation. The given + // LocationRecorder should refer to the declaration that was just parsed; + // it will be populated with these comments. + // + // TODO(kenton): The LocationRecorder is const because historically locations + // have been passed around by const reference, for no particularly good + // reason. We should probably go through and change them all to mutable + // pointer to make this more intuitive. + bool TryConsumeEndOfDeclaration(const char* text, + const LocationRecorder* location); + bool ConsumeEndOfDeclaration(const char* text, + const LocationRecorder* location); + + // ----------------------------------------------------------------- + // Error logging helpers + + // Invokes error_collector_->AddError(), if error_collector_ is not NULL. + void AddError(int line, int column, const string& error); + + // Invokes error_collector_->AddError() with the line and column number + // of the current token. + void AddError(const string& error); + + // Records a location in the SourceCodeInfo.location table (see + // descriptor.proto). We use RAII to ensure that the start and end locations + // are recorded -- the constructor records the start location and the + // destructor records the end location. Since the parser is + // recursive-descent, this works out beautifully. + class LIBPROTOBUF_EXPORT LocationRecorder { + public: + // Construct the file's "root" location. + LocationRecorder(Parser* parser); + + // Construct a location that represents a declaration nested within the + // given parent. E.g. a field's location is nested within the location + // for a message type. The parent's path will be copied, so you should + // call AddPath() only to add the path components leading from the parent + // to the child (as opposed to leading from the root to the child). + LocationRecorder(const LocationRecorder& parent); + + // Convenience constructors that call AddPath() one or two times. + LocationRecorder(const LocationRecorder& parent, int path1); + LocationRecorder(const LocationRecorder& parent, int path1, int path2); + + ~LocationRecorder(); + + // Add a path component. See SourceCodeInfo.Location.path in + // descriptor.proto. + void AddPath(int path_component); + + // By default the location is considered to start at the current token at + // the time the LocationRecorder is created. StartAt() sets the start + // location to the given token instead. + void StartAt(const io::Tokenizer::Token& token); + + // Start at the same location as some other LocationRecorder. + void StartAt(const LocationRecorder& other); + + // By default the location is considered to end at the previous token at + // the time the LocationRecorder is destroyed. EndAt() sets the end + // location to the given token instead. + void EndAt(const io::Tokenizer::Token& token); + + // Records the start point of this location to the SourceLocationTable that + // was passed to RecordSourceLocationsTo(), if any. SourceLocationTable + // is an older way of keeping track of source locations which is still + // used in some places. + void RecordLegacyLocation(const Message* descriptor, + DescriptorPool::ErrorCollector::ErrorLocation location); + + // Attaches leading and trailing comments to the location. The two strings + // will be swapped into place, so after this is called *leading and + // *trailing will be empty. + // + // TODO(kenton): See comment on TryConsumeEndOfDeclaration(), above, for + // why this is const. + void AttachComments(string* leading, string* trailing) const; + + private: + Parser* parser_; + SourceCodeInfo::Location* location_; + + void Init(const LocationRecorder& parent); + }; + + // ================================================================= + // Parsers for various language constructs + + // Parses the "syntax = \"proto2\";" line at the top of the file. Returns + // false if it failed to parse or if the syntax identifier was not + // recognized. + bool ParseSyntaxIdentifier(); + + // These methods parse various individual bits of code. They return + // false if they completely fail to parse the construct. In this case, + // it is probably necessary to skip the rest of the statement to recover. + // However, if these methods return true, it does NOT mean that there + // were no errors; only that there were no *syntax* errors. For instance, + // if a service method is defined using proper syntax but uses a primitive + // type as its input or output, ParseMethodField() still returns true + // and only reports the error by calling AddError(). In practice, this + // makes logic much simpler for the caller. + + // Parse a top-level message, enum, service, etc. + bool ParseTopLevelStatement(FileDescriptorProto* file, + const LocationRecorder& root_location); + + // Parse various language high-level language construrcts. + bool ParseMessageDefinition(DescriptorProto* message, + const LocationRecorder& message_location, + const FileDescriptorProto* containing_file); + bool ParseEnumDefinition(EnumDescriptorProto* enum_type, + const LocationRecorder& enum_location, + const FileDescriptorProto* containing_file); + bool ParseServiceDefinition(ServiceDescriptorProto* service, + const LocationRecorder& service_location, + const FileDescriptorProto* containing_file); + bool ParsePackage(FileDescriptorProto* file, + const LocationRecorder& root_location, + const FileDescriptorProto* containing_file); + bool ParseImport(RepeatedPtrField* dependency, + RepeatedField* public_dependency, + RepeatedField* weak_dependency, + const LocationRecorder& root_location, + const FileDescriptorProto* containing_file); + bool ParseOption(Message* options, + const LocationRecorder& options_location, + const FileDescriptorProto* containing_file); + + // These methods parse the contents of a message, enum, or service type and + // add them to the given object. They consume the entire block including + // the beginning and ending brace. + bool ParseMessageBlock(DescriptorProto* message, + const LocationRecorder& message_location, + const FileDescriptorProto* containing_file); + bool ParseEnumBlock(EnumDescriptorProto* enum_type, + const LocationRecorder& enum_location, + const FileDescriptorProto* containing_file); + bool ParseServiceBlock(ServiceDescriptorProto* service, + const LocationRecorder& service_location, + const FileDescriptorProto* containing_file); + + // Parse one statement within a message, enum, or service block, inclunding + // final semicolon. + bool ParseMessageStatement(DescriptorProto* message, + const LocationRecorder& message_location, + const FileDescriptorProto* containing_file); + bool ParseEnumStatement(EnumDescriptorProto* message, + const LocationRecorder& enum_location, + const FileDescriptorProto* containing_file); + bool ParseServiceStatement(ServiceDescriptorProto* message, + const LocationRecorder& service_location, + const FileDescriptorProto* containing_file); + + // Parse a field of a message. If the field is a group, its type will be + // added to "messages". + // + // parent_location and location_field_number_for_nested_type are needed when + // parsing groups -- we need to generate a nested message type within the + // parent and record its location accordingly. Since the parent could be + // either a FileDescriptorProto or a DescriptorProto, we must pass in the + // correct field number to use. + bool ParseMessageField(FieldDescriptorProto* field, + RepeatedPtrField* messages, + const LocationRecorder& parent_location, + int location_field_number_for_nested_type, + const LocationRecorder& field_location, + const FileDescriptorProto* containing_file); + + // Like ParseMessageField() but expects the label has already been filled in + // by the caller. + bool ParseMessageFieldNoLabel(FieldDescriptorProto* field, + RepeatedPtrField* messages, + const LocationRecorder& parent_location, + int location_field_number_for_nested_type, + const LocationRecorder& field_location, + const FileDescriptorProto* containing_file); + + // Parse an "extensions" declaration. + bool ParseExtensions(DescriptorProto* message, + const LocationRecorder& extensions_location, + const FileDescriptorProto* containing_file); + + // Parse an "extend" declaration. (See also comments for + // ParseMessageField().) + bool ParseExtend(RepeatedPtrField* extensions, + RepeatedPtrField* messages, + const LocationRecorder& parent_location, + int location_field_number_for_nested_type, + const LocationRecorder& extend_location, + const FileDescriptorProto* containing_file); + + // Parse a "oneof" declaration. The caller is responsible for setting + // oneof_decl->label() since it will have had to parse the label before it + // knew it was parsing a oneof. + bool ParseOneof(OneofDescriptorProto* oneof_decl, + DescriptorProto* containing_type, + int oneof_index, + const LocationRecorder& oneof_location, + const LocationRecorder& containing_type_location, + const FileDescriptorProto* containing_file); + + // Parse a single enum value within an enum block. + bool ParseEnumConstant(EnumValueDescriptorProto* enum_value, + const LocationRecorder& enum_value_location, + const FileDescriptorProto* containing_file); + + // Parse enum constant options, i.e. the list in square brackets at the end + // of the enum constant value definition. + bool ParseEnumConstantOptions(EnumValueDescriptorProto* value, + const LocationRecorder& enum_value_location, + const FileDescriptorProto* containing_file); + + // Parse a single method within a service definition. + bool ParseServiceMethod(MethodDescriptorProto* method, + const LocationRecorder& method_location, + const FileDescriptorProto* containing_file); + + + // Parse options of a single method or stream. + bool ParseOptions(const LocationRecorder& parent_location, + const FileDescriptorProto* containing_file, + const int optionsFieldNumber, + Message* mutable_options); + + // Parse "required", "optional", or "repeated" and fill in "label" + // with the value. + bool ParseLabel(FieldDescriptorProto::Label* label, + const FileDescriptorProto* containing_file); + + // Parse a type name and fill in "type" (if it is a primitive) or + // "type_name" (if it is not) with the type parsed. + bool ParseType(FieldDescriptorProto::Type* type, + string* type_name); + // Parse a user-defined type and fill in "type_name" with the name. + // If a primitive type is named, it is treated as an error. + bool ParseUserDefinedType(string* type_name); + + // Parses field options, i.e. the stuff in square brackets at the end + // of a field definition. Also parses default value. + bool ParseFieldOptions(FieldDescriptorProto* field, + const LocationRecorder& field_location, + const FileDescriptorProto* containing_file); + + // Parse the "default" option. This needs special handling because its + // type is the field's type. + bool ParseDefaultAssignment(FieldDescriptorProto* field, + const LocationRecorder& field_location, + const FileDescriptorProto* containing_file); + + enum OptionStyle { + OPTION_ASSIGNMENT, // just "name = value" + OPTION_STATEMENT // "option name = value;" + }; + + // Parse a single option name/value pair, e.g. "ctype = CORD". The name + // identifies a field of the given Message, and the value of that field + // is set to the parsed value. + bool ParseOption(Message* options, + const LocationRecorder& options_location, + const FileDescriptorProto* containing_file, + OptionStyle style); + + // Parses a single part of a multipart option name. A multipart name consists + // of names separated by dots. Each name is either an identifier or a series + // of identifiers separated by dots and enclosed in parentheses. E.g., + // "foo.(bar.baz).qux". + bool ParseOptionNamePart(UninterpretedOption* uninterpreted_option, + const LocationRecorder& part_location, + const FileDescriptorProto* containing_file); + + // Parses a string surrounded by balanced braces. Strips off the outer + // braces and stores the enclosed string in *value. + // E.g., + // { foo } *value gets 'foo' + // { foo { bar: box } } *value gets 'foo { bar: box }' + // {} *value gets '' + // + // REQUIRES: LookingAt("{") + // When finished successfully, we are looking at the first token past + // the ending brace. + bool ParseUninterpretedBlock(string* value); + + // ================================================================= + + io::Tokenizer* input_; + io::ErrorCollector* error_collector_; + SourceCodeInfo* source_code_info_; + SourceLocationTable* source_location_table_; // legacy + bool had_errors_; + bool require_syntax_identifier_; + bool stop_after_syntax_identifier_; + string syntax_identifier_; + + // Leading doc comments for the next declaration. These are not complete + // yet; use ConsumeEndOfDeclaration() to get the complete comments. + string upcoming_doc_comments_; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Parser); +}; + +// A table mapping (descriptor, ErrorLocation) pairs -- as reported by +// DescriptorPool when validating descriptors -- to line and column numbers +// within the original source code. +// +// This is semi-obsolete: FileDescriptorProto.source_code_info now contains +// far more complete information about source locations. However, as of this +// writing you still need to use SourceLocationTable when integrating with +// DescriptorPool. +class LIBPROTOBUF_EXPORT SourceLocationTable { + public: + SourceLocationTable(); + ~SourceLocationTable(); + + // Finds the precise location of the given error and fills in *line and + // *column with the line and column numbers. If not found, sets *line to + // -1 and *column to 0 (since line = -1 is used to mean "error has no exact + // location" in the ErrorCollector interface). Returns true if found, false + // otherwise. + bool Find(const Message* descriptor, + DescriptorPool::ErrorCollector::ErrorLocation location, + int* line, int* column) const; + + // Adds a location to the table. + void Add(const Message* descriptor, + DescriptorPool::ErrorCollector::ErrorLocation location, + int line, int column); + + // Clears the contents of the table. + void Clear(); + + private: + typedef map< + pair, + pair > LocationMap; + LocationMap location_map_; +}; + +} // namespace compiler +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_COMPILER_PARSER_H__ diff --git a/kortex_gazebo/include/google/protobuf/compiler/plugin.h b/kortex_gazebo/include/google/protobuf/compiler/plugin.h new file mode 100644 index 00000000..679f9bdb --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/compiler/plugin.h @@ -0,0 +1,72 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// +// Front-end for protoc code generator plugins written in C++. +// +// To implement a protoc plugin in C++, simply write an implementation of +// CodeGenerator, then create a main() function like: +// int main(int argc, char* argv[]) { +// MyCodeGenerator generator; +// return google::protobuf::compiler::PluginMain(argc, argv, &generator); +// } +// You must link your plugin against libprotobuf and libprotoc. +// +// To get protoc to use the plugin, do one of the following: +// * Place the plugin binary somewhere in the PATH and give it the name +// "protoc-gen-NAME" (replacing "NAME" with the name of your plugin). If you +// then invoke protoc with the parameter --NAME_out=OUT_DIR (again, replace +// "NAME" with your plugin's name), protoc will invoke your plugin to generate +// the output, which will be placed in OUT_DIR. +// * Place the plugin binary anywhere, with any name, and pass the --plugin +// parameter to protoc to direct it to your plugin like so: +// protoc --plugin=protoc-gen-NAME=path/to/mybinary --NAME_out=OUT_DIR +// On Windows, make sure to include the .exe suffix: +// protoc --plugin=protoc-gen-NAME=path/to/mybinary.exe --NAME_out=OUT_DIR + +#ifndef GOOGLE_PROTOBUF_COMPILER_PLUGIN_H__ +#define GOOGLE_PROTOBUF_COMPILER_PLUGIN_H__ + +#include +namespace google { +namespace protobuf { +namespace compiler { + +class CodeGenerator; // code_generator.h + +// Implements main() for a protoc plugin exposing the given code generator. +LIBPROTOC_EXPORT int PluginMain(int argc, char* argv[], const CodeGenerator* generator); + +} // namespace compiler +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_COMPILER_PLUGIN_H__ diff --git a/kortex_gazebo/include/google/protobuf/compiler/plugin.pb.h b/kortex_gazebo/include/google/protobuf/compiler/plugin.pb.h new file mode 100644 index 00000000..65634da4 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/compiler/plugin.pb.h @@ -0,0 +1,897 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/protobuf/compiler/plugin.proto + +#ifndef PROTOBUF_google_2fprotobuf_2fcompiler_2fplugin_2eproto__INCLUDED +#define PROTOBUF_google_2fprotobuf_2fcompiler_2fplugin_2eproto__INCLUDED + +#include + +#include + +#if GOOGLE_PROTOBUF_VERSION < 2006000 +#error This file was generated by a newer version of protoc which is +#error incompatible with your Protocol Buffer headers. Please update +#error your headers. +#endif +#if 2006001 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION +#error This file was generated by an older version of protoc which is +#error incompatible with your Protocol Buffer headers. Please +#error regenerate this file with a newer version of protoc. +#endif + +#include +#include +#include +#include +#include +#include "google/protobuf/descriptor.pb.h" +// @@protoc_insertion_point(includes) + +namespace google { +namespace protobuf { +namespace compiler { + +// Internal implementation detail -- do not call these. +void LIBPROTOC_EXPORT protobuf_AddDesc_google_2fprotobuf_2fcompiler_2fplugin_2eproto(); +void protobuf_AssignDesc_google_2fprotobuf_2fcompiler_2fplugin_2eproto(); +void protobuf_ShutdownFile_google_2fprotobuf_2fcompiler_2fplugin_2eproto(); + +class CodeGeneratorRequest; +class CodeGeneratorResponse; +class CodeGeneratorResponse_File; + +// =================================================================== + +class LIBPROTOC_EXPORT CodeGeneratorRequest : public ::google::protobuf::Message { + public: + CodeGeneratorRequest(); + virtual ~CodeGeneratorRequest(); + + CodeGeneratorRequest(const CodeGeneratorRequest& from); + + inline CodeGeneratorRequest& operator=(const CodeGeneratorRequest& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const CodeGeneratorRequest& default_instance(); + + void Swap(CodeGeneratorRequest* other); + + // implements Message ---------------------------------------------- + + CodeGeneratorRequest* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const CodeGeneratorRequest& from); + void MergeFrom(const CodeGeneratorRequest& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // repeated string file_to_generate = 1; + inline int file_to_generate_size() const; + inline void clear_file_to_generate(); + static const int kFileToGenerateFieldNumber = 1; + inline const ::std::string& file_to_generate(int index) const; + inline ::std::string* mutable_file_to_generate(int index); + inline void set_file_to_generate(int index, const ::std::string& value); + inline void set_file_to_generate(int index, const char* value); + inline void set_file_to_generate(int index, const char* value, size_t size); + inline ::std::string* add_file_to_generate(); + inline void add_file_to_generate(const ::std::string& value); + inline void add_file_to_generate(const char* value); + inline void add_file_to_generate(const char* value, size_t size); + inline const ::google::protobuf::RepeatedPtrField< ::std::string>& file_to_generate() const; + inline ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_file_to_generate(); + + // optional string parameter = 2; + inline bool has_parameter() const; + inline void clear_parameter(); + static const int kParameterFieldNumber = 2; + inline const ::std::string& parameter() const; + inline void set_parameter(const ::std::string& value); + inline void set_parameter(const char* value); + inline void set_parameter(const char* value, size_t size); + inline ::std::string* mutable_parameter(); + inline ::std::string* release_parameter(); + inline void set_allocated_parameter(::std::string* parameter); + + // repeated .google.protobuf.FileDescriptorProto proto_file = 15; + inline int proto_file_size() const; + inline void clear_proto_file(); + static const int kProtoFileFieldNumber = 15; + inline const ::google::protobuf::FileDescriptorProto& proto_file(int index) const; + inline ::google::protobuf::FileDescriptorProto* mutable_proto_file(int index); + inline ::google::protobuf::FileDescriptorProto* add_proto_file(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::FileDescriptorProto >& + proto_file() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::FileDescriptorProto >* + mutable_proto_file(); + + // @@protoc_insertion_point(class_scope:google.protobuf.compiler.CodeGeneratorRequest) + private: + inline void set_has_parameter(); + inline void clear_has_parameter(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::google::protobuf::RepeatedPtrField< ::std::string> file_to_generate_; + ::std::string* parameter_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::FileDescriptorProto > proto_file_; + friend void LIBPROTOC_EXPORT protobuf_AddDesc_google_2fprotobuf_2fcompiler_2fplugin_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fcompiler_2fplugin_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fcompiler_2fplugin_2eproto(); + + void InitAsDefaultInstance(); + static CodeGeneratorRequest* default_instance_; +}; +// ------------------------------------------------------------------- + +class LIBPROTOC_EXPORT CodeGeneratorResponse_File : public ::google::protobuf::Message { + public: + CodeGeneratorResponse_File(); + virtual ~CodeGeneratorResponse_File(); + + CodeGeneratorResponse_File(const CodeGeneratorResponse_File& from); + + inline CodeGeneratorResponse_File& operator=(const CodeGeneratorResponse_File& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const CodeGeneratorResponse_File& default_instance(); + + void Swap(CodeGeneratorResponse_File* other); + + // implements Message ---------------------------------------------- + + CodeGeneratorResponse_File* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const CodeGeneratorResponse_File& from); + void MergeFrom(const CodeGeneratorResponse_File& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional string name = 1; + inline bool has_name() const; + inline void clear_name(); + static const int kNameFieldNumber = 1; + inline const ::std::string& name() const; + inline void set_name(const ::std::string& value); + inline void set_name(const char* value); + inline void set_name(const char* value, size_t size); + inline ::std::string* mutable_name(); + inline ::std::string* release_name(); + inline void set_allocated_name(::std::string* name); + + // optional string insertion_point = 2; + inline bool has_insertion_point() const; + inline void clear_insertion_point(); + static const int kInsertionPointFieldNumber = 2; + inline const ::std::string& insertion_point() const; + inline void set_insertion_point(const ::std::string& value); + inline void set_insertion_point(const char* value); + inline void set_insertion_point(const char* value, size_t size); + inline ::std::string* mutable_insertion_point(); + inline ::std::string* release_insertion_point(); + inline void set_allocated_insertion_point(::std::string* insertion_point); + + // optional string content = 15; + inline bool has_content() const; + inline void clear_content(); + static const int kContentFieldNumber = 15; + inline const ::std::string& content() const; + inline void set_content(const ::std::string& value); + inline void set_content(const char* value); + inline void set_content(const char* value, size_t size); + inline ::std::string* mutable_content(); + inline ::std::string* release_content(); + inline void set_allocated_content(::std::string* content); + + // @@protoc_insertion_point(class_scope:google.protobuf.compiler.CodeGeneratorResponse.File) + private: + inline void set_has_name(); + inline void clear_has_name(); + inline void set_has_insertion_point(); + inline void clear_has_insertion_point(); + inline void set_has_content(); + inline void clear_has_content(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::std::string* name_; + ::std::string* insertion_point_; + ::std::string* content_; + friend void LIBPROTOC_EXPORT protobuf_AddDesc_google_2fprotobuf_2fcompiler_2fplugin_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fcompiler_2fplugin_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fcompiler_2fplugin_2eproto(); + + void InitAsDefaultInstance(); + static CodeGeneratorResponse_File* default_instance_; +}; +// ------------------------------------------------------------------- + +class LIBPROTOC_EXPORT CodeGeneratorResponse : public ::google::protobuf::Message { + public: + CodeGeneratorResponse(); + virtual ~CodeGeneratorResponse(); + + CodeGeneratorResponse(const CodeGeneratorResponse& from); + + inline CodeGeneratorResponse& operator=(const CodeGeneratorResponse& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const CodeGeneratorResponse& default_instance(); + + void Swap(CodeGeneratorResponse* other); + + // implements Message ---------------------------------------------- + + CodeGeneratorResponse* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const CodeGeneratorResponse& from); + void MergeFrom(const CodeGeneratorResponse& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + typedef CodeGeneratorResponse_File File; + + // accessors ------------------------------------------------------- + + // optional string error = 1; + inline bool has_error() const; + inline void clear_error(); + static const int kErrorFieldNumber = 1; + inline const ::std::string& error() const; + inline void set_error(const ::std::string& value); + inline void set_error(const char* value); + inline void set_error(const char* value, size_t size); + inline ::std::string* mutable_error(); + inline ::std::string* release_error(); + inline void set_allocated_error(::std::string* error); + + // repeated .google.protobuf.compiler.CodeGeneratorResponse.File file = 15; + inline int file_size() const; + inline void clear_file(); + static const int kFileFieldNumber = 15; + inline const ::google::protobuf::compiler::CodeGeneratorResponse_File& file(int index) const; + inline ::google::protobuf::compiler::CodeGeneratorResponse_File* mutable_file(int index); + inline ::google::protobuf::compiler::CodeGeneratorResponse_File* add_file(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::compiler::CodeGeneratorResponse_File >& + file() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::compiler::CodeGeneratorResponse_File >* + mutable_file(); + + // @@protoc_insertion_point(class_scope:google.protobuf.compiler.CodeGeneratorResponse) + private: + inline void set_has_error(); + inline void clear_has_error(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::std::string* error_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::compiler::CodeGeneratorResponse_File > file_; + friend void LIBPROTOC_EXPORT protobuf_AddDesc_google_2fprotobuf_2fcompiler_2fplugin_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fcompiler_2fplugin_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fcompiler_2fplugin_2eproto(); + + void InitAsDefaultInstance(); + static CodeGeneratorResponse* default_instance_; +}; +// =================================================================== + + +// =================================================================== + +// CodeGeneratorRequest + +// repeated string file_to_generate = 1; +inline int CodeGeneratorRequest::file_to_generate_size() const { + return file_to_generate_.size(); +} +inline void CodeGeneratorRequest::clear_file_to_generate() { + file_to_generate_.Clear(); +} +inline const ::std::string& CodeGeneratorRequest::file_to_generate(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) + return file_to_generate_.Get(index); +} +inline ::std::string* CodeGeneratorRequest::mutable_file_to_generate(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) + return file_to_generate_.Mutable(index); +} +inline void CodeGeneratorRequest::set_file_to_generate(int index, const ::std::string& value) { + // @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) + file_to_generate_.Mutable(index)->assign(value); +} +inline void CodeGeneratorRequest::set_file_to_generate(int index, const char* value) { + file_to_generate_.Mutable(index)->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) +} +inline void CodeGeneratorRequest::set_file_to_generate(int index, const char* value, size_t size) { + file_to_generate_.Mutable(index)->assign( + reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) +} +inline ::std::string* CodeGeneratorRequest::add_file_to_generate() { + return file_to_generate_.Add(); +} +inline void CodeGeneratorRequest::add_file_to_generate(const ::std::string& value) { + file_to_generate_.Add()->assign(value); + // @@protoc_insertion_point(field_add:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) +} +inline void CodeGeneratorRequest::add_file_to_generate(const char* value) { + file_to_generate_.Add()->assign(value); + // @@protoc_insertion_point(field_add_char:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) +} +inline void CodeGeneratorRequest::add_file_to_generate(const char* value, size_t size) { + file_to_generate_.Add()->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_add_pointer:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) +} +inline const ::google::protobuf::RepeatedPtrField< ::std::string>& +CodeGeneratorRequest::file_to_generate() const { + // @@protoc_insertion_point(field_list:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) + return file_to_generate_; +} +inline ::google::protobuf::RepeatedPtrField< ::std::string>* +CodeGeneratorRequest::mutable_file_to_generate() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.compiler.CodeGeneratorRequest.file_to_generate) + return &file_to_generate_; +} + +// optional string parameter = 2; +inline bool CodeGeneratorRequest::has_parameter() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void CodeGeneratorRequest::set_has_parameter() { + _has_bits_[0] |= 0x00000002u; +} +inline void CodeGeneratorRequest::clear_has_parameter() { + _has_bits_[0] &= ~0x00000002u; +} +inline void CodeGeneratorRequest::clear_parameter() { + if (parameter_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + parameter_->clear(); + } + clear_has_parameter(); +} +inline const ::std::string& CodeGeneratorRequest::parameter() const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorRequest.parameter) + return *parameter_; +} +inline void CodeGeneratorRequest::set_parameter(const ::std::string& value) { + set_has_parameter(); + if (parameter_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + parameter_ = new ::std::string; + } + parameter_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorRequest.parameter) +} +inline void CodeGeneratorRequest::set_parameter(const char* value) { + set_has_parameter(); + if (parameter_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + parameter_ = new ::std::string; + } + parameter_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorRequest.parameter) +} +inline void CodeGeneratorRequest::set_parameter(const char* value, size_t size) { + set_has_parameter(); + if (parameter_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + parameter_ = new ::std::string; + } + parameter_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.compiler.CodeGeneratorRequest.parameter) +} +inline ::std::string* CodeGeneratorRequest::mutable_parameter() { + set_has_parameter(); + if (parameter_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + parameter_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorRequest.parameter) + return parameter_; +} +inline ::std::string* CodeGeneratorRequest::release_parameter() { + clear_has_parameter(); + if (parameter_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = parameter_; + parameter_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void CodeGeneratorRequest::set_allocated_parameter(::std::string* parameter) { + if (parameter_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete parameter_; + } + if (parameter) { + set_has_parameter(); + parameter_ = parameter; + } else { + clear_has_parameter(); + parameter_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.compiler.CodeGeneratorRequest.parameter) +} + +// repeated .google.protobuf.FileDescriptorProto proto_file = 15; +inline int CodeGeneratorRequest::proto_file_size() const { + return proto_file_.size(); +} +inline void CodeGeneratorRequest::clear_proto_file() { + proto_file_.Clear(); +} +inline const ::google::protobuf::FileDescriptorProto& CodeGeneratorRequest::proto_file(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorRequest.proto_file) + return proto_file_.Get(index); +} +inline ::google::protobuf::FileDescriptorProto* CodeGeneratorRequest::mutable_proto_file(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorRequest.proto_file) + return proto_file_.Mutable(index); +} +inline ::google::protobuf::FileDescriptorProto* CodeGeneratorRequest::add_proto_file() { + // @@protoc_insertion_point(field_add:google.protobuf.compiler.CodeGeneratorRequest.proto_file) + return proto_file_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::FileDescriptorProto >& +CodeGeneratorRequest::proto_file() const { + // @@protoc_insertion_point(field_list:google.protobuf.compiler.CodeGeneratorRequest.proto_file) + return proto_file_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::FileDescriptorProto >* +CodeGeneratorRequest::mutable_proto_file() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.compiler.CodeGeneratorRequest.proto_file) + return &proto_file_; +} + +// ------------------------------------------------------------------- + +// CodeGeneratorResponse_File + +// optional string name = 1; +inline bool CodeGeneratorResponse_File::has_name() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void CodeGeneratorResponse_File::set_has_name() { + _has_bits_[0] |= 0x00000001u; +} +inline void CodeGeneratorResponse_File::clear_has_name() { + _has_bits_[0] &= ~0x00000001u; +} +inline void CodeGeneratorResponse_File::clear_name() { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_->clear(); + } + clear_has_name(); +} +inline const ::std::string& CodeGeneratorResponse_File::name() const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.File.name) + return *name_; +} +inline void CodeGeneratorResponse_File::set_name(const ::std::string& value) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorResponse.File.name) +} +inline void CodeGeneratorResponse_File::set_name(const char* value) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorResponse.File.name) +} +inline void CodeGeneratorResponse_File::set_name(const char* value, size_t size) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.compiler.CodeGeneratorResponse.File.name) +} +inline ::std::string* CodeGeneratorResponse_File::mutable_name() { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorResponse.File.name) + return name_; +} +inline ::std::string* CodeGeneratorResponse_File::release_name() { + clear_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = name_; + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void CodeGeneratorResponse_File::set_allocated_name(::std::string* name) { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete name_; + } + if (name) { + set_has_name(); + name_ = name; + } else { + clear_has_name(); + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.compiler.CodeGeneratorResponse.File.name) +} + +// optional string insertion_point = 2; +inline bool CodeGeneratorResponse_File::has_insertion_point() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void CodeGeneratorResponse_File::set_has_insertion_point() { + _has_bits_[0] |= 0x00000002u; +} +inline void CodeGeneratorResponse_File::clear_has_insertion_point() { + _has_bits_[0] &= ~0x00000002u; +} +inline void CodeGeneratorResponse_File::clear_insertion_point() { + if (insertion_point_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + insertion_point_->clear(); + } + clear_has_insertion_point(); +} +inline const ::std::string& CodeGeneratorResponse_File::insertion_point() const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.File.insertion_point) + return *insertion_point_; +} +inline void CodeGeneratorResponse_File::set_insertion_point(const ::std::string& value) { + set_has_insertion_point(); + if (insertion_point_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + insertion_point_ = new ::std::string; + } + insertion_point_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorResponse.File.insertion_point) +} +inline void CodeGeneratorResponse_File::set_insertion_point(const char* value) { + set_has_insertion_point(); + if (insertion_point_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + insertion_point_ = new ::std::string; + } + insertion_point_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorResponse.File.insertion_point) +} +inline void CodeGeneratorResponse_File::set_insertion_point(const char* value, size_t size) { + set_has_insertion_point(); + if (insertion_point_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + insertion_point_ = new ::std::string; + } + insertion_point_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.compiler.CodeGeneratorResponse.File.insertion_point) +} +inline ::std::string* CodeGeneratorResponse_File::mutable_insertion_point() { + set_has_insertion_point(); + if (insertion_point_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + insertion_point_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorResponse.File.insertion_point) + return insertion_point_; +} +inline ::std::string* CodeGeneratorResponse_File::release_insertion_point() { + clear_has_insertion_point(); + if (insertion_point_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = insertion_point_; + insertion_point_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void CodeGeneratorResponse_File::set_allocated_insertion_point(::std::string* insertion_point) { + if (insertion_point_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete insertion_point_; + } + if (insertion_point) { + set_has_insertion_point(); + insertion_point_ = insertion_point; + } else { + clear_has_insertion_point(); + insertion_point_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.compiler.CodeGeneratorResponse.File.insertion_point) +} + +// optional string content = 15; +inline bool CodeGeneratorResponse_File::has_content() const { + return (_has_bits_[0] & 0x00000004u) != 0; +} +inline void CodeGeneratorResponse_File::set_has_content() { + _has_bits_[0] |= 0x00000004u; +} +inline void CodeGeneratorResponse_File::clear_has_content() { + _has_bits_[0] &= ~0x00000004u; +} +inline void CodeGeneratorResponse_File::clear_content() { + if (content_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + content_->clear(); + } + clear_has_content(); +} +inline const ::std::string& CodeGeneratorResponse_File::content() const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.File.content) + return *content_; +} +inline void CodeGeneratorResponse_File::set_content(const ::std::string& value) { + set_has_content(); + if (content_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + content_ = new ::std::string; + } + content_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorResponse.File.content) +} +inline void CodeGeneratorResponse_File::set_content(const char* value) { + set_has_content(); + if (content_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + content_ = new ::std::string; + } + content_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorResponse.File.content) +} +inline void CodeGeneratorResponse_File::set_content(const char* value, size_t size) { + set_has_content(); + if (content_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + content_ = new ::std::string; + } + content_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.compiler.CodeGeneratorResponse.File.content) +} +inline ::std::string* CodeGeneratorResponse_File::mutable_content() { + set_has_content(); + if (content_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + content_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorResponse.File.content) + return content_; +} +inline ::std::string* CodeGeneratorResponse_File::release_content() { + clear_has_content(); + if (content_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = content_; + content_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void CodeGeneratorResponse_File::set_allocated_content(::std::string* content) { + if (content_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete content_; + } + if (content) { + set_has_content(); + content_ = content; + } else { + clear_has_content(); + content_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.compiler.CodeGeneratorResponse.File.content) +} + +// ------------------------------------------------------------------- + +// CodeGeneratorResponse + +// optional string error = 1; +inline bool CodeGeneratorResponse::has_error() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void CodeGeneratorResponse::set_has_error() { + _has_bits_[0] |= 0x00000001u; +} +inline void CodeGeneratorResponse::clear_has_error() { + _has_bits_[0] &= ~0x00000001u; +} +inline void CodeGeneratorResponse::clear_error() { + if (error_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + error_->clear(); + } + clear_has_error(); +} +inline const ::std::string& CodeGeneratorResponse::error() const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.error) + return *error_; +} +inline void CodeGeneratorResponse::set_error(const ::std::string& value) { + set_has_error(); + if (error_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + error_ = new ::std::string; + } + error_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.compiler.CodeGeneratorResponse.error) +} +inline void CodeGeneratorResponse::set_error(const char* value) { + set_has_error(); + if (error_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + error_ = new ::std::string; + } + error_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.compiler.CodeGeneratorResponse.error) +} +inline void CodeGeneratorResponse::set_error(const char* value, size_t size) { + set_has_error(); + if (error_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + error_ = new ::std::string; + } + error_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.compiler.CodeGeneratorResponse.error) +} +inline ::std::string* CodeGeneratorResponse::mutable_error() { + set_has_error(); + if (error_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + error_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorResponse.error) + return error_; +} +inline ::std::string* CodeGeneratorResponse::release_error() { + clear_has_error(); + if (error_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = error_; + error_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void CodeGeneratorResponse::set_allocated_error(::std::string* error) { + if (error_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete error_; + } + if (error) { + set_has_error(); + error_ = error; + } else { + clear_has_error(); + error_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.compiler.CodeGeneratorResponse.error) +} + +// repeated .google.protobuf.compiler.CodeGeneratorResponse.File file = 15; +inline int CodeGeneratorResponse::file_size() const { + return file_.size(); +} +inline void CodeGeneratorResponse::clear_file() { + file_.Clear(); +} +inline const ::google::protobuf::compiler::CodeGeneratorResponse_File& CodeGeneratorResponse::file(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.compiler.CodeGeneratorResponse.file) + return file_.Get(index); +} +inline ::google::protobuf::compiler::CodeGeneratorResponse_File* CodeGeneratorResponse::mutable_file(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.compiler.CodeGeneratorResponse.file) + return file_.Mutable(index); +} +inline ::google::protobuf::compiler::CodeGeneratorResponse_File* CodeGeneratorResponse::add_file() { + // @@protoc_insertion_point(field_add:google.protobuf.compiler.CodeGeneratorResponse.file) + return file_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::compiler::CodeGeneratorResponse_File >& +CodeGeneratorResponse::file() const { + // @@protoc_insertion_point(field_list:google.protobuf.compiler.CodeGeneratorResponse.file) + return file_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::compiler::CodeGeneratorResponse_File >* +CodeGeneratorResponse::mutable_file() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.compiler.CodeGeneratorResponse.file) + return &file_; +} + + +// @@protoc_insertion_point(namespace_scope) + +} // namespace compiler +} // namespace protobuf +} // namespace google + +#ifndef SWIG +namespace google { +namespace protobuf { + + +} // namespace google +} // namespace protobuf +#endif // SWIG + +// @@protoc_insertion_point(global_scope) + +#endif // PROTOBUF_google_2fprotobuf_2fcompiler_2fplugin_2eproto__INCLUDED diff --git a/kortex_gazebo/include/google/protobuf/compiler/plugin.proto b/kortex_gazebo/include/google/protobuf/compiler/plugin.proto new file mode 100644 index 00000000..b65379d7 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/compiler/plugin.proto @@ -0,0 +1,147 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// +// WARNING: The plugin interface is currently EXPERIMENTAL and is subject to +// change. +// +// protoc (aka the Protocol Compiler) can be extended via plugins. A plugin is +// just a program that reads a CodeGeneratorRequest from stdin and writes a +// CodeGeneratorResponse to stdout. +// +// Plugins written using C++ can use google/protobuf/compiler/plugin.h instead +// of dealing with the raw protocol defined here. +// +// A plugin executable needs only to be placed somewhere in the path. The +// plugin should be named "protoc-gen-$NAME", and will then be used when the +// flag "--${NAME}_out" is passed to protoc. + +package google.protobuf.compiler; +option java_package = "com.google.protobuf.compiler"; +option java_outer_classname = "PluginProtos"; + +import "google/protobuf/descriptor.proto"; + +// An encoded CodeGeneratorRequest is written to the plugin's stdin. +message CodeGeneratorRequest { + // The .proto files that were explicitly listed on the command-line. The + // code generator should generate code only for these files. Each file's + // descriptor will be included in proto_file, below. + repeated string file_to_generate = 1; + + // The generator parameter passed on the command-line. + optional string parameter = 2; + + // FileDescriptorProtos for all files in files_to_generate and everything + // they import. The files will appear in topological order, so each file + // appears before any file that imports it. + // + // protoc guarantees that all proto_files will be written after + // the fields above, even though this is not technically guaranteed by the + // protobuf wire format. This theoretically could allow a plugin to stream + // in the FileDescriptorProtos and handle them one by one rather than read + // the entire set into memory at once. However, as of this writing, this + // is not similarly optimized on protoc's end -- it will store all fields in + // memory at once before sending them to the plugin. + repeated FileDescriptorProto proto_file = 15; +} + +// The plugin writes an encoded CodeGeneratorResponse to stdout. +message CodeGeneratorResponse { + // Error message. If non-empty, code generation failed. The plugin process + // should exit with status code zero even if it reports an error in this way. + // + // This should be used to indicate errors in .proto files which prevent the + // code generator from generating correct code. Errors which indicate a + // problem in protoc itself -- such as the input CodeGeneratorRequest being + // unparseable -- should be reported by writing a message to stderr and + // exiting with a non-zero status code. + optional string error = 1; + + // Represents a single generated file. + message File { + // The file name, relative to the output directory. The name must not + // contain "." or ".." components and must be relative, not be absolute (so, + // the file cannot lie outside the output directory). "/" must be used as + // the path separator, not "\". + // + // If the name is omitted, the content will be appended to the previous + // file. This allows the generator to break large files into small chunks, + // and allows the generated text to be streamed back to protoc so that large + // files need not reside completely in memory at one time. Note that as of + // this writing protoc does not optimize for this -- it will read the entire + // CodeGeneratorResponse before writing files to disk. + optional string name = 1; + + // If non-empty, indicates that the named file should already exist, and the + // content here is to be inserted into that file at a defined insertion + // point. This feature allows a code generator to extend the output + // produced by another code generator. The original generator may provide + // insertion points by placing special annotations in the file that look + // like: + // @@protoc_insertion_point(NAME) + // The annotation can have arbitrary text before and after it on the line, + // which allows it to be placed in a comment. NAME should be replaced with + // an identifier naming the point -- this is what other generators will use + // as the insertion_point. Code inserted at this point will be placed + // immediately above the line containing the insertion point (thus multiple + // insertions to the same point will come out in the order they were added). + // The double-@ is intended to make it unlikely that the generated code + // could contain things that look like insertion points by accident. + // + // For example, the C++ code generator places the following line in the + // .pb.h files that it generates: + // // @@protoc_insertion_point(namespace_scope) + // This line appears within the scope of the file's package namespace, but + // outside of any particular class. Another plugin can then specify the + // insertion_point "namespace_scope" to generate additional classes or + // other declarations that should be placed in this scope. + // + // Note that if the line containing the insertion point begins with + // whitespace, the same whitespace will be added to every line of the + // inserted text. This is useful for languages like Python, where + // indentation matters. In these languages, the insertion point comment + // should be indented the same amount as any inserted code will need to be + // in order to work correctly in that context. + // + // The code generator that generates the initial file and the one which + // inserts into it must both run as part of a single invocation of protoc. + // Code generators are executed in the order in which they appear on the + // command line. + // + // If |insertion_point| is present, |name| must also be present. + optional string insertion_point = 2; + + // The file contents. + optional string content = 15; + } + repeated File file = 15; +} diff --git a/kortex_gazebo/include/google/protobuf/compiler/python/python_generator.h b/kortex_gazebo/include/google/protobuf/compiler/python/python_generator.h new file mode 100644 index 00000000..f86e9ea2 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/compiler/python/python_generator.h @@ -0,0 +1,166 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: robinson@google.com (Will Robinson) +// +// Generates Python code for a given .proto file. + +#ifndef GOOGLE_PROTOBUF_COMPILER_PYTHON_GENERATOR_H__ +#define GOOGLE_PROTOBUF_COMPILER_PYTHON_GENERATOR_H__ + +#include + +#include +#include + +namespace google { +namespace protobuf { + +class Descriptor; +class EnumDescriptor; +class EnumValueDescriptor; +class FieldDescriptor; +class ServiceDescriptor; + +namespace io { class Printer; } + +namespace compiler { +namespace python { + +// CodeGenerator implementation for generated Python protocol buffer classes. +// If you create your own protocol compiler binary and you want it to support +// Python output, you can do so by registering an instance of this +// CodeGenerator with the CommandLineInterface in your main() function. +class LIBPROTOC_EXPORT Generator : public CodeGenerator { + public: + Generator(); + virtual ~Generator(); + + // CodeGenerator methods. + virtual bool Generate(const FileDescriptor* file, + const string& parameter, + GeneratorContext* generator_context, + string* error) const; + + private: + void PrintImports() const; + void PrintFileDescriptor() const; + void PrintTopLevelEnums() const; + void PrintAllNestedEnumsInFile() const; + void PrintNestedEnums(const Descriptor& descriptor) const; + void PrintEnum(const EnumDescriptor& enum_descriptor) const; + + void PrintTopLevelExtensions() const; + + void PrintFieldDescriptor( + const FieldDescriptor& field, bool is_extension) const; + void PrintFieldDescriptorsInDescriptor( + const Descriptor& message_descriptor, + bool is_extension, + const string& list_variable_name, + int (Descriptor::*CountFn)() const, + const FieldDescriptor* (Descriptor::*GetterFn)(int) const) const; + void PrintFieldsInDescriptor(const Descriptor& message_descriptor) const; + void PrintExtensionsInDescriptor(const Descriptor& message_descriptor) const; + void PrintMessageDescriptors() const; + void PrintDescriptor(const Descriptor& message_descriptor) const; + void PrintNestedDescriptors(const Descriptor& containing_descriptor) const; + + void PrintMessages() const; + void PrintMessage(const Descriptor& message_descriptor, const string& prefix, + vector* to_register) const; + void PrintNestedMessages(const Descriptor& containing_descriptor, + const string& prefix, + vector* to_register) const; + + void FixForeignFieldsInDescriptors() const; + void FixForeignFieldsInDescriptor( + const Descriptor& descriptor, + const Descriptor* containing_descriptor) const; + void FixForeignFieldsInField(const Descriptor* containing_type, + const FieldDescriptor& field, + const string& python_dict_name) const; + void AddMessageToFileDescriptor(const Descriptor& descriptor) const; + void AddEnumToFileDescriptor(const EnumDescriptor& descriptor) const; + void AddExtensionToFileDescriptor(const FieldDescriptor& descriptor) const; + string FieldReferencingExpression(const Descriptor* containing_type, + const FieldDescriptor& field, + const string& python_dict_name) const; + template + void FixContainingTypeInDescriptor( + const DescriptorT& descriptor, + const Descriptor* containing_descriptor) const; + + void FixForeignFieldsInExtensions() const; + void FixForeignFieldsInExtension( + const FieldDescriptor& extension_field) const; + void FixForeignFieldsInNestedExtensions(const Descriptor& descriptor) const; + + void PrintServices() const; + void PrintServiceDescriptor(const ServiceDescriptor& descriptor) const; + void PrintServiceClass(const ServiceDescriptor& descriptor) const; + void PrintServiceStub(const ServiceDescriptor& descriptor) const; + + void PrintEnumValueDescriptor(const EnumValueDescriptor& descriptor) const; + string OptionsValue(const string& class_name, + const string& serialized_options) const; + bool GeneratingDescriptorProto() const; + + template + string ModuleLevelDescriptorName(const DescriptorT& descriptor) const; + string ModuleLevelMessageName(const Descriptor& descriptor) const; + string ModuleLevelServiceDescriptorName( + const ServiceDescriptor& descriptor) const; + + template + void PrintSerializedPbInterval( + const DescriptorT& descriptor, DescriptorProtoT& proto) const; + + void FixAllDescriptorOptions() const; + void FixOptionsForField(const FieldDescriptor& field) const; + void FixOptionsForEnum(const EnumDescriptor& descriptor) const; + void FixOptionsForMessage(const Descriptor& descriptor) const; + + // Very coarse-grained lock to ensure that Generate() is reentrant. + // Guards file_, printer_ and file_descriptor_serialized_. + mutable Mutex mutex_; + mutable const FileDescriptor* file_; // Set in Generate(). Under mutex_. + mutable string file_descriptor_serialized_; + mutable io::Printer* printer_; // Set in Generate(). Under mutex_. + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Generator); +}; + +} // namespace python +} // namespace compiler +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_COMPILER_PYTHON_GENERATOR_H__ diff --git a/kortex_gazebo/include/google/protobuf/descriptor.h b/kortex_gazebo/include/google/protobuf/descriptor.h new file mode 100644 index 00000000..67afc774 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/descriptor.h @@ -0,0 +1,1691 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// This file contains classes which describe a type of protocol message. +// You can use a message's descriptor to learn at runtime what fields +// it contains and what the types of those fields are. The Message +// interface also allows you to dynamically access and modify individual +// fields by passing the FieldDescriptor of the field you are interested +// in. +// +// Most users will not care about descriptors, because they will write +// code specific to certain protocol types and will simply use the classes +// generated by the protocol compiler directly. Advanced users who want +// to operate on arbitrary types (not known at compile time) may want to +// read descriptors in order to learn about the contents of a message. +// A very small number of users will want to construct their own +// Descriptors, either because they are implementing Message manually or +// because they are writing something like the protocol compiler. +// +// For an example of how you might use descriptors, see the code example +// at the top of message.h. + +#ifndef GOOGLE_PROTOBUF_DESCRIPTOR_H__ +#define GOOGLE_PROTOBUF_DESCRIPTOR_H__ + +#include +#include +#include +#include + + +namespace google { +namespace protobuf { + +// Defined in this file. +class Descriptor; +class FieldDescriptor; +class OneofDescriptor; +class EnumDescriptor; +class EnumValueDescriptor; +class ServiceDescriptor; +class MethodDescriptor; +class FileDescriptor; +class DescriptorDatabase; +class DescriptorPool; + +// Defined in descriptor.proto +class DescriptorProto; +class FieldDescriptorProto; +class OneofDescriptorProto; +class EnumDescriptorProto; +class EnumValueDescriptorProto; +class ServiceDescriptorProto; +class MethodDescriptorProto; +class FileDescriptorProto; +class MessageOptions; +class FieldOptions; +class EnumOptions; +class EnumValueOptions; +class ServiceOptions; +class MethodOptions; +class FileOptions; +class UninterpretedOption; +class SourceCodeInfo; + +// Defined in message.h +class Message; + +// Defined in descriptor.cc +class DescriptorBuilder; +class FileDescriptorTables; + +// Defined in unknown_field_set.h. +class UnknownField; + +// NB, all indices are zero-based. +struct SourceLocation { + int start_line; + int end_line; + int start_column; + int end_column; + + // Doc comments found at the source location. + // TODO(kenton): Maybe this struct should have been named SourceInfo or + // something instead. Oh well. + string leading_comments; + string trailing_comments; +}; + +// Describes a type of protocol message, or a particular group within a +// message. To obtain the Descriptor for a given message object, call +// Message::GetDescriptor(). Generated message classes also have a +// static method called descriptor() which returns the type's descriptor. +// Use DescriptorPool to construct your own descriptors. +class LIBPROTOBUF_EXPORT Descriptor { + public: + // The name of the message type, not including its scope. + const string& name() const; + + // The fully-qualified name of the message type, scope delimited by + // periods. For example, message type "Foo" which is declared in package + // "bar" has full name "bar.Foo". If a type "Baz" is nested within + // Foo, Baz's full_name is "bar.Foo.Baz". To get only the part that + // comes after the last '.', use name(). + const string& full_name() const; + + // Index of this descriptor within the file or containing type's message + // type array. + int index() const; + + // The .proto file in which this message type was defined. Never NULL. + const FileDescriptor* file() const; + + // If this Descriptor describes a nested type, this returns the type + // in which it is nested. Otherwise, returns NULL. + const Descriptor* containing_type() const; + + // Get options for this message type. These are specified in the .proto file + // by placing lines like "option foo = 1234;" in the message definition. + // Allowed options are defined by MessageOptions in + // google/protobuf/descriptor.proto, and any available extensions of that + // message. + const MessageOptions& options() const; + + // Write the contents of this Descriptor into the given DescriptorProto. + // The target DescriptorProto must be clear before calling this; if it + // isn't, the result may be garbage. + void CopyTo(DescriptorProto* proto) const; + + // Write the contents of this decriptor in a human-readable form. Output + // will be suitable for re-parsing. + string DebugString() const; + + // Returns true if this is a placeholder for an unknown type. This will + // only be the case if this descriptor comes from a DescriptorPool + // with AllowUnknownDependencies() set. + bool is_placeholder() const; + + // Field stuff ----------------------------------------------------- + + // The number of fields in this message type. + int field_count() const; + // Gets a field by index, where 0 <= index < field_count(). + // These are returned in the order they were defined in the .proto file. + const FieldDescriptor* field(int index) const; + + // Looks up a field by declared tag number. Returns NULL if no such field + // exists. + const FieldDescriptor* FindFieldByNumber(int number) const; + // Looks up a field by name. Returns NULL if no such field exists. + const FieldDescriptor* FindFieldByName(const string& name) const; + + // Looks up a field by lowercased name (as returned by lowercase_name()). + // This lookup may be ambiguous if multiple field names differ only by case, + // in which case the field returned is chosen arbitrarily from the matches. + const FieldDescriptor* FindFieldByLowercaseName( + const string& lowercase_name) const; + + // Looks up a field by camel-case name (as returned by camelcase_name()). + // This lookup may be ambiguous if multiple field names differ in a way that + // leads them to have identical camel-case names, in which case the field + // returned is chosen arbitrarily from the matches. + const FieldDescriptor* FindFieldByCamelcaseName( + const string& camelcase_name) const; + + // The number of oneofs in this message type. + int oneof_decl_count() const; + // Get a oneof by index, where 0 <= index < oneof_decl_count(). + // These are returned in the order they were defined in the .proto file. + const OneofDescriptor* oneof_decl(int index) const; + + // Looks up a oneof by name. Returns NULL if no such oneof exists. + const OneofDescriptor* FindOneofByName(const string& name) const; + + // Nested type stuff ----------------------------------------------- + + // The number of nested types in this message type. + int nested_type_count() const; + // Gets a nested type by index, where 0 <= index < nested_type_count(). + // These are returned in the order they were defined in the .proto file. + const Descriptor* nested_type(int index) const; + + // Looks up a nested type by name. Returns NULL if no such nested type + // exists. + const Descriptor* FindNestedTypeByName(const string& name) const; + + // Enum stuff ------------------------------------------------------ + + // The number of enum types in this message type. + int enum_type_count() const; + // Gets an enum type by index, where 0 <= index < enum_type_count(). + // These are returned in the order they were defined in the .proto file. + const EnumDescriptor* enum_type(int index) const; + + // Looks up an enum type by name. Returns NULL if no such enum type exists. + const EnumDescriptor* FindEnumTypeByName(const string& name) const; + + // Looks up an enum value by name, among all enum types in this message. + // Returns NULL if no such value exists. + const EnumValueDescriptor* FindEnumValueByName(const string& name) const; + + // Extensions ------------------------------------------------------ + + // A range of field numbers which are designated for third-party + // extensions. + struct ExtensionRange { + int start; // inclusive + int end; // exclusive + }; + + // The number of extension ranges in this message type. + int extension_range_count() const; + // Gets an extension range by index, where 0 <= index < + // extension_range_count(). These are returned in the order they were defined + // in the .proto file. + const ExtensionRange* extension_range(int index) const; + + // Returns true if the number is in one of the extension ranges. + bool IsExtensionNumber(int number) const; + + // Returns NULL if no extension range contains the given number. + const ExtensionRange* FindExtensionRangeContainingNumber(int number) const; + + // The number of extensions -- extending *other* messages -- that were + // defined nested within this message type's scope. + int extension_count() const; + // Get an extension by index, where 0 <= index < extension_count(). + // These are returned in the order they were defined in the .proto file. + const FieldDescriptor* extension(int index) const; + + // Looks up a named extension (which extends some *other* message type) + // defined within this message type's scope. + const FieldDescriptor* FindExtensionByName(const string& name) const; + + // Similar to FindFieldByLowercaseName(), but finds extensions defined within + // this message type's scope. + const FieldDescriptor* FindExtensionByLowercaseName(const string& name) const; + + // Similar to FindFieldByCamelcaseName(), but finds extensions defined within + // this message type's scope. + const FieldDescriptor* FindExtensionByCamelcaseName(const string& name) const; + + // Source Location --------------------------------------------------- + + // Updates |*out_location| to the source location of the complete + // extent of this message declaration. Returns false and leaves + // |*out_location| unchanged iff location information was not available. + bool GetSourceLocation(SourceLocation* out_location) const; + + private: + typedef MessageOptions OptionsType; + + // Internal version of DebugString; controls the level of indenting for + // correct depth + void DebugString(int depth, string *contents) const; + + // Walks up the descriptor tree to generate the source location path + // to this descriptor from the file root. + void GetLocationPath(vector* output) const; + + const string* name_; + const string* full_name_; + const FileDescriptor* file_; + const Descriptor* containing_type_; + const MessageOptions* options_; + + // True if this is a placeholder for an unknown type. + bool is_placeholder_; + // True if this is a placeholder and the type name wasn't fully-qualified. + bool is_unqualified_placeholder_; + + int field_count_; + FieldDescriptor* fields_; + int oneof_decl_count_; + OneofDescriptor* oneof_decls_; + int nested_type_count_; + Descriptor* nested_types_; + int enum_type_count_; + EnumDescriptor* enum_types_; + int extension_range_count_; + ExtensionRange* extension_ranges_; + int extension_count_; + FieldDescriptor* extensions_; + // IMPORTANT: If you add a new field, make sure to search for all instances + // of Allocate() and AllocateArray() in descriptor.cc + // and update them to initialize the field. + + // Must be constructed using DescriptorPool. + Descriptor() {} + friend class DescriptorBuilder; + friend class EnumDescriptor; + friend class FieldDescriptor; + friend class OneofDescriptor; + friend class MethodDescriptor; + friend class FileDescriptor; + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Descriptor); +}; + +// Describes a single field of a message. To get the descriptor for a given +// field, first get the Descriptor for the message in which it is defined, +// then call Descriptor::FindFieldByName(). To get a FieldDescriptor for +// an extension, do one of the following: +// - Get the Descriptor or FileDescriptor for its containing scope, then +// call Descriptor::FindExtensionByName() or +// FileDescriptor::FindExtensionByName(). +// - Given a DescriptorPool, call DescriptorPool::FindExtensionByNumber(). +// - Given a Reflection for a message object, call +// Reflection::FindKnownExtensionByName() or +// Reflection::FindKnownExtensionByNumber(). +// Use DescriptorPool to construct your own descriptors. +class LIBPROTOBUF_EXPORT FieldDescriptor { + public: + // Identifies a field type. 0 is reserved for errors. The order is weird + // for historical reasons. Types 12 and up are new in proto2. + enum Type { + TYPE_DOUBLE = 1, // double, exactly eight bytes on the wire. + TYPE_FLOAT = 2, // float, exactly four bytes on the wire. + TYPE_INT64 = 3, // int64, varint on the wire. Negative numbers + // take 10 bytes. Use TYPE_SINT64 if negative + // values are likely. + TYPE_UINT64 = 4, // uint64, varint on the wire. + TYPE_INT32 = 5, // int32, varint on the wire. Negative numbers + // take 10 bytes. Use TYPE_SINT32 if negative + // values are likely. + TYPE_FIXED64 = 6, // uint64, exactly eight bytes on the wire. + TYPE_FIXED32 = 7, // uint32, exactly four bytes on the wire. + TYPE_BOOL = 8, // bool, varint on the wire. + TYPE_STRING = 9, // UTF-8 text. + TYPE_GROUP = 10, // Tag-delimited message. Deprecated. + TYPE_MESSAGE = 11, // Length-delimited message. + + TYPE_BYTES = 12, // Arbitrary byte array. + TYPE_UINT32 = 13, // uint32, varint on the wire + TYPE_ENUM = 14, // Enum, varint on the wire + TYPE_SFIXED32 = 15, // int32, exactly four bytes on the wire + TYPE_SFIXED64 = 16, // int64, exactly eight bytes on the wire + TYPE_SINT32 = 17, // int32, ZigZag-encoded varint on the wire + TYPE_SINT64 = 18, // int64, ZigZag-encoded varint on the wire + + MAX_TYPE = 18, // Constant useful for defining lookup tables + // indexed by Type. + }; + + // Specifies the C++ data type used to represent the field. There is a + // fixed mapping from Type to CppType where each Type maps to exactly one + // CppType. 0 is reserved for errors. + enum CppType { + CPPTYPE_INT32 = 1, // TYPE_INT32, TYPE_SINT32, TYPE_SFIXED32 + CPPTYPE_INT64 = 2, // TYPE_INT64, TYPE_SINT64, TYPE_SFIXED64 + CPPTYPE_UINT32 = 3, // TYPE_UINT32, TYPE_FIXED32 + CPPTYPE_UINT64 = 4, // TYPE_UINT64, TYPE_FIXED64 + CPPTYPE_DOUBLE = 5, // TYPE_DOUBLE + CPPTYPE_FLOAT = 6, // TYPE_FLOAT + CPPTYPE_BOOL = 7, // TYPE_BOOL + CPPTYPE_ENUM = 8, // TYPE_ENUM + CPPTYPE_STRING = 9, // TYPE_STRING, TYPE_BYTES + CPPTYPE_MESSAGE = 10, // TYPE_MESSAGE, TYPE_GROUP + + MAX_CPPTYPE = 10, // Constant useful for defining lookup tables + // indexed by CppType. + }; + + // Identifies whether the field is optional, required, or repeated. 0 is + // reserved for errors. + enum Label { + LABEL_OPTIONAL = 1, // optional + LABEL_REQUIRED = 2, // required + LABEL_REPEATED = 3, // repeated + + MAX_LABEL = 3, // Constant useful for defining lookup tables + // indexed by Label. + }; + + // Valid field numbers are positive integers up to kMaxNumber. + static const int kMaxNumber = (1 << 29) - 1; + + // First field number reserved for the protocol buffer library implementation. + // Users may not declare fields that use reserved numbers. + static const int kFirstReservedNumber = 19000; + // Last field number reserved for the protocol buffer library implementation. + // Users may not declare fields that use reserved numbers. + static const int kLastReservedNumber = 19999; + + const string& name() const; // Name of this field within the message. + const string& full_name() const; // Fully-qualified name of the field. + const FileDescriptor* file() const;// File in which this field was defined. + bool is_extension() const; // Is this an extension field? + int number() const; // Declared tag number. + + // Same as name() except converted to lower-case. This (and especially the + // FindFieldByLowercaseName() method) can be useful when parsing formats + // which prefer to use lowercase naming style. (Although, technically + // field names should be lowercased anyway according to the protobuf style + // guide, so this only makes a difference when dealing with old .proto files + // which do not follow the guide.) + const string& lowercase_name() const; + + // Same as name() except converted to camel-case. In this conversion, any + // time an underscore appears in the name, it is removed and the next + // letter is capitalized. Furthermore, the first letter of the name is + // lower-cased. Examples: + // FooBar -> fooBar + // foo_bar -> fooBar + // fooBar -> fooBar + // This (and especially the FindFieldByCamelcaseName() method) can be useful + // when parsing formats which prefer to use camel-case naming style. + const string& camelcase_name() const; + + Type type() const; // Declared type of this field. + const char* type_name() const; // Name of the declared type. + CppType cpp_type() const; // C++ type of this field. + const char* cpp_type_name() const; // Name of the C++ type. + Label label() const; // optional/required/repeated + + bool is_required() const; // shorthand for label() == LABEL_REQUIRED + bool is_optional() const; // shorthand for label() == LABEL_OPTIONAL + bool is_repeated() const; // shorthand for label() == LABEL_REPEATED + bool is_packable() const; // shorthand for is_repeated() && + // IsTypePackable(type()) + bool is_packed() const; // shorthand for is_packable() && + // options().packed() + + // Index of this field within the message's field array, or the file or + // extension scope's extensions array. + int index() const; + + // Does this field have an explicitly-declared default value? + bool has_default_value() const; + + // Get the field default value if cpp_type() == CPPTYPE_INT32. If no + // explicit default was defined, the default is 0. + int32 default_value_int32() const; + // Get the field default value if cpp_type() == CPPTYPE_INT64. If no + // explicit default was defined, the default is 0. + int64 default_value_int64() const; + // Get the field default value if cpp_type() == CPPTYPE_UINT32. If no + // explicit default was defined, the default is 0. + uint32 default_value_uint32() const; + // Get the field default value if cpp_type() == CPPTYPE_UINT64. If no + // explicit default was defined, the default is 0. + uint64 default_value_uint64() const; + // Get the field default value if cpp_type() == CPPTYPE_FLOAT. If no + // explicit default was defined, the default is 0.0. + float default_value_float() const; + // Get the field default value if cpp_type() == CPPTYPE_DOUBLE. If no + // explicit default was defined, the default is 0.0. + double default_value_double() const; + // Get the field default value if cpp_type() == CPPTYPE_BOOL. If no + // explicit default was defined, the default is false. + bool default_value_bool() const; + // Get the field default value if cpp_type() == CPPTYPE_ENUM. If no + // explicit default was defined, the default is the first value defined + // in the enum type (all enum types are required to have at least one value). + // This never returns NULL. + const EnumValueDescriptor* default_value_enum() const; + // Get the field default value if cpp_type() == CPPTYPE_STRING. If no + // explicit default was defined, the default is the empty string. + const string& default_value_string() const; + + // The Descriptor for the message of which this is a field. For extensions, + // this is the extended type. Never NULL. + const Descriptor* containing_type() const; + + // If the field is a member of a oneof, this is the one, otherwise this is + // NULL. + const OneofDescriptor* containing_oneof() const; + + // If the field is a member of a oneof, returns the index in that oneof. + int index_in_oneof() const; + + // An extension may be declared within the scope of another message. If this + // field is an extension (is_extension() is true), then extension_scope() + // returns that message, or NULL if the extension was declared at global + // scope. If this is not an extension, extension_scope() is undefined (may + // assert-fail). + const Descriptor* extension_scope() const; + + // If type is TYPE_MESSAGE or TYPE_GROUP, returns a descriptor for the + // message or the group type. Otherwise, returns null. + const Descriptor* message_type() const; + // If type is TYPE_ENUM, returns a descriptor for the enum. Otherwise, + // returns null. + const EnumDescriptor* enum_type() const; + + // EXPERIMENTAL; DO NOT USE. + // If this field is a map field, experimental_map_key() is the field + // that is the key for this map. + // experimental_map_key()->containing_type() is the same as message_type(). + const FieldDescriptor* experimental_map_key() const; + + // Get the FieldOptions for this field. This includes things listed in + // square brackets after the field definition. E.g., the field: + // optional string text = 1 [ctype=CORD]; + // has the "ctype" option set. Allowed options are defined by FieldOptions + // in google/protobuf/descriptor.proto, and any available extensions of that + // message. + const FieldOptions& options() const; + + // See Descriptor::CopyTo(). + void CopyTo(FieldDescriptorProto* proto) const; + + // See Descriptor::DebugString(). + string DebugString() const; + + // Helper method to get the CppType for a particular Type. + static CppType TypeToCppType(Type type); + + // Helper method to get the name of a Type. + static const char* TypeName(Type type); + + // Helper method to get the name of a CppType. + static const char* CppTypeName(CppType cpp_type); + + // Return true iff [packed = true] is valid for fields of this type. + static inline bool IsTypePackable(Type field_type); + + // Source Location --------------------------------------------------- + + // Updates |*out_location| to the source location of the complete + // extent of this field declaration. Returns false and leaves + // |*out_location| unchanged iff location information was not available. + bool GetSourceLocation(SourceLocation* out_location) const; + + private: + typedef FieldOptions OptionsType; + + // See Descriptor::DebugString(). + enum PrintLabelFlag { PRINT_LABEL, OMIT_LABEL }; + void DebugString(int depth, PrintLabelFlag print_label_flag, + string* contents) const; + + // formats the default value appropriately and returns it as a string. + // Must have a default value to call this. If quote_string_type is true, then + // types of CPPTYPE_STRING whill be surrounded by quotes and CEscaped. + string DefaultValueAsString(bool quote_string_type) const; + + // Walks up the descriptor tree to generate the source location path + // to this descriptor from the file root. + void GetLocationPath(vector* output) const; + + const string* name_; + const string* full_name_; + const string* lowercase_name_; + const string* camelcase_name_; + const FileDescriptor* file_; + int number_; + Type type_; + Label label_; + bool is_extension_; + int index_in_oneof_; + const Descriptor* containing_type_; + const OneofDescriptor* containing_oneof_; + const Descriptor* extension_scope_; + const Descriptor* message_type_; + const EnumDescriptor* enum_type_; + const FieldDescriptor* experimental_map_key_; + const FieldOptions* options_; + // IMPORTANT: If you add a new field, make sure to search for all instances + // of Allocate() and AllocateArray() in + // descriptor.cc and update them to initialize the field. + + bool has_default_value_; + union { + int32 default_value_int32_; + int64 default_value_int64_; + uint32 default_value_uint32_; + uint64 default_value_uint64_; + float default_value_float_; + double default_value_double_; + bool default_value_bool_; + + const EnumValueDescriptor* default_value_enum_; + const string* default_value_string_; + }; + + static const CppType kTypeToCppTypeMap[MAX_TYPE + 1]; + + static const char * const kTypeToName[MAX_TYPE + 1]; + + static const char * const kCppTypeToName[MAX_CPPTYPE + 1]; + + static const char * const kLabelToName[MAX_LABEL + 1]; + + // Must be constructed using DescriptorPool. + FieldDescriptor() {} + friend class DescriptorBuilder; + friend class FileDescriptor; + friend class Descriptor; + friend class OneofDescriptor; + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FieldDescriptor); +}; + +// Describes a oneof defined in a message type. +class LIBPROTOBUF_EXPORT OneofDescriptor { + public: + const string& name() const; // Name of this oneof. + const string& full_name() const; // Fully-qualified name of the oneof. + + // Index of this oneof within the message's oneof array. + int index() const; + + // The Descriptor for the message containing this oneof. + const Descriptor* containing_type() const; + + // The number of (non-extension) fields which are members of this oneof. + int field_count() const; + // Get a member of this oneof, in the order in which they were declared in the + // .proto file. Does not include extensions. + const FieldDescriptor* field(int index) const; + + // See Descriptor::CopyTo(). + void CopyTo(OneofDescriptorProto* proto) const; + + // See Descriptor::DebugString(). + string DebugString() const; + + // Source Location --------------------------------------------------- + + // Updates |*out_location| to the source location of the complete + // extent of this oneof declaration. Returns false and leaves + // |*out_location| unchanged iff location information was not available. + bool GetSourceLocation(SourceLocation* out_location) const; + + private: + // See Descriptor::DebugString(). + void DebugString(int depth, string* contents) const; + + // Walks up the descriptor tree to generate the source location path + // to this descriptor from the file root. + void GetLocationPath(vector* output) const; + + const string* name_; + const string* full_name_; + const Descriptor* containing_type_; + bool is_extendable_; + int field_count_; + const FieldDescriptor** fields_; + // IMPORTANT: If you add a new field, make sure to search for all instances + // of Allocate() and AllocateArray() + // in descriptor.cc and update them to initialize the field. + + // Must be constructed using DescriptorPool. + OneofDescriptor() {} + friend class DescriptorBuilder; + friend class Descriptor; + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(OneofDescriptor); +}; + +// Describes an enum type defined in a .proto file. To get the EnumDescriptor +// for a generated enum type, call TypeName_descriptor(). Use DescriptorPool +// to construct your own descriptors. +class LIBPROTOBUF_EXPORT EnumDescriptor { + public: + // The name of this enum type in the containing scope. + const string& name() const; + + // The fully-qualified name of the enum type, scope delimited by periods. + const string& full_name() const; + + // Index of this enum within the file or containing message's enum array. + int index() const; + + // The .proto file in which this enum type was defined. Never NULL. + const FileDescriptor* file() const; + + // The number of values for this EnumDescriptor. Guaranteed to be greater + // than zero. + int value_count() const; + // Gets a value by index, where 0 <= index < value_count(). + // These are returned in the order they were defined in the .proto file. + const EnumValueDescriptor* value(int index) const; + + // Looks up a value by name. Returns NULL if no such value exists. + const EnumValueDescriptor* FindValueByName(const string& name) const; + // Looks up a value by number. Returns NULL if no such value exists. If + // multiple values have this number, the first one defined is returned. + const EnumValueDescriptor* FindValueByNumber(int number) const; + + // If this enum type is nested in a message type, this is that message type. + // Otherwise, NULL. + const Descriptor* containing_type() const; + + // Get options for this enum type. These are specified in the .proto file by + // placing lines like "option foo = 1234;" in the enum definition. Allowed + // options are defined by EnumOptions in google/protobuf/descriptor.proto, + // and any available extensions of that message. + const EnumOptions& options() const; + + // See Descriptor::CopyTo(). + void CopyTo(EnumDescriptorProto* proto) const; + + // See Descriptor::DebugString(). + string DebugString() const; + + // Returns true if this is a placeholder for an unknown enum. This will + // only be the case if this descriptor comes from a DescriptorPool + // with AllowUnknownDependencies() set. + bool is_placeholder() const; + + // Source Location --------------------------------------------------- + + // Updates |*out_location| to the source location of the complete + // extent of this enum declaration. Returns false and leaves + // |*out_location| unchanged iff location information was not available. + bool GetSourceLocation(SourceLocation* out_location) const; + + private: + typedef EnumOptions OptionsType; + + // See Descriptor::DebugString(). + void DebugString(int depth, string *contents) const; + + // Walks up the descriptor tree to generate the source location path + // to this descriptor from the file root. + void GetLocationPath(vector* output) const; + + const string* name_; + const string* full_name_; + const FileDescriptor* file_; + const Descriptor* containing_type_; + const EnumOptions* options_; + + // True if this is a placeholder for an unknown type. + bool is_placeholder_; + // True if this is a placeholder and the type name wasn't fully-qualified. + bool is_unqualified_placeholder_; + + int value_count_; + EnumValueDescriptor* values_; + // IMPORTANT: If you add a new field, make sure to search for all instances + // of Allocate() and AllocateArray() in + // descriptor.cc and update them to initialize the field. + + // Must be constructed using DescriptorPool. + EnumDescriptor() {} + friend class DescriptorBuilder; + friend class Descriptor; + friend class FieldDescriptor; + friend class EnumValueDescriptor; + friend class FileDescriptor; + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(EnumDescriptor); +}; + +// Describes an individual enum constant of a particular type. To get the +// EnumValueDescriptor for a given enum value, first get the EnumDescriptor +// for its type, then use EnumDescriptor::FindValueByName() or +// EnumDescriptor::FindValueByNumber(). Use DescriptorPool to construct +// your own descriptors. +class LIBPROTOBUF_EXPORT EnumValueDescriptor { + public: + const string& name() const; // Name of this enum constant. + int index() const; // Index within the enums's Descriptor. + int number() const; // Numeric value of this enum constant. + + // The full_name of an enum value is a sibling symbol of the enum type. + // e.g. the full name of FieldDescriptorProto::TYPE_INT32 is actually + // "google.protobuf.FieldDescriptorProto.TYPE_INT32", NOT + // "google.protobuf.FieldDescriptorProto.Type.TYPE_INT32". This is to conform + // with C++ scoping rules for enums. + const string& full_name() const; + + // The type of this value. Never NULL. + const EnumDescriptor* type() const; + + // Get options for this enum value. These are specified in the .proto file + // by adding text like "[foo = 1234]" after an enum value definition. + // Allowed options are defined by EnumValueOptions in + // google/protobuf/descriptor.proto, and any available extensions of that + // message. + const EnumValueOptions& options() const; + + // See Descriptor::CopyTo(). + void CopyTo(EnumValueDescriptorProto* proto) const; + + // See Descriptor::DebugString(). + string DebugString() const; + + // Source Location --------------------------------------------------- + + // Updates |*out_location| to the source location of the complete + // extent of this enum value declaration. Returns false and leaves + // |*out_location| unchanged iff location information was not available. + bool GetSourceLocation(SourceLocation* out_location) const; + + private: + typedef EnumValueOptions OptionsType; + + // See Descriptor::DebugString(). + void DebugString(int depth, string *contents) const; + + // Walks up the descriptor tree to generate the source location path + // to this descriptor from the file root. + void GetLocationPath(vector* output) const; + + const string* name_; + const string* full_name_; + int number_; + const EnumDescriptor* type_; + const EnumValueOptions* options_; + // IMPORTANT: If you add a new field, make sure to search for all instances + // of Allocate() and AllocateArray() + // in descriptor.cc and update them to initialize the field. + + // Must be constructed using DescriptorPool. + EnumValueDescriptor() {} + friend class DescriptorBuilder; + friend class EnumDescriptor; + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(EnumValueDescriptor); +}; + +// Describes an RPC service. To get the ServiceDescriptor for a service, +// call Service::GetDescriptor(). Generated service classes also have a +// static method called descriptor() which returns the type's +// ServiceDescriptor. Use DescriptorPool to construct your own descriptors. +class LIBPROTOBUF_EXPORT ServiceDescriptor { + public: + // The name of the service, not including its containing scope. + const string& name() const; + // The fully-qualified name of the service, scope delimited by periods. + const string& full_name() const; + // Index of this service within the file's services array. + int index() const; + + // The .proto file in which this service was defined. Never NULL. + const FileDescriptor* file() const; + + // Get options for this service type. These are specified in the .proto file + // by placing lines like "option foo = 1234;" in the service definition. + // Allowed options are defined by ServiceOptions in + // google/protobuf/descriptor.proto, and any available extensions of that + // message. + const ServiceOptions& options() const; + + // The number of methods this service defines. + int method_count() const; + // Gets a MethodDescriptor by index, where 0 <= index < method_count(). + // These are returned in the order they were defined in the .proto file. + const MethodDescriptor* method(int index) const; + + // Look up a MethodDescriptor by name. + const MethodDescriptor* FindMethodByName(const string& name) const; + // See Descriptor::CopyTo(). + void CopyTo(ServiceDescriptorProto* proto) const; + + // See Descriptor::DebugString(). + string DebugString() const; + + // Source Location --------------------------------------------------- + + // Updates |*out_location| to the source location of the complete + // extent of this service declaration. Returns false and leaves + // |*out_location| unchanged iff location information was not available. + bool GetSourceLocation(SourceLocation* out_location) const; + + private: + typedef ServiceOptions OptionsType; + + // See Descriptor::DebugString(). + void DebugString(string *contents) const; + + // Walks up the descriptor tree to generate the source location path + // to this descriptor from the file root. + void GetLocationPath(vector* output) const; + + const string* name_; + const string* full_name_; + const FileDescriptor* file_; + const ServiceOptions* options_; + int method_count_; + MethodDescriptor* methods_; + // IMPORTANT: If you add a new field, make sure to search for all instances + // of Allocate() and AllocateArray() in + // descriptor.cc and update them to initialize the field. + + // Must be constructed using DescriptorPool. + ServiceDescriptor() {} + friend class DescriptorBuilder; + friend class FileDescriptor; + friend class MethodDescriptor; + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ServiceDescriptor); +}; + +// Describes an individual service method. To obtain a MethodDescriptor given +// a service, first get its ServiceDescriptor, then call +// ServiceDescriptor::FindMethodByName(). Use DescriptorPool to construct your +// own descriptors. +class LIBPROTOBUF_EXPORT MethodDescriptor { + public: + // Name of this method, not including containing scope. + const string& name() const; + // The fully-qualified name of the method, scope delimited by periods. + const string& full_name() const; + // Index within the service's Descriptor. + int index() const; + + // Gets the service to which this method belongs. Never NULL. + const ServiceDescriptor* service() const; + + // Gets the type of protocol message which this method accepts as input. + const Descriptor* input_type() const; + // Gets the type of protocol message which this message produces as output. + const Descriptor* output_type() const; + + // Get options for this method. These are specified in the .proto file by + // placing lines like "option foo = 1234;" in curly-braces after a method + // declaration. Allowed options are defined by MethodOptions in + // google/protobuf/descriptor.proto, and any available extensions of that + // message. + const MethodOptions& options() const; + + // See Descriptor::CopyTo(). + void CopyTo(MethodDescriptorProto* proto) const; + + // See Descriptor::DebugString(). + string DebugString() const; + + // Source Location --------------------------------------------------- + + // Updates |*out_location| to the source location of the complete + // extent of this method declaration. Returns false and leaves + // |*out_location| unchanged iff location information was not available. + bool GetSourceLocation(SourceLocation* out_location) const; + + private: + typedef MethodOptions OptionsType; + + // See Descriptor::DebugString(). + void DebugString(int depth, string *contents) const; + + // Walks up the descriptor tree to generate the source location path + // to this descriptor from the file root. + void GetLocationPath(vector* output) const; + + const string* name_; + const string* full_name_; + const ServiceDescriptor* service_; + const Descriptor* input_type_; + const Descriptor* output_type_; + const MethodOptions* options_; + // IMPORTANT: If you add a new field, make sure to search for all instances + // of Allocate() and AllocateArray() in + // descriptor.cc and update them to initialize the field. + + // Must be constructed using DescriptorPool. + MethodDescriptor() {} + friend class DescriptorBuilder; + friend class ServiceDescriptor; + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MethodDescriptor); +}; + + +// Describes a whole .proto file. To get the FileDescriptor for a compiled-in +// file, get the descriptor for something defined in that file and call +// descriptor->file(). Use DescriptorPool to construct your own descriptors. +class LIBPROTOBUF_EXPORT FileDescriptor { + public: + // The filename, relative to the source tree. + // e.g. "google/protobuf/descriptor.proto" + const string& name() const; + + // The package, e.g. "google.protobuf.compiler". + const string& package() const; + + // The DescriptorPool in which this FileDescriptor and all its contents were + // allocated. Never NULL. + const DescriptorPool* pool() const; + + // The number of files imported by this one. + int dependency_count() const; + // Gets an imported file by index, where 0 <= index < dependency_count(). + // These are returned in the order they were defined in the .proto file. + const FileDescriptor* dependency(int index) const; + + // The number of files public imported by this one. + // The public dependency list is a subset of the dependency list. + int public_dependency_count() const; + // Gets a public imported file by index, where 0 <= index < + // public_dependency_count(). + // These are returned in the order they were defined in the .proto file. + const FileDescriptor* public_dependency(int index) const; + + // The number of files that are imported for weak fields. + // The weak dependency list is a subset of the dependency list. + int weak_dependency_count() const; + // Gets a weak imported file by index, where 0 <= index < + // weak_dependency_count(). + // These are returned in the order they were defined in the .proto file. + const FileDescriptor* weak_dependency(int index) const; + + // Number of top-level message types defined in this file. (This does not + // include nested types.) + int message_type_count() const; + // Gets a top-level message type, where 0 <= index < message_type_count(). + // These are returned in the order they were defined in the .proto file. + const Descriptor* message_type(int index) const; + + // Number of top-level enum types defined in this file. (This does not + // include nested types.) + int enum_type_count() const; + // Gets a top-level enum type, where 0 <= index < enum_type_count(). + // These are returned in the order they were defined in the .proto file. + const EnumDescriptor* enum_type(int index) const; + + // Number of services defined in this file. + int service_count() const; + // Gets a service, where 0 <= index < service_count(). + // These are returned in the order they were defined in the .proto file. + const ServiceDescriptor* service(int index) const; + + // Number of extensions defined at file scope. (This does not include + // extensions nested within message types.) + int extension_count() const; + // Gets an extension's descriptor, where 0 <= index < extension_count(). + // These are returned in the order they were defined in the .proto file. + const FieldDescriptor* extension(int index) const; + + // Get options for this file. These are specified in the .proto file by + // placing lines like "option foo = 1234;" at the top level, outside of any + // other definitions. Allowed options are defined by FileOptions in + // google/protobuf/descriptor.proto, and any available extensions of that + // message. + const FileOptions& options() const; + + // Find a top-level message type by name. Returns NULL if not found. + const Descriptor* FindMessageTypeByName(const string& name) const; + // Find a top-level enum type by name. Returns NULL if not found. + const EnumDescriptor* FindEnumTypeByName(const string& name) const; + // Find an enum value defined in any top-level enum by name. Returns NULL if + // not found. + const EnumValueDescriptor* FindEnumValueByName(const string& name) const; + // Find a service definition by name. Returns NULL if not found. + const ServiceDescriptor* FindServiceByName(const string& name) const; + // Find a top-level extension definition by name. Returns NULL if not found. + const FieldDescriptor* FindExtensionByName(const string& name) const; + // Similar to FindExtensionByName(), but searches by lowercased-name. See + // Descriptor::FindFieldByLowercaseName(). + const FieldDescriptor* FindExtensionByLowercaseName(const string& name) const; + // Similar to FindExtensionByName(), but searches by camelcased-name. See + // Descriptor::FindFieldByCamelcaseName(). + const FieldDescriptor* FindExtensionByCamelcaseName(const string& name) const; + + // See Descriptor::CopyTo(). + // Notes: + // - This method does NOT copy source code information since it is relatively + // large and rarely needed. See CopySourceCodeInfoTo() below. + void CopyTo(FileDescriptorProto* proto) const; + // Write the source code information of this FileDescriptor into the given + // FileDescriptorProto. See CopyTo() above. + void CopySourceCodeInfoTo(FileDescriptorProto* proto) const; + + // See Descriptor::DebugString(). + string DebugString() const; + + // Returns true if this is a placeholder for an unknown file. This will + // only be the case if this descriptor comes from a DescriptorPool + // with AllowUnknownDependencies() set. + bool is_placeholder() const; + + private: + // Source Location --------------------------------------------------- + + // Updates |*out_location| to the source location of the complete + // extent of the declaration or declaration-part denoted by |path|. + // Returns false and leaves |*out_location| unchanged iff location + // information was not available. (See SourceCodeInfo for + // description of path encoding.) + bool GetSourceLocation(const vector& path, + SourceLocation* out_location) const; + + typedef FileOptions OptionsType; + + const string* name_; + const string* package_; + const DescriptorPool* pool_; + int dependency_count_; + const FileDescriptor** dependencies_; + int public_dependency_count_; + int* public_dependencies_; + int weak_dependency_count_; + int* weak_dependencies_; + int message_type_count_; + Descriptor* message_types_; + int enum_type_count_; + EnumDescriptor* enum_types_; + int service_count_; + ServiceDescriptor* services_; + int extension_count_; + bool is_placeholder_; + FieldDescriptor* extensions_; + const FileOptions* options_; + + const FileDescriptorTables* tables_; + const SourceCodeInfo* source_code_info_; + // IMPORTANT: If you add a new field, make sure to search for all instances + // of Allocate() and AllocateArray() in + // descriptor.cc and update them to initialize the field. + + FileDescriptor() {} + friend class DescriptorBuilder; + friend class Descriptor; + friend class FieldDescriptor; + friend class OneofDescriptor; + friend class EnumDescriptor; + friend class EnumValueDescriptor; + friend class MethodDescriptor; + friend class ServiceDescriptor; + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FileDescriptor); +}; + +// =================================================================== + +// Used to construct descriptors. +// +// Normally you won't want to build your own descriptors. Message classes +// constructed by the protocol compiler will provide them for you. However, +// if you are implementing Message on your own, or if you are writing a +// program which can operate on totally arbitrary types and needs to load +// them from some sort of database, you might need to. +// +// Since Descriptors are composed of a whole lot of cross-linked bits of +// data that would be a pain to put together manually, the +// DescriptorPool class is provided to make the process easier. It can +// take a FileDescriptorProto (defined in descriptor.proto), validate it, +// and convert it to a set of nicely cross-linked Descriptors. +// +// DescriptorPool also helps with memory management. Descriptors are +// composed of many objects containing static data and pointers to each +// other. In all likelihood, when it comes time to delete this data, +// you'll want to delete it all at once. In fact, it is not uncommon to +// have a whole pool of descriptors all cross-linked with each other which +// you wish to delete all at once. This class represents such a pool, and +// handles the memory management for you. +// +// You can also search for descriptors within a DescriptorPool by name, and +// extensions by number. +class LIBPROTOBUF_EXPORT DescriptorPool { + public: + // Create a normal, empty DescriptorPool. + DescriptorPool(); + + // Constructs a DescriptorPool that, when it can't find something among the + // descriptors already in the pool, looks for it in the given + // DescriptorDatabase. + // Notes: + // - If a DescriptorPool is constructed this way, its BuildFile*() methods + // must not be called (they will assert-fail). The only way to populate + // the pool with descriptors is to call the Find*By*() methods. + // - The Find*By*() methods may block the calling thread if the + // DescriptorDatabase blocks. This in turn means that parsing messages + // may block if they need to look up extensions. + // - The Find*By*() methods will use mutexes for thread-safety, thus making + // them slower even when they don't have to fall back to the database. + // In fact, even the Find*By*() methods of descriptor objects owned by + // this pool will be slower, since they will have to obtain locks too. + // - An ErrorCollector may optionally be given to collect validation errors + // in files loaded from the database. If not given, errors will be printed + // to GOOGLE_LOG(ERROR). Remember that files are built on-demand, so this + // ErrorCollector may be called from any thread that calls one of the + // Find*By*() methods. + // - The DescriptorDatabase must not be mutated during the lifetime of + // the DescriptorPool. Even if the client takes care to avoid data races, + // changes to the content of the DescriptorDatabase may not be reflected + // in subsequent lookups in the DescriptorPool. + class ErrorCollector; + explicit DescriptorPool(DescriptorDatabase* fallback_database, + ErrorCollector* error_collector = NULL); + + ~DescriptorPool(); + + // Get a pointer to the generated pool. Generated protocol message classes + // which are compiled into the binary will allocate their descriptors in + // this pool. Do not add your own descriptors to this pool. + static const DescriptorPool* generated_pool(); + + // Find a FileDescriptor in the pool by file name. Returns NULL if not + // found. + const FileDescriptor* FindFileByName(const string& name) const; + + // Find the FileDescriptor in the pool which defines the given symbol. + // If any of the Find*ByName() methods below would succeed, then this is + // equivalent to calling that method and calling the result's file() method. + // Otherwise this returns NULL. + const FileDescriptor* FindFileContainingSymbol( + const string& symbol_name) const; + + // Looking up descriptors ------------------------------------------ + // These find descriptors by fully-qualified name. These will find both + // top-level descriptors and nested descriptors. They return NULL if not + // found. + + const Descriptor* FindMessageTypeByName(const string& name) const; + const FieldDescriptor* FindFieldByName(const string& name) const; + const FieldDescriptor* FindExtensionByName(const string& name) const; + const OneofDescriptor* FindOneofByName(const string& name) const; + const EnumDescriptor* FindEnumTypeByName(const string& name) const; + const EnumValueDescriptor* FindEnumValueByName(const string& name) const; + const ServiceDescriptor* FindServiceByName(const string& name) const; + const MethodDescriptor* FindMethodByName(const string& name) const; + + // Finds an extension of the given type by number. The extendee must be + // a member of this DescriptorPool or one of its underlays. + const FieldDescriptor* FindExtensionByNumber(const Descriptor* extendee, + int number) const; + + // Finds extensions of extendee. The extensions will be appended to + // out in an undefined order. Only extensions defined directly in + // this DescriptorPool or one of its underlays are guaranteed to be + // found: extensions defined in the fallback database might not be found + // depending on the database implementation. + void FindAllExtensions(const Descriptor* extendee, + vector* out) const; + + // Building descriptors -------------------------------------------- + + // When converting a FileDescriptorProto to a FileDescriptor, various + // errors might be detected in the input. The caller may handle these + // programmatically by implementing an ErrorCollector. + class LIBPROTOBUF_EXPORT ErrorCollector { + public: + inline ErrorCollector() {} + virtual ~ErrorCollector(); + + // These constants specify what exact part of the construct is broken. + // This is useful e.g. for mapping the error back to an exact location + // in a .proto file. + enum ErrorLocation { + NAME, // the symbol name, or the package name for files + NUMBER, // field or extension range number + TYPE, // field type + EXTENDEE, // field extendee + DEFAULT_VALUE, // field default value + INPUT_TYPE, // method input type + OUTPUT_TYPE, // method output type + OPTION_NAME, // name in assignment + OPTION_VALUE, // value in option assignment + OTHER // some other problem + }; + + // Reports an error in the FileDescriptorProto. Use this function if the + // problem occured should interrupt building the FileDescriptorProto. + virtual void AddError( + const string& filename, // File name in which the error occurred. + const string& element_name, // Full name of the erroneous element. + const Message* descriptor, // Descriptor of the erroneous element. + ErrorLocation location, // One of the location constants, above. + const string& message // Human-readable error message. + ) = 0; + + // Reports a warning in the FileDescriptorProto. Use this function if the + // problem occured should NOT interrupt building the FileDescriptorProto. + virtual void AddWarning( + const string& filename, // File name in which the error occurred. + const string& element_name, // Full name of the erroneous element. + const Message* descriptor, // Descriptor of the erroneous element. + ErrorLocation location, // One of the location constants, above. + const string& message // Human-readable error message. + ) {} + + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ErrorCollector); + }; + + // Convert the FileDescriptorProto to real descriptors and place them in + // this DescriptorPool. All dependencies of the file must already be in + // the pool. Returns the resulting FileDescriptor, or NULL if there were + // problems with the input (e.g. the message was invalid, or dependencies + // were missing). Details about the errors are written to GOOGLE_LOG(ERROR). + const FileDescriptor* BuildFile(const FileDescriptorProto& proto); + + // Same as BuildFile() except errors are sent to the given ErrorCollector. + const FileDescriptor* BuildFileCollectingErrors( + const FileDescriptorProto& proto, + ErrorCollector* error_collector); + + // By default, it is an error if a FileDescriptorProto contains references + // to types or other files that are not found in the DescriptorPool (or its + // backing DescriptorDatabase, if any). If you call + // AllowUnknownDependencies(), however, then unknown types and files + // will be replaced by placeholder descriptors (which can be identified by + // the is_placeholder() method). This can allow you to + // perform some useful operations with a .proto file even if you do not + // have access to other .proto files on which it depends. However, some + // heuristics must be used to fill in the gaps in information, and these + // can lead to descriptors which are inaccurate. For example, the + // DescriptorPool may be forced to guess whether an unknown type is a message + // or an enum, as well as what package it resides in. Furthermore, + // placeholder types will not be discoverable via FindMessageTypeByName() + // and similar methods, which could confuse some descriptor-based algorithms. + // Generally, the results of this option should be handled with extreme care. + void AllowUnknownDependencies() { allow_unknown_ = true; } + + // By default, weak imports are allowed to be missing, in which case we will + // use a placeholder for the dependency and convert the field to be an Empty + // message field. If you call EnforceWeakDependencies(true), however, the + // DescriptorPool will report a import not found error. + void EnforceWeakDependencies(bool enforce) { enforce_weak_ = enforce; } + + // Internal stuff -------------------------------------------------- + // These methods MUST NOT be called from outside the proto2 library. + // These methods may contain hidden pitfalls and may be removed in a + // future library version. + + // Create a DescriptorPool which is overlaid on top of some other pool. + // If you search for a descriptor in the overlay and it is not found, the + // underlay will be searched as a backup. If the underlay has its own + // underlay, that will be searched next, and so on. This also means that + // files built in the overlay will be cross-linked with the underlay's + // descriptors if necessary. The underlay remains property of the caller; + // it must remain valid for the lifetime of the newly-constructed pool. + // + // Example: Say you want to parse a .proto file at runtime in order to use + // its type with a DynamicMessage. Say this .proto file has dependencies, + // but you know that all the dependencies will be things that are already + // compiled into the binary. For ease of use, you'd like to load the types + // right out of generated_pool() rather than have to parse redundant copies + // of all these .protos and runtime. But, you don't want to add the parsed + // types directly into generated_pool(): this is not allowed, and would be + // bad design anyway. So, instead, you could use generated_pool() as an + // underlay for a new DescriptorPool in which you add only the new file. + // + // WARNING: Use of underlays can lead to many subtle gotchas. Instead, + // try to formulate what you want to do in terms of DescriptorDatabases. + explicit DescriptorPool(const DescriptorPool* underlay); + + // Called by generated classes at init time to add their descriptors to + // generated_pool. Do NOT call this in your own code! filename must be a + // permanent string (e.g. a string literal). + static void InternalAddGeneratedFile( + const void* encoded_file_descriptor, int size); + + + // For internal use only: Gets a non-const pointer to the generated pool. + // This is called at static-initialization time only, so thread-safety is + // not a concern. If both an underlay and a fallback database are present, + // the underlay takes precedence. + static DescriptorPool* internal_generated_pool(); + + // For internal use only: Changes the behavior of BuildFile() such that it + // allows the file to make reference to message types declared in other files + // which it did not officially declare as dependencies. + void InternalDontEnforceDependencies(); + + // For internal use only. + void internal_set_underlay(const DescriptorPool* underlay) { + underlay_ = underlay; + } + + // For internal (unit test) use only: Returns true if a FileDescriptor has + // been constructed for the given file, false otherwise. Useful for testing + // lazy descriptor initialization behavior. + bool InternalIsFileLoaded(const string& filename) const; + + + // Add a file to unused_import_track_files_. DescriptorBuilder will log + // warnings for those files if there is any unused import. + void AddUnusedImportTrackFile(const string& file_name); + void ClearUnusedImportTrackFiles(); + + private: + friend class Descriptor; + friend class FieldDescriptor; + friend class EnumDescriptor; + friend class ServiceDescriptor; + friend class FileDescriptor; + friend class DescriptorBuilder; + + // Return true if the given name is a sub-symbol of any non-package + // descriptor that already exists in the descriptor pool. (The full + // definition of such types is already known.) + bool IsSubSymbolOfBuiltType(const string& name) const; + + // Tries to find something in the fallback database and link in the + // corresponding proto file. Returns true if successful, in which case + // the caller should search for the thing again. These are declared + // const because they are called by (semantically) const methods. + bool TryFindFileInFallbackDatabase(const string& name) const; + bool TryFindSymbolInFallbackDatabase(const string& name) const; + bool TryFindExtensionInFallbackDatabase(const Descriptor* containing_type, + int field_number) const; + + // Like BuildFile() but called internally when the file has been loaded from + // fallback_database_. Declared const because it is called by (semantically) + // const methods. + const FileDescriptor* BuildFileFromDatabase( + const FileDescriptorProto& proto) const; + + // If fallback_database_ is NULL, this is NULL. Otherwise, this is a mutex + // which must be locked while accessing tables_. + Mutex* mutex_; + + // See constructor. + DescriptorDatabase* fallback_database_; + ErrorCollector* default_error_collector_; + const DescriptorPool* underlay_; + + // This class contains a lot of hash maps with complicated types that + // we'd like to keep out of the header. + class Tables; + scoped_ptr tables_; + + bool enforce_dependencies_; + bool allow_unknown_; + bool enforce_weak_; + std::set unused_import_track_files_; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(DescriptorPool); +}; + +// inline methods ==================================================== + +// These macros makes this repetitive code more readable. +#define PROTOBUF_DEFINE_ACCESSOR(CLASS, FIELD, TYPE) \ + inline TYPE CLASS::FIELD() const { return FIELD##_; } + +// Strings fields are stored as pointers but returned as const references. +#define PROTOBUF_DEFINE_STRING_ACCESSOR(CLASS, FIELD) \ + inline const string& CLASS::FIELD() const { return *FIELD##_; } + +// Arrays take an index parameter, obviously. +#define PROTOBUF_DEFINE_ARRAY_ACCESSOR(CLASS, FIELD, TYPE) \ + inline TYPE CLASS::FIELD(int index) const { return FIELD##s_ + index; } + +#define PROTOBUF_DEFINE_OPTIONS_ACCESSOR(CLASS, TYPE) \ + inline const TYPE& CLASS::options() const { return *options_; } + +PROTOBUF_DEFINE_STRING_ACCESSOR(Descriptor, name) +PROTOBUF_DEFINE_STRING_ACCESSOR(Descriptor, full_name) +PROTOBUF_DEFINE_ACCESSOR(Descriptor, file, const FileDescriptor*) +PROTOBUF_DEFINE_ACCESSOR(Descriptor, containing_type, const Descriptor*) + +PROTOBUF_DEFINE_ACCESSOR(Descriptor, field_count, int) +PROTOBUF_DEFINE_ACCESSOR(Descriptor, oneof_decl_count, int) +PROTOBUF_DEFINE_ACCESSOR(Descriptor, nested_type_count, int) +PROTOBUF_DEFINE_ACCESSOR(Descriptor, enum_type_count, int) + +PROTOBUF_DEFINE_ARRAY_ACCESSOR(Descriptor, field, const FieldDescriptor*) +PROTOBUF_DEFINE_ARRAY_ACCESSOR(Descriptor, oneof_decl, const OneofDescriptor*) +PROTOBUF_DEFINE_ARRAY_ACCESSOR(Descriptor, nested_type, const Descriptor*) +PROTOBUF_DEFINE_ARRAY_ACCESSOR(Descriptor, enum_type, const EnumDescriptor*) + +PROTOBUF_DEFINE_ACCESSOR(Descriptor, extension_range_count, int) +PROTOBUF_DEFINE_ACCESSOR(Descriptor, extension_count, int) +PROTOBUF_DEFINE_ARRAY_ACCESSOR(Descriptor, extension_range, + const Descriptor::ExtensionRange*) +PROTOBUF_DEFINE_ARRAY_ACCESSOR(Descriptor, extension, + const FieldDescriptor*) +PROTOBUF_DEFINE_OPTIONS_ACCESSOR(Descriptor, MessageOptions); +PROTOBUF_DEFINE_ACCESSOR(Descriptor, is_placeholder, bool) + +PROTOBUF_DEFINE_STRING_ACCESSOR(FieldDescriptor, name) +PROTOBUF_DEFINE_STRING_ACCESSOR(FieldDescriptor, full_name) +PROTOBUF_DEFINE_STRING_ACCESSOR(FieldDescriptor, lowercase_name) +PROTOBUF_DEFINE_STRING_ACCESSOR(FieldDescriptor, camelcase_name) +PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, file, const FileDescriptor*) +PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, number, int) +PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, is_extension, bool) +PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, type, FieldDescriptor::Type) +PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, label, FieldDescriptor::Label) +PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, containing_type, const Descriptor*) +PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, containing_oneof, + const OneofDescriptor*) +PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, index_in_oneof, int) +PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, extension_scope, const Descriptor*) +PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, message_type, const Descriptor*) +PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, enum_type, const EnumDescriptor*) +PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, experimental_map_key, + const FieldDescriptor*) +PROTOBUF_DEFINE_OPTIONS_ACCESSOR(FieldDescriptor, FieldOptions) +PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, has_default_value, bool) +PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_int32 , int32 ) +PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_int64 , int64 ) +PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_uint32, uint32) +PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_uint64, uint64) +PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_float , float ) +PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_double, double) +PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_bool , bool ) +PROTOBUF_DEFINE_ACCESSOR(FieldDescriptor, default_value_enum, + const EnumValueDescriptor*) +PROTOBUF_DEFINE_STRING_ACCESSOR(FieldDescriptor, default_value_string) + +PROTOBUF_DEFINE_STRING_ACCESSOR(OneofDescriptor, name) +PROTOBUF_DEFINE_STRING_ACCESSOR(OneofDescriptor, full_name) +PROTOBUF_DEFINE_ACCESSOR(OneofDescriptor, containing_type, const Descriptor*) +PROTOBUF_DEFINE_ACCESSOR(OneofDescriptor, field_count, int) + +PROTOBUF_DEFINE_STRING_ACCESSOR(EnumDescriptor, name) +PROTOBUF_DEFINE_STRING_ACCESSOR(EnumDescriptor, full_name) +PROTOBUF_DEFINE_ACCESSOR(EnumDescriptor, file, const FileDescriptor*) +PROTOBUF_DEFINE_ACCESSOR(EnumDescriptor, containing_type, const Descriptor*) +PROTOBUF_DEFINE_ACCESSOR(EnumDescriptor, value_count, int) +PROTOBUF_DEFINE_ARRAY_ACCESSOR(EnumDescriptor, value, + const EnumValueDescriptor*) +PROTOBUF_DEFINE_OPTIONS_ACCESSOR(EnumDescriptor, EnumOptions); +PROTOBUF_DEFINE_ACCESSOR(EnumDescriptor, is_placeholder, bool) + +PROTOBUF_DEFINE_STRING_ACCESSOR(EnumValueDescriptor, name) +PROTOBUF_DEFINE_STRING_ACCESSOR(EnumValueDescriptor, full_name) +PROTOBUF_DEFINE_ACCESSOR(EnumValueDescriptor, number, int) +PROTOBUF_DEFINE_ACCESSOR(EnumValueDescriptor, type, const EnumDescriptor*) +PROTOBUF_DEFINE_OPTIONS_ACCESSOR(EnumValueDescriptor, EnumValueOptions) + +PROTOBUF_DEFINE_STRING_ACCESSOR(ServiceDescriptor, name) +PROTOBUF_DEFINE_STRING_ACCESSOR(ServiceDescriptor, full_name) +PROTOBUF_DEFINE_ACCESSOR(ServiceDescriptor, file, const FileDescriptor*) +PROTOBUF_DEFINE_ACCESSOR(ServiceDescriptor, method_count, int) +PROTOBUF_DEFINE_ARRAY_ACCESSOR(ServiceDescriptor, method, + const MethodDescriptor*) +PROTOBUF_DEFINE_OPTIONS_ACCESSOR(ServiceDescriptor, ServiceOptions); + +PROTOBUF_DEFINE_STRING_ACCESSOR(MethodDescriptor, name) +PROTOBUF_DEFINE_STRING_ACCESSOR(MethodDescriptor, full_name) +PROTOBUF_DEFINE_ACCESSOR(MethodDescriptor, service, const ServiceDescriptor*) +PROTOBUF_DEFINE_ACCESSOR(MethodDescriptor, input_type, const Descriptor*) +PROTOBUF_DEFINE_ACCESSOR(MethodDescriptor, output_type, const Descriptor*) +PROTOBUF_DEFINE_OPTIONS_ACCESSOR(MethodDescriptor, MethodOptions); +PROTOBUF_DEFINE_STRING_ACCESSOR(FileDescriptor, name) +PROTOBUF_DEFINE_STRING_ACCESSOR(FileDescriptor, package) +PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, pool, const DescriptorPool*) +PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, dependency_count, int) +PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, public_dependency_count, int) +PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, weak_dependency_count, int) +PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, message_type_count, int) +PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, enum_type_count, int) +PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, service_count, int) +PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, extension_count, int) +PROTOBUF_DEFINE_OPTIONS_ACCESSOR(FileDescriptor, FileOptions); +PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, is_placeholder, bool) + +PROTOBUF_DEFINE_ARRAY_ACCESSOR(FileDescriptor, message_type, const Descriptor*) +PROTOBUF_DEFINE_ARRAY_ACCESSOR(FileDescriptor, enum_type, const EnumDescriptor*) +PROTOBUF_DEFINE_ARRAY_ACCESSOR(FileDescriptor, service, + const ServiceDescriptor*) +PROTOBUF_DEFINE_ARRAY_ACCESSOR(FileDescriptor, extension, + const FieldDescriptor*) + +#undef PROTOBUF_DEFINE_ACCESSOR +#undef PROTOBUF_DEFINE_STRING_ACCESSOR +#undef PROTOBUF_DEFINE_ARRAY_ACCESSOR + +// A few accessors differ from the macros... + +inline bool Descriptor::IsExtensionNumber(int number) const { + return FindExtensionRangeContainingNumber(number) != NULL; +} + +inline bool FieldDescriptor::is_required() const { + return label() == LABEL_REQUIRED; +} + +inline bool FieldDescriptor::is_optional() const { + return label() == LABEL_OPTIONAL; +} + +inline bool FieldDescriptor::is_repeated() const { + return label() == LABEL_REPEATED; +} + +inline bool FieldDescriptor::is_packable() const { + return is_repeated() && IsTypePackable(type()); +} + +// To save space, index() is computed by looking at the descriptor's position +// in the parent's array of children. +inline int FieldDescriptor::index() const { + if (!is_extension_) { + return static_cast(this - containing_type_->fields_); + } else if (extension_scope_ != NULL) { + return static_cast(this - extension_scope_->extensions_); + } else { + return static_cast(this - file_->extensions_); + } +} + +inline int Descriptor::index() const { + if (containing_type_ == NULL) { + return static_cast(this - file_->message_types_); + } else { + return static_cast(this - containing_type_->nested_types_); + } +} + +inline int OneofDescriptor::index() const { + return static_cast(this - containing_type_->oneof_decls_); +} + +inline int EnumDescriptor::index() const { + if (containing_type_ == NULL) { + return static_cast(this - file_->enum_types_); + } else { + return static_cast(this - containing_type_->enum_types_); + } +} + +inline int EnumValueDescriptor::index() const { + return static_cast(this - type_->values_); +} + +inline int ServiceDescriptor::index() const { + return static_cast(this - file_->services_); +} + +inline int MethodDescriptor::index() const { + return static_cast(this - service_->methods_); +} + +inline const char* FieldDescriptor::type_name() const { + return kTypeToName[type_]; +} + +inline FieldDescriptor::CppType FieldDescriptor::cpp_type() const { + return kTypeToCppTypeMap[type_]; +} + +inline const char* FieldDescriptor::cpp_type_name() const { + return kCppTypeToName[kTypeToCppTypeMap[type_]]; +} + +inline FieldDescriptor::CppType FieldDescriptor::TypeToCppType(Type type) { + return kTypeToCppTypeMap[type]; +} + +inline const char* FieldDescriptor::TypeName(Type type) { + return kTypeToName[type]; +} + +inline const char* FieldDescriptor::CppTypeName(CppType cpp_type) { + return kCppTypeToName[cpp_type]; +} + +inline bool FieldDescriptor::IsTypePackable(Type field_type) { + return (field_type != FieldDescriptor::TYPE_STRING && + field_type != FieldDescriptor::TYPE_GROUP && + field_type != FieldDescriptor::TYPE_MESSAGE && + field_type != FieldDescriptor::TYPE_BYTES); +} + +inline const FileDescriptor* FileDescriptor::dependency(int index) const { + return dependencies_[index]; +} + +inline const FileDescriptor* FileDescriptor::public_dependency( + int index) const { + return dependencies_[public_dependencies_[index]]; +} + +inline const FileDescriptor* FileDescriptor::weak_dependency( + int index) const { + return dependencies_[weak_dependencies_[index]]; +} + +// Can't use PROTOBUF_DEFINE_ARRAY_ACCESSOR because fields_ is actually an array +// of pointers rather than the usual array of objects. +inline const FieldDescriptor* OneofDescriptor::field(int index) const { + return fields_[index]; +} + +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_DESCRIPTOR_H__ diff --git a/kortex_gazebo/include/google/protobuf/descriptor.pb.h b/kortex_gazebo/include/google/protobuf/descriptor.pb.h new file mode 100644 index 00000000..45521812 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/descriptor.pb.h @@ -0,0 +1,6761 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/protobuf/descriptor.proto + +#ifndef PROTOBUF_google_2fprotobuf_2fdescriptor_2eproto__INCLUDED +#define PROTOBUF_google_2fprotobuf_2fdescriptor_2eproto__INCLUDED + +#include + +#include + +#if GOOGLE_PROTOBUF_VERSION < 2006000 +#error This file was generated by a newer version of protoc which is +#error incompatible with your Protocol Buffer headers. Please update +#error your headers. +#endif +#if 2006001 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION +#error This file was generated by an older version of protoc which is +#error incompatible with your Protocol Buffer headers. Please +#error regenerate this file with a newer version of protoc. +#endif + +#include +#include +#include +#include +#include +#include +// @@protoc_insertion_point(includes) + +namespace google { +namespace protobuf { + +// Internal implementation detail -- do not call these. +void LIBPROTOBUF_EXPORT protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto(); +void protobuf_AssignDesc_google_2fprotobuf_2fdescriptor_2eproto(); +void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto(); + +class FileDescriptorSet; +class FileDescriptorProto; +class DescriptorProto; +class DescriptorProto_ExtensionRange; +class FieldDescriptorProto; +class OneofDescriptorProto; +class EnumDescriptorProto; +class EnumValueDescriptorProto; +class ServiceDescriptorProto; +class MethodDescriptorProto; +class FileOptions; +class MessageOptions; +class FieldOptions; +class EnumOptions; +class EnumValueOptions; +class ServiceOptions; +class MethodOptions; +class UninterpretedOption; +class UninterpretedOption_NamePart; +class SourceCodeInfo; +class SourceCodeInfo_Location; + +enum FieldDescriptorProto_Type { + FieldDescriptorProto_Type_TYPE_DOUBLE = 1, + FieldDescriptorProto_Type_TYPE_FLOAT = 2, + FieldDescriptorProto_Type_TYPE_INT64 = 3, + FieldDescriptorProto_Type_TYPE_UINT64 = 4, + FieldDescriptorProto_Type_TYPE_INT32 = 5, + FieldDescriptorProto_Type_TYPE_FIXED64 = 6, + FieldDescriptorProto_Type_TYPE_FIXED32 = 7, + FieldDescriptorProto_Type_TYPE_BOOL = 8, + FieldDescriptorProto_Type_TYPE_STRING = 9, + FieldDescriptorProto_Type_TYPE_GROUP = 10, + FieldDescriptorProto_Type_TYPE_MESSAGE = 11, + FieldDescriptorProto_Type_TYPE_BYTES = 12, + FieldDescriptorProto_Type_TYPE_UINT32 = 13, + FieldDescriptorProto_Type_TYPE_ENUM = 14, + FieldDescriptorProto_Type_TYPE_SFIXED32 = 15, + FieldDescriptorProto_Type_TYPE_SFIXED64 = 16, + FieldDescriptorProto_Type_TYPE_SINT32 = 17, + FieldDescriptorProto_Type_TYPE_SINT64 = 18 +}; +LIBPROTOBUF_EXPORT bool FieldDescriptorProto_Type_IsValid(int value); +const FieldDescriptorProto_Type FieldDescriptorProto_Type_Type_MIN = FieldDescriptorProto_Type_TYPE_DOUBLE; +const FieldDescriptorProto_Type FieldDescriptorProto_Type_Type_MAX = FieldDescriptorProto_Type_TYPE_SINT64; +const int FieldDescriptorProto_Type_Type_ARRAYSIZE = FieldDescriptorProto_Type_Type_MAX + 1; + +LIBPROTOBUF_EXPORT const ::google::protobuf::EnumDescriptor* FieldDescriptorProto_Type_descriptor(); +inline const ::std::string& FieldDescriptorProto_Type_Name(FieldDescriptorProto_Type value) { + return ::google::protobuf::internal::NameOfEnum( + FieldDescriptorProto_Type_descriptor(), value); +} +inline bool FieldDescriptorProto_Type_Parse( + const ::std::string& name, FieldDescriptorProto_Type* value) { + return ::google::protobuf::internal::ParseNamedEnum( + FieldDescriptorProto_Type_descriptor(), name, value); +} +enum FieldDescriptorProto_Label { + FieldDescriptorProto_Label_LABEL_OPTIONAL = 1, + FieldDescriptorProto_Label_LABEL_REQUIRED = 2, + FieldDescriptorProto_Label_LABEL_REPEATED = 3 +}; +LIBPROTOBUF_EXPORT bool FieldDescriptorProto_Label_IsValid(int value); +const FieldDescriptorProto_Label FieldDescriptorProto_Label_Label_MIN = FieldDescriptorProto_Label_LABEL_OPTIONAL; +const FieldDescriptorProto_Label FieldDescriptorProto_Label_Label_MAX = FieldDescriptorProto_Label_LABEL_REPEATED; +const int FieldDescriptorProto_Label_Label_ARRAYSIZE = FieldDescriptorProto_Label_Label_MAX + 1; + +LIBPROTOBUF_EXPORT const ::google::protobuf::EnumDescriptor* FieldDescriptorProto_Label_descriptor(); +inline const ::std::string& FieldDescriptorProto_Label_Name(FieldDescriptorProto_Label value) { + return ::google::protobuf::internal::NameOfEnum( + FieldDescriptorProto_Label_descriptor(), value); +} +inline bool FieldDescriptorProto_Label_Parse( + const ::std::string& name, FieldDescriptorProto_Label* value) { + return ::google::protobuf::internal::ParseNamedEnum( + FieldDescriptorProto_Label_descriptor(), name, value); +} +enum FileOptions_OptimizeMode { + FileOptions_OptimizeMode_SPEED = 1, + FileOptions_OptimizeMode_CODE_SIZE = 2, + FileOptions_OptimizeMode_LITE_RUNTIME = 3 +}; +LIBPROTOBUF_EXPORT bool FileOptions_OptimizeMode_IsValid(int value); +const FileOptions_OptimizeMode FileOptions_OptimizeMode_OptimizeMode_MIN = FileOptions_OptimizeMode_SPEED; +const FileOptions_OptimizeMode FileOptions_OptimizeMode_OptimizeMode_MAX = FileOptions_OptimizeMode_LITE_RUNTIME; +const int FileOptions_OptimizeMode_OptimizeMode_ARRAYSIZE = FileOptions_OptimizeMode_OptimizeMode_MAX + 1; + +LIBPROTOBUF_EXPORT const ::google::protobuf::EnumDescriptor* FileOptions_OptimizeMode_descriptor(); +inline const ::std::string& FileOptions_OptimizeMode_Name(FileOptions_OptimizeMode value) { + return ::google::protobuf::internal::NameOfEnum( + FileOptions_OptimizeMode_descriptor(), value); +} +inline bool FileOptions_OptimizeMode_Parse( + const ::std::string& name, FileOptions_OptimizeMode* value) { + return ::google::protobuf::internal::ParseNamedEnum( + FileOptions_OptimizeMode_descriptor(), name, value); +} +enum FieldOptions_CType { + FieldOptions_CType_STRING = 0, + FieldOptions_CType_CORD = 1, + FieldOptions_CType_STRING_PIECE = 2 +}; +LIBPROTOBUF_EXPORT bool FieldOptions_CType_IsValid(int value); +const FieldOptions_CType FieldOptions_CType_CType_MIN = FieldOptions_CType_STRING; +const FieldOptions_CType FieldOptions_CType_CType_MAX = FieldOptions_CType_STRING_PIECE; +const int FieldOptions_CType_CType_ARRAYSIZE = FieldOptions_CType_CType_MAX + 1; + +LIBPROTOBUF_EXPORT const ::google::protobuf::EnumDescriptor* FieldOptions_CType_descriptor(); +inline const ::std::string& FieldOptions_CType_Name(FieldOptions_CType value) { + return ::google::protobuf::internal::NameOfEnum( + FieldOptions_CType_descriptor(), value); +} +inline bool FieldOptions_CType_Parse( + const ::std::string& name, FieldOptions_CType* value) { + return ::google::protobuf::internal::ParseNamedEnum( + FieldOptions_CType_descriptor(), name, value); +} +// =================================================================== + +class LIBPROTOBUF_EXPORT FileDescriptorSet : public ::google::protobuf::Message { + public: + FileDescriptorSet(); + virtual ~FileDescriptorSet(); + + FileDescriptorSet(const FileDescriptorSet& from); + + inline FileDescriptorSet& operator=(const FileDescriptorSet& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const FileDescriptorSet& default_instance(); + + void Swap(FileDescriptorSet* other); + + // implements Message ---------------------------------------------- + + FileDescriptorSet* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const FileDescriptorSet& from); + void MergeFrom(const FileDescriptorSet& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // repeated .google.protobuf.FileDescriptorProto file = 1; + inline int file_size() const; + inline void clear_file(); + static const int kFileFieldNumber = 1; + inline const ::google::protobuf::FileDescriptorProto& file(int index) const; + inline ::google::protobuf::FileDescriptorProto* mutable_file(int index); + inline ::google::protobuf::FileDescriptorProto* add_file(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::FileDescriptorProto >& + file() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::FileDescriptorProto >* + mutable_file(); + + // @@protoc_insertion_point(class_scope:google.protobuf.FileDescriptorSet) + private: + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::FileDescriptorProto > file_; + friend void LIBPROTOBUF_EXPORT protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto(); + + void InitAsDefaultInstance(); + static FileDescriptorSet* default_instance_; +}; +// ------------------------------------------------------------------- + +class LIBPROTOBUF_EXPORT FileDescriptorProto : public ::google::protobuf::Message { + public: + FileDescriptorProto(); + virtual ~FileDescriptorProto(); + + FileDescriptorProto(const FileDescriptorProto& from); + + inline FileDescriptorProto& operator=(const FileDescriptorProto& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const FileDescriptorProto& default_instance(); + + void Swap(FileDescriptorProto* other); + + // implements Message ---------------------------------------------- + + FileDescriptorProto* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const FileDescriptorProto& from); + void MergeFrom(const FileDescriptorProto& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional string name = 1; + inline bool has_name() const; + inline void clear_name(); + static const int kNameFieldNumber = 1; + inline const ::std::string& name() const; + inline void set_name(const ::std::string& value); + inline void set_name(const char* value); + inline void set_name(const char* value, size_t size); + inline ::std::string* mutable_name(); + inline ::std::string* release_name(); + inline void set_allocated_name(::std::string* name); + + // optional string package = 2; + inline bool has_package() const; + inline void clear_package(); + static const int kPackageFieldNumber = 2; + inline const ::std::string& package() const; + inline void set_package(const ::std::string& value); + inline void set_package(const char* value); + inline void set_package(const char* value, size_t size); + inline ::std::string* mutable_package(); + inline ::std::string* release_package(); + inline void set_allocated_package(::std::string* package); + + // repeated string dependency = 3; + inline int dependency_size() const; + inline void clear_dependency(); + static const int kDependencyFieldNumber = 3; + inline const ::std::string& dependency(int index) const; + inline ::std::string* mutable_dependency(int index); + inline void set_dependency(int index, const ::std::string& value); + inline void set_dependency(int index, const char* value); + inline void set_dependency(int index, const char* value, size_t size); + inline ::std::string* add_dependency(); + inline void add_dependency(const ::std::string& value); + inline void add_dependency(const char* value); + inline void add_dependency(const char* value, size_t size); + inline const ::google::protobuf::RepeatedPtrField< ::std::string>& dependency() const; + inline ::google::protobuf::RepeatedPtrField< ::std::string>* mutable_dependency(); + + // repeated int32 public_dependency = 10; + inline int public_dependency_size() const; + inline void clear_public_dependency(); + static const int kPublicDependencyFieldNumber = 10; + inline ::google::protobuf::int32 public_dependency(int index) const; + inline void set_public_dependency(int index, ::google::protobuf::int32 value); + inline void add_public_dependency(::google::protobuf::int32 value); + inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >& + public_dependency() const; + inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >* + mutable_public_dependency(); + + // repeated int32 weak_dependency = 11; + inline int weak_dependency_size() const; + inline void clear_weak_dependency(); + static const int kWeakDependencyFieldNumber = 11; + inline ::google::protobuf::int32 weak_dependency(int index) const; + inline void set_weak_dependency(int index, ::google::protobuf::int32 value); + inline void add_weak_dependency(::google::protobuf::int32 value); + inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >& + weak_dependency() const; + inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >* + mutable_weak_dependency(); + + // repeated .google.protobuf.DescriptorProto message_type = 4; + inline int message_type_size() const; + inline void clear_message_type(); + static const int kMessageTypeFieldNumber = 4; + inline const ::google::protobuf::DescriptorProto& message_type(int index) const; + inline ::google::protobuf::DescriptorProto* mutable_message_type(int index); + inline ::google::protobuf::DescriptorProto* add_message_type(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto >& + message_type() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto >* + mutable_message_type(); + + // repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + inline int enum_type_size() const; + inline void clear_enum_type(); + static const int kEnumTypeFieldNumber = 5; + inline const ::google::protobuf::EnumDescriptorProto& enum_type(int index) const; + inline ::google::protobuf::EnumDescriptorProto* mutable_enum_type(int index); + inline ::google::protobuf::EnumDescriptorProto* add_enum_type(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumDescriptorProto >& + enum_type() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumDescriptorProto >* + mutable_enum_type(); + + // repeated .google.protobuf.ServiceDescriptorProto service = 6; + inline int service_size() const; + inline void clear_service(); + static const int kServiceFieldNumber = 6; + inline const ::google::protobuf::ServiceDescriptorProto& service(int index) const; + inline ::google::protobuf::ServiceDescriptorProto* mutable_service(int index); + inline ::google::protobuf::ServiceDescriptorProto* add_service(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::ServiceDescriptorProto >& + service() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::ServiceDescriptorProto >* + mutable_service(); + + // repeated .google.protobuf.FieldDescriptorProto extension = 7; + inline int extension_size() const; + inline void clear_extension(); + static const int kExtensionFieldNumber = 7; + inline const ::google::protobuf::FieldDescriptorProto& extension(int index) const; + inline ::google::protobuf::FieldDescriptorProto* mutable_extension(int index); + inline ::google::protobuf::FieldDescriptorProto* add_extension(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >& + extension() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >* + mutable_extension(); + + // optional .google.protobuf.FileOptions options = 8; + inline bool has_options() const; + inline void clear_options(); + static const int kOptionsFieldNumber = 8; + inline const ::google::protobuf::FileOptions& options() const; + inline ::google::protobuf::FileOptions* mutable_options(); + inline ::google::protobuf::FileOptions* release_options(); + inline void set_allocated_options(::google::protobuf::FileOptions* options); + + // optional .google.protobuf.SourceCodeInfo source_code_info = 9; + inline bool has_source_code_info() const; + inline void clear_source_code_info(); + static const int kSourceCodeInfoFieldNumber = 9; + inline const ::google::protobuf::SourceCodeInfo& source_code_info() const; + inline ::google::protobuf::SourceCodeInfo* mutable_source_code_info(); + inline ::google::protobuf::SourceCodeInfo* release_source_code_info(); + inline void set_allocated_source_code_info(::google::protobuf::SourceCodeInfo* source_code_info); + + // @@protoc_insertion_point(class_scope:google.protobuf.FileDescriptorProto) + private: + inline void set_has_name(); + inline void clear_has_name(); + inline void set_has_package(); + inline void clear_has_package(); + inline void set_has_options(); + inline void clear_has_options(); + inline void set_has_source_code_info(); + inline void clear_has_source_code_info(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::std::string* name_; + ::std::string* package_; + ::google::protobuf::RepeatedPtrField< ::std::string> dependency_; + ::google::protobuf::RepeatedField< ::google::protobuf::int32 > public_dependency_; + ::google::protobuf::RepeatedField< ::google::protobuf::int32 > weak_dependency_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto > message_type_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumDescriptorProto > enum_type_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::ServiceDescriptorProto > service_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto > extension_; + ::google::protobuf::FileOptions* options_; + ::google::protobuf::SourceCodeInfo* source_code_info_; + friend void LIBPROTOBUF_EXPORT protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto(); + + void InitAsDefaultInstance(); + static FileDescriptorProto* default_instance_; +}; +// ------------------------------------------------------------------- + +class LIBPROTOBUF_EXPORT DescriptorProto_ExtensionRange : public ::google::protobuf::Message { + public: + DescriptorProto_ExtensionRange(); + virtual ~DescriptorProto_ExtensionRange(); + + DescriptorProto_ExtensionRange(const DescriptorProto_ExtensionRange& from); + + inline DescriptorProto_ExtensionRange& operator=(const DescriptorProto_ExtensionRange& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const DescriptorProto_ExtensionRange& default_instance(); + + void Swap(DescriptorProto_ExtensionRange* other); + + // implements Message ---------------------------------------------- + + DescriptorProto_ExtensionRange* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const DescriptorProto_ExtensionRange& from); + void MergeFrom(const DescriptorProto_ExtensionRange& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional int32 start = 1; + inline bool has_start() const; + inline void clear_start(); + static const int kStartFieldNumber = 1; + inline ::google::protobuf::int32 start() const; + inline void set_start(::google::protobuf::int32 value); + + // optional int32 end = 2; + inline bool has_end() const; + inline void clear_end(); + static const int kEndFieldNumber = 2; + inline ::google::protobuf::int32 end() const; + inline void set_end(::google::protobuf::int32 value); + + // @@protoc_insertion_point(class_scope:google.protobuf.DescriptorProto.ExtensionRange) + private: + inline void set_has_start(); + inline void clear_has_start(); + inline void set_has_end(); + inline void clear_has_end(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::google::protobuf::int32 start_; + ::google::protobuf::int32 end_; + friend void LIBPROTOBUF_EXPORT protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto(); + + void InitAsDefaultInstance(); + static DescriptorProto_ExtensionRange* default_instance_; +}; +// ------------------------------------------------------------------- + +class LIBPROTOBUF_EXPORT DescriptorProto : public ::google::protobuf::Message { + public: + DescriptorProto(); + virtual ~DescriptorProto(); + + DescriptorProto(const DescriptorProto& from); + + inline DescriptorProto& operator=(const DescriptorProto& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const DescriptorProto& default_instance(); + + void Swap(DescriptorProto* other); + + // implements Message ---------------------------------------------- + + DescriptorProto* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const DescriptorProto& from); + void MergeFrom(const DescriptorProto& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + typedef DescriptorProto_ExtensionRange ExtensionRange; + + // accessors ------------------------------------------------------- + + // optional string name = 1; + inline bool has_name() const; + inline void clear_name(); + static const int kNameFieldNumber = 1; + inline const ::std::string& name() const; + inline void set_name(const ::std::string& value); + inline void set_name(const char* value); + inline void set_name(const char* value, size_t size); + inline ::std::string* mutable_name(); + inline ::std::string* release_name(); + inline void set_allocated_name(::std::string* name); + + // repeated .google.protobuf.FieldDescriptorProto field = 2; + inline int field_size() const; + inline void clear_field(); + static const int kFieldFieldNumber = 2; + inline const ::google::protobuf::FieldDescriptorProto& field(int index) const; + inline ::google::protobuf::FieldDescriptorProto* mutable_field(int index); + inline ::google::protobuf::FieldDescriptorProto* add_field(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >& + field() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >* + mutable_field(); + + // repeated .google.protobuf.FieldDescriptorProto extension = 6; + inline int extension_size() const; + inline void clear_extension(); + static const int kExtensionFieldNumber = 6; + inline const ::google::protobuf::FieldDescriptorProto& extension(int index) const; + inline ::google::protobuf::FieldDescriptorProto* mutable_extension(int index); + inline ::google::protobuf::FieldDescriptorProto* add_extension(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >& + extension() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >* + mutable_extension(); + + // repeated .google.protobuf.DescriptorProto nested_type = 3; + inline int nested_type_size() const; + inline void clear_nested_type(); + static const int kNestedTypeFieldNumber = 3; + inline const ::google::protobuf::DescriptorProto& nested_type(int index) const; + inline ::google::protobuf::DescriptorProto* mutable_nested_type(int index); + inline ::google::protobuf::DescriptorProto* add_nested_type(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto >& + nested_type() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto >* + mutable_nested_type(); + + // repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + inline int enum_type_size() const; + inline void clear_enum_type(); + static const int kEnumTypeFieldNumber = 4; + inline const ::google::protobuf::EnumDescriptorProto& enum_type(int index) const; + inline ::google::protobuf::EnumDescriptorProto* mutable_enum_type(int index); + inline ::google::protobuf::EnumDescriptorProto* add_enum_type(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumDescriptorProto >& + enum_type() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumDescriptorProto >* + mutable_enum_type(); + + // repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + inline int extension_range_size() const; + inline void clear_extension_range(); + static const int kExtensionRangeFieldNumber = 5; + inline const ::google::protobuf::DescriptorProto_ExtensionRange& extension_range(int index) const; + inline ::google::protobuf::DescriptorProto_ExtensionRange* mutable_extension_range(int index); + inline ::google::protobuf::DescriptorProto_ExtensionRange* add_extension_range(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto_ExtensionRange >& + extension_range() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto_ExtensionRange >* + mutable_extension_range(); + + // repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + inline int oneof_decl_size() const; + inline void clear_oneof_decl(); + static const int kOneofDeclFieldNumber = 8; + inline const ::google::protobuf::OneofDescriptorProto& oneof_decl(int index) const; + inline ::google::protobuf::OneofDescriptorProto* mutable_oneof_decl(int index); + inline ::google::protobuf::OneofDescriptorProto* add_oneof_decl(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::OneofDescriptorProto >& + oneof_decl() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::OneofDescriptorProto >* + mutable_oneof_decl(); + + // optional .google.protobuf.MessageOptions options = 7; + inline bool has_options() const; + inline void clear_options(); + static const int kOptionsFieldNumber = 7; + inline const ::google::protobuf::MessageOptions& options() const; + inline ::google::protobuf::MessageOptions* mutable_options(); + inline ::google::protobuf::MessageOptions* release_options(); + inline void set_allocated_options(::google::protobuf::MessageOptions* options); + + // @@protoc_insertion_point(class_scope:google.protobuf.DescriptorProto) + private: + inline void set_has_name(); + inline void clear_has_name(); + inline void set_has_options(); + inline void clear_has_options(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::std::string* name_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto > field_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto > extension_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto > nested_type_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumDescriptorProto > enum_type_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto_ExtensionRange > extension_range_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::OneofDescriptorProto > oneof_decl_; + ::google::protobuf::MessageOptions* options_; + friend void LIBPROTOBUF_EXPORT protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto(); + + void InitAsDefaultInstance(); + static DescriptorProto* default_instance_; +}; +// ------------------------------------------------------------------- + +class LIBPROTOBUF_EXPORT FieldDescriptorProto : public ::google::protobuf::Message { + public: + FieldDescriptorProto(); + virtual ~FieldDescriptorProto(); + + FieldDescriptorProto(const FieldDescriptorProto& from); + + inline FieldDescriptorProto& operator=(const FieldDescriptorProto& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const FieldDescriptorProto& default_instance(); + + void Swap(FieldDescriptorProto* other); + + // implements Message ---------------------------------------------- + + FieldDescriptorProto* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const FieldDescriptorProto& from); + void MergeFrom(const FieldDescriptorProto& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + typedef FieldDescriptorProto_Type Type; + static const Type TYPE_DOUBLE = FieldDescriptorProto_Type_TYPE_DOUBLE; + static const Type TYPE_FLOAT = FieldDescriptorProto_Type_TYPE_FLOAT; + static const Type TYPE_INT64 = FieldDescriptorProto_Type_TYPE_INT64; + static const Type TYPE_UINT64 = FieldDescriptorProto_Type_TYPE_UINT64; + static const Type TYPE_INT32 = FieldDescriptorProto_Type_TYPE_INT32; + static const Type TYPE_FIXED64 = FieldDescriptorProto_Type_TYPE_FIXED64; + static const Type TYPE_FIXED32 = FieldDescriptorProto_Type_TYPE_FIXED32; + static const Type TYPE_BOOL = FieldDescriptorProto_Type_TYPE_BOOL; + static const Type TYPE_STRING = FieldDescriptorProto_Type_TYPE_STRING; + static const Type TYPE_GROUP = FieldDescriptorProto_Type_TYPE_GROUP; + static const Type TYPE_MESSAGE = FieldDescriptorProto_Type_TYPE_MESSAGE; + static const Type TYPE_BYTES = FieldDescriptorProto_Type_TYPE_BYTES; + static const Type TYPE_UINT32 = FieldDescriptorProto_Type_TYPE_UINT32; + static const Type TYPE_ENUM = FieldDescriptorProto_Type_TYPE_ENUM; + static const Type TYPE_SFIXED32 = FieldDescriptorProto_Type_TYPE_SFIXED32; + static const Type TYPE_SFIXED64 = FieldDescriptorProto_Type_TYPE_SFIXED64; + static const Type TYPE_SINT32 = FieldDescriptorProto_Type_TYPE_SINT32; + static const Type TYPE_SINT64 = FieldDescriptorProto_Type_TYPE_SINT64; + static inline bool Type_IsValid(int value) { + return FieldDescriptorProto_Type_IsValid(value); + } + static const Type Type_MIN = + FieldDescriptorProto_Type_Type_MIN; + static const Type Type_MAX = + FieldDescriptorProto_Type_Type_MAX; + static const int Type_ARRAYSIZE = + FieldDescriptorProto_Type_Type_ARRAYSIZE; + static inline const ::google::protobuf::EnumDescriptor* + Type_descriptor() { + return FieldDescriptorProto_Type_descriptor(); + } + static inline const ::std::string& Type_Name(Type value) { + return FieldDescriptorProto_Type_Name(value); + } + static inline bool Type_Parse(const ::std::string& name, + Type* value) { + return FieldDescriptorProto_Type_Parse(name, value); + } + + typedef FieldDescriptorProto_Label Label; + static const Label LABEL_OPTIONAL = FieldDescriptorProto_Label_LABEL_OPTIONAL; + static const Label LABEL_REQUIRED = FieldDescriptorProto_Label_LABEL_REQUIRED; + static const Label LABEL_REPEATED = FieldDescriptorProto_Label_LABEL_REPEATED; + static inline bool Label_IsValid(int value) { + return FieldDescriptorProto_Label_IsValid(value); + } + static const Label Label_MIN = + FieldDescriptorProto_Label_Label_MIN; + static const Label Label_MAX = + FieldDescriptorProto_Label_Label_MAX; + static const int Label_ARRAYSIZE = + FieldDescriptorProto_Label_Label_ARRAYSIZE; + static inline const ::google::protobuf::EnumDescriptor* + Label_descriptor() { + return FieldDescriptorProto_Label_descriptor(); + } + static inline const ::std::string& Label_Name(Label value) { + return FieldDescriptorProto_Label_Name(value); + } + static inline bool Label_Parse(const ::std::string& name, + Label* value) { + return FieldDescriptorProto_Label_Parse(name, value); + } + + // accessors ------------------------------------------------------- + + // optional string name = 1; + inline bool has_name() const; + inline void clear_name(); + static const int kNameFieldNumber = 1; + inline const ::std::string& name() const; + inline void set_name(const ::std::string& value); + inline void set_name(const char* value); + inline void set_name(const char* value, size_t size); + inline ::std::string* mutable_name(); + inline ::std::string* release_name(); + inline void set_allocated_name(::std::string* name); + + // optional int32 number = 3; + inline bool has_number() const; + inline void clear_number(); + static const int kNumberFieldNumber = 3; + inline ::google::protobuf::int32 number() const; + inline void set_number(::google::protobuf::int32 value); + + // optional .google.protobuf.FieldDescriptorProto.Label label = 4; + inline bool has_label() const; + inline void clear_label(); + static const int kLabelFieldNumber = 4; + inline ::google::protobuf::FieldDescriptorProto_Label label() const; + inline void set_label(::google::protobuf::FieldDescriptorProto_Label value); + + // optional .google.protobuf.FieldDescriptorProto.Type type = 5; + inline bool has_type() const; + inline void clear_type(); + static const int kTypeFieldNumber = 5; + inline ::google::protobuf::FieldDescriptorProto_Type type() const; + inline void set_type(::google::protobuf::FieldDescriptorProto_Type value); + + // optional string type_name = 6; + inline bool has_type_name() const; + inline void clear_type_name(); + static const int kTypeNameFieldNumber = 6; + inline const ::std::string& type_name() const; + inline void set_type_name(const ::std::string& value); + inline void set_type_name(const char* value); + inline void set_type_name(const char* value, size_t size); + inline ::std::string* mutable_type_name(); + inline ::std::string* release_type_name(); + inline void set_allocated_type_name(::std::string* type_name); + + // optional string extendee = 2; + inline bool has_extendee() const; + inline void clear_extendee(); + static const int kExtendeeFieldNumber = 2; + inline const ::std::string& extendee() const; + inline void set_extendee(const ::std::string& value); + inline void set_extendee(const char* value); + inline void set_extendee(const char* value, size_t size); + inline ::std::string* mutable_extendee(); + inline ::std::string* release_extendee(); + inline void set_allocated_extendee(::std::string* extendee); + + // optional string default_value = 7; + inline bool has_default_value() const; + inline void clear_default_value(); + static const int kDefaultValueFieldNumber = 7; + inline const ::std::string& default_value() const; + inline void set_default_value(const ::std::string& value); + inline void set_default_value(const char* value); + inline void set_default_value(const char* value, size_t size); + inline ::std::string* mutable_default_value(); + inline ::std::string* release_default_value(); + inline void set_allocated_default_value(::std::string* default_value); + + // optional int32 oneof_index = 9; + inline bool has_oneof_index() const; + inline void clear_oneof_index(); + static const int kOneofIndexFieldNumber = 9; + inline ::google::protobuf::int32 oneof_index() const; + inline void set_oneof_index(::google::protobuf::int32 value); + + // optional .google.protobuf.FieldOptions options = 8; + inline bool has_options() const; + inline void clear_options(); + static const int kOptionsFieldNumber = 8; + inline const ::google::protobuf::FieldOptions& options() const; + inline ::google::protobuf::FieldOptions* mutable_options(); + inline ::google::protobuf::FieldOptions* release_options(); + inline void set_allocated_options(::google::protobuf::FieldOptions* options); + + // @@protoc_insertion_point(class_scope:google.protobuf.FieldDescriptorProto) + private: + inline void set_has_name(); + inline void clear_has_name(); + inline void set_has_number(); + inline void clear_has_number(); + inline void set_has_label(); + inline void clear_has_label(); + inline void set_has_type(); + inline void clear_has_type(); + inline void set_has_type_name(); + inline void clear_has_type_name(); + inline void set_has_extendee(); + inline void clear_has_extendee(); + inline void set_has_default_value(); + inline void clear_has_default_value(); + inline void set_has_oneof_index(); + inline void clear_has_oneof_index(); + inline void set_has_options(); + inline void clear_has_options(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::std::string* name_; + ::google::protobuf::int32 number_; + int label_; + ::std::string* type_name_; + ::std::string* extendee_; + int type_; + ::google::protobuf::int32 oneof_index_; + ::std::string* default_value_; + ::google::protobuf::FieldOptions* options_; + friend void LIBPROTOBUF_EXPORT protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto(); + + void InitAsDefaultInstance(); + static FieldDescriptorProto* default_instance_; +}; +// ------------------------------------------------------------------- + +class LIBPROTOBUF_EXPORT OneofDescriptorProto : public ::google::protobuf::Message { + public: + OneofDescriptorProto(); + virtual ~OneofDescriptorProto(); + + OneofDescriptorProto(const OneofDescriptorProto& from); + + inline OneofDescriptorProto& operator=(const OneofDescriptorProto& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const OneofDescriptorProto& default_instance(); + + void Swap(OneofDescriptorProto* other); + + // implements Message ---------------------------------------------- + + OneofDescriptorProto* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const OneofDescriptorProto& from); + void MergeFrom(const OneofDescriptorProto& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional string name = 1; + inline bool has_name() const; + inline void clear_name(); + static const int kNameFieldNumber = 1; + inline const ::std::string& name() const; + inline void set_name(const ::std::string& value); + inline void set_name(const char* value); + inline void set_name(const char* value, size_t size); + inline ::std::string* mutable_name(); + inline ::std::string* release_name(); + inline void set_allocated_name(::std::string* name); + + // @@protoc_insertion_point(class_scope:google.protobuf.OneofDescriptorProto) + private: + inline void set_has_name(); + inline void clear_has_name(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::std::string* name_; + friend void LIBPROTOBUF_EXPORT protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto(); + + void InitAsDefaultInstance(); + static OneofDescriptorProto* default_instance_; +}; +// ------------------------------------------------------------------- + +class LIBPROTOBUF_EXPORT EnumDescriptorProto : public ::google::protobuf::Message { + public: + EnumDescriptorProto(); + virtual ~EnumDescriptorProto(); + + EnumDescriptorProto(const EnumDescriptorProto& from); + + inline EnumDescriptorProto& operator=(const EnumDescriptorProto& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const EnumDescriptorProto& default_instance(); + + void Swap(EnumDescriptorProto* other); + + // implements Message ---------------------------------------------- + + EnumDescriptorProto* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const EnumDescriptorProto& from); + void MergeFrom(const EnumDescriptorProto& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional string name = 1; + inline bool has_name() const; + inline void clear_name(); + static const int kNameFieldNumber = 1; + inline const ::std::string& name() const; + inline void set_name(const ::std::string& value); + inline void set_name(const char* value); + inline void set_name(const char* value, size_t size); + inline ::std::string* mutable_name(); + inline ::std::string* release_name(); + inline void set_allocated_name(::std::string* name); + + // repeated .google.protobuf.EnumValueDescriptorProto value = 2; + inline int value_size() const; + inline void clear_value(); + static const int kValueFieldNumber = 2; + inline const ::google::protobuf::EnumValueDescriptorProto& value(int index) const; + inline ::google::protobuf::EnumValueDescriptorProto* mutable_value(int index); + inline ::google::protobuf::EnumValueDescriptorProto* add_value(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumValueDescriptorProto >& + value() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumValueDescriptorProto >* + mutable_value(); + + // optional .google.protobuf.EnumOptions options = 3; + inline bool has_options() const; + inline void clear_options(); + static const int kOptionsFieldNumber = 3; + inline const ::google::protobuf::EnumOptions& options() const; + inline ::google::protobuf::EnumOptions* mutable_options(); + inline ::google::protobuf::EnumOptions* release_options(); + inline void set_allocated_options(::google::protobuf::EnumOptions* options); + + // @@protoc_insertion_point(class_scope:google.protobuf.EnumDescriptorProto) + private: + inline void set_has_name(); + inline void clear_has_name(); + inline void set_has_options(); + inline void clear_has_options(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::std::string* name_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumValueDescriptorProto > value_; + ::google::protobuf::EnumOptions* options_; + friend void LIBPROTOBUF_EXPORT protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto(); + + void InitAsDefaultInstance(); + static EnumDescriptorProto* default_instance_; +}; +// ------------------------------------------------------------------- + +class LIBPROTOBUF_EXPORT EnumValueDescriptorProto : public ::google::protobuf::Message { + public: + EnumValueDescriptorProto(); + virtual ~EnumValueDescriptorProto(); + + EnumValueDescriptorProto(const EnumValueDescriptorProto& from); + + inline EnumValueDescriptorProto& operator=(const EnumValueDescriptorProto& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const EnumValueDescriptorProto& default_instance(); + + void Swap(EnumValueDescriptorProto* other); + + // implements Message ---------------------------------------------- + + EnumValueDescriptorProto* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const EnumValueDescriptorProto& from); + void MergeFrom(const EnumValueDescriptorProto& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional string name = 1; + inline bool has_name() const; + inline void clear_name(); + static const int kNameFieldNumber = 1; + inline const ::std::string& name() const; + inline void set_name(const ::std::string& value); + inline void set_name(const char* value); + inline void set_name(const char* value, size_t size); + inline ::std::string* mutable_name(); + inline ::std::string* release_name(); + inline void set_allocated_name(::std::string* name); + + // optional int32 number = 2; + inline bool has_number() const; + inline void clear_number(); + static const int kNumberFieldNumber = 2; + inline ::google::protobuf::int32 number() const; + inline void set_number(::google::protobuf::int32 value); + + // optional .google.protobuf.EnumValueOptions options = 3; + inline bool has_options() const; + inline void clear_options(); + static const int kOptionsFieldNumber = 3; + inline const ::google::protobuf::EnumValueOptions& options() const; + inline ::google::protobuf::EnumValueOptions* mutable_options(); + inline ::google::protobuf::EnumValueOptions* release_options(); + inline void set_allocated_options(::google::protobuf::EnumValueOptions* options); + + // @@protoc_insertion_point(class_scope:google.protobuf.EnumValueDescriptorProto) + private: + inline void set_has_name(); + inline void clear_has_name(); + inline void set_has_number(); + inline void clear_has_number(); + inline void set_has_options(); + inline void clear_has_options(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::std::string* name_; + ::google::protobuf::EnumValueOptions* options_; + ::google::protobuf::int32 number_; + friend void LIBPROTOBUF_EXPORT protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto(); + + void InitAsDefaultInstance(); + static EnumValueDescriptorProto* default_instance_; +}; +// ------------------------------------------------------------------- + +class LIBPROTOBUF_EXPORT ServiceDescriptorProto : public ::google::protobuf::Message { + public: + ServiceDescriptorProto(); + virtual ~ServiceDescriptorProto(); + + ServiceDescriptorProto(const ServiceDescriptorProto& from); + + inline ServiceDescriptorProto& operator=(const ServiceDescriptorProto& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const ServiceDescriptorProto& default_instance(); + + void Swap(ServiceDescriptorProto* other); + + // implements Message ---------------------------------------------- + + ServiceDescriptorProto* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const ServiceDescriptorProto& from); + void MergeFrom(const ServiceDescriptorProto& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional string name = 1; + inline bool has_name() const; + inline void clear_name(); + static const int kNameFieldNumber = 1; + inline const ::std::string& name() const; + inline void set_name(const ::std::string& value); + inline void set_name(const char* value); + inline void set_name(const char* value, size_t size); + inline ::std::string* mutable_name(); + inline ::std::string* release_name(); + inline void set_allocated_name(::std::string* name); + + // repeated .google.protobuf.MethodDescriptorProto method = 2; + inline int method_size() const; + inline void clear_method(); + static const int kMethodFieldNumber = 2; + inline const ::google::protobuf::MethodDescriptorProto& method(int index) const; + inline ::google::protobuf::MethodDescriptorProto* mutable_method(int index); + inline ::google::protobuf::MethodDescriptorProto* add_method(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::MethodDescriptorProto >& + method() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::MethodDescriptorProto >* + mutable_method(); + + // optional .google.protobuf.ServiceOptions options = 3; + inline bool has_options() const; + inline void clear_options(); + static const int kOptionsFieldNumber = 3; + inline const ::google::protobuf::ServiceOptions& options() const; + inline ::google::protobuf::ServiceOptions* mutable_options(); + inline ::google::protobuf::ServiceOptions* release_options(); + inline void set_allocated_options(::google::protobuf::ServiceOptions* options); + + // @@protoc_insertion_point(class_scope:google.protobuf.ServiceDescriptorProto) + private: + inline void set_has_name(); + inline void clear_has_name(); + inline void set_has_options(); + inline void clear_has_options(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::std::string* name_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::MethodDescriptorProto > method_; + ::google::protobuf::ServiceOptions* options_; + friend void LIBPROTOBUF_EXPORT protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto(); + + void InitAsDefaultInstance(); + static ServiceDescriptorProto* default_instance_; +}; +// ------------------------------------------------------------------- + +class LIBPROTOBUF_EXPORT MethodDescriptorProto : public ::google::protobuf::Message { + public: + MethodDescriptorProto(); + virtual ~MethodDescriptorProto(); + + MethodDescriptorProto(const MethodDescriptorProto& from); + + inline MethodDescriptorProto& operator=(const MethodDescriptorProto& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const MethodDescriptorProto& default_instance(); + + void Swap(MethodDescriptorProto* other); + + // implements Message ---------------------------------------------- + + MethodDescriptorProto* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const MethodDescriptorProto& from); + void MergeFrom(const MethodDescriptorProto& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional string name = 1; + inline bool has_name() const; + inline void clear_name(); + static const int kNameFieldNumber = 1; + inline const ::std::string& name() const; + inline void set_name(const ::std::string& value); + inline void set_name(const char* value); + inline void set_name(const char* value, size_t size); + inline ::std::string* mutable_name(); + inline ::std::string* release_name(); + inline void set_allocated_name(::std::string* name); + + // optional string input_type = 2; + inline bool has_input_type() const; + inline void clear_input_type(); + static const int kInputTypeFieldNumber = 2; + inline const ::std::string& input_type() const; + inline void set_input_type(const ::std::string& value); + inline void set_input_type(const char* value); + inline void set_input_type(const char* value, size_t size); + inline ::std::string* mutable_input_type(); + inline ::std::string* release_input_type(); + inline void set_allocated_input_type(::std::string* input_type); + + // optional string output_type = 3; + inline bool has_output_type() const; + inline void clear_output_type(); + static const int kOutputTypeFieldNumber = 3; + inline const ::std::string& output_type() const; + inline void set_output_type(const ::std::string& value); + inline void set_output_type(const char* value); + inline void set_output_type(const char* value, size_t size); + inline ::std::string* mutable_output_type(); + inline ::std::string* release_output_type(); + inline void set_allocated_output_type(::std::string* output_type); + + // optional .google.protobuf.MethodOptions options = 4; + inline bool has_options() const; + inline void clear_options(); + static const int kOptionsFieldNumber = 4; + inline const ::google::protobuf::MethodOptions& options() const; + inline ::google::protobuf::MethodOptions* mutable_options(); + inline ::google::protobuf::MethodOptions* release_options(); + inline void set_allocated_options(::google::protobuf::MethodOptions* options); + + // @@protoc_insertion_point(class_scope:google.protobuf.MethodDescriptorProto) + private: + inline void set_has_name(); + inline void clear_has_name(); + inline void set_has_input_type(); + inline void clear_has_input_type(); + inline void set_has_output_type(); + inline void clear_has_output_type(); + inline void set_has_options(); + inline void clear_has_options(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::std::string* name_; + ::std::string* input_type_; + ::std::string* output_type_; + ::google::protobuf::MethodOptions* options_; + friend void LIBPROTOBUF_EXPORT protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto(); + + void InitAsDefaultInstance(); + static MethodDescriptorProto* default_instance_; +}; +// ------------------------------------------------------------------- + +class LIBPROTOBUF_EXPORT FileOptions : public ::google::protobuf::Message { + public: + FileOptions(); + virtual ~FileOptions(); + + FileOptions(const FileOptions& from); + + inline FileOptions& operator=(const FileOptions& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const FileOptions& default_instance(); + + void Swap(FileOptions* other); + + // implements Message ---------------------------------------------- + + FileOptions* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const FileOptions& from); + void MergeFrom(const FileOptions& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + typedef FileOptions_OptimizeMode OptimizeMode; + static const OptimizeMode SPEED = FileOptions_OptimizeMode_SPEED; + static const OptimizeMode CODE_SIZE = FileOptions_OptimizeMode_CODE_SIZE; + static const OptimizeMode LITE_RUNTIME = FileOptions_OptimizeMode_LITE_RUNTIME; + static inline bool OptimizeMode_IsValid(int value) { + return FileOptions_OptimizeMode_IsValid(value); + } + static const OptimizeMode OptimizeMode_MIN = + FileOptions_OptimizeMode_OptimizeMode_MIN; + static const OptimizeMode OptimizeMode_MAX = + FileOptions_OptimizeMode_OptimizeMode_MAX; + static const int OptimizeMode_ARRAYSIZE = + FileOptions_OptimizeMode_OptimizeMode_ARRAYSIZE; + static inline const ::google::protobuf::EnumDescriptor* + OptimizeMode_descriptor() { + return FileOptions_OptimizeMode_descriptor(); + } + static inline const ::std::string& OptimizeMode_Name(OptimizeMode value) { + return FileOptions_OptimizeMode_Name(value); + } + static inline bool OptimizeMode_Parse(const ::std::string& name, + OptimizeMode* value) { + return FileOptions_OptimizeMode_Parse(name, value); + } + + // accessors ------------------------------------------------------- + + // optional string java_package = 1; + inline bool has_java_package() const; + inline void clear_java_package(); + static const int kJavaPackageFieldNumber = 1; + inline const ::std::string& java_package() const; + inline void set_java_package(const ::std::string& value); + inline void set_java_package(const char* value); + inline void set_java_package(const char* value, size_t size); + inline ::std::string* mutable_java_package(); + inline ::std::string* release_java_package(); + inline void set_allocated_java_package(::std::string* java_package); + + // optional string java_outer_classname = 8; + inline bool has_java_outer_classname() const; + inline void clear_java_outer_classname(); + static const int kJavaOuterClassnameFieldNumber = 8; + inline const ::std::string& java_outer_classname() const; + inline void set_java_outer_classname(const ::std::string& value); + inline void set_java_outer_classname(const char* value); + inline void set_java_outer_classname(const char* value, size_t size); + inline ::std::string* mutable_java_outer_classname(); + inline ::std::string* release_java_outer_classname(); + inline void set_allocated_java_outer_classname(::std::string* java_outer_classname); + + // optional bool java_multiple_files = 10 [default = false]; + inline bool has_java_multiple_files() const; + inline void clear_java_multiple_files(); + static const int kJavaMultipleFilesFieldNumber = 10; + inline bool java_multiple_files() const; + inline void set_java_multiple_files(bool value); + + // optional bool java_generate_equals_and_hash = 20 [default = false]; + inline bool has_java_generate_equals_and_hash() const; + inline void clear_java_generate_equals_and_hash(); + static const int kJavaGenerateEqualsAndHashFieldNumber = 20; + inline bool java_generate_equals_and_hash() const; + inline void set_java_generate_equals_and_hash(bool value); + + // optional bool java_string_check_utf8 = 27 [default = false]; + inline bool has_java_string_check_utf8() const; + inline void clear_java_string_check_utf8(); + static const int kJavaStringCheckUtf8FieldNumber = 27; + inline bool java_string_check_utf8() const; + inline void set_java_string_check_utf8(bool value); + + // optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED]; + inline bool has_optimize_for() const; + inline void clear_optimize_for(); + static const int kOptimizeForFieldNumber = 9; + inline ::google::protobuf::FileOptions_OptimizeMode optimize_for() const; + inline void set_optimize_for(::google::protobuf::FileOptions_OptimizeMode value); + + // optional string go_package = 11; + inline bool has_go_package() const; + inline void clear_go_package(); + static const int kGoPackageFieldNumber = 11; + inline const ::std::string& go_package() const; + inline void set_go_package(const ::std::string& value); + inline void set_go_package(const char* value); + inline void set_go_package(const char* value, size_t size); + inline ::std::string* mutable_go_package(); + inline ::std::string* release_go_package(); + inline void set_allocated_go_package(::std::string* go_package); + + // optional bool cc_generic_services = 16 [default = false]; + inline bool has_cc_generic_services() const; + inline void clear_cc_generic_services(); + static const int kCcGenericServicesFieldNumber = 16; + inline bool cc_generic_services() const; + inline void set_cc_generic_services(bool value); + + // optional bool java_generic_services = 17 [default = false]; + inline bool has_java_generic_services() const; + inline void clear_java_generic_services(); + static const int kJavaGenericServicesFieldNumber = 17; + inline bool java_generic_services() const; + inline void set_java_generic_services(bool value); + + // optional bool py_generic_services = 18 [default = false]; + inline bool has_py_generic_services() const; + inline void clear_py_generic_services(); + static const int kPyGenericServicesFieldNumber = 18; + inline bool py_generic_services() const; + inline void set_py_generic_services(bool value); + + // optional bool deprecated = 23 [default = false]; + inline bool has_deprecated() const; + inline void clear_deprecated(); + static const int kDeprecatedFieldNumber = 23; + inline bool deprecated() const; + inline void set_deprecated(bool value); + + // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + inline int uninterpreted_option_size() const; + inline void clear_uninterpreted_option(); + static const int kUninterpretedOptionFieldNumber = 999; + inline const ::google::protobuf::UninterpretedOption& uninterpreted_option(int index) const; + inline ::google::protobuf::UninterpretedOption* mutable_uninterpreted_option(int index); + inline ::google::protobuf::UninterpretedOption* add_uninterpreted_option(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >& + uninterpreted_option() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >* + mutable_uninterpreted_option(); + + GOOGLE_PROTOBUF_EXTENSION_ACCESSORS(FileOptions) + // @@protoc_insertion_point(class_scope:google.protobuf.FileOptions) + private: + inline void set_has_java_package(); + inline void clear_has_java_package(); + inline void set_has_java_outer_classname(); + inline void clear_has_java_outer_classname(); + inline void set_has_java_multiple_files(); + inline void clear_has_java_multiple_files(); + inline void set_has_java_generate_equals_and_hash(); + inline void clear_has_java_generate_equals_and_hash(); + inline void set_has_java_string_check_utf8(); + inline void clear_has_java_string_check_utf8(); + inline void set_has_optimize_for(); + inline void clear_has_optimize_for(); + inline void set_has_go_package(); + inline void clear_has_go_package(); + inline void set_has_cc_generic_services(); + inline void clear_has_cc_generic_services(); + inline void set_has_java_generic_services(); + inline void clear_has_java_generic_services(); + inline void set_has_py_generic_services(); + inline void clear_has_py_generic_services(); + inline void set_has_deprecated(); + inline void clear_has_deprecated(); + + ::google::protobuf::internal::ExtensionSet _extensions_; + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::std::string* java_package_; + ::std::string* java_outer_classname_; + bool java_multiple_files_; + bool java_generate_equals_and_hash_; + bool java_string_check_utf8_; + bool cc_generic_services_; + int optimize_for_; + ::std::string* go_package_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption > uninterpreted_option_; + bool java_generic_services_; + bool py_generic_services_; + bool deprecated_; + friend void LIBPROTOBUF_EXPORT protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto(); + + void InitAsDefaultInstance(); + static FileOptions* default_instance_; +}; +// ------------------------------------------------------------------- + +class LIBPROTOBUF_EXPORT MessageOptions : public ::google::protobuf::Message { + public: + MessageOptions(); + virtual ~MessageOptions(); + + MessageOptions(const MessageOptions& from); + + inline MessageOptions& operator=(const MessageOptions& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const MessageOptions& default_instance(); + + void Swap(MessageOptions* other); + + // implements Message ---------------------------------------------- + + MessageOptions* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const MessageOptions& from); + void MergeFrom(const MessageOptions& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional bool message_set_wire_format = 1 [default = false]; + inline bool has_message_set_wire_format() const; + inline void clear_message_set_wire_format(); + static const int kMessageSetWireFormatFieldNumber = 1; + inline bool message_set_wire_format() const; + inline void set_message_set_wire_format(bool value); + + // optional bool no_standard_descriptor_accessor = 2 [default = false]; + inline bool has_no_standard_descriptor_accessor() const; + inline void clear_no_standard_descriptor_accessor(); + static const int kNoStandardDescriptorAccessorFieldNumber = 2; + inline bool no_standard_descriptor_accessor() const; + inline void set_no_standard_descriptor_accessor(bool value); + + // optional bool deprecated = 3 [default = false]; + inline bool has_deprecated() const; + inline void clear_deprecated(); + static const int kDeprecatedFieldNumber = 3; + inline bool deprecated() const; + inline void set_deprecated(bool value); + + // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + inline int uninterpreted_option_size() const; + inline void clear_uninterpreted_option(); + static const int kUninterpretedOptionFieldNumber = 999; + inline const ::google::protobuf::UninterpretedOption& uninterpreted_option(int index) const; + inline ::google::protobuf::UninterpretedOption* mutable_uninterpreted_option(int index); + inline ::google::protobuf::UninterpretedOption* add_uninterpreted_option(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >& + uninterpreted_option() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >* + mutable_uninterpreted_option(); + + GOOGLE_PROTOBUF_EXTENSION_ACCESSORS(MessageOptions) + // @@protoc_insertion_point(class_scope:google.protobuf.MessageOptions) + private: + inline void set_has_message_set_wire_format(); + inline void clear_has_message_set_wire_format(); + inline void set_has_no_standard_descriptor_accessor(); + inline void clear_has_no_standard_descriptor_accessor(); + inline void set_has_deprecated(); + inline void clear_has_deprecated(); + + ::google::protobuf::internal::ExtensionSet _extensions_; + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption > uninterpreted_option_; + bool message_set_wire_format_; + bool no_standard_descriptor_accessor_; + bool deprecated_; + friend void LIBPROTOBUF_EXPORT protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto(); + + void InitAsDefaultInstance(); + static MessageOptions* default_instance_; +}; +// ------------------------------------------------------------------- + +class LIBPROTOBUF_EXPORT FieldOptions : public ::google::protobuf::Message { + public: + FieldOptions(); + virtual ~FieldOptions(); + + FieldOptions(const FieldOptions& from); + + inline FieldOptions& operator=(const FieldOptions& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const FieldOptions& default_instance(); + + void Swap(FieldOptions* other); + + // implements Message ---------------------------------------------- + + FieldOptions* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const FieldOptions& from); + void MergeFrom(const FieldOptions& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + typedef FieldOptions_CType CType; + static const CType STRING = FieldOptions_CType_STRING; + static const CType CORD = FieldOptions_CType_CORD; + static const CType STRING_PIECE = FieldOptions_CType_STRING_PIECE; + static inline bool CType_IsValid(int value) { + return FieldOptions_CType_IsValid(value); + } + static const CType CType_MIN = + FieldOptions_CType_CType_MIN; + static const CType CType_MAX = + FieldOptions_CType_CType_MAX; + static const int CType_ARRAYSIZE = + FieldOptions_CType_CType_ARRAYSIZE; + static inline const ::google::protobuf::EnumDescriptor* + CType_descriptor() { + return FieldOptions_CType_descriptor(); + } + static inline const ::std::string& CType_Name(CType value) { + return FieldOptions_CType_Name(value); + } + static inline bool CType_Parse(const ::std::string& name, + CType* value) { + return FieldOptions_CType_Parse(name, value); + } + + // accessors ------------------------------------------------------- + + // optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING]; + inline bool has_ctype() const; + inline void clear_ctype(); + static const int kCtypeFieldNumber = 1; + inline ::google::protobuf::FieldOptions_CType ctype() const; + inline void set_ctype(::google::protobuf::FieldOptions_CType value); + + // optional bool packed = 2; + inline bool has_packed() const; + inline void clear_packed(); + static const int kPackedFieldNumber = 2; + inline bool packed() const; + inline void set_packed(bool value); + + // optional bool lazy = 5 [default = false]; + inline bool has_lazy() const; + inline void clear_lazy(); + static const int kLazyFieldNumber = 5; + inline bool lazy() const; + inline void set_lazy(bool value); + + // optional bool deprecated = 3 [default = false]; + inline bool has_deprecated() const; + inline void clear_deprecated(); + static const int kDeprecatedFieldNumber = 3; + inline bool deprecated() const; + inline void set_deprecated(bool value); + + // optional string experimental_map_key = 9; + inline bool has_experimental_map_key() const; + inline void clear_experimental_map_key(); + static const int kExperimentalMapKeyFieldNumber = 9; + inline const ::std::string& experimental_map_key() const; + inline void set_experimental_map_key(const ::std::string& value); + inline void set_experimental_map_key(const char* value); + inline void set_experimental_map_key(const char* value, size_t size); + inline ::std::string* mutable_experimental_map_key(); + inline ::std::string* release_experimental_map_key(); + inline void set_allocated_experimental_map_key(::std::string* experimental_map_key); + + // optional bool weak = 10 [default = false]; + inline bool has_weak() const; + inline void clear_weak(); + static const int kWeakFieldNumber = 10; + inline bool weak() const; + inline void set_weak(bool value); + + // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + inline int uninterpreted_option_size() const; + inline void clear_uninterpreted_option(); + static const int kUninterpretedOptionFieldNumber = 999; + inline const ::google::protobuf::UninterpretedOption& uninterpreted_option(int index) const; + inline ::google::protobuf::UninterpretedOption* mutable_uninterpreted_option(int index); + inline ::google::protobuf::UninterpretedOption* add_uninterpreted_option(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >& + uninterpreted_option() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >* + mutable_uninterpreted_option(); + + GOOGLE_PROTOBUF_EXTENSION_ACCESSORS(FieldOptions) + // @@protoc_insertion_point(class_scope:google.protobuf.FieldOptions) + private: + inline void set_has_ctype(); + inline void clear_has_ctype(); + inline void set_has_packed(); + inline void clear_has_packed(); + inline void set_has_lazy(); + inline void clear_has_lazy(); + inline void set_has_deprecated(); + inline void clear_has_deprecated(); + inline void set_has_experimental_map_key(); + inline void clear_has_experimental_map_key(); + inline void set_has_weak(); + inline void clear_has_weak(); + + ::google::protobuf::internal::ExtensionSet _extensions_; + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + int ctype_; + bool packed_; + bool lazy_; + bool deprecated_; + bool weak_; + ::std::string* experimental_map_key_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption > uninterpreted_option_; + friend void LIBPROTOBUF_EXPORT protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto(); + + void InitAsDefaultInstance(); + static FieldOptions* default_instance_; +}; +// ------------------------------------------------------------------- + +class LIBPROTOBUF_EXPORT EnumOptions : public ::google::protobuf::Message { + public: + EnumOptions(); + virtual ~EnumOptions(); + + EnumOptions(const EnumOptions& from); + + inline EnumOptions& operator=(const EnumOptions& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const EnumOptions& default_instance(); + + void Swap(EnumOptions* other); + + // implements Message ---------------------------------------------- + + EnumOptions* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const EnumOptions& from); + void MergeFrom(const EnumOptions& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional bool allow_alias = 2; + inline bool has_allow_alias() const; + inline void clear_allow_alias(); + static const int kAllowAliasFieldNumber = 2; + inline bool allow_alias() const; + inline void set_allow_alias(bool value); + + // optional bool deprecated = 3 [default = false]; + inline bool has_deprecated() const; + inline void clear_deprecated(); + static const int kDeprecatedFieldNumber = 3; + inline bool deprecated() const; + inline void set_deprecated(bool value); + + // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + inline int uninterpreted_option_size() const; + inline void clear_uninterpreted_option(); + static const int kUninterpretedOptionFieldNumber = 999; + inline const ::google::protobuf::UninterpretedOption& uninterpreted_option(int index) const; + inline ::google::protobuf::UninterpretedOption* mutable_uninterpreted_option(int index); + inline ::google::protobuf::UninterpretedOption* add_uninterpreted_option(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >& + uninterpreted_option() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >* + mutable_uninterpreted_option(); + + GOOGLE_PROTOBUF_EXTENSION_ACCESSORS(EnumOptions) + // @@protoc_insertion_point(class_scope:google.protobuf.EnumOptions) + private: + inline void set_has_allow_alias(); + inline void clear_has_allow_alias(); + inline void set_has_deprecated(); + inline void clear_has_deprecated(); + + ::google::protobuf::internal::ExtensionSet _extensions_; + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption > uninterpreted_option_; + bool allow_alias_; + bool deprecated_; + friend void LIBPROTOBUF_EXPORT protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto(); + + void InitAsDefaultInstance(); + static EnumOptions* default_instance_; +}; +// ------------------------------------------------------------------- + +class LIBPROTOBUF_EXPORT EnumValueOptions : public ::google::protobuf::Message { + public: + EnumValueOptions(); + virtual ~EnumValueOptions(); + + EnumValueOptions(const EnumValueOptions& from); + + inline EnumValueOptions& operator=(const EnumValueOptions& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const EnumValueOptions& default_instance(); + + void Swap(EnumValueOptions* other); + + // implements Message ---------------------------------------------- + + EnumValueOptions* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const EnumValueOptions& from); + void MergeFrom(const EnumValueOptions& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional bool deprecated = 1 [default = false]; + inline bool has_deprecated() const; + inline void clear_deprecated(); + static const int kDeprecatedFieldNumber = 1; + inline bool deprecated() const; + inline void set_deprecated(bool value); + + // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + inline int uninterpreted_option_size() const; + inline void clear_uninterpreted_option(); + static const int kUninterpretedOptionFieldNumber = 999; + inline const ::google::protobuf::UninterpretedOption& uninterpreted_option(int index) const; + inline ::google::protobuf::UninterpretedOption* mutable_uninterpreted_option(int index); + inline ::google::protobuf::UninterpretedOption* add_uninterpreted_option(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >& + uninterpreted_option() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >* + mutable_uninterpreted_option(); + + GOOGLE_PROTOBUF_EXTENSION_ACCESSORS(EnumValueOptions) + // @@protoc_insertion_point(class_scope:google.protobuf.EnumValueOptions) + private: + inline void set_has_deprecated(); + inline void clear_has_deprecated(); + + ::google::protobuf::internal::ExtensionSet _extensions_; + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption > uninterpreted_option_; + bool deprecated_; + friend void LIBPROTOBUF_EXPORT protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto(); + + void InitAsDefaultInstance(); + static EnumValueOptions* default_instance_; +}; +// ------------------------------------------------------------------- + +class LIBPROTOBUF_EXPORT ServiceOptions : public ::google::protobuf::Message { + public: + ServiceOptions(); + virtual ~ServiceOptions(); + + ServiceOptions(const ServiceOptions& from); + + inline ServiceOptions& operator=(const ServiceOptions& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const ServiceOptions& default_instance(); + + void Swap(ServiceOptions* other); + + // implements Message ---------------------------------------------- + + ServiceOptions* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const ServiceOptions& from); + void MergeFrom(const ServiceOptions& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional bool deprecated = 33 [default = false]; + inline bool has_deprecated() const; + inline void clear_deprecated(); + static const int kDeprecatedFieldNumber = 33; + inline bool deprecated() const; + inline void set_deprecated(bool value); + + // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + inline int uninterpreted_option_size() const; + inline void clear_uninterpreted_option(); + static const int kUninterpretedOptionFieldNumber = 999; + inline const ::google::protobuf::UninterpretedOption& uninterpreted_option(int index) const; + inline ::google::protobuf::UninterpretedOption* mutable_uninterpreted_option(int index); + inline ::google::protobuf::UninterpretedOption* add_uninterpreted_option(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >& + uninterpreted_option() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >* + mutable_uninterpreted_option(); + + GOOGLE_PROTOBUF_EXTENSION_ACCESSORS(ServiceOptions) + // @@protoc_insertion_point(class_scope:google.protobuf.ServiceOptions) + private: + inline void set_has_deprecated(); + inline void clear_has_deprecated(); + + ::google::protobuf::internal::ExtensionSet _extensions_; + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption > uninterpreted_option_; + bool deprecated_; + friend void LIBPROTOBUF_EXPORT protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto(); + + void InitAsDefaultInstance(); + static ServiceOptions* default_instance_; +}; +// ------------------------------------------------------------------- + +class LIBPROTOBUF_EXPORT MethodOptions : public ::google::protobuf::Message { + public: + MethodOptions(); + virtual ~MethodOptions(); + + MethodOptions(const MethodOptions& from); + + inline MethodOptions& operator=(const MethodOptions& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const MethodOptions& default_instance(); + + void Swap(MethodOptions* other); + + // implements Message ---------------------------------------------- + + MethodOptions* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const MethodOptions& from); + void MergeFrom(const MethodOptions& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional bool deprecated = 33 [default = false]; + inline bool has_deprecated() const; + inline void clear_deprecated(); + static const int kDeprecatedFieldNumber = 33; + inline bool deprecated() const; + inline void set_deprecated(bool value); + + // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + inline int uninterpreted_option_size() const; + inline void clear_uninterpreted_option(); + static const int kUninterpretedOptionFieldNumber = 999; + inline const ::google::protobuf::UninterpretedOption& uninterpreted_option(int index) const; + inline ::google::protobuf::UninterpretedOption* mutable_uninterpreted_option(int index); + inline ::google::protobuf::UninterpretedOption* add_uninterpreted_option(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >& + uninterpreted_option() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >* + mutable_uninterpreted_option(); + + GOOGLE_PROTOBUF_EXTENSION_ACCESSORS(MethodOptions) + // @@protoc_insertion_point(class_scope:google.protobuf.MethodOptions) + private: + inline void set_has_deprecated(); + inline void clear_has_deprecated(); + + ::google::protobuf::internal::ExtensionSet _extensions_; + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption > uninterpreted_option_; + bool deprecated_; + friend void LIBPROTOBUF_EXPORT protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto(); + + void InitAsDefaultInstance(); + static MethodOptions* default_instance_; +}; +// ------------------------------------------------------------------- + +class LIBPROTOBUF_EXPORT UninterpretedOption_NamePart : public ::google::protobuf::Message { + public: + UninterpretedOption_NamePart(); + virtual ~UninterpretedOption_NamePart(); + + UninterpretedOption_NamePart(const UninterpretedOption_NamePart& from); + + inline UninterpretedOption_NamePart& operator=(const UninterpretedOption_NamePart& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const UninterpretedOption_NamePart& default_instance(); + + void Swap(UninterpretedOption_NamePart* other); + + // implements Message ---------------------------------------------- + + UninterpretedOption_NamePart* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const UninterpretedOption_NamePart& from); + void MergeFrom(const UninterpretedOption_NamePart& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // required string name_part = 1; + inline bool has_name_part() const; + inline void clear_name_part(); + static const int kNamePartFieldNumber = 1; + inline const ::std::string& name_part() const; + inline void set_name_part(const ::std::string& value); + inline void set_name_part(const char* value); + inline void set_name_part(const char* value, size_t size); + inline ::std::string* mutable_name_part(); + inline ::std::string* release_name_part(); + inline void set_allocated_name_part(::std::string* name_part); + + // required bool is_extension = 2; + inline bool has_is_extension() const; + inline void clear_is_extension(); + static const int kIsExtensionFieldNumber = 2; + inline bool is_extension() const; + inline void set_is_extension(bool value); + + // @@protoc_insertion_point(class_scope:google.protobuf.UninterpretedOption.NamePart) + private: + inline void set_has_name_part(); + inline void clear_has_name_part(); + inline void set_has_is_extension(); + inline void clear_has_is_extension(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::std::string* name_part_; + bool is_extension_; + friend void LIBPROTOBUF_EXPORT protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto(); + + void InitAsDefaultInstance(); + static UninterpretedOption_NamePart* default_instance_; +}; +// ------------------------------------------------------------------- + +class LIBPROTOBUF_EXPORT UninterpretedOption : public ::google::protobuf::Message { + public: + UninterpretedOption(); + virtual ~UninterpretedOption(); + + UninterpretedOption(const UninterpretedOption& from); + + inline UninterpretedOption& operator=(const UninterpretedOption& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const UninterpretedOption& default_instance(); + + void Swap(UninterpretedOption* other); + + // implements Message ---------------------------------------------- + + UninterpretedOption* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const UninterpretedOption& from); + void MergeFrom(const UninterpretedOption& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + typedef UninterpretedOption_NamePart NamePart; + + // accessors ------------------------------------------------------- + + // repeated .google.protobuf.UninterpretedOption.NamePart name = 2; + inline int name_size() const; + inline void clear_name(); + static const int kNameFieldNumber = 2; + inline const ::google::protobuf::UninterpretedOption_NamePart& name(int index) const; + inline ::google::protobuf::UninterpretedOption_NamePart* mutable_name(int index); + inline ::google::protobuf::UninterpretedOption_NamePart* add_name(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption_NamePart >& + name() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption_NamePart >* + mutable_name(); + + // optional string identifier_value = 3; + inline bool has_identifier_value() const; + inline void clear_identifier_value(); + static const int kIdentifierValueFieldNumber = 3; + inline const ::std::string& identifier_value() const; + inline void set_identifier_value(const ::std::string& value); + inline void set_identifier_value(const char* value); + inline void set_identifier_value(const char* value, size_t size); + inline ::std::string* mutable_identifier_value(); + inline ::std::string* release_identifier_value(); + inline void set_allocated_identifier_value(::std::string* identifier_value); + + // optional uint64 positive_int_value = 4; + inline bool has_positive_int_value() const; + inline void clear_positive_int_value(); + static const int kPositiveIntValueFieldNumber = 4; + inline ::google::protobuf::uint64 positive_int_value() const; + inline void set_positive_int_value(::google::protobuf::uint64 value); + + // optional int64 negative_int_value = 5; + inline bool has_negative_int_value() const; + inline void clear_negative_int_value(); + static const int kNegativeIntValueFieldNumber = 5; + inline ::google::protobuf::int64 negative_int_value() const; + inline void set_negative_int_value(::google::protobuf::int64 value); + + // optional double double_value = 6; + inline bool has_double_value() const; + inline void clear_double_value(); + static const int kDoubleValueFieldNumber = 6; + inline double double_value() const; + inline void set_double_value(double value); + + // optional bytes string_value = 7; + inline bool has_string_value() const; + inline void clear_string_value(); + static const int kStringValueFieldNumber = 7; + inline const ::std::string& string_value() const; + inline void set_string_value(const ::std::string& value); + inline void set_string_value(const char* value); + inline void set_string_value(const void* value, size_t size); + inline ::std::string* mutable_string_value(); + inline ::std::string* release_string_value(); + inline void set_allocated_string_value(::std::string* string_value); + + // optional string aggregate_value = 8; + inline bool has_aggregate_value() const; + inline void clear_aggregate_value(); + static const int kAggregateValueFieldNumber = 8; + inline const ::std::string& aggregate_value() const; + inline void set_aggregate_value(const ::std::string& value); + inline void set_aggregate_value(const char* value); + inline void set_aggregate_value(const char* value, size_t size); + inline ::std::string* mutable_aggregate_value(); + inline ::std::string* release_aggregate_value(); + inline void set_allocated_aggregate_value(::std::string* aggregate_value); + + // @@protoc_insertion_point(class_scope:google.protobuf.UninterpretedOption) + private: + inline void set_has_identifier_value(); + inline void clear_has_identifier_value(); + inline void set_has_positive_int_value(); + inline void clear_has_positive_int_value(); + inline void set_has_negative_int_value(); + inline void clear_has_negative_int_value(); + inline void set_has_double_value(); + inline void clear_has_double_value(); + inline void set_has_string_value(); + inline void clear_has_string_value(); + inline void set_has_aggregate_value(); + inline void clear_has_aggregate_value(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption_NamePart > name_; + ::std::string* identifier_value_; + ::google::protobuf::uint64 positive_int_value_; + ::google::protobuf::int64 negative_int_value_; + double double_value_; + ::std::string* string_value_; + ::std::string* aggregate_value_; + friend void LIBPROTOBUF_EXPORT protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto(); + + void InitAsDefaultInstance(); + static UninterpretedOption* default_instance_; +}; +// ------------------------------------------------------------------- + +class LIBPROTOBUF_EXPORT SourceCodeInfo_Location : public ::google::protobuf::Message { + public: + SourceCodeInfo_Location(); + virtual ~SourceCodeInfo_Location(); + + SourceCodeInfo_Location(const SourceCodeInfo_Location& from); + + inline SourceCodeInfo_Location& operator=(const SourceCodeInfo_Location& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const SourceCodeInfo_Location& default_instance(); + + void Swap(SourceCodeInfo_Location* other); + + // implements Message ---------------------------------------------- + + SourceCodeInfo_Location* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const SourceCodeInfo_Location& from); + void MergeFrom(const SourceCodeInfo_Location& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // repeated int32 path = 1 [packed = true]; + inline int path_size() const; + inline void clear_path(); + static const int kPathFieldNumber = 1; + inline ::google::protobuf::int32 path(int index) const; + inline void set_path(int index, ::google::protobuf::int32 value); + inline void add_path(::google::protobuf::int32 value); + inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >& + path() const; + inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >* + mutable_path(); + + // repeated int32 span = 2 [packed = true]; + inline int span_size() const; + inline void clear_span(); + static const int kSpanFieldNumber = 2; + inline ::google::protobuf::int32 span(int index) const; + inline void set_span(int index, ::google::protobuf::int32 value); + inline void add_span(::google::protobuf::int32 value); + inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >& + span() const; + inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >* + mutable_span(); + + // optional string leading_comments = 3; + inline bool has_leading_comments() const; + inline void clear_leading_comments(); + static const int kLeadingCommentsFieldNumber = 3; + inline const ::std::string& leading_comments() const; + inline void set_leading_comments(const ::std::string& value); + inline void set_leading_comments(const char* value); + inline void set_leading_comments(const char* value, size_t size); + inline ::std::string* mutable_leading_comments(); + inline ::std::string* release_leading_comments(); + inline void set_allocated_leading_comments(::std::string* leading_comments); + + // optional string trailing_comments = 4; + inline bool has_trailing_comments() const; + inline void clear_trailing_comments(); + static const int kTrailingCommentsFieldNumber = 4; + inline const ::std::string& trailing_comments() const; + inline void set_trailing_comments(const ::std::string& value); + inline void set_trailing_comments(const char* value); + inline void set_trailing_comments(const char* value, size_t size); + inline ::std::string* mutable_trailing_comments(); + inline ::std::string* release_trailing_comments(); + inline void set_allocated_trailing_comments(::std::string* trailing_comments); + + // @@protoc_insertion_point(class_scope:google.protobuf.SourceCodeInfo.Location) + private: + inline void set_has_leading_comments(); + inline void clear_has_leading_comments(); + inline void set_has_trailing_comments(); + inline void clear_has_trailing_comments(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::google::protobuf::RepeatedField< ::google::protobuf::int32 > path_; + mutable int _path_cached_byte_size_; + ::google::protobuf::RepeatedField< ::google::protobuf::int32 > span_; + mutable int _span_cached_byte_size_; + ::std::string* leading_comments_; + ::std::string* trailing_comments_; + friend void LIBPROTOBUF_EXPORT protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto(); + + void InitAsDefaultInstance(); + static SourceCodeInfo_Location* default_instance_; +}; +// ------------------------------------------------------------------- + +class LIBPROTOBUF_EXPORT SourceCodeInfo : public ::google::protobuf::Message { + public: + SourceCodeInfo(); + virtual ~SourceCodeInfo(); + + SourceCodeInfo(const SourceCodeInfo& from); + + inline SourceCodeInfo& operator=(const SourceCodeInfo& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const SourceCodeInfo& default_instance(); + + void Swap(SourceCodeInfo* other); + + // implements Message ---------------------------------------------- + + SourceCodeInfo* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const SourceCodeInfo& from); + void MergeFrom(const SourceCodeInfo& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + typedef SourceCodeInfo_Location Location; + + // accessors ------------------------------------------------------- + + // repeated .google.protobuf.SourceCodeInfo.Location location = 1; + inline int location_size() const; + inline void clear_location(); + static const int kLocationFieldNumber = 1; + inline const ::google::protobuf::SourceCodeInfo_Location& location(int index) const; + inline ::google::protobuf::SourceCodeInfo_Location* mutable_location(int index); + inline ::google::protobuf::SourceCodeInfo_Location* add_location(); + inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::SourceCodeInfo_Location >& + location() const; + inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::SourceCodeInfo_Location >* + mutable_location(); + + // @@protoc_insertion_point(class_scope:google.protobuf.SourceCodeInfo) + private: + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::google::protobuf::RepeatedPtrField< ::google::protobuf::SourceCodeInfo_Location > location_; + friend void LIBPROTOBUF_EXPORT protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_AssignDesc_google_2fprotobuf_2fdescriptor_2eproto(); + friend void protobuf_ShutdownFile_google_2fprotobuf_2fdescriptor_2eproto(); + + void InitAsDefaultInstance(); + static SourceCodeInfo* default_instance_; +}; +// =================================================================== + + +// =================================================================== + +// FileDescriptorSet + +// repeated .google.protobuf.FileDescriptorProto file = 1; +inline int FileDescriptorSet::file_size() const { + return file_.size(); +} +inline void FileDescriptorSet::clear_file() { + file_.Clear(); +} +inline const ::google::protobuf::FileDescriptorProto& FileDescriptorSet::file(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorSet.file) + return file_.Get(index); +} +inline ::google::protobuf::FileDescriptorProto* FileDescriptorSet::mutable_file(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorSet.file) + return file_.Mutable(index); +} +inline ::google::protobuf::FileDescriptorProto* FileDescriptorSet::add_file() { + // @@protoc_insertion_point(field_add:google.protobuf.FileDescriptorSet.file) + return file_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::FileDescriptorProto >& +FileDescriptorSet::file() const { + // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorSet.file) + return file_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::FileDescriptorProto >* +FileDescriptorSet::mutable_file() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.FileDescriptorSet.file) + return &file_; +} + +// ------------------------------------------------------------------- + +// FileDescriptorProto + +// optional string name = 1; +inline bool FileDescriptorProto::has_name() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void FileDescriptorProto::set_has_name() { + _has_bits_[0] |= 0x00000001u; +} +inline void FileDescriptorProto::clear_has_name() { + _has_bits_[0] &= ~0x00000001u; +} +inline void FileDescriptorProto::clear_name() { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_->clear(); + } + clear_has_name(); +} +inline const ::std::string& FileDescriptorProto::name() const { + // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.name) + return *name_; +} +inline void FileDescriptorProto::set_name(const ::std::string& value) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.FileDescriptorProto.name) +} +inline void FileDescriptorProto::set_name(const char* value) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.FileDescriptorProto.name) +} +inline void FileDescriptorProto::set_name(const char* value, size_t size) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.FileDescriptorProto.name) +} +inline ::std::string* FileDescriptorProto::mutable_name() { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorProto.name) + return name_; +} +inline ::std::string* FileDescriptorProto::release_name() { + clear_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = name_; + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void FileDescriptorProto::set_allocated_name(::std::string* name) { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete name_; + } + if (name) { + set_has_name(); + name_ = name; + } else { + clear_has_name(); + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.FileDescriptorProto.name) +} + +// optional string package = 2; +inline bool FileDescriptorProto::has_package() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void FileDescriptorProto::set_has_package() { + _has_bits_[0] |= 0x00000002u; +} +inline void FileDescriptorProto::clear_has_package() { + _has_bits_[0] &= ~0x00000002u; +} +inline void FileDescriptorProto::clear_package() { + if (package_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + package_->clear(); + } + clear_has_package(); +} +inline const ::std::string& FileDescriptorProto::package() const { + // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.package) + return *package_; +} +inline void FileDescriptorProto::set_package(const ::std::string& value) { + set_has_package(); + if (package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + package_ = new ::std::string; + } + package_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.FileDescriptorProto.package) +} +inline void FileDescriptorProto::set_package(const char* value) { + set_has_package(); + if (package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + package_ = new ::std::string; + } + package_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.FileDescriptorProto.package) +} +inline void FileDescriptorProto::set_package(const char* value, size_t size) { + set_has_package(); + if (package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + package_ = new ::std::string; + } + package_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.FileDescriptorProto.package) +} +inline ::std::string* FileDescriptorProto::mutable_package() { + set_has_package(); + if (package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + package_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorProto.package) + return package_; +} +inline ::std::string* FileDescriptorProto::release_package() { + clear_has_package(); + if (package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = package_; + package_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void FileDescriptorProto::set_allocated_package(::std::string* package) { + if (package_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete package_; + } + if (package) { + set_has_package(); + package_ = package; + } else { + clear_has_package(); + package_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.FileDescriptorProto.package) +} + +// repeated string dependency = 3; +inline int FileDescriptorProto::dependency_size() const { + return dependency_.size(); +} +inline void FileDescriptorProto::clear_dependency() { + dependency_.Clear(); +} +inline const ::std::string& FileDescriptorProto::dependency(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.dependency) + return dependency_.Get(index); +} +inline ::std::string* FileDescriptorProto::mutable_dependency(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorProto.dependency) + return dependency_.Mutable(index); +} +inline void FileDescriptorProto::set_dependency(int index, const ::std::string& value) { + // @@protoc_insertion_point(field_set:google.protobuf.FileDescriptorProto.dependency) + dependency_.Mutable(index)->assign(value); +} +inline void FileDescriptorProto::set_dependency(int index, const char* value) { + dependency_.Mutable(index)->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.FileDescriptorProto.dependency) +} +inline void FileDescriptorProto::set_dependency(int index, const char* value, size_t size) { + dependency_.Mutable(index)->assign( + reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.FileDescriptorProto.dependency) +} +inline ::std::string* FileDescriptorProto::add_dependency() { + return dependency_.Add(); +} +inline void FileDescriptorProto::add_dependency(const ::std::string& value) { + dependency_.Add()->assign(value); + // @@protoc_insertion_point(field_add:google.protobuf.FileDescriptorProto.dependency) +} +inline void FileDescriptorProto::add_dependency(const char* value) { + dependency_.Add()->assign(value); + // @@protoc_insertion_point(field_add_char:google.protobuf.FileDescriptorProto.dependency) +} +inline void FileDescriptorProto::add_dependency(const char* value, size_t size) { + dependency_.Add()->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_add_pointer:google.protobuf.FileDescriptorProto.dependency) +} +inline const ::google::protobuf::RepeatedPtrField< ::std::string>& +FileDescriptorProto::dependency() const { + // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorProto.dependency) + return dependency_; +} +inline ::google::protobuf::RepeatedPtrField< ::std::string>* +FileDescriptorProto::mutable_dependency() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.FileDescriptorProto.dependency) + return &dependency_; +} + +// repeated int32 public_dependency = 10; +inline int FileDescriptorProto::public_dependency_size() const { + return public_dependency_.size(); +} +inline void FileDescriptorProto::clear_public_dependency() { + public_dependency_.Clear(); +} +inline ::google::protobuf::int32 FileDescriptorProto::public_dependency(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.public_dependency) + return public_dependency_.Get(index); +} +inline void FileDescriptorProto::set_public_dependency(int index, ::google::protobuf::int32 value) { + public_dependency_.Set(index, value); + // @@protoc_insertion_point(field_set:google.protobuf.FileDescriptorProto.public_dependency) +} +inline void FileDescriptorProto::add_public_dependency(::google::protobuf::int32 value) { + public_dependency_.Add(value); + // @@protoc_insertion_point(field_add:google.protobuf.FileDescriptorProto.public_dependency) +} +inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >& +FileDescriptorProto::public_dependency() const { + // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorProto.public_dependency) + return public_dependency_; +} +inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >* +FileDescriptorProto::mutable_public_dependency() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.FileDescriptorProto.public_dependency) + return &public_dependency_; +} + +// repeated int32 weak_dependency = 11; +inline int FileDescriptorProto::weak_dependency_size() const { + return weak_dependency_.size(); +} +inline void FileDescriptorProto::clear_weak_dependency() { + weak_dependency_.Clear(); +} +inline ::google::protobuf::int32 FileDescriptorProto::weak_dependency(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.weak_dependency) + return weak_dependency_.Get(index); +} +inline void FileDescriptorProto::set_weak_dependency(int index, ::google::protobuf::int32 value) { + weak_dependency_.Set(index, value); + // @@protoc_insertion_point(field_set:google.protobuf.FileDescriptorProto.weak_dependency) +} +inline void FileDescriptorProto::add_weak_dependency(::google::protobuf::int32 value) { + weak_dependency_.Add(value); + // @@protoc_insertion_point(field_add:google.protobuf.FileDescriptorProto.weak_dependency) +} +inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >& +FileDescriptorProto::weak_dependency() const { + // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorProto.weak_dependency) + return weak_dependency_; +} +inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >* +FileDescriptorProto::mutable_weak_dependency() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.FileDescriptorProto.weak_dependency) + return &weak_dependency_; +} + +// repeated .google.protobuf.DescriptorProto message_type = 4; +inline int FileDescriptorProto::message_type_size() const { + return message_type_.size(); +} +inline void FileDescriptorProto::clear_message_type() { + message_type_.Clear(); +} +inline const ::google::protobuf::DescriptorProto& FileDescriptorProto::message_type(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.message_type) + return message_type_.Get(index); +} +inline ::google::protobuf::DescriptorProto* FileDescriptorProto::mutable_message_type(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorProto.message_type) + return message_type_.Mutable(index); +} +inline ::google::protobuf::DescriptorProto* FileDescriptorProto::add_message_type() { + // @@protoc_insertion_point(field_add:google.protobuf.FileDescriptorProto.message_type) + return message_type_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto >& +FileDescriptorProto::message_type() const { + // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorProto.message_type) + return message_type_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto >* +FileDescriptorProto::mutable_message_type() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.FileDescriptorProto.message_type) + return &message_type_; +} + +// repeated .google.protobuf.EnumDescriptorProto enum_type = 5; +inline int FileDescriptorProto::enum_type_size() const { + return enum_type_.size(); +} +inline void FileDescriptorProto::clear_enum_type() { + enum_type_.Clear(); +} +inline const ::google::protobuf::EnumDescriptorProto& FileDescriptorProto::enum_type(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.enum_type) + return enum_type_.Get(index); +} +inline ::google::protobuf::EnumDescriptorProto* FileDescriptorProto::mutable_enum_type(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorProto.enum_type) + return enum_type_.Mutable(index); +} +inline ::google::protobuf::EnumDescriptorProto* FileDescriptorProto::add_enum_type() { + // @@protoc_insertion_point(field_add:google.protobuf.FileDescriptorProto.enum_type) + return enum_type_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumDescriptorProto >& +FileDescriptorProto::enum_type() const { + // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorProto.enum_type) + return enum_type_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumDescriptorProto >* +FileDescriptorProto::mutable_enum_type() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.FileDescriptorProto.enum_type) + return &enum_type_; +} + +// repeated .google.protobuf.ServiceDescriptorProto service = 6; +inline int FileDescriptorProto::service_size() const { + return service_.size(); +} +inline void FileDescriptorProto::clear_service() { + service_.Clear(); +} +inline const ::google::protobuf::ServiceDescriptorProto& FileDescriptorProto::service(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.service) + return service_.Get(index); +} +inline ::google::protobuf::ServiceDescriptorProto* FileDescriptorProto::mutable_service(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorProto.service) + return service_.Mutable(index); +} +inline ::google::protobuf::ServiceDescriptorProto* FileDescriptorProto::add_service() { + // @@protoc_insertion_point(field_add:google.protobuf.FileDescriptorProto.service) + return service_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::ServiceDescriptorProto >& +FileDescriptorProto::service() const { + // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorProto.service) + return service_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::ServiceDescriptorProto >* +FileDescriptorProto::mutable_service() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.FileDescriptorProto.service) + return &service_; +} + +// repeated .google.protobuf.FieldDescriptorProto extension = 7; +inline int FileDescriptorProto::extension_size() const { + return extension_.size(); +} +inline void FileDescriptorProto::clear_extension() { + extension_.Clear(); +} +inline const ::google::protobuf::FieldDescriptorProto& FileDescriptorProto::extension(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.extension) + return extension_.Get(index); +} +inline ::google::protobuf::FieldDescriptorProto* FileDescriptorProto::mutable_extension(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorProto.extension) + return extension_.Mutable(index); +} +inline ::google::protobuf::FieldDescriptorProto* FileDescriptorProto::add_extension() { + // @@protoc_insertion_point(field_add:google.protobuf.FileDescriptorProto.extension) + return extension_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >& +FileDescriptorProto::extension() const { + // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorProto.extension) + return extension_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >* +FileDescriptorProto::mutable_extension() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.FileDescriptorProto.extension) + return &extension_; +} + +// optional .google.protobuf.FileOptions options = 8; +inline bool FileDescriptorProto::has_options() const { + return (_has_bits_[0] & 0x00000200u) != 0; +} +inline void FileDescriptorProto::set_has_options() { + _has_bits_[0] |= 0x00000200u; +} +inline void FileDescriptorProto::clear_has_options() { + _has_bits_[0] &= ~0x00000200u; +} +inline void FileDescriptorProto::clear_options() { + if (options_ != NULL) options_->::google::protobuf::FileOptions::Clear(); + clear_has_options(); +} +inline const ::google::protobuf::FileOptions& FileDescriptorProto::options() const { + // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.options) + return options_ != NULL ? *options_ : *default_instance_->options_; +} +inline ::google::protobuf::FileOptions* FileDescriptorProto::mutable_options() { + set_has_options(); + if (options_ == NULL) options_ = new ::google::protobuf::FileOptions; + // @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorProto.options) + return options_; +} +inline ::google::protobuf::FileOptions* FileDescriptorProto::release_options() { + clear_has_options(); + ::google::protobuf::FileOptions* temp = options_; + options_ = NULL; + return temp; +} +inline void FileDescriptorProto::set_allocated_options(::google::protobuf::FileOptions* options) { + delete options_; + options_ = options; + if (options) { + set_has_options(); + } else { + clear_has_options(); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.FileDescriptorProto.options) +} + +// optional .google.protobuf.SourceCodeInfo source_code_info = 9; +inline bool FileDescriptorProto::has_source_code_info() const { + return (_has_bits_[0] & 0x00000400u) != 0; +} +inline void FileDescriptorProto::set_has_source_code_info() { + _has_bits_[0] |= 0x00000400u; +} +inline void FileDescriptorProto::clear_has_source_code_info() { + _has_bits_[0] &= ~0x00000400u; +} +inline void FileDescriptorProto::clear_source_code_info() { + if (source_code_info_ != NULL) source_code_info_->::google::protobuf::SourceCodeInfo::Clear(); + clear_has_source_code_info(); +} +inline const ::google::protobuf::SourceCodeInfo& FileDescriptorProto::source_code_info() const { + // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.source_code_info) + return source_code_info_ != NULL ? *source_code_info_ : *default_instance_->source_code_info_; +} +inline ::google::protobuf::SourceCodeInfo* FileDescriptorProto::mutable_source_code_info() { + set_has_source_code_info(); + if (source_code_info_ == NULL) source_code_info_ = new ::google::protobuf::SourceCodeInfo; + // @@protoc_insertion_point(field_mutable:google.protobuf.FileDescriptorProto.source_code_info) + return source_code_info_; +} +inline ::google::protobuf::SourceCodeInfo* FileDescriptorProto::release_source_code_info() { + clear_has_source_code_info(); + ::google::protobuf::SourceCodeInfo* temp = source_code_info_; + source_code_info_ = NULL; + return temp; +} +inline void FileDescriptorProto::set_allocated_source_code_info(::google::protobuf::SourceCodeInfo* source_code_info) { + delete source_code_info_; + source_code_info_ = source_code_info; + if (source_code_info) { + set_has_source_code_info(); + } else { + clear_has_source_code_info(); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.FileDescriptorProto.source_code_info) +} + +// ------------------------------------------------------------------- + +// DescriptorProto_ExtensionRange + +// optional int32 start = 1; +inline bool DescriptorProto_ExtensionRange::has_start() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void DescriptorProto_ExtensionRange::set_has_start() { + _has_bits_[0] |= 0x00000001u; +} +inline void DescriptorProto_ExtensionRange::clear_has_start() { + _has_bits_[0] &= ~0x00000001u; +} +inline void DescriptorProto_ExtensionRange::clear_start() { + start_ = 0; + clear_has_start(); +} +inline ::google::protobuf::int32 DescriptorProto_ExtensionRange::start() const { + // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.ExtensionRange.start) + return start_; +} +inline void DescriptorProto_ExtensionRange::set_start(::google::protobuf::int32 value) { + set_has_start(); + start_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.DescriptorProto.ExtensionRange.start) +} + +// optional int32 end = 2; +inline bool DescriptorProto_ExtensionRange::has_end() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void DescriptorProto_ExtensionRange::set_has_end() { + _has_bits_[0] |= 0x00000002u; +} +inline void DescriptorProto_ExtensionRange::clear_has_end() { + _has_bits_[0] &= ~0x00000002u; +} +inline void DescriptorProto_ExtensionRange::clear_end() { + end_ = 0; + clear_has_end(); +} +inline ::google::protobuf::int32 DescriptorProto_ExtensionRange::end() const { + // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.ExtensionRange.end) + return end_; +} +inline void DescriptorProto_ExtensionRange::set_end(::google::protobuf::int32 value) { + set_has_end(); + end_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.DescriptorProto.ExtensionRange.end) +} + +// ------------------------------------------------------------------- + +// DescriptorProto + +// optional string name = 1; +inline bool DescriptorProto::has_name() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void DescriptorProto::set_has_name() { + _has_bits_[0] |= 0x00000001u; +} +inline void DescriptorProto::clear_has_name() { + _has_bits_[0] &= ~0x00000001u; +} +inline void DescriptorProto::clear_name() { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_->clear(); + } + clear_has_name(); +} +inline const ::std::string& DescriptorProto::name() const { + // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.name) + return *name_; +} +inline void DescriptorProto::set_name(const ::std::string& value) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.DescriptorProto.name) +} +inline void DescriptorProto::set_name(const char* value) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.DescriptorProto.name) +} +inline void DescriptorProto::set_name(const char* value, size_t size) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.DescriptorProto.name) +} +inline ::std::string* DescriptorProto::mutable_name() { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.DescriptorProto.name) + return name_; +} +inline ::std::string* DescriptorProto::release_name() { + clear_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = name_; + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void DescriptorProto::set_allocated_name(::std::string* name) { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete name_; + } + if (name) { + set_has_name(); + name_ = name; + } else { + clear_has_name(); + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.DescriptorProto.name) +} + +// repeated .google.protobuf.FieldDescriptorProto field = 2; +inline int DescriptorProto::field_size() const { + return field_.size(); +} +inline void DescriptorProto::clear_field() { + field_.Clear(); +} +inline const ::google::protobuf::FieldDescriptorProto& DescriptorProto::field(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.field) + return field_.Get(index); +} +inline ::google::protobuf::FieldDescriptorProto* DescriptorProto::mutable_field(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.DescriptorProto.field) + return field_.Mutable(index); +} +inline ::google::protobuf::FieldDescriptorProto* DescriptorProto::add_field() { + // @@protoc_insertion_point(field_add:google.protobuf.DescriptorProto.field) + return field_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >& +DescriptorProto::field() const { + // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.field) + return field_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >* +DescriptorProto::mutable_field() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.DescriptorProto.field) + return &field_; +} + +// repeated .google.protobuf.FieldDescriptorProto extension = 6; +inline int DescriptorProto::extension_size() const { + return extension_.size(); +} +inline void DescriptorProto::clear_extension() { + extension_.Clear(); +} +inline const ::google::protobuf::FieldDescriptorProto& DescriptorProto::extension(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.extension) + return extension_.Get(index); +} +inline ::google::protobuf::FieldDescriptorProto* DescriptorProto::mutable_extension(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.DescriptorProto.extension) + return extension_.Mutable(index); +} +inline ::google::protobuf::FieldDescriptorProto* DescriptorProto::add_extension() { + // @@protoc_insertion_point(field_add:google.protobuf.DescriptorProto.extension) + return extension_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >& +DescriptorProto::extension() const { + // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.extension) + return extension_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::FieldDescriptorProto >* +DescriptorProto::mutable_extension() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.DescriptorProto.extension) + return &extension_; +} + +// repeated .google.protobuf.DescriptorProto nested_type = 3; +inline int DescriptorProto::nested_type_size() const { + return nested_type_.size(); +} +inline void DescriptorProto::clear_nested_type() { + nested_type_.Clear(); +} +inline const ::google::protobuf::DescriptorProto& DescriptorProto::nested_type(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.nested_type) + return nested_type_.Get(index); +} +inline ::google::protobuf::DescriptorProto* DescriptorProto::mutable_nested_type(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.DescriptorProto.nested_type) + return nested_type_.Mutable(index); +} +inline ::google::protobuf::DescriptorProto* DescriptorProto::add_nested_type() { + // @@protoc_insertion_point(field_add:google.protobuf.DescriptorProto.nested_type) + return nested_type_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto >& +DescriptorProto::nested_type() const { + // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.nested_type) + return nested_type_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto >* +DescriptorProto::mutable_nested_type() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.DescriptorProto.nested_type) + return &nested_type_; +} + +// repeated .google.protobuf.EnumDescriptorProto enum_type = 4; +inline int DescriptorProto::enum_type_size() const { + return enum_type_.size(); +} +inline void DescriptorProto::clear_enum_type() { + enum_type_.Clear(); +} +inline const ::google::protobuf::EnumDescriptorProto& DescriptorProto::enum_type(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.enum_type) + return enum_type_.Get(index); +} +inline ::google::protobuf::EnumDescriptorProto* DescriptorProto::mutable_enum_type(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.DescriptorProto.enum_type) + return enum_type_.Mutable(index); +} +inline ::google::protobuf::EnumDescriptorProto* DescriptorProto::add_enum_type() { + // @@protoc_insertion_point(field_add:google.protobuf.DescriptorProto.enum_type) + return enum_type_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumDescriptorProto >& +DescriptorProto::enum_type() const { + // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.enum_type) + return enum_type_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumDescriptorProto >* +DescriptorProto::mutable_enum_type() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.DescriptorProto.enum_type) + return &enum_type_; +} + +// repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; +inline int DescriptorProto::extension_range_size() const { + return extension_range_.size(); +} +inline void DescriptorProto::clear_extension_range() { + extension_range_.Clear(); +} +inline const ::google::protobuf::DescriptorProto_ExtensionRange& DescriptorProto::extension_range(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.extension_range) + return extension_range_.Get(index); +} +inline ::google::protobuf::DescriptorProto_ExtensionRange* DescriptorProto::mutable_extension_range(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.DescriptorProto.extension_range) + return extension_range_.Mutable(index); +} +inline ::google::protobuf::DescriptorProto_ExtensionRange* DescriptorProto::add_extension_range() { + // @@protoc_insertion_point(field_add:google.protobuf.DescriptorProto.extension_range) + return extension_range_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto_ExtensionRange >& +DescriptorProto::extension_range() const { + // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.extension_range) + return extension_range_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::DescriptorProto_ExtensionRange >* +DescriptorProto::mutable_extension_range() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.DescriptorProto.extension_range) + return &extension_range_; +} + +// repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; +inline int DescriptorProto::oneof_decl_size() const { + return oneof_decl_.size(); +} +inline void DescriptorProto::clear_oneof_decl() { + oneof_decl_.Clear(); +} +inline const ::google::protobuf::OneofDescriptorProto& DescriptorProto::oneof_decl(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.oneof_decl) + return oneof_decl_.Get(index); +} +inline ::google::protobuf::OneofDescriptorProto* DescriptorProto::mutable_oneof_decl(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.DescriptorProto.oneof_decl) + return oneof_decl_.Mutable(index); +} +inline ::google::protobuf::OneofDescriptorProto* DescriptorProto::add_oneof_decl() { + // @@protoc_insertion_point(field_add:google.protobuf.DescriptorProto.oneof_decl) + return oneof_decl_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::OneofDescriptorProto >& +DescriptorProto::oneof_decl() const { + // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.oneof_decl) + return oneof_decl_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::OneofDescriptorProto >* +DescriptorProto::mutable_oneof_decl() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.DescriptorProto.oneof_decl) + return &oneof_decl_; +} + +// optional .google.protobuf.MessageOptions options = 7; +inline bool DescriptorProto::has_options() const { + return (_has_bits_[0] & 0x00000080u) != 0; +} +inline void DescriptorProto::set_has_options() { + _has_bits_[0] |= 0x00000080u; +} +inline void DescriptorProto::clear_has_options() { + _has_bits_[0] &= ~0x00000080u; +} +inline void DescriptorProto::clear_options() { + if (options_ != NULL) options_->::google::protobuf::MessageOptions::Clear(); + clear_has_options(); +} +inline const ::google::protobuf::MessageOptions& DescriptorProto::options() const { + // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.options) + return options_ != NULL ? *options_ : *default_instance_->options_; +} +inline ::google::protobuf::MessageOptions* DescriptorProto::mutable_options() { + set_has_options(); + if (options_ == NULL) options_ = new ::google::protobuf::MessageOptions; + // @@protoc_insertion_point(field_mutable:google.protobuf.DescriptorProto.options) + return options_; +} +inline ::google::protobuf::MessageOptions* DescriptorProto::release_options() { + clear_has_options(); + ::google::protobuf::MessageOptions* temp = options_; + options_ = NULL; + return temp; +} +inline void DescriptorProto::set_allocated_options(::google::protobuf::MessageOptions* options) { + delete options_; + options_ = options; + if (options) { + set_has_options(); + } else { + clear_has_options(); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.DescriptorProto.options) +} + +// ------------------------------------------------------------------- + +// FieldDescriptorProto + +// optional string name = 1; +inline bool FieldDescriptorProto::has_name() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void FieldDescriptorProto::set_has_name() { + _has_bits_[0] |= 0x00000001u; +} +inline void FieldDescriptorProto::clear_has_name() { + _has_bits_[0] &= ~0x00000001u; +} +inline void FieldDescriptorProto::clear_name() { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_->clear(); + } + clear_has_name(); +} +inline const ::std::string& FieldDescriptorProto::name() const { + // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.name) + return *name_; +} +inline void FieldDescriptorProto::set_name(const ::std::string& value) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.name) +} +inline void FieldDescriptorProto::set_name(const char* value) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.FieldDescriptorProto.name) +} +inline void FieldDescriptorProto::set_name(const char* value, size_t size) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.FieldDescriptorProto.name) +} +inline ::std::string* FieldDescriptorProto::mutable_name() { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.FieldDescriptorProto.name) + return name_; +} +inline ::std::string* FieldDescriptorProto::release_name() { + clear_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = name_; + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void FieldDescriptorProto::set_allocated_name(::std::string* name) { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete name_; + } + if (name) { + set_has_name(); + name_ = name; + } else { + clear_has_name(); + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.FieldDescriptorProto.name) +} + +// optional int32 number = 3; +inline bool FieldDescriptorProto::has_number() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void FieldDescriptorProto::set_has_number() { + _has_bits_[0] |= 0x00000002u; +} +inline void FieldDescriptorProto::clear_has_number() { + _has_bits_[0] &= ~0x00000002u; +} +inline void FieldDescriptorProto::clear_number() { + number_ = 0; + clear_has_number(); +} +inline ::google::protobuf::int32 FieldDescriptorProto::number() const { + // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.number) + return number_; +} +inline void FieldDescriptorProto::set_number(::google::protobuf::int32 value) { + set_has_number(); + number_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.number) +} + +// optional .google.protobuf.FieldDescriptorProto.Label label = 4; +inline bool FieldDescriptorProto::has_label() const { + return (_has_bits_[0] & 0x00000004u) != 0; +} +inline void FieldDescriptorProto::set_has_label() { + _has_bits_[0] |= 0x00000004u; +} +inline void FieldDescriptorProto::clear_has_label() { + _has_bits_[0] &= ~0x00000004u; +} +inline void FieldDescriptorProto::clear_label() { + label_ = 1; + clear_has_label(); +} +inline ::google::protobuf::FieldDescriptorProto_Label FieldDescriptorProto::label() const { + // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.label) + return static_cast< ::google::protobuf::FieldDescriptorProto_Label >(label_); +} +inline void FieldDescriptorProto::set_label(::google::protobuf::FieldDescriptorProto_Label value) { + assert(::google::protobuf::FieldDescriptorProto_Label_IsValid(value)); + set_has_label(); + label_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.label) +} + +// optional .google.protobuf.FieldDescriptorProto.Type type = 5; +inline bool FieldDescriptorProto::has_type() const { + return (_has_bits_[0] & 0x00000008u) != 0; +} +inline void FieldDescriptorProto::set_has_type() { + _has_bits_[0] |= 0x00000008u; +} +inline void FieldDescriptorProto::clear_has_type() { + _has_bits_[0] &= ~0x00000008u; +} +inline void FieldDescriptorProto::clear_type() { + type_ = 1; + clear_has_type(); +} +inline ::google::protobuf::FieldDescriptorProto_Type FieldDescriptorProto::type() const { + // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.type) + return static_cast< ::google::protobuf::FieldDescriptorProto_Type >(type_); +} +inline void FieldDescriptorProto::set_type(::google::protobuf::FieldDescriptorProto_Type value) { + assert(::google::protobuf::FieldDescriptorProto_Type_IsValid(value)); + set_has_type(); + type_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.type) +} + +// optional string type_name = 6; +inline bool FieldDescriptorProto::has_type_name() const { + return (_has_bits_[0] & 0x00000010u) != 0; +} +inline void FieldDescriptorProto::set_has_type_name() { + _has_bits_[0] |= 0x00000010u; +} +inline void FieldDescriptorProto::clear_has_type_name() { + _has_bits_[0] &= ~0x00000010u; +} +inline void FieldDescriptorProto::clear_type_name() { + if (type_name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + type_name_->clear(); + } + clear_has_type_name(); +} +inline const ::std::string& FieldDescriptorProto::type_name() const { + // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.type_name) + return *type_name_; +} +inline void FieldDescriptorProto::set_type_name(const ::std::string& value) { + set_has_type_name(); + if (type_name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + type_name_ = new ::std::string; + } + type_name_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.type_name) +} +inline void FieldDescriptorProto::set_type_name(const char* value) { + set_has_type_name(); + if (type_name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + type_name_ = new ::std::string; + } + type_name_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.FieldDescriptorProto.type_name) +} +inline void FieldDescriptorProto::set_type_name(const char* value, size_t size) { + set_has_type_name(); + if (type_name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + type_name_ = new ::std::string; + } + type_name_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.FieldDescriptorProto.type_name) +} +inline ::std::string* FieldDescriptorProto::mutable_type_name() { + set_has_type_name(); + if (type_name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + type_name_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.FieldDescriptorProto.type_name) + return type_name_; +} +inline ::std::string* FieldDescriptorProto::release_type_name() { + clear_has_type_name(); + if (type_name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = type_name_; + type_name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void FieldDescriptorProto::set_allocated_type_name(::std::string* type_name) { + if (type_name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete type_name_; + } + if (type_name) { + set_has_type_name(); + type_name_ = type_name; + } else { + clear_has_type_name(); + type_name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.FieldDescriptorProto.type_name) +} + +// optional string extendee = 2; +inline bool FieldDescriptorProto::has_extendee() const { + return (_has_bits_[0] & 0x00000020u) != 0; +} +inline void FieldDescriptorProto::set_has_extendee() { + _has_bits_[0] |= 0x00000020u; +} +inline void FieldDescriptorProto::clear_has_extendee() { + _has_bits_[0] &= ~0x00000020u; +} +inline void FieldDescriptorProto::clear_extendee() { + if (extendee_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + extendee_->clear(); + } + clear_has_extendee(); +} +inline const ::std::string& FieldDescriptorProto::extendee() const { + // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.extendee) + return *extendee_; +} +inline void FieldDescriptorProto::set_extendee(const ::std::string& value) { + set_has_extendee(); + if (extendee_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + extendee_ = new ::std::string; + } + extendee_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.extendee) +} +inline void FieldDescriptorProto::set_extendee(const char* value) { + set_has_extendee(); + if (extendee_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + extendee_ = new ::std::string; + } + extendee_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.FieldDescriptorProto.extendee) +} +inline void FieldDescriptorProto::set_extendee(const char* value, size_t size) { + set_has_extendee(); + if (extendee_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + extendee_ = new ::std::string; + } + extendee_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.FieldDescriptorProto.extendee) +} +inline ::std::string* FieldDescriptorProto::mutable_extendee() { + set_has_extendee(); + if (extendee_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + extendee_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.FieldDescriptorProto.extendee) + return extendee_; +} +inline ::std::string* FieldDescriptorProto::release_extendee() { + clear_has_extendee(); + if (extendee_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = extendee_; + extendee_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void FieldDescriptorProto::set_allocated_extendee(::std::string* extendee) { + if (extendee_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete extendee_; + } + if (extendee) { + set_has_extendee(); + extendee_ = extendee; + } else { + clear_has_extendee(); + extendee_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.FieldDescriptorProto.extendee) +} + +// optional string default_value = 7; +inline bool FieldDescriptorProto::has_default_value() const { + return (_has_bits_[0] & 0x00000040u) != 0; +} +inline void FieldDescriptorProto::set_has_default_value() { + _has_bits_[0] |= 0x00000040u; +} +inline void FieldDescriptorProto::clear_has_default_value() { + _has_bits_[0] &= ~0x00000040u; +} +inline void FieldDescriptorProto::clear_default_value() { + if (default_value_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + default_value_->clear(); + } + clear_has_default_value(); +} +inline const ::std::string& FieldDescriptorProto::default_value() const { + // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.default_value) + return *default_value_; +} +inline void FieldDescriptorProto::set_default_value(const ::std::string& value) { + set_has_default_value(); + if (default_value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + default_value_ = new ::std::string; + } + default_value_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.default_value) +} +inline void FieldDescriptorProto::set_default_value(const char* value) { + set_has_default_value(); + if (default_value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + default_value_ = new ::std::string; + } + default_value_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.FieldDescriptorProto.default_value) +} +inline void FieldDescriptorProto::set_default_value(const char* value, size_t size) { + set_has_default_value(); + if (default_value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + default_value_ = new ::std::string; + } + default_value_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.FieldDescriptorProto.default_value) +} +inline ::std::string* FieldDescriptorProto::mutable_default_value() { + set_has_default_value(); + if (default_value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + default_value_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.FieldDescriptorProto.default_value) + return default_value_; +} +inline ::std::string* FieldDescriptorProto::release_default_value() { + clear_has_default_value(); + if (default_value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = default_value_; + default_value_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void FieldDescriptorProto::set_allocated_default_value(::std::string* default_value) { + if (default_value_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete default_value_; + } + if (default_value) { + set_has_default_value(); + default_value_ = default_value; + } else { + clear_has_default_value(); + default_value_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.FieldDescriptorProto.default_value) +} + +// optional int32 oneof_index = 9; +inline bool FieldDescriptorProto::has_oneof_index() const { + return (_has_bits_[0] & 0x00000080u) != 0; +} +inline void FieldDescriptorProto::set_has_oneof_index() { + _has_bits_[0] |= 0x00000080u; +} +inline void FieldDescriptorProto::clear_has_oneof_index() { + _has_bits_[0] &= ~0x00000080u; +} +inline void FieldDescriptorProto::clear_oneof_index() { + oneof_index_ = 0; + clear_has_oneof_index(); +} +inline ::google::protobuf::int32 FieldDescriptorProto::oneof_index() const { + // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.oneof_index) + return oneof_index_; +} +inline void FieldDescriptorProto::set_oneof_index(::google::protobuf::int32 value) { + set_has_oneof_index(); + oneof_index_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.FieldDescriptorProto.oneof_index) +} + +// optional .google.protobuf.FieldOptions options = 8; +inline bool FieldDescriptorProto::has_options() const { + return (_has_bits_[0] & 0x00000100u) != 0; +} +inline void FieldDescriptorProto::set_has_options() { + _has_bits_[0] |= 0x00000100u; +} +inline void FieldDescriptorProto::clear_has_options() { + _has_bits_[0] &= ~0x00000100u; +} +inline void FieldDescriptorProto::clear_options() { + if (options_ != NULL) options_->::google::protobuf::FieldOptions::Clear(); + clear_has_options(); +} +inline const ::google::protobuf::FieldOptions& FieldDescriptorProto::options() const { + // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.options) + return options_ != NULL ? *options_ : *default_instance_->options_; +} +inline ::google::protobuf::FieldOptions* FieldDescriptorProto::mutable_options() { + set_has_options(); + if (options_ == NULL) options_ = new ::google::protobuf::FieldOptions; + // @@protoc_insertion_point(field_mutable:google.protobuf.FieldDescriptorProto.options) + return options_; +} +inline ::google::protobuf::FieldOptions* FieldDescriptorProto::release_options() { + clear_has_options(); + ::google::protobuf::FieldOptions* temp = options_; + options_ = NULL; + return temp; +} +inline void FieldDescriptorProto::set_allocated_options(::google::protobuf::FieldOptions* options) { + delete options_; + options_ = options; + if (options) { + set_has_options(); + } else { + clear_has_options(); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.FieldDescriptorProto.options) +} + +// ------------------------------------------------------------------- + +// OneofDescriptorProto + +// optional string name = 1; +inline bool OneofDescriptorProto::has_name() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void OneofDescriptorProto::set_has_name() { + _has_bits_[0] |= 0x00000001u; +} +inline void OneofDescriptorProto::clear_has_name() { + _has_bits_[0] &= ~0x00000001u; +} +inline void OneofDescriptorProto::clear_name() { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_->clear(); + } + clear_has_name(); +} +inline const ::std::string& OneofDescriptorProto::name() const { + // @@protoc_insertion_point(field_get:google.protobuf.OneofDescriptorProto.name) + return *name_; +} +inline void OneofDescriptorProto::set_name(const ::std::string& value) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.OneofDescriptorProto.name) +} +inline void OneofDescriptorProto::set_name(const char* value) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.OneofDescriptorProto.name) +} +inline void OneofDescriptorProto::set_name(const char* value, size_t size) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.OneofDescriptorProto.name) +} +inline ::std::string* OneofDescriptorProto::mutable_name() { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.OneofDescriptorProto.name) + return name_; +} +inline ::std::string* OneofDescriptorProto::release_name() { + clear_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = name_; + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void OneofDescriptorProto::set_allocated_name(::std::string* name) { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete name_; + } + if (name) { + set_has_name(); + name_ = name; + } else { + clear_has_name(); + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.OneofDescriptorProto.name) +} + +// ------------------------------------------------------------------- + +// EnumDescriptorProto + +// optional string name = 1; +inline bool EnumDescriptorProto::has_name() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void EnumDescriptorProto::set_has_name() { + _has_bits_[0] |= 0x00000001u; +} +inline void EnumDescriptorProto::clear_has_name() { + _has_bits_[0] &= ~0x00000001u; +} +inline void EnumDescriptorProto::clear_name() { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_->clear(); + } + clear_has_name(); +} +inline const ::std::string& EnumDescriptorProto::name() const { + // @@protoc_insertion_point(field_get:google.protobuf.EnumDescriptorProto.name) + return *name_; +} +inline void EnumDescriptorProto::set_name(const ::std::string& value) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.EnumDescriptorProto.name) +} +inline void EnumDescriptorProto::set_name(const char* value) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.EnumDescriptorProto.name) +} +inline void EnumDescriptorProto::set_name(const char* value, size_t size) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.EnumDescriptorProto.name) +} +inline ::std::string* EnumDescriptorProto::mutable_name() { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.EnumDescriptorProto.name) + return name_; +} +inline ::std::string* EnumDescriptorProto::release_name() { + clear_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = name_; + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void EnumDescriptorProto::set_allocated_name(::std::string* name) { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete name_; + } + if (name) { + set_has_name(); + name_ = name; + } else { + clear_has_name(); + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.EnumDescriptorProto.name) +} + +// repeated .google.protobuf.EnumValueDescriptorProto value = 2; +inline int EnumDescriptorProto::value_size() const { + return value_.size(); +} +inline void EnumDescriptorProto::clear_value() { + value_.Clear(); +} +inline const ::google::protobuf::EnumValueDescriptorProto& EnumDescriptorProto::value(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.EnumDescriptorProto.value) + return value_.Get(index); +} +inline ::google::protobuf::EnumValueDescriptorProto* EnumDescriptorProto::mutable_value(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.EnumDescriptorProto.value) + return value_.Mutable(index); +} +inline ::google::protobuf::EnumValueDescriptorProto* EnumDescriptorProto::add_value() { + // @@protoc_insertion_point(field_add:google.protobuf.EnumDescriptorProto.value) + return value_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumValueDescriptorProto >& +EnumDescriptorProto::value() const { + // @@protoc_insertion_point(field_list:google.protobuf.EnumDescriptorProto.value) + return value_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::EnumValueDescriptorProto >* +EnumDescriptorProto::mutable_value() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.EnumDescriptorProto.value) + return &value_; +} + +// optional .google.protobuf.EnumOptions options = 3; +inline bool EnumDescriptorProto::has_options() const { + return (_has_bits_[0] & 0x00000004u) != 0; +} +inline void EnumDescriptorProto::set_has_options() { + _has_bits_[0] |= 0x00000004u; +} +inline void EnumDescriptorProto::clear_has_options() { + _has_bits_[0] &= ~0x00000004u; +} +inline void EnumDescriptorProto::clear_options() { + if (options_ != NULL) options_->::google::protobuf::EnumOptions::Clear(); + clear_has_options(); +} +inline const ::google::protobuf::EnumOptions& EnumDescriptorProto::options() const { + // @@protoc_insertion_point(field_get:google.protobuf.EnumDescriptorProto.options) + return options_ != NULL ? *options_ : *default_instance_->options_; +} +inline ::google::protobuf::EnumOptions* EnumDescriptorProto::mutable_options() { + set_has_options(); + if (options_ == NULL) options_ = new ::google::protobuf::EnumOptions; + // @@protoc_insertion_point(field_mutable:google.protobuf.EnumDescriptorProto.options) + return options_; +} +inline ::google::protobuf::EnumOptions* EnumDescriptorProto::release_options() { + clear_has_options(); + ::google::protobuf::EnumOptions* temp = options_; + options_ = NULL; + return temp; +} +inline void EnumDescriptorProto::set_allocated_options(::google::protobuf::EnumOptions* options) { + delete options_; + options_ = options; + if (options) { + set_has_options(); + } else { + clear_has_options(); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.EnumDescriptorProto.options) +} + +// ------------------------------------------------------------------- + +// EnumValueDescriptorProto + +// optional string name = 1; +inline bool EnumValueDescriptorProto::has_name() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void EnumValueDescriptorProto::set_has_name() { + _has_bits_[0] |= 0x00000001u; +} +inline void EnumValueDescriptorProto::clear_has_name() { + _has_bits_[0] &= ~0x00000001u; +} +inline void EnumValueDescriptorProto::clear_name() { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_->clear(); + } + clear_has_name(); +} +inline const ::std::string& EnumValueDescriptorProto::name() const { + // @@protoc_insertion_point(field_get:google.protobuf.EnumValueDescriptorProto.name) + return *name_; +} +inline void EnumValueDescriptorProto::set_name(const ::std::string& value) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.EnumValueDescriptorProto.name) +} +inline void EnumValueDescriptorProto::set_name(const char* value) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.EnumValueDescriptorProto.name) +} +inline void EnumValueDescriptorProto::set_name(const char* value, size_t size) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.EnumValueDescriptorProto.name) +} +inline ::std::string* EnumValueDescriptorProto::mutable_name() { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.EnumValueDescriptorProto.name) + return name_; +} +inline ::std::string* EnumValueDescriptorProto::release_name() { + clear_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = name_; + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void EnumValueDescriptorProto::set_allocated_name(::std::string* name) { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete name_; + } + if (name) { + set_has_name(); + name_ = name; + } else { + clear_has_name(); + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.EnumValueDescriptorProto.name) +} + +// optional int32 number = 2; +inline bool EnumValueDescriptorProto::has_number() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void EnumValueDescriptorProto::set_has_number() { + _has_bits_[0] |= 0x00000002u; +} +inline void EnumValueDescriptorProto::clear_has_number() { + _has_bits_[0] &= ~0x00000002u; +} +inline void EnumValueDescriptorProto::clear_number() { + number_ = 0; + clear_has_number(); +} +inline ::google::protobuf::int32 EnumValueDescriptorProto::number() const { + // @@protoc_insertion_point(field_get:google.protobuf.EnumValueDescriptorProto.number) + return number_; +} +inline void EnumValueDescriptorProto::set_number(::google::protobuf::int32 value) { + set_has_number(); + number_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.EnumValueDescriptorProto.number) +} + +// optional .google.protobuf.EnumValueOptions options = 3; +inline bool EnumValueDescriptorProto::has_options() const { + return (_has_bits_[0] & 0x00000004u) != 0; +} +inline void EnumValueDescriptorProto::set_has_options() { + _has_bits_[0] |= 0x00000004u; +} +inline void EnumValueDescriptorProto::clear_has_options() { + _has_bits_[0] &= ~0x00000004u; +} +inline void EnumValueDescriptorProto::clear_options() { + if (options_ != NULL) options_->::google::protobuf::EnumValueOptions::Clear(); + clear_has_options(); +} +inline const ::google::protobuf::EnumValueOptions& EnumValueDescriptorProto::options() const { + // @@protoc_insertion_point(field_get:google.protobuf.EnumValueDescriptorProto.options) + return options_ != NULL ? *options_ : *default_instance_->options_; +} +inline ::google::protobuf::EnumValueOptions* EnumValueDescriptorProto::mutable_options() { + set_has_options(); + if (options_ == NULL) options_ = new ::google::protobuf::EnumValueOptions; + // @@protoc_insertion_point(field_mutable:google.protobuf.EnumValueDescriptorProto.options) + return options_; +} +inline ::google::protobuf::EnumValueOptions* EnumValueDescriptorProto::release_options() { + clear_has_options(); + ::google::protobuf::EnumValueOptions* temp = options_; + options_ = NULL; + return temp; +} +inline void EnumValueDescriptorProto::set_allocated_options(::google::protobuf::EnumValueOptions* options) { + delete options_; + options_ = options; + if (options) { + set_has_options(); + } else { + clear_has_options(); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.EnumValueDescriptorProto.options) +} + +// ------------------------------------------------------------------- + +// ServiceDescriptorProto + +// optional string name = 1; +inline bool ServiceDescriptorProto::has_name() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void ServiceDescriptorProto::set_has_name() { + _has_bits_[0] |= 0x00000001u; +} +inline void ServiceDescriptorProto::clear_has_name() { + _has_bits_[0] &= ~0x00000001u; +} +inline void ServiceDescriptorProto::clear_name() { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_->clear(); + } + clear_has_name(); +} +inline const ::std::string& ServiceDescriptorProto::name() const { + // @@protoc_insertion_point(field_get:google.protobuf.ServiceDescriptorProto.name) + return *name_; +} +inline void ServiceDescriptorProto::set_name(const ::std::string& value) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.ServiceDescriptorProto.name) +} +inline void ServiceDescriptorProto::set_name(const char* value) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.ServiceDescriptorProto.name) +} +inline void ServiceDescriptorProto::set_name(const char* value, size_t size) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.ServiceDescriptorProto.name) +} +inline ::std::string* ServiceDescriptorProto::mutable_name() { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.ServiceDescriptorProto.name) + return name_; +} +inline ::std::string* ServiceDescriptorProto::release_name() { + clear_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = name_; + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void ServiceDescriptorProto::set_allocated_name(::std::string* name) { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete name_; + } + if (name) { + set_has_name(); + name_ = name; + } else { + clear_has_name(); + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.ServiceDescriptorProto.name) +} + +// repeated .google.protobuf.MethodDescriptorProto method = 2; +inline int ServiceDescriptorProto::method_size() const { + return method_.size(); +} +inline void ServiceDescriptorProto::clear_method() { + method_.Clear(); +} +inline const ::google::protobuf::MethodDescriptorProto& ServiceDescriptorProto::method(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.ServiceDescriptorProto.method) + return method_.Get(index); +} +inline ::google::protobuf::MethodDescriptorProto* ServiceDescriptorProto::mutable_method(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.ServiceDescriptorProto.method) + return method_.Mutable(index); +} +inline ::google::protobuf::MethodDescriptorProto* ServiceDescriptorProto::add_method() { + // @@protoc_insertion_point(field_add:google.protobuf.ServiceDescriptorProto.method) + return method_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::MethodDescriptorProto >& +ServiceDescriptorProto::method() const { + // @@protoc_insertion_point(field_list:google.protobuf.ServiceDescriptorProto.method) + return method_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::MethodDescriptorProto >* +ServiceDescriptorProto::mutable_method() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.ServiceDescriptorProto.method) + return &method_; +} + +// optional .google.protobuf.ServiceOptions options = 3; +inline bool ServiceDescriptorProto::has_options() const { + return (_has_bits_[0] & 0x00000004u) != 0; +} +inline void ServiceDescriptorProto::set_has_options() { + _has_bits_[0] |= 0x00000004u; +} +inline void ServiceDescriptorProto::clear_has_options() { + _has_bits_[0] &= ~0x00000004u; +} +inline void ServiceDescriptorProto::clear_options() { + if (options_ != NULL) options_->::google::protobuf::ServiceOptions::Clear(); + clear_has_options(); +} +inline const ::google::protobuf::ServiceOptions& ServiceDescriptorProto::options() const { + // @@protoc_insertion_point(field_get:google.protobuf.ServiceDescriptorProto.options) + return options_ != NULL ? *options_ : *default_instance_->options_; +} +inline ::google::protobuf::ServiceOptions* ServiceDescriptorProto::mutable_options() { + set_has_options(); + if (options_ == NULL) options_ = new ::google::protobuf::ServiceOptions; + // @@protoc_insertion_point(field_mutable:google.protobuf.ServiceDescriptorProto.options) + return options_; +} +inline ::google::protobuf::ServiceOptions* ServiceDescriptorProto::release_options() { + clear_has_options(); + ::google::protobuf::ServiceOptions* temp = options_; + options_ = NULL; + return temp; +} +inline void ServiceDescriptorProto::set_allocated_options(::google::protobuf::ServiceOptions* options) { + delete options_; + options_ = options; + if (options) { + set_has_options(); + } else { + clear_has_options(); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.ServiceDescriptorProto.options) +} + +// ------------------------------------------------------------------- + +// MethodDescriptorProto + +// optional string name = 1; +inline bool MethodDescriptorProto::has_name() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void MethodDescriptorProto::set_has_name() { + _has_bits_[0] |= 0x00000001u; +} +inline void MethodDescriptorProto::clear_has_name() { + _has_bits_[0] &= ~0x00000001u; +} +inline void MethodDescriptorProto::clear_name() { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_->clear(); + } + clear_has_name(); +} +inline const ::std::string& MethodDescriptorProto::name() const { + // @@protoc_insertion_point(field_get:google.protobuf.MethodDescriptorProto.name) + return *name_; +} +inline void MethodDescriptorProto::set_name(const ::std::string& value) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.MethodDescriptorProto.name) +} +inline void MethodDescriptorProto::set_name(const char* value) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.MethodDescriptorProto.name) +} +inline void MethodDescriptorProto::set_name(const char* value, size_t size) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.MethodDescriptorProto.name) +} +inline ::std::string* MethodDescriptorProto::mutable_name() { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.MethodDescriptorProto.name) + return name_; +} +inline ::std::string* MethodDescriptorProto::release_name() { + clear_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = name_; + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void MethodDescriptorProto::set_allocated_name(::std::string* name) { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete name_; + } + if (name) { + set_has_name(); + name_ = name; + } else { + clear_has_name(); + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.MethodDescriptorProto.name) +} + +// optional string input_type = 2; +inline bool MethodDescriptorProto::has_input_type() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void MethodDescriptorProto::set_has_input_type() { + _has_bits_[0] |= 0x00000002u; +} +inline void MethodDescriptorProto::clear_has_input_type() { + _has_bits_[0] &= ~0x00000002u; +} +inline void MethodDescriptorProto::clear_input_type() { + if (input_type_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + input_type_->clear(); + } + clear_has_input_type(); +} +inline const ::std::string& MethodDescriptorProto::input_type() const { + // @@protoc_insertion_point(field_get:google.protobuf.MethodDescriptorProto.input_type) + return *input_type_; +} +inline void MethodDescriptorProto::set_input_type(const ::std::string& value) { + set_has_input_type(); + if (input_type_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + input_type_ = new ::std::string; + } + input_type_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.MethodDescriptorProto.input_type) +} +inline void MethodDescriptorProto::set_input_type(const char* value) { + set_has_input_type(); + if (input_type_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + input_type_ = new ::std::string; + } + input_type_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.MethodDescriptorProto.input_type) +} +inline void MethodDescriptorProto::set_input_type(const char* value, size_t size) { + set_has_input_type(); + if (input_type_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + input_type_ = new ::std::string; + } + input_type_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.MethodDescriptorProto.input_type) +} +inline ::std::string* MethodDescriptorProto::mutable_input_type() { + set_has_input_type(); + if (input_type_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + input_type_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.MethodDescriptorProto.input_type) + return input_type_; +} +inline ::std::string* MethodDescriptorProto::release_input_type() { + clear_has_input_type(); + if (input_type_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = input_type_; + input_type_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void MethodDescriptorProto::set_allocated_input_type(::std::string* input_type) { + if (input_type_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete input_type_; + } + if (input_type) { + set_has_input_type(); + input_type_ = input_type; + } else { + clear_has_input_type(); + input_type_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.MethodDescriptorProto.input_type) +} + +// optional string output_type = 3; +inline bool MethodDescriptorProto::has_output_type() const { + return (_has_bits_[0] & 0x00000004u) != 0; +} +inline void MethodDescriptorProto::set_has_output_type() { + _has_bits_[0] |= 0x00000004u; +} +inline void MethodDescriptorProto::clear_has_output_type() { + _has_bits_[0] &= ~0x00000004u; +} +inline void MethodDescriptorProto::clear_output_type() { + if (output_type_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + output_type_->clear(); + } + clear_has_output_type(); +} +inline const ::std::string& MethodDescriptorProto::output_type() const { + // @@protoc_insertion_point(field_get:google.protobuf.MethodDescriptorProto.output_type) + return *output_type_; +} +inline void MethodDescriptorProto::set_output_type(const ::std::string& value) { + set_has_output_type(); + if (output_type_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + output_type_ = new ::std::string; + } + output_type_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.MethodDescriptorProto.output_type) +} +inline void MethodDescriptorProto::set_output_type(const char* value) { + set_has_output_type(); + if (output_type_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + output_type_ = new ::std::string; + } + output_type_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.MethodDescriptorProto.output_type) +} +inline void MethodDescriptorProto::set_output_type(const char* value, size_t size) { + set_has_output_type(); + if (output_type_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + output_type_ = new ::std::string; + } + output_type_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.MethodDescriptorProto.output_type) +} +inline ::std::string* MethodDescriptorProto::mutable_output_type() { + set_has_output_type(); + if (output_type_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + output_type_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.MethodDescriptorProto.output_type) + return output_type_; +} +inline ::std::string* MethodDescriptorProto::release_output_type() { + clear_has_output_type(); + if (output_type_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = output_type_; + output_type_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void MethodDescriptorProto::set_allocated_output_type(::std::string* output_type) { + if (output_type_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete output_type_; + } + if (output_type) { + set_has_output_type(); + output_type_ = output_type; + } else { + clear_has_output_type(); + output_type_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.MethodDescriptorProto.output_type) +} + +// optional .google.protobuf.MethodOptions options = 4; +inline bool MethodDescriptorProto::has_options() const { + return (_has_bits_[0] & 0x00000008u) != 0; +} +inline void MethodDescriptorProto::set_has_options() { + _has_bits_[0] |= 0x00000008u; +} +inline void MethodDescriptorProto::clear_has_options() { + _has_bits_[0] &= ~0x00000008u; +} +inline void MethodDescriptorProto::clear_options() { + if (options_ != NULL) options_->::google::protobuf::MethodOptions::Clear(); + clear_has_options(); +} +inline const ::google::protobuf::MethodOptions& MethodDescriptorProto::options() const { + // @@protoc_insertion_point(field_get:google.protobuf.MethodDescriptorProto.options) + return options_ != NULL ? *options_ : *default_instance_->options_; +} +inline ::google::protobuf::MethodOptions* MethodDescriptorProto::mutable_options() { + set_has_options(); + if (options_ == NULL) options_ = new ::google::protobuf::MethodOptions; + // @@protoc_insertion_point(field_mutable:google.protobuf.MethodDescriptorProto.options) + return options_; +} +inline ::google::protobuf::MethodOptions* MethodDescriptorProto::release_options() { + clear_has_options(); + ::google::protobuf::MethodOptions* temp = options_; + options_ = NULL; + return temp; +} +inline void MethodDescriptorProto::set_allocated_options(::google::protobuf::MethodOptions* options) { + delete options_; + options_ = options; + if (options) { + set_has_options(); + } else { + clear_has_options(); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.MethodDescriptorProto.options) +} + +// ------------------------------------------------------------------- + +// FileOptions + +// optional string java_package = 1; +inline bool FileOptions::has_java_package() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void FileOptions::set_has_java_package() { + _has_bits_[0] |= 0x00000001u; +} +inline void FileOptions::clear_has_java_package() { + _has_bits_[0] &= ~0x00000001u; +} +inline void FileOptions::clear_java_package() { + if (java_package_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + java_package_->clear(); + } + clear_has_java_package(); +} +inline const ::std::string& FileOptions::java_package() const { + // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.java_package) + return *java_package_; +} +inline void FileOptions::set_java_package(const ::std::string& value) { + set_has_java_package(); + if (java_package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + java_package_ = new ::std::string; + } + java_package_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.java_package) +} +inline void FileOptions::set_java_package(const char* value) { + set_has_java_package(); + if (java_package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + java_package_ = new ::std::string; + } + java_package_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.FileOptions.java_package) +} +inline void FileOptions::set_java_package(const char* value, size_t size) { + set_has_java_package(); + if (java_package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + java_package_ = new ::std::string; + } + java_package_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.FileOptions.java_package) +} +inline ::std::string* FileOptions::mutable_java_package() { + set_has_java_package(); + if (java_package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + java_package_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.FileOptions.java_package) + return java_package_; +} +inline ::std::string* FileOptions::release_java_package() { + clear_has_java_package(); + if (java_package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = java_package_; + java_package_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void FileOptions::set_allocated_java_package(::std::string* java_package) { + if (java_package_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete java_package_; + } + if (java_package) { + set_has_java_package(); + java_package_ = java_package; + } else { + clear_has_java_package(); + java_package_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.FileOptions.java_package) +} + +// optional string java_outer_classname = 8; +inline bool FileOptions::has_java_outer_classname() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void FileOptions::set_has_java_outer_classname() { + _has_bits_[0] |= 0x00000002u; +} +inline void FileOptions::clear_has_java_outer_classname() { + _has_bits_[0] &= ~0x00000002u; +} +inline void FileOptions::clear_java_outer_classname() { + if (java_outer_classname_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + java_outer_classname_->clear(); + } + clear_has_java_outer_classname(); +} +inline const ::std::string& FileOptions::java_outer_classname() const { + // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.java_outer_classname) + return *java_outer_classname_; +} +inline void FileOptions::set_java_outer_classname(const ::std::string& value) { + set_has_java_outer_classname(); + if (java_outer_classname_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + java_outer_classname_ = new ::std::string; + } + java_outer_classname_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.java_outer_classname) +} +inline void FileOptions::set_java_outer_classname(const char* value) { + set_has_java_outer_classname(); + if (java_outer_classname_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + java_outer_classname_ = new ::std::string; + } + java_outer_classname_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.FileOptions.java_outer_classname) +} +inline void FileOptions::set_java_outer_classname(const char* value, size_t size) { + set_has_java_outer_classname(); + if (java_outer_classname_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + java_outer_classname_ = new ::std::string; + } + java_outer_classname_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.FileOptions.java_outer_classname) +} +inline ::std::string* FileOptions::mutable_java_outer_classname() { + set_has_java_outer_classname(); + if (java_outer_classname_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + java_outer_classname_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.FileOptions.java_outer_classname) + return java_outer_classname_; +} +inline ::std::string* FileOptions::release_java_outer_classname() { + clear_has_java_outer_classname(); + if (java_outer_classname_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = java_outer_classname_; + java_outer_classname_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void FileOptions::set_allocated_java_outer_classname(::std::string* java_outer_classname) { + if (java_outer_classname_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete java_outer_classname_; + } + if (java_outer_classname) { + set_has_java_outer_classname(); + java_outer_classname_ = java_outer_classname; + } else { + clear_has_java_outer_classname(); + java_outer_classname_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.FileOptions.java_outer_classname) +} + +// optional bool java_multiple_files = 10 [default = false]; +inline bool FileOptions::has_java_multiple_files() const { + return (_has_bits_[0] & 0x00000004u) != 0; +} +inline void FileOptions::set_has_java_multiple_files() { + _has_bits_[0] |= 0x00000004u; +} +inline void FileOptions::clear_has_java_multiple_files() { + _has_bits_[0] &= ~0x00000004u; +} +inline void FileOptions::clear_java_multiple_files() { + java_multiple_files_ = false; + clear_has_java_multiple_files(); +} +inline bool FileOptions::java_multiple_files() const { + // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.java_multiple_files) + return java_multiple_files_; +} +inline void FileOptions::set_java_multiple_files(bool value) { + set_has_java_multiple_files(); + java_multiple_files_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.java_multiple_files) +} + +// optional bool java_generate_equals_and_hash = 20 [default = false]; +inline bool FileOptions::has_java_generate_equals_and_hash() const { + return (_has_bits_[0] & 0x00000008u) != 0; +} +inline void FileOptions::set_has_java_generate_equals_and_hash() { + _has_bits_[0] |= 0x00000008u; +} +inline void FileOptions::clear_has_java_generate_equals_and_hash() { + _has_bits_[0] &= ~0x00000008u; +} +inline void FileOptions::clear_java_generate_equals_and_hash() { + java_generate_equals_and_hash_ = false; + clear_has_java_generate_equals_and_hash(); +} +inline bool FileOptions::java_generate_equals_and_hash() const { + // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.java_generate_equals_and_hash) + return java_generate_equals_and_hash_; +} +inline void FileOptions::set_java_generate_equals_and_hash(bool value) { + set_has_java_generate_equals_and_hash(); + java_generate_equals_and_hash_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.java_generate_equals_and_hash) +} + +// optional bool java_string_check_utf8 = 27 [default = false]; +inline bool FileOptions::has_java_string_check_utf8() const { + return (_has_bits_[0] & 0x00000010u) != 0; +} +inline void FileOptions::set_has_java_string_check_utf8() { + _has_bits_[0] |= 0x00000010u; +} +inline void FileOptions::clear_has_java_string_check_utf8() { + _has_bits_[0] &= ~0x00000010u; +} +inline void FileOptions::clear_java_string_check_utf8() { + java_string_check_utf8_ = false; + clear_has_java_string_check_utf8(); +} +inline bool FileOptions::java_string_check_utf8() const { + // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.java_string_check_utf8) + return java_string_check_utf8_; +} +inline void FileOptions::set_java_string_check_utf8(bool value) { + set_has_java_string_check_utf8(); + java_string_check_utf8_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.java_string_check_utf8) +} + +// optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED]; +inline bool FileOptions::has_optimize_for() const { + return (_has_bits_[0] & 0x00000020u) != 0; +} +inline void FileOptions::set_has_optimize_for() { + _has_bits_[0] |= 0x00000020u; +} +inline void FileOptions::clear_has_optimize_for() { + _has_bits_[0] &= ~0x00000020u; +} +inline void FileOptions::clear_optimize_for() { + optimize_for_ = 1; + clear_has_optimize_for(); +} +inline ::google::protobuf::FileOptions_OptimizeMode FileOptions::optimize_for() const { + // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.optimize_for) + return static_cast< ::google::protobuf::FileOptions_OptimizeMode >(optimize_for_); +} +inline void FileOptions::set_optimize_for(::google::protobuf::FileOptions_OptimizeMode value) { + assert(::google::protobuf::FileOptions_OptimizeMode_IsValid(value)); + set_has_optimize_for(); + optimize_for_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.optimize_for) +} + +// optional string go_package = 11; +inline bool FileOptions::has_go_package() const { + return (_has_bits_[0] & 0x00000040u) != 0; +} +inline void FileOptions::set_has_go_package() { + _has_bits_[0] |= 0x00000040u; +} +inline void FileOptions::clear_has_go_package() { + _has_bits_[0] &= ~0x00000040u; +} +inline void FileOptions::clear_go_package() { + if (go_package_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + go_package_->clear(); + } + clear_has_go_package(); +} +inline const ::std::string& FileOptions::go_package() const { + // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.go_package) + return *go_package_; +} +inline void FileOptions::set_go_package(const ::std::string& value) { + set_has_go_package(); + if (go_package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + go_package_ = new ::std::string; + } + go_package_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.go_package) +} +inline void FileOptions::set_go_package(const char* value) { + set_has_go_package(); + if (go_package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + go_package_ = new ::std::string; + } + go_package_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.FileOptions.go_package) +} +inline void FileOptions::set_go_package(const char* value, size_t size) { + set_has_go_package(); + if (go_package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + go_package_ = new ::std::string; + } + go_package_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.FileOptions.go_package) +} +inline ::std::string* FileOptions::mutable_go_package() { + set_has_go_package(); + if (go_package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + go_package_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.FileOptions.go_package) + return go_package_; +} +inline ::std::string* FileOptions::release_go_package() { + clear_has_go_package(); + if (go_package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = go_package_; + go_package_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void FileOptions::set_allocated_go_package(::std::string* go_package) { + if (go_package_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete go_package_; + } + if (go_package) { + set_has_go_package(); + go_package_ = go_package; + } else { + clear_has_go_package(); + go_package_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.FileOptions.go_package) +} + +// optional bool cc_generic_services = 16 [default = false]; +inline bool FileOptions::has_cc_generic_services() const { + return (_has_bits_[0] & 0x00000080u) != 0; +} +inline void FileOptions::set_has_cc_generic_services() { + _has_bits_[0] |= 0x00000080u; +} +inline void FileOptions::clear_has_cc_generic_services() { + _has_bits_[0] &= ~0x00000080u; +} +inline void FileOptions::clear_cc_generic_services() { + cc_generic_services_ = false; + clear_has_cc_generic_services(); +} +inline bool FileOptions::cc_generic_services() const { + // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.cc_generic_services) + return cc_generic_services_; +} +inline void FileOptions::set_cc_generic_services(bool value) { + set_has_cc_generic_services(); + cc_generic_services_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.cc_generic_services) +} + +// optional bool java_generic_services = 17 [default = false]; +inline bool FileOptions::has_java_generic_services() const { + return (_has_bits_[0] & 0x00000100u) != 0; +} +inline void FileOptions::set_has_java_generic_services() { + _has_bits_[0] |= 0x00000100u; +} +inline void FileOptions::clear_has_java_generic_services() { + _has_bits_[0] &= ~0x00000100u; +} +inline void FileOptions::clear_java_generic_services() { + java_generic_services_ = false; + clear_has_java_generic_services(); +} +inline bool FileOptions::java_generic_services() const { + // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.java_generic_services) + return java_generic_services_; +} +inline void FileOptions::set_java_generic_services(bool value) { + set_has_java_generic_services(); + java_generic_services_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.java_generic_services) +} + +// optional bool py_generic_services = 18 [default = false]; +inline bool FileOptions::has_py_generic_services() const { + return (_has_bits_[0] & 0x00000200u) != 0; +} +inline void FileOptions::set_has_py_generic_services() { + _has_bits_[0] |= 0x00000200u; +} +inline void FileOptions::clear_has_py_generic_services() { + _has_bits_[0] &= ~0x00000200u; +} +inline void FileOptions::clear_py_generic_services() { + py_generic_services_ = false; + clear_has_py_generic_services(); +} +inline bool FileOptions::py_generic_services() const { + // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.py_generic_services) + return py_generic_services_; +} +inline void FileOptions::set_py_generic_services(bool value) { + set_has_py_generic_services(); + py_generic_services_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.py_generic_services) +} + +// optional bool deprecated = 23 [default = false]; +inline bool FileOptions::has_deprecated() const { + return (_has_bits_[0] & 0x00000400u) != 0; +} +inline void FileOptions::set_has_deprecated() { + _has_bits_[0] |= 0x00000400u; +} +inline void FileOptions::clear_has_deprecated() { + _has_bits_[0] &= ~0x00000400u; +} +inline void FileOptions::clear_deprecated() { + deprecated_ = false; + clear_has_deprecated(); +} +inline bool FileOptions::deprecated() const { + // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.deprecated) + return deprecated_; +} +inline void FileOptions::set_deprecated(bool value) { + set_has_deprecated(); + deprecated_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.FileOptions.deprecated) +} + +// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; +inline int FileOptions::uninterpreted_option_size() const { + return uninterpreted_option_.size(); +} +inline void FileOptions::clear_uninterpreted_option() { + uninterpreted_option_.Clear(); +} +inline const ::google::protobuf::UninterpretedOption& FileOptions::uninterpreted_option(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.uninterpreted_option) + return uninterpreted_option_.Get(index); +} +inline ::google::protobuf::UninterpretedOption* FileOptions::mutable_uninterpreted_option(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.FileOptions.uninterpreted_option) + return uninterpreted_option_.Mutable(index); +} +inline ::google::protobuf::UninterpretedOption* FileOptions::add_uninterpreted_option() { + // @@protoc_insertion_point(field_add:google.protobuf.FileOptions.uninterpreted_option) + return uninterpreted_option_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >& +FileOptions::uninterpreted_option() const { + // @@protoc_insertion_point(field_list:google.protobuf.FileOptions.uninterpreted_option) + return uninterpreted_option_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >* +FileOptions::mutable_uninterpreted_option() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.FileOptions.uninterpreted_option) + return &uninterpreted_option_; +} + +// ------------------------------------------------------------------- + +// MessageOptions + +// optional bool message_set_wire_format = 1 [default = false]; +inline bool MessageOptions::has_message_set_wire_format() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void MessageOptions::set_has_message_set_wire_format() { + _has_bits_[0] |= 0x00000001u; +} +inline void MessageOptions::clear_has_message_set_wire_format() { + _has_bits_[0] &= ~0x00000001u; +} +inline void MessageOptions::clear_message_set_wire_format() { + message_set_wire_format_ = false; + clear_has_message_set_wire_format(); +} +inline bool MessageOptions::message_set_wire_format() const { + // @@protoc_insertion_point(field_get:google.protobuf.MessageOptions.message_set_wire_format) + return message_set_wire_format_; +} +inline void MessageOptions::set_message_set_wire_format(bool value) { + set_has_message_set_wire_format(); + message_set_wire_format_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.MessageOptions.message_set_wire_format) +} + +// optional bool no_standard_descriptor_accessor = 2 [default = false]; +inline bool MessageOptions::has_no_standard_descriptor_accessor() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void MessageOptions::set_has_no_standard_descriptor_accessor() { + _has_bits_[0] |= 0x00000002u; +} +inline void MessageOptions::clear_has_no_standard_descriptor_accessor() { + _has_bits_[0] &= ~0x00000002u; +} +inline void MessageOptions::clear_no_standard_descriptor_accessor() { + no_standard_descriptor_accessor_ = false; + clear_has_no_standard_descriptor_accessor(); +} +inline bool MessageOptions::no_standard_descriptor_accessor() const { + // @@protoc_insertion_point(field_get:google.protobuf.MessageOptions.no_standard_descriptor_accessor) + return no_standard_descriptor_accessor_; +} +inline void MessageOptions::set_no_standard_descriptor_accessor(bool value) { + set_has_no_standard_descriptor_accessor(); + no_standard_descriptor_accessor_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.MessageOptions.no_standard_descriptor_accessor) +} + +// optional bool deprecated = 3 [default = false]; +inline bool MessageOptions::has_deprecated() const { + return (_has_bits_[0] & 0x00000004u) != 0; +} +inline void MessageOptions::set_has_deprecated() { + _has_bits_[0] |= 0x00000004u; +} +inline void MessageOptions::clear_has_deprecated() { + _has_bits_[0] &= ~0x00000004u; +} +inline void MessageOptions::clear_deprecated() { + deprecated_ = false; + clear_has_deprecated(); +} +inline bool MessageOptions::deprecated() const { + // @@protoc_insertion_point(field_get:google.protobuf.MessageOptions.deprecated) + return deprecated_; +} +inline void MessageOptions::set_deprecated(bool value) { + set_has_deprecated(); + deprecated_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.MessageOptions.deprecated) +} + +// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; +inline int MessageOptions::uninterpreted_option_size() const { + return uninterpreted_option_.size(); +} +inline void MessageOptions::clear_uninterpreted_option() { + uninterpreted_option_.Clear(); +} +inline const ::google::protobuf::UninterpretedOption& MessageOptions::uninterpreted_option(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.MessageOptions.uninterpreted_option) + return uninterpreted_option_.Get(index); +} +inline ::google::protobuf::UninterpretedOption* MessageOptions::mutable_uninterpreted_option(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.MessageOptions.uninterpreted_option) + return uninterpreted_option_.Mutable(index); +} +inline ::google::protobuf::UninterpretedOption* MessageOptions::add_uninterpreted_option() { + // @@protoc_insertion_point(field_add:google.protobuf.MessageOptions.uninterpreted_option) + return uninterpreted_option_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >& +MessageOptions::uninterpreted_option() const { + // @@protoc_insertion_point(field_list:google.protobuf.MessageOptions.uninterpreted_option) + return uninterpreted_option_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >* +MessageOptions::mutable_uninterpreted_option() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.MessageOptions.uninterpreted_option) + return &uninterpreted_option_; +} + +// ------------------------------------------------------------------- + +// FieldOptions + +// optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING]; +inline bool FieldOptions::has_ctype() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void FieldOptions::set_has_ctype() { + _has_bits_[0] |= 0x00000001u; +} +inline void FieldOptions::clear_has_ctype() { + _has_bits_[0] &= ~0x00000001u; +} +inline void FieldOptions::clear_ctype() { + ctype_ = 0; + clear_has_ctype(); +} +inline ::google::protobuf::FieldOptions_CType FieldOptions::ctype() const { + // @@protoc_insertion_point(field_get:google.protobuf.FieldOptions.ctype) + return static_cast< ::google::protobuf::FieldOptions_CType >(ctype_); +} +inline void FieldOptions::set_ctype(::google::protobuf::FieldOptions_CType value) { + assert(::google::protobuf::FieldOptions_CType_IsValid(value)); + set_has_ctype(); + ctype_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.ctype) +} + +// optional bool packed = 2; +inline bool FieldOptions::has_packed() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void FieldOptions::set_has_packed() { + _has_bits_[0] |= 0x00000002u; +} +inline void FieldOptions::clear_has_packed() { + _has_bits_[0] &= ~0x00000002u; +} +inline void FieldOptions::clear_packed() { + packed_ = false; + clear_has_packed(); +} +inline bool FieldOptions::packed() const { + // @@protoc_insertion_point(field_get:google.protobuf.FieldOptions.packed) + return packed_; +} +inline void FieldOptions::set_packed(bool value) { + set_has_packed(); + packed_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.packed) +} + +// optional bool lazy = 5 [default = false]; +inline bool FieldOptions::has_lazy() const { + return (_has_bits_[0] & 0x00000004u) != 0; +} +inline void FieldOptions::set_has_lazy() { + _has_bits_[0] |= 0x00000004u; +} +inline void FieldOptions::clear_has_lazy() { + _has_bits_[0] &= ~0x00000004u; +} +inline void FieldOptions::clear_lazy() { + lazy_ = false; + clear_has_lazy(); +} +inline bool FieldOptions::lazy() const { + // @@protoc_insertion_point(field_get:google.protobuf.FieldOptions.lazy) + return lazy_; +} +inline void FieldOptions::set_lazy(bool value) { + set_has_lazy(); + lazy_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.lazy) +} + +// optional bool deprecated = 3 [default = false]; +inline bool FieldOptions::has_deprecated() const { + return (_has_bits_[0] & 0x00000008u) != 0; +} +inline void FieldOptions::set_has_deprecated() { + _has_bits_[0] |= 0x00000008u; +} +inline void FieldOptions::clear_has_deprecated() { + _has_bits_[0] &= ~0x00000008u; +} +inline void FieldOptions::clear_deprecated() { + deprecated_ = false; + clear_has_deprecated(); +} +inline bool FieldOptions::deprecated() const { + // @@protoc_insertion_point(field_get:google.protobuf.FieldOptions.deprecated) + return deprecated_; +} +inline void FieldOptions::set_deprecated(bool value) { + set_has_deprecated(); + deprecated_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.deprecated) +} + +// optional string experimental_map_key = 9; +inline bool FieldOptions::has_experimental_map_key() const { + return (_has_bits_[0] & 0x00000010u) != 0; +} +inline void FieldOptions::set_has_experimental_map_key() { + _has_bits_[0] |= 0x00000010u; +} +inline void FieldOptions::clear_has_experimental_map_key() { + _has_bits_[0] &= ~0x00000010u; +} +inline void FieldOptions::clear_experimental_map_key() { + if (experimental_map_key_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + experimental_map_key_->clear(); + } + clear_has_experimental_map_key(); +} +inline const ::std::string& FieldOptions::experimental_map_key() const { + // @@protoc_insertion_point(field_get:google.protobuf.FieldOptions.experimental_map_key) + return *experimental_map_key_; +} +inline void FieldOptions::set_experimental_map_key(const ::std::string& value) { + set_has_experimental_map_key(); + if (experimental_map_key_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + experimental_map_key_ = new ::std::string; + } + experimental_map_key_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.experimental_map_key) +} +inline void FieldOptions::set_experimental_map_key(const char* value) { + set_has_experimental_map_key(); + if (experimental_map_key_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + experimental_map_key_ = new ::std::string; + } + experimental_map_key_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.FieldOptions.experimental_map_key) +} +inline void FieldOptions::set_experimental_map_key(const char* value, size_t size) { + set_has_experimental_map_key(); + if (experimental_map_key_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + experimental_map_key_ = new ::std::string; + } + experimental_map_key_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.FieldOptions.experimental_map_key) +} +inline ::std::string* FieldOptions::mutable_experimental_map_key() { + set_has_experimental_map_key(); + if (experimental_map_key_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + experimental_map_key_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.FieldOptions.experimental_map_key) + return experimental_map_key_; +} +inline ::std::string* FieldOptions::release_experimental_map_key() { + clear_has_experimental_map_key(); + if (experimental_map_key_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = experimental_map_key_; + experimental_map_key_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void FieldOptions::set_allocated_experimental_map_key(::std::string* experimental_map_key) { + if (experimental_map_key_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete experimental_map_key_; + } + if (experimental_map_key) { + set_has_experimental_map_key(); + experimental_map_key_ = experimental_map_key; + } else { + clear_has_experimental_map_key(); + experimental_map_key_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.FieldOptions.experimental_map_key) +} + +// optional bool weak = 10 [default = false]; +inline bool FieldOptions::has_weak() const { + return (_has_bits_[0] & 0x00000020u) != 0; +} +inline void FieldOptions::set_has_weak() { + _has_bits_[0] |= 0x00000020u; +} +inline void FieldOptions::clear_has_weak() { + _has_bits_[0] &= ~0x00000020u; +} +inline void FieldOptions::clear_weak() { + weak_ = false; + clear_has_weak(); +} +inline bool FieldOptions::weak() const { + // @@protoc_insertion_point(field_get:google.protobuf.FieldOptions.weak) + return weak_; +} +inline void FieldOptions::set_weak(bool value) { + set_has_weak(); + weak_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.FieldOptions.weak) +} + +// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; +inline int FieldOptions::uninterpreted_option_size() const { + return uninterpreted_option_.size(); +} +inline void FieldOptions::clear_uninterpreted_option() { + uninterpreted_option_.Clear(); +} +inline const ::google::protobuf::UninterpretedOption& FieldOptions::uninterpreted_option(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.FieldOptions.uninterpreted_option) + return uninterpreted_option_.Get(index); +} +inline ::google::protobuf::UninterpretedOption* FieldOptions::mutable_uninterpreted_option(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.FieldOptions.uninterpreted_option) + return uninterpreted_option_.Mutable(index); +} +inline ::google::protobuf::UninterpretedOption* FieldOptions::add_uninterpreted_option() { + // @@protoc_insertion_point(field_add:google.protobuf.FieldOptions.uninterpreted_option) + return uninterpreted_option_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >& +FieldOptions::uninterpreted_option() const { + // @@protoc_insertion_point(field_list:google.protobuf.FieldOptions.uninterpreted_option) + return uninterpreted_option_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >* +FieldOptions::mutable_uninterpreted_option() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.FieldOptions.uninterpreted_option) + return &uninterpreted_option_; +} + +// ------------------------------------------------------------------- + +// EnumOptions + +// optional bool allow_alias = 2; +inline bool EnumOptions::has_allow_alias() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void EnumOptions::set_has_allow_alias() { + _has_bits_[0] |= 0x00000001u; +} +inline void EnumOptions::clear_has_allow_alias() { + _has_bits_[0] &= ~0x00000001u; +} +inline void EnumOptions::clear_allow_alias() { + allow_alias_ = false; + clear_has_allow_alias(); +} +inline bool EnumOptions::allow_alias() const { + // @@protoc_insertion_point(field_get:google.protobuf.EnumOptions.allow_alias) + return allow_alias_; +} +inline void EnumOptions::set_allow_alias(bool value) { + set_has_allow_alias(); + allow_alias_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.EnumOptions.allow_alias) +} + +// optional bool deprecated = 3 [default = false]; +inline bool EnumOptions::has_deprecated() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void EnumOptions::set_has_deprecated() { + _has_bits_[0] |= 0x00000002u; +} +inline void EnumOptions::clear_has_deprecated() { + _has_bits_[0] &= ~0x00000002u; +} +inline void EnumOptions::clear_deprecated() { + deprecated_ = false; + clear_has_deprecated(); +} +inline bool EnumOptions::deprecated() const { + // @@protoc_insertion_point(field_get:google.protobuf.EnumOptions.deprecated) + return deprecated_; +} +inline void EnumOptions::set_deprecated(bool value) { + set_has_deprecated(); + deprecated_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.EnumOptions.deprecated) +} + +// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; +inline int EnumOptions::uninterpreted_option_size() const { + return uninterpreted_option_.size(); +} +inline void EnumOptions::clear_uninterpreted_option() { + uninterpreted_option_.Clear(); +} +inline const ::google::protobuf::UninterpretedOption& EnumOptions::uninterpreted_option(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.EnumOptions.uninterpreted_option) + return uninterpreted_option_.Get(index); +} +inline ::google::protobuf::UninterpretedOption* EnumOptions::mutable_uninterpreted_option(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.EnumOptions.uninterpreted_option) + return uninterpreted_option_.Mutable(index); +} +inline ::google::protobuf::UninterpretedOption* EnumOptions::add_uninterpreted_option() { + // @@protoc_insertion_point(field_add:google.protobuf.EnumOptions.uninterpreted_option) + return uninterpreted_option_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >& +EnumOptions::uninterpreted_option() const { + // @@protoc_insertion_point(field_list:google.protobuf.EnumOptions.uninterpreted_option) + return uninterpreted_option_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >* +EnumOptions::mutable_uninterpreted_option() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.EnumOptions.uninterpreted_option) + return &uninterpreted_option_; +} + +// ------------------------------------------------------------------- + +// EnumValueOptions + +// optional bool deprecated = 1 [default = false]; +inline bool EnumValueOptions::has_deprecated() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void EnumValueOptions::set_has_deprecated() { + _has_bits_[0] |= 0x00000001u; +} +inline void EnumValueOptions::clear_has_deprecated() { + _has_bits_[0] &= ~0x00000001u; +} +inline void EnumValueOptions::clear_deprecated() { + deprecated_ = false; + clear_has_deprecated(); +} +inline bool EnumValueOptions::deprecated() const { + // @@protoc_insertion_point(field_get:google.protobuf.EnumValueOptions.deprecated) + return deprecated_; +} +inline void EnumValueOptions::set_deprecated(bool value) { + set_has_deprecated(); + deprecated_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.EnumValueOptions.deprecated) +} + +// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; +inline int EnumValueOptions::uninterpreted_option_size() const { + return uninterpreted_option_.size(); +} +inline void EnumValueOptions::clear_uninterpreted_option() { + uninterpreted_option_.Clear(); +} +inline const ::google::protobuf::UninterpretedOption& EnumValueOptions::uninterpreted_option(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.EnumValueOptions.uninterpreted_option) + return uninterpreted_option_.Get(index); +} +inline ::google::protobuf::UninterpretedOption* EnumValueOptions::mutable_uninterpreted_option(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.EnumValueOptions.uninterpreted_option) + return uninterpreted_option_.Mutable(index); +} +inline ::google::protobuf::UninterpretedOption* EnumValueOptions::add_uninterpreted_option() { + // @@protoc_insertion_point(field_add:google.protobuf.EnumValueOptions.uninterpreted_option) + return uninterpreted_option_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >& +EnumValueOptions::uninterpreted_option() const { + // @@protoc_insertion_point(field_list:google.protobuf.EnumValueOptions.uninterpreted_option) + return uninterpreted_option_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >* +EnumValueOptions::mutable_uninterpreted_option() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.EnumValueOptions.uninterpreted_option) + return &uninterpreted_option_; +} + +// ------------------------------------------------------------------- + +// ServiceOptions + +// optional bool deprecated = 33 [default = false]; +inline bool ServiceOptions::has_deprecated() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void ServiceOptions::set_has_deprecated() { + _has_bits_[0] |= 0x00000001u; +} +inline void ServiceOptions::clear_has_deprecated() { + _has_bits_[0] &= ~0x00000001u; +} +inline void ServiceOptions::clear_deprecated() { + deprecated_ = false; + clear_has_deprecated(); +} +inline bool ServiceOptions::deprecated() const { + // @@protoc_insertion_point(field_get:google.protobuf.ServiceOptions.deprecated) + return deprecated_; +} +inline void ServiceOptions::set_deprecated(bool value) { + set_has_deprecated(); + deprecated_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.ServiceOptions.deprecated) +} + +// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; +inline int ServiceOptions::uninterpreted_option_size() const { + return uninterpreted_option_.size(); +} +inline void ServiceOptions::clear_uninterpreted_option() { + uninterpreted_option_.Clear(); +} +inline const ::google::protobuf::UninterpretedOption& ServiceOptions::uninterpreted_option(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.ServiceOptions.uninterpreted_option) + return uninterpreted_option_.Get(index); +} +inline ::google::protobuf::UninterpretedOption* ServiceOptions::mutable_uninterpreted_option(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.ServiceOptions.uninterpreted_option) + return uninterpreted_option_.Mutable(index); +} +inline ::google::protobuf::UninterpretedOption* ServiceOptions::add_uninterpreted_option() { + // @@protoc_insertion_point(field_add:google.protobuf.ServiceOptions.uninterpreted_option) + return uninterpreted_option_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >& +ServiceOptions::uninterpreted_option() const { + // @@protoc_insertion_point(field_list:google.protobuf.ServiceOptions.uninterpreted_option) + return uninterpreted_option_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >* +ServiceOptions::mutable_uninterpreted_option() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.ServiceOptions.uninterpreted_option) + return &uninterpreted_option_; +} + +// ------------------------------------------------------------------- + +// MethodOptions + +// optional bool deprecated = 33 [default = false]; +inline bool MethodOptions::has_deprecated() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void MethodOptions::set_has_deprecated() { + _has_bits_[0] |= 0x00000001u; +} +inline void MethodOptions::clear_has_deprecated() { + _has_bits_[0] &= ~0x00000001u; +} +inline void MethodOptions::clear_deprecated() { + deprecated_ = false; + clear_has_deprecated(); +} +inline bool MethodOptions::deprecated() const { + // @@protoc_insertion_point(field_get:google.protobuf.MethodOptions.deprecated) + return deprecated_; +} +inline void MethodOptions::set_deprecated(bool value) { + set_has_deprecated(); + deprecated_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.MethodOptions.deprecated) +} + +// repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; +inline int MethodOptions::uninterpreted_option_size() const { + return uninterpreted_option_.size(); +} +inline void MethodOptions::clear_uninterpreted_option() { + uninterpreted_option_.Clear(); +} +inline const ::google::protobuf::UninterpretedOption& MethodOptions::uninterpreted_option(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.MethodOptions.uninterpreted_option) + return uninterpreted_option_.Get(index); +} +inline ::google::protobuf::UninterpretedOption* MethodOptions::mutable_uninterpreted_option(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.MethodOptions.uninterpreted_option) + return uninterpreted_option_.Mutable(index); +} +inline ::google::protobuf::UninterpretedOption* MethodOptions::add_uninterpreted_option() { + // @@protoc_insertion_point(field_add:google.protobuf.MethodOptions.uninterpreted_option) + return uninterpreted_option_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >& +MethodOptions::uninterpreted_option() const { + // @@protoc_insertion_point(field_list:google.protobuf.MethodOptions.uninterpreted_option) + return uninterpreted_option_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption >* +MethodOptions::mutable_uninterpreted_option() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.MethodOptions.uninterpreted_option) + return &uninterpreted_option_; +} + +// ------------------------------------------------------------------- + +// UninterpretedOption_NamePart + +// required string name_part = 1; +inline bool UninterpretedOption_NamePart::has_name_part() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void UninterpretedOption_NamePart::set_has_name_part() { + _has_bits_[0] |= 0x00000001u; +} +inline void UninterpretedOption_NamePart::clear_has_name_part() { + _has_bits_[0] &= ~0x00000001u; +} +inline void UninterpretedOption_NamePart::clear_name_part() { + if (name_part_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_part_->clear(); + } + clear_has_name_part(); +} +inline const ::std::string& UninterpretedOption_NamePart::name_part() const { + // @@protoc_insertion_point(field_get:google.protobuf.UninterpretedOption.NamePart.name_part) + return *name_part_; +} +inline void UninterpretedOption_NamePart::set_name_part(const ::std::string& value) { + set_has_name_part(); + if (name_part_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_part_ = new ::std::string; + } + name_part_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.UninterpretedOption.NamePart.name_part) +} +inline void UninterpretedOption_NamePart::set_name_part(const char* value) { + set_has_name_part(); + if (name_part_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_part_ = new ::std::string; + } + name_part_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.UninterpretedOption.NamePart.name_part) +} +inline void UninterpretedOption_NamePart::set_name_part(const char* value, size_t size) { + set_has_name_part(); + if (name_part_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_part_ = new ::std::string; + } + name_part_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.UninterpretedOption.NamePart.name_part) +} +inline ::std::string* UninterpretedOption_NamePart::mutable_name_part() { + set_has_name_part(); + if (name_part_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_part_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.UninterpretedOption.NamePart.name_part) + return name_part_; +} +inline ::std::string* UninterpretedOption_NamePart::release_name_part() { + clear_has_name_part(); + if (name_part_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = name_part_; + name_part_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void UninterpretedOption_NamePart::set_allocated_name_part(::std::string* name_part) { + if (name_part_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete name_part_; + } + if (name_part) { + set_has_name_part(); + name_part_ = name_part; + } else { + clear_has_name_part(); + name_part_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.UninterpretedOption.NamePart.name_part) +} + +// required bool is_extension = 2; +inline bool UninterpretedOption_NamePart::has_is_extension() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void UninterpretedOption_NamePart::set_has_is_extension() { + _has_bits_[0] |= 0x00000002u; +} +inline void UninterpretedOption_NamePart::clear_has_is_extension() { + _has_bits_[0] &= ~0x00000002u; +} +inline void UninterpretedOption_NamePart::clear_is_extension() { + is_extension_ = false; + clear_has_is_extension(); +} +inline bool UninterpretedOption_NamePart::is_extension() const { + // @@protoc_insertion_point(field_get:google.protobuf.UninterpretedOption.NamePart.is_extension) + return is_extension_; +} +inline void UninterpretedOption_NamePart::set_is_extension(bool value) { + set_has_is_extension(); + is_extension_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.UninterpretedOption.NamePart.is_extension) +} + +// ------------------------------------------------------------------- + +// UninterpretedOption + +// repeated .google.protobuf.UninterpretedOption.NamePart name = 2; +inline int UninterpretedOption::name_size() const { + return name_.size(); +} +inline void UninterpretedOption::clear_name() { + name_.Clear(); +} +inline const ::google::protobuf::UninterpretedOption_NamePart& UninterpretedOption::name(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.UninterpretedOption.name) + return name_.Get(index); +} +inline ::google::protobuf::UninterpretedOption_NamePart* UninterpretedOption::mutable_name(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.UninterpretedOption.name) + return name_.Mutable(index); +} +inline ::google::protobuf::UninterpretedOption_NamePart* UninterpretedOption::add_name() { + // @@protoc_insertion_point(field_add:google.protobuf.UninterpretedOption.name) + return name_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption_NamePart >& +UninterpretedOption::name() const { + // @@protoc_insertion_point(field_list:google.protobuf.UninterpretedOption.name) + return name_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::UninterpretedOption_NamePart >* +UninterpretedOption::mutable_name() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.UninterpretedOption.name) + return &name_; +} + +// optional string identifier_value = 3; +inline bool UninterpretedOption::has_identifier_value() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void UninterpretedOption::set_has_identifier_value() { + _has_bits_[0] |= 0x00000002u; +} +inline void UninterpretedOption::clear_has_identifier_value() { + _has_bits_[0] &= ~0x00000002u; +} +inline void UninterpretedOption::clear_identifier_value() { + if (identifier_value_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + identifier_value_->clear(); + } + clear_has_identifier_value(); +} +inline const ::std::string& UninterpretedOption::identifier_value() const { + // @@protoc_insertion_point(field_get:google.protobuf.UninterpretedOption.identifier_value) + return *identifier_value_; +} +inline void UninterpretedOption::set_identifier_value(const ::std::string& value) { + set_has_identifier_value(); + if (identifier_value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + identifier_value_ = new ::std::string; + } + identifier_value_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.UninterpretedOption.identifier_value) +} +inline void UninterpretedOption::set_identifier_value(const char* value) { + set_has_identifier_value(); + if (identifier_value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + identifier_value_ = new ::std::string; + } + identifier_value_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.UninterpretedOption.identifier_value) +} +inline void UninterpretedOption::set_identifier_value(const char* value, size_t size) { + set_has_identifier_value(); + if (identifier_value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + identifier_value_ = new ::std::string; + } + identifier_value_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.UninterpretedOption.identifier_value) +} +inline ::std::string* UninterpretedOption::mutable_identifier_value() { + set_has_identifier_value(); + if (identifier_value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + identifier_value_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.UninterpretedOption.identifier_value) + return identifier_value_; +} +inline ::std::string* UninterpretedOption::release_identifier_value() { + clear_has_identifier_value(); + if (identifier_value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = identifier_value_; + identifier_value_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void UninterpretedOption::set_allocated_identifier_value(::std::string* identifier_value) { + if (identifier_value_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete identifier_value_; + } + if (identifier_value) { + set_has_identifier_value(); + identifier_value_ = identifier_value; + } else { + clear_has_identifier_value(); + identifier_value_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.UninterpretedOption.identifier_value) +} + +// optional uint64 positive_int_value = 4; +inline bool UninterpretedOption::has_positive_int_value() const { + return (_has_bits_[0] & 0x00000004u) != 0; +} +inline void UninterpretedOption::set_has_positive_int_value() { + _has_bits_[0] |= 0x00000004u; +} +inline void UninterpretedOption::clear_has_positive_int_value() { + _has_bits_[0] &= ~0x00000004u; +} +inline void UninterpretedOption::clear_positive_int_value() { + positive_int_value_ = GOOGLE_ULONGLONG(0); + clear_has_positive_int_value(); +} +inline ::google::protobuf::uint64 UninterpretedOption::positive_int_value() const { + // @@protoc_insertion_point(field_get:google.protobuf.UninterpretedOption.positive_int_value) + return positive_int_value_; +} +inline void UninterpretedOption::set_positive_int_value(::google::protobuf::uint64 value) { + set_has_positive_int_value(); + positive_int_value_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.UninterpretedOption.positive_int_value) +} + +// optional int64 negative_int_value = 5; +inline bool UninterpretedOption::has_negative_int_value() const { + return (_has_bits_[0] & 0x00000008u) != 0; +} +inline void UninterpretedOption::set_has_negative_int_value() { + _has_bits_[0] |= 0x00000008u; +} +inline void UninterpretedOption::clear_has_negative_int_value() { + _has_bits_[0] &= ~0x00000008u; +} +inline void UninterpretedOption::clear_negative_int_value() { + negative_int_value_ = GOOGLE_LONGLONG(0); + clear_has_negative_int_value(); +} +inline ::google::protobuf::int64 UninterpretedOption::negative_int_value() const { + // @@protoc_insertion_point(field_get:google.protobuf.UninterpretedOption.negative_int_value) + return negative_int_value_; +} +inline void UninterpretedOption::set_negative_int_value(::google::protobuf::int64 value) { + set_has_negative_int_value(); + negative_int_value_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.UninterpretedOption.negative_int_value) +} + +// optional double double_value = 6; +inline bool UninterpretedOption::has_double_value() const { + return (_has_bits_[0] & 0x00000010u) != 0; +} +inline void UninterpretedOption::set_has_double_value() { + _has_bits_[0] |= 0x00000010u; +} +inline void UninterpretedOption::clear_has_double_value() { + _has_bits_[0] &= ~0x00000010u; +} +inline void UninterpretedOption::clear_double_value() { + double_value_ = 0; + clear_has_double_value(); +} +inline double UninterpretedOption::double_value() const { + // @@protoc_insertion_point(field_get:google.protobuf.UninterpretedOption.double_value) + return double_value_; +} +inline void UninterpretedOption::set_double_value(double value) { + set_has_double_value(); + double_value_ = value; + // @@protoc_insertion_point(field_set:google.protobuf.UninterpretedOption.double_value) +} + +// optional bytes string_value = 7; +inline bool UninterpretedOption::has_string_value() const { + return (_has_bits_[0] & 0x00000020u) != 0; +} +inline void UninterpretedOption::set_has_string_value() { + _has_bits_[0] |= 0x00000020u; +} +inline void UninterpretedOption::clear_has_string_value() { + _has_bits_[0] &= ~0x00000020u; +} +inline void UninterpretedOption::clear_string_value() { + if (string_value_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + string_value_->clear(); + } + clear_has_string_value(); +} +inline const ::std::string& UninterpretedOption::string_value() const { + // @@protoc_insertion_point(field_get:google.protobuf.UninterpretedOption.string_value) + return *string_value_; +} +inline void UninterpretedOption::set_string_value(const ::std::string& value) { + set_has_string_value(); + if (string_value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + string_value_ = new ::std::string; + } + string_value_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.UninterpretedOption.string_value) +} +inline void UninterpretedOption::set_string_value(const char* value) { + set_has_string_value(); + if (string_value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + string_value_ = new ::std::string; + } + string_value_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.UninterpretedOption.string_value) +} +inline void UninterpretedOption::set_string_value(const void* value, size_t size) { + set_has_string_value(); + if (string_value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + string_value_ = new ::std::string; + } + string_value_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.UninterpretedOption.string_value) +} +inline ::std::string* UninterpretedOption::mutable_string_value() { + set_has_string_value(); + if (string_value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + string_value_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.UninterpretedOption.string_value) + return string_value_; +} +inline ::std::string* UninterpretedOption::release_string_value() { + clear_has_string_value(); + if (string_value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = string_value_; + string_value_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void UninterpretedOption::set_allocated_string_value(::std::string* string_value) { + if (string_value_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete string_value_; + } + if (string_value) { + set_has_string_value(); + string_value_ = string_value; + } else { + clear_has_string_value(); + string_value_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.UninterpretedOption.string_value) +} + +// optional string aggregate_value = 8; +inline bool UninterpretedOption::has_aggregate_value() const { + return (_has_bits_[0] & 0x00000040u) != 0; +} +inline void UninterpretedOption::set_has_aggregate_value() { + _has_bits_[0] |= 0x00000040u; +} +inline void UninterpretedOption::clear_has_aggregate_value() { + _has_bits_[0] &= ~0x00000040u; +} +inline void UninterpretedOption::clear_aggregate_value() { + if (aggregate_value_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + aggregate_value_->clear(); + } + clear_has_aggregate_value(); +} +inline const ::std::string& UninterpretedOption::aggregate_value() const { + // @@protoc_insertion_point(field_get:google.protobuf.UninterpretedOption.aggregate_value) + return *aggregate_value_; +} +inline void UninterpretedOption::set_aggregate_value(const ::std::string& value) { + set_has_aggregate_value(); + if (aggregate_value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + aggregate_value_ = new ::std::string; + } + aggregate_value_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.UninterpretedOption.aggregate_value) +} +inline void UninterpretedOption::set_aggregate_value(const char* value) { + set_has_aggregate_value(); + if (aggregate_value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + aggregate_value_ = new ::std::string; + } + aggregate_value_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.UninterpretedOption.aggregate_value) +} +inline void UninterpretedOption::set_aggregate_value(const char* value, size_t size) { + set_has_aggregate_value(); + if (aggregate_value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + aggregate_value_ = new ::std::string; + } + aggregate_value_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.UninterpretedOption.aggregate_value) +} +inline ::std::string* UninterpretedOption::mutable_aggregate_value() { + set_has_aggregate_value(); + if (aggregate_value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + aggregate_value_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.UninterpretedOption.aggregate_value) + return aggregate_value_; +} +inline ::std::string* UninterpretedOption::release_aggregate_value() { + clear_has_aggregate_value(); + if (aggregate_value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = aggregate_value_; + aggregate_value_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void UninterpretedOption::set_allocated_aggregate_value(::std::string* aggregate_value) { + if (aggregate_value_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete aggregate_value_; + } + if (aggregate_value) { + set_has_aggregate_value(); + aggregate_value_ = aggregate_value; + } else { + clear_has_aggregate_value(); + aggregate_value_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.UninterpretedOption.aggregate_value) +} + +// ------------------------------------------------------------------- + +// SourceCodeInfo_Location + +// repeated int32 path = 1 [packed = true]; +inline int SourceCodeInfo_Location::path_size() const { + return path_.size(); +} +inline void SourceCodeInfo_Location::clear_path() { + path_.Clear(); +} +inline ::google::protobuf::int32 SourceCodeInfo_Location::path(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.SourceCodeInfo.Location.path) + return path_.Get(index); +} +inline void SourceCodeInfo_Location::set_path(int index, ::google::protobuf::int32 value) { + path_.Set(index, value); + // @@protoc_insertion_point(field_set:google.protobuf.SourceCodeInfo.Location.path) +} +inline void SourceCodeInfo_Location::add_path(::google::protobuf::int32 value) { + path_.Add(value); + // @@protoc_insertion_point(field_add:google.protobuf.SourceCodeInfo.Location.path) +} +inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >& +SourceCodeInfo_Location::path() const { + // @@protoc_insertion_point(field_list:google.protobuf.SourceCodeInfo.Location.path) + return path_; +} +inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >* +SourceCodeInfo_Location::mutable_path() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.SourceCodeInfo.Location.path) + return &path_; +} + +// repeated int32 span = 2 [packed = true]; +inline int SourceCodeInfo_Location::span_size() const { + return span_.size(); +} +inline void SourceCodeInfo_Location::clear_span() { + span_.Clear(); +} +inline ::google::protobuf::int32 SourceCodeInfo_Location::span(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.SourceCodeInfo.Location.span) + return span_.Get(index); +} +inline void SourceCodeInfo_Location::set_span(int index, ::google::protobuf::int32 value) { + span_.Set(index, value); + // @@protoc_insertion_point(field_set:google.protobuf.SourceCodeInfo.Location.span) +} +inline void SourceCodeInfo_Location::add_span(::google::protobuf::int32 value) { + span_.Add(value); + // @@protoc_insertion_point(field_add:google.protobuf.SourceCodeInfo.Location.span) +} +inline const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >& +SourceCodeInfo_Location::span() const { + // @@protoc_insertion_point(field_list:google.protobuf.SourceCodeInfo.Location.span) + return span_; +} +inline ::google::protobuf::RepeatedField< ::google::protobuf::int32 >* +SourceCodeInfo_Location::mutable_span() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.SourceCodeInfo.Location.span) + return &span_; +} + +// optional string leading_comments = 3; +inline bool SourceCodeInfo_Location::has_leading_comments() const { + return (_has_bits_[0] & 0x00000004u) != 0; +} +inline void SourceCodeInfo_Location::set_has_leading_comments() { + _has_bits_[0] |= 0x00000004u; +} +inline void SourceCodeInfo_Location::clear_has_leading_comments() { + _has_bits_[0] &= ~0x00000004u; +} +inline void SourceCodeInfo_Location::clear_leading_comments() { + if (leading_comments_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + leading_comments_->clear(); + } + clear_has_leading_comments(); +} +inline const ::std::string& SourceCodeInfo_Location::leading_comments() const { + // @@protoc_insertion_point(field_get:google.protobuf.SourceCodeInfo.Location.leading_comments) + return *leading_comments_; +} +inline void SourceCodeInfo_Location::set_leading_comments(const ::std::string& value) { + set_has_leading_comments(); + if (leading_comments_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + leading_comments_ = new ::std::string; + } + leading_comments_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.SourceCodeInfo.Location.leading_comments) +} +inline void SourceCodeInfo_Location::set_leading_comments(const char* value) { + set_has_leading_comments(); + if (leading_comments_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + leading_comments_ = new ::std::string; + } + leading_comments_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.SourceCodeInfo.Location.leading_comments) +} +inline void SourceCodeInfo_Location::set_leading_comments(const char* value, size_t size) { + set_has_leading_comments(); + if (leading_comments_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + leading_comments_ = new ::std::string; + } + leading_comments_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.SourceCodeInfo.Location.leading_comments) +} +inline ::std::string* SourceCodeInfo_Location::mutable_leading_comments() { + set_has_leading_comments(); + if (leading_comments_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + leading_comments_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.SourceCodeInfo.Location.leading_comments) + return leading_comments_; +} +inline ::std::string* SourceCodeInfo_Location::release_leading_comments() { + clear_has_leading_comments(); + if (leading_comments_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = leading_comments_; + leading_comments_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void SourceCodeInfo_Location::set_allocated_leading_comments(::std::string* leading_comments) { + if (leading_comments_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete leading_comments_; + } + if (leading_comments) { + set_has_leading_comments(); + leading_comments_ = leading_comments; + } else { + clear_has_leading_comments(); + leading_comments_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.SourceCodeInfo.Location.leading_comments) +} + +// optional string trailing_comments = 4; +inline bool SourceCodeInfo_Location::has_trailing_comments() const { + return (_has_bits_[0] & 0x00000008u) != 0; +} +inline void SourceCodeInfo_Location::set_has_trailing_comments() { + _has_bits_[0] |= 0x00000008u; +} +inline void SourceCodeInfo_Location::clear_has_trailing_comments() { + _has_bits_[0] &= ~0x00000008u; +} +inline void SourceCodeInfo_Location::clear_trailing_comments() { + if (trailing_comments_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + trailing_comments_->clear(); + } + clear_has_trailing_comments(); +} +inline const ::std::string& SourceCodeInfo_Location::trailing_comments() const { + // @@protoc_insertion_point(field_get:google.protobuf.SourceCodeInfo.Location.trailing_comments) + return *trailing_comments_; +} +inline void SourceCodeInfo_Location::set_trailing_comments(const ::std::string& value) { + set_has_trailing_comments(); + if (trailing_comments_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + trailing_comments_ = new ::std::string; + } + trailing_comments_->assign(value); + // @@protoc_insertion_point(field_set:google.protobuf.SourceCodeInfo.Location.trailing_comments) +} +inline void SourceCodeInfo_Location::set_trailing_comments(const char* value) { + set_has_trailing_comments(); + if (trailing_comments_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + trailing_comments_ = new ::std::string; + } + trailing_comments_->assign(value); + // @@protoc_insertion_point(field_set_char:google.protobuf.SourceCodeInfo.Location.trailing_comments) +} +inline void SourceCodeInfo_Location::set_trailing_comments(const char* value, size_t size) { + set_has_trailing_comments(); + if (trailing_comments_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + trailing_comments_ = new ::std::string; + } + trailing_comments_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:google.protobuf.SourceCodeInfo.Location.trailing_comments) +} +inline ::std::string* SourceCodeInfo_Location::mutable_trailing_comments() { + set_has_trailing_comments(); + if (trailing_comments_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + trailing_comments_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:google.protobuf.SourceCodeInfo.Location.trailing_comments) + return trailing_comments_; +} +inline ::std::string* SourceCodeInfo_Location::release_trailing_comments() { + clear_has_trailing_comments(); + if (trailing_comments_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = trailing_comments_; + trailing_comments_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void SourceCodeInfo_Location::set_allocated_trailing_comments(::std::string* trailing_comments) { + if (trailing_comments_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete trailing_comments_; + } + if (trailing_comments) { + set_has_trailing_comments(); + trailing_comments_ = trailing_comments; + } else { + clear_has_trailing_comments(); + trailing_comments_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:google.protobuf.SourceCodeInfo.Location.trailing_comments) +} + +// ------------------------------------------------------------------- + +// SourceCodeInfo + +// repeated .google.protobuf.SourceCodeInfo.Location location = 1; +inline int SourceCodeInfo::location_size() const { + return location_.size(); +} +inline void SourceCodeInfo::clear_location() { + location_.Clear(); +} +inline const ::google::protobuf::SourceCodeInfo_Location& SourceCodeInfo::location(int index) const { + // @@protoc_insertion_point(field_get:google.protobuf.SourceCodeInfo.location) + return location_.Get(index); +} +inline ::google::protobuf::SourceCodeInfo_Location* SourceCodeInfo::mutable_location(int index) { + // @@protoc_insertion_point(field_mutable:google.protobuf.SourceCodeInfo.location) + return location_.Mutable(index); +} +inline ::google::protobuf::SourceCodeInfo_Location* SourceCodeInfo::add_location() { + // @@protoc_insertion_point(field_add:google.protobuf.SourceCodeInfo.location) + return location_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::google::protobuf::SourceCodeInfo_Location >& +SourceCodeInfo::location() const { + // @@protoc_insertion_point(field_list:google.protobuf.SourceCodeInfo.location) + return location_; +} +inline ::google::protobuf::RepeatedPtrField< ::google::protobuf::SourceCodeInfo_Location >* +SourceCodeInfo::mutable_location() { + // @@protoc_insertion_point(field_mutable_list:google.protobuf.SourceCodeInfo.location) + return &location_; +} + + +// @@protoc_insertion_point(namespace_scope) + +} // namespace protobuf +} // namespace google + +#ifndef SWIG +namespace google { +namespace protobuf { + +template <> struct is_proto_enum< ::google::protobuf::FieldDescriptorProto_Type> : ::google::protobuf::internal::true_type {}; +template <> +inline const EnumDescriptor* GetEnumDescriptor< ::google::protobuf::FieldDescriptorProto_Type>() { + return ::google::protobuf::FieldDescriptorProto_Type_descriptor(); +} +template <> struct is_proto_enum< ::google::protobuf::FieldDescriptorProto_Label> : ::google::protobuf::internal::true_type {}; +template <> +inline const EnumDescriptor* GetEnumDescriptor< ::google::protobuf::FieldDescriptorProto_Label>() { + return ::google::protobuf::FieldDescriptorProto_Label_descriptor(); +} +template <> struct is_proto_enum< ::google::protobuf::FileOptions_OptimizeMode> : ::google::protobuf::internal::true_type {}; +template <> +inline const EnumDescriptor* GetEnumDescriptor< ::google::protobuf::FileOptions_OptimizeMode>() { + return ::google::protobuf::FileOptions_OptimizeMode_descriptor(); +} +template <> struct is_proto_enum< ::google::protobuf::FieldOptions_CType> : ::google::protobuf::internal::true_type {}; +template <> +inline const EnumDescriptor* GetEnumDescriptor< ::google::protobuf::FieldOptions_CType>() { + return ::google::protobuf::FieldOptions_CType_descriptor(); +} + +} // namespace google +} // namespace protobuf +#endif // SWIG + +// @@protoc_insertion_point(global_scope) + +#endif // PROTOBUF_google_2fprotobuf_2fdescriptor_2eproto__INCLUDED diff --git a/kortex_gazebo/include/google/protobuf/descriptor.proto b/kortex_gazebo/include/google/protobuf/descriptor.proto new file mode 100644 index 00000000..a753601f --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/descriptor.proto @@ -0,0 +1,687 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// The messages in this file describe the definitions found in .proto files. +// A valid .proto file can be translated directly to a FileDescriptorProto +// without any other information (e.g. without reading its imports). + + + +package google.protobuf; +option java_package = "com.google.protobuf"; +option java_outer_classname = "DescriptorProtos"; + +// descriptor.proto must be optimized for speed because reflection-based +// algorithms don't work during bootstrapping. +option optimize_for = SPEED; + +// The protocol compiler can output a FileDescriptorSet containing the .proto +// files it parses. +message FileDescriptorSet { + repeated FileDescriptorProto file = 1; +} + +// Describes a complete .proto file. +message FileDescriptorProto { + optional string name = 1; // file name, relative to root of source tree + optional string package = 2; // e.g. "foo", "foo.bar", etc. + + // Names of files imported by this file. + repeated string dependency = 3; + // Indexes of the public imported files in the dependency list above. + repeated int32 public_dependency = 10; + // Indexes of the weak imported files in the dependency list. + // For Google-internal migration only. Do not use. + repeated int32 weak_dependency = 11; + + // All top-level definitions in this file. + repeated DescriptorProto message_type = 4; + repeated EnumDescriptorProto enum_type = 5; + repeated ServiceDescriptorProto service = 6; + repeated FieldDescriptorProto extension = 7; + + optional FileOptions options = 8; + + // This field contains optional information about the original source code. + // You may safely remove this entire field whithout harming runtime + // functionality of the descriptors -- the information is needed only by + // development tools. + optional SourceCodeInfo source_code_info = 9; +} + +// Describes a message type. +message DescriptorProto { + optional string name = 1; + + repeated FieldDescriptorProto field = 2; + repeated FieldDescriptorProto extension = 6; + + repeated DescriptorProto nested_type = 3; + repeated EnumDescriptorProto enum_type = 4; + + message ExtensionRange { + optional int32 start = 1; + optional int32 end = 2; + } + repeated ExtensionRange extension_range = 5; + + repeated OneofDescriptorProto oneof_decl = 8; + + optional MessageOptions options = 7; +} + +// Describes a field within a message. +message FieldDescriptorProto { + enum Type { + // 0 is reserved for errors. + // Order is weird for historical reasons. + TYPE_DOUBLE = 1; + TYPE_FLOAT = 2; + // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if + // negative values are likely. + TYPE_INT64 = 3; + TYPE_UINT64 = 4; + // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if + // negative values are likely. + TYPE_INT32 = 5; + TYPE_FIXED64 = 6; + TYPE_FIXED32 = 7; + TYPE_BOOL = 8; + TYPE_STRING = 9; + TYPE_GROUP = 10; // Tag-delimited aggregate. + TYPE_MESSAGE = 11; // Length-delimited aggregate. + + // New in version 2. + TYPE_BYTES = 12; + TYPE_UINT32 = 13; + TYPE_ENUM = 14; + TYPE_SFIXED32 = 15; + TYPE_SFIXED64 = 16; + TYPE_SINT32 = 17; // Uses ZigZag encoding. + TYPE_SINT64 = 18; // Uses ZigZag encoding. + }; + + enum Label { + // 0 is reserved for errors + LABEL_OPTIONAL = 1; + LABEL_REQUIRED = 2; + LABEL_REPEATED = 3; + // TODO(sanjay): Should we add LABEL_MAP? + }; + + optional string name = 1; + optional int32 number = 3; + optional Label label = 4; + + // If type_name is set, this need not be set. If both this and type_name + // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. + optional Type type = 5; + + // For message and enum types, this is the name of the type. If the name + // starts with a '.', it is fully-qualified. Otherwise, C++-like scoping + // rules are used to find the type (i.e. first the nested types within this + // message are searched, then within the parent, on up to the root + // namespace). + optional string type_name = 6; + + // For extensions, this is the name of the type being extended. It is + // resolved in the same manner as type_name. + optional string extendee = 2; + + // For numeric types, contains the original text representation of the value. + // For booleans, "true" or "false". + // For strings, contains the default text contents (not escaped in any way). + // For bytes, contains the C escaped value. All bytes >= 128 are escaped. + // TODO(kenton): Base-64 encode? + optional string default_value = 7; + + // If set, gives the index of a oneof in the containing type's oneof_decl + // list. This field is a member of that oneof. Extensions of a oneof should + // not set this since the oneof to which they belong will be inferred based + // on the extension range containing the extension's field number. + optional int32 oneof_index = 9; + + optional FieldOptions options = 8; +} + +// Describes a oneof. +message OneofDescriptorProto { + optional string name = 1; +} + +// Describes an enum type. +message EnumDescriptorProto { + optional string name = 1; + + repeated EnumValueDescriptorProto value = 2; + + optional EnumOptions options = 3; +} + +// Describes a value within an enum. +message EnumValueDescriptorProto { + optional string name = 1; + optional int32 number = 2; + + optional EnumValueOptions options = 3; +} + +// Describes a service. +message ServiceDescriptorProto { + optional string name = 1; + repeated MethodDescriptorProto method = 2; + + optional ServiceOptions options = 3; +} + +// Describes a method of a service. +message MethodDescriptorProto { + optional string name = 1; + + // Input and output type names. These are resolved in the same way as + // FieldDescriptorProto.type_name, but must refer to a message type. + optional string input_type = 2; + optional string output_type = 3; + + optional MethodOptions options = 4; +} + + +// =================================================================== +// Options + +// Each of the definitions above may have "options" attached. These are +// just annotations which may cause code to be generated slightly differently +// or may contain hints for code that manipulates protocol messages. +// +// Clients may define custom options as extensions of the *Options messages. +// These extensions may not yet be known at parsing time, so the parser cannot +// store the values in them. Instead it stores them in a field in the *Options +// message called uninterpreted_option. This field must have the same name +// across all *Options messages. We then use this field to populate the +// extensions when we build a descriptor, at which point all protos have been +// parsed and so all extensions are known. +// +// Extension numbers for custom options may be chosen as follows: +// * For options which will only be used within a single application or +// organization, or for experimental options, use field numbers 50000 +// through 99999. It is up to you to ensure that you do not use the +// same number for multiple options. +// * For options which will be published and used publicly by multiple +// independent entities, e-mail protobuf-global-extension-registry@google.com +// to reserve extension numbers. Simply provide your project name (e.g. +// Object-C plugin) and your porject website (if available) -- there's no need +// to explain how you intend to use them. Usually you only need one extension +// number. You can declare multiple options with only one extension number by +// putting them in a sub-message. See the Custom Options section of the docs +// for examples: +// https://developers.google.com/protocol-buffers/docs/proto#options +// If this turns out to be popular, a web service will be set up +// to automatically assign option numbers. + + +message FileOptions { + + // Sets the Java package where classes generated from this .proto will be + // placed. By default, the proto package is used, but this is often + // inappropriate because proto packages do not normally start with backwards + // domain names. + optional string java_package = 1; + + + // If set, all the classes from the .proto file are wrapped in a single + // outer class with the given name. This applies to both Proto1 + // (equivalent to the old "--one_java_file" option) and Proto2 (where + // a .proto always translates to a single class, but you may want to + // explicitly choose the class name). + optional string java_outer_classname = 8; + + // If set true, then the Java code generator will generate a separate .java + // file for each top-level message, enum, and service defined in the .proto + // file. Thus, these types will *not* be nested inside the outer class + // named by java_outer_classname. However, the outer class will still be + // generated to contain the file's getDescriptor() method as well as any + // top-level extensions defined in the file. + optional bool java_multiple_files = 10 [default=false]; + + // If set true, then the Java code generator will generate equals() and + // hashCode() methods for all messages defined in the .proto file. + // - In the full runtime, this is purely a speed optimization, as the + // AbstractMessage base class includes reflection-based implementations of + // these methods. + //- In the lite runtime, setting this option changes the semantics of + // equals() and hashCode() to more closely match those of the full runtime; + // the generated methods compute their results based on field values rather + // than object identity. (Implementations should not assume that hashcodes + // will be consistent across runtimes or versions of the protocol compiler.) + optional bool java_generate_equals_and_hash = 20 [default=false]; + + // If set true, then the Java2 code generator will generate code that + // throws an exception whenever an attempt is made to assign a non-UTF-8 + // byte sequence to a string field. + // Message reflection will do the same. + // However, an extension field still accepts non-UTF-8 byte sequences. + // This option has no effect on when used with the lite runtime. + optional bool java_string_check_utf8 = 27 [default=false]; + + + // Generated classes can be optimized for speed or code size. + enum OptimizeMode { + SPEED = 1; // Generate complete code for parsing, serialization, + // etc. + CODE_SIZE = 2; // Use ReflectionOps to implement these methods. + LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime. + } + optional OptimizeMode optimize_for = 9 [default=SPEED]; + + // Sets the Go package where structs generated from this .proto will be + // placed. There is no default. + optional string go_package = 11; + + + + // Should generic services be generated in each language? "Generic" services + // are not specific to any particular RPC system. They are generated by the + // main code generators in each language (without additional plugins). + // Generic services were the only kind of service generation supported by + // early versions of proto2. + // + // Generic services are now considered deprecated in favor of using plugins + // that generate code specific to your particular RPC system. Therefore, + // these default to false. Old code which depends on generic services should + // explicitly set them to true. + optional bool cc_generic_services = 16 [default=false]; + optional bool java_generic_services = 17 [default=false]; + optional bool py_generic_services = 18 [default=false]; + + // Is this file deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for everything in the file, or it will be completely ignored; in the very + // least, this is a formalization for deprecating files. + optional bool deprecated = 23 [default=false]; + + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message MessageOptions { + // Set true to use the old proto1 MessageSet wire format for extensions. + // This is provided for backwards-compatibility with the MessageSet wire + // format. You should not use this for any other reason: It's less + // efficient, has fewer features, and is more complicated. + // + // The message must be defined exactly as follows: + // message Foo { + // option message_set_wire_format = true; + // extensions 4 to max; + // } + // Note that the message cannot have any defined fields; MessageSets only + // have extensions. + // + // All extensions of your type must be singular messages; e.g. they cannot + // be int32s, enums, or repeated messages. + // + // Because this is an option, the above two restrictions are not enforced by + // the protocol compiler. + optional bool message_set_wire_format = 1 [default=false]; + + // Disables the generation of the standard "descriptor()" accessor, which can + // conflict with a field of the same name. This is meant to make migration + // from proto1 easier; new code should avoid fields named "descriptor". + optional bool no_standard_descriptor_accessor = 2 [default=false]; + + // Is this message deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the message, or it will be completely ignored; in the very least, + // this is a formalization for deprecating messages. + optional bool deprecated = 3 [default=false]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message FieldOptions { + // The ctype option instructs the C++ code generator to use a different + // representation of the field than it normally would. See the specific + // options below. This option is not yet implemented in the open source + // release -- sorry, we'll try to include it in a future version! + optional CType ctype = 1 [default = STRING]; + enum CType { + // Default mode. + STRING = 0; + + CORD = 1; + + STRING_PIECE = 2; + } + // The packed option can be enabled for repeated primitive fields to enable + // a more efficient representation on the wire. Rather than repeatedly + // writing the tag and type for each element, the entire array is encoded as + // a single length-delimited blob. + optional bool packed = 2; + + + + // Should this field be parsed lazily? Lazy applies only to message-type + // fields. It means that when the outer message is initially parsed, the + // inner message's contents will not be parsed but instead stored in encoded + // form. The inner message will actually be parsed when it is first accessed. + // + // This is only a hint. Implementations are free to choose whether to use + // eager or lazy parsing regardless of the value of this option. However, + // setting this option true suggests that the protocol author believes that + // using lazy parsing on this field is worth the additional bookkeeping + // overhead typically needed to implement it. + // + // This option does not affect the public interface of any generated code; + // all method signatures remain the same. Furthermore, thread-safety of the + // interface is not affected by this option; const methods remain safe to + // call from multiple threads concurrently, while non-const methods continue + // to require exclusive access. + // + // + // Note that implementations may choose not to check required fields within + // a lazy sub-message. That is, calling IsInitialized() on the outher message + // may return true even if the inner message has missing required fields. + // This is necessary because otherwise the inner message would have to be + // parsed in order to perform the check, defeating the purpose of lazy + // parsing. An implementation which chooses not to check required fields + // must be consistent about it. That is, for any particular sub-message, the + // implementation must either *always* check its required fields, or *never* + // check its required fields, regardless of whether or not the message has + // been parsed. + optional bool lazy = 5 [default=false]; + + // Is this field deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for accessors, or it will be completely ignored; in the very least, this + // is a formalization for deprecating fields. + optional bool deprecated = 3 [default=false]; + + // EXPERIMENTAL. DO NOT USE. + // For "map" fields, the name of the field in the enclosed type that + // is the key for this map. For example, suppose we have: + // message Item { + // required string name = 1; + // required string value = 2; + // } + // message Config { + // repeated Item items = 1 [experimental_map_key="name"]; + // } + // In this situation, the map key for Item will be set to "name". + // TODO: Fully-implement this, then remove the "experimental_" prefix. + optional string experimental_map_key = 9; + + // For Google-internal migration only. Do not use. + optional bool weak = 10 [default=false]; + + + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message EnumOptions { + + // Set this option to true to allow mapping different tag names to the same + // value. + optional bool allow_alias = 2; + + // Is this enum deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the enum, or it will be completely ignored; in the very least, this + // is a formalization for deprecating enums. + optional bool deprecated = 3 [default=false]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message EnumValueOptions { + // Is this enum value deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the enum value, or it will be completely ignored; in the very least, + // this is a formalization for deprecating enum values. + optional bool deprecated = 1 [default=false]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message ServiceOptions { + + // Note: Field numbers 1 through 32 are reserved for Google's internal RPC + // framework. We apologize for hoarding these numbers to ourselves, but + // we were already using them long before we decided to release Protocol + // Buffers. + + // Is this service deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the service, or it will be completely ignored; in the very least, + // this is a formalization for deprecating services. + optional bool deprecated = 33 [default=false]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message MethodOptions { + + // Note: Field numbers 1 through 32 are reserved for Google's internal RPC + // framework. We apologize for hoarding these numbers to ourselves, but + // we were already using them long before we decided to release Protocol + // Buffers. + + // Is this method deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the method, or it will be completely ignored; in the very least, + // this is a formalization for deprecating methods. + optional bool deprecated = 33 [default=false]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + + +// A message representing a option the parser does not recognize. This only +// appears in options protos created by the compiler::Parser class. +// DescriptorPool resolves these when building Descriptor objects. Therefore, +// options protos in descriptor objects (e.g. returned by Descriptor::options(), +// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions +// in them. +message UninterpretedOption { + // The name of the uninterpreted option. Each string represents a segment in + // a dot-separated name. is_extension is true iff a segment represents an + // extension (denoted with parentheses in options specs in .proto files). + // E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents + // "foo.(bar.baz).qux". + message NamePart { + required string name_part = 1; + required bool is_extension = 2; + } + repeated NamePart name = 2; + + // The value of the uninterpreted option, in whatever type the tokenizer + // identified it as during parsing. Exactly one of these should be set. + optional string identifier_value = 3; + optional uint64 positive_int_value = 4; + optional int64 negative_int_value = 5; + optional double double_value = 6; + optional bytes string_value = 7; + optional string aggregate_value = 8; +} + +// =================================================================== +// Optional source code info + +// Encapsulates information about the original source file from which a +// FileDescriptorProto was generated. +message SourceCodeInfo { + // A Location identifies a piece of source code in a .proto file which + // corresponds to a particular definition. This information is intended + // to be useful to IDEs, code indexers, documentation generators, and similar + // tools. + // + // For example, say we have a file like: + // message Foo { + // optional string foo = 1; + // } + // Let's look at just the field definition: + // optional string foo = 1; + // ^ ^^ ^^ ^ ^^^ + // a bc de f ghi + // We have the following locations: + // span path represents + // [a,i) [ 4, 0, 2, 0 ] The whole field definition. + // [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). + // [c,d) [ 4, 0, 2, 0, 5 ] The type (string). + // [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). + // [g,h) [ 4, 0, 2, 0, 3 ] The number (1). + // + // Notes: + // - A location may refer to a repeated field itself (i.e. not to any + // particular index within it). This is used whenever a set of elements are + // logically enclosed in a single code segment. For example, an entire + // extend block (possibly containing multiple extension definitions) will + // have an outer location whose path refers to the "extensions" repeated + // field without an index. + // - Multiple locations may have the same path. This happens when a single + // logical declaration is spread out across multiple places. The most + // obvious example is the "extend" block again -- there may be multiple + // extend blocks in the same scope, each of which will have the same path. + // - A location's span is not always a subset of its parent's span. For + // example, the "extendee" of an extension declaration appears at the + // beginning of the "extend" block and is shared by all extensions within + // the block. + // - Just because a location's span is a subset of some other location's span + // does not mean that it is a descendent. For example, a "group" defines + // both a type and a field in a single declaration. Thus, the locations + // corresponding to the type and field and their components will overlap. + // - Code which tries to interpret locations should probably be designed to + // ignore those that it doesn't understand, as more types of locations could + // be recorded in the future. + repeated Location location = 1; + message Location { + // Identifies which part of the FileDescriptorProto was defined at this + // location. + // + // Each element is a field number or an index. They form a path from + // the root FileDescriptorProto to the place where the definition. For + // example, this path: + // [ 4, 3, 2, 7, 1 ] + // refers to: + // file.message_type(3) // 4, 3 + // .field(7) // 2, 7 + // .name() // 1 + // This is because FileDescriptorProto.message_type has field number 4: + // repeated DescriptorProto message_type = 4; + // and DescriptorProto.field has field number 2: + // repeated FieldDescriptorProto field = 2; + // and FieldDescriptorProto.name has field number 1: + // optional string name = 1; + // + // Thus, the above path gives the location of a field name. If we removed + // the last element: + // [ 4, 3, 2, 7 ] + // this path refers to the whole field declaration (from the beginning + // of the label to the terminating semicolon). + repeated int32 path = 1 [packed=true]; + + // Always has exactly three or four elements: start line, start column, + // end line (optional, otherwise assumed same as start line), end column. + // These are packed into a single field for efficiency. Note that line + // and column numbers are zero-based -- typically you will want to add + // 1 to each before displaying to a user. + repeated int32 span = 2 [packed=true]; + + // If this SourceCodeInfo represents a complete declaration, these are any + // comments appearing before and after the declaration which appear to be + // attached to the declaration. + // + // A series of line comments appearing on consecutive lines, with no other + // tokens appearing on those lines, will be treated as a single comment. + // + // Only the comment content is provided; comment markers (e.g. //) are + // stripped out. For block comments, leading whitespace and an asterisk + // will be stripped from the beginning of each line other than the first. + // Newlines are included in the output. + // + // Examples: + // + // optional int32 foo = 1; // Comment attached to foo. + // // Comment attached to bar. + // optional int32 bar = 2; + // + // optional string baz = 3; + // // Comment attached to baz. + // // Another line attached to baz. + // + // // Comment attached to qux. + // // + // // Another line attached to qux. + // optional double qux = 4; + // + // optional string corge = 5; + // /* Block comment attached + // * to corge. Leading asterisks + // * will be removed. */ + // /* Block comment attached to + // * grault. */ + // optional int32 grault = 6; + optional string leading_comments = 3; + optional string trailing_comments = 4; + } +} diff --git a/kortex_gazebo/include/google/protobuf/descriptor_database.h b/kortex_gazebo/include/google/protobuf/descriptor_database.h new file mode 100644 index 00000000..934e4022 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/descriptor_database.h @@ -0,0 +1,369 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// Interface for manipulating databases of descriptors. + +#ifndef GOOGLE_PROTOBUF_DESCRIPTOR_DATABASE_H__ +#define GOOGLE_PROTOBUF_DESCRIPTOR_DATABASE_H__ + +#include +#include +#include +#include +#include +#include + +namespace google { +namespace protobuf { + +// Defined in this file. +class DescriptorDatabase; +class SimpleDescriptorDatabase; +class EncodedDescriptorDatabase; +class DescriptorPoolDatabase; +class MergedDescriptorDatabase; + +// Abstract interface for a database of descriptors. +// +// This is useful if you want to create a DescriptorPool which loads +// descriptors on-demand from some sort of large database. If the database +// is large, it may be inefficient to enumerate every .proto file inside it +// calling DescriptorPool::BuildFile() for each one. Instead, a DescriptorPool +// can be created which wraps a DescriptorDatabase and only builds particular +// descriptors when they are needed. +class LIBPROTOBUF_EXPORT DescriptorDatabase { + public: + inline DescriptorDatabase() {} + virtual ~DescriptorDatabase(); + + // Find a file by file name. Fills in in *output and returns true if found. + // Otherwise, returns false, leaving the contents of *output undefined. + virtual bool FindFileByName(const string& filename, + FileDescriptorProto* output) = 0; + + // Find the file that declares the given fully-qualified symbol name. + // If found, fills in *output and returns true, otherwise returns false + // and leaves *output undefined. + virtual bool FindFileContainingSymbol(const string& symbol_name, + FileDescriptorProto* output) = 0; + + // Find the file which defines an extension extending the given message type + // with the given field number. If found, fills in *output and returns true, + // otherwise returns false and leaves *output undefined. containing_type + // must be a fully-qualified type name. + virtual bool FindFileContainingExtension(const string& containing_type, + int field_number, + FileDescriptorProto* output) = 0; + + // Finds the tag numbers used by all known extensions of + // extendee_type, and appends them to output in an undefined + // order. This method is best-effort: it's not guaranteed that the + // database will find all extensions, and it's not guaranteed that + // FindFileContainingExtension will return true on all of the found + // numbers. Returns true if the search was successful, otherwise + // returns false and leaves output unchanged. + // + // This method has a default implementation that always returns + // false. + virtual bool FindAllExtensionNumbers(const string& /* extendee_type */, + vector* /* output */) { + return false; + } + + + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(DescriptorDatabase); +}; + +// A DescriptorDatabase into which you can insert files manually. +// +// FindFileContainingSymbol() is fully-implemented. When you add a file, its +// symbols will be indexed for this purpose. Note that the implementation +// may return false positives, but only if it isn't possible for the symbol +// to be defined in any other file. In particular, if a file defines a symbol +// "Foo", then searching for "Foo.[anything]" will match that file. This way, +// the database does not need to aggressively index all children of a symbol. +// +// FindFileContainingExtension() is mostly-implemented. It works if and only +// if the original FieldDescriptorProto defining the extension has a +// fully-qualified type name in its "extendee" field (i.e. starts with a '.'). +// If the extendee is a relative name, SimpleDescriptorDatabase will not +// attempt to resolve the type, so it will not know what type the extension is +// extending. Therefore, calling FindFileContainingExtension() with the +// extension's containing type will never actually find that extension. Note +// that this is an unlikely problem, as all FileDescriptorProtos created by the +// protocol compiler (as well as ones created by calling +// FileDescriptor::CopyTo()) will always use fully-qualified names for all +// types. You only need to worry if you are constructing FileDescriptorProtos +// yourself, or are calling compiler::Parser directly. +class LIBPROTOBUF_EXPORT SimpleDescriptorDatabase : public DescriptorDatabase { + public: + SimpleDescriptorDatabase(); + ~SimpleDescriptorDatabase(); + + // Adds the FileDescriptorProto to the database, making a copy. The object + // can be deleted after Add() returns. Returns false if the file conflicted + // with a file already in the database, in which case an error will have + // been written to GOOGLE_LOG(ERROR). + bool Add(const FileDescriptorProto& file); + + // Adds the FileDescriptorProto to the database and takes ownership of it. + bool AddAndOwn(const FileDescriptorProto* file); + + // implements DescriptorDatabase ----------------------------------- + bool FindFileByName(const string& filename, + FileDescriptorProto* output); + bool FindFileContainingSymbol(const string& symbol_name, + FileDescriptorProto* output); + bool FindFileContainingExtension(const string& containing_type, + int field_number, + FileDescriptorProto* output); + bool FindAllExtensionNumbers(const string& extendee_type, + vector* output); + + private: + // So that it can use DescriptorIndex. + friend class EncodedDescriptorDatabase; + + // An index mapping file names, symbol names, and extension numbers to + // some sort of values. + template + class DescriptorIndex { + public: + // Helpers to recursively add particular descriptors and all their contents + // to the index. + bool AddFile(const FileDescriptorProto& file, + Value value); + bool AddSymbol(const string& name, Value value); + bool AddNestedExtensions(const DescriptorProto& message_type, + Value value); + bool AddExtension(const FieldDescriptorProto& field, + Value value); + + Value FindFile(const string& filename); + Value FindSymbol(const string& name); + Value FindExtension(const string& containing_type, int field_number); + bool FindAllExtensionNumbers(const string& containing_type, + vector* output); + + private: + map by_name_; + map by_symbol_; + map, Value> by_extension_; + + // Invariant: The by_symbol_ map does not contain any symbols which are + // prefixes of other symbols in the map. For example, "foo.bar" is a + // prefix of "foo.bar.baz" (but is not a prefix of "foo.barbaz"). + // + // This invariant is important because it means that given a symbol name, + // we can find a key in the map which is a prefix of the symbol in O(lg n) + // time, and we know that there is at most one such key. + // + // The prefix lookup algorithm works like so: + // 1) Find the last key in the map which is less than or equal to the + // search key. + // 2) If the found key is a prefix of the search key, then return it. + // Otherwise, there is no match. + // + // I am sure this algorithm has been described elsewhere, but since I + // wasn't able to find it quickly I will instead prove that it works + // myself. The key to the algorithm is that if a match exists, step (1) + // will find it. Proof: + // 1) Define the "search key" to be the key we are looking for, the "found + // key" to be the key found in step (1), and the "match key" to be the + // key which actually matches the serach key (i.e. the key we're trying + // to find). + // 2) The found key must be less than or equal to the search key by + // definition. + // 3) The match key must also be less than or equal to the search key + // (because it is a prefix). + // 4) The match key cannot be greater than the found key, because if it + // were, then step (1) of the algorithm would have returned the match + // key instead (since it finds the *greatest* key which is less than or + // equal to the search key). + // 5) Therefore, the found key must be between the match key and the search + // key, inclusive. + // 6) Since the search key must be a sub-symbol of the match key, if it is + // not equal to the match key, then search_key[match_key.size()] must + // be '.'. + // 7) Since '.' sorts before any other character that is valid in a symbol + // name, then if the found key is not equal to the match key, then + // found_key[match_key.size()] must also be '.', because any other value + // would make it sort after the search key. + // 8) Therefore, if the found key is not equal to the match key, then the + // found key must be a sub-symbol of the match key. However, this would + // contradict our map invariant which says that no symbol in the map is + // a sub-symbol of any other. + // 9) Therefore, the found key must match the match key. + // + // The above proof assumes the match key exists. In the case that the + // match key does not exist, then step (1) will return some other symbol. + // That symbol cannot be a super-symbol of the search key since if it were, + // then it would be a match, and we're assuming the match key doesn't exist. + // Therefore, step 2 will correctly return no match. + + // Find the last entry in the by_symbol_ map whose key is less than or + // equal to the given name. + typename map::iterator FindLastLessOrEqual( + const string& name); + + // True if either the arguments are equal or super_symbol identifies a + // parent symbol of sub_symbol (e.g. "foo.bar" is a parent of + // "foo.bar.baz", but not a parent of "foo.barbaz"). + bool IsSubSymbol(const string& sub_symbol, const string& super_symbol); + + // Returns true if and only if all characters in the name are alphanumerics, + // underscores, or periods. + bool ValidateSymbolName(const string& name); + }; + + + DescriptorIndex index_; + vector files_to_delete_; + + // If file is non-NULL, copy it into *output and return true, otherwise + // return false. + bool MaybeCopy(const FileDescriptorProto* file, + FileDescriptorProto* output); + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(SimpleDescriptorDatabase); +}; + +// Very similar to SimpleDescriptorDatabase, but stores all the descriptors +// as raw bytes and generally tries to use as little memory as possible. +// +// The same caveats regarding FindFileContainingExtension() apply as with +// SimpleDescriptorDatabase. +class LIBPROTOBUF_EXPORT EncodedDescriptorDatabase : public DescriptorDatabase { + public: + EncodedDescriptorDatabase(); + ~EncodedDescriptorDatabase(); + + // Adds the FileDescriptorProto to the database. The descriptor is provided + // in encoded form. The database does not make a copy of the bytes, nor + // does it take ownership; it's up to the caller to make sure the bytes + // remain valid for the life of the database. Returns false and logs an error + // if the bytes are not a valid FileDescriptorProto or if the file conflicted + // with a file already in the database. + bool Add(const void* encoded_file_descriptor, int size); + + // Like Add(), but makes a copy of the data, so that the caller does not + // need to keep it around. + bool AddCopy(const void* encoded_file_descriptor, int size); + + // Like FindFileContainingSymbol but returns only the name of the file. + bool FindNameOfFileContainingSymbol(const string& symbol_name, + string* output); + + // implements DescriptorDatabase ----------------------------------- + bool FindFileByName(const string& filename, + FileDescriptorProto* output); + bool FindFileContainingSymbol(const string& symbol_name, + FileDescriptorProto* output); + bool FindFileContainingExtension(const string& containing_type, + int field_number, + FileDescriptorProto* output); + bool FindAllExtensionNumbers(const string& extendee_type, + vector* output); + + private: + SimpleDescriptorDatabase::DescriptorIndex > index_; + vector files_to_delete_; + + // If encoded_file.first is non-NULL, parse the data into *output and return + // true, otherwise return false. + bool MaybeParse(pair encoded_file, + FileDescriptorProto* output); + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(EncodedDescriptorDatabase); +}; + +// A DescriptorDatabase that fetches files from a given pool. +class LIBPROTOBUF_EXPORT DescriptorPoolDatabase : public DescriptorDatabase { + public: + DescriptorPoolDatabase(const DescriptorPool& pool); + ~DescriptorPoolDatabase(); + + // implements DescriptorDatabase ----------------------------------- + bool FindFileByName(const string& filename, + FileDescriptorProto* output); + bool FindFileContainingSymbol(const string& symbol_name, + FileDescriptorProto* output); + bool FindFileContainingExtension(const string& containing_type, + int field_number, + FileDescriptorProto* output); + bool FindAllExtensionNumbers(const string& extendee_type, + vector* output); + + private: + const DescriptorPool& pool_; + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(DescriptorPoolDatabase); +}; + +// A DescriptorDatabase that wraps two or more others. It first searches the +// first database and, if that fails, tries the second, and so on. +class LIBPROTOBUF_EXPORT MergedDescriptorDatabase : public DescriptorDatabase { + public: + // Merge just two databases. The sources remain property of the caller. + MergedDescriptorDatabase(DescriptorDatabase* source1, + DescriptorDatabase* source2); + // Merge more than two databases. The sources remain property of the caller. + // The vector may be deleted after the constructor returns but the + // DescriptorDatabases need to stick around. + MergedDescriptorDatabase(const vector& sources); + ~MergedDescriptorDatabase(); + + // implements DescriptorDatabase ----------------------------------- + bool FindFileByName(const string& filename, + FileDescriptorProto* output); + bool FindFileContainingSymbol(const string& symbol_name, + FileDescriptorProto* output); + bool FindFileContainingExtension(const string& containing_type, + int field_number, + FileDescriptorProto* output); + // Merges the results of calling all databases. Returns true iff any + // of the databases returned true. + bool FindAllExtensionNumbers(const string& extendee_type, + vector* output); + + + private: + vector sources_; + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MergedDescriptorDatabase); +}; + +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_DESCRIPTOR_DATABASE_H__ diff --git a/kortex_gazebo/include/google/protobuf/dynamic_message.h b/kortex_gazebo/include/google/protobuf/dynamic_message.h new file mode 100644 index 00000000..10ed7005 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/dynamic_message.h @@ -0,0 +1,148 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// Defines an implementation of Message which can emulate types which are not +// known at compile-time. + +#ifndef GOOGLE_PROTOBUF_DYNAMIC_MESSAGE_H__ +#define GOOGLE_PROTOBUF_DYNAMIC_MESSAGE_H__ + +#include + +#include +#include + +namespace google { +namespace protobuf { + +// Defined in other files. +class Descriptor; // descriptor.h +class DescriptorPool; // descriptor.h + +// Constructs implementations of Message which can emulate types which are not +// known at compile-time. +// +// Sometimes you want to be able to manipulate protocol types that you don't +// know about at compile time. It would be nice to be able to construct +// a Message object which implements the message type given by any arbitrary +// Descriptor. DynamicMessage provides this. +// +// As it turns out, a DynamicMessage needs to construct extra +// information about its type in order to operate. Most of this information +// can be shared between all DynamicMessages of the same type. But, caching +// this information in some sort of global map would be a bad idea, since +// the cached information for a particular descriptor could outlive the +// descriptor itself. To avoid this problem, DynamicMessageFactory +// encapsulates this "cache". All DynamicMessages of the same type created +// from the same factory will share the same support data. Any Descriptors +// used with a particular factory must outlive the factory. +class LIBPROTOBUF_EXPORT DynamicMessageFactory : public MessageFactory { + public: + // Construct a DynamicMessageFactory that will search for extensions in + // the DescriptorPool in which the extendee is defined. + DynamicMessageFactory(); + + // Construct a DynamicMessageFactory that will search for extensions in + // the given DescriptorPool. + // + // DEPRECATED: Use CodedInputStream::SetExtensionRegistry() to tell the + // parser to look for extensions in an alternate pool. However, note that + // this is almost never what you want to do. Almost all users should use + // the zero-arg constructor. + DynamicMessageFactory(const DescriptorPool* pool); + + ~DynamicMessageFactory(); + + // Call this to tell the DynamicMessageFactory that if it is given a + // Descriptor d for which: + // d->file()->pool() == DescriptorPool::generated_pool(), + // then it should delegate to MessageFactory::generated_factory() instead + // of constructing a dynamic implementation of the message. In theory there + // is no down side to doing this, so it may become the default in the future. + void SetDelegateToGeneratedFactory(bool enable) { + delegate_to_generated_factory_ = enable; + } + + // implements MessageFactory --------------------------------------- + + // Given a Descriptor, constructs the default (prototype) Message of that + // type. You can then call that message's New() method to construct a + // mutable message of that type. + // + // Calling this method twice with the same Descriptor returns the same + // object. The returned object remains property of the factory and will + // be destroyed when the factory is destroyed. Also, any objects created + // by calling the prototype's New() method share some data with the + // prototype, so these must be destroyed before the DynamicMessageFactory + // is destroyed. + // + // The given descriptor must outlive the returned message, and hence must + // outlive the DynamicMessageFactory. + // + // The method is thread-safe. + const Message* GetPrototype(const Descriptor* type); + + private: + const DescriptorPool* pool_; + bool delegate_to_generated_factory_; + + // This struct just contains a hash_map. We can't #include from + // this header due to hacks needed for hash_map portability in the open source + // release. Namely, stubs/hash.h, which defines hash_map portably, is not a + // public header (for good reason), but dynamic_message.h is, and public + // headers may only #include other public headers. + struct PrototypeMap; + scoped_ptr prototypes_; + mutable Mutex prototypes_mutex_; + + friend class DynamicMessage; + const Message* GetPrototypeNoLock(const Descriptor* type); + + // Construct default oneof instance for reflection usage if oneof + // is defined. + static void ConstructDefaultOneofInstance(const Descriptor* type, + const int offsets[], + void* default_oneof_instance); + // Delete default oneof instance. Called by ~DynamicMessageFactory. + static void DeleteDefaultOneofInstance(const Descriptor* type, + const int offsets[], + void* default_oneof_instance); + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(DynamicMessageFactory); +}; + +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_DYNAMIC_MESSAGE_H__ diff --git a/kortex_gazebo/include/google/protobuf/extension_set.h b/kortex_gazebo/include/google/protobuf/extension_set.h new file mode 100644 index 00000000..d7ec5192 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/extension_set.h @@ -0,0 +1,1234 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// This header is logically internal, but is made public because it is used +// from protocol-compiler-generated code, which may reside in other components. + +#ifndef GOOGLE_PROTOBUF_EXTENSION_SET_H__ +#define GOOGLE_PROTOBUF_EXTENSION_SET_H__ + +#include +#include +#include +#include + + +#include + +#include + +namespace google { + +namespace protobuf { + class Descriptor; // descriptor.h + class FieldDescriptor; // descriptor.h + class DescriptorPool; // descriptor.h + class MessageLite; // message_lite.h + class Message; // message.h + class MessageFactory; // message.h + class UnknownFieldSet; // unknown_field_set.h + namespace io { + class CodedInputStream; // coded_stream.h + class CodedOutputStream; // coded_stream.h + } + namespace internal { + class FieldSkipper; // wire_format_lite.h + } +} + +namespace protobuf { +namespace internal { + +// Used to store values of type WireFormatLite::FieldType without having to +// #include wire_format_lite.h. Also, ensures that we use only one byte to +// store these values, which is important to keep the layout of +// ExtensionSet::Extension small. +typedef uint8 FieldType; + +// A function which, given an integer value, returns true if the number +// matches one of the defined values for the corresponding enum type. This +// is used with RegisterEnumExtension, below. +typedef bool EnumValidityFunc(int number); + +// Version of the above which takes an argument. This is needed to deal with +// extensions that are not compiled in. +typedef bool EnumValidityFuncWithArg(const void* arg, int number); + +// Information about a registered extension. +struct ExtensionInfo { + inline ExtensionInfo() {} + inline ExtensionInfo(FieldType type_param, bool isrepeated, bool ispacked) + : type(type_param), is_repeated(isrepeated), is_packed(ispacked), + descriptor(NULL) {} + + FieldType type; + bool is_repeated; + bool is_packed; + + struct EnumValidityCheck { + EnumValidityFuncWithArg* func; + const void* arg; + }; + + union { + EnumValidityCheck enum_validity_check; + const MessageLite* message_prototype; + }; + + // The descriptor for this extension, if one exists and is known. May be + // NULL. Must not be NULL if the descriptor for the extension does not + // live in the same pool as the descriptor for the containing type. + const FieldDescriptor* descriptor; +}; + +// Abstract interface for an object which looks up extension definitions. Used +// when parsing. +class LIBPROTOBUF_EXPORT ExtensionFinder { + public: + virtual ~ExtensionFinder(); + + // Find the extension with the given containing type and number. + virtual bool Find(int number, ExtensionInfo* output) = 0; +}; + +// Implementation of ExtensionFinder which finds extensions defined in .proto +// files which have been compiled into the binary. +class LIBPROTOBUF_EXPORT GeneratedExtensionFinder : public ExtensionFinder { + public: + GeneratedExtensionFinder(const MessageLite* containing_type) + : containing_type_(containing_type) {} + virtual ~GeneratedExtensionFinder() {} + + // Returns true and fills in *output if found, otherwise returns false. + virtual bool Find(int number, ExtensionInfo* output); + + private: + const MessageLite* containing_type_; +}; + +// A FieldSkipper used for parsing MessageSet. +class MessageSetFieldSkipper; + +// Note: extension_set_heavy.cc defines DescriptorPoolExtensionFinder for +// finding extensions from a DescriptorPool. + +// This is an internal helper class intended for use within the protocol buffer +// library and generated classes. Clients should not use it directly. Instead, +// use the generated accessors such as GetExtension() of the class being +// extended. +// +// This class manages extensions for a protocol message object. The +// message's HasExtension(), GetExtension(), MutableExtension(), and +// ClearExtension() methods are just thin wrappers around the embedded +// ExtensionSet. When parsing, if a tag number is encountered which is +// inside one of the message type's extension ranges, the tag is passed +// off to the ExtensionSet for parsing. Etc. +class LIBPROTOBUF_EXPORT ExtensionSet { + public: + ExtensionSet(); + ~ExtensionSet(); + + // These are called at startup by protocol-compiler-generated code to + // register known extensions. The registrations are used by ParseField() + // to look up extensions for parsed field numbers. Note that dynamic parsing + // does not use ParseField(); only protocol-compiler-generated parsing + // methods do. + static void RegisterExtension(const MessageLite* containing_type, + int number, FieldType type, + bool is_repeated, bool is_packed); + static void RegisterEnumExtension(const MessageLite* containing_type, + int number, FieldType type, + bool is_repeated, bool is_packed, + EnumValidityFunc* is_valid); + static void RegisterMessageExtension(const MessageLite* containing_type, + int number, FieldType type, + bool is_repeated, bool is_packed, + const MessageLite* prototype); + + // ================================================================= + + // Add all fields which are currently present to the given vector. This + // is useful to implement Reflection::ListFields(). + void AppendToList(const Descriptor* containing_type, + const DescriptorPool* pool, + vector* output) const; + + // ================================================================= + // Accessors + // + // Generated message classes include type-safe templated wrappers around + // these methods. Generally you should use those rather than call these + // directly, unless you are doing low-level memory management. + // + // When calling any of these accessors, the extension number requested + // MUST exist in the DescriptorPool provided to the constructor. Otheriwse, + // the method will fail an assert. Normally, though, you would not call + // these directly; you would either call the generated accessors of your + // message class (e.g. GetExtension()) or you would call the accessors + // of the reflection interface. In both cases, it is impossible to + // trigger this assert failure: the generated accessors only accept + // linked-in extension types as parameters, while the Reflection interface + // requires you to provide the FieldDescriptor describing the extension. + // + // When calling any of these accessors, a protocol-compiler-generated + // implementation of the extension corresponding to the number MUST + // be linked in, and the FieldDescriptor used to refer to it MUST be + // the one generated by that linked-in code. Otherwise, the method will + // die on an assert failure. The message objects returned by the message + // accessors are guaranteed to be of the correct linked-in type. + // + // These methods pretty much match Reflection except that: + // - They're not virtual. + // - They identify fields by number rather than FieldDescriptors. + // - They identify enum values using integers rather than descriptors. + // - Strings provide Mutable() in addition to Set() accessors. + + bool Has(int number) const; + int ExtensionSize(int number) const; // Size of a repeated extension. + int NumExtensions() const; // The number of extensions + FieldType ExtensionType(int number) const; + void ClearExtension(int number); + + // singular fields ------------------------------------------------- + + int32 GetInt32 (int number, int32 default_value) const; + int64 GetInt64 (int number, int64 default_value) const; + uint32 GetUInt32(int number, uint32 default_value) const; + uint64 GetUInt64(int number, uint64 default_value) const; + float GetFloat (int number, float default_value) const; + double GetDouble(int number, double default_value) const; + bool GetBool (int number, bool default_value) const; + int GetEnum (int number, int default_value) const; + const string & GetString (int number, const string& default_value) const; + const MessageLite& GetMessage(int number, + const MessageLite& default_value) const; + const MessageLite& GetMessage(int number, const Descriptor* message_type, + MessageFactory* factory) const; + + // |descriptor| may be NULL so long as it is known that the descriptor for + // the extension lives in the same pool as the descriptor for the containing + // type. +#define desc const FieldDescriptor* descriptor // avoid line wrapping + void SetInt32 (int number, FieldType type, int32 value, desc); + void SetInt64 (int number, FieldType type, int64 value, desc); + void SetUInt32(int number, FieldType type, uint32 value, desc); + void SetUInt64(int number, FieldType type, uint64 value, desc); + void SetFloat (int number, FieldType type, float value, desc); + void SetDouble(int number, FieldType type, double value, desc); + void SetBool (int number, FieldType type, bool value, desc); + void SetEnum (int number, FieldType type, int value, desc); + void SetString(int number, FieldType type, const string& value, desc); + string * MutableString (int number, FieldType type, desc); + MessageLite* MutableMessage(int number, FieldType type, + const MessageLite& prototype, desc); + MessageLite* MutableMessage(const FieldDescriptor* decsriptor, + MessageFactory* factory); + // Adds the given message to the ExtensionSet, taking ownership of the + // message object. Existing message with the same number will be deleted. + // If "message" is NULL, this is equivalent to "ClearExtension(number)". + void SetAllocatedMessage(int number, FieldType type, + const FieldDescriptor* descriptor, + MessageLite* message); + MessageLite* ReleaseMessage(int number, const MessageLite& prototype); + MessageLite* ReleaseMessage(const FieldDescriptor* descriptor, + MessageFactory* factory); +#undef desc + + // repeated fields ------------------------------------------------- + + // Fetches a RepeatedField extension by number; returns |default_value| + // if no such extension exists. User should not touch this directly; it is + // used by the GetRepeatedExtension() method. + const void* GetRawRepeatedField(int number, const void* default_value) const; + // Fetches a mutable version of a RepeatedField extension by number, + // instantiating one if none exists. Similar to above, user should not use + // this directly; it underlies MutableRepeatedExtension(). + void* MutableRawRepeatedField(int number, FieldType field_type, + bool packed, const FieldDescriptor* desc); + + // This is an overload of MutableRawRepeatedField to maintain compatibility + // with old code using a previous API. This version of + // MutableRawRepeatedField() will GOOGLE_CHECK-fail on a missing extension. + // (E.g.: borg/clients/internal/proto1/proto2_reflection.cc.) + void* MutableRawRepeatedField(int number); + + int32 GetRepeatedInt32 (int number, int index) const; + int64 GetRepeatedInt64 (int number, int index) const; + uint32 GetRepeatedUInt32(int number, int index) const; + uint64 GetRepeatedUInt64(int number, int index) const; + float GetRepeatedFloat (int number, int index) const; + double GetRepeatedDouble(int number, int index) const; + bool GetRepeatedBool (int number, int index) const; + int GetRepeatedEnum (int number, int index) const; + const string & GetRepeatedString (int number, int index) const; + const MessageLite& GetRepeatedMessage(int number, int index) const; + + void SetRepeatedInt32 (int number, int index, int32 value); + void SetRepeatedInt64 (int number, int index, int64 value); + void SetRepeatedUInt32(int number, int index, uint32 value); + void SetRepeatedUInt64(int number, int index, uint64 value); + void SetRepeatedFloat (int number, int index, float value); + void SetRepeatedDouble(int number, int index, double value); + void SetRepeatedBool (int number, int index, bool value); + void SetRepeatedEnum (int number, int index, int value); + void SetRepeatedString(int number, int index, const string& value); + string * MutableRepeatedString (int number, int index); + MessageLite* MutableRepeatedMessage(int number, int index); + +#define desc const FieldDescriptor* descriptor // avoid line wrapping + void AddInt32 (int number, FieldType type, bool packed, int32 value, desc); + void AddInt64 (int number, FieldType type, bool packed, int64 value, desc); + void AddUInt32(int number, FieldType type, bool packed, uint32 value, desc); + void AddUInt64(int number, FieldType type, bool packed, uint64 value, desc); + void AddFloat (int number, FieldType type, bool packed, float value, desc); + void AddDouble(int number, FieldType type, bool packed, double value, desc); + void AddBool (int number, FieldType type, bool packed, bool value, desc); + void AddEnum (int number, FieldType type, bool packed, int value, desc); + void AddString(int number, FieldType type, const string& value, desc); + string * AddString (int number, FieldType type, desc); + MessageLite* AddMessage(int number, FieldType type, + const MessageLite& prototype, desc); + MessageLite* AddMessage(const FieldDescriptor* descriptor, + MessageFactory* factory); +#undef desc + + void RemoveLast(int number); + MessageLite* ReleaseLast(int number); + void SwapElements(int number, int index1, int index2); + + // ----------------------------------------------------------------- + // TODO(kenton): Hardcore memory management accessors + + // ================================================================= + // convenience methods for implementing methods of Message + // + // These could all be implemented in terms of the other methods of this + // class, but providing them here helps keep the generated code size down. + + void Clear(); + void MergeFrom(const ExtensionSet& other); + void Swap(ExtensionSet* other); + void SwapExtension(ExtensionSet* other, int number); + bool IsInitialized() const; + + // Parses a single extension from the input. The input should start out + // positioned immediately after the tag. + bool ParseField(uint32 tag, io::CodedInputStream* input, + ExtensionFinder* extension_finder, + FieldSkipper* field_skipper); + + // Specific versions for lite or full messages (constructs the appropriate + // FieldSkipper automatically). |containing_type| is the default + // instance for the containing message; it is used only to look up the + // extension by number. See RegisterExtension(), above. Unlike the other + // methods of ExtensionSet, this only works for generated message types -- + // it looks up extensions registered using RegisterExtension(). + bool ParseField(uint32 tag, io::CodedInputStream* input, + const MessageLite* containing_type); + bool ParseField(uint32 tag, io::CodedInputStream* input, + const Message* containing_type, + UnknownFieldSet* unknown_fields); + bool ParseField(uint32 tag, io::CodedInputStream* input, + const MessageLite* containing_type, + io::CodedOutputStream* unknown_fields); + + // Parse an entire message in MessageSet format. Such messages have no + // fields, only extensions. + bool ParseMessageSet(io::CodedInputStream* input, + ExtensionFinder* extension_finder, + MessageSetFieldSkipper* field_skipper); + + // Specific versions for lite or full messages (constructs the appropriate + // FieldSkipper automatically). + bool ParseMessageSet(io::CodedInputStream* input, + const MessageLite* containing_type); + bool ParseMessageSet(io::CodedInputStream* input, + const Message* containing_type, + UnknownFieldSet* unknown_fields); + + // Write all extension fields with field numbers in the range + // [start_field_number, end_field_number) + // to the output stream, using the cached sizes computed when ByteSize() was + // last called. Note that the range bounds are inclusive-exclusive. + void SerializeWithCachedSizes(int start_field_number, + int end_field_number, + io::CodedOutputStream* output) const; + + // Same as SerializeWithCachedSizes, but without any bounds checking. + // The caller must ensure that target has sufficient capacity for the + // serialized extensions. + // + // Returns a pointer past the last written byte. + uint8* SerializeWithCachedSizesToArray(int start_field_number, + int end_field_number, + uint8* target) const; + + // Like above but serializes in MessageSet format. + void SerializeMessageSetWithCachedSizes(io::CodedOutputStream* output) const; + uint8* SerializeMessageSetWithCachedSizesToArray(uint8* target) const; + + // Returns the total serialized size of all the extensions. + int ByteSize() const; + + // Like ByteSize() but uses MessageSet format. + int MessageSetByteSize() const; + + // Returns (an estimate of) the total number of bytes used for storing the + // extensions in memory, excluding sizeof(*this). If the ExtensionSet is + // for a lite message (and thus possibly contains lite messages), the results + // are undefined (might work, might crash, might corrupt data, might not even + // be linked in). It's up to the protocol compiler to avoid calling this on + // such ExtensionSets (easy enough since lite messages don't implement + // SpaceUsed()). + int SpaceUsedExcludingSelf() const; + + private: + + // Interface of a lazily parsed singular message extension. + class LIBPROTOBUF_EXPORT LazyMessageExtension { + public: + LazyMessageExtension() {} + virtual ~LazyMessageExtension() {} + + virtual LazyMessageExtension* New() const = 0; + virtual const MessageLite& GetMessage( + const MessageLite& prototype) const = 0; + virtual MessageLite* MutableMessage(const MessageLite& prototype) = 0; + virtual void SetAllocatedMessage(MessageLite *message) = 0; + virtual MessageLite* ReleaseMessage(const MessageLite& prototype) = 0; + + virtual bool IsInitialized() const = 0; + virtual int ByteSize() const = 0; + virtual int SpaceUsed() const = 0; + + virtual void MergeFrom(const LazyMessageExtension& other) = 0; + virtual void Clear() = 0; + + virtual bool ReadMessage(const MessageLite& prototype, + io::CodedInputStream* input) = 0; + virtual void WriteMessage(int number, + io::CodedOutputStream* output) const = 0; + virtual uint8* WriteMessageToArray(int number, uint8* target) const = 0; + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(LazyMessageExtension); + }; + struct Extension { + // The order of these fields packs Extension into 24 bytes when using 8 + // byte alignment. Consider this when adding or removing fields here. + union { + int32 int32_value; + int64 int64_value; + uint32 uint32_value; + uint64 uint64_value; + float float_value; + double double_value; + bool bool_value; + int enum_value; + string* string_value; + MessageLite* message_value; + LazyMessageExtension* lazymessage_value; + + RepeatedField * repeated_int32_value; + RepeatedField * repeated_int64_value; + RepeatedField * repeated_uint32_value; + RepeatedField * repeated_uint64_value; + RepeatedField * repeated_float_value; + RepeatedField * repeated_double_value; + RepeatedField * repeated_bool_value; + RepeatedField * repeated_enum_value; + RepeatedPtrField* repeated_string_value; + RepeatedPtrField* repeated_message_value; + }; + + FieldType type; + bool is_repeated; + + // For singular types, indicates if the extension is "cleared". This + // happens when an extension is set and then later cleared by the caller. + // We want to keep the Extension object around for reuse, so instead of + // removing it from the map, we just set is_cleared = true. This has no + // meaning for repeated types; for those, the size of the RepeatedField + // simply becomes zero when cleared. + bool is_cleared : 4; + + // For singular message types, indicates whether lazy parsing is enabled + // for this extension. This field is only valid when type == TYPE_MESSAGE + // and !is_repeated because we only support lazy parsing for singular + // message types currently. If is_lazy = true, the extension is stored in + // lazymessage_value. Otherwise, the extension will be message_value. + bool is_lazy : 4; + + // For repeated types, this indicates if the [packed=true] option is set. + bool is_packed; + + // For packed fields, the size of the packed data is recorded here when + // ByteSize() is called then used during serialization. + // TODO(kenton): Use atomic when C++ supports it. + mutable int cached_size; + + // The descriptor for this extension, if one exists and is known. May be + // NULL. Must not be NULL if the descriptor for the extension does not + // live in the same pool as the descriptor for the containing type. + const FieldDescriptor* descriptor; + + // Some helper methods for operations on a single Extension. + void SerializeFieldWithCachedSizes( + int number, + io::CodedOutputStream* output) const; + uint8* SerializeFieldWithCachedSizesToArray( + int number, + uint8* target) const; + void SerializeMessageSetItemWithCachedSizes( + int number, + io::CodedOutputStream* output) const; + uint8* SerializeMessageSetItemWithCachedSizesToArray( + int number, + uint8* target) const; + int ByteSize(int number) const; + int MessageSetItemByteSize(int number) const; + void Clear(); + int GetSize() const; + void Free(); + int SpaceUsedExcludingSelf() const; + }; + + + // Returns true and fills field_number and extension if extension is found. + // Note to support packed repeated field compatibility, it also fills whether + // the tag on wire is packed, which can be different from + // extension->is_packed (whether packed=true is specified). + bool FindExtensionInfoFromTag(uint32 tag, ExtensionFinder* extension_finder, + int* field_number, ExtensionInfo* extension, + bool* was_packed_on_wire); + + // Returns true and fills extension if extension is found. + // Note to support packed repeated field compatibility, it also fills whether + // the tag on wire is packed, which can be different from + // extension->is_packed (whether packed=true is specified). + bool FindExtensionInfoFromFieldNumber(int wire_type, int field_number, + ExtensionFinder* extension_finder, + ExtensionInfo* extension, + bool* was_packed_on_wire); + + // Parses a single extension from the input. The input should start out + // positioned immediately after the wire tag. This method is called in + // ParseField() after field number and was_packed_on_wire is extracted from + // the wire tag and ExtensionInfo is found by the field number. + bool ParseFieldWithExtensionInfo(int field_number, + bool was_packed_on_wire, + const ExtensionInfo& extension, + io::CodedInputStream* input, + FieldSkipper* field_skipper); + + // Like ParseField(), but this method may parse singular message extensions + // lazily depending on the value of FLAGS_eagerly_parse_message_sets. + bool ParseFieldMaybeLazily(int wire_type, int field_number, + io::CodedInputStream* input, + ExtensionFinder* extension_finder, + MessageSetFieldSkipper* field_skipper); + + // Gets the extension with the given number, creating it if it does not + // already exist. Returns true if the extension did not already exist. + bool MaybeNewExtension(int number, const FieldDescriptor* descriptor, + Extension** result); + + // Parse a single MessageSet item -- called just after the item group start + // tag has been read. + bool ParseMessageSetItem(io::CodedInputStream* input, + ExtensionFinder* extension_finder, + MessageSetFieldSkipper* field_skipper); + + + // Hack: RepeatedPtrFieldBase declares ExtensionSet as a friend. This + // friendship should automatically extend to ExtensionSet::Extension, but + // unfortunately some older compilers (e.g. GCC 3.4.4) do not implement this + // correctly. So, we must provide helpers for calling methods of that + // class. + + // Defined in extension_set_heavy.cc. + static inline int RepeatedMessage_SpaceUsedExcludingSelf( + RepeatedPtrFieldBase* field); + + // The Extension struct is small enough to be passed by value, so we use it + // directly as the value type in the map rather than use pointers. We use + // a map rather than hash_map here because we expect most ExtensionSets will + // only contain a small number of extensions whereas hash_map is optimized + // for 100 elements or more. Also, we want AppendToList() to order fields + // by field number. + std::map extensions_; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ExtensionSet); +}; + +// These are just for convenience... +inline void ExtensionSet::SetString(int number, FieldType type, + const string& value, + const FieldDescriptor* descriptor) { + MutableString(number, type, descriptor)->assign(value); +} +inline void ExtensionSet::SetRepeatedString(int number, int index, + const string& value) { + MutableRepeatedString(number, index)->assign(value); +} +inline void ExtensionSet::AddString(int number, FieldType type, + const string& value, + const FieldDescriptor* descriptor) { + AddString(number, type, descriptor)->assign(value); +} + +// =================================================================== +// Glue for generated extension accessors + +// ------------------------------------------------------------------- +// Template magic + +// First we have a set of classes representing "type traits" for different +// field types. A type traits class knows how to implement basic accessors +// for extensions of a particular type given an ExtensionSet. The signature +// for a type traits class looks like this: +// +// class TypeTraits { +// public: +// typedef ? ConstType; +// typedef ? MutableType; +// // TypeTraits for singular fields and repeated fields will define the +// // symbol "Singular" or "Repeated" respectively. These two symbols will +// // be used in extension accessors to distinguish between singular +// // extensions and repeated extensions. If the TypeTraits for the passed +// // in extension doesn't have the expected symbol defined, it means the +// // user is passing a repeated extension to a singular accessor, or the +// // opposite. In that case the C++ compiler will generate an error +// // message "no matching member function" to inform the user. +// typedef ? Singular +// typedef ? Repeated +// +// static inline ConstType Get(int number, const ExtensionSet& set); +// static inline void Set(int number, ConstType value, ExtensionSet* set); +// static inline MutableType Mutable(int number, ExtensionSet* set); +// +// // Variants for repeated fields. +// static inline ConstType Get(int number, const ExtensionSet& set, +// int index); +// static inline void Set(int number, int index, +// ConstType value, ExtensionSet* set); +// static inline MutableType Mutable(int number, int index, +// ExtensionSet* set); +// static inline void Add(int number, ConstType value, ExtensionSet* set); +// static inline MutableType Add(int number, ExtensionSet* set); +// }; +// +// Not all of these methods make sense for all field types. For example, the +// "Mutable" methods only make sense for strings and messages, and the +// repeated methods only make sense for repeated types. So, each type +// traits class implements only the set of methods from this signature that it +// actually supports. This will cause a compiler error if the user tries to +// access an extension using a method that doesn't make sense for its type. +// For example, if "foo" is an extension of type "optional int32", then if you +// try to write code like: +// my_message.MutableExtension(foo) +// you will get a compile error because PrimitiveTypeTraits does not +// have a "Mutable()" method. + +// ------------------------------------------------------------------- +// PrimitiveTypeTraits + +// Since the ExtensionSet has different methods for each primitive type, +// we must explicitly define the methods of the type traits class for each +// known type. +template +class PrimitiveTypeTraits { + public: + typedef Type ConstType; + typedef Type MutableType; + typedef PrimitiveTypeTraits Singular; + + static inline ConstType Get(int number, const ExtensionSet& set, + ConstType default_value); + static inline void Set(int number, FieldType field_type, + ConstType value, ExtensionSet* set); +}; + +template +class RepeatedPrimitiveTypeTraits { + public: + typedef Type ConstType; + typedef Type MutableType; + typedef RepeatedPrimitiveTypeTraits Repeated; + + typedef RepeatedField RepeatedFieldType; + + static inline Type Get(int number, const ExtensionSet& set, int index); + static inline void Set(int number, int index, Type value, ExtensionSet* set); + static inline void Add(int number, FieldType field_type, + bool is_packed, Type value, ExtensionSet* set); + + static inline const RepeatedField& + GetRepeated(int number, const ExtensionSet& set); + static inline RepeatedField* + MutableRepeated(int number, FieldType field_type, + bool is_packed, ExtensionSet* set); + + static const RepeatedFieldType* GetDefaultRepeatedField(); +}; + +// Declared here so that this can be friended below. +void InitializeDefaultRepeatedFields(); +void DestroyDefaultRepeatedFields(); + +class LIBPROTOBUF_EXPORT RepeatedPrimitiveGenericTypeTraits { + private: + template friend class RepeatedPrimitiveTypeTraits; + friend void InitializeDefaultRepeatedFields(); + friend void DestroyDefaultRepeatedFields(); + static const RepeatedField* default_repeated_field_int32_; + static const RepeatedField* default_repeated_field_int64_; + static const RepeatedField* default_repeated_field_uint32_; + static const RepeatedField* default_repeated_field_uint64_; + static const RepeatedField* default_repeated_field_double_; + static const RepeatedField* default_repeated_field_float_; + static const RepeatedField* default_repeated_field_bool_; +}; + +#define PROTOBUF_DEFINE_PRIMITIVE_TYPE(TYPE, METHOD) \ +template<> inline TYPE PrimitiveTypeTraits::Get( \ + int number, const ExtensionSet& set, TYPE default_value) { \ + return set.Get##METHOD(number, default_value); \ +} \ +template<> inline void PrimitiveTypeTraits::Set( \ + int number, FieldType field_type, TYPE value, ExtensionSet* set) { \ + set->Set##METHOD(number, field_type, value, NULL); \ +} \ + \ +template<> inline TYPE RepeatedPrimitiveTypeTraits::Get( \ + int number, const ExtensionSet& set, int index) { \ + return set.GetRepeated##METHOD(number, index); \ +} \ +template<> inline void RepeatedPrimitiveTypeTraits::Set( \ + int number, int index, TYPE value, ExtensionSet* set) { \ + set->SetRepeated##METHOD(number, index, value); \ +} \ +template<> inline void RepeatedPrimitiveTypeTraits::Add( \ + int number, FieldType field_type, bool is_packed, \ + TYPE value, ExtensionSet* set) { \ + set->Add##METHOD(number, field_type, is_packed, value, NULL); \ +} \ +template<> inline const RepeatedField* \ + RepeatedPrimitiveTypeTraits::GetDefaultRepeatedField() { \ + return RepeatedPrimitiveGenericTypeTraits:: \ + default_repeated_field_##TYPE##_; \ +} \ +template<> inline const RepeatedField& \ + RepeatedPrimitiveTypeTraits::GetRepeated(int number, \ + const ExtensionSet& set) { \ + return *reinterpret_cast*>( \ + set.GetRawRepeatedField( \ + number, GetDefaultRepeatedField())); \ +} \ +template<> inline RepeatedField* \ + RepeatedPrimitiveTypeTraits::MutableRepeated(int number, \ + FieldType field_type, \ + bool is_packed, \ + ExtensionSet* set) { \ + return reinterpret_cast*>( \ + set->MutableRawRepeatedField(number, field_type, is_packed, NULL)); \ +} + +PROTOBUF_DEFINE_PRIMITIVE_TYPE( int32, Int32) +PROTOBUF_DEFINE_PRIMITIVE_TYPE( int64, Int64) +PROTOBUF_DEFINE_PRIMITIVE_TYPE(uint32, UInt32) +PROTOBUF_DEFINE_PRIMITIVE_TYPE(uint64, UInt64) +PROTOBUF_DEFINE_PRIMITIVE_TYPE( float, Float) +PROTOBUF_DEFINE_PRIMITIVE_TYPE(double, Double) +PROTOBUF_DEFINE_PRIMITIVE_TYPE( bool, Bool) + +#undef PROTOBUF_DEFINE_PRIMITIVE_TYPE + +// ------------------------------------------------------------------- +// StringTypeTraits + +// Strings support both Set() and Mutable(). +class LIBPROTOBUF_EXPORT StringTypeTraits { + public: + typedef const string& ConstType; + typedef string* MutableType; + typedef StringTypeTraits Singular; + + static inline const string& Get(int number, const ExtensionSet& set, + ConstType default_value) { + return set.GetString(number, default_value); + } + static inline void Set(int number, FieldType field_type, + const string& value, ExtensionSet* set) { + set->SetString(number, field_type, value, NULL); + } + static inline string* Mutable(int number, FieldType field_type, + ExtensionSet* set) { + return set->MutableString(number, field_type, NULL); + } +}; + +class LIBPROTOBUF_EXPORT RepeatedStringTypeTraits { + public: + typedef const string& ConstType; + typedef string* MutableType; + typedef RepeatedStringTypeTraits Repeated; + + typedef RepeatedPtrField RepeatedFieldType; + + static inline const string& Get(int number, const ExtensionSet& set, + int index) { + return set.GetRepeatedString(number, index); + } + static inline void Set(int number, int index, + const string& value, ExtensionSet* set) { + set->SetRepeatedString(number, index, value); + } + static inline string* Mutable(int number, int index, ExtensionSet* set) { + return set->MutableRepeatedString(number, index); + } + static inline void Add(int number, FieldType field_type, + bool /*is_packed*/, const string& value, + ExtensionSet* set) { + set->AddString(number, field_type, value, NULL); + } + static inline string* Add(int number, FieldType field_type, + ExtensionSet* set) { + return set->AddString(number, field_type, NULL); + } + static inline const RepeatedPtrField& + GetRepeated(int number, const ExtensionSet& set) { + return *reinterpret_cast*>( + set.GetRawRepeatedField(number, GetDefaultRepeatedField())); + } + + static inline RepeatedPtrField* + MutableRepeated(int number, FieldType field_type, + bool is_packed, ExtensionSet* set) { + return reinterpret_cast*>( + set->MutableRawRepeatedField(number, field_type, + is_packed, NULL)); + } + + static const RepeatedFieldType* GetDefaultRepeatedField() { + return default_repeated_field_; + } + + private: + friend void InitializeDefaultRepeatedFields(); + friend void DestroyDefaultRepeatedFields(); + static const RepeatedFieldType *default_repeated_field_; +}; + +// ------------------------------------------------------------------- +// EnumTypeTraits + +// ExtensionSet represents enums using integers internally, so we have to +// static_cast around. +template +class EnumTypeTraits { + public: + typedef Type ConstType; + typedef Type MutableType; + typedef EnumTypeTraits Singular; + + static inline ConstType Get(int number, const ExtensionSet& set, + ConstType default_value) { + return static_cast(set.GetEnum(number, default_value)); + } + static inline void Set(int number, FieldType field_type, + ConstType value, ExtensionSet* set) { + GOOGLE_DCHECK(IsValid(value)); + set->SetEnum(number, field_type, value, NULL); + } +}; + +template +class RepeatedEnumTypeTraits { + public: + typedef Type ConstType; + typedef Type MutableType; + typedef RepeatedEnumTypeTraits Repeated; + + typedef RepeatedField RepeatedFieldType; + + static inline ConstType Get(int number, const ExtensionSet& set, int index) { + return static_cast(set.GetRepeatedEnum(number, index)); + } + static inline void Set(int number, int index, + ConstType value, ExtensionSet* set) { + GOOGLE_DCHECK(IsValid(value)); + set->SetRepeatedEnum(number, index, value); + } + static inline void Add(int number, FieldType field_type, + bool is_packed, ConstType value, ExtensionSet* set) { + GOOGLE_DCHECK(IsValid(value)); + set->AddEnum(number, field_type, is_packed, value, NULL); + } + static inline const RepeatedField& GetRepeated(int number, + const ExtensionSet& + set) { + // Hack: the `Extension` struct stores a RepeatedField for enums. + // RepeatedField cannot implicitly convert to RepeatedField + // so we need to do some casting magic. See message.h for similar + // contortions for non-extension fields. + return *reinterpret_cast*>( + set.GetRawRepeatedField(number, GetDefaultRepeatedField())); + } + + static inline RepeatedField* MutableRepeated(int number, + FieldType field_type, + bool is_packed, + ExtensionSet* set) { + return reinterpret_cast*>( + set->MutableRawRepeatedField(number, field_type, is_packed, NULL)); + } + + static const RepeatedFieldType* GetDefaultRepeatedField() { + // Hack: as noted above, repeated enum fields are internally stored as a + // RepeatedField. We need to be able to instantiate global static + // objects to return as default (empty) repeated fields on non-existent + // extensions. We would not be able to know a-priori all of the enum types + // (values of |Type|) to instantiate all of these, so we just re-use int32's + // default repeated field object. + return reinterpret_cast*>( + RepeatedPrimitiveTypeTraits::GetDefaultRepeatedField()); + } +}; + +// ------------------------------------------------------------------- +// MessageTypeTraits + +// ExtensionSet guarantees that when manipulating extensions with message +// types, the implementation used will be the compiled-in class representing +// that type. So, we can static_cast down to the exact type we expect. +template +class MessageTypeTraits { + public: + typedef const Type& ConstType; + typedef Type* MutableType; + typedef MessageTypeTraits Singular; + + static inline ConstType Get(int number, const ExtensionSet& set, + ConstType default_value) { + return static_cast( + set.GetMessage(number, default_value)); + } + static inline MutableType Mutable(int number, FieldType field_type, + ExtensionSet* set) { + return static_cast( + set->MutableMessage(number, field_type, Type::default_instance(), NULL)); + } + static inline void SetAllocated(int number, FieldType field_type, + MutableType message, ExtensionSet* set) { + set->SetAllocatedMessage(number, field_type, NULL, message); + } + static inline MutableType Release(int number, FieldType /* field_type */, + ExtensionSet* set) { + return static_cast(set->ReleaseMessage( + number, Type::default_instance())); + } +}; + +// forward declaration +class RepeatedMessageGenericTypeTraits; + +template +class RepeatedMessageTypeTraits { + public: + typedef const Type& ConstType; + typedef Type* MutableType; + typedef RepeatedMessageTypeTraits Repeated; + + typedef RepeatedPtrField RepeatedFieldType; + + static inline ConstType Get(int number, const ExtensionSet& set, int index) { + return static_cast(set.GetRepeatedMessage(number, index)); + } + static inline MutableType Mutable(int number, int index, ExtensionSet* set) { + return static_cast(set->MutableRepeatedMessage(number, index)); + } + static inline MutableType Add(int number, FieldType field_type, + ExtensionSet* set) { + return static_cast( + set->AddMessage(number, field_type, Type::default_instance(), NULL)); + } + static inline const RepeatedPtrField& GetRepeated(int number, + const ExtensionSet& + set) { + // See notes above in RepeatedEnumTypeTraits::GetRepeated(): same + // casting hack applies here, because a RepeatedPtrField + // cannot naturally become a RepeatedPtrType even though Type is + // presumably a message. google::protobuf::Message goes through similar contortions + // with a reinterpret_cast<>. + return *reinterpret_cast*>( + set.GetRawRepeatedField(number, GetDefaultRepeatedField())); + } + static inline RepeatedPtrField* MutableRepeated(int number, + FieldType field_type, + bool is_packed, + ExtensionSet* set) { + return reinterpret_cast*>( + set->MutableRawRepeatedField(number, field_type, is_packed, NULL)); + } + + static const RepeatedFieldType* GetDefaultRepeatedField(); +}; + +// This class exists only to hold a generic default empty repeated field for all +// message-type repeated field extensions. +class LIBPROTOBUF_EXPORT RepeatedMessageGenericTypeTraits { + public: + typedef RepeatedPtrField< ::google::protobuf::MessageLite*> RepeatedFieldType; + private: + template friend class RepeatedMessageTypeTraits; + friend void InitializeDefaultRepeatedFields(); + friend void DestroyDefaultRepeatedFields(); + static const RepeatedFieldType* default_repeated_field_; +}; + +template inline + const typename RepeatedMessageTypeTraits::RepeatedFieldType* + RepeatedMessageTypeTraits::GetDefaultRepeatedField() { + return reinterpret_cast( + RepeatedMessageGenericTypeTraits::default_repeated_field_); +} + +// ------------------------------------------------------------------- +// ExtensionIdentifier + +// This is the type of actual extension objects. E.g. if you have: +// extends Foo with optional int32 bar = 1234; +// then "bar" will be defined in C++ as: +// ExtensionIdentifier, 1, false> bar(1234); +// +// Note that we could, in theory, supply the field number as a template +// parameter, and thus make an instance of ExtensionIdentifier have no +// actual contents. However, if we did that, then using at extension +// identifier would not necessarily cause the compiler to output any sort +// of reference to any simple defined in the extension's .pb.o file. Some +// linkers will actually drop object files that are not explicitly referenced, +// but that would be bad because it would cause this extension to not be +// registered at static initialization, and therefore using it would crash. + +template +class ExtensionIdentifier { + public: + typedef TypeTraitsType TypeTraits; + typedef ExtendeeType Extendee; + + ExtensionIdentifier(int number, typename TypeTraits::ConstType default_value) + : number_(number), default_value_(default_value) {} + inline int number() const { return number_; } + typename TypeTraits::ConstType default_value() const { + return default_value_; + } + + private: + const int number_; + typename TypeTraits::ConstType default_value_; +}; + +// ------------------------------------------------------------------- +// Generated accessors + +// This macro should be expanded in the context of a generated type which +// has extensions. +// +// We use "_proto_TypeTraits" as a type name below because "TypeTraits" +// causes problems if the class has a nested message or enum type with that +// name and "_TypeTraits" is technically reserved for the C++ library since +// it starts with an underscore followed by a capital letter. +// +// For similar reason, we use "_field_type" and "_is_packed" as parameter names +// below, so that "field_type" and "is_packed" can be used as field names. +#define GOOGLE_PROTOBUF_EXTENSION_ACCESSORS(CLASSNAME) \ + /* Has, Size, Clear */ \ + template \ + inline bool HasExtension( \ + const ::google::protobuf::internal::ExtensionIdentifier< \ + CLASSNAME, _proto_TypeTraits, _field_type, _is_packed>& id) const { \ + return _extensions_.Has(id.number()); \ + } \ + \ + template \ + inline void ClearExtension( \ + const ::google::protobuf::internal::ExtensionIdentifier< \ + CLASSNAME, _proto_TypeTraits, _field_type, _is_packed>& id) { \ + _extensions_.ClearExtension(id.number()); \ + } \ + \ + template \ + inline int ExtensionSize( \ + const ::google::protobuf::internal::ExtensionIdentifier< \ + CLASSNAME, _proto_TypeTraits, _field_type, _is_packed>& id) const { \ + return _extensions_.ExtensionSize(id.number()); \ + } \ + \ + /* Singular accessors */ \ + template \ + inline typename _proto_TypeTraits::Singular::ConstType GetExtension( \ + const ::google::protobuf::internal::ExtensionIdentifier< \ + CLASSNAME, _proto_TypeTraits, _field_type, _is_packed>& id) const { \ + return _proto_TypeTraits::Get(id.number(), _extensions_, \ + id.default_value()); \ + } \ + \ + template \ + inline typename _proto_TypeTraits::Singular::MutableType MutableExtension( \ + const ::google::protobuf::internal::ExtensionIdentifier< \ + CLASSNAME, _proto_TypeTraits, _field_type, _is_packed>& id) { \ + return _proto_TypeTraits::Mutable(id.number(), _field_type, \ + &_extensions_); \ + } \ + \ + template \ + inline void SetExtension( \ + const ::google::protobuf::internal::ExtensionIdentifier< \ + CLASSNAME, _proto_TypeTraits, _field_type, _is_packed>& id, \ + typename _proto_TypeTraits::Singular::ConstType value) { \ + _proto_TypeTraits::Set(id.number(), _field_type, value, &_extensions_); \ + } \ + \ + template \ + inline void SetAllocatedExtension( \ + const ::google::protobuf::internal::ExtensionIdentifier< \ + CLASSNAME, _proto_TypeTraits, _field_type, _is_packed>& id, \ + typename _proto_TypeTraits::Singular::MutableType value) { \ + _proto_TypeTraits::SetAllocated(id.number(), _field_type, \ + value, &_extensions_); \ + } \ + template \ + inline typename _proto_TypeTraits::Singular::MutableType ReleaseExtension( \ + const ::google::protobuf::internal::ExtensionIdentifier< \ + CLASSNAME, _proto_TypeTraits, _field_type, _is_packed>& id) { \ + return _proto_TypeTraits::Release(id.number(), _field_type, \ + &_extensions_); \ + } \ + \ + /* Repeated accessors */ \ + template \ + inline typename _proto_TypeTraits::Repeated::ConstType GetExtension( \ + const ::google::protobuf::internal::ExtensionIdentifier< \ + CLASSNAME, _proto_TypeTraits, _field_type, _is_packed>& id, \ + int index) const { \ + return _proto_TypeTraits::Get(id.number(), _extensions_, index); \ + } \ + \ + template \ + inline typename _proto_TypeTraits::Repeated::MutableType MutableExtension( \ + const ::google::protobuf::internal::ExtensionIdentifier< \ + CLASSNAME, _proto_TypeTraits, _field_type, _is_packed>& id, \ + int index) { \ + return _proto_TypeTraits::Mutable(id.number(), index, &_extensions_); \ + } \ + \ + template \ + inline void SetExtension( \ + const ::google::protobuf::internal::ExtensionIdentifier< \ + CLASSNAME, _proto_TypeTraits, _field_type, _is_packed>& id, \ + int index, typename _proto_TypeTraits::Repeated::ConstType value) { \ + _proto_TypeTraits::Set(id.number(), index, value, &_extensions_); \ + } \ + \ + template \ + inline typename _proto_TypeTraits::Repeated::MutableType AddExtension( \ + const ::google::protobuf::internal::ExtensionIdentifier< \ + CLASSNAME, _proto_TypeTraits, _field_type, _is_packed>& id) { \ + return _proto_TypeTraits::Add(id.number(), _field_type, &_extensions_); \ + } \ + \ + template \ + inline void AddExtension( \ + const ::google::protobuf::internal::ExtensionIdentifier< \ + CLASSNAME, _proto_TypeTraits, _field_type, _is_packed>& id, \ + typename _proto_TypeTraits::Repeated::ConstType value) { \ + _proto_TypeTraits::Add(id.number(), _field_type, _is_packed, \ + value, &_extensions_); \ + } \ + \ + template \ + inline const typename _proto_TypeTraits::Repeated::RepeatedFieldType& \ + GetRepeatedExtension( \ + const ::google::protobuf::internal::ExtensionIdentifier< \ + CLASSNAME, _proto_TypeTraits, _field_type, \ + _is_packed>& id) const { \ + return _proto_TypeTraits::GetRepeated(id.number(), _extensions_); \ + } \ + \ + template \ + inline typename _proto_TypeTraits::Repeated::RepeatedFieldType* \ + MutableRepeatedExtension( \ + const ::google::protobuf::internal::ExtensionIdentifier< \ + CLASSNAME, _proto_TypeTraits, _field_type, \ + _is_packed>& id) { \ + return _proto_TypeTraits::MutableRepeated(id.number(), _field_type, \ + _is_packed, &_extensions_); \ + } + +} // namespace internal +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_EXTENSION_SET_H__ diff --git a/kortex_gazebo/include/google/protobuf/generated_enum_reflection.h b/kortex_gazebo/include/google/protobuf/generated_enum_reflection.h new file mode 100644 index 00000000..3852cea5 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/generated_enum_reflection.h @@ -0,0 +1,91 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: jasonh@google.com (Jason Hsueh) +// +// This header is logically internal, but is made public because it is used +// from protocol-compiler-generated code, which may reside in other components. +// It provides reflection support for generated enums, and is included in +// generated .pb.h files and should have minimal dependencies. The methods are +// implemented in generated_message_reflection.cc. + +#ifndef GOOGLE_PROTOBUF_GENERATED_ENUM_REFLECTION_H__ +#define GOOGLE_PROTOBUF_GENERATED_ENUM_REFLECTION_H__ + +#include + +#include + +namespace google { +namespace protobuf { + class EnumDescriptor; +} // namespace protobuf + +namespace protobuf { + +// This type trait can be used to cause templates to only match proto2 enum +// types. +template struct is_proto_enum : ::google::protobuf::internal::false_type {}; + +// Returns the EnumDescriptor for enum type E, which must be a +// proto-declared enum type. Code generated by the protocol compiler +// will include specializations of this template for each enum type declared. +template +const EnumDescriptor* GetEnumDescriptor(); + +namespace internal { + +// Helper for EnumType_Parse functions: try to parse the string 'name' as an +// enum name of the given type, returning true and filling in value on success, +// or returning false and leaving value unchanged on failure. +LIBPROTOBUF_EXPORT bool ParseNamedEnum(const EnumDescriptor* descriptor, + const string& name, + int* value); + +template +bool ParseNamedEnum(const EnumDescriptor* descriptor, + const string& name, + EnumType* value) { + int tmp; + if (!ParseNamedEnum(descriptor, name, &tmp)) return false; + *value = static_cast(tmp); + return true; +} + +// Just a wrapper around printing the name of a value. The main point of this +// function is not to be inlined, so that you can do this without including +// descriptor.h. +LIBPROTOBUF_EXPORT const string& NameOfEnum(const EnumDescriptor* descriptor, int value); + +} // namespace internal +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_GENERATED_ENUM_REFLECTION_H__ diff --git a/kortex_gazebo/include/google/protobuf/generated_message_reflection.h b/kortex_gazebo/include/google/protobuf/generated_message_reflection.h new file mode 100644 index 00000000..b6671ad0 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/generated_message_reflection.h @@ -0,0 +1,504 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// This header is logically internal, but is made public because it is used +// from protocol-compiler-generated code, which may reside in other components. + +#ifndef GOOGLE_PROTOBUF_GENERATED_MESSAGE_REFLECTION_H__ +#define GOOGLE_PROTOBUF_GENERATED_MESSAGE_REFLECTION_H__ + +#include +#include +#include +// TODO(jasonh): Remove this once the compiler change to directly include this +// is released to components. +#include +#include +#include + + +namespace google { +namespace upb { +namespace google_opensource { +class GMR_Handlers; +} // namespace google_opensource +} // namespace upb + +namespace protobuf { + class DescriptorPool; +} + +namespace protobuf { +namespace internal { +class DefaultEmptyOneof; + +// Defined in this file. +class GeneratedMessageReflection; + +// Defined in other files. +class ExtensionSet; // extension_set.h + +// THIS CLASS IS NOT INTENDED FOR DIRECT USE. It is intended for use +// by generated code. This class is just a big hack that reduces code +// size. +// +// A GeneratedMessageReflection is an implementation of Reflection +// which expects all fields to be backed by simple variables located in +// memory. The locations are given using a base pointer and a set of +// offsets. +// +// It is required that the user represents fields of each type in a standard +// way, so that GeneratedMessageReflection can cast the void* pointer to +// the appropriate type. For primitive fields and string fields, each field +// should be represented using the obvious C++ primitive type. Enums and +// Messages are different: +// - Singular Message fields are stored as a pointer to a Message. These +// should start out NULL, except for in the default instance where they +// should start out pointing to other default instances. +// - Enum fields are stored as an int. This int must always contain +// a valid value, such that EnumDescriptor::FindValueByNumber() would +// not return NULL. +// - Repeated fields are stored as RepeatedFields or RepeatedPtrFields +// of whatever type the individual field would be. Strings and +// Messages use RepeatedPtrFields while everything else uses +// RepeatedFields. +class LIBPROTOBUF_EXPORT GeneratedMessageReflection : public Reflection { + public: + // Constructs a GeneratedMessageReflection. + // Parameters: + // descriptor: The descriptor for the message type being implemented. + // default_instance: The default instance of the message. This is only + // used to obtain pointers to default instances of embedded + // messages, which GetMessage() will return if the particular + // sub-message has not been initialized yet. (Thus, all + // embedded message fields *must* have non-NULL pointers + // in the default instance.) + // offsets: An array of ints giving the byte offsets, relative to + // the start of the message object, of each field. These can + // be computed at compile time using the + // GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET() macro, defined + // below. + // has_bits_offset: Offset in the message of an array of uint32s of size + // descriptor->field_count()/32, rounded up. This is a + // bitfield where each bit indicates whether or not the + // corresponding field of the message has been initialized. + // The bit for field index i is obtained by the expression: + // has_bits[i / 32] & (1 << (i % 32)) + // unknown_fields_offset: Offset in the message of the UnknownFieldSet for + // the message. + // extensions_offset: Offset in the message of the ExtensionSet for the + // message, or -1 if the message type has no extension + // ranges. + // pool: DescriptorPool to search for extension definitions. Only + // used by FindKnownExtensionByName() and + // FindKnownExtensionByNumber(). + // factory: MessageFactory to use to construct extension messages. + // object_size: The size of a message object of this type, as measured + // by sizeof(). + GeneratedMessageReflection(const Descriptor* descriptor, + const Message* default_instance, + const int offsets[], + int has_bits_offset, + int unknown_fields_offset, + int extensions_offset, + const DescriptorPool* pool, + MessageFactory* factory, + int object_size); + + // Similar with the construction above. Call this construction if the + // message has oneof definition. + // Parameters: + // offsets: An array of ints giving the byte offsets. + // For each oneof field, the offset is relative to the + // default_oneof_instance. These can be computed at compile + // time using the + // PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET() macro. + // For each none oneof field, the offset is related to + // the start of the message object. These can be computed + // at compile time using the + // GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET() macro. + // Besides offsets for all fields, this array also contains + // offsets for oneof unions. The offset of the i-th oneof + // union is offsets[descriptor->field_count() + i]. + // default_oneof_instance: The default instance of the oneofs. It is a + // struct holding the default value of all oneof fields + // for this message. It is only used to obtain pointers + // to default instances of oneof fields, which Get + // methods will return if the field is not set. + // oneof_case_offset: Offset in the message of an array of uint32s of + // size descriptor->oneof_decl_count(). Each uint32 + // indicates what field is set for each oneof. + // other parameters are the same with the construction above. + GeneratedMessageReflection(const Descriptor* descriptor, + const Message* default_instance, + const int offsets[], + int has_bits_offset, + int unknown_fields_offset, + int extensions_offset, + const void* default_oneof_instance, + int oneof_case_offset, + const DescriptorPool* pool, + MessageFactory* factory, + int object_size); + ~GeneratedMessageReflection(); + + // implements Reflection ------------------------------------------- + + const UnknownFieldSet& GetUnknownFields(const Message& message) const; + UnknownFieldSet* MutableUnknownFields(Message* message) const; + + int SpaceUsed(const Message& message) const; + + bool HasField(const Message& message, const FieldDescriptor* field) const; + int FieldSize(const Message& message, const FieldDescriptor* field) const; + void ClearField(Message* message, const FieldDescriptor* field) const; + bool HasOneof(const Message& message, + const OneofDescriptor* oneof_descriptor) const; + void ClearOneof(Message* message, const OneofDescriptor* field) const; + void RemoveLast(Message* message, const FieldDescriptor* field) const; + Message* ReleaseLast(Message* message, const FieldDescriptor* field) const; + void Swap(Message* message1, Message* message2) const; + void SwapFields(Message* message1, Message* message2, + const vector& fields) const; + void SwapElements(Message* message, const FieldDescriptor* field, + int index1, int index2) const; + void ListFields(const Message& message, + vector* output) const; + + int32 GetInt32 (const Message& message, + const FieldDescriptor* field) const; + int64 GetInt64 (const Message& message, + const FieldDescriptor* field) const; + uint32 GetUInt32(const Message& message, + const FieldDescriptor* field) const; + uint64 GetUInt64(const Message& message, + const FieldDescriptor* field) const; + float GetFloat (const Message& message, + const FieldDescriptor* field) const; + double GetDouble(const Message& message, + const FieldDescriptor* field) const; + bool GetBool (const Message& message, + const FieldDescriptor* field) const; + string GetString(const Message& message, + const FieldDescriptor* field) const; + const string& GetStringReference(const Message& message, + const FieldDescriptor* field, + string* scratch) const; + const EnumValueDescriptor* GetEnum(const Message& message, + const FieldDescriptor* field) const; + const Message& GetMessage(const Message& message, + const FieldDescriptor* field, + MessageFactory* factory = NULL) const; + + const FieldDescriptor* GetOneofFieldDescriptor( + const Message& message, + const OneofDescriptor* oneof_descriptor) const; + + public: + void SetInt32 (Message* message, + const FieldDescriptor* field, int32 value) const; + void SetInt64 (Message* message, + const FieldDescriptor* field, int64 value) const; + void SetUInt32(Message* message, + const FieldDescriptor* field, uint32 value) const; + void SetUInt64(Message* message, + const FieldDescriptor* field, uint64 value) const; + void SetFloat (Message* message, + const FieldDescriptor* field, float value) const; + void SetDouble(Message* message, + const FieldDescriptor* field, double value) const; + void SetBool (Message* message, + const FieldDescriptor* field, bool value) const; + void SetString(Message* message, + const FieldDescriptor* field, + const string& value) const; + void SetEnum (Message* message, const FieldDescriptor* field, + const EnumValueDescriptor* value) const; + Message* MutableMessage(Message* message, const FieldDescriptor* field, + MessageFactory* factory = NULL) const; + void SetAllocatedMessage(Message* message, + Message* sub_message, + const FieldDescriptor* field) const; + Message* ReleaseMessage(Message* message, const FieldDescriptor* field, + MessageFactory* factory = NULL) const; + + int32 GetRepeatedInt32 (const Message& message, + const FieldDescriptor* field, int index) const; + int64 GetRepeatedInt64 (const Message& message, + const FieldDescriptor* field, int index) const; + uint32 GetRepeatedUInt32(const Message& message, + const FieldDescriptor* field, int index) const; + uint64 GetRepeatedUInt64(const Message& message, + const FieldDescriptor* field, int index) const; + float GetRepeatedFloat (const Message& message, + const FieldDescriptor* field, int index) const; + double GetRepeatedDouble(const Message& message, + const FieldDescriptor* field, int index) const; + bool GetRepeatedBool (const Message& message, + const FieldDescriptor* field, int index) const; + string GetRepeatedString(const Message& message, + const FieldDescriptor* field, int index) const; + const string& GetRepeatedStringReference(const Message& message, + const FieldDescriptor* field, + int index, string* scratch) const; + const EnumValueDescriptor* GetRepeatedEnum(const Message& message, + const FieldDescriptor* field, + int index) const; + const Message& GetRepeatedMessage(const Message& message, + const FieldDescriptor* field, + int index) const; + + // Set the value of a field. + void SetRepeatedInt32 (Message* message, + const FieldDescriptor* field, int index, int32 value) const; + void SetRepeatedInt64 (Message* message, + const FieldDescriptor* field, int index, int64 value) const; + void SetRepeatedUInt32(Message* message, + const FieldDescriptor* field, int index, uint32 value) const; + void SetRepeatedUInt64(Message* message, + const FieldDescriptor* field, int index, uint64 value) const; + void SetRepeatedFloat (Message* message, + const FieldDescriptor* field, int index, float value) const; + void SetRepeatedDouble(Message* message, + const FieldDescriptor* field, int index, double value) const; + void SetRepeatedBool (Message* message, + const FieldDescriptor* field, int index, bool value) const; + void SetRepeatedString(Message* message, + const FieldDescriptor* field, int index, + const string& value) const; + void SetRepeatedEnum(Message* message, const FieldDescriptor* field, + int index, const EnumValueDescriptor* value) const; + // Get a mutable pointer to a field with a message type. + Message* MutableRepeatedMessage(Message* message, + const FieldDescriptor* field, + int index) const; + + void AddInt32 (Message* message, + const FieldDescriptor* field, int32 value) const; + void AddInt64 (Message* message, + const FieldDescriptor* field, int64 value) const; + void AddUInt32(Message* message, + const FieldDescriptor* field, uint32 value) const; + void AddUInt64(Message* message, + const FieldDescriptor* field, uint64 value) const; + void AddFloat (Message* message, + const FieldDescriptor* field, float value) const; + void AddDouble(Message* message, + const FieldDescriptor* field, double value) const; + void AddBool (Message* message, + const FieldDescriptor* field, bool value) const; + void AddString(Message* message, + const FieldDescriptor* field, const string& value) const; + void AddEnum(Message* message, + const FieldDescriptor* field, + const EnumValueDescriptor* value) const; + Message* AddMessage(Message* message, const FieldDescriptor* field, + MessageFactory* factory = NULL) const; + + const FieldDescriptor* FindKnownExtensionByName(const string& name) const; + const FieldDescriptor* FindKnownExtensionByNumber(int number) const; + + protected: + virtual void* MutableRawRepeatedField( + Message* message, const FieldDescriptor* field, FieldDescriptor::CppType, + int ctype, const Descriptor* desc) const; + + private: + friend class GeneratedMessage; + + // To parse directly into a proto2 generated class, the class GMR_Handlers + // needs access to member offsets and hasbits. + friend class LIBPROTOBUF_EXPORT upb::google_opensource::GMR_Handlers; + + const Descriptor* descriptor_; + const Message* default_instance_; + const void* default_oneof_instance_; + const int* offsets_; + + int has_bits_offset_; + int oneof_case_offset_; + int unknown_fields_offset_; + int extensions_offset_; + int object_size_; + + const DescriptorPool* descriptor_pool_; + MessageFactory* message_factory_; + + template + inline const Type& GetRaw(const Message& message, + const FieldDescriptor* field) const; + template + inline Type* MutableRaw(Message* message, + const FieldDescriptor* field) const; + template + inline const Type& DefaultRaw(const FieldDescriptor* field) const; + template + inline const Type& DefaultOneofRaw(const FieldDescriptor* field) const; + + inline const uint32* GetHasBits(const Message& message) const; + inline uint32* MutableHasBits(Message* message) const; + inline uint32 GetOneofCase( + const Message& message, + const OneofDescriptor* oneof_descriptor) const; + inline uint32* MutableOneofCase( + Message* message, + const OneofDescriptor* oneof_descriptor) const; + inline const ExtensionSet& GetExtensionSet(const Message& message) const; + inline ExtensionSet* MutableExtensionSet(Message* message) const; + + inline bool HasBit(const Message& message, + const FieldDescriptor* field) const; + inline void SetBit(Message* message, + const FieldDescriptor* field) const; + inline void ClearBit(Message* message, + const FieldDescriptor* field) const; + inline void SwapBit(Message* message1, + Message* message2, + const FieldDescriptor* field) const; + + // This function only swaps the field. Should swap corresponding has_bit + // before or after using this function. + void SwapField(Message* message1, + Message* message2, + const FieldDescriptor* field) const; + + void SwapOneofField(Message* message1, + Message* message2, + const OneofDescriptor* oneof_descriptor) const; + + inline bool HasOneofField(const Message& message, + const FieldDescriptor* field) const; + inline void SetOneofCase(Message* message, + const FieldDescriptor* field) const; + inline void ClearOneofField(Message* message, + const FieldDescriptor* field) const; + + template + inline const Type& GetField(const Message& message, + const FieldDescriptor* field) const; + template + inline void SetField(Message* message, + const FieldDescriptor* field, const Type& value) const; + template + inline Type* MutableField(Message* message, + const FieldDescriptor* field) const; + template + inline const Type& GetRepeatedField(const Message& message, + const FieldDescriptor* field, + int index) const; + template + inline const Type& GetRepeatedPtrField(const Message& message, + const FieldDescriptor* field, + int index) const; + template + inline void SetRepeatedField(Message* message, + const FieldDescriptor* field, int index, + Type value) const; + template + inline Type* MutableRepeatedField(Message* message, + const FieldDescriptor* field, + int index) const; + template + inline void AddField(Message* message, + const FieldDescriptor* field, const Type& value) const; + template + inline Type* AddField(Message* message, + const FieldDescriptor* field) const; + + int GetExtensionNumberOrDie(const Descriptor* type) const; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(GeneratedMessageReflection); +}; + +// Returns the offset of the given field within the given aggregate type. +// This is equivalent to the ANSI C offsetof() macro. However, according +// to the C++ standard, offsetof() only works on POD types, and GCC +// enforces this requirement with a warning. In practice, this rule is +// unnecessarily strict; there is probably no compiler or platform on +// which the offsets of the direct fields of a class are non-constant. +// Fields inherited from superclasses *can* have non-constant offsets, +// but that's not what this macro will be used for. +// +// Note that we calculate relative to the pointer value 16 here since if we +// just use zero, GCC complains about dereferencing a NULL pointer. We +// choose 16 rather than some other number just in case the compiler would +// be confused by an unaligned pointer. +#define GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(TYPE, FIELD) \ + static_cast( \ + reinterpret_cast( \ + &reinterpret_cast(16)->FIELD) - \ + reinterpret_cast(16)) + +#define PROTO2_GENERATED_DEFAULT_ONEOF_FIELD_OFFSET(ONEOF, FIELD) \ + static_cast( \ + reinterpret_cast(&(ONEOF->FIELD)) \ + - reinterpret_cast(ONEOF)) + +// There are some places in proto2 where dynamic_cast would be useful as an +// optimization. For example, take Message::MergeFrom(const Message& other). +// For a given generated message FooMessage, we generate these two methods: +// void MergeFrom(const FooMessage& other); +// void MergeFrom(const Message& other); +// The former method can be implemented directly in terms of FooMessage's +// inline accessors, but the latter method must work with the reflection +// interface. However, if the parameter to the latter method is actually of +// type FooMessage, then we'd like to be able to just call the other method +// as an optimization. So, we use dynamic_cast to check this. +// +// That said, dynamic_cast requires RTTI, which many people like to disable +// for performance and code size reasons. When RTTI is not available, we +// still need to produce correct results. So, in this case we have to fall +// back to using reflection, which is what we would have done anyway if the +// objects were not of the exact same class. +// +// dynamic_cast_if_available() implements this logic. If RTTI is +// enabled, it does a dynamic_cast. If RTTI is disabled, it just returns +// NULL. +// +// If you need to compile without RTTI, simply #define GOOGLE_PROTOBUF_NO_RTTI. +// On MSVC, this should be detected automatically. +template +inline To dynamic_cast_if_available(From from) { +#if defined(GOOGLE_PROTOBUF_NO_RTTI) || (defined(_MSC_VER)&&!defined(_CPPRTTI)) + return NULL; +#else + return dynamic_cast(from); +#endif +} + +} // namespace internal +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_GENERATED_MESSAGE_REFLECTION_H__ diff --git a/kortex_gazebo/include/google/protobuf/generated_message_util.h b/kortex_gazebo/include/google/protobuf/generated_message_util.h new file mode 100644 index 00000000..678f92a7 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/generated_message_util.h @@ -0,0 +1,113 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// This file contains miscellaneous helper code used by generated code -- +// including lite types -- but which should not be used directly by users. + +#ifndef GOOGLE_PROTOBUF_GENERATED_MESSAGE_UTIL_H__ +#define GOOGLE_PROTOBUF_GENERATED_MESSAGE_UTIL_H__ + +#include +#include + +#include + +#include +namespace google { + +namespace protobuf { +namespace internal { + + +// Annotation for the compiler to emit a deprecation message if a field marked +// with option 'deprecated=true' is used in the code, or for other things in +// generated code which are deprecated. +// +// For internal use in the pb.cc files, deprecation warnings are suppressed +// there. +#undef DEPRECATED_PROTOBUF_FIELD +#define PROTOBUF_DEPRECATED + + +// Constants for special floating point values. +LIBPROTOBUF_EXPORT double Infinity(); +LIBPROTOBUF_EXPORT double NaN(); + +// TODO(jieluo): Change to template. We have tried to use template, +// but it causes net/rpc/python:rpcutil_test fail (the empty string will +// init twice). It may related to swig. Change to template after we +// found the solution. + +// Default empty string object. Don't use the pointer directly. Instead, call +// GetEmptyString() to get the reference. +LIBPROTOBUF_EXPORT extern const ::std::string* empty_string_; +LIBPROTOBUF_EXPORT extern ProtobufOnceType empty_string_once_init_; +LIBPROTOBUF_EXPORT void InitEmptyString(); + + +LIBPROTOBUF_EXPORT inline const ::std::string& GetEmptyStringAlreadyInited() { + assert(empty_string_ != NULL); + return *empty_string_; +} +LIBPROTOBUF_EXPORT inline const ::std::string& GetEmptyString() { + ::google::protobuf::GoogleOnceInit(&empty_string_once_init_, &InitEmptyString); + return GetEmptyStringAlreadyInited(); +} + +// Defined in generated_message_reflection.cc -- not actually part of the lite +// library. +// +// TODO(jasonh): The various callers get this declaration from a variety of +// places: probably in most cases repeated_field.h. Clean these up so they all +// get the declaration from this file. +LIBPROTOBUF_EXPORT int StringSpaceUsedExcludingSelf(const string& str); + + +// True if IsInitialized() is true for all elements of t. Type is expected +// to be a RepeatedPtrField. It's useful to have this +// helper here to keep the protobuf compiler from ever having to emit loops in +// IsInitialized() methods. We want the C++ compiler to inline this or not +// as it sees fit. +template bool AllAreInitialized(const Type& t) { + for (int i = t.size(); --i >= 0; ) { + if (!t.Get(i).IsInitialized()) return false; + } + return true; +} + +} // namespace internal +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_GENERATED_MESSAGE_UTIL_H__ diff --git a/kortex_gazebo/include/google/protobuf/io/coded_stream.h b/kortex_gazebo/include/google/protobuf/io/coded_stream.h new file mode 100644 index 00000000..81fabb1d --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/io/coded_stream.h @@ -0,0 +1,1220 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// This file contains the CodedInputStream and CodedOutputStream classes, +// which wrap a ZeroCopyInputStream or ZeroCopyOutputStream, respectively, +// and allow you to read or write individual pieces of data in various +// formats. In particular, these implement the varint encoding for +// integers, a simple variable-length encoding in which smaller numbers +// take fewer bytes. +// +// Typically these classes will only be used internally by the protocol +// buffer library in order to encode and decode protocol buffers. Clients +// of the library only need to know about this class if they wish to write +// custom message parsing or serialization procedures. +// +// CodedOutputStream example: +// // Write some data to "myfile". First we write a 4-byte "magic number" +// // to identify the file type, then write a length-delimited string. The +// // string is composed of a varint giving the length followed by the raw +// // bytes. +// int fd = open("myfile", O_WRONLY); +// ZeroCopyOutputStream* raw_output = new FileOutputStream(fd); +// CodedOutputStream* coded_output = new CodedOutputStream(raw_output); +// +// int magic_number = 1234; +// char text[] = "Hello world!"; +// coded_output->WriteLittleEndian32(magic_number); +// coded_output->WriteVarint32(strlen(text)); +// coded_output->WriteRaw(text, strlen(text)); +// +// delete coded_output; +// delete raw_output; +// close(fd); +// +// CodedInputStream example: +// // Read a file created by the above code. +// int fd = open("myfile", O_RDONLY); +// ZeroCopyInputStream* raw_input = new FileInputStream(fd); +// CodedInputStream coded_input = new CodedInputStream(raw_input); +// +// coded_input->ReadLittleEndian32(&magic_number); +// if (magic_number != 1234) { +// cerr << "File not in expected format." << endl; +// return; +// } +// +// uint32 size; +// coded_input->ReadVarint32(&size); +// +// char* text = new char[size + 1]; +// coded_input->ReadRaw(buffer, size); +// text[size] = '\0'; +// +// delete coded_input; +// delete raw_input; +// close(fd); +// +// cout << "Text is: " << text << endl; +// delete [] text; +// +// For those who are interested, varint encoding is defined as follows: +// +// The encoding operates on unsigned integers of up to 64 bits in length. +// Each byte of the encoded value has the format: +// * bits 0-6: Seven bits of the number being encoded. +// * bit 7: Zero if this is the last byte in the encoding (in which +// case all remaining bits of the number are zero) or 1 if +// more bytes follow. +// The first byte contains the least-significant 7 bits of the number, the +// second byte (if present) contains the next-least-significant 7 bits, +// and so on. So, the binary number 1011000101011 would be encoded in two +// bytes as "10101011 00101100". +// +// In theory, varint could be used to encode integers of any length. +// However, for practicality we set a limit at 64 bits. The maximum encoded +// length of a number is thus 10 bytes. + +#ifndef GOOGLE_PROTOBUF_IO_CODED_STREAM_H__ +#define GOOGLE_PROTOBUF_IO_CODED_STREAM_H__ + +#include +#ifdef _MSC_VER + #if defined(_M_IX86) && \ + !defined(PROTOBUF_DISABLE_LITTLE_ENDIAN_OPT_FOR_TEST) + #define PROTOBUF_LITTLE_ENDIAN 1 + #endif + #if _MSC_VER >= 1300 + // If MSVC has "/RTCc" set, it will complain about truncating casts at + // runtime. This file contains some intentional truncating casts. + #pragma runtime_checks("c", off) + #endif +#else + #include // __BYTE_ORDER + #if defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN && \ + !defined(PROTOBUF_DISABLE_LITTLE_ENDIAN_OPT_FOR_TEST) + #define PROTOBUF_LITTLE_ENDIAN 1 + #endif +#endif +#include + + +namespace google { +namespace protobuf { + +class DescriptorPool; +class MessageFactory; + +namespace io { + +// Defined in this file. +class CodedInputStream; +class CodedOutputStream; + +// Defined in other files. +class ZeroCopyInputStream; // zero_copy_stream.h +class ZeroCopyOutputStream; // zero_copy_stream.h + +// Class which reads and decodes binary data which is composed of varint- +// encoded integers and fixed-width pieces. Wraps a ZeroCopyInputStream. +// Most users will not need to deal with CodedInputStream. +// +// Most methods of CodedInputStream that return a bool return false if an +// underlying I/O error occurs or if the data is malformed. Once such a +// failure occurs, the CodedInputStream is broken and is no longer useful. +class LIBPROTOBUF_EXPORT CodedInputStream { + public: + // Create a CodedInputStream that reads from the given ZeroCopyInputStream. + explicit CodedInputStream(ZeroCopyInputStream* input); + + // Create a CodedInputStream that reads from the given flat array. This is + // faster than using an ArrayInputStream. PushLimit(size) is implied by + // this constructor. + explicit CodedInputStream(const uint8* buffer, int size); + + // Destroy the CodedInputStream and position the underlying + // ZeroCopyInputStream at the first unread byte. If an error occurred while + // reading (causing a method to return false), then the exact position of + // the input stream may be anywhere between the last value that was read + // successfully and the stream's byte limit. + ~CodedInputStream(); + + // Return true if this CodedInputStream reads from a flat array instead of + // a ZeroCopyInputStream. + inline bool IsFlat() const; + + // Skips a number of bytes. Returns false if an underlying read error + // occurs. + bool Skip(int count); + + // Sets *data to point directly at the unread part of the CodedInputStream's + // underlying buffer, and *size to the size of that buffer, but does not + // advance the stream's current position. This will always either produce + // a non-empty buffer or return false. If the caller consumes any of + // this data, it should then call Skip() to skip over the consumed bytes. + // This may be useful for implementing external fast parsing routines for + // types of data not covered by the CodedInputStream interface. + bool GetDirectBufferPointer(const void** data, int* size); + + // Like GetDirectBufferPointer, but this method is inlined, and does not + // attempt to Refresh() if the buffer is currently empty. + inline void GetDirectBufferPointerInline(const void** data, + int* size) GOOGLE_ATTRIBUTE_ALWAYS_INLINE; + + // Read raw bytes, copying them into the given buffer. + bool ReadRaw(void* buffer, int size); + + // Like ReadRaw, but reads into a string. + // + // Implementation Note: ReadString() grows the string gradually as it + // reads in the data, rather than allocating the entire requested size + // upfront. This prevents denial-of-service attacks in which a client + // could claim that a string is going to be MAX_INT bytes long in order to + // crash the server because it can't allocate this much space at once. + bool ReadString(string* buffer, int size); + // Like the above, with inlined optimizations. This should only be used + // by the protobuf implementation. + inline bool InternalReadStringInline(string* buffer, + int size) GOOGLE_ATTRIBUTE_ALWAYS_INLINE; + + + // Read a 32-bit little-endian integer. + bool ReadLittleEndian32(uint32* value); + // Read a 64-bit little-endian integer. + bool ReadLittleEndian64(uint64* value); + + // These methods read from an externally provided buffer. The caller is + // responsible for ensuring that the buffer has sufficient space. + // Read a 32-bit little-endian integer. + static const uint8* ReadLittleEndian32FromArray(const uint8* buffer, + uint32* value); + // Read a 64-bit little-endian integer. + static const uint8* ReadLittleEndian64FromArray(const uint8* buffer, + uint64* value); + + // Read an unsigned integer with Varint encoding, truncating to 32 bits. + // Reading a 32-bit value is equivalent to reading a 64-bit one and casting + // it to uint32, but may be more efficient. + bool ReadVarint32(uint32* value); + // Read an unsigned integer with Varint encoding. + bool ReadVarint64(uint64* value); + + // Read a tag. This calls ReadVarint32() and returns the result, or returns + // zero (which is not a valid tag) if ReadVarint32() fails. Also, it updates + // the last tag value, which can be checked with LastTagWas(). + // Always inline because this is only called in one place per parse loop + // but it is called for every iteration of said loop, so it should be fast. + // GCC doesn't want to inline this by default. + uint32 ReadTag() GOOGLE_ATTRIBUTE_ALWAYS_INLINE; + + // This usually a faster alternative to ReadTag() when cutoff is a manifest + // constant. It does particularly well for cutoff >= 127. The first part + // of the return value is the tag that was read, though it can also be 0 in + // the cases where ReadTag() would return 0. If the second part is true + // then the tag is known to be in [0, cutoff]. If not, the tag either is + // above cutoff or is 0. (There's intentional wiggle room when tag is 0, + // because that can arise in several ways, and for best performance we want + // to avoid an extra "is tag == 0?" check here.) + inline std::pair ReadTagWithCutoff(uint32 cutoff) + GOOGLE_ATTRIBUTE_ALWAYS_INLINE; + + // Usually returns true if calling ReadVarint32() now would produce the given + // value. Will always return false if ReadVarint32() would not return the + // given value. If ExpectTag() returns true, it also advances past + // the varint. For best performance, use a compile-time constant as the + // parameter. + // Always inline because this collapses to a small number of instructions + // when given a constant parameter, but GCC doesn't want to inline by default. + bool ExpectTag(uint32 expected) GOOGLE_ATTRIBUTE_ALWAYS_INLINE; + + // Like above, except this reads from the specified buffer. The caller is + // responsible for ensuring that the buffer is large enough to read a varint + // of the expected size. For best performance, use a compile-time constant as + // the expected tag parameter. + // + // Returns a pointer beyond the expected tag if it was found, or NULL if it + // was not. + static const uint8* ExpectTagFromArray( + const uint8* buffer, + uint32 expected) GOOGLE_ATTRIBUTE_ALWAYS_INLINE; + + // Usually returns true if no more bytes can be read. Always returns false + // if more bytes can be read. If ExpectAtEnd() returns true, a subsequent + // call to LastTagWas() will act as if ReadTag() had been called and returned + // zero, and ConsumedEntireMessage() will return true. + bool ExpectAtEnd(); + + // If the last call to ReadTag() or ReadTagWithCutoff() returned the + // given value, returns true. Otherwise, returns false; + // + // This is needed because parsers for some types of embedded messages + // (with field type TYPE_GROUP) don't actually know that they've reached the + // end of a message until they see an ENDGROUP tag, which was actually part + // of the enclosing message. The enclosing message would like to check that + // tag to make sure it had the right number, so it calls LastTagWas() on + // return from the embedded parser to check. + bool LastTagWas(uint32 expected); + + // When parsing message (but NOT a group), this method must be called + // immediately after MergeFromCodedStream() returns (if it returns true) + // to further verify that the message ended in a legitimate way. For + // example, this verifies that parsing did not end on an end-group tag. + // It also checks for some cases where, due to optimizations, + // MergeFromCodedStream() can incorrectly return true. + bool ConsumedEntireMessage(); + + // Limits ---------------------------------------------------------- + // Limits are used when parsing length-delimited embedded messages. + // After the message's length is read, PushLimit() is used to prevent + // the CodedInputStream from reading beyond that length. Once the + // embedded message has been parsed, PopLimit() is called to undo the + // limit. + + // Opaque type used with PushLimit() and PopLimit(). Do not modify + // values of this type yourself. The only reason that this isn't a + // struct with private internals is for efficiency. + typedef int Limit; + + // Places a limit on the number of bytes that the stream may read, + // starting from the current position. Once the stream hits this limit, + // it will act like the end of the input has been reached until PopLimit() + // is called. + // + // As the names imply, the stream conceptually has a stack of limits. The + // shortest limit on the stack is always enforced, even if it is not the + // top limit. + // + // The value returned by PushLimit() is opaque to the caller, and must + // be passed unchanged to the corresponding call to PopLimit(). + Limit PushLimit(int byte_limit); + + // Pops the last limit pushed by PushLimit(). The input must be the value + // returned by that call to PushLimit(). + void PopLimit(Limit limit); + + // Returns the number of bytes left until the nearest limit on the + // stack is hit, or -1 if no limits are in place. + int BytesUntilLimit() const; + + // Returns current position relative to the beginning of the input stream. + int CurrentPosition() const; + + // Total Bytes Limit ----------------------------------------------- + // To prevent malicious users from sending excessively large messages + // and causing integer overflows or memory exhaustion, CodedInputStream + // imposes a hard limit on the total number of bytes it will read. + + // Sets the maximum number of bytes that this CodedInputStream will read + // before refusing to continue. To prevent integer overflows in the + // protocol buffers implementation, as well as to prevent servers from + // allocating enormous amounts of memory to hold parsed messages, the + // maximum message length should be limited to the shortest length that + // will not harm usability. The theoretical shortest message that could + // cause integer overflows is 512MB. The default limit is 64MB. Apps + // should set shorter limits if possible. If warning_threshold is not -1, + // a warning will be printed to stderr after warning_threshold bytes are + // read. For backwards compatibility all negative values get squashed to -1, + // as other negative values might have special internal meanings. + // An error will always be printed to stderr if the limit is reached. + // + // This is unrelated to PushLimit()/PopLimit(). + // + // Hint: If you are reading this because your program is printing a + // warning about dangerously large protocol messages, you may be + // confused about what to do next. The best option is to change your + // design such that excessively large messages are not necessary. + // For example, try to design file formats to consist of many small + // messages rather than a single large one. If this is infeasible, + // you will need to increase the limit. Chances are, though, that + // your code never constructs a CodedInputStream on which the limit + // can be set. You probably parse messages by calling things like + // Message::ParseFromString(). In this case, you will need to change + // your code to instead construct some sort of ZeroCopyInputStream + // (e.g. an ArrayInputStream), construct a CodedInputStream around + // that, then call Message::ParseFromCodedStream() instead. Then + // you can adjust the limit. Yes, it's more work, but you're doing + // something unusual. + void SetTotalBytesLimit(int total_bytes_limit, int warning_threshold); + + // The Total Bytes Limit minus the Current Position, or -1 if there + // is no Total Bytes Limit. + int BytesUntilTotalBytesLimit() const; + + // Recursion Limit ------------------------------------------------- + // To prevent corrupt or malicious messages from causing stack overflows, + // we must keep track of the depth of recursion when parsing embedded + // messages and groups. CodedInputStream keeps track of this because it + // is the only object that is passed down the stack during parsing. + + // Sets the maximum recursion depth. The default is 100. + void SetRecursionLimit(int limit); + + + // Increments the current recursion depth. Returns true if the depth is + // under the limit, false if it has gone over. + bool IncrementRecursionDepth(); + + // Decrements the recursion depth. + void DecrementRecursionDepth(); + + // Extension Registry ---------------------------------------------- + // ADVANCED USAGE: 99.9% of people can ignore this section. + // + // By default, when parsing extensions, the parser looks for extension + // definitions in the pool which owns the outer message's Descriptor. + // However, you may call SetExtensionRegistry() to provide an alternative + // pool instead. This makes it possible, for example, to parse a message + // using a generated class, but represent some extensions using + // DynamicMessage. + + // Set the pool used to look up extensions. Most users do not need to call + // this as the correct pool will be chosen automatically. + // + // WARNING: It is very easy to misuse this. Carefully read the requirements + // below. Do not use this unless you are sure you need it. Almost no one + // does. + // + // Let's say you are parsing a message into message object m, and you want + // to take advantage of SetExtensionRegistry(). You must follow these + // requirements: + // + // The given DescriptorPool must contain m->GetDescriptor(). It is not + // sufficient for it to simply contain a descriptor that has the same name + // and content -- it must be the *exact object*. In other words: + // assert(pool->FindMessageTypeByName(m->GetDescriptor()->full_name()) == + // m->GetDescriptor()); + // There are two ways to satisfy this requirement: + // 1) Use m->GetDescriptor()->pool() as the pool. This is generally useless + // because this is the pool that would be used anyway if you didn't call + // SetExtensionRegistry() at all. + // 2) Use a DescriptorPool which has m->GetDescriptor()->pool() as an + // "underlay". Read the documentation for DescriptorPool for more + // information about underlays. + // + // You must also provide a MessageFactory. This factory will be used to + // construct Message objects representing extensions. The factory's + // GetPrototype() MUST return non-NULL for any Descriptor which can be found + // through the provided pool. + // + // If the provided factory might return instances of protocol-compiler- + // generated (i.e. compiled-in) types, or if the outer message object m is + // a generated type, then the given factory MUST have this property: If + // GetPrototype() is given a Descriptor which resides in + // DescriptorPool::generated_pool(), the factory MUST return the same + // prototype which MessageFactory::generated_factory() would return. That + // is, given a descriptor for a generated type, the factory must return an + // instance of the generated class (NOT DynamicMessage). However, when + // given a descriptor for a type that is NOT in generated_pool, the factory + // is free to return any implementation. + // + // The reason for this requirement is that generated sub-objects may be + // accessed via the standard (non-reflection) extension accessor methods, + // and these methods will down-cast the object to the generated class type. + // If the object is not actually of that type, the results would be undefined. + // On the other hand, if an extension is not compiled in, then there is no + // way the code could end up accessing it via the standard accessors -- the + // only way to access the extension is via reflection. When using reflection, + // DynamicMessage and generated messages are indistinguishable, so it's fine + // if these objects are represented using DynamicMessage. + // + // Using DynamicMessageFactory on which you have called + // SetDelegateToGeneratedFactory(true) should be sufficient to satisfy the + // above requirement. + // + // If either pool or factory is NULL, both must be NULL. + // + // Note that this feature is ignored when parsing "lite" messages as they do + // not have descriptors. + void SetExtensionRegistry(const DescriptorPool* pool, + MessageFactory* factory); + + // Get the DescriptorPool set via SetExtensionRegistry(), or NULL if no pool + // has been provided. + const DescriptorPool* GetExtensionPool(); + + // Get the MessageFactory set via SetExtensionRegistry(), or NULL if no + // factory has been provided. + MessageFactory* GetExtensionFactory(); + + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CodedInputStream); + + ZeroCopyInputStream* input_; + const uint8* buffer_; + const uint8* buffer_end_; // pointer to the end of the buffer. + int total_bytes_read_; // total bytes read from input_, including + // the current buffer + + // If total_bytes_read_ surpasses INT_MAX, we record the extra bytes here + // so that we can BackUp() on destruction. + int overflow_bytes_; + + // LastTagWas() stuff. + uint32 last_tag_; // result of last ReadTag() or ReadTagWithCutoff(). + + // This is set true by ReadTag{Fallback/Slow}() if it is called when exactly + // at EOF, or by ExpectAtEnd() when it returns true. This happens when we + // reach the end of a message and attempt to read another tag. + bool legitimate_message_end_; + + // See EnableAliasing(). + bool aliasing_enabled_; + + // Limits + Limit current_limit_; // if position = -1, no limit is applied + + // For simplicity, if the current buffer crosses a limit (either a normal + // limit created by PushLimit() or the total bytes limit), buffer_size_ + // only tracks the number of bytes before that limit. This field + // contains the number of bytes after it. Note that this implies that if + // buffer_size_ == 0 and buffer_size_after_limit_ > 0, we know we've + // hit a limit. However, if both are zero, it doesn't necessarily mean + // we aren't at a limit -- the buffer may have ended exactly at the limit. + int buffer_size_after_limit_; + + // Maximum number of bytes to read, period. This is unrelated to + // current_limit_. Set using SetTotalBytesLimit(). + int total_bytes_limit_; + + // If positive/0: Limit for bytes read after which a warning due to size + // should be logged. + // If -1: Printing of warning disabled. Can be set by client. + // If -2: Internal: Limit has been reached, print full size when destructing. + int total_bytes_warning_threshold_; + + // Current recursion depth, controlled by IncrementRecursionDepth() and + // DecrementRecursionDepth(). + int recursion_depth_; + // Recursion depth limit, set by SetRecursionLimit(). + int recursion_limit_; + + // See SetExtensionRegistry(). + const DescriptorPool* extension_pool_; + MessageFactory* extension_factory_; + + // Private member functions. + + // Advance the buffer by a given number of bytes. + void Advance(int amount); + + // Back up input_ to the current buffer position. + void BackUpInputToCurrentPosition(); + + // Recomputes the value of buffer_size_after_limit_. Must be called after + // current_limit_ or total_bytes_limit_ changes. + void RecomputeBufferLimits(); + + // Writes an error message saying that we hit total_bytes_limit_. + void PrintTotalBytesLimitError(); + + // Called when the buffer runs out to request more data. Implies an + // Advance(BufferSize()). + bool Refresh(); + + // When parsing varints, we optimize for the common case of small values, and + // then optimize for the case when the varint fits within the current buffer + // piece. The Fallback method is used when we can't use the one-byte + // optimization. The Slow method is yet another fallback when the buffer is + // not large enough. Making the slow path out-of-line speeds up the common + // case by 10-15%. The slow path is fairly uncommon: it only triggers when a + // message crosses multiple buffers. + bool ReadVarint32Fallback(uint32* value); + bool ReadVarint64Fallback(uint64* value); + bool ReadVarint32Slow(uint32* value); + bool ReadVarint64Slow(uint64* value); + bool ReadLittleEndian32Fallback(uint32* value); + bool ReadLittleEndian64Fallback(uint64* value); + // Fallback/slow methods for reading tags. These do not update last_tag_, + // but will set legitimate_message_end_ if we are at the end of the input + // stream. + uint32 ReadTagFallback(); + uint32 ReadTagSlow(); + bool ReadStringFallback(string* buffer, int size); + + // Return the size of the buffer. + int BufferSize() const; + + static const int kDefaultTotalBytesLimit = 64 << 20; // 64MB + + static const int kDefaultTotalBytesWarningThreshold = 32 << 20; // 32MB + + static int default_recursion_limit_; // 100 by default. +}; + +// Class which encodes and writes binary data which is composed of varint- +// encoded integers and fixed-width pieces. Wraps a ZeroCopyOutputStream. +// Most users will not need to deal with CodedOutputStream. +// +// Most methods of CodedOutputStream which return a bool return false if an +// underlying I/O error occurs. Once such a failure occurs, the +// CodedOutputStream is broken and is no longer useful. The Write* methods do +// not return the stream status, but will invalidate the stream if an error +// occurs. The client can probe HadError() to determine the status. +// +// Note that every method of CodedOutputStream which writes some data has +// a corresponding static "ToArray" version. These versions write directly +// to the provided buffer, returning a pointer past the last written byte. +// They require that the buffer has sufficient capacity for the encoded data. +// This allows an optimization where we check if an output stream has enough +// space for an entire message before we start writing and, if there is, we +// call only the ToArray methods to avoid doing bound checks for each +// individual value. +// i.e., in the example above: +// +// CodedOutputStream coded_output = new CodedOutputStream(raw_output); +// int magic_number = 1234; +// char text[] = "Hello world!"; +// +// int coded_size = sizeof(magic_number) + +// CodedOutputStream::VarintSize32(strlen(text)) + +// strlen(text); +// +// uint8* buffer = +// coded_output->GetDirectBufferForNBytesAndAdvance(coded_size); +// if (buffer != NULL) { +// // The output stream has enough space in the buffer: write directly to +// // the array. +// buffer = CodedOutputStream::WriteLittleEndian32ToArray(magic_number, +// buffer); +// buffer = CodedOutputStream::WriteVarint32ToArray(strlen(text), buffer); +// buffer = CodedOutputStream::WriteRawToArray(text, strlen(text), buffer); +// } else { +// // Make bound-checked writes, which will ask the underlying stream for +// // more space as needed. +// coded_output->WriteLittleEndian32(magic_number); +// coded_output->WriteVarint32(strlen(text)); +// coded_output->WriteRaw(text, strlen(text)); +// } +// +// delete coded_output; +class LIBPROTOBUF_EXPORT CodedOutputStream { + public: + // Create an CodedOutputStream that writes to the given ZeroCopyOutputStream. + explicit CodedOutputStream(ZeroCopyOutputStream* output); + + // Destroy the CodedOutputStream and position the underlying + // ZeroCopyOutputStream immediately after the last byte written. + ~CodedOutputStream(); + + // Skips a number of bytes, leaving the bytes unmodified in the underlying + // buffer. Returns false if an underlying write error occurs. This is + // mainly useful with GetDirectBufferPointer(). + bool Skip(int count); + + // Sets *data to point directly at the unwritten part of the + // CodedOutputStream's underlying buffer, and *size to the size of that + // buffer, but does not advance the stream's current position. This will + // always either produce a non-empty buffer or return false. If the caller + // writes any data to this buffer, it should then call Skip() to skip over + // the consumed bytes. This may be useful for implementing external fast + // serialization routines for types of data not covered by the + // CodedOutputStream interface. + bool GetDirectBufferPointer(void** data, int* size); + + // If there are at least "size" bytes available in the current buffer, + // returns a pointer directly into the buffer and advances over these bytes. + // The caller may then write directly into this buffer (e.g. using the + // *ToArray static methods) rather than go through CodedOutputStream. If + // there are not enough bytes available, returns NULL. The return pointer is + // invalidated as soon as any other non-const method of CodedOutputStream + // is called. + inline uint8* GetDirectBufferForNBytesAndAdvance(int size); + + // Write raw bytes, copying them from the given buffer. + void WriteRaw(const void* buffer, int size); + // Like WriteRaw() but will try to write aliased data if aliasing is + // turned on. + void WriteRawMaybeAliased(const void* data, int size); + // Like WriteRaw() but writing directly to the target array. + // This is _not_ inlined, as the compiler often optimizes memcpy into inline + // copy loops. Since this gets called by every field with string or bytes + // type, inlining may lead to a significant amount of code bloat, with only a + // minor performance gain. + static uint8* WriteRawToArray(const void* buffer, int size, uint8* target); + + // Equivalent to WriteRaw(str.data(), str.size()). + void WriteString(const string& str); + // Like WriteString() but writing directly to the target array. + static uint8* WriteStringToArray(const string& str, uint8* target); + // Write the varint-encoded size of str followed by str. + static uint8* WriteStringWithSizeToArray(const string& str, uint8* target); + + + // Instructs the CodedOutputStream to allow the underlying + // ZeroCopyOutputStream to hold pointers to the original structure instead of + // copying, if it supports it (i.e. output->AllowsAliasing() is true). If the + // underlying stream does not support aliasing, then enabling it has no + // affect. For now, this only affects the behavior of + // WriteRawMaybeAliased(). + // + // NOTE: It is caller's responsibility to ensure that the chunk of memory + // remains live until all of the data has been consumed from the stream. + void EnableAliasing(bool enabled); + + // Write a 32-bit little-endian integer. + void WriteLittleEndian32(uint32 value); + // Like WriteLittleEndian32() but writing directly to the target array. + static uint8* WriteLittleEndian32ToArray(uint32 value, uint8* target); + // Write a 64-bit little-endian integer. + void WriteLittleEndian64(uint64 value); + // Like WriteLittleEndian64() but writing directly to the target array. + static uint8* WriteLittleEndian64ToArray(uint64 value, uint8* target); + + // Write an unsigned integer with Varint encoding. Writing a 32-bit value + // is equivalent to casting it to uint64 and writing it as a 64-bit value, + // but may be more efficient. + void WriteVarint32(uint32 value); + // Like WriteVarint32() but writing directly to the target array. + static uint8* WriteVarint32ToArray(uint32 value, uint8* target); + // Write an unsigned integer with Varint encoding. + void WriteVarint64(uint64 value); + // Like WriteVarint64() but writing directly to the target array. + static uint8* WriteVarint64ToArray(uint64 value, uint8* target); + + // Equivalent to WriteVarint32() except when the value is negative, + // in which case it must be sign-extended to a full 10 bytes. + void WriteVarint32SignExtended(int32 value); + // Like WriteVarint32SignExtended() but writing directly to the target array. + static uint8* WriteVarint32SignExtendedToArray(int32 value, uint8* target); + + // This is identical to WriteVarint32(), but optimized for writing tags. + // In particular, if the input is a compile-time constant, this method + // compiles down to a couple instructions. + // Always inline because otherwise the aformentioned optimization can't work, + // but GCC by default doesn't want to inline this. + void WriteTag(uint32 value); + // Like WriteTag() but writing directly to the target array. + static uint8* WriteTagToArray( + uint32 value, uint8* target) GOOGLE_ATTRIBUTE_ALWAYS_INLINE; + + // Returns the number of bytes needed to encode the given value as a varint. + static int VarintSize32(uint32 value); + // Returns the number of bytes needed to encode the given value as a varint. + static int VarintSize64(uint64 value); + + // If negative, 10 bytes. Otheriwse, same as VarintSize32(). + static int VarintSize32SignExtended(int32 value); + + // Compile-time equivalent of VarintSize32(). + template + struct StaticVarintSize32 { + static const int value = + (Value < (1 << 7)) + ? 1 + : (Value < (1 << 14)) + ? 2 + : (Value < (1 << 21)) + ? 3 + : (Value < (1 << 28)) + ? 4 + : 5; + }; + + // Returns the total number of bytes written since this object was created. + inline int ByteCount() const; + + // Returns true if there was an underlying I/O error since this object was + // created. + bool HadError() const { return had_error_; } + + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CodedOutputStream); + + ZeroCopyOutputStream* output_; + uint8* buffer_; + int buffer_size_; + int total_bytes_; // Sum of sizes of all buffers seen so far. + bool had_error_; // Whether an error occurred during output. + bool aliasing_enabled_; // See EnableAliasing(). + + // Advance the buffer by a given number of bytes. + void Advance(int amount); + + // Called when the buffer runs out to request more data. Implies an + // Advance(buffer_size_). + bool Refresh(); + + // Like WriteRaw() but may avoid copying if the underlying + // ZeroCopyOutputStream supports it. + void WriteAliasedRaw(const void* buffer, int size); + + static uint8* WriteVarint32FallbackToArray(uint32 value, uint8* target); + + // Always-inlined versions of WriteVarint* functions so that code can be + // reused, while still controlling size. For instance, WriteVarint32ToArray() + // should not directly call this: since it is inlined itself, doing so + // would greatly increase the size of generated code. Instead, it should call + // WriteVarint32FallbackToArray. Meanwhile, WriteVarint32() is already + // out-of-line, so it should just invoke this directly to avoid any extra + // function call overhead. + static uint8* WriteVarint32FallbackToArrayInline( + uint32 value, uint8* target) GOOGLE_ATTRIBUTE_ALWAYS_INLINE; + static uint8* WriteVarint64ToArrayInline( + uint64 value, uint8* target) GOOGLE_ATTRIBUTE_ALWAYS_INLINE; + + static int VarintSize32Fallback(uint32 value); +}; + +// inline methods ==================================================== +// The vast majority of varints are only one byte. These inline +// methods optimize for that case. + +inline bool CodedInputStream::ReadVarint32(uint32* value) { + if (GOOGLE_PREDICT_TRUE(buffer_ < buffer_end_) && *buffer_ < 0x80) { + *value = *buffer_; + Advance(1); + return true; + } else { + return ReadVarint32Fallback(value); + } +} + +inline bool CodedInputStream::ReadVarint64(uint64* value) { + if (GOOGLE_PREDICT_TRUE(buffer_ < buffer_end_) && *buffer_ < 0x80) { + *value = *buffer_; + Advance(1); + return true; + } else { + return ReadVarint64Fallback(value); + } +} + +// static +inline const uint8* CodedInputStream::ReadLittleEndian32FromArray( + const uint8* buffer, + uint32* value) { +#if defined(PROTOBUF_LITTLE_ENDIAN) + memcpy(value, buffer, sizeof(*value)); + return buffer + sizeof(*value); +#else + *value = (static_cast(buffer[0]) ) | + (static_cast(buffer[1]) << 8) | + (static_cast(buffer[2]) << 16) | + (static_cast(buffer[3]) << 24); + return buffer + sizeof(*value); +#endif +} +// static +inline const uint8* CodedInputStream::ReadLittleEndian64FromArray( + const uint8* buffer, + uint64* value) { +#if defined(PROTOBUF_LITTLE_ENDIAN) + memcpy(value, buffer, sizeof(*value)); + return buffer + sizeof(*value); +#else + uint32 part0 = (static_cast(buffer[0]) ) | + (static_cast(buffer[1]) << 8) | + (static_cast(buffer[2]) << 16) | + (static_cast(buffer[3]) << 24); + uint32 part1 = (static_cast(buffer[4]) ) | + (static_cast(buffer[5]) << 8) | + (static_cast(buffer[6]) << 16) | + (static_cast(buffer[7]) << 24); + *value = static_cast(part0) | + (static_cast(part1) << 32); + return buffer + sizeof(*value); +#endif +} + +inline bool CodedInputStream::ReadLittleEndian32(uint32* value) { +#if defined(PROTOBUF_LITTLE_ENDIAN) + if (GOOGLE_PREDICT_TRUE(BufferSize() >= static_cast(sizeof(*value)))) { + memcpy(value, buffer_, sizeof(*value)); + Advance(sizeof(*value)); + return true; + } else { + return ReadLittleEndian32Fallback(value); + } +#else + return ReadLittleEndian32Fallback(value); +#endif +} + +inline bool CodedInputStream::ReadLittleEndian64(uint64* value) { +#if defined(PROTOBUF_LITTLE_ENDIAN) + if (GOOGLE_PREDICT_TRUE(BufferSize() >= static_cast(sizeof(*value)))) { + memcpy(value, buffer_, sizeof(*value)); + Advance(sizeof(*value)); + return true; + } else { + return ReadLittleEndian64Fallback(value); + } +#else + return ReadLittleEndian64Fallback(value); +#endif +} + +inline uint32 CodedInputStream::ReadTag() { + if (GOOGLE_PREDICT_TRUE(buffer_ < buffer_end_) && buffer_[0] < 0x80) { + last_tag_ = buffer_[0]; + Advance(1); + return last_tag_; + } else { + last_tag_ = ReadTagFallback(); + return last_tag_; + } +} + +inline std::pair CodedInputStream::ReadTagWithCutoff( + uint32 cutoff) { + // In performance-sensitive code we can expect cutoff to be a compile-time + // constant, and things like "cutoff >= kMax1ByteVarint" to be evaluated at + // compile time. + if (GOOGLE_PREDICT_TRUE(buffer_ < buffer_end_)) { + // Hot case: buffer_ non_empty, buffer_[0] in [1, 128). + // TODO(gpike): Is it worth rearranging this? E.g., if the number of fields + // is large enough then is it better to check for the two-byte case first? + if (static_cast(buffer_[0]) > 0) { + const uint32 kMax1ByteVarint = 0x7f; + uint32 tag = last_tag_ = buffer_[0]; + Advance(1); + return make_pair(tag, cutoff >= kMax1ByteVarint || tag <= cutoff); + } + // Other hot case: cutoff >= 0x80, buffer_ has at least two bytes available, + // and tag is two bytes. The latter is tested by bitwise-and-not of the + // first byte and the second byte. + if (cutoff >= 0x80 && + GOOGLE_PREDICT_TRUE(buffer_ + 1 < buffer_end_) && + GOOGLE_PREDICT_TRUE((buffer_[0] & ~buffer_[1]) >= 0x80)) { + const uint32 kMax2ByteVarint = (0x7f << 7) + 0x7f; + uint32 tag = last_tag_ = (1u << 7) * buffer_[1] + (buffer_[0] - 0x80); + Advance(2); + // It might make sense to test for tag == 0 now, but it is so rare that + // that we don't bother. A varint-encoded 0 should be one byte unless + // the encoder lost its mind. The second part of the return value of + // this function is allowed to be either true or false if the tag is 0, + // so we don't have to check for tag == 0. We may need to check whether + // it exceeds cutoff. + bool at_or_below_cutoff = cutoff >= kMax2ByteVarint || tag <= cutoff; + return make_pair(tag, at_or_below_cutoff); + } + } + // Slow path + last_tag_ = ReadTagFallback(); + return make_pair(last_tag_, static_cast(last_tag_ - 1) < cutoff); +} + +inline bool CodedInputStream::LastTagWas(uint32 expected) { + return last_tag_ == expected; +} + +inline bool CodedInputStream::ConsumedEntireMessage() { + return legitimate_message_end_; +} + +inline bool CodedInputStream::ExpectTag(uint32 expected) { + if (expected < (1 << 7)) { + if (GOOGLE_PREDICT_TRUE(buffer_ < buffer_end_) && buffer_[0] == expected) { + Advance(1); + return true; + } else { + return false; + } + } else if (expected < (1 << 14)) { + if (GOOGLE_PREDICT_TRUE(BufferSize() >= 2) && + buffer_[0] == static_cast(expected | 0x80) && + buffer_[1] == static_cast(expected >> 7)) { + Advance(2); + return true; + } else { + return false; + } + } else { + // Don't bother optimizing for larger values. + return false; + } +} + +inline const uint8* CodedInputStream::ExpectTagFromArray( + const uint8* buffer, uint32 expected) { + if (expected < (1 << 7)) { + if (buffer[0] == expected) { + return buffer + 1; + } + } else if (expected < (1 << 14)) { + if (buffer[0] == static_cast(expected | 0x80) && + buffer[1] == static_cast(expected >> 7)) { + return buffer + 2; + } + } + return NULL; +} + +inline void CodedInputStream::GetDirectBufferPointerInline(const void** data, + int* size) { + *data = buffer_; + *size = buffer_end_ - buffer_; +} + +inline bool CodedInputStream::ExpectAtEnd() { + // If we are at a limit we know no more bytes can be read. Otherwise, it's + // hard to say without calling Refresh(), and we'd rather not do that. + + if (buffer_ == buffer_end_ && + ((buffer_size_after_limit_ != 0) || + (total_bytes_read_ == current_limit_))) { + last_tag_ = 0; // Pretend we called ReadTag()... + legitimate_message_end_ = true; // ... and it hit EOF. + return true; + } else { + return false; + } +} + +inline int CodedInputStream::CurrentPosition() const { + return total_bytes_read_ - (BufferSize() + buffer_size_after_limit_); +} + +inline uint8* CodedOutputStream::GetDirectBufferForNBytesAndAdvance(int size) { + if (buffer_size_ < size) { + return NULL; + } else { + uint8* result = buffer_; + Advance(size); + return result; + } +} + +inline uint8* CodedOutputStream::WriteVarint32ToArray(uint32 value, + uint8* target) { + if (value < 0x80) { + *target = value; + return target + 1; + } else { + return WriteVarint32FallbackToArray(value, target); + } +} + +inline void CodedOutputStream::WriteVarint32SignExtended(int32 value) { + if (value < 0) { + WriteVarint64(static_cast(value)); + } else { + WriteVarint32(static_cast(value)); + } +} + +inline uint8* CodedOutputStream::WriteVarint32SignExtendedToArray( + int32 value, uint8* target) { + if (value < 0) { + return WriteVarint64ToArray(static_cast(value), target); + } else { + return WriteVarint32ToArray(static_cast(value), target); + } +} + +inline uint8* CodedOutputStream::WriteLittleEndian32ToArray(uint32 value, + uint8* target) { +#if defined(PROTOBUF_LITTLE_ENDIAN) + memcpy(target, &value, sizeof(value)); +#else + target[0] = static_cast(value); + target[1] = static_cast(value >> 8); + target[2] = static_cast(value >> 16); + target[3] = static_cast(value >> 24); +#endif + return target + sizeof(value); +} + +inline uint8* CodedOutputStream::WriteLittleEndian64ToArray(uint64 value, + uint8* target) { +#if defined(PROTOBUF_LITTLE_ENDIAN) + memcpy(target, &value, sizeof(value)); +#else + uint32 part0 = static_cast(value); + uint32 part1 = static_cast(value >> 32); + + target[0] = static_cast(part0); + target[1] = static_cast(part0 >> 8); + target[2] = static_cast(part0 >> 16); + target[3] = static_cast(part0 >> 24); + target[4] = static_cast(part1); + target[5] = static_cast(part1 >> 8); + target[6] = static_cast(part1 >> 16); + target[7] = static_cast(part1 >> 24); +#endif + return target + sizeof(value); +} + +inline void CodedOutputStream::WriteTag(uint32 value) { + WriteVarint32(value); +} + +inline uint8* CodedOutputStream::WriteTagToArray( + uint32 value, uint8* target) { + if (value < (1 << 7)) { + target[0] = value; + return target + 1; + } else if (value < (1 << 14)) { + target[0] = static_cast(value | 0x80); + target[1] = static_cast(value >> 7); + return target + 2; + } else { + return WriteVarint32FallbackToArray(value, target); + } +} + +inline int CodedOutputStream::VarintSize32(uint32 value) { + if (value < (1 << 7)) { + return 1; + } else { + return VarintSize32Fallback(value); + } +} + +inline int CodedOutputStream::VarintSize32SignExtended(int32 value) { + if (value < 0) { + return 10; // TODO(kenton): Make this a symbolic constant. + } else { + return VarintSize32(static_cast(value)); + } +} + +inline void CodedOutputStream::WriteString(const string& str) { + WriteRaw(str.data(), static_cast(str.size())); +} + +inline void CodedOutputStream::WriteRawMaybeAliased( + const void* data, int size) { + if (aliasing_enabled_) { + WriteAliasedRaw(data, size); + } else { + WriteRaw(data, size); + } +} + +inline uint8* CodedOutputStream::WriteStringToArray( + const string& str, uint8* target) { + return WriteRawToArray(str.data(), static_cast(str.size()), target); +} + +inline int CodedOutputStream::ByteCount() const { + return total_bytes_ - buffer_size_; +} + +inline void CodedInputStream::Advance(int amount) { + buffer_ += amount; +} + +inline void CodedOutputStream::Advance(int amount) { + buffer_ += amount; + buffer_size_ -= amount; +} + +inline void CodedInputStream::SetRecursionLimit(int limit) { + recursion_limit_ = limit; +} + +inline bool CodedInputStream::IncrementRecursionDepth() { + ++recursion_depth_; + return recursion_depth_ <= recursion_limit_; +} + +inline void CodedInputStream::DecrementRecursionDepth() { + if (recursion_depth_ > 0) --recursion_depth_; +} + +inline void CodedInputStream::SetExtensionRegistry(const DescriptorPool* pool, + MessageFactory* factory) { + extension_pool_ = pool; + extension_factory_ = factory; +} + +inline const DescriptorPool* CodedInputStream::GetExtensionPool() { + return extension_pool_; +} + +inline MessageFactory* CodedInputStream::GetExtensionFactory() { + return extension_factory_; +} + +inline int CodedInputStream::BufferSize() const { + return buffer_end_ - buffer_; +} + +inline CodedInputStream::CodedInputStream(ZeroCopyInputStream* input) + : input_(input), + buffer_(NULL), + buffer_end_(NULL), + total_bytes_read_(0), + overflow_bytes_(0), + last_tag_(0), + legitimate_message_end_(false), + aliasing_enabled_(false), + current_limit_(kint32max), + buffer_size_after_limit_(0), + total_bytes_limit_(kDefaultTotalBytesLimit), + total_bytes_warning_threshold_(kDefaultTotalBytesWarningThreshold), + recursion_depth_(0), + recursion_limit_(default_recursion_limit_), + extension_pool_(NULL), + extension_factory_(NULL) { + // Eagerly Refresh() so buffer space is immediately available. + Refresh(); +} + +inline CodedInputStream::CodedInputStream(const uint8* buffer, int size) + : input_(NULL), + buffer_(buffer), + buffer_end_(buffer + size), + total_bytes_read_(size), + overflow_bytes_(0), + last_tag_(0), + legitimate_message_end_(false), + aliasing_enabled_(false), + current_limit_(size), + buffer_size_after_limit_(0), + total_bytes_limit_(kDefaultTotalBytesLimit), + total_bytes_warning_threshold_(kDefaultTotalBytesWarningThreshold), + recursion_depth_(0), + recursion_limit_(default_recursion_limit_), + extension_pool_(NULL), + extension_factory_(NULL) { + // Note that setting current_limit_ == size is important to prevent some + // code paths from trying to access input_ and segfaulting. +} + +inline bool CodedInputStream::IsFlat() const { + return input_ == NULL; +} + +} // namespace io +} // namespace protobuf + + +#if defined(_MSC_VER) && _MSC_VER >= 1300 + #pragma runtime_checks("c", restore) +#endif // _MSC_VER + +} // namespace google +#endif // GOOGLE_PROTOBUF_IO_CODED_STREAM_H__ diff --git a/kortex_gazebo/include/google/protobuf/io/gzip_stream.h b/kortex_gazebo/include/google/protobuf/io/gzip_stream.h new file mode 100644 index 00000000..c7ccc260 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/io/gzip_stream.h @@ -0,0 +1,209 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: brianolson@google.com (Brian Olson) +// +// This file contains the definition for classes GzipInputStream and +// GzipOutputStream. +// +// GzipInputStream decompresses data from an underlying +// ZeroCopyInputStream and provides the decompressed data as a +// ZeroCopyInputStream. +// +// GzipOutputStream is an ZeroCopyOutputStream that compresses data to +// an underlying ZeroCopyOutputStream. + +#ifndef GOOGLE_PROTOBUF_IO_GZIP_STREAM_H__ +#define GOOGLE_PROTOBUF_IO_GZIP_STREAM_H__ + +#include + +#include +#include + +namespace google { +namespace protobuf { +namespace io { + +// A ZeroCopyInputStream that reads compressed data through zlib +class LIBPROTOBUF_EXPORT GzipInputStream : public ZeroCopyInputStream { + public: + // Format key for constructor + enum Format { + // zlib will autodetect gzip header or deflate stream + AUTO = 0, + + // GZIP streams have some extra header data for file attributes. + GZIP = 1, + + // Simpler zlib stream format. + ZLIB = 2, + }; + + // buffer_size and format may be -1 for default of 64kB and GZIP format + explicit GzipInputStream( + ZeroCopyInputStream* sub_stream, + Format format = AUTO, + int buffer_size = -1); + virtual ~GzipInputStream(); + + // Return last error message or NULL if no error. + inline const char* ZlibErrorMessage() const { + return zcontext_.msg; + } + inline int ZlibErrorCode() const { + return zerror_; + } + + // implements ZeroCopyInputStream ---------------------------------- + bool Next(const void** data, int* size); + void BackUp(int count); + bool Skip(int count); + int64 ByteCount() const; + + private: + Format format_; + + ZeroCopyInputStream* sub_stream_; + + z_stream zcontext_; + int zerror_; + + void* output_buffer_; + void* output_position_; + size_t output_buffer_length_; + + int Inflate(int flush); + void DoNextOutput(const void** data, int* size); + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(GzipInputStream); +}; + + +class LIBPROTOBUF_EXPORT GzipOutputStream : public ZeroCopyOutputStream { + public: + // Format key for constructor + enum Format { + // GZIP streams have some extra header data for file attributes. + GZIP = 1, + + // Simpler zlib stream format. + ZLIB = 2, + }; + + struct Options { + // Defaults to GZIP. + Format format; + + // What size buffer to use internally. Defaults to 64kB. + int buffer_size; + + // A number between 0 and 9, where 0 is no compression and 9 is best + // compression. Defaults to Z_DEFAULT_COMPRESSION (see zlib.h). + int compression_level; + + // Defaults to Z_DEFAULT_STRATEGY. Can also be set to Z_FILTERED, + // Z_HUFFMAN_ONLY, or Z_RLE. See the documentation for deflateInit2 in + // zlib.h for definitions of these constants. + int compression_strategy; + + Options(); // Initializes with default values. + }; + + // Create a GzipOutputStream with default options. + explicit GzipOutputStream(ZeroCopyOutputStream* sub_stream); + + // Create a GzipOutputStream with the given options. + GzipOutputStream( + ZeroCopyOutputStream* sub_stream, + const Options& options); + + virtual ~GzipOutputStream(); + + // Return last error message or NULL if no error. + inline const char* ZlibErrorMessage() const { + return zcontext_.msg; + } + inline int ZlibErrorCode() const { + return zerror_; + } + + // Flushes data written so far to zipped data in the underlying stream. + // It is the caller's responsibility to flush the underlying stream if + // necessary. + // Compression may be less efficient stopping and starting around flushes. + // Returns true if no error. + // + // Please ensure that block size is > 6. Here is an excerpt from the zlib + // doc that explains why: + // + // In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that avail_out + // is greater than six to avoid repeated flush markers due to + // avail_out == 0 on return. + bool Flush(); + + // Writes out all data and closes the gzip stream. + // It is the caller's responsibility to close the underlying stream if + // necessary. + // Returns true if no error. + bool Close(); + + // implements ZeroCopyOutputStream --------------------------------- + bool Next(void** data, int* size); + void BackUp(int count); + int64 ByteCount() const; + + private: + ZeroCopyOutputStream* sub_stream_; + // Result from calling Next() on sub_stream_ + void* sub_data_; + int sub_data_size_; + + z_stream zcontext_; + int zerror_; + void* input_buffer_; + size_t input_buffer_length_; + + // Shared constructor code. + void Init(ZeroCopyOutputStream* sub_stream, const Options& options); + + // Do some compression. + // Takes zlib flush mode. + // Returns zlib error code. + int Deflate(int flush); + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(GzipOutputStream); +}; + +} // namespace io +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_IO_GZIP_STREAM_H__ diff --git a/kortex_gazebo/include/google/protobuf/io/printer.h b/kortex_gazebo/include/google/protobuf/io/printer.h new file mode 100644 index 00000000..f06cbf2f --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/io/printer.h @@ -0,0 +1,136 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// Utility class for writing text to a ZeroCopyOutputStream. + +#ifndef GOOGLE_PROTOBUF_IO_PRINTER_H__ +#define GOOGLE_PROTOBUF_IO_PRINTER_H__ + +#include +#include +#include + +namespace google { +namespace protobuf { +namespace io { + +class ZeroCopyOutputStream; // zero_copy_stream.h + +// This simple utility class assists in code generation. It basically +// allows the caller to define a set of variables and then output some +// text with variable substitutions. Example usage: +// +// Printer printer(output, '$'); +// map vars; +// vars["name"] = "Bob"; +// printer.Print(vars, "My name is $name$."); +// +// The above writes "My name is Bob." to the output stream. +// +// Printer aggressively enforces correct usage, crashing (with assert failures) +// in the case of undefined variables in debug builds. This helps greatly in +// debugging code which uses it. +class LIBPROTOBUF_EXPORT Printer { + public: + // Create a printer that writes text to the given output stream. Use the + // given character as the delimiter for variables. + Printer(ZeroCopyOutputStream* output, char variable_delimiter); + ~Printer(); + + // Print some text after applying variable substitutions. If a particular + // variable in the text is not defined, this will crash. Variables to be + // substituted are identified by their names surrounded by delimiter + // characters (as given to the constructor). The variable bindings are + // defined by the given map. + void Print(const map& variables, const char* text); + + // Like the first Print(), except the substitutions are given as parameters. + void Print(const char* text); + // Like the first Print(), except the substitutions are given as parameters. + void Print(const char* text, const char* variable, const string& value); + // Like the first Print(), except the substitutions are given as parameters. + void Print(const char* text, const char* variable1, const string& value1, + const char* variable2, const string& value2); + // Like the first Print(), except the substitutions are given as parameters. + void Print(const char* text, const char* variable1, const string& value1, + const char* variable2, const string& value2, + const char* variable3, const string& value3); + // TODO(kenton): Overloaded versions with more variables? Three seems + // to be enough. + + // Indent text by two spaces. After calling Indent(), two spaces will be + // inserted at the beginning of each line of text. Indent() may be called + // multiple times to produce deeper indents. + void Indent(); + + // Reduces the current indent level by two spaces, or crashes if the indent + // level is zero. + void Outdent(); + + // Write a string to the output buffer. + // This method does not look for newlines to add indentation. + void PrintRaw(const string& data); + + // Write a zero-delimited string to output buffer. + // This method does not look for newlines to add indentation. + void PrintRaw(const char* data); + + // Write some bytes to the output buffer. + // This method does not look for newlines to add indentation. + void WriteRaw(const char* data, int size); + + // True if any write to the underlying stream failed. (We don't just + // crash in this case because this is an I/O failure, not a programming + // error.) + bool failed() const { return failed_; } + + private: + const char variable_delimiter_; + + ZeroCopyOutputStream* const output_; + char* buffer_; + int buffer_size_; + + string indent_; + bool at_start_of_line_; + bool failed_; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Printer); +}; + +} // namespace io +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_IO_PRINTER_H__ diff --git a/kortex_gazebo/include/google/protobuf/io/strtod.h b/kortex_gazebo/include/google/protobuf/io/strtod.h new file mode 100644 index 00000000..c2efc8d3 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/io/strtod.h @@ -0,0 +1,50 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// A locale-independent version of strtod(), used to parse floating +// point default values in .proto files, where the decimal separator +// is always a dot. + +#ifndef GOOGLE_PROTOBUF_IO_STRTOD_H__ +#define GOOGLE_PROTOBUF_IO_STRTOD_H__ + +namespace google { +namespace protobuf { +namespace io { + +// A locale-independent version of the standard strtod(), which always +// uses a dot as the decimal separator. +double NoLocaleStrtod(const char* str, char** endptr); + +} // namespace io +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_IO_STRTOD_H__ diff --git a/kortex_gazebo/include/google/protobuf/io/tokenizer.h b/kortex_gazebo/include/google/protobuf/io/tokenizer.h new file mode 100644 index 00000000..8c6220a1 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/io/tokenizer.h @@ -0,0 +1,402 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// Class for parsing tokenized text from a ZeroCopyInputStream. + +#ifndef GOOGLE_PROTOBUF_IO_TOKENIZER_H__ +#define GOOGLE_PROTOBUF_IO_TOKENIZER_H__ + +#include +#include +#include + +namespace google { +namespace protobuf { +namespace io { + +class ZeroCopyInputStream; // zero_copy_stream.h + +// Defined in this file. +class ErrorCollector; +class Tokenizer; + +// Abstract interface for an object which collects the errors that occur +// during parsing. A typical implementation might simply print the errors +// to stdout. +class LIBPROTOBUF_EXPORT ErrorCollector { + public: + inline ErrorCollector() {} + virtual ~ErrorCollector(); + + // Indicates that there was an error in the input at the given line and + // column numbers. The numbers are zero-based, so you may want to add + // 1 to each before printing them. + virtual void AddError(int line, int column, const string& message) = 0; + + // Indicates that there was a warning in the input at the given line and + // column numbers. The numbers are zero-based, so you may want to add + // 1 to each before printing them. + virtual void AddWarning(int /* line */, int /* column */, + const string& /* message */) { } + + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ErrorCollector); +}; + +// This class converts a stream of raw text into a stream of tokens for +// the protocol definition parser to parse. The tokens recognized are +// similar to those that make up the C language; see the TokenType enum for +// precise descriptions. Whitespace and comments are skipped. By default, +// C- and C++-style comments are recognized, but other styles can be used by +// calling set_comment_style(). +class LIBPROTOBUF_EXPORT Tokenizer { + public: + // Construct a Tokenizer that reads and tokenizes text from the given + // input stream and writes errors to the given error_collector. + // The caller keeps ownership of input and error_collector. + Tokenizer(ZeroCopyInputStream* input, ErrorCollector* error_collector); + ~Tokenizer(); + + enum TokenType { + TYPE_START, // Next() has not yet been called. + TYPE_END, // End of input reached. "text" is empty. + + TYPE_IDENTIFIER, // A sequence of letters, digits, and underscores, not + // starting with a digit. It is an error for a number + // to be followed by an identifier with no space in + // between. + TYPE_INTEGER, // A sequence of digits representing an integer. Normally + // the digits are decimal, but a prefix of "0x" indicates + // a hex number and a leading zero indicates octal, just + // like with C numeric literals. A leading negative sign + // is NOT included in the token; it's up to the parser to + // interpret the unary minus operator on its own. + TYPE_FLOAT, // A floating point literal, with a fractional part and/or + // an exponent. Always in decimal. Again, never + // negative. + TYPE_STRING, // A quoted sequence of escaped characters. Either single + // or double quotes can be used, but they must match. + // A string literal cannot cross a line break. + TYPE_SYMBOL, // Any other printable character, like '!' or '+'. + // Symbols are always a single character, so "!+$%" is + // four tokens. + }; + + // Structure representing a token read from the token stream. + struct Token { + TokenType type; + string text; // The exact text of the token as it appeared in + // the input. e.g. tokens of TYPE_STRING will still + // be escaped and in quotes. + + // "line" and "column" specify the position of the first character of + // the token within the input stream. They are zero-based. + int line; + int column; + int end_column; + }; + + // Get the current token. This is updated when Next() is called. Before + // the first call to Next(), current() has type TYPE_START and no contents. + const Token& current(); + + // Return the previous token -- i.e. what current() returned before the + // previous call to Next(). + const Token& previous(); + + // Advance to the next token. Returns false if the end of the input is + // reached. + bool Next(); + + // Like Next(), but also collects comments which appear between the previous + // and next tokens. + // + // Comments which appear to be attached to the previous token are stored + // in *prev_tailing_comments. Comments which appear to be attached to the + // next token are stored in *next_leading_comments. Comments appearing in + // between which do not appear to be attached to either will be added to + // detached_comments. Any of these parameters can be NULL to simply discard + // the comments. + // + // A series of line comments appearing on consecutive lines, with no other + // tokens appearing on those lines, will be treated as a single comment. + // + // Only the comment content is returned; comment markers (e.g. //) are + // stripped out. For block comments, leading whitespace and an asterisk will + // be stripped from the beginning of each line other than the first. Newlines + // are included in the output. + // + // Examples: + // + // optional int32 foo = 1; // Comment attached to foo. + // // Comment attached to bar. + // optional int32 bar = 2; + // + // optional string baz = 3; + // // Comment attached to baz. + // // Another line attached to baz. + // + // // Comment attached to qux. + // // + // // Another line attached to qux. + // optional double qux = 4; + // + // // Detached comment. This is not attached to qux or corge + // // because there are blank lines separating it from both. + // + // optional string corge = 5; + // /* Block comment attached + // * to corge. Leading asterisks + // * will be removed. */ + // /* Block comment attached to + // * grault. */ + // optional int32 grault = 6; + bool NextWithComments(string* prev_trailing_comments, + vector* detached_comments, + string* next_leading_comments); + + // Parse helpers --------------------------------------------------- + + // Parses a TYPE_FLOAT token. This never fails, so long as the text actually + // comes from a TYPE_FLOAT token parsed by Tokenizer. If it doesn't, the + // result is undefined (possibly an assert failure). + static double ParseFloat(const string& text); + + // Parses a TYPE_STRING token. This never fails, so long as the text actually + // comes from a TYPE_STRING token parsed by Tokenizer. If it doesn't, the + // result is undefined (possibly an assert failure). + static void ParseString(const string& text, string* output); + + // Identical to ParseString, but appends to output. + static void ParseStringAppend(const string& text, string* output); + + // Parses a TYPE_INTEGER token. Returns false if the result would be + // greater than max_value. Otherwise, returns true and sets *output to the + // result. If the text is not from a Token of type TYPE_INTEGER originally + // parsed by a Tokenizer, the result is undefined (possibly an assert + // failure). + static bool ParseInteger(const string& text, uint64 max_value, + uint64* output); + + // Options --------------------------------------------------------- + + // Set true to allow floats to be suffixed with the letter 'f'. Tokens + // which would otherwise be integers but which have the 'f' suffix will be + // forced to be interpreted as floats. For all other purposes, the 'f' is + // ignored. + void set_allow_f_after_float(bool value) { allow_f_after_float_ = value; } + + // Valid values for set_comment_style(). + enum CommentStyle { + // Line comments begin with "//", block comments are delimited by "/*" and + // "*/". + CPP_COMMENT_STYLE, + // Line comments begin with "#". No way to write block comments. + SH_COMMENT_STYLE + }; + + // Sets the comment style. + void set_comment_style(CommentStyle style) { comment_style_ = style; } + + // Whether to require whitespace between a number and a field name. + // Default is true. Do not use this; for Google-internal cleanup only. + void set_require_space_after_number(bool require) { + require_space_after_number_ = require; + } + + // Whether to allow string literals to span multiple lines. Default is false. + // Do not use this; for Google-internal cleanup only. + void set_allow_multiline_strings(bool allow) { + allow_multiline_strings_ = allow; + } + + // External helper: validate an identifier. + static bool IsIdentifier(const string& text); + + // ----------------------------------------------------------------- + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Tokenizer); + + Token current_; // Returned by current(). + Token previous_; // Returned by previous(). + + ZeroCopyInputStream* input_; + ErrorCollector* error_collector_; + + char current_char_; // == buffer_[buffer_pos_], updated by NextChar(). + const char* buffer_; // Current buffer returned from input_. + int buffer_size_; // Size of buffer_. + int buffer_pos_; // Current position within the buffer. + bool read_error_; // Did we previously encounter a read error? + + // Line and column number of current_char_ within the whole input stream. + int line_; + int column_; + + // String to which text should be appended as we advance through it. + // Call RecordTo(&str) to start recording and StopRecording() to stop. + // E.g. StartToken() calls RecordTo(¤t_.text). record_start_ is the + // position within the current buffer where recording started. + string* record_target_; + int record_start_; + + // Options. + bool allow_f_after_float_; + CommentStyle comment_style_; + bool require_space_after_number_; + bool allow_multiline_strings_; + + // Since we count columns we need to interpret tabs somehow. We'll take + // the standard 8-character definition for lack of any way to do better. + static const int kTabWidth = 8; + + // ----------------------------------------------------------------- + // Helper methods. + + // Consume this character and advance to the next one. + void NextChar(); + + // Read a new buffer from the input. + void Refresh(); + + inline void RecordTo(string* target); + inline void StopRecording(); + + // Called when the current character is the first character of a new + // token (not including whitespace or comments). + inline void StartToken(); + // Called when the current character is the first character after the + // end of the last token. After this returns, current_.text will + // contain all text consumed since StartToken() was called. + inline void EndToken(); + + // Convenience method to add an error at the current line and column. + void AddError(const string& message) { + error_collector_->AddError(line_, column_, message); + } + + // ----------------------------------------------------------------- + // The following four methods are used to consume tokens of specific + // types. They are actually used to consume all characters *after* + // the first, since the calling function consumes the first character + // in order to decide what kind of token is being read. + + // Read and consume a string, ending when the given delimiter is + // consumed. + void ConsumeString(char delimiter); + + // Read and consume a number, returning TYPE_FLOAT or TYPE_INTEGER + // depending on what was read. This needs to know if the first + // character was a zero in order to correctly recognize hex and octal + // numbers. + // It also needs to know if the first characted was a . to parse floating + // point correctly. + TokenType ConsumeNumber(bool started_with_zero, bool started_with_dot); + + // Consume the rest of a line. + void ConsumeLineComment(string* content); + // Consume until "*/". + void ConsumeBlockComment(string* content); + + enum NextCommentStatus { + // Started a line comment. + LINE_COMMENT, + + // Started a block comment. + BLOCK_COMMENT, + + // Consumed a slash, then realized it wasn't a comment. current_ has + // been filled in with a slash token. The caller should return it. + SLASH_NOT_COMMENT, + + // We do not appear to be starting a comment here. + NO_COMMENT + }; + + // If we're at the start of a new comment, consume it and return what kind + // of comment it is. + NextCommentStatus TryConsumeCommentStart(); + + // ----------------------------------------------------------------- + // These helper methods make the parsing code more readable. The + // "character classes" refered to are defined at the top of the .cc file. + // Basically it is a C++ class with one method: + // static bool InClass(char c); + // The method returns true if c is a member of this "class", like "Letter" + // or "Digit". + + // Returns true if the current character is of the given character + // class, but does not consume anything. + template + inline bool LookingAt(); + + // If the current character is in the given class, consume it and return + // true. Otherwise return false. + // e.g. TryConsumeOne() + template + inline bool TryConsumeOne(); + + // Like above, but try to consume the specific character indicated. + inline bool TryConsume(char c); + + // Consume zero or more of the given character class. + template + inline void ConsumeZeroOrMore(); + + // Consume one or more of the given character class or log the given + // error message. + // e.g. ConsumeOneOrMore("Expected digits."); + template + inline void ConsumeOneOrMore(const char* error); +}; + +// inline methods ==================================================== +inline const Tokenizer::Token& Tokenizer::current() { + return current_; +} + +inline const Tokenizer::Token& Tokenizer::previous() { + return previous_; +} + +inline void Tokenizer::ParseString(const string& text, string* output) { + output->clear(); + ParseStringAppend(text, output); +} + +} // namespace io +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_IO_TOKENIZER_H__ diff --git a/kortex_gazebo/include/google/protobuf/io/zero_copy_stream.h b/kortex_gazebo/include/google/protobuf/io/zero_copy_stream.h new file mode 100644 index 00000000..52650fc6 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/io/zero_copy_stream.h @@ -0,0 +1,248 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// This file contains the ZeroCopyInputStream and ZeroCopyOutputStream +// interfaces, which represent abstract I/O streams to and from which +// protocol buffers can be read and written. For a few simple +// implementations of these interfaces, see zero_copy_stream_impl.h. +// +// These interfaces are different from classic I/O streams in that they +// try to minimize the amount of data copying that needs to be done. +// To accomplish this, responsibility for allocating buffers is moved to +// the stream object, rather than being the responsibility of the caller. +// So, the stream can return a buffer which actually points directly into +// the final data structure where the bytes are to be stored, and the caller +// can interact directly with that buffer, eliminating an intermediate copy +// operation. +// +// As an example, consider the common case in which you are reading bytes +// from an array that is already in memory (or perhaps an mmap()ed file). +// With classic I/O streams, you would do something like: +// char buffer[BUFFER_SIZE]; +// input->Read(buffer, BUFFER_SIZE); +// DoSomething(buffer, BUFFER_SIZE); +// Then, the stream basically just calls memcpy() to copy the data from +// the array into your buffer. With a ZeroCopyInputStream, you would do +// this instead: +// const void* buffer; +// int size; +// input->Next(&buffer, &size); +// DoSomething(buffer, size); +// Here, no copy is performed. The input stream returns a pointer directly +// into the backing array, and the caller ends up reading directly from it. +// +// If you want to be able to read the old-fashion way, you can create +// a CodedInputStream or CodedOutputStream wrapping these objects and use +// their ReadRaw()/WriteRaw() methods. These will, of course, add a copy +// step, but Coded*Stream will handle buffering so at least it will be +// reasonably efficient. +// +// ZeroCopyInputStream example: +// // Read in a file and print its contents to stdout. +// int fd = open("myfile", O_RDONLY); +// ZeroCopyInputStream* input = new FileInputStream(fd); +// +// const void* buffer; +// int size; +// while (input->Next(&buffer, &size)) { +// cout.write(buffer, size); +// } +// +// delete input; +// close(fd); +// +// ZeroCopyOutputStream example: +// // Copy the contents of "infile" to "outfile", using plain read() for +// // "infile" but a ZeroCopyOutputStream for "outfile". +// int infd = open("infile", O_RDONLY); +// int outfd = open("outfile", O_WRONLY); +// ZeroCopyOutputStream* output = new FileOutputStream(outfd); +// +// void* buffer; +// int size; +// while (output->Next(&buffer, &size)) { +// int bytes = read(infd, buffer, size); +// if (bytes < size) { +// // Reached EOF. +// output->BackUp(size - bytes); +// break; +// } +// } +// +// delete output; +// close(infd); +// close(outfd); + +#ifndef GOOGLE_PROTOBUF_IO_ZERO_COPY_STREAM_H__ +#define GOOGLE_PROTOBUF_IO_ZERO_COPY_STREAM_H__ + +#include +#include + +namespace google { + +namespace protobuf { +namespace io { + +// Defined in this file. +class ZeroCopyInputStream; +class ZeroCopyOutputStream; + +// Abstract interface similar to an input stream but designed to minimize +// copying. +class LIBPROTOBUF_EXPORT ZeroCopyInputStream { + public: + inline ZeroCopyInputStream() {} + virtual ~ZeroCopyInputStream(); + + // Obtains a chunk of data from the stream. + // + // Preconditions: + // * "size" and "data" are not NULL. + // + // Postconditions: + // * If the returned value is false, there is no more data to return or + // an error occurred. All errors are permanent. + // * Otherwise, "size" points to the actual number of bytes read and "data" + // points to a pointer to a buffer containing these bytes. + // * Ownership of this buffer remains with the stream, and the buffer + // remains valid only until some other method of the stream is called + // or the stream is destroyed. + // * It is legal for the returned buffer to have zero size, as long + // as repeatedly calling Next() eventually yields a buffer with non-zero + // size. + virtual bool Next(const void** data, int* size) = 0; + + // Backs up a number of bytes, so that the next call to Next() returns + // data again that was already returned by the last call to Next(). This + // is useful when writing procedures that are only supposed to read up + // to a certain point in the input, then return. If Next() returns a + // buffer that goes beyond what you wanted to read, you can use BackUp() + // to return to the point where you intended to finish. + // + // Preconditions: + // * The last method called must have been Next(). + // * count must be less than or equal to the size of the last buffer + // returned by Next(). + // + // Postconditions: + // * The last "count" bytes of the last buffer returned by Next() will be + // pushed back into the stream. Subsequent calls to Next() will return + // the same data again before producing new data. + virtual void BackUp(int count) = 0; + + // Skips a number of bytes. Returns false if the end of the stream is + // reached or some input error occurred. In the end-of-stream case, the + // stream is advanced to the end of the stream (so ByteCount() will return + // the total size of the stream). + virtual bool Skip(int count) = 0; + + // Returns the total number of bytes read since this object was created. + virtual int64 ByteCount() const = 0; + + + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ZeroCopyInputStream); +}; + +// Abstract interface similar to an output stream but designed to minimize +// copying. +class LIBPROTOBUF_EXPORT ZeroCopyOutputStream { + public: + inline ZeroCopyOutputStream() {} + virtual ~ZeroCopyOutputStream(); + + // Obtains a buffer into which data can be written. Any data written + // into this buffer will eventually (maybe instantly, maybe later on) + // be written to the output. + // + // Preconditions: + // * "size" and "data" are not NULL. + // + // Postconditions: + // * If the returned value is false, an error occurred. All errors are + // permanent. + // * Otherwise, "size" points to the actual number of bytes in the buffer + // and "data" points to the buffer. + // * Ownership of this buffer remains with the stream, and the buffer + // remains valid only until some other method of the stream is called + // or the stream is destroyed. + // * Any data which the caller stores in this buffer will eventually be + // written to the output (unless BackUp() is called). + // * It is legal for the returned buffer to have zero size, as long + // as repeatedly calling Next() eventually yields a buffer with non-zero + // size. + virtual bool Next(void** data, int* size) = 0; + + // Backs up a number of bytes, so that the end of the last buffer returned + // by Next() is not actually written. This is needed when you finish + // writing all the data you want to write, but the last buffer was bigger + // than you needed. You don't want to write a bunch of garbage after the + // end of your data, so you use BackUp() to back up. + // + // Preconditions: + // * The last method called must have been Next(). + // * count must be less than or equal to the size of the last buffer + // returned by Next(). + // * The caller must not have written anything to the last "count" bytes + // of that buffer. + // + // Postconditions: + // * The last "count" bytes of the last buffer returned by Next() will be + // ignored. + virtual void BackUp(int count) = 0; + + // Returns the total number of bytes written since this object was created. + virtual int64 ByteCount() const = 0; + + // Write a given chunk of data to the output. Some output streams may + // implement this in a way that avoids copying. Check AllowsAliasing() before + // calling WriteAliasedRaw(). It will GOOGLE_CHECK fail if WriteAliasedRaw() is + // called on a stream that does not allow aliasing. + // + // NOTE: It is caller's responsibility to ensure that the chunk of memory + // remains live until all of the data has been consumed from the stream. + virtual bool WriteAliasedRaw(const void* data, int size); + virtual bool AllowsAliasing() const { return false; } + + + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ZeroCopyOutputStream); +}; + +} // namespace io +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_IO_ZERO_COPY_STREAM_H__ diff --git a/kortex_gazebo/include/google/protobuf/io/zero_copy_stream_impl.h b/kortex_gazebo/include/google/protobuf/io/zero_copy_stream_impl.h new file mode 100644 index 00000000..0746fa6a --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/io/zero_copy_stream_impl.h @@ -0,0 +1,358 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// This file contains common implementations of the interfaces defined in +// zero_copy_stream.h which are only included in the full (non-lite) +// protobuf library. These implementations include Unix file descriptors +// and C++ iostreams. See also: zero_copy_stream_impl_lite.h + +#ifndef GOOGLE_PROTOBUF_IO_ZERO_COPY_STREAM_IMPL_H__ +#define GOOGLE_PROTOBUF_IO_ZERO_COPY_STREAM_IMPL_H__ + +#include +#include +#include +#include +#include + + +namespace google { +namespace protobuf { +namespace io { + + +// =================================================================== + +// A ZeroCopyInputStream which reads from a file descriptor. +// +// FileInputStream is preferred over using an ifstream with IstreamInputStream. +// The latter will introduce an extra layer of buffering, harming performance. +// Also, it's conceivable that FileInputStream could someday be enhanced +// to use zero-copy file descriptors on OSs which support them. +class LIBPROTOBUF_EXPORT FileInputStream : public ZeroCopyInputStream { + public: + // Creates a stream that reads from the given Unix file descriptor. + // If a block_size is given, it specifies the number of bytes that + // should be read and returned with each call to Next(). Otherwise, + // a reasonable default is used. + explicit FileInputStream(int file_descriptor, int block_size = -1); + ~FileInputStream(); + + // Flushes any buffers and closes the underlying file. Returns false if + // an error occurs during the process; use GetErrno() to examine the error. + // Even if an error occurs, the file descriptor is closed when this returns. + bool Close(); + + // By default, the file descriptor is not closed when the stream is + // destroyed. Call SetCloseOnDelete(true) to change that. WARNING: + // This leaves no way for the caller to detect if close() fails. If + // detecting close() errors is important to you, you should arrange + // to close the descriptor yourself. + void SetCloseOnDelete(bool value) { copying_input_.SetCloseOnDelete(value); } + + // If an I/O error has occurred on this file descriptor, this is the + // errno from that error. Otherwise, this is zero. Once an error + // occurs, the stream is broken and all subsequent operations will + // fail. + int GetErrno() { return copying_input_.GetErrno(); } + + // implements ZeroCopyInputStream ---------------------------------- + bool Next(const void** data, int* size); + void BackUp(int count); + bool Skip(int count); + int64 ByteCount() const; + + private: + class LIBPROTOBUF_EXPORT CopyingFileInputStream : public CopyingInputStream { + public: + CopyingFileInputStream(int file_descriptor); + ~CopyingFileInputStream(); + + bool Close(); + void SetCloseOnDelete(bool value) { close_on_delete_ = value; } + int GetErrno() { return errno_; } + + // implements CopyingInputStream --------------------------------- + int Read(void* buffer, int size); + int Skip(int count); + + private: + // The file descriptor. + const int file_; + bool close_on_delete_; + bool is_closed_; + + // The errno of the I/O error, if one has occurred. Otherwise, zero. + int errno_; + + // Did we try to seek once and fail? If so, we assume this file descriptor + // doesn't support seeking and won't try again. + bool previous_seek_failed_; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CopyingFileInputStream); + }; + + CopyingFileInputStream copying_input_; + CopyingInputStreamAdaptor impl_; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FileInputStream); +}; + +// =================================================================== + +// A ZeroCopyOutputStream which writes to a file descriptor. +// +// FileOutputStream is preferred over using an ofstream with +// OstreamOutputStream. The latter will introduce an extra layer of buffering, +// harming performance. Also, it's conceivable that FileOutputStream could +// someday be enhanced to use zero-copy file descriptors on OSs which +// support them. +class LIBPROTOBUF_EXPORT FileOutputStream : public ZeroCopyOutputStream { + public: + // Creates a stream that writes to the given Unix file descriptor. + // If a block_size is given, it specifies the size of the buffers + // that should be returned by Next(). Otherwise, a reasonable default + // is used. + explicit FileOutputStream(int file_descriptor, int block_size = -1); + ~FileOutputStream(); + + // Flushes any buffers and closes the underlying file. Returns false if + // an error occurs during the process; use GetErrno() to examine the error. + // Even if an error occurs, the file descriptor is closed when this returns. + bool Close(); + + // Flushes FileOutputStream's buffers but does not close the + // underlying file. No special measures are taken to ensure that + // underlying operating system file object is synchronized to disk. + bool Flush(); + + // By default, the file descriptor is not closed when the stream is + // destroyed. Call SetCloseOnDelete(true) to change that. WARNING: + // This leaves no way for the caller to detect if close() fails. If + // detecting close() errors is important to you, you should arrange + // to close the descriptor yourself. + void SetCloseOnDelete(bool value) { copying_output_.SetCloseOnDelete(value); } + + // If an I/O error has occurred on this file descriptor, this is the + // errno from that error. Otherwise, this is zero. Once an error + // occurs, the stream is broken and all subsequent operations will + // fail. + int GetErrno() { return copying_output_.GetErrno(); } + + // implements ZeroCopyOutputStream --------------------------------- + bool Next(void** data, int* size); + void BackUp(int count); + int64 ByteCount() const; + + private: + class LIBPROTOBUF_EXPORT CopyingFileOutputStream : public CopyingOutputStream { + public: + CopyingFileOutputStream(int file_descriptor); + ~CopyingFileOutputStream(); + + bool Close(); + void SetCloseOnDelete(bool value) { close_on_delete_ = value; } + int GetErrno() { return errno_; } + + // implements CopyingOutputStream -------------------------------- + bool Write(const void* buffer, int size); + + private: + // The file descriptor. + const int file_; + bool close_on_delete_; + bool is_closed_; + + // The errno of the I/O error, if one has occurred. Otherwise, zero. + int errno_; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CopyingFileOutputStream); + }; + + CopyingFileOutputStream copying_output_; + CopyingOutputStreamAdaptor impl_; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FileOutputStream); +}; + +// =================================================================== + +// A ZeroCopyInputStream which reads from a C++ istream. +// +// Note that for reading files (or anything represented by a file descriptor), +// FileInputStream is more efficient. +class LIBPROTOBUF_EXPORT IstreamInputStream : public ZeroCopyInputStream { + public: + // Creates a stream that reads from the given C++ istream. + // If a block_size is given, it specifies the number of bytes that + // should be read and returned with each call to Next(). Otherwise, + // a reasonable default is used. + explicit IstreamInputStream(istream* stream, int block_size = -1); + ~IstreamInputStream(); + + // implements ZeroCopyInputStream ---------------------------------- + bool Next(const void** data, int* size); + void BackUp(int count); + bool Skip(int count); + int64 ByteCount() const; + + private: + class LIBPROTOBUF_EXPORT CopyingIstreamInputStream : public CopyingInputStream { + public: + CopyingIstreamInputStream(istream* input); + ~CopyingIstreamInputStream(); + + // implements CopyingInputStream --------------------------------- + int Read(void* buffer, int size); + // (We use the default implementation of Skip().) + + private: + // The stream. + istream* input_; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CopyingIstreamInputStream); + }; + + CopyingIstreamInputStream copying_input_; + CopyingInputStreamAdaptor impl_; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(IstreamInputStream); +}; + +// =================================================================== + +// A ZeroCopyOutputStream which writes to a C++ ostream. +// +// Note that for writing files (or anything represented by a file descriptor), +// FileOutputStream is more efficient. +class LIBPROTOBUF_EXPORT OstreamOutputStream : public ZeroCopyOutputStream { + public: + // Creates a stream that writes to the given C++ ostream. + // If a block_size is given, it specifies the size of the buffers + // that should be returned by Next(). Otherwise, a reasonable default + // is used. + explicit OstreamOutputStream(ostream* stream, int block_size = -1); + ~OstreamOutputStream(); + + // implements ZeroCopyOutputStream --------------------------------- + bool Next(void** data, int* size); + void BackUp(int count); + int64 ByteCount() const; + + private: + class LIBPROTOBUF_EXPORT CopyingOstreamOutputStream : public CopyingOutputStream { + public: + CopyingOstreamOutputStream(ostream* output); + ~CopyingOstreamOutputStream(); + + // implements CopyingOutputStream -------------------------------- + bool Write(const void* buffer, int size); + + private: + // The stream. + ostream* output_; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CopyingOstreamOutputStream); + }; + + CopyingOstreamOutputStream copying_output_; + CopyingOutputStreamAdaptor impl_; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(OstreamOutputStream); +}; + +// =================================================================== + +// A ZeroCopyInputStream which reads from several other streams in sequence. +// ConcatenatingInputStream is unable to distinguish between end-of-stream +// and read errors in the underlying streams, so it assumes any errors mean +// end-of-stream. So, if the underlying streams fail for any other reason, +// ConcatenatingInputStream may do odd things. It is suggested that you do +// not use ConcatenatingInputStream on streams that might produce read errors +// other than end-of-stream. +class LIBPROTOBUF_EXPORT ConcatenatingInputStream : public ZeroCopyInputStream { + public: + // All streams passed in as well as the array itself must remain valid + // until the ConcatenatingInputStream is destroyed. + ConcatenatingInputStream(ZeroCopyInputStream* const streams[], int count); + ~ConcatenatingInputStream(); + + // implements ZeroCopyInputStream ---------------------------------- + bool Next(const void** data, int* size); + void BackUp(int count); + bool Skip(int count); + int64 ByteCount() const; + + + private: + // As streams are retired, streams_ is incremented and count_ is + // decremented. + ZeroCopyInputStream* const* streams_; + int stream_count_; + int64 bytes_retired_; // Bytes read from previous streams. + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ConcatenatingInputStream); +}; + +// =================================================================== + +// A ZeroCopyInputStream which wraps some other stream and limits it to +// a particular byte count. +class LIBPROTOBUF_EXPORT LimitingInputStream : public ZeroCopyInputStream { + public: + LimitingInputStream(ZeroCopyInputStream* input, int64 limit); + ~LimitingInputStream(); + + // implements ZeroCopyInputStream ---------------------------------- + bool Next(const void** data, int* size); + void BackUp(int count); + bool Skip(int count); + int64 ByteCount() const; + + + private: + ZeroCopyInputStream* input_; + int64 limit_; // Decreases as we go, becomes negative if we overshoot. + int64 prior_bytes_read_; // Bytes read on underlying stream at construction + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(LimitingInputStream); +}; + +// =================================================================== + +} // namespace io +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_IO_ZERO_COPY_STREAM_IMPL_H__ diff --git a/kortex_gazebo/include/google/protobuf/io/zero_copy_stream_impl_lite.h b/kortex_gazebo/include/google/protobuf/io/zero_copy_stream_impl_lite.h new file mode 100644 index 00000000..e18da72c --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/io/zero_copy_stream_impl_lite.h @@ -0,0 +1,354 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// This file contains common implementations of the interfaces defined in +// zero_copy_stream.h which are included in the "lite" protobuf library. +// These implementations cover I/O on raw arrays and strings, as well as +// adaptors which make it easy to implement streams based on traditional +// streams. Of course, many users will probably want to write their own +// implementations of these interfaces specific to the particular I/O +// abstractions they prefer to use, but these should cover the most common +// cases. + +#ifndef GOOGLE_PROTOBUF_IO_ZERO_COPY_STREAM_IMPL_LITE_H__ +#define GOOGLE_PROTOBUF_IO_ZERO_COPY_STREAM_IMPL_LITE_H__ + +#include +#include +#include +#include +#include + + +namespace google { +namespace protobuf { +namespace io { + +// =================================================================== + +// A ZeroCopyInputStream backed by an in-memory array of bytes. +class LIBPROTOBUF_EXPORT ArrayInputStream : public ZeroCopyInputStream { + public: + // Create an InputStream that returns the bytes pointed to by "data". + // "data" remains the property of the caller but must remain valid until + // the stream is destroyed. If a block_size is given, calls to Next() + // will return data blocks no larger than the given size. Otherwise, the + // first call to Next() returns the entire array. block_size is mainly + // useful for testing; in production you would probably never want to set + // it. + ArrayInputStream(const void* data, int size, int block_size = -1); + ~ArrayInputStream(); + + // implements ZeroCopyInputStream ---------------------------------- + bool Next(const void** data, int* size); + void BackUp(int count); + bool Skip(int count); + int64 ByteCount() const; + + + private: + const uint8* const data_; // The byte array. + const int size_; // Total size of the array. + const int block_size_; // How many bytes to return at a time. + + int position_; + int last_returned_size_; // How many bytes we returned last time Next() + // was called (used for error checking only). + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ArrayInputStream); +}; + +// =================================================================== + +// A ZeroCopyOutputStream backed by an in-memory array of bytes. +class LIBPROTOBUF_EXPORT ArrayOutputStream : public ZeroCopyOutputStream { + public: + // Create an OutputStream that writes to the bytes pointed to by "data". + // "data" remains the property of the caller but must remain valid until + // the stream is destroyed. If a block_size is given, calls to Next() + // will return data blocks no larger than the given size. Otherwise, the + // first call to Next() returns the entire array. block_size is mainly + // useful for testing; in production you would probably never want to set + // it. + ArrayOutputStream(void* data, int size, int block_size = -1); + ~ArrayOutputStream(); + + // implements ZeroCopyOutputStream --------------------------------- + bool Next(void** data, int* size); + void BackUp(int count); + int64 ByteCount() const; + + private: + uint8* const data_; // The byte array. + const int size_; // Total size of the array. + const int block_size_; // How many bytes to return at a time. + + int position_; + int last_returned_size_; // How many bytes we returned last time Next() + // was called (used for error checking only). + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ArrayOutputStream); +}; + +// =================================================================== + +// A ZeroCopyOutputStream which appends bytes to a string. +class LIBPROTOBUF_EXPORT StringOutputStream : public ZeroCopyOutputStream { + public: + // Create a StringOutputStream which appends bytes to the given string. + // The string remains property of the caller, but it MUST NOT be accessed + // in any way until the stream is destroyed. + // + // Hint: If you call target->reserve(n) before creating the stream, + // the first call to Next() will return at least n bytes of buffer + // space. + explicit StringOutputStream(string* target); + ~StringOutputStream(); + + // implements ZeroCopyOutputStream --------------------------------- + bool Next(void** data, int* size); + void BackUp(int count); + int64 ByteCount() const; + + private: + static const int kMinimumSize = 16; + + string* target_; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(StringOutputStream); +}; + +// Note: There is no StringInputStream. Instead, just create an +// ArrayInputStream as follows: +// ArrayInputStream input(str.data(), str.size()); + +// =================================================================== + +// A generic traditional input stream interface. +// +// Lots of traditional input streams (e.g. file descriptors, C stdio +// streams, and C++ iostreams) expose an interface where every read +// involves copying bytes into a buffer. If you want to take such an +// interface and make a ZeroCopyInputStream based on it, simply implement +// CopyingInputStream and then use CopyingInputStreamAdaptor. +// +// CopyingInputStream implementations should avoid buffering if possible. +// CopyingInputStreamAdaptor does its own buffering and will read data +// in large blocks. +class LIBPROTOBUF_EXPORT CopyingInputStream { + public: + virtual ~CopyingInputStream(); + + // Reads up to "size" bytes into the given buffer. Returns the number of + // bytes read. Read() waits until at least one byte is available, or + // returns zero if no bytes will ever become available (EOF), or -1 if a + // permanent read error occurred. + virtual int Read(void* buffer, int size) = 0; + + // Skips the next "count" bytes of input. Returns the number of bytes + // actually skipped. This will always be exactly equal to "count" unless + // EOF was reached or a permanent read error occurred. + // + // The default implementation just repeatedly calls Read() into a scratch + // buffer. + virtual int Skip(int count); +}; + +// A ZeroCopyInputStream which reads from a CopyingInputStream. This is +// useful for implementing ZeroCopyInputStreams that read from traditional +// streams. Note that this class is not really zero-copy. +// +// If you want to read from file descriptors or C++ istreams, this is +// already implemented for you: use FileInputStream or IstreamInputStream +// respectively. +class LIBPROTOBUF_EXPORT CopyingInputStreamAdaptor : public ZeroCopyInputStream { + public: + // Creates a stream that reads from the given CopyingInputStream. + // If a block_size is given, it specifies the number of bytes that + // should be read and returned with each call to Next(). Otherwise, + // a reasonable default is used. The caller retains ownership of + // copying_stream unless SetOwnsCopyingStream(true) is called. + explicit CopyingInputStreamAdaptor(CopyingInputStream* copying_stream, + int block_size = -1); + ~CopyingInputStreamAdaptor(); + + // Call SetOwnsCopyingStream(true) to tell the CopyingInputStreamAdaptor to + // delete the underlying CopyingInputStream when it is destroyed. + void SetOwnsCopyingStream(bool value) { owns_copying_stream_ = value; } + + // implements ZeroCopyInputStream ---------------------------------- + bool Next(const void** data, int* size); + void BackUp(int count); + bool Skip(int count); + int64 ByteCount() const; + + private: + // Insures that buffer_ is not NULL. + void AllocateBufferIfNeeded(); + // Frees the buffer and resets buffer_used_. + void FreeBuffer(); + + // The underlying copying stream. + CopyingInputStream* copying_stream_; + bool owns_copying_stream_; + + // True if we have seen a permenant error from the underlying stream. + bool failed_; + + // The current position of copying_stream_, relative to the point where + // we started reading. + int64 position_; + + // Data is read into this buffer. It may be NULL if no buffer is currently + // in use. Otherwise, it points to an array of size buffer_size_. + scoped_array buffer_; + const int buffer_size_; + + // Number of valid bytes currently in the buffer (i.e. the size last + // returned by Next()). 0 <= buffer_used_ <= buffer_size_. + int buffer_used_; + + // Number of bytes in the buffer which were backed up over by a call to + // BackUp(). These need to be returned again. + // 0 <= backup_bytes_ <= buffer_used_ + int backup_bytes_; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CopyingInputStreamAdaptor); +}; + +// =================================================================== + +// A generic traditional output stream interface. +// +// Lots of traditional output streams (e.g. file descriptors, C stdio +// streams, and C++ iostreams) expose an interface where every write +// involves copying bytes from a buffer. If you want to take such an +// interface and make a ZeroCopyOutputStream based on it, simply implement +// CopyingOutputStream and then use CopyingOutputStreamAdaptor. +// +// CopyingOutputStream implementations should avoid buffering if possible. +// CopyingOutputStreamAdaptor does its own buffering and will write data +// in large blocks. +class LIBPROTOBUF_EXPORT CopyingOutputStream { + public: + virtual ~CopyingOutputStream(); + + // Writes "size" bytes from the given buffer to the output. Returns true + // if successful, false on a write error. + virtual bool Write(const void* buffer, int size) = 0; +}; + +// A ZeroCopyOutputStream which writes to a CopyingOutputStream. This is +// useful for implementing ZeroCopyOutputStreams that write to traditional +// streams. Note that this class is not really zero-copy. +// +// If you want to write to file descriptors or C++ ostreams, this is +// already implemented for you: use FileOutputStream or OstreamOutputStream +// respectively. +class LIBPROTOBUF_EXPORT CopyingOutputStreamAdaptor : public ZeroCopyOutputStream { + public: + // Creates a stream that writes to the given Unix file descriptor. + // If a block_size is given, it specifies the size of the buffers + // that should be returned by Next(). Otherwise, a reasonable default + // is used. + explicit CopyingOutputStreamAdaptor(CopyingOutputStream* copying_stream, + int block_size = -1); + ~CopyingOutputStreamAdaptor(); + + // Writes all pending data to the underlying stream. Returns false if a + // write error occurred on the underlying stream. (The underlying + // stream itself is not necessarily flushed.) + bool Flush(); + + // Call SetOwnsCopyingStream(true) to tell the CopyingOutputStreamAdaptor to + // delete the underlying CopyingOutputStream when it is destroyed. + void SetOwnsCopyingStream(bool value) { owns_copying_stream_ = value; } + + // implements ZeroCopyOutputStream --------------------------------- + bool Next(void** data, int* size); + void BackUp(int count); + int64 ByteCount() const; + + private: + // Write the current buffer, if it is present. + bool WriteBuffer(); + // Insures that buffer_ is not NULL. + void AllocateBufferIfNeeded(); + // Frees the buffer. + void FreeBuffer(); + + // The underlying copying stream. + CopyingOutputStream* copying_stream_; + bool owns_copying_stream_; + + // True if we have seen a permenant error from the underlying stream. + bool failed_; + + // The current position of copying_stream_, relative to the point where + // we started writing. + int64 position_; + + // Data is written from this buffer. It may be NULL if no buffer is + // currently in use. Otherwise, it points to an array of size buffer_size_. + scoped_array buffer_; + const int buffer_size_; + + // Number of valid bytes currently in the buffer (i.e. the size last + // returned by Next()). When BackUp() is called, we just reduce this. + // 0 <= buffer_used_ <= buffer_size_. + int buffer_used_; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(CopyingOutputStreamAdaptor); +}; + +// =================================================================== + +// Return a pointer to mutable characters underlying the given string. The +// return value is valid until the next time the string is resized. We +// trust the caller to treat the return value as an array of length s->size(). +inline char* mutable_string_data(string* s) { +#ifdef LANG_CXX11 + // This should be simpler & faster than string_as_array() because the latter + // is guaranteed to return NULL when *s is empty, so it has to check for that. + return &(*s)[0]; +#else + return string_as_array(s); +#endif +} + +} // namespace io +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_IO_ZERO_COPY_STREAM_IMPL_LITE_H__ diff --git a/kortex_gazebo/include/google/protobuf/message.h b/kortex_gazebo/include/google/protobuf/message.h new file mode 100644 index 00000000..95935605 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/message.h @@ -0,0 +1,866 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// Defines Message, the abstract interface implemented by non-lite +// protocol message objects. Although it's possible to implement this +// interface manually, most users will use the protocol compiler to +// generate implementations. +// +// Example usage: +// +// Say you have a message defined as: +// +// message Foo { +// optional string text = 1; +// repeated int32 numbers = 2; +// } +// +// Then, if you used the protocol compiler to generate a class from the above +// definition, you could use it like so: +// +// string data; // Will store a serialized version of the message. +// +// { +// // Create a message and serialize it. +// Foo foo; +// foo.set_text("Hello World!"); +// foo.add_numbers(1); +// foo.add_numbers(5); +// foo.add_numbers(42); +// +// foo.SerializeToString(&data); +// } +// +// { +// // Parse the serialized message and check that it contains the +// // correct data. +// Foo foo; +// foo.ParseFromString(data); +// +// assert(foo.text() == "Hello World!"); +// assert(foo.numbers_size() == 3); +// assert(foo.numbers(0) == 1); +// assert(foo.numbers(1) == 5); +// assert(foo.numbers(2) == 42); +// } +// +// { +// // Same as the last block, but do it dynamically via the Message +// // reflection interface. +// Message* foo = new Foo; +// const Descriptor* descriptor = foo->GetDescriptor(); +// +// // Get the descriptors for the fields we're interested in and verify +// // their types. +// const FieldDescriptor* text_field = descriptor->FindFieldByName("text"); +// assert(text_field != NULL); +// assert(text_field->type() == FieldDescriptor::TYPE_STRING); +// assert(text_field->label() == FieldDescriptor::LABEL_OPTIONAL); +// const FieldDescriptor* numbers_field = descriptor-> +// FindFieldByName("numbers"); +// assert(numbers_field != NULL); +// assert(numbers_field->type() == FieldDescriptor::TYPE_INT32); +// assert(numbers_field->label() == FieldDescriptor::LABEL_REPEATED); +// +// // Parse the message. +// foo->ParseFromString(data); +// +// // Use the reflection interface to examine the contents. +// const Reflection* reflection = foo->GetReflection(); +// assert(reflection->GetString(foo, text_field) == "Hello World!"); +// assert(reflection->FieldSize(foo, numbers_field) == 3); +// assert(reflection->GetRepeatedInt32(foo, numbers_field, 0) == 1); +// assert(reflection->GetRepeatedInt32(foo, numbers_field, 1) == 5); +// assert(reflection->GetRepeatedInt32(foo, numbers_field, 2) == 42); +// +// delete foo; +// } + +#ifndef GOOGLE_PROTOBUF_MESSAGE_H__ +#define GOOGLE_PROTOBUF_MESSAGE_H__ + +#include +#include +#include + +#include + +#include +#include + + +#define GOOGLE_PROTOBUF_HAS_ONEOF + +namespace google { +namespace protobuf { + +// Defined in this file. +class Message; +class Reflection; +class MessageFactory; + +// Defined in other files. +class UnknownFieldSet; // unknown_field_set.h +namespace io { + class ZeroCopyInputStream; // zero_copy_stream.h + class ZeroCopyOutputStream; // zero_copy_stream.h + class CodedInputStream; // coded_stream.h + class CodedOutputStream; // coded_stream.h +} + + +template +class RepeatedField; // repeated_field.h + +template +class RepeatedPtrField; // repeated_field.h + +// A container to hold message metadata. +struct Metadata { + const Descriptor* descriptor; + const Reflection* reflection; +}; + +// Abstract interface for protocol messages. +// +// See also MessageLite, which contains most every-day operations. Message +// adds descriptors and reflection on top of that. +// +// The methods of this class that are virtual but not pure-virtual have +// default implementations based on reflection. Message classes which are +// optimized for speed will want to override these with faster implementations, +// but classes optimized for code size may be happy with keeping them. See +// the optimize_for option in descriptor.proto. +class LIBPROTOBUF_EXPORT Message : public MessageLite { + public: + inline Message() {} + virtual ~Message(); + + // Basic Operations ------------------------------------------------ + + // Construct a new instance of the same type. Ownership is passed to the + // caller. (This is also defined in MessageLite, but is defined again here + // for return-type covariance.) + virtual Message* New() const = 0; + + // Make this message into a copy of the given message. The given message + // must have the same descriptor, but need not necessarily be the same class. + // By default this is just implemented as "Clear(); MergeFrom(from);". + virtual void CopyFrom(const Message& from); + + // Merge the fields from the given message into this message. Singular + // fields will be overwritten, if specified in from, except for embedded + // messages which will be merged. Repeated fields will be concatenated. + // The given message must be of the same type as this message (i.e. the + // exact same class). + virtual void MergeFrom(const Message& from); + + // Verifies that IsInitialized() returns true. GOOGLE_CHECK-fails otherwise, with + // a nice error message. + void CheckInitialized() const; + + // Slowly build a list of all required fields that are not set. + // This is much, much slower than IsInitialized() as it is implemented + // purely via reflection. Generally, you should not call this unless you + // have already determined that an error exists by calling IsInitialized(). + void FindInitializationErrors(vector* errors) const; + + // Like FindInitializationErrors, but joins all the strings, delimited by + // commas, and returns them. + string InitializationErrorString() const; + + // Clears all unknown fields from this message and all embedded messages. + // Normally, if unknown tag numbers are encountered when parsing a message, + // the tag and value are stored in the message's UnknownFieldSet and + // then written back out when the message is serialized. This allows servers + // which simply route messages to other servers to pass through messages + // that have new field definitions which they don't yet know about. However, + // this behavior can have security implications. To avoid it, call this + // method after parsing. + // + // See Reflection::GetUnknownFields() for more on unknown fields. + virtual void DiscardUnknownFields(); + + // Computes (an estimate of) the total number of bytes currently used for + // storing the message in memory. The default implementation calls the + // Reflection object's SpaceUsed() method. + virtual int SpaceUsed() const; + + // Debugging & Testing---------------------------------------------- + + // Generates a human readable form of this message, useful for debugging + // and other purposes. + string DebugString() const; + // Like DebugString(), but with less whitespace. + string ShortDebugString() const; + // Like DebugString(), but do not escape UTF-8 byte sequences. + string Utf8DebugString() const; + // Convenience function useful in GDB. Prints DebugString() to stdout. + void PrintDebugString() const; + + // Heavy I/O ------------------------------------------------------- + // Additional parsing and serialization methods not implemented by + // MessageLite because they are not supported by the lite library. + + // Parse a protocol buffer from a file descriptor. If successful, the entire + // input will be consumed. + bool ParseFromFileDescriptor(int file_descriptor); + // Like ParseFromFileDescriptor(), but accepts messages that are missing + // required fields. + bool ParsePartialFromFileDescriptor(int file_descriptor); + // Parse a protocol buffer from a C++ istream. If successful, the entire + // input will be consumed. + bool ParseFromIstream(istream* input); + // Like ParseFromIstream(), but accepts messages that are missing + // required fields. + bool ParsePartialFromIstream(istream* input); + + // Serialize the message and write it to the given file descriptor. All + // required fields must be set. + bool SerializeToFileDescriptor(int file_descriptor) const; + // Like SerializeToFileDescriptor(), but allows missing required fields. + bool SerializePartialToFileDescriptor(int file_descriptor) const; + // Serialize the message and write it to the given C++ ostream. All + // required fields must be set. + bool SerializeToOstream(ostream* output) const; + // Like SerializeToOstream(), but allows missing required fields. + bool SerializePartialToOstream(ostream* output) const; + + + // Reflection-based methods ---------------------------------------- + // These methods are pure-virtual in MessageLite, but Message provides + // reflection-based default implementations. + + virtual string GetTypeName() const; + virtual void Clear(); + virtual bool IsInitialized() const; + virtual void CheckTypeAndMergeFrom(const MessageLite& other); + virtual bool MergePartialFromCodedStream(io::CodedInputStream* input); + virtual int ByteSize() const; + virtual void SerializeWithCachedSizes(io::CodedOutputStream* output) const; + + private: + // This is called only by the default implementation of ByteSize(), to + // update the cached size. If you override ByteSize(), you do not need + // to override this. If you do not override ByteSize(), you MUST override + // this; the default implementation will crash. + // + // The method is private because subclasses should never call it; only + // override it. Yes, C++ lets you do that. Crazy, huh? + virtual void SetCachedSize(int size) const; + + public: + + // Introspection --------------------------------------------------- + + // Typedef for backwards-compatibility. + typedef google::protobuf::Reflection Reflection; + + // Get a Descriptor for this message's type. This describes what + // fields the message contains, the types of those fields, etc. + const Descriptor* GetDescriptor() const { return GetMetadata().descriptor; } + + // Get the Reflection interface for this Message, which can be used to + // read and modify the fields of the Message dynamically (in other words, + // without knowing the message type at compile time). This object remains + // property of the Message. + // + // This method remains virtual in case a subclass does not implement + // reflection and wants to override the default behavior. + virtual const Reflection* GetReflection() const { + return GetMetadata().reflection; + } + + protected: + // Get a struct containing the metadata for the Message. Most subclasses only + // need to implement this method, rather than the GetDescriptor() and + // GetReflection() wrappers. + virtual Metadata GetMetadata() const = 0; + + + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Message); +}; + +// This interface contains methods that can be used to dynamically access +// and modify the fields of a protocol message. Their semantics are +// similar to the accessors the protocol compiler generates. +// +// To get the Reflection for a given Message, call Message::GetReflection(). +// +// This interface is separate from Message only for efficiency reasons; +// the vast majority of implementations of Message will share the same +// implementation of Reflection (GeneratedMessageReflection, +// defined in generated_message.h), and all Messages of a particular class +// should share the same Reflection object (though you should not rely on +// the latter fact). +// +// There are several ways that these methods can be used incorrectly. For +// example, any of the following conditions will lead to undefined +// results (probably assertion failures): +// - The FieldDescriptor is not a field of this message type. +// - The method called is not appropriate for the field's type. For +// each field type in FieldDescriptor::TYPE_*, there is only one +// Get*() method, one Set*() method, and one Add*() method that is +// valid for that type. It should be obvious which (except maybe +// for TYPE_BYTES, which are represented using strings in C++). +// - A Get*() or Set*() method for singular fields is called on a repeated +// field. +// - GetRepeated*(), SetRepeated*(), or Add*() is called on a non-repeated +// field. +// - The Message object passed to any method is not of the right type for +// this Reflection object (i.e. message.GetReflection() != reflection). +// +// You might wonder why there is not any abstract representation for a field +// of arbitrary type. E.g., why isn't there just a "GetField()" method that +// returns "const Field&", where "Field" is some class with accessors like +// "GetInt32Value()". The problem is that someone would have to deal with +// allocating these Field objects. For generated message classes, having to +// allocate space for an additional object to wrap every field would at least +// double the message's memory footprint, probably worse. Allocating the +// objects on-demand, on the other hand, would be expensive and prone to +// memory leaks. So, instead we ended up with this flat interface. +// +// TODO(kenton): Create a utility class which callers can use to read and +// write fields from a Reflection without paying attention to the type. +class LIBPROTOBUF_EXPORT Reflection { + public: + inline Reflection() {} + virtual ~Reflection(); + + // Get the UnknownFieldSet for the message. This contains fields which + // were seen when the Message was parsed but were not recognized according + // to the Message's definition. + virtual const UnknownFieldSet& GetUnknownFields( + const Message& message) const = 0; + // Get a mutable pointer to the UnknownFieldSet for the message. This + // contains fields which were seen when the Message was parsed but were not + // recognized according to the Message's definition. + virtual UnknownFieldSet* MutableUnknownFields(Message* message) const = 0; + + // Estimate the amount of memory used by the message object. + virtual int SpaceUsed(const Message& message) const = 0; + + // Check if the given non-repeated field is set. + virtual bool HasField(const Message& message, + const FieldDescriptor* field) const = 0; + + // Get the number of elements of a repeated field. + virtual int FieldSize(const Message& message, + const FieldDescriptor* field) const = 0; + + // Clear the value of a field, so that HasField() returns false or + // FieldSize() returns zero. + virtual void ClearField(Message* message, + const FieldDescriptor* field) const = 0; + + // Check if the oneof is set. Returns ture if any field in oneof + // is set, false otherwise. + // TODO(jieluo) - make it pure virtual after updating all + // the subclasses. + virtual bool HasOneof(const Message& message, + const OneofDescriptor* oneof_descriptor) const { + return false; + } + + virtual void ClearOneof(Message* message, + const OneofDescriptor* oneof_descriptor) const {} + + // Returns the field descriptor if the oneof is set. NULL otherwise. + // TODO(jieluo) - make it pure virtual. + virtual const FieldDescriptor* GetOneofFieldDescriptor( + const Message& message, + const OneofDescriptor* oneof_descriptor) const { + return NULL; + } + + // Removes the last element of a repeated field. + // We don't provide a way to remove any element other than the last + // because it invites inefficient use, such as O(n^2) filtering loops + // that should have been O(n). If you want to remove an element other + // than the last, the best way to do it is to re-arrange the elements + // (using Swap()) so that the one you want removed is at the end, then + // call RemoveLast(). + virtual void RemoveLast(Message* message, + const FieldDescriptor* field) const = 0; + // Removes the last element of a repeated message field, and returns the + // pointer to the caller. Caller takes ownership of the returned pointer. + virtual Message* ReleaseLast(Message* message, + const FieldDescriptor* field) const = 0; + + // Swap the complete contents of two messages. + virtual void Swap(Message* message1, Message* message2) const = 0; + + // Swap fields listed in fields vector of two messages. + virtual void SwapFields(Message* message1, + Message* message2, + const vector& fields) + const = 0; + + // Swap two elements of a repeated field. + virtual void SwapElements(Message* message, + const FieldDescriptor* field, + int index1, + int index2) const = 0; + + // List all fields of the message which are currently set. This includes + // extensions. Singular fields will only be listed if HasField(field) would + // return true and repeated fields will only be listed if FieldSize(field) + // would return non-zero. Fields (both normal fields and extension fields) + // will be listed ordered by field number. + virtual void ListFields(const Message& message, + vector* output) const = 0; + + // Singular field getters ------------------------------------------ + // These get the value of a non-repeated field. They return the default + // value for fields that aren't set. + + virtual int32 GetInt32 (const Message& message, + const FieldDescriptor* field) const = 0; + virtual int64 GetInt64 (const Message& message, + const FieldDescriptor* field) const = 0; + virtual uint32 GetUInt32(const Message& message, + const FieldDescriptor* field) const = 0; + virtual uint64 GetUInt64(const Message& message, + const FieldDescriptor* field) const = 0; + virtual float GetFloat (const Message& message, + const FieldDescriptor* field) const = 0; + virtual double GetDouble(const Message& message, + const FieldDescriptor* field) const = 0; + virtual bool GetBool (const Message& message, + const FieldDescriptor* field) const = 0; + virtual string GetString(const Message& message, + const FieldDescriptor* field) const = 0; + virtual const EnumValueDescriptor* GetEnum( + const Message& message, const FieldDescriptor* field) const = 0; + // See MutableMessage() for the meaning of the "factory" parameter. + virtual const Message& GetMessage(const Message& message, + const FieldDescriptor* field, + MessageFactory* factory = NULL) const = 0; + + // Get a string value without copying, if possible. + // + // GetString() necessarily returns a copy of the string. This can be + // inefficient when the string is already stored in a string object in the + // underlying message. GetStringReference() will return a reference to the + // underlying string in this case. Otherwise, it will copy the string into + // *scratch and return that. + // + // Note: It is perfectly reasonable and useful to write code like: + // str = reflection->GetStringReference(field, &str); + // This line would ensure that only one copy of the string is made + // regardless of the field's underlying representation. When initializing + // a newly-constructed string, though, it's just as fast and more readable + // to use code like: + // string str = reflection->GetString(field); + virtual const string& GetStringReference(const Message& message, + const FieldDescriptor* field, + string* scratch) const = 0; + + + // Singular field mutators ----------------------------------------- + // These mutate the value of a non-repeated field. + + virtual void SetInt32 (Message* message, + const FieldDescriptor* field, int32 value) const = 0; + virtual void SetInt64 (Message* message, + const FieldDescriptor* field, int64 value) const = 0; + virtual void SetUInt32(Message* message, + const FieldDescriptor* field, uint32 value) const = 0; + virtual void SetUInt64(Message* message, + const FieldDescriptor* field, uint64 value) const = 0; + virtual void SetFloat (Message* message, + const FieldDescriptor* field, float value) const = 0; + virtual void SetDouble(Message* message, + const FieldDescriptor* field, double value) const = 0; + virtual void SetBool (Message* message, + const FieldDescriptor* field, bool value) const = 0; + virtual void SetString(Message* message, + const FieldDescriptor* field, + const string& value) const = 0; + virtual void SetEnum (Message* message, + const FieldDescriptor* field, + const EnumValueDescriptor* value) const = 0; + // Get a mutable pointer to a field with a message type. If a MessageFactory + // is provided, it will be used to construct instances of the sub-message; + // otherwise, the default factory is used. If the field is an extension that + // does not live in the same pool as the containing message's descriptor (e.g. + // it lives in an overlay pool), then a MessageFactory must be provided. + // If you have no idea what that meant, then you probably don't need to worry + // about it (don't provide a MessageFactory). WARNING: If the + // FieldDescriptor is for a compiled-in extension, then + // factory->GetPrototype(field->message_type() MUST return an instance of the + // compiled-in class for this type, NOT DynamicMessage. + virtual Message* MutableMessage(Message* message, + const FieldDescriptor* field, + MessageFactory* factory = NULL) const = 0; + // Replaces the message specified by 'field' with the already-allocated object + // sub_message, passing ownership to the message. If the field contained a + // message, that message is deleted. If sub_message is NULL, the field is + // cleared. + virtual void SetAllocatedMessage(Message* message, + Message* sub_message, + const FieldDescriptor* field) const = 0; + // Releases the message specified by 'field' and returns the pointer, + // ReleaseMessage() will return the message the message object if it exists. + // Otherwise, it may or may not return NULL. In any case, if the return value + // is non-NULL, the caller takes ownership of the pointer. + // If the field existed (HasField() is true), then the returned pointer will + // be the same as the pointer returned by MutableMessage(). + // This function has the same effect as ClearField(). + virtual Message* ReleaseMessage(Message* message, + const FieldDescriptor* field, + MessageFactory* factory = NULL) const = 0; + + + // Repeated field getters ------------------------------------------ + // These get the value of one element of a repeated field. + + virtual int32 GetRepeatedInt32 (const Message& message, + const FieldDescriptor* field, + int index) const = 0; + virtual int64 GetRepeatedInt64 (const Message& message, + const FieldDescriptor* field, + int index) const = 0; + virtual uint32 GetRepeatedUInt32(const Message& message, + const FieldDescriptor* field, + int index) const = 0; + virtual uint64 GetRepeatedUInt64(const Message& message, + const FieldDescriptor* field, + int index) const = 0; + virtual float GetRepeatedFloat (const Message& message, + const FieldDescriptor* field, + int index) const = 0; + virtual double GetRepeatedDouble(const Message& message, + const FieldDescriptor* field, + int index) const = 0; + virtual bool GetRepeatedBool (const Message& message, + const FieldDescriptor* field, + int index) const = 0; + virtual string GetRepeatedString(const Message& message, + const FieldDescriptor* field, + int index) const = 0; + virtual const EnumValueDescriptor* GetRepeatedEnum( + const Message& message, + const FieldDescriptor* field, int index) const = 0; + virtual const Message& GetRepeatedMessage( + const Message& message, + const FieldDescriptor* field, int index) const = 0; + + // See GetStringReference(), above. + virtual const string& GetRepeatedStringReference( + const Message& message, const FieldDescriptor* field, + int index, string* scratch) const = 0; + + + // Repeated field mutators ----------------------------------------- + // These mutate the value of one element of a repeated field. + + virtual void SetRepeatedInt32 (Message* message, + const FieldDescriptor* field, + int index, int32 value) const = 0; + virtual void SetRepeatedInt64 (Message* message, + const FieldDescriptor* field, + int index, int64 value) const = 0; + virtual void SetRepeatedUInt32(Message* message, + const FieldDescriptor* field, + int index, uint32 value) const = 0; + virtual void SetRepeatedUInt64(Message* message, + const FieldDescriptor* field, + int index, uint64 value) const = 0; + virtual void SetRepeatedFloat (Message* message, + const FieldDescriptor* field, + int index, float value) const = 0; + virtual void SetRepeatedDouble(Message* message, + const FieldDescriptor* field, + int index, double value) const = 0; + virtual void SetRepeatedBool (Message* message, + const FieldDescriptor* field, + int index, bool value) const = 0; + virtual void SetRepeatedString(Message* message, + const FieldDescriptor* field, + int index, const string& value) const = 0; + virtual void SetRepeatedEnum(Message* message, + const FieldDescriptor* field, int index, + const EnumValueDescriptor* value) const = 0; + // Get a mutable pointer to an element of a repeated field with a message + // type. + virtual Message* MutableRepeatedMessage( + Message* message, const FieldDescriptor* field, int index) const = 0; + + + // Repeated field adders ------------------------------------------- + // These add an element to a repeated field. + + virtual void AddInt32 (Message* message, + const FieldDescriptor* field, int32 value) const = 0; + virtual void AddInt64 (Message* message, + const FieldDescriptor* field, int64 value) const = 0; + virtual void AddUInt32(Message* message, + const FieldDescriptor* field, uint32 value) const = 0; + virtual void AddUInt64(Message* message, + const FieldDescriptor* field, uint64 value) const = 0; + virtual void AddFloat (Message* message, + const FieldDescriptor* field, float value) const = 0; + virtual void AddDouble(Message* message, + const FieldDescriptor* field, double value) const = 0; + virtual void AddBool (Message* message, + const FieldDescriptor* field, bool value) const = 0; + virtual void AddString(Message* message, + const FieldDescriptor* field, + const string& value) const = 0; + virtual void AddEnum (Message* message, + const FieldDescriptor* field, + const EnumValueDescriptor* value) const = 0; + // See MutableMessage() for comments on the "factory" parameter. + virtual Message* AddMessage(Message* message, + const FieldDescriptor* field, + MessageFactory* factory = NULL) const = 0; + + + // Repeated field accessors ------------------------------------------------- + // The methods above, e.g. GetRepeatedInt32(msg, fd, index), provide singular + // access to the data in a RepeatedField. The methods below provide aggregate + // access by exposing the RepeatedField object itself with the Message. + // Applying these templates to inappropriate types will lead to an undefined + // reference at link time (e.g. GetRepeatedField<***double>), or possibly a + // template matching error at compile time (e.g. GetRepeatedPtrField). + // + // Usage example: my_doubs = refl->GetRepeatedField(msg, fd); + + // for T = Cord and all protobuf scalar types except enums. + template + const RepeatedField& GetRepeatedField( + const Message&, const FieldDescriptor*) const; + + // for T = Cord and all protobuf scalar types except enums. + template + RepeatedField* MutableRepeatedField( + Message*, const FieldDescriptor*) const; + + // for T = string, google::protobuf::internal::StringPieceField + // google::protobuf::Message & descendants. + template + const RepeatedPtrField& GetRepeatedPtrField( + const Message&, const FieldDescriptor*) const; + + // for T = string, google::protobuf::internal::StringPieceField + // google::protobuf::Message & descendants. + template + RepeatedPtrField* MutableRepeatedPtrField( + Message*, const FieldDescriptor*) const; + + // Extensions ---------------------------------------------------------------- + + // Try to find an extension of this message type by fully-qualified field + // name. Returns NULL if no extension is known for this name or number. + virtual const FieldDescriptor* FindKnownExtensionByName( + const string& name) const = 0; + + // Try to find an extension of this message type by field number. + // Returns NULL if no extension is known for this name or number. + virtual const FieldDescriptor* FindKnownExtensionByNumber( + int number) const = 0; + + // --------------------------------------------------------------------------- + + protected: + // Obtain a pointer to a Repeated Field Structure and do some type checking: + // on field->cpp_type(), + // on field->field_option().ctype() (if ctype >= 0) + // of field->message_type() (if message_type != NULL). + // We use 1 routine rather than 4 (const vs mutable) x (scalar vs pointer). + virtual void* MutableRawRepeatedField( + Message* message, const FieldDescriptor* field, FieldDescriptor::CppType, + int ctype, const Descriptor* message_type) const = 0; + + private: + // Special version for specialized implementations of string. We can't call + // MutableRawRepeatedField directly here because we don't have access to + // FieldOptions::* which are defined in descriptor.pb.h. Including that + // file here is not possible because it would cause a circular include cycle. + void* MutableRawRepeatedString( + Message* message, const FieldDescriptor* field, bool is_string) const; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Reflection); +}; + +// Abstract interface for a factory for message objects. +class LIBPROTOBUF_EXPORT MessageFactory { + public: + inline MessageFactory() {} + virtual ~MessageFactory(); + + // Given a Descriptor, gets or constructs the default (prototype) Message + // of that type. You can then call that message's New() method to construct + // a mutable message of that type. + // + // Calling this method twice with the same Descriptor returns the same + // object. The returned object remains property of the factory. Also, any + // objects created by calling the prototype's New() method share some data + // with the prototype, so these must be destroyed before the MessageFactory + // is destroyed. + // + // The given descriptor must outlive the returned message, and hence must + // outlive the MessageFactory. + // + // Some implementations do not support all types. GetPrototype() will + // return NULL if the descriptor passed in is not supported. + // + // This method may or may not be thread-safe depending on the implementation. + // Each implementation should document its own degree thread-safety. + virtual const Message* GetPrototype(const Descriptor* type) = 0; + + // Gets a MessageFactory which supports all generated, compiled-in messages. + // In other words, for any compiled-in type FooMessage, the following is true: + // MessageFactory::generated_factory()->GetPrototype( + // FooMessage::descriptor()) == FooMessage::default_instance() + // This factory supports all types which are found in + // DescriptorPool::generated_pool(). If given a descriptor from any other + // pool, GetPrototype() will return NULL. (You can also check if a + // descriptor is for a generated message by checking if + // descriptor->file()->pool() == DescriptorPool::generated_pool().) + // + // This factory is 100% thread-safe; calling GetPrototype() does not modify + // any shared data. + // + // This factory is a singleton. The caller must not delete the object. + static MessageFactory* generated_factory(); + + // For internal use only: Registers a .proto file at static initialization + // time, to be placed in generated_factory. The first time GetPrototype() + // is called with a descriptor from this file, |register_messages| will be + // called, with the file name as the parameter. It must call + // InternalRegisterGeneratedMessage() (below) to register each message type + // in the file. This strange mechanism is necessary because descriptors are + // built lazily, so we can't register types by their descriptor until we + // know that the descriptor exists. |filename| must be a permanent string. + static void InternalRegisterGeneratedFile( + const char* filename, void (*register_messages)(const string&)); + + // For internal use only: Registers a message type. Called only by the + // functions which are registered with InternalRegisterGeneratedFile(), + // above. + static void InternalRegisterGeneratedMessage(const Descriptor* descriptor, + const Message* prototype); + + + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MessageFactory); +}; + +#define DECLARE_GET_REPEATED_FIELD(TYPE) \ +template<> \ +LIBPROTOBUF_EXPORT \ +const RepeatedField& Reflection::GetRepeatedField( \ + const Message& message, const FieldDescriptor* field) const; \ + \ +template<> \ +RepeatedField* Reflection::MutableRepeatedField( \ + Message* message, const FieldDescriptor* field) const; + +DECLARE_GET_REPEATED_FIELD(int32) +DECLARE_GET_REPEATED_FIELD(int64) +DECLARE_GET_REPEATED_FIELD(uint32) +DECLARE_GET_REPEATED_FIELD(uint64) +DECLARE_GET_REPEATED_FIELD(float) +DECLARE_GET_REPEATED_FIELD(double) +DECLARE_GET_REPEATED_FIELD(bool) + +#undef DECLARE_GET_REPEATED_FIELD + +// ============================================================================= +// Implementation details for {Get,Mutable}RawRepeatedPtrField. We provide +// specializations for , and and handle +// everything else with the default template which will match any type having +// a method with signature "static const google::protobuf::Descriptor* descriptor()". +// Such a type presumably is a descendant of google::protobuf::Message. + +template<> +inline const RepeatedPtrField& Reflection::GetRepeatedPtrField( + const Message& message, const FieldDescriptor* field) const { + return *static_cast* >( + MutableRawRepeatedString(const_cast(&message), field, true)); +} + +template<> +inline RepeatedPtrField* Reflection::MutableRepeatedPtrField( + Message* message, const FieldDescriptor* field) const { + return static_cast* >( + MutableRawRepeatedString(message, field, true)); +} + + +// ----- + +template<> +inline const RepeatedPtrField& Reflection::GetRepeatedPtrField( + const Message& message, const FieldDescriptor* field) const { + return *static_cast* >( + MutableRawRepeatedField(const_cast(&message), field, + FieldDescriptor::CPPTYPE_MESSAGE, -1, + NULL)); +} + +template<> +inline RepeatedPtrField* Reflection::MutableRepeatedPtrField( + Message* message, const FieldDescriptor* field) const { + return static_cast* >( + MutableRawRepeatedField(message, field, + FieldDescriptor::CPPTYPE_MESSAGE, -1, + NULL)); +} + +template +inline const RepeatedPtrField& Reflection::GetRepeatedPtrField( + const Message& message, const FieldDescriptor* field) const { + return *static_cast* >( + MutableRawRepeatedField(const_cast(&message), field, + FieldDescriptor::CPPTYPE_MESSAGE, -1, + PB::default_instance().GetDescriptor())); +} + +template +inline RepeatedPtrField* Reflection::MutableRepeatedPtrField( + Message* message, const FieldDescriptor* field) const { + return static_cast* >( + MutableRawRepeatedField(message, field, + FieldDescriptor::CPPTYPE_MESSAGE, -1, + PB::default_instance().GetDescriptor())); +} + +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_MESSAGE_H__ diff --git a/kortex_gazebo/include/google/protobuf/message_lite.h b/kortex_gazebo/include/google/protobuf/message_lite.h new file mode 100644 index 00000000..027cabf9 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/message_lite.h @@ -0,0 +1,247 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Authors: wink@google.com (Wink Saville), +// kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// Defines MessageLite, the abstract interface implemented by all (lite +// and non-lite) protocol message objects. + +#ifndef GOOGLE_PROTOBUF_MESSAGE_LITE_H__ +#define GOOGLE_PROTOBUF_MESSAGE_LITE_H__ + +#include + +namespace google { +namespace protobuf { + +namespace io { + class CodedInputStream; + class CodedOutputStream; + class ZeroCopyInputStream; + class ZeroCopyOutputStream; +} + +// Interface to light weight protocol messages. +// +// This interface is implemented by all protocol message objects. Non-lite +// messages additionally implement the Message interface, which is a +// subclass of MessageLite. Use MessageLite instead when you only need +// the subset of features which it supports -- namely, nothing that uses +// descriptors or reflection. You can instruct the protocol compiler +// to generate classes which implement only MessageLite, not the full +// Message interface, by adding the following line to the .proto file: +// +// option optimize_for = LITE_RUNTIME; +// +// This is particularly useful on resource-constrained systems where +// the full protocol buffers runtime library is too big. +// +// Note that on non-constrained systems (e.g. servers) when you need +// to link in lots of protocol definitions, a better way to reduce +// total code footprint is to use optimize_for = CODE_SIZE. This +// will make the generated code smaller while still supporting all the +// same features (at the expense of speed). optimize_for = LITE_RUNTIME +// is best when you only have a small number of message types linked +// into your binary, in which case the size of the protocol buffers +// runtime itself is the biggest problem. +class LIBPROTOBUF_EXPORT MessageLite { + public: + inline MessageLite() {} + virtual ~MessageLite(); + + // Basic Operations ------------------------------------------------ + + // Get the name of this message type, e.g. "foo.bar.BazProto". + virtual string GetTypeName() const = 0; + + // Construct a new instance of the same type. Ownership is passed to the + // caller. + virtual MessageLite* New() const = 0; + + // Clear all fields of the message and set them to their default values. + // Clear() avoids freeing memory, assuming that any memory allocated + // to hold parts of the message will be needed again to hold the next + // message. If you actually want to free the memory used by a Message, + // you must delete it. + virtual void Clear() = 0; + + // Quickly check if all required fields have values set. + virtual bool IsInitialized() const = 0; + + // This is not implemented for Lite messages -- it just returns "(cannot + // determine missing fields for lite message)". However, it is implemented + // for full messages. See message.h. + virtual string InitializationErrorString() const; + + // If |other| is the exact same class as this, calls MergeFrom(). Otherwise, + // results are undefined (probably crash). + virtual void CheckTypeAndMergeFrom(const MessageLite& other) = 0; + + // Parsing --------------------------------------------------------- + // Methods for parsing in protocol buffer format. Most of these are + // just simple wrappers around MergeFromCodedStream(). Clear() will be called + // before merging the input. + + // Fill the message with a protocol buffer parsed from the given input + // stream. Returns false on a read error or if the input is in the + // wrong format. + bool ParseFromCodedStream(io::CodedInputStream* input); + // Like ParseFromCodedStream(), but accepts messages that are missing + // required fields. + bool ParsePartialFromCodedStream(io::CodedInputStream* input); + // Read a protocol buffer from the given zero-copy input stream. If + // successful, the entire input will be consumed. + bool ParseFromZeroCopyStream(io::ZeroCopyInputStream* input); + // Like ParseFromZeroCopyStream(), but accepts messages that are missing + // required fields. + bool ParsePartialFromZeroCopyStream(io::ZeroCopyInputStream* input); + // Read a protocol buffer from the given zero-copy input stream, expecting + // the message to be exactly "size" bytes long. If successful, exactly + // this many bytes will have been consumed from the input. + bool ParseFromBoundedZeroCopyStream(io::ZeroCopyInputStream* input, int size); + // Like ParseFromBoundedZeroCopyStream(), but accepts messages that are + // missing required fields. + bool ParsePartialFromBoundedZeroCopyStream(io::ZeroCopyInputStream* input, + int size); + // Parse a protocol buffer contained in a string. + bool ParseFromString(const string& data); + // Like ParseFromString(), but accepts messages that are missing + // required fields. + bool ParsePartialFromString(const string& data); + // Parse a protocol buffer contained in an array of bytes. + bool ParseFromArray(const void* data, int size); + // Like ParseFromArray(), but accepts messages that are missing + // required fields. + bool ParsePartialFromArray(const void* data, int size); + + + // Reads a protocol buffer from the stream and merges it into this + // Message. Singular fields read from the input overwrite what is + // already in the Message and repeated fields are appended to those + // already present. + // + // It is the responsibility of the caller to call input->LastTagWas() + // (for groups) or input->ConsumedEntireMessage() (for non-groups) after + // this returns to verify that the message's end was delimited correctly. + // + // ParsefromCodedStream() is implemented as Clear() followed by + // MergeFromCodedStream(). + bool MergeFromCodedStream(io::CodedInputStream* input); + + // Like MergeFromCodedStream(), but succeeds even if required fields are + // missing in the input. + // + // MergeFromCodedStream() is just implemented as MergePartialFromCodedStream() + // followed by IsInitialized(). + virtual bool MergePartialFromCodedStream(io::CodedInputStream* input) = 0; + + + // Serialization --------------------------------------------------- + // Methods for serializing in protocol buffer format. Most of these + // are just simple wrappers around ByteSize() and SerializeWithCachedSizes(). + + // Write a protocol buffer of this message to the given output. Returns + // false on a write error. If the message is missing required fields, + // this may GOOGLE_CHECK-fail. + bool SerializeToCodedStream(io::CodedOutputStream* output) const; + // Like SerializeToCodedStream(), but allows missing required fields. + bool SerializePartialToCodedStream(io::CodedOutputStream* output) const; + // Write the message to the given zero-copy output stream. All required + // fields must be set. + bool SerializeToZeroCopyStream(io::ZeroCopyOutputStream* output) const; + // Like SerializeToZeroCopyStream(), but allows missing required fields. + bool SerializePartialToZeroCopyStream(io::ZeroCopyOutputStream* output) const; + // Serialize the message and store it in the given string. All required + // fields must be set. + bool SerializeToString(string* output) const; + // Like SerializeToString(), but allows missing required fields. + bool SerializePartialToString(string* output) const; + // Serialize the message and store it in the given byte array. All required + // fields must be set. + bool SerializeToArray(void* data, int size) const; + // Like SerializeToArray(), but allows missing required fields. + bool SerializePartialToArray(void* data, int size) const; + + // Make a string encoding the message. Is equivalent to calling + // SerializeToString() on a string and using that. Returns the empty + // string if SerializeToString() would have returned an error. + // Note: If you intend to generate many such strings, you may + // reduce heap fragmentation by instead re-using the same string + // object with calls to SerializeToString(). + string SerializeAsString() const; + // Like SerializeAsString(), but allows missing required fields. + string SerializePartialAsString() const; + + // Like SerializeToString(), but appends to the data to the string's existing + // contents. All required fields must be set. + bool AppendToString(string* output) const; + // Like AppendToString(), but allows missing required fields. + bool AppendPartialToString(string* output) const; + + // Computes the serialized size of the message. This recursively calls + // ByteSize() on all embedded messages. If a subclass does not override + // this, it MUST override SetCachedSize(). + virtual int ByteSize() const = 0; + + // Serializes the message without recomputing the size. The message must + // not have changed since the last call to ByteSize(); if it has, the results + // are undefined. + virtual void SerializeWithCachedSizes( + io::CodedOutputStream* output) const = 0; + + // Like SerializeWithCachedSizes, but writes directly to *target, returning + // a pointer to the byte immediately after the last byte written. "target" + // must point at a byte array of at least ByteSize() bytes. + virtual uint8* SerializeWithCachedSizesToArray(uint8* target) const; + + // Returns the result of the last call to ByteSize(). An embedded message's + // size is needed both to serialize it (because embedded messages are + // length-delimited) and to compute the outer message's size. Caching + // the size avoids computing it multiple times. + // + // ByteSize() does not automatically use the cached size when available + // because this would require invalidating it every time the message was + // modified, which would be too hard and expensive. (E.g. if a deeply-nested + // sub-message is changed, all of its parents' cached sizes would need to be + // invalidated, which is too much work for an otherwise inlined setter + // method.) + virtual int GetCachedSize() const = 0; + + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MessageLite); +}; + +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_MESSAGE_LITE_H__ diff --git a/kortex_gazebo/include/google/protobuf/reflection_ops.h b/kortex_gazebo/include/google/protobuf/reflection_ops.h new file mode 100644 index 00000000..4775911e --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/reflection_ops.h @@ -0,0 +1,81 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// This header is logically internal, but is made public because it is used +// from protocol-compiler-generated code, which may reside in other components. + +#ifndef GOOGLE_PROTOBUF_REFLECTION_OPS_H__ +#define GOOGLE_PROTOBUF_REFLECTION_OPS_H__ + +#include +#include + +namespace google { +namespace protobuf { +namespace internal { + +// Basic operations that can be performed using reflection. +// These can be used as a cheap way to implement the corresponding +// methods of the Message interface, though they are likely to be +// slower than implementations tailored for the specific message type. +// +// This class should stay limited to operations needed to implement +// the Message interface. +// +// This class is really a namespace that contains only static methods. +class LIBPROTOBUF_EXPORT ReflectionOps { + public: + static void Copy(const Message& from, Message* to); + static void Merge(const Message& from, Message* to); + static void Clear(Message* message); + static bool IsInitialized(const Message& message); + static void DiscardUnknownFields(Message* message); + + // Finds all unset required fields in the message and adds their full + // paths (e.g. "foo.bar[5].baz") to *names. "prefix" will be attached to + // the front of each name. + static void FindInitializationErrors(const Message& message, + const string& prefix, + vector* errors); + + private: + // All methods are static. No need to construct. + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ReflectionOps); +}; + +} // namespace internal +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_REFLECTION_OPS_H__ diff --git a/kortex_gazebo/include/google/protobuf/repeated_field.h b/kortex_gazebo/include/google/protobuf/repeated_field.h new file mode 100644 index 00000000..50051831 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/repeated_field.h @@ -0,0 +1,1603 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// RepeatedField and RepeatedPtrField are used by generated protocol message +// classes to manipulate repeated fields. These classes are very similar to +// STL's vector, but include a number of optimizations found to be useful +// specifically in the case of Protocol Buffers. RepeatedPtrField is +// particularly different from STL vector as it manages ownership of the +// pointers that it contains. +// +// Typically, clients should not need to access RepeatedField objects directly, +// but should instead use the accessor functions generated automatically by the +// protocol compiler. + +#ifndef GOOGLE_PROTOBUF_REPEATED_FIELD_H__ +#define GOOGLE_PROTOBUF_REPEATED_FIELD_H__ + +#ifdef _MSC_VER +// This is required for min/max on VS2013 only. +#include +#endif + +#include +#include +#include +#include +#include +#include + +namespace google { + +namespace upb { +namespace google_opensource { +class GMR_Handlers; +} // namespace google_opensource +} // namespace upb + +namespace protobuf { + +class Message; + +namespace internal { + +static const int kMinRepeatedFieldAllocationSize = 4; + +// A utility function for logging that doesn't need any template types. +void LogIndexOutOfBounds(int index, int size); + +template +inline int CalculateReserve(Iter begin, Iter end, std::forward_iterator_tag) { + return std::distance(begin, end); +} + +template +inline int CalculateReserve(Iter begin, Iter end, std::input_iterator_tag) { + return -1; +} + +template +inline int CalculateReserve(Iter begin, Iter end) { + typedef typename std::iterator_traits::iterator_category Category; + return CalculateReserve(begin, end, Category()); +} +} // namespace internal + + +// RepeatedField is used to represent repeated fields of a primitive type (in +// other words, everything except strings and nested Messages). Most users will +// not ever use a RepeatedField directly; they will use the get-by-index, +// set-by-index, and add accessors that are generated for all repeated fields. +template +class RepeatedField { + public: + RepeatedField(); + RepeatedField(const RepeatedField& other); + template + RepeatedField(Iter begin, const Iter& end); + ~RepeatedField(); + + RepeatedField& operator=(const RepeatedField& other); + + bool empty() const; + int size() const; + + const Element& Get(int index) const; + Element* Mutable(int index); + void Set(int index, const Element& value); + void Add(const Element& value); + Element* Add(); + // Remove the last element in the array. + void RemoveLast(); + + // Extract elements with indices in "[start .. start+num-1]". + // Copy them into "elements[0 .. num-1]" if "elements" is not NULL. + // Caution: implementation also moves elements with indices [start+num ..]. + // Calling this routine inside a loop can cause quadratic behavior. + void ExtractSubrange(int start, int num, Element* elements); + + void Clear(); + void MergeFrom(const RepeatedField& other); + void CopyFrom(const RepeatedField& other); + + // Reserve space to expand the field to at least the given size. If the + // array is grown, it will always be at least doubled in size. + void Reserve(int new_size); + + // Resize the RepeatedField to a new, smaller size. This is O(1). + void Truncate(int new_size); + + void AddAlreadyReserved(const Element& value); + Element* AddAlreadyReserved(); + int Capacity() const; + + // Like STL resize. Uses value to fill appended elements. + // Like Truncate() if new_size <= size(), otherwise this is + // O(new_size - size()). + void Resize(int new_size, const Element& value); + + // Gets the underlying array. This pointer is possibly invalidated by + // any add or remove operation. + Element* mutable_data(); + const Element* data() const; + + // Swap entire contents with "other". + void Swap(RepeatedField* other); + + // Swap two elements. + void SwapElements(int index1, int index2); + + // STL-like iterator support + typedef Element* iterator; + typedef const Element* const_iterator; + typedef Element value_type; + typedef value_type& reference; + typedef const value_type& const_reference; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef int size_type; + typedef ptrdiff_t difference_type; + + iterator begin(); + const_iterator begin() const; + iterator end(); + const_iterator end() const; + + // Reverse iterator support + typedef std::reverse_iterator const_reverse_iterator; + typedef std::reverse_iterator reverse_iterator; + reverse_iterator rbegin() { + return reverse_iterator(end()); + } + const_reverse_iterator rbegin() const { + return const_reverse_iterator(end()); + } + reverse_iterator rend() { + return reverse_iterator(begin()); + } + const_reverse_iterator rend() const { + return const_reverse_iterator(begin()); + } + + // Returns the number of bytes used by the repeated field, excluding + // sizeof(*this) + int SpaceUsedExcludingSelf() const; + + private: + static const int kInitialSize = 0; + + Element* elements_; + int current_size_; + int total_size_; + + // Move the contents of |from| into |to|, possibly clobbering |from| in the + // process. For primitive types this is just a memcpy(), but it could be + // specialized for non-primitive types to, say, swap each element instead. + void MoveArray(Element to[], Element from[], int size); + + // Copy the elements of |from| into |to|. + void CopyArray(Element to[], const Element from[], int size); +}; + +namespace internal { +template class RepeatedPtrIterator; +template class RepeatedPtrOverPtrsIterator; +} // namespace internal + +namespace internal { + +// This is a helper template to copy an array of elements effeciently when they +// have a trivial copy constructor, and correctly otherwise. This really +// shouldn't be necessary, but our compiler doesn't optimize std::copy very +// effectively. +template ::value> +struct ElementCopier { + void operator()(Element to[], const Element from[], int array_size); +}; + +} // namespace internal + +namespace internal { + +// This is the common base class for RepeatedPtrFields. It deals only in void* +// pointers. Users should not use this interface directly. +// +// The methods of this interface correspond to the methods of RepeatedPtrField, +// but may have a template argument called TypeHandler. Its signature is: +// class TypeHandler { +// public: +// typedef MyType Type; +// static Type* New(); +// static void Delete(Type*); +// static void Clear(Type*); +// static void Merge(const Type& from, Type* to); +// +// // Only needs to be implemented if SpaceUsedExcludingSelf() is called. +// static int SpaceUsed(const Type&); +// }; +class LIBPROTOBUF_EXPORT RepeatedPtrFieldBase { + protected: + // The reflection implementation needs to call protected methods directly, + // reinterpreting pointers as being to Message instead of a specific Message + // subclass. + friend class GeneratedMessageReflection; + + // ExtensionSet stores repeated message extensions as + // RepeatedPtrField, but non-lite ExtensionSets need to + // implement SpaceUsed(), and thus need to call SpaceUsedExcludingSelf() + // reinterpreting MessageLite as Message. ExtensionSet also needs to make + // use of AddFromCleared(), which is not part of the public interface. + friend class ExtensionSet; + + // To parse directly into a proto2 generated class, the upb class GMR_Handlers + // needs to be able to modify a RepeatedPtrFieldBase directly. + friend class LIBPROTOBUF_EXPORT upb::google_opensource::GMR_Handlers; + + RepeatedPtrFieldBase(); + + // Must be called from destructor. + template + void Destroy(); + + bool empty() const; + int size() const; + + template + const typename TypeHandler::Type& Get(int index) const; + template + typename TypeHandler::Type* Mutable(int index); + template + typename TypeHandler::Type* Add(); + template + void RemoveLast(); + template + void Clear(); + template + void MergeFrom(const RepeatedPtrFieldBase& other); + template + void CopyFrom(const RepeatedPtrFieldBase& other); + + void CloseGap(int start, int num) { + // Close up a gap of "num" elements starting at offset "start". + for (int i = start + num; i < allocated_size_; ++i) + elements_[i - num] = elements_[i]; + current_size_ -= num; + allocated_size_ -= num; + } + + void Reserve(int new_size); + + int Capacity() const; + + // Used for constructing iterators. + void* const* raw_data() const; + void** raw_mutable_data() const; + + template + typename TypeHandler::Type** mutable_data(); + template + const typename TypeHandler::Type* const* data() const; + + void Swap(RepeatedPtrFieldBase* other); + + void SwapElements(int index1, int index2); + + template + int SpaceUsedExcludingSelf() const; + + + // Advanced memory management -------------------------------------- + + // Like Add(), but if there are no cleared objects to use, returns NULL. + template + typename TypeHandler::Type* AddFromCleared(); + + template + void AddAllocated(typename TypeHandler::Type* value); + template + typename TypeHandler::Type* ReleaseLast(); + + int ClearedCount() const; + template + void AddCleared(typename TypeHandler::Type* value); + template + typename TypeHandler::Type* ReleaseCleared(); + + private: + static const int kInitialSize = 0; + + void** elements_; + int current_size_; + int allocated_size_; + int total_size_; + + template + static inline typename TypeHandler::Type* cast(void* element) { + return reinterpret_cast(element); + } + template + static inline const typename TypeHandler::Type* cast(const void* element) { + return reinterpret_cast(element); + } + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(RepeatedPtrFieldBase); +}; + +template +class GenericTypeHandler { + public: + typedef GenericType Type; + static GenericType* New() { return new GenericType; } + static void Delete(GenericType* value) { delete value; } + static void Clear(GenericType* value) { value->Clear(); } + static void Merge(const GenericType& from, GenericType* to) { + to->MergeFrom(from); + } + static int SpaceUsed(const GenericType& value) { return value.SpaceUsed(); } + static const Type& default_instance() { return Type::default_instance(); } +}; + +template <> +inline void GenericTypeHandler::Merge( + const MessageLite& from, MessageLite* to) { + to->CheckTypeAndMergeFrom(from); +} + +template <> +inline const MessageLite& GenericTypeHandler::default_instance() { + // Yes, the behavior of the code is undefined, but this function is only + // called when we're already deep into the world of undefined, because the + // caller called Get(index) out of bounds. + MessageLite* null = NULL; + return *null; +} + +template <> +inline const Message& GenericTypeHandler::default_instance() { + // Yes, the behavior of the code is undefined, but this function is only + // called when we're already deep into the world of undefined, because the + // caller called Get(index) out of bounds. + Message* null = NULL; + return *null; +} + + +// HACK: If a class is declared as DLL-exported in MSVC, it insists on +// generating copies of all its methods -- even inline ones -- to include +// in the DLL. But SpaceUsed() calls StringSpaceUsedExcludingSelf() which +// isn't in the lite library, therefore the lite library cannot link if +// StringTypeHandler is exported. So, we factor out StringTypeHandlerBase, +// export that, then make StringTypeHandler be a subclass which is NOT +// exported. +// TODO(kenton): There has to be a better way. +class LIBPROTOBUF_EXPORT StringTypeHandlerBase { + public: + typedef string Type; + static string* New(); + static void Delete(string* value); + static void Clear(string* value) { value->clear(); } + static void Merge(const string& from, string* to) { *to = from; } + static const Type& default_instance() { + return ::google::protobuf::internal::GetEmptyString(); + } +}; + +class StringTypeHandler : public StringTypeHandlerBase { + public: + static int SpaceUsed(const string& value) { + return sizeof(value) + StringSpaceUsedExcludingSelf(value); + } +}; + + +} // namespace internal + +// RepeatedPtrField is like RepeatedField, but used for repeated strings or +// Messages. +template +class RepeatedPtrField : public internal::RepeatedPtrFieldBase { + public: + RepeatedPtrField(); + RepeatedPtrField(const RepeatedPtrField& other); + template + RepeatedPtrField(Iter begin, const Iter& end); + ~RepeatedPtrField(); + + RepeatedPtrField& operator=(const RepeatedPtrField& other); + + bool empty() const; + int size() const; + + const Element& Get(int index) const; + Element* Mutable(int index); + Element* Add(); + + // Remove the last element in the array. + // Ownership of the element is retained by the array. + void RemoveLast(); + + // Delete elements with indices in the range [start .. start+num-1]. + // Caution: implementation moves all elements with indices [start+num .. ]. + // Calling this routine inside a loop can cause quadratic behavior. + void DeleteSubrange(int start, int num); + + void Clear(); + void MergeFrom(const RepeatedPtrField& other); + void CopyFrom(const RepeatedPtrField& other); + + // Reserve space to expand the field to at least the given size. This only + // resizes the pointer array; it doesn't allocate any objects. If the + // array is grown, it will always be at least doubled in size. + void Reserve(int new_size); + + int Capacity() const; + + // Gets the underlying array. This pointer is possibly invalidated by + // any add or remove operation. + Element** mutable_data(); + const Element* const* data() const; + + // Swap entire contents with "other". + void Swap(RepeatedPtrField* other); + + // Swap two elements. + void SwapElements(int index1, int index2); + + // STL-like iterator support + typedef internal::RepeatedPtrIterator iterator; + typedef internal::RepeatedPtrIterator const_iterator; + typedef Element value_type; + typedef value_type& reference; + typedef const value_type& const_reference; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef int size_type; + typedef ptrdiff_t difference_type; + + iterator begin(); + const_iterator begin() const; + iterator end(); + const_iterator end() const; + + // Reverse iterator support + typedef std::reverse_iterator const_reverse_iterator; + typedef std::reverse_iterator reverse_iterator; + reverse_iterator rbegin() { + return reverse_iterator(end()); + } + const_reverse_iterator rbegin() const { + return const_reverse_iterator(end()); + } + reverse_iterator rend() { + return reverse_iterator(begin()); + } + const_reverse_iterator rend() const { + return const_reverse_iterator(begin()); + } + + // Custom STL-like iterator that iterates over and returns the underlying + // pointers to Element rather than Element itself. + typedef internal::RepeatedPtrOverPtrsIterator + pointer_iterator; + typedef internal::RepeatedPtrOverPtrsIterator + const_pointer_iterator; + pointer_iterator pointer_begin(); + const_pointer_iterator pointer_begin() const; + pointer_iterator pointer_end(); + const_pointer_iterator pointer_end() const; + + // Returns (an estimate of) the number of bytes used by the repeated field, + // excluding sizeof(*this). + int SpaceUsedExcludingSelf() const; + + // Advanced memory management -------------------------------------- + // When hardcore memory management becomes necessary -- as it sometimes + // does here at Google -- the following methods may be useful. + + // Add an already-allocated object, passing ownership to the + // RepeatedPtrField. + void AddAllocated(Element* value); + // Remove the last element and return it, passing ownership to the caller. + // Requires: size() > 0 + Element* ReleaseLast(); + + // Extract elements with indices in the range "[start .. start+num-1]". + // The caller assumes ownership of the extracted elements and is responsible + // for deleting them when they are no longer needed. + // If "elements" is non-NULL, then pointers to the extracted elements + // are stored in "elements[0 .. num-1]" for the convenience of the caller. + // If "elements" is NULL, then the caller must use some other mechanism + // to perform any further operations (like deletion) on these elements. + // Caution: implementation also moves elements with indices [start+num ..]. + // Calling this routine inside a loop can cause quadratic behavior. + void ExtractSubrange(int start, int num, Element** elements); + + // When elements are removed by calls to RemoveLast() or Clear(), they + // are not actually freed. Instead, they are cleared and kept so that + // they can be reused later. This can save lots of CPU time when + // repeatedly reusing a protocol message for similar purposes. + // + // Hardcore programs may choose to manipulate these cleared objects + // to better optimize memory management using the following routines. + + // Get the number of cleared objects that are currently being kept + // around for reuse. + int ClearedCount() const; + // Add an element to the pool of cleared objects, passing ownership to + // the RepeatedPtrField. The element must be cleared prior to calling + // this method. + void AddCleared(Element* value); + // Remove a single element from the cleared pool and return it, passing + // ownership to the caller. The element is guaranteed to be cleared. + // Requires: ClearedCount() > 0 + Element* ReleaseCleared(); + + protected: + // Note: RepeatedPtrField SHOULD NOT be subclassed by users. We only + // subclass it in one place as a hack for compatibility with proto1. The + // subclass needs to know about TypeHandler in order to call protected + // methods on RepeatedPtrFieldBase. + class TypeHandler; + +}; + +// implementation ==================================================== + +template +inline RepeatedField::RepeatedField() + : elements_(NULL), + current_size_(0), + total_size_(kInitialSize) { +} + +template +inline RepeatedField::RepeatedField(const RepeatedField& other) + : elements_(NULL), + current_size_(0), + total_size_(kInitialSize) { + CopyFrom(other); +} + +template +template +inline RepeatedField::RepeatedField(Iter begin, const Iter& end) + : elements_(NULL), + current_size_(0), + total_size_(kInitialSize) { + int reserve = internal::CalculateReserve(begin, end); + if (reserve != -1) { + Reserve(reserve); + for (; begin != end; ++begin) { + AddAlreadyReserved(*begin); + } + } else { + for (; begin != end; ++begin) { + Add(*begin); + } + } +} + +template +RepeatedField::~RepeatedField() { + delete [] elements_; +} + +template +inline RepeatedField& +RepeatedField::operator=(const RepeatedField& other) { + if (this != &other) + CopyFrom(other); + return *this; +} + +template +inline bool RepeatedField::empty() const { + return current_size_ == 0; +} + +template +inline int RepeatedField::size() const { + return current_size_; +} + +template +inline int RepeatedField::Capacity() const { + return total_size_; +} + +template +inline void RepeatedField::AddAlreadyReserved(const Element& value) { + GOOGLE_DCHECK_LT(size(), Capacity()); + elements_[current_size_++] = value; +} + +template +inline Element* RepeatedField::AddAlreadyReserved() { + GOOGLE_DCHECK_LT(size(), Capacity()); + return &elements_[current_size_++]; +} + +template +inline void RepeatedField::Resize(int new_size, const Element& value) { + GOOGLE_DCHECK_GE(new_size, 0); + if (new_size > size()) { + Reserve(new_size); + std::fill(&elements_[current_size_], &elements_[new_size], value); + } + current_size_ = new_size; +} + +template +inline const Element& RepeatedField::Get(int index) const { + GOOGLE_DCHECK_GE(index, 0); + GOOGLE_DCHECK_LT(index, size()); + return elements_[index]; +} + +template +inline Element* RepeatedField::Mutable(int index) { + GOOGLE_DCHECK_GE(index, 0); + GOOGLE_DCHECK_LT(index, size()); + return elements_ + index; +} + +template +inline void RepeatedField::Set(int index, const Element& value) { + GOOGLE_DCHECK_GE(index, 0); + GOOGLE_DCHECK_LT(index, size()); + elements_[index] = value; +} + +template +inline void RepeatedField::Add(const Element& value) { + if (current_size_ == total_size_) Reserve(total_size_ + 1); + elements_[current_size_++] = value; +} + +template +inline Element* RepeatedField::Add() { + if (current_size_ == total_size_) Reserve(total_size_ + 1); + return &elements_[current_size_++]; +} + +template +inline void RepeatedField::RemoveLast() { + GOOGLE_DCHECK_GT(current_size_, 0); + --current_size_; +} + +template +void RepeatedField::ExtractSubrange( + int start, int num, Element* elements) { + GOOGLE_DCHECK_GE(start, 0); + GOOGLE_DCHECK_GE(num, 0); + GOOGLE_DCHECK_LE(start + num, this->size()); + + // Save the values of the removed elements if requested. + if (elements != NULL) { + for (int i = 0; i < num; ++i) + elements[i] = this->Get(i + start); + } + + // Slide remaining elements down to fill the gap. + if (num > 0) { + for (int i = start + num; i < this->size(); ++i) + this->Set(i - num, this->Get(i)); + this->Truncate(this->size() - num); + } +} + +template +inline void RepeatedField::Clear() { + current_size_ = 0; +} + +template +inline void RepeatedField::MergeFrom(const RepeatedField& other) { + GOOGLE_CHECK_NE(&other, this); + if (other.current_size_ != 0) { + Reserve(current_size_ + other.current_size_); + CopyArray(elements_ + current_size_, other.elements_, other.current_size_); + current_size_ += other.current_size_; + } +} + +template +inline void RepeatedField::CopyFrom(const RepeatedField& other) { + if (&other == this) return; + Clear(); + MergeFrom(other); +} + +template +inline Element* RepeatedField::mutable_data() { + return elements_; +} + +template +inline const Element* RepeatedField::data() const { + return elements_; +} + + +template +void RepeatedField::Swap(RepeatedField* other) { + if (this == other) return; + Element* swap_elements = elements_; + int swap_current_size = current_size_; + int swap_total_size = total_size_; + + elements_ = other->elements_; + current_size_ = other->current_size_; + total_size_ = other->total_size_; + + other->elements_ = swap_elements; + other->current_size_ = swap_current_size; + other->total_size_ = swap_total_size; +} + +template +void RepeatedField::SwapElements(int index1, int index2) { + using std::swap; // enable ADL with fallback + swap(elements_[index1], elements_[index2]); +} + +template +inline typename RepeatedField::iterator +RepeatedField::begin() { + return elements_; +} +template +inline typename RepeatedField::const_iterator +RepeatedField::begin() const { + return elements_; +} +template +inline typename RepeatedField::iterator +RepeatedField::end() { + return elements_ + current_size_; +} +template +inline typename RepeatedField::const_iterator +RepeatedField::end() const { + return elements_ + current_size_; +} + +template +inline int RepeatedField::SpaceUsedExcludingSelf() const { + return (elements_ != NULL) ? total_size_ * sizeof(elements_[0]) : 0; +} + +// Avoid inlining of Reserve(): new, copy, and delete[] lead to a significant +// amount of code bloat. +template +void RepeatedField::Reserve(int new_size) { + if (total_size_ >= new_size) return; + + Element* old_elements = elements_; + total_size_ = max(google::protobuf::internal::kMinRepeatedFieldAllocationSize, + max(total_size_ * 2, new_size)); + elements_ = new Element[total_size_]; + if (old_elements != NULL) { + MoveArray(elements_, old_elements, current_size_); + delete [] old_elements; + } +} + +template +inline void RepeatedField::Truncate(int new_size) { + GOOGLE_DCHECK_LE(new_size, current_size_); + current_size_ = new_size; +} + +template +inline void RepeatedField::MoveArray( + Element to[], Element from[], int array_size) { + CopyArray(to, from, array_size); +} + +template +inline void RepeatedField::CopyArray( + Element to[], const Element from[], int array_size) { + internal::ElementCopier()(to, from, array_size); +} + +namespace internal { + +template +void ElementCopier::operator()( + Element to[], const Element from[], int array_size) { + std::copy(from, from + array_size, to); +} + +template +struct ElementCopier { + void operator()(Element to[], const Element from[], int array_size) { + memcpy(to, from, array_size * sizeof(Element)); + } +}; + +} // namespace internal + + +// ------------------------------------------------------------------- + +namespace internal { + +inline RepeatedPtrFieldBase::RepeatedPtrFieldBase() + : elements_(NULL), + current_size_(0), + allocated_size_(0), + total_size_(kInitialSize) { +} + +template +void RepeatedPtrFieldBase::Destroy() { + for (int i = 0; i < allocated_size_; i++) { + TypeHandler::Delete(cast(elements_[i])); + } + delete [] elements_; +} + +inline bool RepeatedPtrFieldBase::empty() const { + return current_size_ == 0; +} + +inline int RepeatedPtrFieldBase::size() const { + return current_size_; +} + +template +inline const typename TypeHandler::Type& +RepeatedPtrFieldBase::Get(int index) const { + GOOGLE_DCHECK_GE(index, 0); + GOOGLE_DCHECK_LT(index, size()); + return *cast(elements_[index]); +} + + +template +inline typename TypeHandler::Type* +RepeatedPtrFieldBase::Mutable(int index) { + GOOGLE_DCHECK_GE(index, 0); + GOOGLE_DCHECK_LT(index, size()); + return cast(elements_[index]); +} + +template +inline typename TypeHandler::Type* RepeatedPtrFieldBase::Add() { + if (current_size_ < allocated_size_) { + return cast(elements_[current_size_++]); + } + if (allocated_size_ == total_size_) Reserve(total_size_ + 1); + typename TypeHandler::Type* result = TypeHandler::New(); + ++allocated_size_; + elements_[current_size_++] = result; + return result; +} + +template +inline void RepeatedPtrFieldBase::RemoveLast() { + GOOGLE_DCHECK_GT(current_size_, 0); + TypeHandler::Clear(cast(elements_[--current_size_])); +} + +template +void RepeatedPtrFieldBase::Clear() { + for (int i = 0; i < current_size_; i++) { + TypeHandler::Clear(cast(elements_[i])); + } + current_size_ = 0; +} + +template +inline void RepeatedPtrFieldBase::MergeFrom(const RepeatedPtrFieldBase& other) { + GOOGLE_CHECK_NE(&other, this); + Reserve(current_size_ + other.current_size_); + for (int i = 0; i < other.current_size_; i++) { + TypeHandler::Merge(other.template Get(i), Add()); + } +} + +template +inline void RepeatedPtrFieldBase::CopyFrom(const RepeatedPtrFieldBase& other) { + if (&other == this) return; + RepeatedPtrFieldBase::Clear(); + RepeatedPtrFieldBase::MergeFrom(other); +} + +inline int RepeatedPtrFieldBase::Capacity() const { + return total_size_; +} + +inline void* const* RepeatedPtrFieldBase::raw_data() const { + return elements_; +} + +inline void** RepeatedPtrFieldBase::raw_mutable_data() const { + return elements_; +} + +template +inline typename TypeHandler::Type** RepeatedPtrFieldBase::mutable_data() { + // TODO(kenton): Breaks C++ aliasing rules. We should probably remove this + // method entirely. + return reinterpret_cast(elements_); +} + +template +inline const typename TypeHandler::Type* const* +RepeatedPtrFieldBase::data() const { + // TODO(kenton): Breaks C++ aliasing rules. We should probably remove this + // method entirely. + return reinterpret_cast(elements_); +} + +inline void RepeatedPtrFieldBase::SwapElements(int index1, int index2) { + using std::swap; // enable ADL with fallback + swap(elements_[index1], elements_[index2]); +} + +template +inline int RepeatedPtrFieldBase::SpaceUsedExcludingSelf() const { + int allocated_bytes = + (elements_ != NULL) ? total_size_ * sizeof(elements_[0]) : 0; + for (int i = 0; i < allocated_size_; ++i) { + allocated_bytes += TypeHandler::SpaceUsed(*cast(elements_[i])); + } + return allocated_bytes; +} + +template +inline typename TypeHandler::Type* RepeatedPtrFieldBase::AddFromCleared() { + if (current_size_ < allocated_size_) { + return cast(elements_[current_size_++]); + } else { + return NULL; + } +} + +template +void RepeatedPtrFieldBase::AddAllocated( + typename TypeHandler::Type* value) { + // Make room for the new pointer. + if (current_size_ == total_size_) { + // The array is completely full with no cleared objects, so grow it. + Reserve(total_size_ + 1); + ++allocated_size_; + } else if (allocated_size_ == total_size_) { + // There is no more space in the pointer array because it contains some + // cleared objects awaiting reuse. We don't want to grow the array in this + // case because otherwise a loop calling AddAllocated() followed by Clear() + // would leak memory. + TypeHandler::Delete(cast(elements_[current_size_])); + } else if (current_size_ < allocated_size_) { + // We have some cleared objects. We don't care about their order, so we + // can just move the first one to the end to make space. + elements_[allocated_size_] = elements_[current_size_]; + ++allocated_size_; + } else { + // There are no cleared objects. + ++allocated_size_; + } + + elements_[current_size_++] = value; +} + +template +inline typename TypeHandler::Type* RepeatedPtrFieldBase::ReleaseLast() { + GOOGLE_DCHECK_GT(current_size_, 0); + typename TypeHandler::Type* result = + cast(elements_[--current_size_]); + --allocated_size_; + if (current_size_ < allocated_size_) { + // There are cleared elements on the end; replace the removed element + // with the last allocated element. + elements_[current_size_] = elements_[allocated_size_]; + } + return result; +} + +inline int RepeatedPtrFieldBase::ClearedCount() const { + return allocated_size_ - current_size_; +} + +template +inline void RepeatedPtrFieldBase::AddCleared( + typename TypeHandler::Type* value) { + if (allocated_size_ == total_size_) Reserve(total_size_ + 1); + elements_[allocated_size_++] = value; +} + +template +inline typename TypeHandler::Type* RepeatedPtrFieldBase::ReleaseCleared() { + GOOGLE_DCHECK_GT(allocated_size_, current_size_); + return cast(elements_[--allocated_size_]); +} + +} // namespace internal + +// ------------------------------------------------------------------- + +template +class RepeatedPtrField::TypeHandler + : public internal::GenericTypeHandler { +}; + +template <> +class RepeatedPtrField::TypeHandler + : public internal::StringTypeHandler { +}; + + +template +inline RepeatedPtrField::RepeatedPtrField() {} + +template +inline RepeatedPtrField::RepeatedPtrField( + const RepeatedPtrField& other) + : RepeatedPtrFieldBase() { + CopyFrom(other); +} + +template +template +inline RepeatedPtrField::RepeatedPtrField( + Iter begin, const Iter& end) { + int reserve = internal::CalculateReserve(begin, end); + if (reserve != -1) { + Reserve(reserve); + } + for (; begin != end; ++begin) { + *Add() = *begin; + } +} + +template +RepeatedPtrField::~RepeatedPtrField() { + Destroy(); +} + +template +inline RepeatedPtrField& RepeatedPtrField::operator=( + const RepeatedPtrField& other) { + if (this != &other) + CopyFrom(other); + return *this; +} + +template +inline bool RepeatedPtrField::empty() const { + return RepeatedPtrFieldBase::empty(); +} + +template +inline int RepeatedPtrField::size() const { + return RepeatedPtrFieldBase::size(); +} + +template +inline const Element& RepeatedPtrField::Get(int index) const { + return RepeatedPtrFieldBase::Get(index); +} + + +template +inline Element* RepeatedPtrField::Mutable(int index) { + return RepeatedPtrFieldBase::Mutable(index); +} + +template +inline Element* RepeatedPtrField::Add() { + return RepeatedPtrFieldBase::Add(); +} + +template +inline void RepeatedPtrField::RemoveLast() { + RepeatedPtrFieldBase::RemoveLast(); +} + +template +inline void RepeatedPtrField::DeleteSubrange(int start, int num) { + GOOGLE_DCHECK_GE(start, 0); + GOOGLE_DCHECK_GE(num, 0); + GOOGLE_DCHECK_LE(start + num, size()); + for (int i = 0; i < num; ++i) + delete RepeatedPtrFieldBase::Mutable(start + i); + ExtractSubrange(start, num, NULL); +} + +template +inline void RepeatedPtrField::ExtractSubrange( + int start, int num, Element** elements) { + GOOGLE_DCHECK_GE(start, 0); + GOOGLE_DCHECK_GE(num, 0); + GOOGLE_DCHECK_LE(start + num, size()); + + if (num > 0) { + // Save the values of the removed elements if requested. + if (elements != NULL) { + for (int i = 0; i < num; ++i) + elements[i] = RepeatedPtrFieldBase::Mutable(i + start); + } + CloseGap(start, num); + } +} + +template +inline void RepeatedPtrField::Clear() { + RepeatedPtrFieldBase::Clear(); +} + +template +inline void RepeatedPtrField::MergeFrom( + const RepeatedPtrField& other) { + RepeatedPtrFieldBase::MergeFrom(other); +} + +template +inline void RepeatedPtrField::CopyFrom( + const RepeatedPtrField& other) { + RepeatedPtrFieldBase::CopyFrom(other); +} + +template +inline Element** RepeatedPtrField::mutable_data() { + return RepeatedPtrFieldBase::mutable_data(); +} + +template +inline const Element* const* RepeatedPtrField::data() const { + return RepeatedPtrFieldBase::data(); +} + +template +void RepeatedPtrField::Swap(RepeatedPtrField* other) { + RepeatedPtrFieldBase::Swap(other); +} + +template +void RepeatedPtrField::SwapElements(int index1, int index2) { + RepeatedPtrFieldBase::SwapElements(index1, index2); +} + +template +inline int RepeatedPtrField::SpaceUsedExcludingSelf() const { + return RepeatedPtrFieldBase::SpaceUsedExcludingSelf(); +} + +template +inline void RepeatedPtrField::AddAllocated(Element* value) { + RepeatedPtrFieldBase::AddAllocated(value); +} + +template +inline Element* RepeatedPtrField::ReleaseLast() { + return RepeatedPtrFieldBase::ReleaseLast(); +} + + +template +inline int RepeatedPtrField::ClearedCount() const { + return RepeatedPtrFieldBase::ClearedCount(); +} + +template +inline void RepeatedPtrField::AddCleared(Element* value) { + return RepeatedPtrFieldBase::AddCleared(value); +} + +template +inline Element* RepeatedPtrField::ReleaseCleared() { + return RepeatedPtrFieldBase::ReleaseCleared(); +} + +template +inline void RepeatedPtrField::Reserve(int new_size) { + return RepeatedPtrFieldBase::Reserve(new_size); +} + +template +inline int RepeatedPtrField::Capacity() const { + return RepeatedPtrFieldBase::Capacity(); +} + +// ------------------------------------------------------------------- + +namespace internal { + +// STL-like iterator implementation for RepeatedPtrField. You should not +// refer to this class directly; use RepeatedPtrField::iterator instead. +// +// The iterator for RepeatedPtrField, RepeatedPtrIterator, is +// very similar to iterator_ptr in util/gtl/iterator_adaptors.h, +// but adds random-access operators and is modified to wrap a void** base +// iterator (since RepeatedPtrField stores its array as a void* array and +// casting void** to T** would violate C++ aliasing rules). +// +// This code based on net/proto/proto-array-internal.h by Jeffrey Yasskin +// (jyasskin@google.com). +template +class RepeatedPtrIterator + : public std::iterator< + std::random_access_iterator_tag, Element> { + public: + typedef RepeatedPtrIterator iterator; + typedef std::iterator< + std::random_access_iterator_tag, Element> superclass; + + // Shadow the value_type in std::iterator<> because const_iterator::value_type + // needs to be T, not const T. + typedef typename remove_const::type value_type; + + // Let the compiler know that these are type names, so we don't have to + // write "typename" in front of them everywhere. + typedef typename superclass::reference reference; + typedef typename superclass::pointer pointer; + typedef typename superclass::difference_type difference_type; + + RepeatedPtrIterator() : it_(NULL) {} + explicit RepeatedPtrIterator(void* const* it) : it_(it) {} + + // Allow "upcasting" from RepeatedPtrIterator to + // RepeatedPtrIterator. + template + RepeatedPtrIterator(const RepeatedPtrIterator& other) + : it_(other.it_) { + // Force a compiler error if the other type is not convertible to ours. + if (false) { + implicit_cast(0); + } + } + + // dereferenceable + reference operator*() const { return *reinterpret_cast(*it_); } + pointer operator->() const { return &(operator*()); } + + // {inc,dec}rementable + iterator& operator++() { ++it_; return *this; } + iterator operator++(int) { return iterator(it_++); } + iterator& operator--() { --it_; return *this; } + iterator operator--(int) { return iterator(it_--); } + + // equality_comparable + bool operator==(const iterator& x) const { return it_ == x.it_; } + bool operator!=(const iterator& x) const { return it_ != x.it_; } + + // less_than_comparable + bool operator<(const iterator& x) const { return it_ < x.it_; } + bool operator<=(const iterator& x) const { return it_ <= x.it_; } + bool operator>(const iterator& x) const { return it_ > x.it_; } + bool operator>=(const iterator& x) const { return it_ >= x.it_; } + + // addable, subtractable + iterator& operator+=(difference_type d) { + it_ += d; + return *this; + } + friend iterator operator+(iterator it, difference_type d) { + it += d; + return it; + } + friend iterator operator+(difference_type d, iterator it) { + it += d; + return it; + } + iterator& operator-=(difference_type d) { + it_ -= d; + return *this; + } + friend iterator operator-(iterator it, difference_type d) { + it -= d; + return it; + } + + // indexable + reference operator[](difference_type d) const { return *(*this + d); } + + // random access iterator + difference_type operator-(const iterator& x) const { return it_ - x.it_; } + + private: + template + friend class RepeatedPtrIterator; + + // The internal iterator. + void* const* it_; +}; + +// Provide an iterator that operates on pointers to the underlying objects +// rather than the objects themselves as RepeatedPtrIterator does. +// Consider using this when working with stl algorithms that change +// the array. +// The VoidPtr template parameter holds the type-agnostic pointer value +// referenced by the iterator. It should either be "void *" for a mutable +// iterator, or "const void *" for a constant iterator. +template +class RepeatedPtrOverPtrsIterator + : public std::iterator { + public: + typedef RepeatedPtrOverPtrsIterator iterator; + typedef std::iterator< + std::random_access_iterator_tag, Element*> superclass; + + // Shadow the value_type in std::iterator<> because const_iterator::value_type + // needs to be T, not const T. + typedef typename remove_const::type value_type; + + // Let the compiler know that these are type names, so we don't have to + // write "typename" in front of them everywhere. + typedef typename superclass::reference reference; + typedef typename superclass::pointer pointer; + typedef typename superclass::difference_type difference_type; + + RepeatedPtrOverPtrsIterator() : it_(NULL) {} + explicit RepeatedPtrOverPtrsIterator(VoidPtr* it) : it_(it) {} + + // dereferenceable + reference operator*() const { return *reinterpret_cast(it_); } + pointer operator->() const { return &(operator*()); } + + // {inc,dec}rementable + iterator& operator++() { ++it_; return *this; } + iterator operator++(int) { return iterator(it_++); } + iterator& operator--() { --it_; return *this; } + iterator operator--(int) { return iterator(it_--); } + + // equality_comparable + bool operator==(const iterator& x) const { return it_ == x.it_; } + bool operator!=(const iterator& x) const { return it_ != x.it_; } + + // less_than_comparable + bool operator<(const iterator& x) const { return it_ < x.it_; } + bool operator<=(const iterator& x) const { return it_ <= x.it_; } + bool operator>(const iterator& x) const { return it_ > x.it_; } + bool operator>=(const iterator& x) const { return it_ >= x.it_; } + + // addable, subtractable + iterator& operator+=(difference_type d) { + it_ += d; + return *this; + } + friend iterator operator+(iterator it, difference_type d) { + it += d; + return it; + } + friend iterator operator+(difference_type d, iterator it) { + it += d; + return it; + } + iterator& operator-=(difference_type d) { + it_ -= d; + return *this; + } + friend iterator operator-(iterator it, difference_type d) { + it -= d; + return it; + } + + // indexable + reference operator[](difference_type d) const { return *(*this + d); } + + // random access iterator + difference_type operator-(const iterator& x) const { return it_ - x.it_; } + + private: + template + friend class RepeatedPtrIterator; + + // The internal iterator. + VoidPtr* it_; +}; + +} // namespace internal + +template +inline typename RepeatedPtrField::iterator +RepeatedPtrField::begin() { + return iterator(raw_data()); +} +template +inline typename RepeatedPtrField::const_iterator +RepeatedPtrField::begin() const { + return iterator(raw_data()); +} +template +inline typename RepeatedPtrField::iterator +RepeatedPtrField::end() { + return iterator(raw_data() + size()); +} +template +inline typename RepeatedPtrField::const_iterator +RepeatedPtrField::end() const { + return iterator(raw_data() + size()); +} + +template +inline typename RepeatedPtrField::pointer_iterator +RepeatedPtrField::pointer_begin() { + return pointer_iterator(raw_mutable_data()); +} +template +inline typename RepeatedPtrField::const_pointer_iterator +RepeatedPtrField::pointer_begin() const { + return const_pointer_iterator(const_cast(raw_mutable_data())); +} +template +inline typename RepeatedPtrField::pointer_iterator +RepeatedPtrField::pointer_end() { + return pointer_iterator(raw_mutable_data() + size()); +} +template +inline typename RepeatedPtrField::const_pointer_iterator +RepeatedPtrField::pointer_end() const { + return const_pointer_iterator( + const_cast(raw_mutable_data() + size())); +} + + +// Iterators and helper functions that follow the spirit of the STL +// std::back_insert_iterator and std::back_inserter but are tailor-made +// for RepeatedField and RepatedPtrField. Typical usage would be: +// +// std::copy(some_sequence.begin(), some_sequence.end(), +// google::protobuf::RepeatedFieldBackInserter(proto.mutable_sequence())); +// +// Ported by johannes from util/gtl/proto-array-iterators.h + +namespace internal { +// A back inserter for RepeatedField objects. +template class RepeatedFieldBackInsertIterator + : public std::iterator { + public: + explicit RepeatedFieldBackInsertIterator( + RepeatedField* const mutable_field) + : field_(mutable_field) { + } + RepeatedFieldBackInsertIterator& operator=(const T& value) { + field_->Add(value); + return *this; + } + RepeatedFieldBackInsertIterator& operator*() { + return *this; + } + RepeatedFieldBackInsertIterator& operator++() { + return *this; + } + RepeatedFieldBackInsertIterator& operator++(int /* unused */) { + return *this; + } + + private: + RepeatedField* field_; +}; + +// A back inserter for RepeatedPtrField objects. +template class RepeatedPtrFieldBackInsertIterator + : public std::iterator { + public: + RepeatedPtrFieldBackInsertIterator( + RepeatedPtrField* const mutable_field) + : field_(mutable_field) { + } + RepeatedPtrFieldBackInsertIterator& operator=(const T& value) { + *field_->Add() = value; + return *this; + } + RepeatedPtrFieldBackInsertIterator& operator=( + const T* const ptr_to_value) { + *field_->Add() = *ptr_to_value; + return *this; + } + RepeatedPtrFieldBackInsertIterator& operator*() { + return *this; + } + RepeatedPtrFieldBackInsertIterator& operator++() { + return *this; + } + RepeatedPtrFieldBackInsertIterator& operator++(int /* unused */) { + return *this; + } + + private: + RepeatedPtrField* field_; +}; + +// A back inserter for RepeatedPtrFields that inserts by transfering ownership +// of a pointer. +template class AllocatedRepeatedPtrFieldBackInsertIterator + : public std::iterator { + public: + explicit AllocatedRepeatedPtrFieldBackInsertIterator( + RepeatedPtrField* const mutable_field) + : field_(mutable_field) { + } + AllocatedRepeatedPtrFieldBackInsertIterator& operator=( + T* const ptr_to_value) { + field_->AddAllocated(ptr_to_value); + return *this; + } + AllocatedRepeatedPtrFieldBackInsertIterator& operator*() { + return *this; + } + AllocatedRepeatedPtrFieldBackInsertIterator& operator++() { + return *this; + } + AllocatedRepeatedPtrFieldBackInsertIterator& operator++( + int /* unused */) { + return *this; + } + + private: + RepeatedPtrField* field_; +}; +} // namespace internal + +// Provides a back insert iterator for RepeatedField instances, +// similar to std::back_inserter(). +template internal::RepeatedFieldBackInsertIterator +RepeatedFieldBackInserter(RepeatedField* const mutable_field) { + return internal::RepeatedFieldBackInsertIterator(mutable_field); +} + +// Provides a back insert iterator for RepeatedPtrField instances, +// similar to std::back_inserter(). +template internal::RepeatedPtrFieldBackInsertIterator +RepeatedPtrFieldBackInserter(RepeatedPtrField* const mutable_field) { + return internal::RepeatedPtrFieldBackInsertIterator(mutable_field); +} + +// Special back insert iterator for RepeatedPtrField instances, just in +// case someone wants to write generic template code that can access both +// RepeatedFields and RepeatedPtrFields using a common name. +template internal::RepeatedPtrFieldBackInsertIterator +RepeatedFieldBackInserter(RepeatedPtrField* const mutable_field) { + return internal::RepeatedPtrFieldBackInsertIterator(mutable_field); +} + +// Provides a back insert iterator for RepeatedPtrField instances +// similar to std::back_inserter() which transfers the ownership while +// copying elements. +template internal::AllocatedRepeatedPtrFieldBackInsertIterator +AllocatedRepeatedPtrFieldBackInserter( + RepeatedPtrField* const mutable_field) { + return internal::AllocatedRepeatedPtrFieldBackInsertIterator( + mutable_field); +} + +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_REPEATED_FIELD_H__ diff --git a/kortex_gazebo/include/google/protobuf/service.h b/kortex_gazebo/include/google/protobuf/service.h new file mode 100644 index 00000000..cc0b45d4 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/service.h @@ -0,0 +1,291 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// DEPRECATED: This module declares the abstract interfaces underlying proto2 +// RPC services. These are intented to be independent of any particular RPC +// implementation, so that proto2 services can be used on top of a variety +// of implementations. Starting with version 2.3.0, RPC implementations should +// not try to build on these, but should instead provide code generator plugins +// which generate code specific to the particular RPC implementation. This way +// the generated code can be more appropriate for the implementation in use +// and can avoid unnecessary layers of indirection. +// +// +// When you use the protocol compiler to compile a service definition, it +// generates two classes: An abstract interface for the service (with +// methods matching the service definition) and a "stub" implementation. +// A stub is just a type-safe wrapper around an RpcChannel which emulates a +// local implementation of the service. +// +// For example, the service definition: +// service MyService { +// rpc Foo(MyRequest) returns(MyResponse); +// } +// will generate abstract interface "MyService" and class "MyService::Stub". +// You could implement a MyService as follows: +// class MyServiceImpl : public MyService { +// public: +// MyServiceImpl() {} +// ~MyServiceImpl() {} +// +// // implements MyService --------------------------------------- +// +// void Foo(google::protobuf::RpcController* controller, +// const MyRequest* request, +// MyResponse* response, +// Closure* done) { +// // ... read request and fill in response ... +// done->Run(); +// } +// }; +// You would then register an instance of MyServiceImpl with your RPC server +// implementation. (How to do that depends on the implementation.) +// +// To call a remote MyServiceImpl, first you need an RpcChannel connected to it. +// How to construct a channel depends, again, on your RPC implementation. +// Here we use a hypothentical "MyRpcChannel" as an example: +// MyRpcChannel channel("rpc:hostname:1234/myservice"); +// MyRpcController controller; +// MyServiceImpl::Stub stub(&channel); +// FooRequest request; +// FooRespnose response; +// +// // ... fill in request ... +// +// stub.Foo(&controller, request, &response, NewCallback(HandleResponse)); +// +// On Thread-Safety: +// +// Different RPC implementations may make different guarantees about what +// threads they may run callbacks on, and what threads the application is +// allowed to use to call the RPC system. Portable software should be ready +// for callbacks to be called on any thread, but should not try to call the +// RPC system from any thread except for the ones on which it received the +// callbacks. Realistically, though, simple software will probably want to +// use a single-threaded RPC system while high-end software will want to +// use multiple threads. RPC implementations should provide multiple +// choices. + +#ifndef GOOGLE_PROTOBUF_SERVICE_H__ +#define GOOGLE_PROTOBUF_SERVICE_H__ + +#include +#include + +namespace google { +namespace protobuf { + +// Defined in this file. +class Service; +class RpcController; +class RpcChannel; + +// Defined in other files. +class Descriptor; // descriptor.h +class ServiceDescriptor; // descriptor.h +class MethodDescriptor; // descriptor.h +class Message; // message.h + +// Abstract base interface for protocol-buffer-based RPC services. Services +// themselves are abstract interfaces (implemented either by servers or as +// stubs), but they subclass this base interface. The methods of this +// interface can be used to call the methods of the Service without knowing +// its exact type at compile time (analogous to Reflection). +class LIBPROTOBUF_EXPORT Service { + public: + inline Service() {} + virtual ~Service(); + + // When constructing a stub, you may pass STUB_OWNS_CHANNEL as the second + // parameter to the constructor to tell it to delete its RpcChannel when + // destroyed. + enum ChannelOwnership { + STUB_OWNS_CHANNEL, + STUB_DOESNT_OWN_CHANNEL + }; + + // Get the ServiceDescriptor describing this service and its methods. + virtual const ServiceDescriptor* GetDescriptor() = 0; + + // Call a method of the service specified by MethodDescriptor. This is + // normally implemented as a simple switch() that calls the standard + // definitions of the service's methods. + // + // Preconditions: + // * method->service() == GetDescriptor() + // * request and response are of the exact same classes as the objects + // returned by GetRequestPrototype(method) and + // GetResponsePrototype(method). + // * After the call has started, the request must not be modified and the + // response must not be accessed at all until "done" is called. + // * "controller" is of the correct type for the RPC implementation being + // used by this Service. For stubs, the "correct type" depends on the + // RpcChannel which the stub is using. Server-side Service + // implementations are expected to accept whatever type of RpcController + // the server-side RPC implementation uses. + // + // Postconditions: + // * "done" will be called when the method is complete. This may be + // before CallMethod() returns or it may be at some point in the future. + // * If the RPC succeeded, "response" contains the response returned by + // the server. + // * If the RPC failed, "response"'s contents are undefined. The + // RpcController can be queried to determine if an error occurred and + // possibly to get more information about the error. + virtual void CallMethod(const MethodDescriptor* method, + RpcController* controller, + const Message* request, + Message* response, + Closure* done) = 0; + + // CallMethod() requires that the request and response passed in are of a + // particular subclass of Message. GetRequestPrototype() and + // GetResponsePrototype() get the default instances of these required types. + // You can then call Message::New() on these instances to construct mutable + // objects which you can then pass to CallMethod(). + // + // Example: + // const MethodDescriptor* method = + // service->GetDescriptor()->FindMethodByName("Foo"); + // Message* request = stub->GetRequestPrototype (method)->New(); + // Message* response = stub->GetResponsePrototype(method)->New(); + // request->ParseFromString(input); + // service->CallMethod(method, *request, response, callback); + virtual const Message& GetRequestPrototype( + const MethodDescriptor* method) const = 0; + virtual const Message& GetResponsePrototype( + const MethodDescriptor* method) const = 0; + + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Service); +}; + +// An RpcController mediates a single method call. The primary purpose of +// the controller is to provide a way to manipulate settings specific to the +// RPC implementation and to find out about RPC-level errors. +// +// The methods provided by the RpcController interface are intended to be a +// "least common denominator" set of features which we expect all +// implementations to support. Specific implementations may provide more +// advanced features (e.g. deadline propagation). +class LIBPROTOBUF_EXPORT RpcController { + public: + inline RpcController() {} + virtual ~RpcController(); + + // Client-side methods --------------------------------------------- + // These calls may be made from the client side only. Their results + // are undefined on the server side (may crash). + + // Resets the RpcController to its initial state so that it may be reused in + // a new call. Must not be called while an RPC is in progress. + virtual void Reset() = 0; + + // After a call has finished, returns true if the call failed. The possible + // reasons for failure depend on the RPC implementation. Failed() must not + // be called before a call has finished. If Failed() returns true, the + // contents of the response message are undefined. + virtual bool Failed() const = 0; + + // If Failed() is true, returns a human-readable description of the error. + virtual string ErrorText() const = 0; + + // Advises the RPC system that the caller desires that the RPC call be + // canceled. The RPC system may cancel it immediately, may wait awhile and + // then cancel it, or may not even cancel the call at all. If the call is + // canceled, the "done" callback will still be called and the RpcController + // will indicate that the call failed at that time. + virtual void StartCancel() = 0; + + // Server-side methods --------------------------------------------- + // These calls may be made from the server side only. Their results + // are undefined on the client side (may crash). + + // Causes Failed() to return true on the client side. "reason" will be + // incorporated into the message returned by ErrorText(). If you find + // you need to return machine-readable information about failures, you + // should incorporate it into your response protocol buffer and should + // NOT call SetFailed(). + virtual void SetFailed(const string& reason) = 0; + + // If true, indicates that the client canceled the RPC, so the server may + // as well give up on replying to it. The server should still call the + // final "done" callback. + virtual bool IsCanceled() const = 0; + + // Asks that the given callback be called when the RPC is canceled. The + // callback will always be called exactly once. If the RPC completes without + // being canceled, the callback will be called after completion. If the RPC + // has already been canceled when NotifyOnCancel() is called, the callback + // will be called immediately. + // + // NotifyOnCancel() must be called no more than once per request. + virtual void NotifyOnCancel(Closure* callback) = 0; + + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(RpcController); +}; + +// Abstract interface for an RPC channel. An RpcChannel represents a +// communication line to a Service which can be used to call that Service's +// methods. The Service may be running on another machine. Normally, you +// should not call an RpcChannel directly, but instead construct a stub Service +// wrapping it. Example: +// RpcChannel* channel = new MyRpcChannel("remotehost.example.com:1234"); +// MyService* service = new MyService::Stub(channel); +// service->MyMethod(request, &response, callback); +class LIBPROTOBUF_EXPORT RpcChannel { + public: + inline RpcChannel() {} + virtual ~RpcChannel(); + + // Call the given method of the remote service. The signature of this + // procedure looks the same as Service::CallMethod(), but the requirements + // are less strict in one important way: the request and response objects + // need not be of any specific class as long as their descriptors are + // method->input_type() and method->output_type(). + virtual void CallMethod(const MethodDescriptor* method, + RpcController* controller, + const Message* request, + Message* response, + Closure* done) = 0; + + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(RpcChannel); +}; + +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_SERVICE_H__ diff --git a/kortex_gazebo/include/google/protobuf/stubs/atomicops.h b/kortex_gazebo/include/google/protobuf/stubs/atomicops.h new file mode 100644 index 00000000..b1336e36 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/stubs/atomicops.h @@ -0,0 +1,227 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2012 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// The routines exported by this module are subtle. If you use them, even if +// you get the code right, it will depend on careful reasoning about atomicity +// and memory ordering; it will be less readable, and harder to maintain. If +// you plan to use these routines, you should have a good reason, such as solid +// evidence that performance would otherwise suffer, or there being no +// alternative. You should assume only properties explicitly guaranteed by the +// specifications in this file. You are almost certainly _not_ writing code +// just for the x86; if you assume x86 semantics, x86 hardware bugs and +// implementations on other archtectures will cause your code to break. If you +// do not know what you are doing, avoid these routines, and use a Mutex. +// +// It is incorrect to make direct assignments to/from an atomic variable. +// You should use one of the Load or Store routines. The NoBarrier +// versions are provided when no barriers are needed: +// NoBarrier_Store() +// NoBarrier_Load() +// Although there are currently no compiler enforcement, you are encouraged +// to use these. + +// This header and the implementations for each platform (located in +// atomicops_internals_*) must be kept in sync with the upstream code (V8). + +#ifndef GOOGLE_PROTOBUF_ATOMICOPS_H_ +#define GOOGLE_PROTOBUF_ATOMICOPS_H_ + +// Don't include this file for people not concerned about thread safety. +#ifndef GOOGLE_PROTOBUF_NO_THREAD_SAFETY + +#include + +namespace google { +namespace protobuf { +namespace internal { + +typedef int32 Atomic32; +#ifdef GOOGLE_PROTOBUF_ARCH_64_BIT +// We need to be able to go between Atomic64 and AtomicWord implicitly. This +// means Atomic64 and AtomicWord should be the same type on 64-bit. +#if defined(__ILP32__) || defined(GOOGLE_PROTOBUF_OS_NACL) || defined(GOOGLE_PROTOBUF_ARCH_SPARC) +// NaCl's intptr_t is not actually 64-bits on 64-bit! +// http://code.google.com/p/nativeclient/issues/detail?id=1162 +// sparcv9's pointer type is 32bits +typedef int64 Atomic64; +#else +typedef intptr_t Atomic64; +#endif +#endif + +// Use AtomicWord for a machine-sized pointer. It will use the Atomic32 or +// Atomic64 routines below, depending on your architecture. +typedef intptr_t AtomicWord; + +// Atomically execute: +// result = *ptr; +// if (*ptr == old_value) +// *ptr = new_value; +// return result; +// +// I.e., replace "*ptr" with "new_value" if "*ptr" used to be "old_value". +// Always return the old value of "*ptr" +// +// This routine implies no memory barriers. +Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value); + +// Atomically store new_value into *ptr, returning the previous value held in +// *ptr. This routine implies no memory barriers. +Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, Atomic32 new_value); + +// Atomically increment *ptr by "increment". Returns the new value of +// *ptr with the increment applied. This routine implies no memory barriers. +Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, Atomic32 increment); + +Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment); + +// These following lower-level operations are typically useful only to people +// implementing higher-level synchronization operations like spinlocks, +// mutexes, and condition-variables. They combine CompareAndSwap(), a load, or +// a store with appropriate memory-ordering instructions. "Acquire" operations +// ensure that no later memory access can be reordered ahead of the operation. +// "Release" operations ensure that no previous memory access can be reordered +// after the operation. "Barrier" operations have both "Acquire" and "Release" +// semantics. A MemoryBarrier() has "Barrier" semantics, but does no memory +// access. +Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value); +Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value); + +#if defined(__MINGW32__) && defined(MemoryBarrier) +#undef MemoryBarrier +#endif +void MemoryBarrier(); +void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value); +void Acquire_Store(volatile Atomic32* ptr, Atomic32 value); +void Release_Store(volatile Atomic32* ptr, Atomic32 value); + +Atomic32 NoBarrier_Load(volatile const Atomic32* ptr); +Atomic32 Acquire_Load(volatile const Atomic32* ptr); +Atomic32 Release_Load(volatile const Atomic32* ptr); + +// 64-bit atomic operations (only available on 64-bit processors). +#ifdef GOOGLE_PROTOBUF_ARCH_64_BIT +Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value); +Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr, Atomic64 new_value); +Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, Atomic64 increment); +Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr, Atomic64 increment); + +Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value); +Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value); +void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value); +void Acquire_Store(volatile Atomic64* ptr, Atomic64 value); +void Release_Store(volatile Atomic64* ptr, Atomic64 value); +Atomic64 NoBarrier_Load(volatile const Atomic64* ptr); +Atomic64 Acquire_Load(volatile const Atomic64* ptr); +Atomic64 Release_Load(volatile const Atomic64* ptr); +#endif // GOOGLE_PROTOBUF_ARCH_64_BIT + +} // namespace internal +} // namespace protobuf +} // namespace google + +// Include our platform specific implementation. +#define GOOGLE_PROTOBUF_ATOMICOPS_ERROR \ +#error "Atomic operations are not supported on your platform" + +// ThreadSanitizer, http://clang.llvm.org/docs/ThreadSanitizer.html. +#if defined(THREAD_SANITIZER) +#include +// MSVC. +#elif defined(_MSC_VER) +#if defined(GOOGLE_PROTOBUF_ARCH_IA32) || defined(GOOGLE_PROTOBUF_ARCH_X64) +#include +#else +GOOGLE_PROTOBUF_ATOMICOPS_ERROR +#endif + +// Solaris +#elif defined(GOOGLE_PROTOBUF_OS_SOLARIS) +#include + +// Apple. +#elif defined(GOOGLE_PROTOBUF_OS_APPLE) +#include + +// GCC. +#elif defined(__GNUC__) +#if defined(GOOGLE_PROTOBUF_ARCH_IA32) || defined(GOOGLE_PROTOBUF_ARCH_X64) +#include +#elif defined(GOOGLE_PROTOBUF_ARCH_ARM) && defined(__linux__) +#include +#elif defined(GOOGLE_PROTOBUF_ARCH_AARCH64) +#include +#elif defined(GOOGLE_PROTOBUF_ARCH_ARM_QNX) +#include +#elif defined(GOOGLE_PROTOBUF_ARCH_MIPS) || defined(GOOGLE_PROTOBUF_ARCH_MIPS64) +#include +#elif defined(__native_client__) +#include +#elif (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4)) +#include +#elif defined(__clang__) +#if __has_extension(c_atomic) +#include +#else +GOOGLE_PROTOBUF_ATOMICOPS_ERROR +#endif +#else +GOOGLE_PROTOBUF_ATOMICOPS_ERROR +#endif + +// Unknown. +#else +GOOGLE_PROTOBUF_ATOMICOPS_ERROR +#endif + +// On some platforms we need additional declarations to make AtomicWord +// compatible with our other Atomic* types. +#if defined(GOOGLE_PROTOBUF_OS_APPLE) +#include +#endif + +#undef GOOGLE_PROTOBUF_ATOMICOPS_ERROR + +#endif // GOOGLE_PROTOBUF_NO_THREAD_SAFETY + +#endif // GOOGLE_PROTOBUF_ATOMICOPS_H_ diff --git a/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_arm64_gcc.h b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_arm64_gcc.h new file mode 100644 index 00000000..0a2d2b89 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_arm64_gcc.h @@ -0,0 +1,325 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2012 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This file is an internal atomic implementation, use atomicops.h instead. + +#ifndef GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_ARM64_GCC_H_ +#define GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_ARM64_GCC_H_ + +namespace google { +namespace protobuf { +namespace internal { + +inline void MemoryBarrier() { + __asm__ __volatile__ ("dmb ish" ::: "memory"); // NOLINT +} + +// NoBarrier versions of the operation include "memory" in the clobber list. +// This is not required for direct usage of the NoBarrier versions of the +// operations. However this is required for correctness when they are used as +// part of the Acquire or Release versions, to ensure that nothing from outside +// the call is reordered between the operation and the memory barrier. This does +// not change the code generated, so has no or minimal impact on the +// NoBarrier operations. + +inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 prev; + int32_t temp; + + __asm__ __volatile__ ( // NOLINT + "0: \n\t" + "ldxr %w[prev], %[ptr] \n\t" // Load the previous value. + "cmp %w[prev], %w[old_value] \n\t" + "bne 1f \n\t" + "stxr %w[temp], %w[new_value], %[ptr] \n\t" // Try to store the new value. + "cbnz %w[temp], 0b \n\t" // Retry if it did not work. + "1: \n\t" + : [prev]"=&r" (prev), + [temp]"=&r" (temp), + [ptr]"+Q" (*ptr) + : [old_value]"IJr" (old_value), + [new_value]"r" (new_value) + : "cc", "memory" + ); // NOLINT + + return prev; +} + +inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, + Atomic32 new_value) { + Atomic32 result; + int32_t temp; + + __asm__ __volatile__ ( // NOLINT + "0: \n\t" + "ldxr %w[result], %[ptr] \n\t" // Load the previous value. + "stxr %w[temp], %w[new_value], %[ptr] \n\t" // Try to store the new value. + "cbnz %w[temp], 0b \n\t" // Retry if it did not work. + : [result]"=&r" (result), + [temp]"=&r" (temp), + [ptr]"+Q" (*ptr) + : [new_value]"r" (new_value) + : "memory" + ); // NOLINT + + return result; +} + +inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + Atomic32 result; + int32_t temp; + + __asm__ __volatile__ ( // NOLINT + "0: \n\t" + "ldxr %w[result], %[ptr] \n\t" // Load the previous value. + "add %w[result], %w[result], %w[increment]\n\t" + "stxr %w[temp], %w[result], %[ptr] \n\t" // Try to store the result. + "cbnz %w[temp], 0b \n\t" // Retry on failure. + : [result]"=&r" (result), + [temp]"=&r" (temp), + [ptr]"+Q" (*ptr) + : [increment]"IJr" (increment) + : "memory" + ); // NOLINT + + return result; +} + +inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + MemoryBarrier(); + Atomic32 result = NoBarrier_AtomicIncrement(ptr, increment); + MemoryBarrier(); + + return result; +} + +inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 prev = NoBarrier_CompareAndSwap(ptr, old_value, new_value); + MemoryBarrier(); + + return prev; +} + +inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + MemoryBarrier(); + Atomic32 prev = NoBarrier_CompareAndSwap(ptr, old_value, new_value); + + return prev; +} + +inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; +} + +inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; + MemoryBarrier(); +} + +inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { + __asm__ __volatile__ ( // NOLINT + "stlr %w[value], %[ptr] \n\t" + : [ptr]"=Q" (*ptr) + : [value]"r" (value) + : "memory" + ); // NOLINT +} + +inline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) { + return *ptr; +} + +inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { + Atomic32 value; + + __asm__ __volatile__ ( // NOLINT + "ldar %w[value], %[ptr] \n\t" + : [value]"=r" (value) + : [ptr]"Q" (*ptr) + : "memory" + ); // NOLINT + + return value; +} + +inline Atomic32 Release_Load(volatile const Atomic32* ptr) { + MemoryBarrier(); + return *ptr; +} + +// 64-bit versions of the operations. +// See the 32-bit versions for comments. + +inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + Atomic64 prev; + int32_t temp; + + __asm__ __volatile__ ( // NOLINT + "0: \n\t" + "ldxr %[prev], %[ptr] \n\t" + "cmp %[prev], %[old_value] \n\t" + "bne 1f \n\t" + "stxr %w[temp], %[new_value], %[ptr] \n\t" + "cbnz %w[temp], 0b \n\t" + "1: \n\t" + : [prev]"=&r" (prev), + [temp]"=&r" (temp), + [ptr]"+Q" (*ptr) + : [old_value]"IJr" (old_value), + [new_value]"r" (new_value) + : "cc", "memory" + ); // NOLINT + + return prev; +} + +inline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr, + Atomic64 new_value) { + Atomic64 result; + int32_t temp; + + __asm__ __volatile__ ( // NOLINT + "0: \n\t" + "ldxr %[result], %[ptr] \n\t" + "stxr %w[temp], %[new_value], %[ptr] \n\t" + "cbnz %w[temp], 0b \n\t" + : [result]"=&r" (result), + [temp]"=&r" (temp), + [ptr]"+Q" (*ptr) + : [new_value]"r" (new_value) + : "memory" + ); // NOLINT + + return result; +} + +inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { + Atomic64 result; + int32_t temp; + + __asm__ __volatile__ ( // NOLINT + "0: \n\t" + "ldxr %[result], %[ptr] \n\t" + "add %[result], %[result], %[increment] \n\t" + "stxr %w[temp], %[result], %[ptr] \n\t" + "cbnz %w[temp], 0b \n\t" + : [result]"=&r" (result), + [temp]"=&r" (temp), + [ptr]"+Q" (*ptr) + : [increment]"IJr" (increment) + : "memory" + ); // NOLINT + + return result; +} + +inline Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { + MemoryBarrier(); + Atomic64 result = NoBarrier_AtomicIncrement(ptr, increment); + MemoryBarrier(); + + return result; +} + +inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + Atomic64 prev = NoBarrier_CompareAndSwap(ptr, old_value, new_value); + MemoryBarrier(); + + return prev; +} + +inline Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + MemoryBarrier(); + Atomic64 prev = NoBarrier_CompareAndSwap(ptr, old_value, new_value); + + return prev; +} + +inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) { + *ptr = value; +} + +inline void Acquire_Store(volatile Atomic64* ptr, Atomic64 value) { + *ptr = value; + MemoryBarrier(); +} + +inline void Release_Store(volatile Atomic64* ptr, Atomic64 value) { + __asm__ __volatile__ ( // NOLINT + "stlr %x[value], %[ptr] \n\t" + : [ptr]"=Q" (*ptr) + : [value]"r" (value) + : "memory" + ); // NOLINT +} + +inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) { + return *ptr; +} + +inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) { + Atomic64 value; + + __asm__ __volatile__ ( // NOLINT + "ldar %x[value], %[ptr] \n\t" + : [value]"=r" (value) + : [ptr]"Q" (*ptr) + : "memory" + ); // NOLINT + + return value; +} + +inline Atomic64 Release_Load(volatile const Atomic64* ptr) { + MemoryBarrier(); + return *ptr; +} + +} // namespace internal +} // namespace protobuf +} // namespace google + +#endif // GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_ARM64_GCC_H_ diff --git a/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_arm_gcc.h b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_arm_gcc.h new file mode 100644 index 00000000..90e727b0 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_arm_gcc.h @@ -0,0 +1,151 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2012 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This file is an internal atomic implementation, use atomicops.h instead. +// +// LinuxKernelCmpxchg and Barrier_AtomicIncrement are from Google Gears. + +#ifndef GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_ARM_GCC_H_ +#define GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_ARM_GCC_H_ + +namespace google { +namespace protobuf { +namespace internal { + +// 0xffff0fc0 is the hard coded address of a function provided by +// the kernel which implements an atomic compare-exchange. On older +// ARM architecture revisions (pre-v6) this may be implemented using +// a syscall. This address is stable, and in active use (hard coded) +// by at least glibc-2.7 and the Android C library. +typedef Atomic32 (*LinuxKernelCmpxchgFunc)(Atomic32 old_value, + Atomic32 new_value, + volatile Atomic32* ptr); +LinuxKernelCmpxchgFunc pLinuxKernelCmpxchg __attribute__((weak)) = + (LinuxKernelCmpxchgFunc) 0xffff0fc0; + +typedef void (*LinuxKernelMemoryBarrierFunc)(void); +LinuxKernelMemoryBarrierFunc pLinuxKernelMemoryBarrier __attribute__((weak)) = + (LinuxKernelMemoryBarrierFunc) 0xffff0fa0; + + +inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 prev_value = *ptr; + do { + if (!pLinuxKernelCmpxchg(old_value, new_value, + const_cast(ptr))) { + return old_value; + } + prev_value = *ptr; + } while (prev_value == old_value); + return prev_value; +} + +inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, + Atomic32 new_value) { + Atomic32 old_value; + do { + old_value = *ptr; + } while (pLinuxKernelCmpxchg(old_value, new_value, + const_cast(ptr))); + return old_value; +} + +inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + return Barrier_AtomicIncrement(ptr, increment); +} + +inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + for (;;) { + // Atomic exchange the old value with an incremented one. + Atomic32 old_value = *ptr; + Atomic32 new_value = old_value + increment; + if (pLinuxKernelCmpxchg(old_value, new_value, + const_cast(ptr)) == 0) { + // The exchange took place as expected. + return new_value; + } + // Otherwise, *ptr changed mid-loop and we need to retry. + } +} + +inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; +} + +inline void MemoryBarrier() { + pLinuxKernelMemoryBarrier(); +} + +inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; + MemoryBarrier(); +} + +inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { + MemoryBarrier(); + *ptr = value; +} + +inline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) { + return *ptr; +} + +inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { + Atomic32 value = *ptr; + MemoryBarrier(); + return value; +} + +inline Atomic32 Release_Load(volatile const Atomic32* ptr) { + MemoryBarrier(); + return *ptr; +} + +} // namespace internal +} // namespace protobuf +} // namespace google + +#endif // GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_ARM_GCC_H_ diff --git a/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_arm_qnx.h b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_arm_qnx.h new file mode 100644 index 00000000..17dfaa51 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_arm_qnx.h @@ -0,0 +1,146 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2012 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This file is an internal atomic implementation, use atomicops.h instead. + +#ifndef GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_ARM_QNX_H_ +#define GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_ARM_QNX_H_ + +// For _smp_cmpxchg() +#include + +namespace google { +namespace protobuf { +namespace internal { + +inline Atomic32 QNXCmpxchg(Atomic32 old_value, + Atomic32 new_value, + volatile Atomic32* ptr) { + return static_cast( + _smp_cmpxchg((volatile unsigned *)ptr, + (unsigned)old_value, + (unsigned)new_value)); +} + + +inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 prev_value = *ptr; + do { + if (!QNXCmpxchg(old_value, new_value, + const_cast(ptr))) { + return old_value; + } + prev_value = *ptr; + } while (prev_value == old_value); + return prev_value; +} + +inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, + Atomic32 new_value) { + Atomic32 old_value; + do { + old_value = *ptr; + } while (QNXCmpxchg(old_value, new_value, + const_cast(ptr))); + return old_value; +} + +inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + return Barrier_AtomicIncrement(ptr, increment); +} + +inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + for (;;) { + // Atomic exchange the old value with an incremented one. + Atomic32 old_value = *ptr; + Atomic32 new_value = old_value + increment; + if (QNXCmpxchg(old_value, new_value, + const_cast(ptr)) == 0) { + // The exchange took place as expected. + return new_value; + } + // Otherwise, *ptr changed mid-loop and we need to retry. + } +} + +inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; +} + +inline void MemoryBarrier() { + __sync_synchronize(); +} + +inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; + MemoryBarrier(); +} + +inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { + MemoryBarrier(); + *ptr = value; +} + +inline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) { + return *ptr; +} + +inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { + Atomic32 value = *ptr; + MemoryBarrier(); + return value; +} + +inline Atomic32 Release_Load(volatile const Atomic32* ptr) { + MemoryBarrier(); + return *ptr; +} + +} // namespace internal +} // namespace protobuf +} // namespace google + +#endif // GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_ARM_QNX_H_ diff --git a/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_atomicword_compat.h b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_atomicword_compat.h new file mode 100644 index 00000000..eb198ff5 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_atomicword_compat.h @@ -0,0 +1,122 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2012 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This file is an internal atomic implementation, use atomicops.h instead. + +#ifndef GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_ATOMICWORD_COMPAT_H_ +#define GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_ATOMICWORD_COMPAT_H_ + +// AtomicWord is a synonym for intptr_t, and Atomic32 is a synonym for int32, +// which in turn means int. On some LP32 platforms, intptr_t is an int, but +// on others, it's a long. When AtomicWord and Atomic32 are based on different +// fundamental types, their pointers are incompatible. +// +// This file defines function overloads to allow both AtomicWord and Atomic32 +// data to be used with this interface. +// +// On LP64 platforms, AtomicWord and Atomic64 are both always long, +// so this problem doesn't occur. + +#if !defined(GOOGLE_PROTOBUF_ARCH_64_BIT) + +namespace google { +namespace protobuf { +namespace internal { + +inline AtomicWord NoBarrier_CompareAndSwap(volatile AtomicWord* ptr, + AtomicWord old_value, + AtomicWord new_value) { + return NoBarrier_CompareAndSwap( + reinterpret_cast(ptr), old_value, new_value); +} + +inline AtomicWord NoBarrier_AtomicExchange(volatile AtomicWord* ptr, + AtomicWord new_value) { + return NoBarrier_AtomicExchange( + reinterpret_cast(ptr), new_value); +} + +inline AtomicWord NoBarrier_AtomicIncrement(volatile AtomicWord* ptr, + AtomicWord increment) { + return NoBarrier_AtomicIncrement( + reinterpret_cast(ptr), increment); +} + +inline AtomicWord Barrier_AtomicIncrement(volatile AtomicWord* ptr, + AtomicWord increment) { + return Barrier_AtomicIncrement( + reinterpret_cast(ptr), increment); +} + +inline AtomicWord Acquire_CompareAndSwap(volatile AtomicWord* ptr, + AtomicWord old_value, + AtomicWord new_value) { + return Acquire_CompareAndSwap( + reinterpret_cast(ptr), old_value, new_value); +} + +inline AtomicWord Release_CompareAndSwap(volatile AtomicWord* ptr, + AtomicWord old_value, + AtomicWord new_value) { + return Release_CompareAndSwap( + reinterpret_cast(ptr), old_value, new_value); +} + +inline void NoBarrier_Store(volatile AtomicWord *ptr, AtomicWord value) { + NoBarrier_Store(reinterpret_cast(ptr), value); +} + +inline void Acquire_Store(volatile AtomicWord* ptr, AtomicWord value) { + return Acquire_Store(reinterpret_cast(ptr), value); +} + +inline void Release_Store(volatile AtomicWord* ptr, AtomicWord value) { + return Release_Store(reinterpret_cast(ptr), value); +} + +inline AtomicWord NoBarrier_Load(volatile const AtomicWord *ptr) { + return NoBarrier_Load(reinterpret_cast(ptr)); +} + +inline AtomicWord Acquire_Load(volatile const AtomicWord* ptr) { + return Acquire_Load(reinterpret_cast(ptr)); +} + +inline AtomicWord Release_Load(volatile const AtomicWord* ptr) { + return Release_Load(reinterpret_cast(ptr)); +} + +} // namespace internal +} // namespace protobuf +} // namespace google + +#endif // !defined(GOOGLE_PROTOBUF_ARCH_64_BIT) + +#endif // GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_ATOMICWORD_COMPAT_H_ diff --git a/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_generic_gcc.h b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_generic_gcc.h new file mode 100644 index 00000000..dd7abf6f --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_generic_gcc.h @@ -0,0 +1,137 @@ +// Copyright 2013 Red Hat Inc. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Red Hat Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This file is an internal atomic implementation, use atomicops.h instead. + +#ifndef GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_GENERIC_GCC_H_ +#define GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_GENERIC_GCC_H_ + +namespace google { +namespace protobuf { +namespace internal { + +inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + __atomic_compare_exchange_n(ptr, &old_value, new_value, true, + __ATOMIC_RELAXED, __ATOMIC_RELAXED); + return old_value; +} + +inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, + Atomic32 new_value) { + return __atomic_exchange_n(ptr, new_value, __ATOMIC_RELAXED); +} + +inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + return __atomic_add_fetch(ptr, increment, __ATOMIC_RELAXED); +} + +inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + return __atomic_add_fetch(ptr, increment, __ATOMIC_SEQ_CST); +} + +inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + __atomic_compare_exchange(ptr, &old_value, &new_value, true, + __ATOMIC_ACQUIRE, __ATOMIC_ACQUIRE); + return old_value; +} + +inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + __atomic_compare_exchange_n(ptr, &old_value, new_value, true, + __ATOMIC_RELEASE, __ATOMIC_ACQUIRE); + return old_value; +} + +inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) { + __atomic_store_n(ptr, value, __ATOMIC_RELAXED); +} + +inline void MemoryBarrier() { + __sync_synchronize(); +} + +inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { + __atomic_store_n(ptr, value, __ATOMIC_SEQ_CST); +} + +inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { + __atomic_store_n(ptr, value, __ATOMIC_RELEASE); +} + +inline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) { + return __atomic_load_n(ptr, __ATOMIC_RELAXED); +} + +inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { + return __atomic_load_n(ptr, __ATOMIC_ACQUIRE); +} + +inline Atomic32 Release_Load(volatile const Atomic32* ptr) { + return __atomic_load_n(ptr, __ATOMIC_SEQ_CST); +} + +#ifdef __LP64__ + +inline void Release_Store(volatile Atomic64* ptr, Atomic64 value) { + __atomic_store_n(ptr, value, __ATOMIC_RELEASE); +} + +inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) { + return __atomic_load_n(ptr, __ATOMIC_ACQUIRE); +} + +inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + __atomic_compare_exchange_n(ptr, &old_value, new_value, true, + __ATOMIC_ACQUIRE, __ATOMIC_ACQUIRE); + return old_value; +} + +inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + __atomic_compare_exchange_n(ptr, &old_value, new_value, true, + __ATOMIC_RELAXED, __ATOMIC_RELAXED); + return old_value; +} + +#endif // defined(__LP64__) + +} // namespace internal +} // namespace protobuf +} // namespace google + +#endif // GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_GENERIC_GCC_H_ diff --git a/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_macosx.h b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_macosx.h new file mode 100644 index 00000000..79633241 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_macosx.h @@ -0,0 +1,225 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2012 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This file is an internal atomic implementation, use atomicops.h instead. + +#ifndef GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_MACOSX_H_ +#define GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_MACOSX_H_ + +#include + +namespace google { +namespace protobuf { +namespace internal { + +inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 prev_value; + do { + if (OSAtomicCompareAndSwap32(old_value, new_value, + const_cast(ptr))) { + return old_value; + } + prev_value = *ptr; + } while (prev_value == old_value); + return prev_value; +} + +inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, + Atomic32 new_value) { + Atomic32 old_value; + do { + old_value = *ptr; + } while (!OSAtomicCompareAndSwap32(old_value, new_value, + const_cast(ptr))); + return old_value; +} + +inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + return OSAtomicAdd32(increment, const_cast(ptr)); +} + +inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + return OSAtomicAdd32Barrier(increment, const_cast(ptr)); +} + +inline void MemoryBarrier() { + OSMemoryBarrier(); +} + +inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 prev_value; + do { + if (OSAtomicCompareAndSwap32Barrier(old_value, new_value, + const_cast(ptr))) { + return old_value; + } + prev_value = *ptr; + } while (prev_value == old_value); + return prev_value; +} + +inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + return Acquire_CompareAndSwap(ptr, old_value, new_value); +} + +inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; +} + +inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; + MemoryBarrier(); +} + +inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { + MemoryBarrier(); + *ptr = value; +} + +inline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) { + return *ptr; +} + +inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { + Atomic32 value = *ptr; + MemoryBarrier(); + return value; +} + +inline Atomic32 Release_Load(volatile const Atomic32* ptr) { + MemoryBarrier(); + return *ptr; +} + +#ifdef __LP64__ + +// 64-bit implementation on 64-bit platform + +inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + Atomic64 prev_value; + do { + if (OSAtomicCompareAndSwap64(old_value, new_value, + reinterpret_cast(ptr))) { + return old_value; + } + prev_value = *ptr; + } while (prev_value == old_value); + return prev_value; +} + +inline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr, + Atomic64 new_value) { + Atomic64 old_value; + do { + old_value = *ptr; + } while (!OSAtomicCompareAndSwap64(old_value, new_value, + reinterpret_cast(ptr))); + return old_value; +} + +inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { + return OSAtomicAdd64(increment, reinterpret_cast(ptr)); +} + +inline Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { + return OSAtomicAdd64Barrier(increment, + reinterpret_cast(ptr)); +} + +inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + Atomic64 prev_value; + do { + if (OSAtomicCompareAndSwap64Barrier( + old_value, new_value, reinterpret_cast(ptr))) { + return old_value; + } + prev_value = *ptr; + } while (prev_value == old_value); + return prev_value; +} + +inline Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + // The lib kern interface does not distinguish between + // Acquire and Release memory barriers; they are equivalent. + return Acquire_CompareAndSwap(ptr, old_value, new_value); +} + +inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) { + *ptr = value; +} + +inline void Acquire_Store(volatile Atomic64* ptr, Atomic64 value) { + *ptr = value; + MemoryBarrier(); +} + +inline void Release_Store(volatile Atomic64* ptr, Atomic64 value) { + MemoryBarrier(); + *ptr = value; +} + +inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) { + return *ptr; +} + +inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) { + Atomic64 value = *ptr; + MemoryBarrier(); + return value; +} + +inline Atomic64 Release_Load(volatile const Atomic64* ptr) { + MemoryBarrier(); + return *ptr; +} + +#endif // defined(__LP64__) + +} // namespace internal +} // namespace protobuf +} // namespace google + +#endif // GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_MACOSX_H_ diff --git a/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_mips_gcc.h b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_mips_gcc.h new file mode 100644 index 00000000..e3cd14cf --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_mips_gcc.h @@ -0,0 +1,313 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2012 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This file is an internal atomic implementation, use atomicops.h instead. + +#ifndef GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_MIPS_GCC_H_ +#define GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_MIPS_GCC_H_ + +#define ATOMICOPS_COMPILER_BARRIER() __asm__ __volatile__("" : : : "memory") + +namespace google { +namespace protobuf { +namespace internal { + +// Atomically execute: +// result = *ptr; +// if (*ptr == old_value) +// *ptr = new_value; +// return result; +// +// I.e., replace "*ptr" with "new_value" if "*ptr" used to be "old_value". +// Always return the old value of "*ptr" +// +// This routine implies no memory barriers. +inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 prev, tmp; + __asm__ __volatile__(".set push\n" + ".set noreorder\n" + "1:\n" + "ll %0, %5\n" // prev = *ptr + "bne %0, %3, 2f\n" // if (prev != old_value) goto 2 + "move %2, %4\n" // tmp = new_value + "sc %2, %1\n" // *ptr = tmp (with atomic check) + "beqz %2, 1b\n" // start again on atomic error + "nop\n" // delay slot nop + "2:\n" + ".set pop\n" + : "=&r" (prev), "=m" (*ptr), "=&r" (tmp) + : "Ir" (old_value), "r" (new_value), "m" (*ptr) + : "memory"); + return prev; +} + +// Atomically store new_value into *ptr, returning the previous value held in +// *ptr. This routine implies no memory barriers. +inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, + Atomic32 new_value) { + Atomic32 temp, old; + __asm__ __volatile__(".set push\n" + ".set noreorder\n" + "1:\n" + "ll %1, %4\n" // old = *ptr + "move %0, %3\n" // temp = new_value + "sc %0, %2\n" // *ptr = temp (with atomic check) + "beqz %0, 1b\n" // start again on atomic error + "nop\n" // delay slot nop + ".set pop\n" + : "=&r" (temp), "=&r" (old), "=m" (*ptr) + : "r" (new_value), "m" (*ptr) + : "memory"); + + return old; +} + +// Atomically increment *ptr by "increment". Returns the new value of +// *ptr with the increment applied. This routine implies no memory barriers. +inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + Atomic32 temp, temp2; + + __asm__ __volatile__(".set push\n" + ".set noreorder\n" + "1:\n" + "ll %0, %4\n" // temp = *ptr + "addu %1, %0, %3\n" // temp2 = temp + increment + "sc %1, %2\n" // *ptr = temp2 (with atomic check) + "beqz %1, 1b\n" // start again on atomic error + "addu %1, %0, %3\n" // temp2 = temp + increment + ".set pop\n" + : "=&r" (temp), "=&r" (temp2), "=m" (*ptr) + : "Ir" (increment), "m" (*ptr) + : "memory"); + // temp2 now holds the final value. + return temp2; +} + +inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + ATOMICOPS_COMPILER_BARRIER(); + Atomic32 res = NoBarrier_AtomicIncrement(ptr, increment); + ATOMICOPS_COMPILER_BARRIER(); + return res; +} + +// "Acquire" operations +// ensure that no later memory access can be reordered ahead of the operation. +// "Release" operations ensure that no previous memory access can be reordered +// after the operation. "Barrier" operations have both "Acquire" and "Release" +// semantics. A MemoryBarrier() has "Barrier" semantics, but does no memory +// access. +inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + ATOMICOPS_COMPILER_BARRIER(); + Atomic32 res = NoBarrier_CompareAndSwap(ptr, old_value, new_value); + ATOMICOPS_COMPILER_BARRIER(); + return res; +} + +inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + ATOMICOPS_COMPILER_BARRIER(); + Atomic32 res = NoBarrier_CompareAndSwap(ptr, old_value, new_value); + ATOMICOPS_COMPILER_BARRIER(); + return res; +} + +inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; +} + +inline void MemoryBarrier() { + __asm__ __volatile__("sync" : : : "memory"); +} + +inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; + MemoryBarrier(); +} + +inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { + MemoryBarrier(); + *ptr = value; +} + +inline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) { + return *ptr; +} + +inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { + Atomic32 value = *ptr; + MemoryBarrier(); + return value; +} + +inline Atomic32 Release_Load(volatile const Atomic32* ptr) { + MemoryBarrier(); + return *ptr; +} + +#if defined(__LP64__) +// 64-bit versions of the atomic ops. + +inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + Atomic64 prev, tmp; + __asm__ __volatile__(".set push\n" + ".set noreorder\n" + "1:\n" + "lld %0, %5\n" // prev = *ptr + "bne %0, %3, 2f\n" // if (prev != old_value) goto 2 + "move %2, %4\n" // tmp = new_value + "scd %2, %1\n" // *ptr = tmp (with atomic check) + "beqz %2, 1b\n" // start again on atomic error + "nop\n" // delay slot nop + "2:\n" + ".set pop\n" + : "=&r" (prev), "=m" (*ptr), "=&r" (tmp) + : "Ir" (old_value), "r" (new_value), "m" (*ptr) + : "memory"); + return prev; +} + +// Atomically store new_value into *ptr, returning the previous value held in +// *ptr. This routine implies no memory barriers. +inline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr, + Atomic64 new_value) { + Atomic64 temp, old; + __asm__ __volatile__(".set push\n" + ".set noreorder\n" + "1:\n" + "lld %1, %4\n" // old = *ptr + "move %0, %3\n" // temp = new_value + "scd %0, %2\n" // *ptr = temp (with atomic check) + "beqz %0, 1b\n" // start again on atomic error + "nop\n" // delay slot nop + ".set pop\n" + : "=&r" (temp), "=&r" (old), "=m" (*ptr) + : "r" (new_value), "m" (*ptr) + : "memory"); + + return old; +} + +// Atomically increment *ptr by "increment". Returns the new value of +// *ptr with the increment applied. This routine implies no memory barriers. +inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { + Atomic64 temp, temp2; + + __asm__ __volatile__(".set push\n" + ".set noreorder\n" + "1:\n" + "lld %0, %4\n" // temp = *ptr + "daddu %1, %0, %3\n" // temp2 = temp + increment + "scd %1, %2\n" // *ptr = temp2 (with atomic check) + "beqz %1, 1b\n" // start again on atomic error + "daddu %1, %0, %3\n" // temp2 = temp + increment + ".set pop\n" + : "=&r" (temp), "=&r" (temp2), "=m" (*ptr) + : "Ir" (increment), "m" (*ptr) + : "memory"); + // temp2 now holds the final value. + return temp2; +} + +inline Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { + MemoryBarrier(); + Atomic64 res = NoBarrier_AtomicIncrement(ptr, increment); + MemoryBarrier(); + return res; +} + +// "Acquire" operations +// ensure that no later memory access can be reordered ahead of the operation. +// "Release" operations ensure that no previous memory access can be reordered +// after the operation. "Barrier" operations have both "Acquire" and "Release" +// semantics. A MemoryBarrier() has "Barrier" semantics, but does no memory +// access. +inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + Atomic64 res = NoBarrier_CompareAndSwap(ptr, old_value, new_value); + MemoryBarrier(); + return res; +} + +inline Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + MemoryBarrier(); + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) { + *ptr = value; +} + +inline void Acquire_Store(volatile Atomic64* ptr, Atomic64 value) { + *ptr = value; + MemoryBarrier(); +} + +inline void Release_Store(volatile Atomic64* ptr, Atomic64 value) { + MemoryBarrier(); + *ptr = value; +} + +inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) { + return *ptr; +} + +inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) { + Atomic64 value = *ptr; + MemoryBarrier(); + return value; +} + +inline Atomic64 Release_Load(volatile const Atomic64* ptr) { + MemoryBarrier(); + return *ptr; +} +#endif + +} // namespace internal +} // namespace protobuf +} // namespace google + +#undef ATOMICOPS_COMPILER_BARRIER + +#endif // GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_MIPS_GCC_H_ diff --git a/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_pnacl.h b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_pnacl.h new file mode 100644 index 00000000..b10ac02c --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_pnacl.h @@ -0,0 +1,73 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2012 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This file is an internal atomic implementation, use atomicops.h instead. + +#ifndef GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_PNACL_H_ +#define GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_PNACL_H_ + +namespace google { +namespace protobuf { +namespace internal { + +inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + return __sync_val_compare_and_swap(ptr, old_value, new_value); +} + +inline void MemoryBarrier() { + __sync_synchronize(); +} + +inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 ret = NoBarrier_CompareAndSwap(ptr, old_value, new_value); + MemoryBarrier(); + return ret; +} + +inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { + MemoryBarrier(); + *ptr = value; +} + +inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { + Atomic32 value = *ptr; + MemoryBarrier(); + return value; +} + +} // namespace internal +} // namespace protobuf +} // namespace google + +#endif // GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_PNACL_H_ diff --git a/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_solaris.h b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_solaris.h new file mode 100644 index 00000000..d8057ecd --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_solaris.h @@ -0,0 +1,188 @@ +// Copyright 2014 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This file is an internal atomic implementation, use atomicops.h instead. + +#ifndef GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_SPARC_GCC_H_ +#define GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_SPARC_GCC_H_ + +#include + +namespace google { +namespace protobuf { +namespace internal { + +inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + return (Atomic32)atomic_cas_32((volatile uint32_t*)ptr, (uint32_t)old_value, (uint32_t)new_value); +} + +inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, + Atomic32 new_value) { + return (Atomic32)atomic_swap_32((volatile uint32_t*)ptr, (uint32_t)new_value); +} + +inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + return (Atomic32)atomic_add_32_nv((volatile uint32_t*)ptr, (uint32_t)increment); +} + +inline void MemoryBarrier(void) { + membar_producer(); + membar_consumer(); +} + +inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + MemoryBarrier(); + Atomic32 ret = NoBarrier_AtomicIncrement(ptr, increment); + MemoryBarrier(); + + return ret; +} + +inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 ret = NoBarrier_CompareAndSwap(ptr, old_value, new_value); + MemoryBarrier(); + + return ret; +} + +inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + MemoryBarrier(); + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; +} + +inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; + membar_producer(); +} + +inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { + membar_consumer(); + *ptr = value; +} + +inline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) { + return *ptr; +} + +inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { + Atomic32 val = *ptr; + membar_consumer(); + return val; +} + +inline Atomic32 Release_Load(volatile const Atomic32* ptr) { + membar_producer(); + return *ptr; +} + +#ifdef GOOGLE_PROTOBUF_ARCH_64_BIT +inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + return atomic_cas_64((volatile uint64_t*)ptr, (uint64_t)old_value, (uint64_t)new_value); +} + +inline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr, Atomic64 new_value) { + return atomic_swap_64((volatile uint64_t*)ptr, (uint64_t)new_value); +} + +inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, Atomic64 increment) { + return atomic_add_64_nv((volatile uint64_t*)ptr, increment); +} + +inline Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr, Atomic64 increment) { + MemoryBarrier(); + Atomic64 ret = atomic_add_64_nv((volatile uint64_t*)ptr, increment); + MemoryBarrier(); + return ret; +} + +inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + Atomic64 ret = NoBarrier_CompareAndSwap(ptr, old_value, new_value); + MemoryBarrier(); + return ret; +} + +inline Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + MemoryBarrier(); + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) { + *ptr = value; +} + +inline void Acquire_Store(volatile Atomic64* ptr, Atomic64 value) { + *ptr = value; + membar_producer(); +} + +inline void Release_Store(volatile Atomic64* ptr, Atomic64 value) { + membar_consumer(); + *ptr = value; +} + +inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) { + return *ptr; +} + +inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) { + Atomic64 ret = *ptr; + membar_consumer(); + return ret; +} + +inline Atomic64 Release_Load(volatile const Atomic64* ptr) { + membar_producer(); + return *ptr; +} +#endif + +} // namespace internal +} // namespace protobuf +} // namespace google + +#endif // GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_SPARC_GCC_H_ + diff --git a/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_tsan.h b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_tsan.h new file mode 100644 index 00000000..0c903545 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_tsan.h @@ -0,0 +1,219 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2013 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This file is an internal atomic implementation for compiler-based +// ThreadSanitizer (http://clang.llvm.org/docs/ThreadSanitizer.html). +// Use atomicops.h instead. + +#ifndef GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_TSAN_H_ +#define GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_TSAN_H_ + +#define ATOMICOPS_COMPILER_BARRIER() __asm__ __volatile__("" : : : "memory") + +#include + +namespace google { +namespace protobuf { +namespace internal { + +inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32 *ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 cmp = old_value; + __tsan_atomic32_compare_exchange_strong(ptr, &cmp, new_value, + __tsan_memory_order_relaxed, __tsan_memory_order_relaxed); + return cmp; +} + +inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32 *ptr, + Atomic32 new_value) { + return __tsan_atomic32_exchange(ptr, new_value, + __tsan_memory_order_relaxed); +} + +inline Atomic32 Acquire_AtomicExchange(volatile Atomic32 *ptr, + Atomic32 new_value) { + return __tsan_atomic32_exchange(ptr, new_value, + __tsan_memory_order_acquire); +} + +inline Atomic32 Release_AtomicExchange(volatile Atomic32 *ptr, + Atomic32 new_value) { + return __tsan_atomic32_exchange(ptr, new_value, + __tsan_memory_order_release); +} + +inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32 *ptr, + Atomic32 increment) { + return increment + __tsan_atomic32_fetch_add(ptr, increment, + __tsan_memory_order_relaxed); +} + +inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32 *ptr, + Atomic32 increment) { + return increment + __tsan_atomic32_fetch_add(ptr, increment, + __tsan_memory_order_acq_rel); +} + +inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32 *ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 cmp = old_value; + __tsan_atomic32_compare_exchange_strong(ptr, &cmp, new_value, + __tsan_memory_order_acquire, __tsan_memory_order_acquire); + return cmp; +} + +inline Atomic32 Release_CompareAndSwap(volatile Atomic32 *ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 cmp = old_value; + __tsan_atomic32_compare_exchange_strong(ptr, &cmp, new_value, + __tsan_memory_order_release, __tsan_memory_order_relaxed); + return cmp; +} + +inline void NoBarrier_Store(volatile Atomic32 *ptr, Atomic32 value) { + __tsan_atomic32_store(ptr, value, __tsan_memory_order_relaxed); +} + +inline void Acquire_Store(volatile Atomic32 *ptr, Atomic32 value) { + __tsan_atomic32_store(ptr, value, __tsan_memory_order_relaxed); + __tsan_atomic_thread_fence(__tsan_memory_order_seq_cst); +} + +inline void Release_Store(volatile Atomic32 *ptr, Atomic32 value) { + __tsan_atomic32_store(ptr, value, __tsan_memory_order_release); +} + +inline Atomic32 NoBarrier_Load(volatile const Atomic32 *ptr) { + return __tsan_atomic32_load(ptr, __tsan_memory_order_relaxed); +} + +inline Atomic32 Acquire_Load(volatile const Atomic32 *ptr) { + return __tsan_atomic32_load(ptr, __tsan_memory_order_acquire); +} + +inline Atomic32 Release_Load(volatile const Atomic32 *ptr) { + __tsan_atomic_thread_fence(__tsan_memory_order_seq_cst); + return __tsan_atomic32_load(ptr, __tsan_memory_order_relaxed); +} + +inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64 *ptr, + Atomic64 old_value, + Atomic64 new_value) { + Atomic64 cmp = old_value; + __tsan_atomic64_compare_exchange_strong(ptr, &cmp, new_value, + __tsan_memory_order_relaxed, __tsan_memory_order_relaxed); + return cmp; +} + +inline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64 *ptr, + Atomic64 new_value) { + return __tsan_atomic64_exchange(ptr, new_value, __tsan_memory_order_relaxed); +} + +inline Atomic64 Acquire_AtomicExchange(volatile Atomic64 *ptr, + Atomic64 new_value) { + return __tsan_atomic64_exchange(ptr, new_value, __tsan_memory_order_acquire); +} + +inline Atomic64 Release_AtomicExchange(volatile Atomic64 *ptr, + Atomic64 new_value) { + return __tsan_atomic64_exchange(ptr, new_value, __tsan_memory_order_release); +} + +inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64 *ptr, + Atomic64 increment) { + return increment + __tsan_atomic64_fetch_add(ptr, increment, + __tsan_memory_order_relaxed); +} + +inline Atomic64 Barrier_AtomicIncrement(volatile Atomic64 *ptr, + Atomic64 increment) { + return increment + __tsan_atomic64_fetch_add(ptr, increment, + __tsan_memory_order_acq_rel); +} + +inline void NoBarrier_Store(volatile Atomic64 *ptr, Atomic64 value) { + __tsan_atomic64_store(ptr, value, __tsan_memory_order_relaxed); +} + +inline void Acquire_Store(volatile Atomic64 *ptr, Atomic64 value) { + __tsan_atomic64_store(ptr, value, __tsan_memory_order_relaxed); + __tsan_atomic_thread_fence(__tsan_memory_order_seq_cst); +} + +inline void Release_Store(volatile Atomic64 *ptr, Atomic64 value) { + __tsan_atomic64_store(ptr, value, __tsan_memory_order_release); +} + +inline Atomic64 NoBarrier_Load(volatile const Atomic64 *ptr) { + return __tsan_atomic64_load(ptr, __tsan_memory_order_relaxed); +} + +inline Atomic64 Acquire_Load(volatile const Atomic64 *ptr) { + return __tsan_atomic64_load(ptr, __tsan_memory_order_acquire); +} + +inline Atomic64 Release_Load(volatile const Atomic64 *ptr) { + __tsan_atomic_thread_fence(__tsan_memory_order_seq_cst); + return __tsan_atomic64_load(ptr, __tsan_memory_order_relaxed); +} + +inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64 *ptr, + Atomic64 old_value, + Atomic64 new_value) { + Atomic64 cmp = old_value; + __tsan_atomic64_compare_exchange_strong(ptr, &cmp, new_value, + __tsan_memory_order_acquire, __tsan_memory_order_acquire); + return cmp; +} + +inline Atomic64 Release_CompareAndSwap(volatile Atomic64 *ptr, + Atomic64 old_value, + Atomic64 new_value) { + Atomic64 cmp = old_value; + __tsan_atomic64_compare_exchange_strong(ptr, &cmp, new_value, + __tsan_memory_order_release, __tsan_memory_order_relaxed); + return cmp; +} + +inline void MemoryBarrier() { + __tsan_atomic_thread_fence(__tsan_memory_order_seq_cst); +} + +} // namespace internal +} // namespace protobuf +} // namespace google + +#undef ATOMICOPS_COMPILER_BARRIER + +#endif // GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_TSAN_H_ diff --git a/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_x86_gcc.h b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_x86_gcc.h new file mode 100644 index 00000000..edccc59d --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_x86_gcc.h @@ -0,0 +1,293 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2012 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This file is an internal atomic implementation, use atomicops.h instead. + +#ifndef GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_X86_GCC_H_ +#define GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_X86_GCC_H_ + +namespace google { +namespace protobuf { +namespace internal { + +// This struct is not part of the public API of this module; clients may not +// use it. +// Features of this x86. Values may not be correct before main() is run, +// but are set conservatively. +struct AtomicOps_x86CPUFeatureStruct { + bool has_amd_lock_mb_bug; // Processor has AMD memory-barrier bug; do lfence + // after acquire compare-and-swap. + bool has_sse2; // Processor has SSE2. +}; +extern struct AtomicOps_x86CPUFeatureStruct AtomicOps_Internalx86CPUFeatures; + +#define ATOMICOPS_COMPILER_BARRIER() __asm__ __volatile__("" : : : "memory") + +// 32-bit low-level operations on any platform. + +inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 prev; + __asm__ __volatile__("lock; cmpxchgl %1,%2" + : "=a" (prev) + : "q" (new_value), "m" (*ptr), "0" (old_value) + : "memory"); + return prev; +} + +inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, + Atomic32 new_value) { + __asm__ __volatile__("xchgl %1,%0" // The lock prefix is implicit for xchg. + : "=r" (new_value) + : "m" (*ptr), "0" (new_value) + : "memory"); + return new_value; // Now it's the previous value. +} + +inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + Atomic32 temp = increment; + __asm__ __volatile__("lock; xaddl %0,%1" + : "+r" (temp), "+m" (*ptr) + : : "memory"); + // temp now holds the old value of *ptr + return temp + increment; +} + +inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + Atomic32 temp = increment; + __asm__ __volatile__("lock; xaddl %0,%1" + : "+r" (temp), "+m" (*ptr) + : : "memory"); + // temp now holds the old value of *ptr + if (AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) { + __asm__ __volatile__("lfence" : : : "memory"); + } + return temp + increment; +} + +inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + Atomic32 x = NoBarrier_CompareAndSwap(ptr, old_value, new_value); + if (AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) { + __asm__ __volatile__("lfence" : : : "memory"); + } + return x; +} + +inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; +} + +#if defined(__x86_64__) + +// 64-bit implementations of memory barrier can be simpler, because it +// "mfence" is guaranteed to exist. +inline void MemoryBarrier() { + __asm__ __volatile__("mfence" : : : "memory"); +} + +inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; + MemoryBarrier(); +} + +#else + +inline void MemoryBarrier() { + if (AtomicOps_Internalx86CPUFeatures.has_sse2) { + __asm__ __volatile__("mfence" : : : "memory"); + } else { // mfence is faster but not present on PIII + Atomic32 x = 0; + NoBarrier_AtomicExchange(&x, 0); // acts as a barrier on PIII + } +} + +inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { + if (AtomicOps_Internalx86CPUFeatures.has_sse2) { + *ptr = value; + __asm__ __volatile__("mfence" : : : "memory"); + } else { + NoBarrier_AtomicExchange(ptr, value); + // acts as a barrier on PIII + } +} +#endif + +inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { + ATOMICOPS_COMPILER_BARRIER(); + *ptr = value; // An x86 store acts as a release barrier. + // See comments in Atomic64 version of Release_Store(), below. +} + +inline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) { + return *ptr; +} + +inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { + Atomic32 value = *ptr; // An x86 load acts as a acquire barrier. + // See comments in Atomic64 version of Release_Store(), below. + ATOMICOPS_COMPILER_BARRIER(); + return value; +} + +inline Atomic32 Release_Load(volatile const Atomic32* ptr) { + MemoryBarrier(); + return *ptr; +} + +#if defined(__x86_64__) + +// 64-bit low-level operations on 64-bit platform. + +inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + Atomic64 prev; + __asm__ __volatile__("lock; cmpxchgq %1,%2" + : "=a" (prev) + : "q" (new_value), "m" (*ptr), "0" (old_value) + : "memory"); + return prev; +} + +inline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr, + Atomic64 new_value) { + __asm__ __volatile__("xchgq %1,%0" // The lock prefix is implicit for xchg. + : "=r" (new_value) + : "m" (*ptr), "0" (new_value) + : "memory"); + return new_value; // Now it's the previous value. +} + +inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { + Atomic64 temp = increment; + __asm__ __volatile__("lock; xaddq %0,%1" + : "+r" (temp), "+m" (*ptr) + : : "memory"); + // temp now contains the previous value of *ptr + return temp + increment; +} + +inline Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { + Atomic64 temp = increment; + __asm__ __volatile__("lock; xaddq %0,%1" + : "+r" (temp), "+m" (*ptr) + : : "memory"); + // temp now contains the previous value of *ptr + if (AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) { + __asm__ __volatile__("lfence" : : : "memory"); + } + return temp + increment; +} + +inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) { + *ptr = value; +} + +inline void Acquire_Store(volatile Atomic64* ptr, Atomic64 value) { + *ptr = value; + MemoryBarrier(); +} + +inline void Release_Store(volatile Atomic64* ptr, Atomic64 value) { + ATOMICOPS_COMPILER_BARRIER(); + + *ptr = value; // An x86 store acts as a release barrier + // for current AMD/Intel chips as of Jan 2008. + // See also Acquire_Load(), below. + + // When new chips come out, check: + // IA-32 Intel Architecture Software Developer's Manual, Volume 3: + // System Programming Guide, Chatper 7: Multiple-processor management, + // Section 7.2, Memory Ordering. + // Last seen at: + // http://developer.intel.com/design/pentium4/manuals/index_new.htm + // + // x86 stores/loads fail to act as barriers for a few instructions (clflush + // maskmovdqu maskmovq movntdq movnti movntpd movntps movntq) but these are + // not generated by the compiler, and are rare. Users of these instructions + // need to know about cache behaviour in any case since all of these involve + // either flushing cache lines or non-temporal cache hints. +} + +inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) { + return *ptr; +} + +inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) { + Atomic64 value = *ptr; // An x86 load acts as a acquire barrier, + // for current AMD/Intel chips as of Jan 2008. + // See also Release_Store(), above. + ATOMICOPS_COMPILER_BARRIER(); + return value; +} + +inline Atomic64 Release_Load(volatile const Atomic64* ptr) { + MemoryBarrier(); + return *ptr; +} + +inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + Atomic64 x = NoBarrier_CompareAndSwap(ptr, old_value, new_value); + if (AtomicOps_Internalx86CPUFeatures.has_amd_lock_mb_bug) { + __asm__ __volatile__("lfence" : : : "memory"); + } + return x; +} + +inline Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +#endif // defined(__x86_64__) + +} // namespace internal +} // namespace protobuf +} // namespace google + +#undef ATOMICOPS_COMPILER_BARRIER + +#endif // GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_X86_GCC_H_ diff --git a/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_x86_msvc.h b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_x86_msvc.h new file mode 100644 index 00000000..e53a641f --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/stubs/atomicops_internals_x86_msvc.h @@ -0,0 +1,150 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2012 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This file is an internal atomic implementation, use atomicops.h instead. + +#ifndef GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_X86_MSVC_H_ +#define GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_X86_MSVC_H_ + +namespace google { +namespace protobuf { +namespace internal { + +inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, + Atomic32 increment) { + return Barrier_AtomicIncrement(ptr, increment); +} + +#if !(defined(_MSC_VER) && _MSC_VER >= 1400) +#error "We require at least vs2005 for MemoryBarrier" +#endif + +inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, + Atomic32 old_value, + Atomic32 new_value) { + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; +} + +inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { + NoBarrier_AtomicExchange(ptr, value); + // acts as a barrier in this implementation +} + +inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) { + *ptr = value; // works w/o barrier for current Intel chips as of June 2005 + // See comments in Atomic64 version of Release_Store() below. +} + +inline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) { + return *ptr; +} + +inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { + Atomic32 value = *ptr; + return value; +} + +inline Atomic32 Release_Load(volatile const Atomic32* ptr) { + MemoryBarrier(); + return *ptr; +} + +#if defined(_WIN64) + +// 64-bit low-level operations on 64-bit platform. + +inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, + Atomic64 increment) { + return Barrier_AtomicIncrement(ptr, increment); +} + +inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) { + *ptr = value; +} + +inline void Acquire_Store(volatile Atomic64* ptr, Atomic64 value) { + NoBarrier_AtomicExchange(ptr, value); + // acts as a barrier in this implementation +} + +inline void Release_Store(volatile Atomic64* ptr, Atomic64 value) { + *ptr = value; // works w/o barrier for current Intel chips as of June 2005 + + // When new chips come out, check: + // IA-32 Intel Architecture Software Developer's Manual, Volume 3: + // System Programming Guide, Chatper 7: Multiple-processor management, + // Section 7.2, Memory Ordering. + // Last seen at: + // http://developer.intel.com/design/pentium4/manuals/index_new.htm +} + +inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) { + return *ptr; +} + +inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) { + Atomic64 value = *ptr; + return value; +} + +inline Atomic64 Release_Load(volatile const Atomic64* ptr) { + MemoryBarrier(); + return *ptr; +} + +inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +inline Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr, + Atomic64 old_value, + Atomic64 new_value) { + return NoBarrier_CompareAndSwap(ptr, old_value, new_value); +} + +#endif // defined(_WIN64) + +} // namespace internal +} // namespace protobuf +} // namespace google + +#endif // GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_X86_MSVC_H_ diff --git a/kortex_gazebo/include/google/protobuf/stubs/common.h b/kortex_gazebo/include/google/protobuf/stubs/common.h new file mode 100644 index 00000000..f096fa99 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/stubs/common.h @@ -0,0 +1,1226 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) and others +// +// Contains basic types and utilities used by the rest of the library. + +#ifndef GOOGLE_PROTOBUF_COMMON_H__ +#define GOOGLE_PROTOBUF_COMMON_H__ + +#include +#include +#include +#include +#include +#if defined(__osf__) +// Tru64 lacks stdint.h, but has inttypes.h which defines a superset of +// what stdint.h would define. +#include +#elif !defined(_MSC_VER) +#include +#endif + +#ifndef PROTOBUF_USE_EXCEPTIONS +#if defined(_MSC_VER) && defined(_CPPUNWIND) + #define PROTOBUF_USE_EXCEPTIONS 1 +#elif defined(__EXCEPTIONS) + #define PROTOBUF_USE_EXCEPTIONS 1 +#else + #define PROTOBUF_USE_EXCEPTIONS 0 +#endif +#endif + +#if PROTOBUF_USE_EXCEPTIONS +#include +#endif + +#if defined(_WIN32) && defined(GetMessage) +// Allow GetMessage to be used as a valid method name in protobuf classes. +// windows.h defines GetMessage() as a macro. Let's re-define it as an inline +// function. The inline function should be equivalent for C++ users. +inline BOOL GetMessage_Win32( + LPMSG lpMsg, HWND hWnd, + UINT wMsgFilterMin, UINT wMsgFilterMax) { + return GetMessage(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax); +} +#undef GetMessage +inline BOOL GetMessage( + LPMSG lpMsg, HWND hWnd, + UINT wMsgFilterMin, UINT wMsgFilterMax) { + return GetMessage_Win32(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax); +} +#endif + + +namespace std {} + +namespace google { +namespace protobuf { + +#undef GOOGLE_DISALLOW_EVIL_CONSTRUCTORS +#define GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(TypeName) \ + TypeName(const TypeName&); \ + void operator=(const TypeName&) + +#if defined(_MSC_VER) && defined(PROTOBUF_USE_DLLS) + #ifdef LIBPROTOBUF_EXPORTS + #define LIBPROTOBUF_EXPORT __declspec(dllexport) + #else + #define LIBPROTOBUF_EXPORT __declspec(dllimport) + #endif + #ifdef LIBPROTOC_EXPORTS + #define LIBPROTOC_EXPORT __declspec(dllexport) + #else + #define LIBPROTOC_EXPORT __declspec(dllimport) + #endif +#else + #define LIBPROTOBUF_EXPORT + #define LIBPROTOC_EXPORT +#endif + +namespace internal { + +// Some of these constants are macros rather than const ints so that they can +// be used in #if directives. + +// The current version, represented as a single integer to make comparison +// easier: major * 10^6 + minor * 10^3 + micro +#define GOOGLE_PROTOBUF_VERSION 2006001 + +// The minimum library version which works with the current version of the +// headers. +#define GOOGLE_PROTOBUF_MIN_LIBRARY_VERSION 2006000 + +// The minimum header version which works with the current version of +// the library. This constant should only be used by protoc's C++ code +// generator. +static const int kMinHeaderVersionForLibrary = 2006000; + +// The minimum protoc version which works with the current version of the +// headers. +#define GOOGLE_PROTOBUF_MIN_PROTOC_VERSION 2006000 + +// The minimum header version which works with the current version of +// protoc. This constant should only be used in VerifyVersion(). +static const int kMinHeaderVersionForProtoc = 2006000; + +// Verifies that the headers and libraries are compatible. Use the macro +// below to call this. +void LIBPROTOBUF_EXPORT VerifyVersion(int headerVersion, int minLibraryVersion, + const char* filename); + +// Converts a numeric version number to a string. +std::string LIBPROTOBUF_EXPORT VersionString(int version); + +} // namespace internal + +// Place this macro in your main() function (or somewhere before you attempt +// to use the protobuf library) to verify that the version you link against +// matches the headers you compiled against. If a version mismatch is +// detected, the process will abort. +#define GOOGLE_PROTOBUF_VERIFY_VERSION \ + ::google::protobuf::internal::VerifyVersion( \ + GOOGLE_PROTOBUF_VERSION, GOOGLE_PROTOBUF_MIN_LIBRARY_VERSION, \ + __FILE__) + +// =================================================================== +// from google3/base/port.h + +typedef unsigned int uint; + +#ifdef _MSC_VER +typedef __int8 int8; +typedef __int16 int16; +typedef __int32 int32; +typedef __int64 int64; + +typedef unsigned __int8 uint8; +typedef unsigned __int16 uint16; +typedef unsigned __int32 uint32; +typedef unsigned __int64 uint64; +#else +typedef int8_t int8; +typedef int16_t int16; +typedef int32_t int32; +typedef int64_t int64; + +typedef uint8_t uint8; +typedef uint16_t uint16; +typedef uint32_t uint32; +typedef uint64_t uint64; +#endif + +// long long macros to be used because gcc and vc++ use different suffixes, +// and different size specifiers in format strings +#undef GOOGLE_LONGLONG +#undef GOOGLE_ULONGLONG +#undef GOOGLE_LL_FORMAT + +#ifdef _MSC_VER +#define GOOGLE_LONGLONG(x) x##I64 +#define GOOGLE_ULONGLONG(x) x##UI64 +#define GOOGLE_LL_FORMAT "I64" // As in printf("%I64d", ...) +#else +#define GOOGLE_LONGLONG(x) x##LL +#define GOOGLE_ULONGLONG(x) x##ULL +#define GOOGLE_LL_FORMAT "ll" // As in "%lld". Note that "q" is poor form also. +#endif + +static const int32 kint32max = 0x7FFFFFFF; +static const int32 kint32min = -kint32max - 1; +static const int64 kint64max = GOOGLE_LONGLONG(0x7FFFFFFFFFFFFFFF); +static const int64 kint64min = -kint64max - 1; +static const uint32 kuint32max = 0xFFFFFFFFu; +static const uint64 kuint64max = GOOGLE_ULONGLONG(0xFFFFFFFFFFFFFFFF); + +// ------------------------------------------------------------------- +// Annotations: Some parts of the code have been annotated in ways that might +// be useful to some compilers or tools, but are not supported universally. +// You can #define these annotations yourself if the default implementation +// is not right for you. + +#ifndef GOOGLE_ATTRIBUTE_ALWAYS_INLINE +#if defined(__GNUC__) && (__GNUC__ > 3 ||(__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) +// For functions we want to force inline. +// Introduced in gcc 3.1. +#define GOOGLE_ATTRIBUTE_ALWAYS_INLINE __attribute__ ((always_inline)) +#else +// Other compilers will have to figure it out for themselves. +#define GOOGLE_ATTRIBUTE_ALWAYS_INLINE +#endif +#endif + +#ifndef GOOGLE_ATTRIBUTE_DEPRECATED +#ifdef __GNUC__ +// If the method/variable/type is used anywhere, produce a warning. +#define GOOGLE_ATTRIBUTE_DEPRECATED __attribute__((deprecated)) +#else +#define GOOGLE_ATTRIBUTE_DEPRECATED +#endif +#endif + +#ifndef GOOGLE_PREDICT_TRUE +#ifdef __GNUC__ +// Provided at least since GCC 3.0. +#define GOOGLE_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1)) +#else +#define GOOGLE_PREDICT_TRUE +#endif +#endif + +// Delimits a block of code which may write to memory which is simultaneously +// written by other threads, but which has been determined to be thread-safe +// (e.g. because it is an idempotent write). +#ifndef GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN +#define GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN() +#endif +#ifndef GOOGLE_SAFE_CONCURRENT_WRITES_END +#define GOOGLE_SAFE_CONCURRENT_WRITES_END() +#endif + +// =================================================================== +// from google3/base/basictypes.h + +// The GOOGLE_ARRAYSIZE(arr) macro returns the # of elements in an array arr. +// The expression is a compile-time constant, and therefore can be +// used in defining new arrays, for example. +// +// GOOGLE_ARRAYSIZE catches a few type errors. If you see a compiler error +// +// "warning: division by zero in ..." +// +// when using GOOGLE_ARRAYSIZE, you are (wrongfully) giving it a pointer. +// You should only use GOOGLE_ARRAYSIZE on statically allocated arrays. +// +// The following comments are on the implementation details, and can +// be ignored by the users. +// +// ARRAYSIZE(arr) works by inspecting sizeof(arr) (the # of bytes in +// the array) and sizeof(*(arr)) (the # of bytes in one array +// element). If the former is divisible by the latter, perhaps arr is +// indeed an array, in which case the division result is the # of +// elements in the array. Otherwise, arr cannot possibly be an array, +// and we generate a compiler error to prevent the code from +// compiling. +// +// Since the size of bool is implementation-defined, we need to cast +// !(sizeof(a) & sizeof(*(a))) to size_t in order to ensure the final +// result has type size_t. +// +// This macro is not perfect as it wrongfully accepts certain +// pointers, namely where the pointer size is divisible by the pointee +// size. Since all our code has to go through a 32-bit compiler, +// where a pointer is 4 bytes, this means all pointers to a type whose +// size is 3 or greater than 4 will be (righteously) rejected. +// +// Kudos to Jorg Brown for this simple and elegant implementation. + +#undef GOOGLE_ARRAYSIZE +#define GOOGLE_ARRAYSIZE(a) \ + ((sizeof(a) / sizeof(*(a))) / \ + static_cast(!(sizeof(a) % sizeof(*(a))))) + +namespace internal { + +// Use implicit_cast as a safe version of static_cast or const_cast +// for upcasting in the type hierarchy (i.e. casting a pointer to Foo +// to a pointer to SuperclassOfFoo or casting a pointer to Foo to +// a const pointer to Foo). +// When you use implicit_cast, the compiler checks that the cast is safe. +// Such explicit implicit_casts are necessary in surprisingly many +// situations where C++ demands an exact type match instead of an +// argument type convertable to a target type. +// +// The From type can be inferred, so the preferred syntax for using +// implicit_cast is the same as for static_cast etc.: +// +// implicit_cast(expr) +// +// implicit_cast would have been part of the C++ standard library, +// but the proposal was submitted too late. It will probably make +// its way into the language in the future. +template +inline To implicit_cast(From const &f) { + return f; +} + +// When you upcast (that is, cast a pointer from type Foo to type +// SuperclassOfFoo), it's fine to use implicit_cast<>, since upcasts +// always succeed. When you downcast (that is, cast a pointer from +// type Foo to type SubclassOfFoo), static_cast<> isn't safe, because +// how do you know the pointer is really of type SubclassOfFoo? It +// could be a bare Foo, or of type DifferentSubclassOfFoo. Thus, +// when you downcast, you should use this macro. In debug mode, we +// use dynamic_cast<> to double-check the downcast is legal (we die +// if it's not). In normal mode, we do the efficient static_cast<> +// instead. Thus, it's important to test in debug mode to make sure +// the cast is legal! +// This is the only place in the code we should use dynamic_cast<>. +// In particular, you SHOULDN'T be using dynamic_cast<> in order to +// do RTTI (eg code like this: +// if (dynamic_cast(foo)) HandleASubclass1Object(foo); +// if (dynamic_cast(foo)) HandleASubclass2Object(foo); +// You should design the code some other way not to need this. + +template // use like this: down_cast(foo); +inline To down_cast(From* f) { // so we only accept pointers + // Ensures that To is a sub-type of From *. This test is here only + // for compile-time type checking, and has no overhead in an + // optimized build at run-time, as it will be optimized away + // completely. + if (false) { + implicit_cast(0); + } + +#if !defined(NDEBUG) && !defined(GOOGLE_PROTOBUF_NO_RTTI) + assert(f == NULL || dynamic_cast(f) != NULL); // RTTI: debug mode only! +#endif + return static_cast(f); +} + +} // namespace internal + +// We made these internal so that they would show up as such in the docs, +// but we don't want to stick "internal::" in front of them everywhere. +using internal::implicit_cast; +using internal::down_cast; + +// The COMPILE_ASSERT macro can be used to verify that a compile time +// expression is true. For example, you could use it to verify the +// size of a static array: +// +// COMPILE_ASSERT(ARRAYSIZE(content_type_names) == CONTENT_NUM_TYPES, +// content_type_names_incorrect_size); +// +// or to make sure a struct is smaller than a certain size: +// +// COMPILE_ASSERT(sizeof(foo) < 128, foo_too_large); +// +// The second argument to the macro is the name of the variable. If +// the expression is false, most compilers will issue a warning/error +// containing the name of the variable. + +namespace internal { + +template +struct CompileAssert { +}; + +} // namespace internal + +#undef GOOGLE_COMPILE_ASSERT +#define GOOGLE_COMPILE_ASSERT(expr, msg) \ + typedef ::google::protobuf::internal::CompileAssert<(bool(expr))> \ + msg[bool(expr) ? 1 : -1] + + +// Implementation details of COMPILE_ASSERT: +// +// - COMPILE_ASSERT works by defining an array type that has -1 +// elements (and thus is invalid) when the expression is false. +// +// - The simpler definition +// +// #define COMPILE_ASSERT(expr, msg) typedef char msg[(expr) ? 1 : -1] +// +// does not work, as gcc supports variable-length arrays whose sizes +// are determined at run-time (this is gcc's extension and not part +// of the C++ standard). As a result, gcc fails to reject the +// following code with the simple definition: +// +// int foo; +// COMPILE_ASSERT(foo, msg); // not supposed to compile as foo is +// // not a compile-time constant. +// +// - By using the type CompileAssert<(bool(expr))>, we ensures that +// expr is a compile-time constant. (Template arguments must be +// determined at compile-time.) +// +// - The outter parentheses in CompileAssert<(bool(expr))> are necessary +// to work around a bug in gcc 3.4.4 and 4.0.1. If we had written +// +// CompileAssert +// +// instead, these compilers will refuse to compile +// +// COMPILE_ASSERT(5 > 0, some_message); +// +// (They seem to think the ">" in "5 > 0" marks the end of the +// template argument list.) +// +// - The array size is (bool(expr) ? 1 : -1), instead of simply +// +// ((expr) ? 1 : -1). +// +// This is to avoid running into a bug in MS VC 7.1, which +// causes ((0.0) ? 1 : -1) to incorrectly evaluate to 1. + +// =================================================================== +// from google3/base/scoped_ptr.h + +namespace internal { + +// This is an implementation designed to match the anticipated future TR2 +// implementation of the scoped_ptr class, and its closely-related brethren, +// scoped_array, scoped_ptr_malloc, and make_scoped_ptr. + +template class scoped_ptr; +template class scoped_array; + +// A scoped_ptr is like a T*, except that the destructor of scoped_ptr +// automatically deletes the pointer it holds (if any). +// That is, scoped_ptr owns the T object that it points to. +// Like a T*, a scoped_ptr may hold either NULL or a pointer to a T object. +// +// The size of a scoped_ptr is small: +// sizeof(scoped_ptr) == sizeof(C*) +template +class scoped_ptr { + public: + + // The element type + typedef C element_type; + + // Constructor. Defaults to intializing with NULL. + // There is no way to create an uninitialized scoped_ptr. + // The input parameter must be allocated with new. + explicit scoped_ptr(C* p = NULL) : ptr_(p) { } + + // Destructor. If there is a C object, delete it. + // We don't need to test ptr_ == NULL because C++ does that for us. + ~scoped_ptr() { + enum { type_must_be_complete = sizeof(C) }; + delete ptr_; + } + + // Reset. Deletes the current owned object, if any. + // Then takes ownership of a new object, if given. + // this->reset(this->get()) works. + void reset(C* p = NULL) { + if (p != ptr_) { + enum { type_must_be_complete = sizeof(C) }; + delete ptr_; + ptr_ = p; + } + } + + // Accessors to get the owned object. + // operator* and operator-> will assert() if there is no current object. + C& operator*() const { + assert(ptr_ != NULL); + return *ptr_; + } + C* operator->() const { + assert(ptr_ != NULL); + return ptr_; + } + C* get() const { return ptr_; } + + // Comparison operators. + // These return whether two scoped_ptr refer to the same object, not just to + // two different but equal objects. + bool operator==(C* p) const { return ptr_ == p; } + bool operator!=(C* p) const { return ptr_ != p; } + + // Swap two scoped pointers. + void swap(scoped_ptr& p2) { + C* tmp = ptr_; + ptr_ = p2.ptr_; + p2.ptr_ = tmp; + } + + // Release a pointer. + // The return value is the current pointer held by this object. + // If this object holds a NULL pointer, the return value is NULL. + // After this operation, this object will hold a NULL pointer, + // and will not own the object any more. + C* release() { + C* retVal = ptr_; + ptr_ = NULL; + return retVal; + } + + private: + C* ptr_; + + // Forbid comparison of scoped_ptr types. If C2 != C, it totally doesn't + // make sense, and if C2 == C, it still doesn't make sense because you should + // never have the same object owned by two different scoped_ptrs. + template bool operator==(scoped_ptr const& p2) const; + template bool operator!=(scoped_ptr const& p2) const; + + // Disallow evil constructors + scoped_ptr(const scoped_ptr&); + void operator=(const scoped_ptr&); +}; + +// scoped_array is like scoped_ptr, except that the caller must allocate +// with new [] and the destructor deletes objects with delete []. +// +// As with scoped_ptr, a scoped_array either points to an object +// or is NULL. A scoped_array owns the object that it points to. +// +// Size: sizeof(scoped_array) == sizeof(C*) +template +class scoped_array { + public: + + // The element type + typedef C element_type; + + // Constructor. Defaults to intializing with NULL. + // There is no way to create an uninitialized scoped_array. + // The input parameter must be allocated with new []. + explicit scoped_array(C* p = NULL) : array_(p) { } + + // Destructor. If there is a C object, delete it. + // We don't need to test ptr_ == NULL because C++ does that for us. + ~scoped_array() { + enum { type_must_be_complete = sizeof(C) }; + delete[] array_; + } + + // Reset. Deletes the current owned object, if any. + // Then takes ownership of a new object, if given. + // this->reset(this->get()) works. + void reset(C* p = NULL) { + if (p != array_) { + enum { type_must_be_complete = sizeof(C) }; + delete[] array_; + array_ = p; + } + } + + // Get one element of the current object. + // Will assert() if there is no current object, or index i is negative. + C& operator[](std::ptrdiff_t i) const { + assert(i >= 0); + assert(array_ != NULL); + return array_[i]; + } + + // Get a pointer to the zeroth element of the current object. + // If there is no current object, return NULL. + C* get() const { + return array_; + } + + // Comparison operators. + // These return whether two scoped_array refer to the same object, not just to + // two different but equal objects. + bool operator==(C* p) const { return array_ == p; } + bool operator!=(C* p) const { return array_ != p; } + + // Swap two scoped arrays. + void swap(scoped_array& p2) { + C* tmp = array_; + array_ = p2.array_; + p2.array_ = tmp; + } + + // Release an array. + // The return value is the current pointer held by this object. + // If this object holds a NULL pointer, the return value is NULL. + // After this operation, this object will hold a NULL pointer, + // and will not own the object any more. + C* release() { + C* retVal = array_; + array_ = NULL; + return retVal; + } + + private: + C* array_; + + // Forbid comparison of different scoped_array types. + template bool operator==(scoped_array const& p2) const; + template bool operator!=(scoped_array const& p2) const; + + // Disallow evil constructors + scoped_array(const scoped_array&); + void operator=(const scoped_array&); +}; + +} // namespace internal + +// We made these internal so that they would show up as such in the docs, +// but we don't want to stick "internal::" in front of them everywhere. +using internal::scoped_ptr; +using internal::scoped_array; + +// =================================================================== +// emulates google3/base/logging.h + +enum LogLevel { + LOGLEVEL_INFO, // Informational. This is never actually used by + // libprotobuf. + LOGLEVEL_WARNING, // Warns about issues that, although not technically a + // problem now, could cause problems in the future. For + // example, a // warning will be printed when parsing a + // message that is near the message size limit. + LOGLEVEL_ERROR, // An error occurred which should never happen during + // normal use. + LOGLEVEL_FATAL, // An error occurred from which the library cannot + // recover. This usually indicates a programming error + // in the code which calls the library, especially when + // compiled in debug mode. + +#ifdef NDEBUG + LOGLEVEL_DFATAL = LOGLEVEL_ERROR +#else + LOGLEVEL_DFATAL = LOGLEVEL_FATAL +#endif +}; + +namespace internal { + +class LogFinisher; + +class LIBPROTOBUF_EXPORT LogMessage { + public: + LogMessage(LogLevel level, const char* filename, int line); + ~LogMessage(); + + LogMessage& operator<<(const std::string& value); + LogMessage& operator<<(const char* value); + LogMessage& operator<<(char value); + LogMessage& operator<<(int value); + LogMessage& operator<<(uint value); + LogMessage& operator<<(long value); + LogMessage& operator<<(unsigned long value); + LogMessage& operator<<(double value); + + private: + friend class LogFinisher; + void Finish(); + + LogLevel level_; + const char* filename_; + int line_; + std::string message_; +}; + +// Used to make the entire "LOG(BLAH) << etc." expression have a void return +// type and print a newline after each message. +class LIBPROTOBUF_EXPORT LogFinisher { + public: + void operator=(LogMessage& other); +}; + +} // namespace internal + +// Undef everything in case we're being mixed with some other Google library +// which already defined them itself. Presumably all Google libraries will +// support the same syntax for these so it should not be a big deal if they +// end up using our definitions instead. +#undef GOOGLE_LOG +#undef GOOGLE_LOG_IF + +#undef GOOGLE_CHECK +#undef GOOGLE_CHECK_OK +#undef GOOGLE_CHECK_EQ +#undef GOOGLE_CHECK_NE +#undef GOOGLE_CHECK_LT +#undef GOOGLE_CHECK_LE +#undef GOOGLE_CHECK_GT +#undef GOOGLE_CHECK_GE +#undef GOOGLE_CHECK_NOTNULL + +#undef GOOGLE_DLOG +#undef GOOGLE_DCHECK +#undef GOOGLE_DCHECK_EQ +#undef GOOGLE_DCHECK_NE +#undef GOOGLE_DCHECK_LT +#undef GOOGLE_DCHECK_LE +#undef GOOGLE_DCHECK_GT +#undef GOOGLE_DCHECK_GE + +#define GOOGLE_LOG(LEVEL) \ + ::google::protobuf::internal::LogFinisher() = \ + ::google::protobuf::internal::LogMessage( \ + ::google::protobuf::LOGLEVEL_##LEVEL, __FILE__, __LINE__) +#define GOOGLE_LOG_IF(LEVEL, CONDITION) \ + !(CONDITION) ? (void)0 : GOOGLE_LOG(LEVEL) + +#define GOOGLE_CHECK(EXPRESSION) \ + GOOGLE_LOG_IF(FATAL, !(EXPRESSION)) << "CHECK failed: " #EXPRESSION ": " +#define GOOGLE_CHECK_OK(A) GOOGLE_CHECK(A) +#define GOOGLE_CHECK_EQ(A, B) GOOGLE_CHECK((A) == (B)) +#define GOOGLE_CHECK_NE(A, B) GOOGLE_CHECK((A) != (B)) +#define GOOGLE_CHECK_LT(A, B) GOOGLE_CHECK((A) < (B)) +#define GOOGLE_CHECK_LE(A, B) GOOGLE_CHECK((A) <= (B)) +#define GOOGLE_CHECK_GT(A, B) GOOGLE_CHECK((A) > (B)) +#define GOOGLE_CHECK_GE(A, B) GOOGLE_CHECK((A) >= (B)) + +namespace internal { +template +T* CheckNotNull(const char* /* file */, int /* line */, + const char* name, T* val) { + if (val == NULL) { + GOOGLE_LOG(FATAL) << name; + } + return val; +} +} // namespace internal +#define GOOGLE_CHECK_NOTNULL(A) \ + internal::CheckNotNull(__FILE__, __LINE__, "'" #A "' must not be NULL", (A)) + +#ifdef NDEBUG + +#define GOOGLE_DLOG GOOGLE_LOG_IF(INFO, false) + +#define GOOGLE_DCHECK(EXPRESSION) while(false) GOOGLE_CHECK(EXPRESSION) +#define GOOGLE_DCHECK_EQ(A, B) GOOGLE_DCHECK((A) == (B)) +#define GOOGLE_DCHECK_NE(A, B) GOOGLE_DCHECK((A) != (B)) +#define GOOGLE_DCHECK_LT(A, B) GOOGLE_DCHECK((A) < (B)) +#define GOOGLE_DCHECK_LE(A, B) GOOGLE_DCHECK((A) <= (B)) +#define GOOGLE_DCHECK_GT(A, B) GOOGLE_DCHECK((A) > (B)) +#define GOOGLE_DCHECK_GE(A, B) GOOGLE_DCHECK((A) >= (B)) + +#else // NDEBUG + +#define GOOGLE_DLOG GOOGLE_LOG + +#define GOOGLE_DCHECK GOOGLE_CHECK +#define GOOGLE_DCHECK_EQ GOOGLE_CHECK_EQ +#define GOOGLE_DCHECK_NE GOOGLE_CHECK_NE +#define GOOGLE_DCHECK_LT GOOGLE_CHECK_LT +#define GOOGLE_DCHECK_LE GOOGLE_CHECK_LE +#define GOOGLE_DCHECK_GT GOOGLE_CHECK_GT +#define GOOGLE_DCHECK_GE GOOGLE_CHECK_GE + +#endif // !NDEBUG + +typedef void LogHandler(LogLevel level, const char* filename, int line, + const std::string& message); + +// The protobuf library sometimes writes warning and error messages to +// stderr. These messages are primarily useful for developers, but may +// also help end users figure out a problem. If you would prefer that +// these messages be sent somewhere other than stderr, call SetLogHandler() +// to set your own handler. This returns the old handler. Set the handler +// to NULL to ignore log messages (but see also LogSilencer, below). +// +// Obviously, SetLogHandler is not thread-safe. You should only call it +// at initialization time, and probably not from library code. If you +// simply want to suppress log messages temporarily (e.g. because you +// have some code that tends to trigger them frequently and you know +// the warnings are not important to you), use the LogSilencer class +// below. +LIBPROTOBUF_EXPORT LogHandler* SetLogHandler(LogHandler* new_func); + +// Create a LogSilencer if you want to temporarily suppress all log +// messages. As long as any LogSilencer objects exist, non-fatal +// log messages will be discarded (the current LogHandler will *not* +// be called). Constructing a LogSilencer is thread-safe. You may +// accidentally suppress log messages occurring in another thread, but +// since messages are generally for debugging purposes only, this isn't +// a big deal. If you want to intercept log messages, use SetLogHandler(). +class LIBPROTOBUF_EXPORT LogSilencer { + public: + LogSilencer(); + ~LogSilencer(); +}; + +// =================================================================== +// emulates google3/base/callback.h + +// Abstract interface for a callback. When calling an RPC, you must provide +// a Closure to call when the procedure completes. See the Service interface +// in service.h. +// +// To automatically construct a Closure which calls a particular function or +// method with a particular set of parameters, use the NewCallback() function. +// Example: +// void FooDone(const FooResponse* response) { +// ... +// } +// +// void CallFoo() { +// ... +// // When done, call FooDone() and pass it a pointer to the response. +// Closure* callback = NewCallback(&FooDone, response); +// // Make the call. +// service->Foo(controller, request, response, callback); +// } +// +// Example that calls a method: +// class Handler { +// public: +// ... +// +// void FooDone(const FooResponse* response) { +// ... +// } +// +// void CallFoo() { +// ... +// // When done, call FooDone() and pass it a pointer to the response. +// Closure* callback = NewCallback(this, &Handler::FooDone, response); +// // Make the call. +// service->Foo(controller, request, response, callback); +// } +// }; +// +// Currently NewCallback() supports binding zero, one, or two arguments. +// +// Callbacks created with NewCallback() automatically delete themselves when +// executed. They should be used when a callback is to be called exactly +// once (usually the case with RPC callbacks). If a callback may be called +// a different number of times (including zero), create it with +// NewPermanentCallback() instead. You are then responsible for deleting the +// callback (using the "delete" keyword as normal). +// +// Note that NewCallback() is a bit touchy regarding argument types. Generally, +// the values you provide for the parameter bindings must exactly match the +// types accepted by the callback function. For example: +// void Foo(string s); +// NewCallback(&Foo, "foo"); // WON'T WORK: const char* != string +// NewCallback(&Foo, string("foo")); // WORKS +// Also note that the arguments cannot be references: +// void Foo(const string& s); +// string my_str; +// NewCallback(&Foo, my_str); // WON'T WORK: Can't use referecnes. +// However, correctly-typed pointers will work just fine. +class LIBPROTOBUF_EXPORT Closure { + public: + Closure() {} + virtual ~Closure(); + + virtual void Run() = 0; + + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Closure); +}; + +namespace internal { + +class LIBPROTOBUF_EXPORT FunctionClosure0 : public Closure { + public: + typedef void (*FunctionType)(); + + FunctionClosure0(FunctionType function, bool self_deleting) + : function_(function), self_deleting_(self_deleting) {} + ~FunctionClosure0(); + + void Run() { + bool needs_delete = self_deleting_; // read in case callback deletes + function_(); + if (needs_delete) delete this; + } + + private: + FunctionType function_; + bool self_deleting_; +}; + +template +class MethodClosure0 : public Closure { + public: + typedef void (Class::*MethodType)(); + + MethodClosure0(Class* object, MethodType method, bool self_deleting) + : object_(object), method_(method), self_deleting_(self_deleting) {} + ~MethodClosure0() {} + + void Run() { + bool needs_delete = self_deleting_; // read in case callback deletes + (object_->*method_)(); + if (needs_delete) delete this; + } + + private: + Class* object_; + MethodType method_; + bool self_deleting_; +}; + +template +class FunctionClosure1 : public Closure { + public: + typedef void (*FunctionType)(Arg1 arg1); + + FunctionClosure1(FunctionType function, bool self_deleting, + Arg1 arg1) + : function_(function), self_deleting_(self_deleting), + arg1_(arg1) {} + ~FunctionClosure1() {} + + void Run() { + bool needs_delete = self_deleting_; // read in case callback deletes + function_(arg1_); + if (needs_delete) delete this; + } + + private: + FunctionType function_; + bool self_deleting_; + Arg1 arg1_; +}; + +template +class MethodClosure1 : public Closure { + public: + typedef void (Class::*MethodType)(Arg1 arg1); + + MethodClosure1(Class* object, MethodType method, bool self_deleting, + Arg1 arg1) + : object_(object), method_(method), self_deleting_(self_deleting), + arg1_(arg1) {} + ~MethodClosure1() {} + + void Run() { + bool needs_delete = self_deleting_; // read in case callback deletes + (object_->*method_)(arg1_); + if (needs_delete) delete this; + } + + private: + Class* object_; + MethodType method_; + bool self_deleting_; + Arg1 arg1_; +}; + +template +class FunctionClosure2 : public Closure { + public: + typedef void (*FunctionType)(Arg1 arg1, Arg2 arg2); + + FunctionClosure2(FunctionType function, bool self_deleting, + Arg1 arg1, Arg2 arg2) + : function_(function), self_deleting_(self_deleting), + arg1_(arg1), arg2_(arg2) {} + ~FunctionClosure2() {} + + void Run() { + bool needs_delete = self_deleting_; // read in case callback deletes + function_(arg1_, arg2_); + if (needs_delete) delete this; + } + + private: + FunctionType function_; + bool self_deleting_; + Arg1 arg1_; + Arg2 arg2_; +}; + +template +class MethodClosure2 : public Closure { + public: + typedef void (Class::*MethodType)(Arg1 arg1, Arg2 arg2); + + MethodClosure2(Class* object, MethodType method, bool self_deleting, + Arg1 arg1, Arg2 arg2) + : object_(object), method_(method), self_deleting_(self_deleting), + arg1_(arg1), arg2_(arg2) {} + ~MethodClosure2() {} + + void Run() { + bool needs_delete = self_deleting_; // read in case callback deletes + (object_->*method_)(arg1_, arg2_); + if (needs_delete) delete this; + } + + private: + Class* object_; + MethodType method_; + bool self_deleting_; + Arg1 arg1_; + Arg2 arg2_; +}; + +} // namespace internal + +// See Closure. +inline Closure* NewCallback(void (*function)()) { + return new internal::FunctionClosure0(function, true); +} + +// See Closure. +inline Closure* NewPermanentCallback(void (*function)()) { + return new internal::FunctionClosure0(function, false); +} + +// See Closure. +template +inline Closure* NewCallback(Class* object, void (Class::*method)()) { + return new internal::MethodClosure0(object, method, true); +} + +// See Closure. +template +inline Closure* NewPermanentCallback(Class* object, void (Class::*method)()) { + return new internal::MethodClosure0(object, method, false); +} + +// See Closure. +template +inline Closure* NewCallback(void (*function)(Arg1), + Arg1 arg1) { + return new internal::FunctionClosure1(function, true, arg1); +} + +// See Closure. +template +inline Closure* NewPermanentCallback(void (*function)(Arg1), + Arg1 arg1) { + return new internal::FunctionClosure1(function, false, arg1); +} + +// See Closure. +template +inline Closure* NewCallback(Class* object, void (Class::*method)(Arg1), + Arg1 arg1) { + return new internal::MethodClosure1(object, method, true, arg1); +} + +// See Closure. +template +inline Closure* NewPermanentCallback(Class* object, void (Class::*method)(Arg1), + Arg1 arg1) { + return new internal::MethodClosure1(object, method, false, arg1); +} + +// See Closure. +template +inline Closure* NewCallback(void (*function)(Arg1, Arg2), + Arg1 arg1, Arg2 arg2) { + return new internal::FunctionClosure2( + function, true, arg1, arg2); +} + +// See Closure. +template +inline Closure* NewPermanentCallback(void (*function)(Arg1, Arg2), + Arg1 arg1, Arg2 arg2) { + return new internal::FunctionClosure2( + function, false, arg1, arg2); +} + +// See Closure. +template +inline Closure* NewCallback(Class* object, void (Class::*method)(Arg1, Arg2), + Arg1 arg1, Arg2 arg2) { + return new internal::MethodClosure2( + object, method, true, arg1, arg2); +} + +// See Closure. +template +inline Closure* NewPermanentCallback( + Class* object, void (Class::*method)(Arg1, Arg2), + Arg1 arg1, Arg2 arg2) { + return new internal::MethodClosure2( + object, method, false, arg1, arg2); +} + +// A function which does nothing. Useful for creating no-op callbacks, e.g.: +// Closure* nothing = NewCallback(&DoNothing); +void LIBPROTOBUF_EXPORT DoNothing(); + +// =================================================================== +// emulates google3/base/mutex.h + +namespace internal { + +// A Mutex is a non-reentrant (aka non-recursive) mutex. At most one thread T +// may hold a mutex at a given time. If T attempts to Lock() the same Mutex +// while holding it, T will deadlock. +class LIBPROTOBUF_EXPORT Mutex { + public: + // Create a Mutex that is not held by anybody. + Mutex(); + + // Destructor + ~Mutex(); + + // Block if necessary until this Mutex is free, then acquire it exclusively. + void Lock(); + + // Release this Mutex. Caller must hold it exclusively. + void Unlock(); + + // Crash if this Mutex is not held exclusively by this thread. + // May fail to crash when it should; will never crash when it should not. + void AssertHeld(); + + private: + struct Internal; + Internal* mInternal; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Mutex); +}; + +// MutexLock(mu) acquires mu when constructed and releases it when destroyed. +class LIBPROTOBUF_EXPORT MutexLock { + public: + explicit MutexLock(Mutex *mu) : mu_(mu) { this->mu_->Lock(); } + ~MutexLock() { this->mu_->Unlock(); } + private: + Mutex *const mu_; + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MutexLock); +}; + +// TODO(kenton): Implement these? Hard to implement portably. +typedef MutexLock ReaderMutexLock; +typedef MutexLock WriterMutexLock; + +// MutexLockMaybe is like MutexLock, but is a no-op when mu is NULL. +class LIBPROTOBUF_EXPORT MutexLockMaybe { + public: + explicit MutexLockMaybe(Mutex *mu) : + mu_(mu) { if (this->mu_ != NULL) { this->mu_->Lock(); } } + ~MutexLockMaybe() { if (this->mu_ != NULL) { this->mu_->Unlock(); } } + private: + Mutex *const mu_; + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MutexLockMaybe); +}; + +} // namespace internal + +// We made these internal so that they would show up as such in the docs, +// but we don't want to stick "internal::" in front of them everywhere. +using internal::Mutex; +using internal::MutexLock; +using internal::ReaderMutexLock; +using internal::WriterMutexLock; +using internal::MutexLockMaybe; + +// =================================================================== +// from google3/util/utf8/public/unilib.h + +namespace internal { + +// Checks if the buffer contains structurally-valid UTF-8. Implemented in +// structurally_valid.cc. +LIBPROTOBUF_EXPORT bool IsStructurallyValidUTF8(const char* buf, int len); + +} // namespace internal + +// =================================================================== +// from google3/util/endian/endian.h +LIBPROTOBUF_EXPORT uint32 ghtonl(uint32 x); + +// =================================================================== +// Shutdown support. + +// Shut down the entire protocol buffers library, deleting all static-duration +// objects allocated by the library or by generated .pb.cc files. +// +// There are two reasons you might want to call this: +// * You use a draconian definition of "memory leak" in which you expect +// every single malloc() to have a corresponding free(), even for objects +// which live until program exit. +// * You are writing a dynamically-loaded library which needs to clean up +// after itself when the library is unloaded. +// +// It is safe to call this multiple times. However, it is not safe to use +// any other part of the protocol buffers library after +// ShutdownProtobufLibrary() has been called. +LIBPROTOBUF_EXPORT void ShutdownProtobufLibrary(); + +namespace internal { + +// Register a function to be called when ShutdownProtocolBuffers() is called. +LIBPROTOBUF_EXPORT void OnShutdown(void (*func)()); + +} // namespace internal + +#if PROTOBUF_USE_EXCEPTIONS +class FatalException : public std::exception { + public: + FatalException(const char* filename, int line, const std::string& message) + : filename_(filename), line_(line), message_(message) {} + virtual ~FatalException() throw(); + + virtual const char* what() const throw(); + + const char* filename() const { return filename_; } + int line() const { return line_; } + const std::string& message() const { return message_; } + + private: + const char* filename_; + const int line_; + const std::string message_; +}; +#endif + +// This is at the end of the file instead of the beginning to work around a bug +// in some versions of MSVC. +using namespace std; // Don't do this at home, kids. + +} // namespace protobuf +} // namespace google + +#endif // GOOGLE_PROTOBUF_COMMON_H__ diff --git a/kortex_gazebo/include/google/protobuf/stubs/once.h b/kortex_gazebo/include/google/protobuf/stubs/once.h new file mode 100644 index 00000000..cc62bbaa --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/stubs/once.h @@ -0,0 +1,166 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// +// emulates google3/base/once.h +// +// This header is intended to be included only by internal .cc files and +// generated .pb.cc files. Users should not use this directly. +// +// This is basically a portable version of pthread_once(). +// +// This header declares: +// * A type called ProtobufOnceType. +// * A macro GOOGLE_PROTOBUF_DECLARE_ONCE() which declares a variable of type +// ProtobufOnceType. This is the only legal way to declare such a variable. +// The macro may only be used at the global scope (you cannot create local or +// class member variables of this type). +// * A function GoogleOnceInit(ProtobufOnceType* once, void (*init_func)()). +// This function, when invoked multiple times given the same ProtobufOnceType +// object, will invoke init_func on the first call only, and will make sure +// none of the calls return before that first call to init_func has finished. +// * The user can provide a parameter which GoogleOnceInit() forwards to the +// user-provided function when it is called. Usage example: +// int a = 10; +// GoogleOnceInit(&my_once, &MyFunctionExpectingIntArgument, &a); +// * This implementation guarantees that ProtobufOnceType is a POD (i.e. no +// static initializer generated). +// +// This implements a way to perform lazy initialization. It's more efficient +// than using mutexes as no lock is needed if initialization has already +// happened. +// +// Example usage: +// void Init(); +// GOOGLE_PROTOBUF_DECLARE_ONCE(once_init); +// +// // Calls Init() exactly once. +// void InitOnce() { +// GoogleOnceInit(&once_init, &Init); +// } +// +// Note that if GoogleOnceInit() is called before main() has begun, it must +// only be called by the thread that will eventually call main() -- that is, +// the thread that performs dynamic initialization. In general this is a safe +// assumption since people don't usually construct threads before main() starts, +// but it is technically not guaranteed. Unfortunately, Win32 provides no way +// whatsoever to statically-initialize its synchronization primitives, so our +// only choice is to assume that dynamic initialization is single-threaded. + +#ifndef GOOGLE_PROTOBUF_STUBS_ONCE_H__ +#define GOOGLE_PROTOBUF_STUBS_ONCE_H__ + +#include +#include + +namespace google { +namespace protobuf { + +#ifdef GOOGLE_PROTOBUF_NO_THREAD_SAFETY + +typedef bool ProtobufOnceType; + +#define GOOGLE_PROTOBUF_ONCE_INIT false + +inline void GoogleOnceInit(ProtobufOnceType* once, void (*init_func)()) { + if (!*once) { + *once = true; + init_func(); + } +} + +template +inline void GoogleOnceInit(ProtobufOnceType* once, void (*init_func)(Arg), + Arg arg) { + if (!*once) { + *once = true; + init_func(arg); + } +} + +#else + +enum { + ONCE_STATE_UNINITIALIZED = 0, + ONCE_STATE_EXECUTING_CLOSURE = 1, + ONCE_STATE_DONE = 2 +}; + +typedef internal::AtomicWord ProtobufOnceType; + +#define GOOGLE_PROTOBUF_ONCE_INIT ::google::protobuf::ONCE_STATE_UNINITIALIZED + +LIBPROTOBUF_EXPORT +void GoogleOnceInitImpl(ProtobufOnceType* once, Closure* closure); + +inline void GoogleOnceInit(ProtobufOnceType* once, void (*init_func)()) { + if (internal::Acquire_Load(once) != ONCE_STATE_DONE) { + internal::FunctionClosure0 func(init_func, false); + GoogleOnceInitImpl(once, &func); + } +} + +template +inline void GoogleOnceInit(ProtobufOnceType* once, void (*init_func)(Arg*), + Arg* arg) { + if (internal::Acquire_Load(once) != ONCE_STATE_DONE) { + internal::FunctionClosure1 func(init_func, false, arg); + GoogleOnceInitImpl(once, &func); + } +} + +#endif // GOOGLE_PROTOBUF_NO_THREAD_SAFETY + +class GoogleOnceDynamic { + public: + GoogleOnceDynamic() : state_(GOOGLE_PROTOBUF_ONCE_INIT) { } + + // If this->Init() has not been called before by any thread, + // execute (*func_with_arg)(arg) then return. + // Otherwise, wait until that prior invocation has finished + // executing its function, then return. + template + void Init(void (*func_with_arg)(T*), T* arg) { + GoogleOnceInit(&this->state_, + func_with_arg, + arg); + } + private: + ProtobufOnceType state_; +}; + +#define GOOGLE_PROTOBUF_DECLARE_ONCE(NAME) \ + ::google::protobuf::ProtobufOnceType NAME = GOOGLE_PROTOBUF_ONCE_INIT + +} // namespace protobuf +} // namespace google + +#endif // GOOGLE_PROTOBUF_STUBS_ONCE_H__ diff --git a/kortex_gazebo/include/google/protobuf/stubs/platform_macros.h b/kortex_gazebo/include/google/protobuf/stubs/platform_macros.h new file mode 100644 index 00000000..7956d076 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/stubs/platform_macros.h @@ -0,0 +1,103 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2012 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef GOOGLE_PROTOBUF_PLATFORM_MACROS_H_ +#define GOOGLE_PROTOBUF_PLATFORM_MACROS_H_ + +#include + +#define GOOGLE_PROTOBUF_PLATFORM_ERROR \ +#error "Host platform was not detected as supported by protobuf" + +// Processor architecture detection. For more info on what's defined, see: +// http://msdn.microsoft.com/en-us/library/b0084kay.aspx +// http://www.agner.org/optimize/calling_conventions.pdf +// or with gcc, run: "echo | gcc -E -dM -" +#if defined(_M_X64) || defined(__x86_64__) +#define GOOGLE_PROTOBUF_ARCH_X64 1 +#define GOOGLE_PROTOBUF_ARCH_64_BIT 1 +#elif defined(_M_IX86) || defined(__i386__) +#define GOOGLE_PROTOBUF_ARCH_IA32 1 +#define GOOGLE_PROTOBUF_ARCH_32_BIT 1 +#elif defined(__QNX__) +#define GOOGLE_PROTOBUF_ARCH_ARM_QNX 1 +#define GOOGLE_PROTOBUF_ARCH_32_BIT 1 +#elif defined(__ARMEL__) +#define GOOGLE_PROTOBUF_ARCH_ARM 1 +#define GOOGLE_PROTOBUF_ARCH_32_BIT 1 +#elif defined(__aarch64__) +#define GOOGLE_PROTOBUF_ARCH_AARCH64 1 +#define GOOGLE_PROTOBUF_ARCH_64_BIT 1 +#elif defined(__MIPSEL__) +#if defined(__LP64__) +#define GOOGLE_PROTOBUF_ARCH_MIPS64 1 +#define GOOGLE_PROTOBUF_ARCH_64_BIT 1 +#else +#define GOOGLE_PROTOBUF_ARCH_MIPS 1 +#define GOOGLE_PROTOBUF_ARCH_32_BIT 1 +#endif +#elif defined(__pnacl__) +#define GOOGLE_PROTOBUF_ARCH_32_BIT 1 +#elif defined(sparc) +#define GOOGLE_PROTOBUF_ARCH_SPARC 1 +#ifdef SOLARIS_64BIT_ENABLED +#define GOOGLE_PROTOBUF_ARCH_64_BIT 1 +#else +#define GOOGLE_PROTOBUF_ARCH_32_BIT 1 +#endif +#elif defined(__GNUC__) +# if (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4)) +// We fallback to the generic Clang/GCC >= 4.7 implementation in atomicops.h +# elif defined(__clang__) +# if !__has_extension(c_atomic) +GOOGLE_PROTOBUF_PLATFORM_ERROR +# endif +// We fallback to the generic Clang/GCC >= 4.7 implementation in atomicops.h +# endif +# if __LP64__ +# define GOOGLE_PROTOBUF_ARCH_64_BIT 1 +# else +# define GOOGLE_PROTOBUF_ARCH_32_BIT 1 +# endif +#else +GOOGLE_PROTOBUF_PLATFORM_ERROR +#endif + +#if defined(__APPLE__) +#define GOOGLE_PROTOBUF_OS_APPLE +#elif defined(__native_client__) +#define GOOGLE_PROTOBUF_OS_NACL +#elif defined(sun) +#define GOOGLE_PROTOBUF_OS_SOLARIS +#endif + +#undef GOOGLE_PROTOBUF_PLATFORM_ERROR + +#endif // GOOGLE_PROTOBUF_PLATFORM_MACROS_H_ diff --git a/kortex_gazebo/include/google/protobuf/stubs/stl_util.h b/kortex_gazebo/include/google/protobuf/stubs/stl_util.h new file mode 100644 index 00000000..9e4c82a4 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/stubs/stl_util.h @@ -0,0 +1,121 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// from google3/util/gtl/stl_util.h + +#ifndef GOOGLE_PROTOBUF_STUBS_STL_UTIL_H__ +#define GOOGLE_PROTOBUF_STUBS_STL_UTIL_H__ + +#include + +namespace google { +namespace protobuf { + +// STLDeleteContainerPointers() +// For a range within a container of pointers, calls delete +// (non-array version) on these pointers. +// NOTE: for these three functions, we could just implement a DeleteObject +// functor and then call for_each() on the range and functor, but this +// requires us to pull in all of algorithm.h, which seems expensive. +// For hash_[multi]set, it is important that this deletes behind the iterator +// because the hash_set may call the hash function on the iterator when it is +// advanced, which could result in the hash function trying to deference a +// stale pointer. +template +void STLDeleteContainerPointers(ForwardIterator begin, + ForwardIterator end) { + while (begin != end) { + ForwardIterator temp = begin; + ++begin; + delete *temp; + } +} + +// Inside Google, this function implements a horrible, disgusting hack in which +// we reach into the string's private implementation and resize it without +// initializing the new bytes. In some cases doing this can significantly +// improve performance. However, since it's totally non-portable it has no +// place in open source code. Feel free to fill this function in with your +// own disgusting hack if you want the perf boost. +inline void STLStringResizeUninitialized(string* s, size_t new_size) { + s->resize(new_size); +} + +// Return a mutable char* pointing to a string's internal buffer, +// which may not be null-terminated. Writing through this pointer will +// modify the string. +// +// string_as_array(&str)[i] is valid for 0 <= i < str.size() until the +// next call to a string method that invalidates iterators. +// +// As of 2006-04, there is no standard-blessed way of getting a +// mutable reference to a string's internal buffer. However, issue 530 +// (http://www.open-std.org/JTC1/SC22/WG21/docs/lwg-active.html#530) +// proposes this as the method. According to Matt Austern, this should +// already work on all current implementations. +inline char* string_as_array(string* str) { + // DO NOT USE const_cast(str->data())! See the unittest for why. + return str->empty() ? NULL : &*str->begin(); +} + +// STLDeleteElements() deletes all the elements in an STL container and clears +// the container. This function is suitable for use with a vector, set, +// hash_set, or any other STL container which defines sensible begin(), end(), +// and clear() methods. +// +// If container is NULL, this function is a no-op. +// +// As an alternative to calling STLDeleteElements() directly, consider +// ElementDeleter (defined below), which ensures that your container's elements +// are deleted when the ElementDeleter goes out of scope. +template +void STLDeleteElements(T *container) { + if (!container) return; + STLDeleteContainerPointers(container->begin(), container->end()); + container->clear(); +} + +// Given an STL container consisting of (key, value) pairs, STLDeleteValues +// deletes all the "value" components and clears the container. Does nothing +// in the case it's given a NULL pointer. + +template +void STLDeleteValues(T *v) { + if (!v) return; + for (typename T::iterator i = v->begin(); i != v->end(); ++i) { + delete i->second; + } + v->clear(); +} + +} // namespace protobuf +} // namespace google + +#endif // GOOGLE_PROTOBUF_STUBS_STL_UTIL_H__ diff --git a/kortex_gazebo/include/google/protobuf/stubs/template_util.h b/kortex_gazebo/include/google/protobuf/stubs/template_util.h new file mode 100644 index 00000000..4f30ffa3 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/stubs/template_util.h @@ -0,0 +1,138 @@ +// Copyright 2005 Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// ---- +// Author: lar@google.com (Laramie Leavitt) +// +// Template metaprogramming utility functions. +// +// This code is compiled directly on many platforms, including client +// platforms like Windows, Mac, and embedded systems. Before making +// any changes here, make sure that you're not breaking any platforms. +// +// +// The names choosen here reflect those used in tr1 and the boost::mpl +// library, there are similar operations used in the Loki library as +// well. I prefer the boost names for 2 reasons: +// 1. I think that portions of the Boost libraries are more likely to +// be included in the c++ standard. +// 2. It is not impossible that some of the boost libraries will be +// included in our own build in the future. +// Both of these outcomes means that we may be able to directly replace +// some of these with boost equivalents. +// +#ifndef GOOGLE_PROTOBUF_TEMPLATE_UTIL_H_ +#define GOOGLE_PROTOBUF_TEMPLATE_UTIL_H_ + +namespace google { +namespace protobuf { +namespace internal { + +// Types small_ and big_ are guaranteed such that sizeof(small_) < +// sizeof(big_) +typedef char small_; + +struct big_ { + char dummy[2]; +}; + +// Identity metafunction. +template +struct identity_ { + typedef T type; +}; + +// integral_constant, defined in tr1, is a wrapper for an integer +// value. We don't really need this generality; we could get away +// with hardcoding the integer type to bool. We use the fully +// general integer_constant for compatibility with tr1. + +template +struct integral_constant { + static const T value = v; + typedef T value_type; + typedef integral_constant type; +}; + +template const T integral_constant::value; + + +// Abbreviations: true_type and false_type are structs that represent boolean +// true and false values. Also define the boost::mpl versions of those names, +// true_ and false_. +typedef integral_constant true_type; +typedef integral_constant false_type; +typedef true_type true_; +typedef false_type false_; + +// if_ is a templatized conditional statement. +// if_ is a compile time evaluation of cond. +// if_<>::type contains A if cond is true, B otherwise. +template +struct if_{ + typedef A type; +}; + +template +struct if_ { + typedef B type; +}; + + +// type_equals_ is a template type comparator, similar to Loki IsSameType. +// type_equals_::value is true iff "A" is the same type as "B". +// +// New code should prefer base::is_same, defined in base/type_traits.h. +// It is functionally identical, but is_same is the standard spelling. +template +struct type_equals_ : public false_ { +}; + +template +struct type_equals_ : public true_ { +}; + +// and_ is a template && operator. +// and_::value evaluates "A::value && B::value". +template +struct and_ : public integral_constant { +}; + +// or_ is a template || operator. +// or_::value evaluates "A::value || B::value". +template +struct or_ : public integral_constant { +}; + + +} // namespace internal +} // namespace protobuf +} // namespace google + +#endif // GOOGLE_PROTOBUF_TEMPLATE_UTIL_H_ diff --git a/kortex_gazebo/include/google/protobuf/stubs/type_traits.h b/kortex_gazebo/include/google/protobuf/stubs/type_traits.h new file mode 100644 index 00000000..e41f5e6f --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/stubs/type_traits.h @@ -0,0 +1,336 @@ +// Copyright (c) 2006, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// ---- +// Author: Matt Austern +// +// This code is compiled directly on many platforms, including client +// platforms like Windows, Mac, and embedded systems. Before making +// any changes here, make sure that you're not breaking any platforms. +// +// Define a small subset of tr1 type traits. The traits we define are: +// is_integral +// is_floating_point +// is_pointer +// is_enum +// is_reference +// is_pod +// has_trivial_constructor +// has_trivial_copy +// has_trivial_assign +// has_trivial_destructor +// remove_const +// remove_volatile +// remove_cv +// remove_reference +// add_reference +// remove_pointer +// is_same +// is_convertible +// We can add more type traits as required. + +#ifndef GOOGLE_PROTOBUF_TYPE_TRAITS_H_ +#define GOOGLE_PROTOBUF_TYPE_TRAITS_H_ + +#include // For pair + +#include // For true_type and false_type + +namespace google { +namespace protobuf { +namespace internal { + +template struct is_integral; +template struct is_floating_point; +template struct is_pointer; +// MSVC can't compile this correctly, and neither can gcc 3.3.5 (at least) +#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3) +// is_enum uses is_convertible, which is not available on MSVC. +template struct is_enum; +#endif +template struct is_reference; +template struct is_pod; +template struct has_trivial_constructor; +template struct has_trivial_copy; +template struct has_trivial_assign; +template struct has_trivial_destructor; +template struct remove_const; +template struct remove_volatile; +template struct remove_cv; +template struct remove_reference; +template struct add_reference; +template struct remove_pointer; +template struct is_same; +#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3) +template struct is_convertible; +#endif + +// is_integral is false except for the built-in integer types. A +// cv-qualified type is integral if and only if the underlying type is. +template struct is_integral : false_type { }; +template<> struct is_integral : true_type { }; +template<> struct is_integral : true_type { }; +template<> struct is_integral : true_type { }; +template<> struct is_integral : true_type { }; +#if defined(_MSC_VER) +// wchar_t is not by default a distinct type from unsigned short in +// Microsoft C. +// See http://msdn2.microsoft.com/en-us/library/dh8che7s(VS.80).aspx +template<> struct is_integral<__wchar_t> : true_type { }; +#else +template<> struct is_integral : true_type { }; +#endif +template<> struct is_integral : true_type { }; +template<> struct is_integral : true_type { }; +template<> struct is_integral : true_type { }; +template<> struct is_integral : true_type { }; +template<> struct is_integral : true_type { }; +template<> struct is_integral : true_type { }; +#ifdef HAVE_LONG_LONG +template<> struct is_integral : true_type { }; +template<> struct is_integral : true_type { }; +#endif +template struct is_integral : is_integral { }; +template struct is_integral : is_integral { }; +template struct is_integral : is_integral { }; + +// is_floating_point is false except for the built-in floating-point types. +// A cv-qualified type is integral if and only if the underlying type is. +template struct is_floating_point : false_type { }; +template<> struct is_floating_point : true_type { }; +template<> struct is_floating_point : true_type { }; +template<> struct is_floating_point : true_type { }; +template struct is_floating_point + : is_floating_point { }; +template struct is_floating_point + : is_floating_point { }; +template struct is_floating_point + : is_floating_point { }; + +// is_pointer is false except for pointer types. A cv-qualified type (e.g. +// "int* const", as opposed to "int const*") is cv-qualified if and only if +// the underlying type is. +template struct is_pointer : false_type { }; +template struct is_pointer : true_type { }; +template struct is_pointer : is_pointer { }; +template struct is_pointer : is_pointer { }; +template struct is_pointer : is_pointer { }; + +#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3) + +namespace internal { + +template struct is_class_or_union { + template static small_ tester(void (U::*)()); + template static big_ tester(...); + static const bool value = sizeof(tester(0)) == sizeof(small_); +}; + +// is_convertible chokes if the first argument is an array. That's why +// we use add_reference here. +template struct is_enum_impl + : is_convertible::type, int> { }; + +template struct is_enum_impl : false_type { }; + +} // namespace internal + +// Specified by TR1 [4.5.1] primary type categories. + +// Implementation note: +// +// Each type is either void, integral, floating point, array, pointer, +// reference, member object pointer, member function pointer, enum, +// union or class. Out of these, only integral, floating point, reference, +// class and enum types are potentially convertible to int. Therefore, +// if a type is not a reference, integral, floating point or class and +// is convertible to int, it's a enum. Adding cv-qualification to a type +// does not change whether it's an enum. +// +// Is-convertible-to-int check is done only if all other checks pass, +// because it can't be used with some types (e.g. void or classes with +// inaccessible conversion operators). +template struct is_enum + : internal::is_enum_impl< + is_same::value || + is_integral::value || + is_floating_point::value || + is_reference::value || + internal::is_class_or_union::value, + T> { }; + +template struct is_enum : is_enum { }; +template struct is_enum : is_enum { }; +template struct is_enum : is_enum { }; + +#endif + +// is_reference is false except for reference types. +template struct is_reference : false_type {}; +template struct is_reference : true_type {}; + + +// We can't get is_pod right without compiler help, so fail conservatively. +// We will assume it's false except for arithmetic types, enumerations, +// pointers and cv-qualified versions thereof. Note that std::pair +// is not a POD even if T and U are PODs. +template struct is_pod + : integral_constant::value || + is_floating_point::value || +#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3) + // is_enum is not available on MSVC. + is_enum::value || +#endif + is_pointer::value)> { }; +template struct is_pod : is_pod { }; +template struct is_pod : is_pod { }; +template struct is_pod : is_pod { }; + + +// We can't get has_trivial_constructor right without compiler help, so +// fail conservatively. We will assume it's false except for: (1) types +// for which is_pod is true. (2) std::pair of types with trivial +// constructors. (3) array of a type with a trivial constructor. +// (4) const versions thereof. +template struct has_trivial_constructor : is_pod { }; +template struct has_trivial_constructor > + : integral_constant::value && + has_trivial_constructor::value)> { }; +template struct has_trivial_constructor + : has_trivial_constructor { }; +template struct has_trivial_constructor + : has_trivial_constructor { }; + +// We can't get has_trivial_copy right without compiler help, so fail +// conservatively. We will assume it's false except for: (1) types +// for which is_pod is true. (2) std::pair of types with trivial copy +// constructors. (3) array of a type with a trivial copy constructor. +// (4) const versions thereof. +template struct has_trivial_copy : is_pod { }; +template struct has_trivial_copy > + : integral_constant::value && + has_trivial_copy::value)> { }; +template struct has_trivial_copy + : has_trivial_copy { }; +template struct has_trivial_copy : has_trivial_copy { }; + +// We can't get has_trivial_assign right without compiler help, so fail +// conservatively. We will assume it's false except for: (1) types +// for which is_pod is true. (2) std::pair of types with trivial copy +// constructors. (3) array of a type with a trivial assign constructor. +template struct has_trivial_assign : is_pod { }; +template struct has_trivial_assign > + : integral_constant::value && + has_trivial_assign::value)> { }; +template struct has_trivial_assign + : has_trivial_assign { }; + +// We can't get has_trivial_destructor right without compiler help, so +// fail conservatively. We will assume it's false except for: (1) types +// for which is_pod is true. (2) std::pair of types with trivial +// destructors. (3) array of a type with a trivial destructor. +// (4) const versions thereof. +template struct has_trivial_destructor : is_pod { }; +template struct has_trivial_destructor > + : integral_constant::value && + has_trivial_destructor::value)> { }; +template struct has_trivial_destructor + : has_trivial_destructor { }; +template struct has_trivial_destructor + : has_trivial_destructor { }; + +// Specified by TR1 [4.7.1] +template struct remove_const { typedef T type; }; +template struct remove_const { typedef T type; }; +template struct remove_volatile { typedef T type; }; +template struct remove_volatile { typedef T type; }; +template struct remove_cv { + typedef typename remove_const::type>::type type; +}; + + +// Specified by TR1 [4.7.2] Reference modifications. +template struct remove_reference { typedef T type; }; +template struct remove_reference { typedef T type; }; + +template struct add_reference { typedef T& type; }; +template struct add_reference { typedef T& type; }; + +// Specified by TR1 [4.7.4] Pointer modifications. +template struct remove_pointer { typedef T type; }; +template struct remove_pointer { typedef T type; }; +template struct remove_pointer { typedef T type; }; +template struct remove_pointer { typedef T type; }; +template struct remove_pointer { + typedef T type; }; + +// Specified by TR1 [4.6] Relationships between types +template struct is_same : public false_type { }; +template struct is_same : public true_type { }; + +// Specified by TR1 [4.6] Relationships between types +#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3) +namespace internal { + +// This class is an implementation detail for is_convertible, and you +// don't need to know how it works to use is_convertible. For those +// who care: we declare two different functions, one whose argument is +// of type To and one with a variadic argument list. We give them +// return types of different size, so we can use sizeof to trick the +// compiler into telling us which function it would have chosen if we +// had called it with an argument of type From. See Alexandrescu's +// _Modern C++ Design_ for more details on this sort of trick. + +template +struct ConvertHelper { + static small_ Test(To); + static big_ Test(...); + static From Create(); +}; +} // namespace internal + +// Inherits from true_type if From is convertible to To, false_type otherwise. +template +struct is_convertible + : integral_constant::Test( + internal::ConvertHelper::Create())) + == sizeof(small_)> { +}; +#endif + +} // namespace internal +} // namespace protobuf +} // namespace google + +#endif // GOOGLE_PROTOBUF_TYPE_TRAITS_H_ diff --git a/kortex_gazebo/include/google/protobuf/text_format.h b/kortex_gazebo/include/google/protobuf/text_format.h new file mode 100644 index 00000000..29549410 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/text_format.h @@ -0,0 +1,473 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: jschorr@google.com (Joseph Schorr) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// Utilities for printing and parsing protocol messages in a human-readable, +// text-based format. + +#ifndef GOOGLE_PROTOBUF_TEXT_FORMAT_H__ +#define GOOGLE_PROTOBUF_TEXT_FORMAT_H__ + +#include +#include +#include +#include + +#include +#include +#include + +namespace google { +namespace protobuf { + +namespace io { + class ErrorCollector; // tokenizer.h +} + +// This class implements protocol buffer text format. Printing and parsing +// protocol messages in text format is useful for debugging and human editing +// of messages. +// +// This class is really a namespace that contains only static methods. +class LIBPROTOBUF_EXPORT TextFormat { + public: + // Outputs a textual representation of the given message to the given + // output stream. + static bool Print(const Message& message, io::ZeroCopyOutputStream* output); + + // Print the fields in an UnknownFieldSet. They are printed by tag number + // only. Embedded messages are heuristically identified by attempting to + // parse them. + static bool PrintUnknownFields(const UnknownFieldSet& unknown_fields, + io::ZeroCopyOutputStream* output); + + // Like Print(), but outputs directly to a string. + static bool PrintToString(const Message& message, string* output); + + // Like PrintUnknownFields(), but outputs directly to a string. + static bool PrintUnknownFieldsToString(const UnknownFieldSet& unknown_fields, + string* output); + + // Outputs a textual representation of the value of the field supplied on + // the message supplied. For non-repeated fields, an index of -1 must + // be supplied. Note that this method will print the default value for a + // field if it is not set. + static void PrintFieldValueToString(const Message& message, + const FieldDescriptor* field, + int index, + string* output); + + // The default printer that converts scalar values from fields into + // their string representation. + // You can derive from this FieldValuePrinter if you want to have + // fields to be printed in a different way and register it at the + // Printer. + class LIBPROTOBUF_EXPORT FieldValuePrinter { + public: + FieldValuePrinter(); + virtual ~FieldValuePrinter(); + virtual string PrintBool(bool val) const; + virtual string PrintInt32(int32 val) const; + virtual string PrintUInt32(uint32 val) const; + virtual string PrintInt64(int64 val) const; + virtual string PrintUInt64(uint64 val) const; + virtual string PrintFloat(float val) const; + virtual string PrintDouble(double val) const; + virtual string PrintString(const string& val) const; + virtual string PrintBytes(const string& val) const; + virtual string PrintEnum(int32 val, const string& name) const; + virtual string PrintFieldName(const Message& message, + const Reflection* reflection, + const FieldDescriptor* field) const; + virtual string PrintMessageStart(const Message& message, + int field_index, + int field_count, + bool single_line_mode) const; + virtual string PrintMessageEnd(const Message& message, + int field_index, + int field_count, + bool single_line_mode) const; + + private: + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FieldValuePrinter); + }; + + // Class for those users which require more fine-grained control over how + // a protobuffer message is printed out. + class LIBPROTOBUF_EXPORT Printer { + public: + Printer(); + ~Printer(); + + // Like TextFormat::Print + bool Print(const Message& message, io::ZeroCopyOutputStream* output) const; + // Like TextFormat::PrintUnknownFields + bool PrintUnknownFields(const UnknownFieldSet& unknown_fields, + io::ZeroCopyOutputStream* output) const; + // Like TextFormat::PrintToString + bool PrintToString(const Message& message, string* output) const; + // Like TextFormat::PrintUnknownFieldsToString + bool PrintUnknownFieldsToString(const UnknownFieldSet& unknown_fields, + string* output) const; + // Like TextFormat::PrintFieldValueToString + void PrintFieldValueToString(const Message& message, + const FieldDescriptor* field, + int index, + string* output) const; + + // Adjust the initial indent level of all output. Each indent level is + // equal to two spaces. + void SetInitialIndentLevel(int indent_level) { + initial_indent_level_ = indent_level; + } + + // If printing in single line mode, then the entire message will be output + // on a single line with no line breaks. + void SetSingleLineMode(bool single_line_mode) { + single_line_mode_ = single_line_mode; + } + + bool IsInSingleLineMode() { + return single_line_mode_; + } + + // If use_field_number is true, uses field number instead of field name. + void SetUseFieldNumber(bool use_field_number) { + use_field_number_ = use_field_number; + } + + // Set true to print repeated primitives in a format like: + // field_name: [1, 2, 3, 4] + // instead of printing each value on its own line. Short format applies + // only to primitive values -- i.e. everything except strings and + // sub-messages/groups. + void SetUseShortRepeatedPrimitives(bool use_short_repeated_primitives) { + use_short_repeated_primitives_ = use_short_repeated_primitives; + } + + // Set true to output UTF-8 instead of ASCII. The only difference + // is that bytes >= 0x80 in string fields will not be escaped, + // because they are assumed to be part of UTF-8 multi-byte + // sequences. This will change the default FieldValuePrinter. + void SetUseUtf8StringEscaping(bool as_utf8); + + // Set the default FieldValuePrinter that is used for all fields that + // don't have a field-specific printer registered. + // Takes ownership of the printer. + void SetDefaultFieldValuePrinter(const FieldValuePrinter* printer); + + // Sets whether we want to hide unknown fields or not. + // Usually unknown fields are printed in a generic way that includes the + // tag number of the field instead of field name. However, sometimes it + // is useful to be able to print the message without unknown fields (e.g. + // for the python protobuf version to maintain consistency between its pure + // python and c++ implementations). + void SetHideUnknownFields(bool hide) { + hide_unknown_fields_ = hide; + } + + // If print_message_fields_in_index_order is true, print fields of a proto + // message using the order defined in source code instead of the field + // number. By default, use the field number order. + void SetPrintMessageFieldsInIndexOrder( + bool print_message_fields_in_index_order) { + print_message_fields_in_index_order_ = + print_message_fields_in_index_order; + } + + // Register a custom field-specific FieldValuePrinter for fields + // with a particular FieldDescriptor. + // Returns "true" if the registration succeeded, or "false", if there is + // already a printer for that FieldDescriptor. + // Takes ownership of the printer on successful registration. + bool RegisterFieldValuePrinter(const FieldDescriptor* field, + const FieldValuePrinter* printer); + + private: + // Forward declaration of an internal class used to print the text + // output to the OutputStream (see text_format.cc for implementation). + class TextGenerator; + + // Internal Print method, used for writing to the OutputStream via + // the TextGenerator class. + void Print(const Message& message, + TextGenerator& generator) const; + + // Print a single field. + void PrintField(const Message& message, + const Reflection* reflection, + const FieldDescriptor* field, + TextGenerator& generator) const; + + // Print a repeated primitive field in short form. + void PrintShortRepeatedField(const Message& message, + const Reflection* reflection, + const FieldDescriptor* field, + TextGenerator& generator) const; + + // Print the name of a field -- i.e. everything that comes before the + // ':' for a single name/value pair. + void PrintFieldName(const Message& message, + const Reflection* reflection, + const FieldDescriptor* field, + TextGenerator& generator) const; + + // Outputs a textual representation of the value of the field supplied on + // the message supplied or the default value if not set. + void PrintFieldValue(const Message& message, + const Reflection* reflection, + const FieldDescriptor* field, + int index, + TextGenerator& generator) const; + + // Print the fields in an UnknownFieldSet. They are printed by tag number + // only. Embedded messages are heuristically identified by attempting to + // parse them. + void PrintUnknownFields(const UnknownFieldSet& unknown_fields, + TextGenerator& generator) const; + + int initial_indent_level_; + + bool single_line_mode_; + + bool use_field_number_; + + bool use_short_repeated_primitives_; + + bool hide_unknown_fields_; + + bool print_message_fields_in_index_order_; + + scoped_ptr default_field_value_printer_; + typedef map CustomPrinterMap; + CustomPrinterMap custom_printers_; + }; + + // Parses a text-format protocol message from the given input stream to + // the given message object. This function parses the format written + // by Print(). + static bool Parse(io::ZeroCopyInputStream* input, Message* output); + // Like Parse(), but reads directly from a string. + static bool ParseFromString(const string& input, Message* output); + + // Like Parse(), but the data is merged into the given message, as if + // using Message::MergeFrom(). + static bool Merge(io::ZeroCopyInputStream* input, Message* output); + // Like Merge(), but reads directly from a string. + static bool MergeFromString(const string& input, Message* output); + + // Parse the given text as a single field value and store it into the + // given field of the given message. If the field is a repeated field, + // the new value will be added to the end + static bool ParseFieldValueFromString(const string& input, + const FieldDescriptor* field, + Message* message); + + // Interface that TextFormat::Parser can use to find extensions. + // This class may be extended in the future to find more information + // like fields, etc. + class LIBPROTOBUF_EXPORT Finder { + public: + virtual ~Finder(); + + // Try to find an extension of *message by fully-qualified field + // name. Returns NULL if no extension is known for this name or number. + virtual const FieldDescriptor* FindExtension( + Message* message, + const string& name) const = 0; + }; + + // A location in the parsed text. + struct ParseLocation { + int line; + int column; + + ParseLocation() : line(-1), column(-1) {} + ParseLocation(int line_param, int column_param) + : line(line_param), column(column_param) {} + }; + + // Data structure which is populated with the locations of each field + // value parsed from the text. + class LIBPROTOBUF_EXPORT ParseInfoTree { + public: + ParseInfoTree(); + ~ParseInfoTree(); + + // Returns the parse location for index-th value of the field in the parsed + // text. If none exists, returns a location with line = -1. Index should be + // -1 for not-repeated fields. + ParseLocation GetLocation(const FieldDescriptor* field, int index) const; + + // Returns the parse info tree for the given field, which must be a message + // type. The nested information tree is owned by the root tree and will be + // deleted when it is deleted. + ParseInfoTree* GetTreeForNested(const FieldDescriptor* field, + int index) const; + + private: + // Allow the text format parser to record information into the tree. + friend class TextFormat; + + // Records the starting location of a single value for a field. + void RecordLocation(const FieldDescriptor* field, ParseLocation location); + + // Create and records a nested tree for a nested message field. + ParseInfoTree* CreateNested(const FieldDescriptor* field); + + // Defines the map from the index-th field descriptor to its parse location. + typedef map > LocationMap; + + // Defines the map from the index-th field descriptor to the nested parse + // info tree. + typedef map > NestedMap; + + LocationMap locations_; + NestedMap nested_; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ParseInfoTree); + }; + + // For more control over parsing, use this class. + class LIBPROTOBUF_EXPORT Parser { + public: + Parser(); + ~Parser(); + + // Like TextFormat::Parse(). + bool Parse(io::ZeroCopyInputStream* input, Message* output); + // Like TextFormat::ParseFromString(). + bool ParseFromString(const string& input, Message* output); + // Like TextFormat::Merge(). + bool Merge(io::ZeroCopyInputStream* input, Message* output); + // Like TextFormat::MergeFromString(). + bool MergeFromString(const string& input, Message* output); + + // Set where to report parse errors. If NULL (the default), errors will + // be printed to stderr. + void RecordErrorsTo(io::ErrorCollector* error_collector) { + error_collector_ = error_collector; + } + + // Set how parser finds extensions. If NULL (the default), the + // parser will use the standard Reflection object associated with + // the message being parsed. + void SetFinder(Finder* finder) { + finder_ = finder; + } + + // Sets where location information about the parse will be written. If NULL + // (the default), then no location will be written. + void WriteLocationsTo(ParseInfoTree* tree) { + parse_info_tree_ = tree; + } + + // Normally parsing fails if, after parsing, output->IsInitialized() + // returns false. Call AllowPartialMessage(true) to skip this check. + void AllowPartialMessage(bool allow) { + allow_partial_ = allow; + } + + // Allow field names to be matched case-insensitively. + // This is not advisable if there are fields that only differ in case, or + // if you want to enforce writing in the canonical form. + // This is 'false' by default. + void AllowCaseInsensitiveField(bool allow) { + allow_case_insensitive_field_ = allow; + } + + // Like TextFormat::ParseFieldValueFromString + bool ParseFieldValueFromString(const string& input, + const FieldDescriptor* field, + Message* output); + + + void AllowFieldNumber(bool allow) { + allow_field_number_ = allow; + } + + private: + // Forward declaration of an internal class used to parse text + // representations (see text_format.cc for implementation). + class ParserImpl; + + // Like TextFormat::Merge(). The provided implementation is used + // to do the parsing. + bool MergeUsingImpl(io::ZeroCopyInputStream* input, + Message* output, + ParserImpl* parser_impl); + + io::ErrorCollector* error_collector_; + Finder* finder_; + ParseInfoTree* parse_info_tree_; + bool allow_partial_; + bool allow_case_insensitive_field_; + bool allow_unknown_field_; + bool allow_unknown_enum_; + bool allow_field_number_; + bool allow_relaxed_whitespace_; + bool allow_singular_overwrites_; + }; + + + private: + // Hack: ParseInfoTree declares TextFormat as a friend which should extend + // the friendship to TextFormat::Parser::ParserImpl, but unfortunately some + // old compilers (e.g. GCC 3.4.6) don't implement this correctly. We provide + // helpers for ParserImpl to call methods of ParseInfoTree. + static inline void RecordLocation(ParseInfoTree* info_tree, + const FieldDescriptor* field, + ParseLocation location); + static inline ParseInfoTree* CreateNested(ParseInfoTree* info_tree, + const FieldDescriptor* field); + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(TextFormat); +}; + +inline void TextFormat::RecordLocation(ParseInfoTree* info_tree, + const FieldDescriptor* field, + ParseLocation location) { + info_tree->RecordLocation(field, location); +} + + +inline TextFormat::ParseInfoTree* TextFormat::CreateNested( + ParseInfoTree* info_tree, const FieldDescriptor* field) { + return info_tree->CreateNested(field); +} + +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_TEXT_FORMAT_H__ diff --git a/kortex_gazebo/include/google/protobuf/unknown_field_set.h b/kortex_gazebo/include/google/protobuf/unknown_field_set.h new file mode 100644 index 00000000..ba202eb6 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/unknown_field_set.h @@ -0,0 +1,318 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// Contains classes used to keep track of unrecognized fields seen while +// parsing a protocol message. + +#ifndef GOOGLE_PROTOBUF_UNKNOWN_FIELD_SET_H__ +#define GOOGLE_PROTOBUF_UNKNOWN_FIELD_SET_H__ + +#include +#include +#include +#include + +namespace google { +namespace protobuf { + namespace io { + class CodedInputStream; // coded_stream.h + class CodedOutputStream; // coded_stream.h + class ZeroCopyInputStream; // zero_copy_stream.h + } + namespace internal { + class WireFormat; // wire_format.h + class MessageSetFieldSkipperUsingCord; + // extension_set_heavy.cc + } + +class Message; // message.h +class UnknownField; // below + +// An UnknownFieldSet contains fields that were encountered while parsing a +// message but were not defined by its type. Keeping track of these can be +// useful, especially in that they may be written if the message is serialized +// again without being cleared in between. This means that software which +// simply receives messages and forwards them to other servers does not need +// to be updated every time a new field is added to the message definition. +// +// To get the UnknownFieldSet attached to any message, call +// Reflection::GetUnknownFields(). +// +// This class is necessarily tied to the protocol buffer wire format, unlike +// the Reflection interface which is independent of any serialization scheme. +class LIBPROTOBUF_EXPORT UnknownFieldSet { + public: + UnknownFieldSet(); + ~UnknownFieldSet(); + + // Remove all fields. + inline void Clear(); + + // Remove all fields and deallocate internal data objects + void ClearAndFreeMemory(); + + // Is this set empty? + inline bool empty() const; + + // Merge the contents of some other UnknownFieldSet with this one. + void MergeFrom(const UnknownFieldSet& other); + + // Swaps the contents of some other UnknownFieldSet with this one. + inline void Swap(UnknownFieldSet* x); + + // Computes (an estimate of) the total number of bytes currently used for + // storing the unknown fields in memory. Does NOT include + // sizeof(*this) in the calculation. + int SpaceUsedExcludingSelf() const; + + // Version of SpaceUsed() including sizeof(*this). + int SpaceUsed() const; + + // Returns the number of fields present in the UnknownFieldSet. + inline int field_count() const; + // Get a field in the set, where 0 <= index < field_count(). The fields + // appear in the order in which they were added. + inline const UnknownField& field(int index) const; + // Get a mutable pointer to a field in the set, where + // 0 <= index < field_count(). The fields appear in the order in which + // they were added. + inline UnknownField* mutable_field(int index); + + // Adding fields --------------------------------------------------- + + void AddVarint(int number, uint64 value); + void AddFixed32(int number, uint32 value); + void AddFixed64(int number, uint64 value); + void AddLengthDelimited(int number, const string& value); + string* AddLengthDelimited(int number); + UnknownFieldSet* AddGroup(int number); + + // Adds an unknown field from another set. + void AddField(const UnknownField& field); + + // Delete fields with indices in the range [start .. start+num-1]. + // Caution: implementation moves all fields with indices [start+num .. ]. + void DeleteSubrange(int start, int num); + + // Delete all fields with a specific field number. The order of left fields + // is preserved. + // Caution: implementation moves all fields after the first deleted field. + void DeleteByNumber(int number); + + // Parsing helpers ------------------------------------------------- + // These work exactly like the similarly-named methods of Message. + + bool MergeFromCodedStream(io::CodedInputStream* input); + bool ParseFromCodedStream(io::CodedInputStream* input); + bool ParseFromZeroCopyStream(io::ZeroCopyInputStream* input); + bool ParseFromArray(const void* data, int size); + inline bool ParseFromString(const string& data) { + return ParseFromArray(data.data(), static_cast(data.size())); + } + + private: + + void ClearFallback(); + + vector* fields_; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(UnknownFieldSet); +}; + +// Represents one field in an UnknownFieldSet. +class LIBPROTOBUF_EXPORT UnknownField { + public: + enum Type { + TYPE_VARINT, + TYPE_FIXED32, + TYPE_FIXED64, + TYPE_LENGTH_DELIMITED, + TYPE_GROUP + }; + + // The field's tag number, as seen on the wire. + inline int number() const; + + // The field type. + inline Type type() const; + + // Accessors ------------------------------------------------------- + // Each method works only for UnknownFields of the corresponding type. + + inline uint64 varint() const; + inline uint32 fixed32() const; + inline uint64 fixed64() const; + inline const string& length_delimited() const; + inline const UnknownFieldSet& group() const; + + inline void set_varint(uint64 value); + inline void set_fixed32(uint32 value); + inline void set_fixed64(uint64 value); + inline void set_length_delimited(const string& value); + inline string* mutable_length_delimited(); + inline UnknownFieldSet* mutable_group(); + + // Serialization API. + // These methods can take advantage of the underlying implementation and may + // archieve a better performance than using getters to retrieve the data and + // do the serialization yourself. + void SerializeLengthDelimitedNoTag(io::CodedOutputStream* output) const; + uint8* SerializeLengthDelimitedNoTagToArray(uint8* target) const; + + inline int GetLengthDelimitedSize() const; + + private: + friend class UnknownFieldSet; + + // If this UnknownField contains a pointer, delete it. + void Delete(); + + // Make a deep copy of any pointers in this UnknownField. + void DeepCopy(); + + // Set the wire type of this UnknownField. Should only be used when this + // UnknownField is being created. + inline void SetType(Type type); + + uint32 number_; + uint32 type_; + union { + uint64 varint_; + uint32 fixed32_; + uint64 fixed64_; + mutable union { + string* string_value_; + } length_delimited_; + UnknownFieldSet* group_; + }; +}; + +// =================================================================== +// inline implementations + +inline void UnknownFieldSet::Clear() { + if (fields_ != NULL) { + ClearFallback(); + } +} + +inline bool UnknownFieldSet::empty() const { + return fields_ == NULL || fields_->empty(); +} + +inline void UnknownFieldSet::Swap(UnknownFieldSet* x) { + std::swap(fields_, x->fields_); +} + +inline int UnknownFieldSet::field_count() const { + return (fields_ == NULL) ? 0 : static_cast(fields_->size()); +} +inline const UnknownField& UnknownFieldSet::field(int index) const { + return (*fields_)[index]; +} +inline UnknownField* UnknownFieldSet::mutable_field(int index) { + return &(*fields_)[index]; +} + +inline void UnknownFieldSet::AddLengthDelimited( + int number, const string& value) { + AddLengthDelimited(number)->assign(value); +} + + +inline int UnknownField::number() const { return number_; } +inline UnknownField::Type UnknownField::type() const { + return static_cast(type_); +} + +inline uint64 UnknownField::varint() const { + assert(type() == TYPE_VARINT); + return varint_; +} +inline uint32 UnknownField::fixed32() const { + assert(type() == TYPE_FIXED32); + return fixed32_; +} +inline uint64 UnknownField::fixed64() const { + assert(type() == TYPE_FIXED64); + return fixed64_; +} +inline const string& UnknownField::length_delimited() const { + assert(type() == TYPE_LENGTH_DELIMITED); + return *length_delimited_.string_value_; +} +inline const UnknownFieldSet& UnknownField::group() const { + assert(type() == TYPE_GROUP); + return *group_; +} + +inline void UnknownField::set_varint(uint64 value) { + assert(type() == TYPE_VARINT); + varint_ = value; +} +inline void UnknownField::set_fixed32(uint32 value) { + assert(type() == TYPE_FIXED32); + fixed32_ = value; +} +inline void UnknownField::set_fixed64(uint64 value) { + assert(type() == TYPE_FIXED64); + fixed64_ = value; +} +inline void UnknownField::set_length_delimited(const string& value) { + assert(type() == TYPE_LENGTH_DELIMITED); + length_delimited_.string_value_->assign(value); +} +inline string* UnknownField::mutable_length_delimited() { + assert(type() == TYPE_LENGTH_DELIMITED); + return length_delimited_.string_value_; +} +inline UnknownFieldSet* UnknownField::mutable_group() { + assert(type() == TYPE_GROUP); + return group_; +} + +inline int UnknownField::GetLengthDelimitedSize() const { + GOOGLE_DCHECK_EQ(TYPE_LENGTH_DELIMITED, type()); + return static_cast(length_delimited_.string_value_->size()); +} + +inline void UnknownField::SetType(Type type) { + type_ = type; +} + + +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_UNKNOWN_FIELD_SET_H__ diff --git a/kortex_gazebo/include/google/protobuf/wire_format.h b/kortex_gazebo/include/google/protobuf/wire_format.h new file mode 100644 index 00000000..9f26eb29 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/wire_format.h @@ -0,0 +1,336 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// atenasio@google.com (Chris Atenasio) (ZigZag transform) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// This header is logically internal, but is made public because it is used +// from protocol-compiler-generated code, which may reside in other components. + +#ifndef GOOGLE_PROTOBUF_WIRE_FORMAT_H__ +#define GOOGLE_PROTOBUF_WIRE_FORMAT_H__ + +#include +#include +#include +#include +#include +#include + +// Do UTF-8 validation on string type in Debug build only +#ifndef NDEBUG +#define GOOGLE_PROTOBUF_UTF8_VALIDATION_ENABLED +#endif + +namespace google { +namespace protobuf { + namespace io { + class CodedInputStream; // coded_stream.h + class CodedOutputStream; // coded_stream.h + } + class UnknownFieldSet; // unknown_field_set.h +} + +namespace protobuf { +namespace internal { + +// This class is for internal use by the protocol buffer library and by +// protocol-complier-generated message classes. It must not be called +// directly by clients. +// +// This class contains code for implementing the binary protocol buffer +// wire format via reflection. The WireFormatLite class implements the +// non-reflection based routines. +// +// This class is really a namespace that contains only static methods +class LIBPROTOBUF_EXPORT WireFormat { + public: + + // Given a field return its WireType + static inline WireFormatLite::WireType WireTypeForField( + const FieldDescriptor* field); + + // Given a FieldDescriptor::Type return its WireType + static inline WireFormatLite::WireType WireTypeForFieldType( + FieldDescriptor::Type type); + + // Compute the byte size of a tag. For groups, this includes both the start + // and end tags. + static inline int TagSize(int field_number, FieldDescriptor::Type type); + + // These procedures can be used to implement the methods of Message which + // handle parsing and serialization of the protocol buffer wire format + // using only the Reflection interface. When you ask the protocol + // compiler to optimize for code size rather than speed, it will implement + // those methods in terms of these procedures. Of course, these are much + // slower than the specialized implementations which the protocol compiler + // generates when told to optimize for speed. + + // Read a message in protocol buffer wire format. + // + // This procedure reads either to the end of the input stream or through + // a WIRETYPE_END_GROUP tag ending the message, whichever comes first. + // It returns false if the input is invalid. + // + // Required fields are NOT checked by this method. You must call + // IsInitialized() on the resulting message yourself. + static bool ParseAndMergePartial(io::CodedInputStream* input, + Message* message); + + // Serialize a message in protocol buffer wire format. + // + // Any embedded messages within the message must have their correct sizes + // cached. However, the top-level message need not; its size is passed as + // a parameter to this procedure. + // + // These return false iff the underlying stream returns a write error. + static void SerializeWithCachedSizes( + const Message& message, + int size, io::CodedOutputStream* output); + + // Implements Message::ByteSize() via reflection. WARNING: The result + // of this method is *not* cached anywhere. However, all embedded messages + // will have their ByteSize() methods called, so their sizes will be cached. + // Therefore, calling this method is sufficient to allow you to call + // WireFormat::SerializeWithCachedSizes() on the same object. + static int ByteSize(const Message& message); + + // ----------------------------------------------------------------- + // Helpers for dealing with unknown fields + + // Skips a field value of the given WireType. The input should start + // positioned immediately after the tag. If unknown_fields is non-NULL, + // the contents of the field will be added to it. + static bool SkipField(io::CodedInputStream* input, uint32 tag, + UnknownFieldSet* unknown_fields); + + // Reads and ignores a message from the input. If unknown_fields is non-NULL, + // the contents will be added to it. + static bool SkipMessage(io::CodedInputStream* input, + UnknownFieldSet* unknown_fields); + + // Write the contents of an UnknownFieldSet to the output. + static void SerializeUnknownFields(const UnknownFieldSet& unknown_fields, + io::CodedOutputStream* output); + // Same as above, except writing directly to the provided buffer. + // Requires that the buffer have sufficient capacity for + // ComputeUnknownFieldsSize(unknown_fields). + // + // Returns a pointer past the last written byte. + static uint8* SerializeUnknownFieldsToArray( + const UnknownFieldSet& unknown_fields, + uint8* target); + + // Same thing except for messages that have the message_set_wire_format + // option. + static void SerializeUnknownMessageSetItems( + const UnknownFieldSet& unknown_fields, + io::CodedOutputStream* output); + // Same as above, except writing directly to the provided buffer. + // Requires that the buffer have sufficient capacity for + // ComputeUnknownMessageSetItemsSize(unknown_fields). + // + // Returns a pointer past the last written byte. + static uint8* SerializeUnknownMessageSetItemsToArray( + const UnknownFieldSet& unknown_fields, + uint8* target); + + // Compute the size of the UnknownFieldSet on the wire. + static int ComputeUnknownFieldsSize(const UnknownFieldSet& unknown_fields); + + // Same thing except for messages that have the message_set_wire_format + // option. + static int ComputeUnknownMessageSetItemsSize( + const UnknownFieldSet& unknown_fields); + + + // Helper functions for encoding and decoding tags. (Inlined below and in + // _inl.h) + // + // This is different from MakeTag(field->number(), field->type()) in the case + // of packed repeated fields. + static uint32 MakeTag(const FieldDescriptor* field); + + // Parse a single field. The input should start out positioned immediately + // after the tag. + static bool ParseAndMergeField( + uint32 tag, + const FieldDescriptor* field, // May be NULL for unknown + Message* message, + io::CodedInputStream* input); + + // Serialize a single field. + static void SerializeFieldWithCachedSizes( + const FieldDescriptor* field, // Cannot be NULL + const Message& message, + io::CodedOutputStream* output); + + // Compute size of a single field. If the field is a message type, this + // will call ByteSize() for the embedded message, insuring that it caches + // its size. + static int FieldByteSize( + const FieldDescriptor* field, // Cannot be NULL + const Message& message); + + // Parse/serialize a MessageSet::Item group. Used with messages that use + // opion message_set_wire_format = true. + static bool ParseAndMergeMessageSetItem( + io::CodedInputStream* input, + Message* message); + static void SerializeMessageSetItemWithCachedSizes( + const FieldDescriptor* field, + const Message& message, + io::CodedOutputStream* output); + static int MessageSetItemByteSize( + const FieldDescriptor* field, + const Message& message); + + // Computes the byte size of a field, excluding tags. For packed fields, it + // only includes the size of the raw data, and not the size of the total + // length, but for other length-delimited types, the size of the length is + // included. + static int FieldDataOnlyByteSize( + const FieldDescriptor* field, // Cannot be NULL + const Message& message); + + enum Operation { + PARSE, + SERIALIZE, + }; + + // Verifies that a string field is valid UTF8, logging an error if not. + // This function will not be called by newly generated protobuf code + // but remains present to support existing code. + static void VerifyUTF8String(const char* data, int size, Operation op); + // The NamedField variant takes a field name in order to produce an + // informative error message if verification fails. + static void VerifyUTF8StringNamedField(const char* data, + int size, + Operation op, + const char* field_name); + + private: + // Verifies that a string field is valid UTF8, logging an error if not. + static void VerifyUTF8StringFallback( + const char* data, + int size, + Operation op, + const char* field_name); + + // Skip a MessageSet field. + static bool SkipMessageSetField(io::CodedInputStream* input, + uint32 field_number, + UnknownFieldSet* unknown_fields); + + // Parse a MessageSet field. + static bool ParseAndMergeMessageSetField(uint32 field_number, + const FieldDescriptor* field, + Message* message, + io::CodedInputStream* input); + + + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(WireFormat); +}; + +// Subclass of FieldSkipper which saves skipped fields to an UnknownFieldSet. +class LIBPROTOBUF_EXPORT UnknownFieldSetFieldSkipper : public FieldSkipper { + public: + UnknownFieldSetFieldSkipper(UnknownFieldSet* unknown_fields) + : unknown_fields_(unknown_fields) {} + virtual ~UnknownFieldSetFieldSkipper() {} + + // implements FieldSkipper ----------------------------------------- + virtual bool SkipField(io::CodedInputStream* input, uint32 tag); + virtual bool SkipMessage(io::CodedInputStream* input); + virtual void SkipUnknownEnum(int field_number, int value); + + protected: + UnknownFieldSet* unknown_fields_; +}; + +// inline methods ==================================================== + +inline WireFormatLite::WireType WireFormat::WireTypeForField( + const FieldDescriptor* field) { + if (field->options().packed()) { + return WireFormatLite::WIRETYPE_LENGTH_DELIMITED; + } else { + return WireTypeForFieldType(field->type()); + } +} + +inline WireFormatLite::WireType WireFormat::WireTypeForFieldType( + FieldDescriptor::Type type) { + // Some compilers don't like enum -> enum casts, so we implicit_cast to + // int first. + return WireFormatLite::WireTypeForFieldType( + static_cast( + implicit_cast(type))); +} + +inline uint32 WireFormat::MakeTag(const FieldDescriptor* field) { + return WireFormatLite::MakeTag(field->number(), WireTypeForField(field)); +} + +inline int WireFormat::TagSize(int field_number, FieldDescriptor::Type type) { + // Some compilers don't like enum -> enum casts, so we implicit_cast to + // int first. + return WireFormatLite::TagSize(field_number, + static_cast( + implicit_cast(type))); +} + +inline void WireFormat::VerifyUTF8String(const char* data, int size, + WireFormat::Operation op) { +#ifdef GOOGLE_PROTOBUF_UTF8_VALIDATION_ENABLED + WireFormat::VerifyUTF8StringFallback(data, size, op, NULL); +#else + // Avoid the compiler warning about unsued variables. + (void)data; (void)size; (void)op; +#endif +} + +inline void WireFormat::VerifyUTF8StringNamedField( + const char* data, int size, WireFormat::Operation op, + const char* field_name) { +#ifdef GOOGLE_PROTOBUF_UTF8_VALIDATION_ENABLED + WireFormat::VerifyUTF8StringFallback(data, size, op, field_name); +#endif +} + + +} // namespace internal +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_WIRE_FORMAT_H__ diff --git a/kortex_gazebo/include/google/protobuf/wire_format_lite.h b/kortex_gazebo/include/google/protobuf/wire_format_lite.h new file mode 100644 index 00000000..21aa4889 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/wire_format_lite.h @@ -0,0 +1,661 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// atenasio@google.com (Chris Atenasio) (ZigZag transform) +// wink@google.com (Wink Saville) (refactored from wire_format.h) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// This header is logically internal, but is made public because it is used +// from protocol-compiler-generated code, which may reside in other components. + +#ifndef GOOGLE_PROTOBUF_WIRE_FORMAT_LITE_H__ +#define GOOGLE_PROTOBUF_WIRE_FORMAT_LITE_H__ + +#include +#include +#include +#include // for CodedOutputStream::Varint32Size + +namespace google { + +namespace protobuf { + template class RepeatedField; // repeated_field.h +} + +namespace protobuf { +namespace internal { + +class StringPieceField; + +// This class is for internal use by the protocol buffer library and by +// protocol-complier-generated message classes. It must not be called +// directly by clients. +// +// This class contains helpers for implementing the binary protocol buffer +// wire format without the need for reflection. Use WireFormat when using +// reflection. +// +// This class is really a namespace that contains only static methods. +class LIBPROTOBUF_EXPORT WireFormatLite { + public: + + // ----------------------------------------------------------------- + // Helper constants and functions related to the format. These are + // mostly meant for internal and generated code to use. + + // The wire format is composed of a sequence of tag/value pairs, each + // of which contains the value of one field (or one element of a repeated + // field). Each tag is encoded as a varint. The lower bits of the tag + // identify its wire type, which specifies the format of the data to follow. + // The rest of the bits contain the field number. Each type of field (as + // declared by FieldDescriptor::Type, in descriptor.h) maps to one of + // these wire types. Immediately following each tag is the field's value, + // encoded in the format specified by the wire type. Because the tag + // identifies the encoding of this data, it is possible to skip + // unrecognized fields for forwards compatibility. + + enum WireType { + WIRETYPE_VARINT = 0, + WIRETYPE_FIXED64 = 1, + WIRETYPE_LENGTH_DELIMITED = 2, + WIRETYPE_START_GROUP = 3, + WIRETYPE_END_GROUP = 4, + WIRETYPE_FIXED32 = 5, + }; + + // Lite alternative to FieldDescriptor::Type. Must be kept in sync. + enum FieldType { + TYPE_DOUBLE = 1, + TYPE_FLOAT = 2, + TYPE_INT64 = 3, + TYPE_UINT64 = 4, + TYPE_INT32 = 5, + TYPE_FIXED64 = 6, + TYPE_FIXED32 = 7, + TYPE_BOOL = 8, + TYPE_STRING = 9, + TYPE_GROUP = 10, + TYPE_MESSAGE = 11, + TYPE_BYTES = 12, + TYPE_UINT32 = 13, + TYPE_ENUM = 14, + TYPE_SFIXED32 = 15, + TYPE_SFIXED64 = 16, + TYPE_SINT32 = 17, + TYPE_SINT64 = 18, + MAX_FIELD_TYPE = 18, + }; + + // Lite alternative to FieldDescriptor::CppType. Must be kept in sync. + enum CppType { + CPPTYPE_INT32 = 1, + CPPTYPE_INT64 = 2, + CPPTYPE_UINT32 = 3, + CPPTYPE_UINT64 = 4, + CPPTYPE_DOUBLE = 5, + CPPTYPE_FLOAT = 6, + CPPTYPE_BOOL = 7, + CPPTYPE_ENUM = 8, + CPPTYPE_STRING = 9, + CPPTYPE_MESSAGE = 10, + MAX_CPPTYPE = 10, + }; + + // Helper method to get the CppType for a particular Type. + static CppType FieldTypeToCppType(FieldType type); + + // Given a FieldSescriptor::Type return its WireType + static inline WireFormatLite::WireType WireTypeForFieldType( + WireFormatLite::FieldType type) { + return kWireTypeForFieldType[type]; + } + + // Number of bits in a tag which identify the wire type. + static const int kTagTypeBits = 3; + // Mask for those bits. + static const uint32 kTagTypeMask = (1 << kTagTypeBits) - 1; + + // Helper functions for encoding and decoding tags. (Inlined below and in + // _inl.h) + // + // This is different from MakeTag(field->number(), field->type()) in the case + // of packed repeated fields. + static uint32 MakeTag(int field_number, WireType type); + static WireType GetTagWireType(uint32 tag); + static int GetTagFieldNumber(uint32 tag); + + // Compute the byte size of a tag. For groups, this includes both the start + // and end tags. + static inline int TagSize(int field_number, WireFormatLite::FieldType type); + + // Skips a field value with the given tag. The input should start + // positioned immediately after the tag. Skipped values are simply discarded, + // not recorded anywhere. See WireFormat::SkipField() for a version that + // records to an UnknownFieldSet. + static bool SkipField(io::CodedInputStream* input, uint32 tag); + + // Skips a field value with the given tag. The input should start + // positioned immediately after the tag. Skipped values are recorded to a + // CodedOutputStream. + static bool SkipField(io::CodedInputStream* input, uint32 tag, + io::CodedOutputStream* output); + + // Reads and ignores a message from the input. Skipped values are simply + // discarded, not recorded anywhere. See WireFormat::SkipMessage() for a + // version that records to an UnknownFieldSet. + static bool SkipMessage(io::CodedInputStream* input); + + // Reads and ignores a message from the input. Skipped values are recorded + // to a CodedOutputStream. + static bool SkipMessage(io::CodedInputStream* input, + io::CodedOutputStream* output); + +// This macro does the same thing as WireFormatLite::MakeTag(), but the +// result is usable as a compile-time constant, which makes it usable +// as a switch case or a template input. WireFormatLite::MakeTag() is more +// type-safe, though, so prefer it if possible. +#define GOOGLE_PROTOBUF_WIRE_FORMAT_MAKE_TAG(FIELD_NUMBER, TYPE) \ + static_cast( \ + ((FIELD_NUMBER) << ::google::protobuf::internal::WireFormatLite::kTagTypeBits) \ + | (TYPE)) + + // These are the tags for the old MessageSet format, which was defined as: + // message MessageSet { + // repeated group Item = 1 { + // required int32 type_id = 2; + // required string message = 3; + // } + // } + static const int kMessageSetItemNumber = 1; + static const int kMessageSetTypeIdNumber = 2; + static const int kMessageSetMessageNumber = 3; + static const int kMessageSetItemStartTag = + GOOGLE_PROTOBUF_WIRE_FORMAT_MAKE_TAG(kMessageSetItemNumber, + WireFormatLite::WIRETYPE_START_GROUP); + static const int kMessageSetItemEndTag = + GOOGLE_PROTOBUF_WIRE_FORMAT_MAKE_TAG(kMessageSetItemNumber, + WireFormatLite::WIRETYPE_END_GROUP); + static const int kMessageSetTypeIdTag = + GOOGLE_PROTOBUF_WIRE_FORMAT_MAKE_TAG(kMessageSetTypeIdNumber, + WireFormatLite::WIRETYPE_VARINT); + static const int kMessageSetMessageTag = + GOOGLE_PROTOBUF_WIRE_FORMAT_MAKE_TAG(kMessageSetMessageNumber, + WireFormatLite::WIRETYPE_LENGTH_DELIMITED); + + // Byte size of all tags of a MessageSet::Item combined. + static const int kMessageSetItemTagsSize; + + // Helper functions for converting between floats/doubles and IEEE-754 + // uint32s/uint64s so that they can be written. (Assumes your platform + // uses IEEE-754 floats.) + static uint32 EncodeFloat(float value); + static float DecodeFloat(uint32 value); + static uint64 EncodeDouble(double value); + static double DecodeDouble(uint64 value); + + // Helper functions for mapping signed integers to unsigned integers in + // such a way that numbers with small magnitudes will encode to smaller + // varints. If you simply static_cast a negative number to an unsigned + // number and varint-encode it, it will always take 10 bytes, defeating + // the purpose of varint. So, for the "sint32" and "sint64" field types, + // we ZigZag-encode the values. + static uint32 ZigZagEncode32(int32 n); + static int32 ZigZagDecode32(uint32 n); + static uint64 ZigZagEncode64(int64 n); + static int64 ZigZagDecode64(uint64 n); + + // ================================================================= + // Methods for reading/writing individual field. The implementations + // of these methods are defined in wire_format_lite_inl.h; you must #include + // that file to use these. + +// Avoid ugly line wrapping +#define input io::CodedInputStream* input_arg +#define output io::CodedOutputStream* output_arg +#define field_number int field_number_arg +#define INL GOOGLE_ATTRIBUTE_ALWAYS_INLINE + + // Read fields, not including tags. The assumption is that you already + // read the tag to determine what field to read. + + // For primitive fields, we just use a templatized routine parameterized by + // the represented type and the FieldType. These are specialized with the + // appropriate definition for each declared type. + template + static inline bool ReadPrimitive(input, CType* value) INL; + + // Reads repeated primitive values, with optimizations for repeats. + // tag_size and tag should both be compile-time constants provided by the + // protocol compiler. + template + static inline bool ReadRepeatedPrimitive(int tag_size, + uint32 tag, + input, + RepeatedField* value) INL; + + // Identical to ReadRepeatedPrimitive, except will not inline the + // implementation. + template + static bool ReadRepeatedPrimitiveNoInline(int tag_size, + uint32 tag, + input, + RepeatedField* value); + + // Reads a primitive value directly from the provided buffer. It returns a + // pointer past the segment of data that was read. + // + // This is only implemented for the types with fixed wire size, e.g. + // float, double, and the (s)fixed* types. + template + static inline const uint8* ReadPrimitiveFromArray(const uint8* buffer, + CType* value) INL; + + // Reads a primitive packed field. + // + // This is only implemented for packable types. + template + static inline bool ReadPackedPrimitive(input, + RepeatedField* value) INL; + + // Identical to ReadPackedPrimitive, except will not inline the + // implementation. + template + static bool ReadPackedPrimitiveNoInline(input, RepeatedField* value); + + // Read a packed enum field. Values for which is_valid() returns false are + // dropped. + static bool ReadPackedEnumNoInline(input, + bool (*is_valid)(int), + RepeatedField* value); + + static bool ReadString(input, string* value); + static bool ReadBytes (input, string* value); + + static inline bool ReadGroup (field_number, input, MessageLite* value); + static inline bool ReadMessage(input, MessageLite* value); + + // Like above, but de-virtualize the call to MergePartialFromCodedStream(). + // The pointer must point at an instance of MessageType, *not* a subclass (or + // the subclass must not override MergePartialFromCodedStream()). + template + static inline bool ReadGroupNoVirtual(field_number, input, + MessageType* value); + template + static inline bool ReadMessageNoVirtual(input, MessageType* value); + + // Write a tag. The Write*() functions typically include the tag, so + // normally there's no need to call this unless using the Write*NoTag() + // variants. + static inline void WriteTag(field_number, WireType type, output) INL; + + // Write fields, without tags. + static inline void WriteInt32NoTag (int32 value, output) INL; + static inline void WriteInt64NoTag (int64 value, output) INL; + static inline void WriteUInt32NoTag (uint32 value, output) INL; + static inline void WriteUInt64NoTag (uint64 value, output) INL; + static inline void WriteSInt32NoTag (int32 value, output) INL; + static inline void WriteSInt64NoTag (int64 value, output) INL; + static inline void WriteFixed32NoTag (uint32 value, output) INL; + static inline void WriteFixed64NoTag (uint64 value, output) INL; + static inline void WriteSFixed32NoTag(int32 value, output) INL; + static inline void WriteSFixed64NoTag(int64 value, output) INL; + static inline void WriteFloatNoTag (float value, output) INL; + static inline void WriteDoubleNoTag (double value, output) INL; + static inline void WriteBoolNoTag (bool value, output) INL; + static inline void WriteEnumNoTag (int value, output) INL; + + // Write fields, including tags. + static void WriteInt32 (field_number, int32 value, output); + static void WriteInt64 (field_number, int64 value, output); + static void WriteUInt32 (field_number, uint32 value, output); + static void WriteUInt64 (field_number, uint64 value, output); + static void WriteSInt32 (field_number, int32 value, output); + static void WriteSInt64 (field_number, int64 value, output); + static void WriteFixed32 (field_number, uint32 value, output); + static void WriteFixed64 (field_number, uint64 value, output); + static void WriteSFixed32(field_number, int32 value, output); + static void WriteSFixed64(field_number, int64 value, output); + static void WriteFloat (field_number, float value, output); + static void WriteDouble (field_number, double value, output); + static void WriteBool (field_number, bool value, output); + static void WriteEnum (field_number, int value, output); + + static void WriteString(field_number, const string& value, output); + static void WriteBytes (field_number, const string& value, output); + static void WriteStringMaybeAliased( + field_number, const string& value, output); + static void WriteBytesMaybeAliased( + field_number, const string& value, output); + + static void WriteGroup( + field_number, const MessageLite& value, output); + static void WriteMessage( + field_number, const MessageLite& value, output); + // Like above, but these will check if the output stream has enough + // space to write directly to a flat array. + static void WriteGroupMaybeToArray( + field_number, const MessageLite& value, output); + static void WriteMessageMaybeToArray( + field_number, const MessageLite& value, output); + + // Like above, but de-virtualize the call to SerializeWithCachedSizes(). The + // pointer must point at an instance of MessageType, *not* a subclass (or + // the subclass must not override SerializeWithCachedSizes()). + template + static inline void WriteGroupNoVirtual( + field_number, const MessageType& value, output); + template + static inline void WriteMessageNoVirtual( + field_number, const MessageType& value, output); + +#undef output +#define output uint8* target + + // Like above, but use only *ToArray methods of CodedOutputStream. + static inline uint8* WriteTagToArray(field_number, WireType type, output) INL; + + // Write fields, without tags. + static inline uint8* WriteInt32NoTagToArray (int32 value, output) INL; + static inline uint8* WriteInt64NoTagToArray (int64 value, output) INL; + static inline uint8* WriteUInt32NoTagToArray (uint32 value, output) INL; + static inline uint8* WriteUInt64NoTagToArray (uint64 value, output) INL; + static inline uint8* WriteSInt32NoTagToArray (int32 value, output) INL; + static inline uint8* WriteSInt64NoTagToArray (int64 value, output) INL; + static inline uint8* WriteFixed32NoTagToArray (uint32 value, output) INL; + static inline uint8* WriteFixed64NoTagToArray (uint64 value, output) INL; + static inline uint8* WriteSFixed32NoTagToArray(int32 value, output) INL; + static inline uint8* WriteSFixed64NoTagToArray(int64 value, output) INL; + static inline uint8* WriteFloatNoTagToArray (float value, output) INL; + static inline uint8* WriteDoubleNoTagToArray (double value, output) INL; + static inline uint8* WriteBoolNoTagToArray (bool value, output) INL; + static inline uint8* WriteEnumNoTagToArray (int value, output) INL; + + // Write fields, including tags. + static inline uint8* WriteInt32ToArray( + field_number, int32 value, output) INL; + static inline uint8* WriteInt64ToArray( + field_number, int64 value, output) INL; + static inline uint8* WriteUInt32ToArray( + field_number, uint32 value, output) INL; + static inline uint8* WriteUInt64ToArray( + field_number, uint64 value, output) INL; + static inline uint8* WriteSInt32ToArray( + field_number, int32 value, output) INL; + static inline uint8* WriteSInt64ToArray( + field_number, int64 value, output) INL; + static inline uint8* WriteFixed32ToArray( + field_number, uint32 value, output) INL; + static inline uint8* WriteFixed64ToArray( + field_number, uint64 value, output) INL; + static inline uint8* WriteSFixed32ToArray( + field_number, int32 value, output) INL; + static inline uint8* WriteSFixed64ToArray( + field_number, int64 value, output) INL; + static inline uint8* WriteFloatToArray( + field_number, float value, output) INL; + static inline uint8* WriteDoubleToArray( + field_number, double value, output) INL; + static inline uint8* WriteBoolToArray( + field_number, bool value, output) INL; + static inline uint8* WriteEnumToArray( + field_number, int value, output) INL; + + static inline uint8* WriteStringToArray( + field_number, const string& value, output) INL; + static inline uint8* WriteBytesToArray( + field_number, const string& value, output) INL; + + static inline uint8* WriteGroupToArray( + field_number, const MessageLite& value, output) INL; + static inline uint8* WriteMessageToArray( + field_number, const MessageLite& value, output) INL; + + // Like above, but de-virtualize the call to SerializeWithCachedSizes(). The + // pointer must point at an instance of MessageType, *not* a subclass (or + // the subclass must not override SerializeWithCachedSizes()). + template + static inline uint8* WriteGroupNoVirtualToArray( + field_number, const MessageType& value, output) INL; + template + static inline uint8* WriteMessageNoVirtualToArray( + field_number, const MessageType& value, output) INL; + +#undef output +#undef input +#undef INL + +#undef field_number + + // Compute the byte size of a field. The XxSize() functions do NOT include + // the tag, so you must also call TagSize(). (This is because, for repeated + // fields, you should only call TagSize() once and multiply it by the element + // count, but you may have to call XxSize() for each individual element.) + static inline int Int32Size ( int32 value); + static inline int Int64Size ( int64 value); + static inline int UInt32Size (uint32 value); + static inline int UInt64Size (uint64 value); + static inline int SInt32Size ( int32 value); + static inline int SInt64Size ( int64 value); + static inline int EnumSize ( int value); + + // These types always have the same size. + static const int kFixed32Size = 4; + static const int kFixed64Size = 8; + static const int kSFixed32Size = 4; + static const int kSFixed64Size = 8; + static const int kFloatSize = 4; + static const int kDoubleSize = 8; + static const int kBoolSize = 1; + + static inline int StringSize(const string& value); + static inline int BytesSize (const string& value); + + static inline int GroupSize (const MessageLite& value); + static inline int MessageSize(const MessageLite& value); + + // Like above, but de-virtualize the call to ByteSize(). The + // pointer must point at an instance of MessageType, *not* a subclass (or + // the subclass must not override ByteSize()). + template + static inline int GroupSizeNoVirtual (const MessageType& value); + template + static inline int MessageSizeNoVirtual(const MessageType& value); + + // Given the length of data, calculate the byte size of the data on the + // wire if we encode the data as a length delimited field. + static inline int LengthDelimitedSize(int length); + + private: + // A helper method for the repeated primitive reader. This method has + // optimizations for primitive types that have fixed size on the wire, and + // can be read using potentially faster paths. + template + static inline bool ReadRepeatedFixedSizePrimitive( + int tag_size, + uint32 tag, + google::protobuf::io::CodedInputStream* input, + RepeatedField* value) GOOGLE_ATTRIBUTE_ALWAYS_INLINE; + + // Like ReadRepeatedFixedSizePrimitive but for packed primitive fields. + template + static inline bool ReadPackedFixedSizePrimitive( + google::protobuf::io::CodedInputStream* input, + RepeatedField* value) GOOGLE_ATTRIBUTE_ALWAYS_INLINE; + + static const CppType kFieldTypeToCppTypeMap[]; + static const WireFormatLite::WireType kWireTypeForFieldType[]; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(WireFormatLite); +}; + +// A class which deals with unknown values. The default implementation just +// discards them. WireFormat defines a subclass which writes to an +// UnknownFieldSet. This class is used by ExtensionSet::ParseField(), since +// ExtensionSet is part of the lite library but UnknownFieldSet is not. +class LIBPROTOBUF_EXPORT FieldSkipper { + public: + FieldSkipper() {} + virtual ~FieldSkipper() {} + + // Skip a field whose tag has already been consumed. + virtual bool SkipField(io::CodedInputStream* input, uint32 tag); + + // Skip an entire message or group, up to an end-group tag (which is consumed) + // or end-of-stream. + virtual bool SkipMessage(io::CodedInputStream* input); + + // Deal with an already-parsed unrecognized enum value. The default + // implementation does nothing, but the UnknownFieldSet-based implementation + // saves it as an unknown varint. + virtual void SkipUnknownEnum(int field_number, int value); +}; + +// Subclass of FieldSkipper which saves skipped fields to a CodedOutputStream. + +class LIBPROTOBUF_EXPORT CodedOutputStreamFieldSkipper : public FieldSkipper { + public: + explicit CodedOutputStreamFieldSkipper(io::CodedOutputStream* unknown_fields) + : unknown_fields_(unknown_fields) {} + virtual ~CodedOutputStreamFieldSkipper() {} + + // implements FieldSkipper ----------------------------------------- + virtual bool SkipField(io::CodedInputStream* input, uint32 tag); + virtual bool SkipMessage(io::CodedInputStream* input); + virtual void SkipUnknownEnum(int field_number, int value); + + protected: + io::CodedOutputStream* unknown_fields_; +}; + + +// inline methods ==================================================== + +inline WireFormatLite::CppType +WireFormatLite::FieldTypeToCppType(FieldType type) { + return kFieldTypeToCppTypeMap[type]; +} + +inline uint32 WireFormatLite::MakeTag(int field_number, WireType type) { + return GOOGLE_PROTOBUF_WIRE_FORMAT_MAKE_TAG(field_number, type); +} + +inline WireFormatLite::WireType WireFormatLite::GetTagWireType(uint32 tag) { + return static_cast(tag & kTagTypeMask); +} + +inline int WireFormatLite::GetTagFieldNumber(uint32 tag) { + return static_cast(tag >> kTagTypeBits); +} + +inline int WireFormatLite::TagSize(int field_number, + WireFormatLite::FieldType type) { + int result = io::CodedOutputStream::VarintSize32( + field_number << kTagTypeBits); + if (type == TYPE_GROUP) { + // Groups have both a start and an end tag. + return result * 2; + } else { + return result; + } +} + +inline uint32 WireFormatLite::EncodeFloat(float value) { + union {float f; uint32 i;}; + f = value; + return i; +} + +inline float WireFormatLite::DecodeFloat(uint32 value) { + union {float f; uint32 i;}; + i = value; + return f; +} + +inline uint64 WireFormatLite::EncodeDouble(double value) { + union {double f; uint64 i;}; + f = value; + return i; +} + +inline double WireFormatLite::DecodeDouble(uint64 value) { + union {double f; uint64 i;}; + i = value; + return f; +} + +// ZigZag Transform: Encodes signed integers so that they can be +// effectively used with varint encoding. +// +// varint operates on unsigned integers, encoding smaller numbers into +// fewer bytes. If you try to use it on a signed integer, it will treat +// this number as a very large unsigned integer, which means that even +// small signed numbers like -1 will take the maximum number of bytes +// (10) to encode. ZigZagEncode() maps signed integers to unsigned +// in such a way that those with a small absolute value will have smaller +// encoded values, making them appropriate for encoding using varint. +// +// int32 -> uint32 +// ------------------------- +// 0 -> 0 +// -1 -> 1 +// 1 -> 2 +// -2 -> 3 +// ... -> ... +// 2147483647 -> 4294967294 +// -2147483648 -> 4294967295 +// +// >> encode >> +// << decode << + +inline uint32 WireFormatLite::ZigZagEncode32(int32 n) { + // Note: the right-shift must be arithmetic + return (n << 1) ^ (n >> 31); +} + +inline int32 WireFormatLite::ZigZagDecode32(uint32 n) { + return (n >> 1) ^ -static_cast(n & 1); +} + +inline uint64 WireFormatLite::ZigZagEncode64(int64 n) { + // Note: the right-shift must be arithmetic + return (n << 1) ^ (n >> 63); +} + +inline int64 WireFormatLite::ZigZagDecode64(uint64 n) { + return (n >> 1) ^ -static_cast(n & 1); +} + +} // namespace internal +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_WIRE_FORMAT_LITE_H__ diff --git a/kortex_gazebo/include/google/protobuf/wire_format_lite_inl.h b/kortex_gazebo/include/google/protobuf/wire_format_lite_inl.h new file mode 100644 index 00000000..4e8ac9b6 --- /dev/null +++ b/kortex_gazebo/include/google/protobuf/wire_format_lite_inl.h @@ -0,0 +1,860 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// wink@google.com (Wink Saville) (refactored from wire_format.h) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. + +#ifndef GOOGLE_PROTOBUF_WIRE_FORMAT_LITE_INL_H__ +#define GOOGLE_PROTOBUF_WIRE_FORMAT_LITE_INL_H__ + +#ifdef _MSC_VER +// This is required for min/max on VS2013 only. +#include +#endif + +#include +#include +#include +#include +#include +#include + + +namespace google { +namespace protobuf { +namespace internal { + +// Implementation details of ReadPrimitive. + +template <> +inline bool WireFormatLite::ReadPrimitive( + io::CodedInputStream* input, + int32* value) { + uint32 temp; + if (!input->ReadVarint32(&temp)) return false; + *value = static_cast(temp); + return true; +} +template <> +inline bool WireFormatLite::ReadPrimitive( + io::CodedInputStream* input, + int64* value) { + uint64 temp; + if (!input->ReadVarint64(&temp)) return false; + *value = static_cast(temp); + return true; +} +template <> +inline bool WireFormatLite::ReadPrimitive( + io::CodedInputStream* input, + uint32* value) { + return input->ReadVarint32(value); +} +template <> +inline bool WireFormatLite::ReadPrimitive( + io::CodedInputStream* input, + uint64* value) { + return input->ReadVarint64(value); +} +template <> +inline bool WireFormatLite::ReadPrimitive( + io::CodedInputStream* input, + int32* value) { + uint32 temp; + if (!input->ReadVarint32(&temp)) return false; + *value = ZigZagDecode32(temp); + return true; +} +template <> +inline bool WireFormatLite::ReadPrimitive( + io::CodedInputStream* input, + int64* value) { + uint64 temp; + if (!input->ReadVarint64(&temp)) return false; + *value = ZigZagDecode64(temp); + return true; +} +template <> +inline bool WireFormatLite::ReadPrimitive( + io::CodedInputStream* input, + uint32* value) { + return input->ReadLittleEndian32(value); +} +template <> +inline bool WireFormatLite::ReadPrimitive( + io::CodedInputStream* input, + uint64* value) { + return input->ReadLittleEndian64(value); +} +template <> +inline bool WireFormatLite::ReadPrimitive( + io::CodedInputStream* input, + int32* value) { + uint32 temp; + if (!input->ReadLittleEndian32(&temp)) return false; + *value = static_cast(temp); + return true; +} +template <> +inline bool WireFormatLite::ReadPrimitive( + io::CodedInputStream* input, + int64* value) { + uint64 temp; + if (!input->ReadLittleEndian64(&temp)) return false; + *value = static_cast(temp); + return true; +} +template <> +inline bool WireFormatLite::ReadPrimitive( + io::CodedInputStream* input, + float* value) { + uint32 temp; + if (!input->ReadLittleEndian32(&temp)) return false; + *value = DecodeFloat(temp); + return true; +} +template <> +inline bool WireFormatLite::ReadPrimitive( + io::CodedInputStream* input, + double* value) { + uint64 temp; + if (!input->ReadLittleEndian64(&temp)) return false; + *value = DecodeDouble(temp); + return true; +} +template <> +inline bool WireFormatLite::ReadPrimitive( + io::CodedInputStream* input, + bool* value) { + uint64 temp; + if (!input->ReadVarint64(&temp)) return false; + *value = temp != 0; + return true; +} +template <> +inline bool WireFormatLite::ReadPrimitive( + io::CodedInputStream* input, + int* value) { + uint32 temp; + if (!input->ReadVarint32(&temp)) return false; + *value = static_cast(temp); + return true; +} + +template <> +inline const uint8* WireFormatLite::ReadPrimitiveFromArray< + uint32, WireFormatLite::TYPE_FIXED32>( + const uint8* buffer, + uint32* value) { + return io::CodedInputStream::ReadLittleEndian32FromArray(buffer, value); +} +template <> +inline const uint8* WireFormatLite::ReadPrimitiveFromArray< + uint64, WireFormatLite::TYPE_FIXED64>( + const uint8* buffer, + uint64* value) { + return io::CodedInputStream::ReadLittleEndian64FromArray(buffer, value); +} +template <> +inline const uint8* WireFormatLite::ReadPrimitiveFromArray< + int32, WireFormatLite::TYPE_SFIXED32>( + const uint8* buffer, + int32* value) { + uint32 temp; + buffer = io::CodedInputStream::ReadLittleEndian32FromArray(buffer, &temp); + *value = static_cast(temp); + return buffer; +} +template <> +inline const uint8* WireFormatLite::ReadPrimitiveFromArray< + int64, WireFormatLite::TYPE_SFIXED64>( + const uint8* buffer, + int64* value) { + uint64 temp; + buffer = io::CodedInputStream::ReadLittleEndian64FromArray(buffer, &temp); + *value = static_cast(temp); + return buffer; +} +template <> +inline const uint8* WireFormatLite::ReadPrimitiveFromArray< + float, WireFormatLite::TYPE_FLOAT>( + const uint8* buffer, + float* value) { + uint32 temp; + buffer = io::CodedInputStream::ReadLittleEndian32FromArray(buffer, &temp); + *value = DecodeFloat(temp); + return buffer; +} +template <> +inline const uint8* WireFormatLite::ReadPrimitiveFromArray< + double, WireFormatLite::TYPE_DOUBLE>( + const uint8* buffer, + double* value) { + uint64 temp; + buffer = io::CodedInputStream::ReadLittleEndian64FromArray(buffer, &temp); + *value = DecodeDouble(temp); + return buffer; +} + +template +inline bool WireFormatLite::ReadRepeatedPrimitive( + int, // tag_size, unused. + uint32 tag, + io::CodedInputStream* input, + RepeatedField* values) { + CType value; + if (!ReadPrimitive(input, &value)) return false; + values->Add(value); + int elements_already_reserved = values->Capacity() - values->size(); + while (elements_already_reserved > 0 && input->ExpectTag(tag)) { + if (!ReadPrimitive(input, &value)) return false; + values->AddAlreadyReserved(value); + elements_already_reserved--; + } + return true; +} + +template +inline bool WireFormatLite::ReadRepeatedFixedSizePrimitive( + int tag_size, + uint32 tag, + io::CodedInputStream* input, + RepeatedField* values) { + GOOGLE_DCHECK_EQ(UInt32Size(tag), tag_size); + CType value; + if (!ReadPrimitive(input, &value)) + return false; + values->Add(value); + + // For fixed size values, repeated values can be read more quickly by + // reading directly from a raw array. + // + // We can get a tight loop by only reading as many elements as can be + // added to the RepeatedField without having to do any resizing. Additionally, + // we only try to read as many elements as are available from the current + // buffer space. Doing so avoids having to perform boundary checks when + // reading the value: the maximum number of elements that can be read is + // known outside of the loop. + const void* void_pointer; + int size; + input->GetDirectBufferPointerInline(&void_pointer, &size); + if (size > 0) { + const uint8* buffer = reinterpret_cast(void_pointer); + // The number of bytes each type occupies on the wire. + const int per_value_size = tag_size + sizeof(value); + + int elements_available = min(values->Capacity() - values->size(), + size / per_value_size); + int num_read = 0; + while (num_read < elements_available && + (buffer = io::CodedInputStream::ExpectTagFromArray( + buffer, tag)) != NULL) { + buffer = ReadPrimitiveFromArray(buffer, &value); + values->AddAlreadyReserved(value); + ++num_read; + } + const int read_bytes = num_read * per_value_size; + if (read_bytes > 0) { + input->Skip(read_bytes); + } + } + return true; +} + +// Specializations of ReadRepeatedPrimitive for the fixed size types, which use +// the optimized code path. +#define READ_REPEATED_FIXED_SIZE_PRIMITIVE(CPPTYPE, DECLARED_TYPE) \ +template <> \ +inline bool WireFormatLite::ReadRepeatedPrimitive< \ + CPPTYPE, WireFormatLite::DECLARED_TYPE>( \ + int tag_size, \ + uint32 tag, \ + io::CodedInputStream* input, \ + RepeatedField* values) { \ + return ReadRepeatedFixedSizePrimitive< \ + CPPTYPE, WireFormatLite::DECLARED_TYPE>( \ + tag_size, tag, input, values); \ +} + +READ_REPEATED_FIXED_SIZE_PRIMITIVE(uint32, TYPE_FIXED32) +READ_REPEATED_FIXED_SIZE_PRIMITIVE(uint64, TYPE_FIXED64) +READ_REPEATED_FIXED_SIZE_PRIMITIVE(int32, TYPE_SFIXED32) +READ_REPEATED_FIXED_SIZE_PRIMITIVE(int64, TYPE_SFIXED64) +READ_REPEATED_FIXED_SIZE_PRIMITIVE(float, TYPE_FLOAT) +READ_REPEATED_FIXED_SIZE_PRIMITIVE(double, TYPE_DOUBLE) + +#undef READ_REPEATED_FIXED_SIZE_PRIMITIVE + +template +bool WireFormatLite::ReadRepeatedPrimitiveNoInline( + int tag_size, + uint32 tag, + io::CodedInputStream* input, + RepeatedField* value) { + return ReadRepeatedPrimitive( + tag_size, tag, input, value); +} + +template +inline bool WireFormatLite::ReadPackedPrimitive(io::CodedInputStream* input, + RepeatedField* values) { + uint32 length; + if (!input->ReadVarint32(&length)) return false; + io::CodedInputStream::Limit limit = input->PushLimit(length); + while (input->BytesUntilLimit() > 0) { + CType value; + if (!ReadPrimitive(input, &value)) return false; + values->Add(value); + } + input->PopLimit(limit); + return true; +} + +template +inline bool WireFormatLite::ReadPackedFixedSizePrimitive( + io::CodedInputStream* input, RepeatedField* values) { + uint32 length; + if (!input->ReadVarint32(&length)) return false; + const uint32 old_entries = values->size(); + const uint32 new_entries = length / sizeof(CType); + const uint32 new_bytes = new_entries * sizeof(CType); + if (new_bytes != length) return false; + // We would *like* to pre-allocate the buffer to write into (for + // speed), but *must* avoid performing a very large allocation due + // to a malicious user-supplied "length" above. So we have a fast + // path that pre-allocates when the "length" is less than a bound. + // We determine the bound by calling BytesUntilTotalBytesLimit() and + // BytesUntilLimit(). These return -1 to mean "no limit set". + // There are four cases: + // TotalBytesLimit Limit + // -1 -1 Use slow path. + // -1 >= 0 Use fast path if length <= Limit. + // >= 0 -1 Use slow path. + // >= 0 >= 0 Use fast path if length <= min(both limits). + int64 bytes_limit = input->BytesUntilTotalBytesLimit(); + if (bytes_limit == -1) { + bytes_limit = input->BytesUntilLimit(); + } else { + bytes_limit = + min(bytes_limit, static_cast(input->BytesUntilLimit())); + } + if (bytes_limit >= new_bytes) { + // Fast-path that pre-allocates *values to the final size. +#if defined(PROTOBUF_LITTLE_ENDIAN) + values->Resize(old_entries + new_entries, 0); + // values->mutable_data() may change after Resize(), so do this after: + void* dest = reinterpret_cast(values->mutable_data() + old_entries); + if (!input->ReadRaw(dest, new_bytes)) { + values->Truncate(old_entries); + return false; + } +#else + values->Reserve(old_entries + new_entries); + CType value; + for (int i = 0; i < new_entries; ++i) { + if (!ReadPrimitive(input, &value)) return false; + values->AddAlreadyReserved(value); + } +#endif + } else { + // This is the slow-path case where "length" may be too large to + // safely allocate. We read as much as we can into *values + // without pre-allocating "length" bytes. + CType value; + for (uint32 i = 0; i < new_entries; ++i) { + if (!ReadPrimitive(input, &value)) return false; + values->Add(value); + } + } + return true; +} + +// Specializations of ReadPackedPrimitive for the fixed size types, which use +// an optimized code path. +#define READ_REPEATED_PACKED_FIXED_SIZE_PRIMITIVE(CPPTYPE, DECLARED_TYPE) \ +template <> \ +inline bool WireFormatLite::ReadPackedPrimitive< \ + CPPTYPE, WireFormatLite::DECLARED_TYPE>( \ + io::CodedInputStream* input, \ + RepeatedField* values) { \ + return ReadPackedFixedSizePrimitive< \ + CPPTYPE, WireFormatLite::DECLARED_TYPE>(input, values); \ +} + +READ_REPEATED_PACKED_FIXED_SIZE_PRIMITIVE(uint32, TYPE_FIXED32); +READ_REPEATED_PACKED_FIXED_SIZE_PRIMITIVE(uint64, TYPE_FIXED64); +READ_REPEATED_PACKED_FIXED_SIZE_PRIMITIVE(int32, TYPE_SFIXED32); +READ_REPEATED_PACKED_FIXED_SIZE_PRIMITIVE(int64, TYPE_SFIXED64); +READ_REPEATED_PACKED_FIXED_SIZE_PRIMITIVE(float, TYPE_FLOAT); +READ_REPEATED_PACKED_FIXED_SIZE_PRIMITIVE(double, TYPE_DOUBLE); + +#undef READ_REPEATED_PACKED_FIXED_SIZE_PRIMITIVE + +template +bool WireFormatLite::ReadPackedPrimitiveNoInline(io::CodedInputStream* input, + RepeatedField* values) { + return ReadPackedPrimitive(input, values); +} + + +inline bool WireFormatLite::ReadGroup(int field_number, + io::CodedInputStream* input, + MessageLite* value) { + if (!input->IncrementRecursionDepth()) return false; + if (!value->MergePartialFromCodedStream(input)) return false; + input->DecrementRecursionDepth(); + // Make sure the last thing read was an end tag for this group. + if (!input->LastTagWas(MakeTag(field_number, WIRETYPE_END_GROUP))) { + return false; + } + return true; +} +inline bool WireFormatLite::ReadMessage(io::CodedInputStream* input, + MessageLite* value) { + uint32 length; + if (!input->ReadVarint32(&length)) return false; + if (!input->IncrementRecursionDepth()) return false; + io::CodedInputStream::Limit limit = input->PushLimit(length); + if (!value->MergePartialFromCodedStream(input)) return false; + // Make sure that parsing stopped when the limit was hit, not at an endgroup + // tag. + if (!input->ConsumedEntireMessage()) return false; + input->PopLimit(limit); + input->DecrementRecursionDepth(); + return true; +} + +// We name the template parameter something long and extremely unlikely to occur +// elsewhere because a *qualified* member access expression designed to avoid +// virtual dispatch, C++03 [basic.lookup.classref] 3.4.5/4 requires that the +// name of the qualifying class to be looked up both in the context of the full +// expression (finding the template parameter) and in the context of the object +// whose member we are accessing. This could potentially find a nested type +// within that object. The standard goes on to require these names to refer to +// the same entity, which this collision would violate. The lack of a safe way +// to avoid this collision appears to be a defect in the standard, but until it +// is corrected, we choose the name to avoid accidental collisions. +template +inline bool WireFormatLite::ReadGroupNoVirtual( + int field_number, io::CodedInputStream* input, + MessageType_WorkAroundCppLookupDefect* value) { + if (!input->IncrementRecursionDepth()) return false; + if (!value-> + MessageType_WorkAroundCppLookupDefect::MergePartialFromCodedStream(input)) + return false; + input->DecrementRecursionDepth(); + // Make sure the last thing read was an end tag for this group. + if (!input->LastTagWas(MakeTag(field_number, WIRETYPE_END_GROUP))) { + return false; + } + return true; +} +template +inline bool WireFormatLite::ReadMessageNoVirtual( + io::CodedInputStream* input, MessageType_WorkAroundCppLookupDefect* value) { + uint32 length; + if (!input->ReadVarint32(&length)) return false; + if (!input->IncrementRecursionDepth()) return false; + io::CodedInputStream::Limit limit = input->PushLimit(length); + if (!value-> + MessageType_WorkAroundCppLookupDefect::MergePartialFromCodedStream(input)) + return false; + // Make sure that parsing stopped when the limit was hit, not at an endgroup + // tag. + if (!input->ConsumedEntireMessage()) return false; + input->PopLimit(limit); + input->DecrementRecursionDepth(); + return true; +} + +// =================================================================== + +inline void WireFormatLite::WriteTag(int field_number, WireType type, + io::CodedOutputStream* output) { + output->WriteTag(MakeTag(field_number, type)); +} + +inline void WireFormatLite::WriteInt32NoTag(int32 value, + io::CodedOutputStream* output) { + output->WriteVarint32SignExtended(value); +} +inline void WireFormatLite::WriteInt64NoTag(int64 value, + io::CodedOutputStream* output) { + output->WriteVarint64(static_cast(value)); +} +inline void WireFormatLite::WriteUInt32NoTag(uint32 value, + io::CodedOutputStream* output) { + output->WriteVarint32(value); +} +inline void WireFormatLite::WriteUInt64NoTag(uint64 value, + io::CodedOutputStream* output) { + output->WriteVarint64(value); +} +inline void WireFormatLite::WriteSInt32NoTag(int32 value, + io::CodedOutputStream* output) { + output->WriteVarint32(ZigZagEncode32(value)); +} +inline void WireFormatLite::WriteSInt64NoTag(int64 value, + io::CodedOutputStream* output) { + output->WriteVarint64(ZigZagEncode64(value)); +} +inline void WireFormatLite::WriteFixed32NoTag(uint32 value, + io::CodedOutputStream* output) { + output->WriteLittleEndian32(value); +} +inline void WireFormatLite::WriteFixed64NoTag(uint64 value, + io::CodedOutputStream* output) { + output->WriteLittleEndian64(value); +} +inline void WireFormatLite::WriteSFixed32NoTag(int32 value, + io::CodedOutputStream* output) { + output->WriteLittleEndian32(static_cast(value)); +} +inline void WireFormatLite::WriteSFixed64NoTag(int64 value, + io::CodedOutputStream* output) { + output->WriteLittleEndian64(static_cast(value)); +} +inline void WireFormatLite::WriteFloatNoTag(float value, + io::CodedOutputStream* output) { + output->WriteLittleEndian32(EncodeFloat(value)); +} +inline void WireFormatLite::WriteDoubleNoTag(double value, + io::CodedOutputStream* output) { + output->WriteLittleEndian64(EncodeDouble(value)); +} +inline void WireFormatLite::WriteBoolNoTag(bool value, + io::CodedOutputStream* output) { + output->WriteVarint32(value ? 1 : 0); +} +inline void WireFormatLite::WriteEnumNoTag(int value, + io::CodedOutputStream* output) { + output->WriteVarint32SignExtended(value); +} + +// See comment on ReadGroupNoVirtual to understand the need for this template +// parameter name. +template +inline void WireFormatLite::WriteGroupNoVirtual( + int field_number, const MessageType_WorkAroundCppLookupDefect& value, + io::CodedOutputStream* output) { + WriteTag(field_number, WIRETYPE_START_GROUP, output); + value.MessageType_WorkAroundCppLookupDefect::SerializeWithCachedSizes(output); + WriteTag(field_number, WIRETYPE_END_GROUP, output); +} +template +inline void WireFormatLite::WriteMessageNoVirtual( + int field_number, const MessageType_WorkAroundCppLookupDefect& value, + io::CodedOutputStream* output) { + WriteTag(field_number, WIRETYPE_LENGTH_DELIMITED, output); + output->WriteVarint32( + value.MessageType_WorkAroundCppLookupDefect::GetCachedSize()); + value.MessageType_WorkAroundCppLookupDefect::SerializeWithCachedSizes(output); +} + +// =================================================================== + +inline uint8* WireFormatLite::WriteTagToArray(int field_number, + WireType type, + uint8* target) { + return io::CodedOutputStream::WriteTagToArray(MakeTag(field_number, type), + target); +} + +inline uint8* WireFormatLite::WriteInt32NoTagToArray(int32 value, + uint8* target) { + return io::CodedOutputStream::WriteVarint32SignExtendedToArray(value, target); +} +inline uint8* WireFormatLite::WriteInt64NoTagToArray(int64 value, + uint8* target) { + return io::CodedOutputStream::WriteVarint64ToArray( + static_cast(value), target); +} +inline uint8* WireFormatLite::WriteUInt32NoTagToArray(uint32 value, + uint8* target) { + return io::CodedOutputStream::WriteVarint32ToArray(value, target); +} +inline uint8* WireFormatLite::WriteUInt64NoTagToArray(uint64 value, + uint8* target) { + return io::CodedOutputStream::WriteVarint64ToArray(value, target); +} +inline uint8* WireFormatLite::WriteSInt32NoTagToArray(int32 value, + uint8* target) { + return io::CodedOutputStream::WriteVarint32ToArray(ZigZagEncode32(value), + target); +} +inline uint8* WireFormatLite::WriteSInt64NoTagToArray(int64 value, + uint8* target) { + return io::CodedOutputStream::WriteVarint64ToArray(ZigZagEncode64(value), + target); +} +inline uint8* WireFormatLite::WriteFixed32NoTagToArray(uint32 value, + uint8* target) { + return io::CodedOutputStream::WriteLittleEndian32ToArray(value, target); +} +inline uint8* WireFormatLite::WriteFixed64NoTagToArray(uint64 value, + uint8* target) { + return io::CodedOutputStream::WriteLittleEndian64ToArray(value, target); +} +inline uint8* WireFormatLite::WriteSFixed32NoTagToArray(int32 value, + uint8* target) { + return io::CodedOutputStream::WriteLittleEndian32ToArray( + static_cast(value), target); +} +inline uint8* WireFormatLite::WriteSFixed64NoTagToArray(int64 value, + uint8* target) { + return io::CodedOutputStream::WriteLittleEndian64ToArray( + static_cast(value), target); +} +inline uint8* WireFormatLite::WriteFloatNoTagToArray(float value, + uint8* target) { + return io::CodedOutputStream::WriteLittleEndian32ToArray(EncodeFloat(value), + target); +} +inline uint8* WireFormatLite::WriteDoubleNoTagToArray(double value, + uint8* target) { + return io::CodedOutputStream::WriteLittleEndian64ToArray(EncodeDouble(value), + target); +} +inline uint8* WireFormatLite::WriteBoolNoTagToArray(bool value, + uint8* target) { + return io::CodedOutputStream::WriteVarint32ToArray(value ? 1 : 0, target); +} +inline uint8* WireFormatLite::WriteEnumNoTagToArray(int value, + uint8* target) { + return io::CodedOutputStream::WriteVarint32SignExtendedToArray(value, target); +} + +inline uint8* WireFormatLite::WriteInt32ToArray(int field_number, + int32 value, + uint8* target) { + target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); + return WriteInt32NoTagToArray(value, target); +} +inline uint8* WireFormatLite::WriteInt64ToArray(int field_number, + int64 value, + uint8* target) { + target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); + return WriteInt64NoTagToArray(value, target); +} +inline uint8* WireFormatLite::WriteUInt32ToArray(int field_number, + uint32 value, + uint8* target) { + target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); + return WriteUInt32NoTagToArray(value, target); +} +inline uint8* WireFormatLite::WriteUInt64ToArray(int field_number, + uint64 value, + uint8* target) { + target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); + return WriteUInt64NoTagToArray(value, target); +} +inline uint8* WireFormatLite::WriteSInt32ToArray(int field_number, + int32 value, + uint8* target) { + target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); + return WriteSInt32NoTagToArray(value, target); +} +inline uint8* WireFormatLite::WriteSInt64ToArray(int field_number, + int64 value, + uint8* target) { + target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); + return WriteSInt64NoTagToArray(value, target); +} +inline uint8* WireFormatLite::WriteFixed32ToArray(int field_number, + uint32 value, + uint8* target) { + target = WriteTagToArray(field_number, WIRETYPE_FIXED32, target); + return WriteFixed32NoTagToArray(value, target); +} +inline uint8* WireFormatLite::WriteFixed64ToArray(int field_number, + uint64 value, + uint8* target) { + target = WriteTagToArray(field_number, WIRETYPE_FIXED64, target); + return WriteFixed64NoTagToArray(value, target); +} +inline uint8* WireFormatLite::WriteSFixed32ToArray(int field_number, + int32 value, + uint8* target) { + target = WriteTagToArray(field_number, WIRETYPE_FIXED32, target); + return WriteSFixed32NoTagToArray(value, target); +} +inline uint8* WireFormatLite::WriteSFixed64ToArray(int field_number, + int64 value, + uint8* target) { + target = WriteTagToArray(field_number, WIRETYPE_FIXED64, target); + return WriteSFixed64NoTagToArray(value, target); +} +inline uint8* WireFormatLite::WriteFloatToArray(int field_number, + float value, + uint8* target) { + target = WriteTagToArray(field_number, WIRETYPE_FIXED32, target); + return WriteFloatNoTagToArray(value, target); +} +inline uint8* WireFormatLite::WriteDoubleToArray(int field_number, + double value, + uint8* target) { + target = WriteTagToArray(field_number, WIRETYPE_FIXED64, target); + return WriteDoubleNoTagToArray(value, target); +} +inline uint8* WireFormatLite::WriteBoolToArray(int field_number, + bool value, + uint8* target) { + target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); + return WriteBoolNoTagToArray(value, target); +} +inline uint8* WireFormatLite::WriteEnumToArray(int field_number, + int value, + uint8* target) { + target = WriteTagToArray(field_number, WIRETYPE_VARINT, target); + return WriteEnumNoTagToArray(value, target); +} + +inline uint8* WireFormatLite::WriteStringToArray(int field_number, + const string& value, + uint8* target) { + // String is for UTF-8 text only + // WARNING: In wire_format.cc, both strings and bytes are handled by + // WriteString() to avoid code duplication. If the implementations become + // different, you will need to update that usage. + target = WriteTagToArray(field_number, WIRETYPE_LENGTH_DELIMITED, target); + return io::CodedOutputStream::WriteStringWithSizeToArray(value, target); +} +inline uint8* WireFormatLite::WriteBytesToArray(int field_number, + const string& value, + uint8* target) { + target = WriteTagToArray(field_number, WIRETYPE_LENGTH_DELIMITED, target); + return io::CodedOutputStream::WriteStringWithSizeToArray(value, target); +} + + +inline uint8* WireFormatLite::WriteGroupToArray(int field_number, + const MessageLite& value, + uint8* target) { + target = WriteTagToArray(field_number, WIRETYPE_START_GROUP, target); + target = value.SerializeWithCachedSizesToArray(target); + return WriteTagToArray(field_number, WIRETYPE_END_GROUP, target); +} +inline uint8* WireFormatLite::WriteMessageToArray(int field_number, + const MessageLite& value, + uint8* target) { + target = WriteTagToArray(field_number, WIRETYPE_LENGTH_DELIMITED, target); + target = io::CodedOutputStream::WriteVarint32ToArray( + value.GetCachedSize(), target); + return value.SerializeWithCachedSizesToArray(target); +} + +// See comment on ReadGroupNoVirtual to understand the need for this template +// parameter name. +template +inline uint8* WireFormatLite::WriteGroupNoVirtualToArray( + int field_number, const MessageType_WorkAroundCppLookupDefect& value, + uint8* target) { + target = WriteTagToArray(field_number, WIRETYPE_START_GROUP, target); + target = value.MessageType_WorkAroundCppLookupDefect + ::SerializeWithCachedSizesToArray(target); + return WriteTagToArray(field_number, WIRETYPE_END_GROUP, target); +} +template +inline uint8* WireFormatLite::WriteMessageNoVirtualToArray( + int field_number, const MessageType_WorkAroundCppLookupDefect& value, + uint8* target) { + target = WriteTagToArray(field_number, WIRETYPE_LENGTH_DELIMITED, target); + target = io::CodedOutputStream::WriteVarint32ToArray( + value.MessageType_WorkAroundCppLookupDefect::GetCachedSize(), target); + return value.MessageType_WorkAroundCppLookupDefect + ::SerializeWithCachedSizesToArray(target); +} + +// =================================================================== + +inline int WireFormatLite::Int32Size(int32 value) { + return io::CodedOutputStream::VarintSize32SignExtended(value); +} +inline int WireFormatLite::Int64Size(int64 value) { + return io::CodedOutputStream::VarintSize64(static_cast(value)); +} +inline int WireFormatLite::UInt32Size(uint32 value) { + return io::CodedOutputStream::VarintSize32(value); +} +inline int WireFormatLite::UInt64Size(uint64 value) { + return io::CodedOutputStream::VarintSize64(value); +} +inline int WireFormatLite::SInt32Size(int32 value) { + return io::CodedOutputStream::VarintSize32(ZigZagEncode32(value)); +} +inline int WireFormatLite::SInt64Size(int64 value) { + return io::CodedOutputStream::VarintSize64(ZigZagEncode64(value)); +} +inline int WireFormatLite::EnumSize(int value) { + return io::CodedOutputStream::VarintSize32SignExtended(value); +} + +inline int WireFormatLite::StringSize(const string& value) { + return io::CodedOutputStream::VarintSize32(value.size()) + + value.size(); +} +inline int WireFormatLite::BytesSize(const string& value) { + return io::CodedOutputStream::VarintSize32(value.size()) + + value.size(); +} + + +inline int WireFormatLite::GroupSize(const MessageLite& value) { + return value.ByteSize(); +} +inline int WireFormatLite::MessageSize(const MessageLite& value) { + return LengthDelimitedSize(value.ByteSize()); +} + +// See comment on ReadGroupNoVirtual to understand the need for this template +// parameter name. +template +inline int WireFormatLite::GroupSizeNoVirtual( + const MessageType_WorkAroundCppLookupDefect& value) { + return value.MessageType_WorkAroundCppLookupDefect::ByteSize(); +} +template +inline int WireFormatLite::MessageSizeNoVirtual( + const MessageType_WorkAroundCppLookupDefect& value) { + return LengthDelimitedSize( + value.MessageType_WorkAroundCppLookupDefect::ByteSize()); +} + +inline int WireFormatLite::LengthDelimitedSize(int length) { + return io::CodedOutputStream::VarintSize32(length) + length; +} + +} // namespace internal +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_WIRE_FORMAT_LITE_INL_H__ diff --git a/kortex_gazebo/launch/spawn_kortex_robot.launch b/kortex_gazebo/launch/spawn_kortex_robot.launch new file mode 100644 index 00000000..d59efd18 --- /dev/null +++ b/kortex_gazebo/launch/spawn_kortex_robot.launch @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/kortex_gazebo/launch/start_gazebo.launch b/kortex_gazebo/launch/start_gazebo.launch new file mode 100644 index 00000000..a69e0d2a --- /dev/null +++ b/kortex_gazebo/launch/start_gazebo.launch @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/kortex_gazebo/lib/libprotobuf-lite.so b/kortex_gazebo/lib/libprotobuf-lite.so new file mode 100755 index 00000000..e59728dd Binary files /dev/null and b/kortex_gazebo/lib/libprotobuf-lite.so differ diff --git a/kortex_gazebo/lib/libprotobuf-lite.so.9 b/kortex_gazebo/lib/libprotobuf-lite.so.9 new file mode 100755 index 00000000..e59728dd Binary files /dev/null and b/kortex_gazebo/lib/libprotobuf-lite.so.9 differ diff --git a/kortex_gazebo/lib/libprotobuf-lite.so.9.0.1 b/kortex_gazebo/lib/libprotobuf-lite.so.9.0.1 new file mode 100755 index 00000000..e59728dd Binary files /dev/null and b/kortex_gazebo/lib/libprotobuf-lite.so.9.0.1 differ diff --git a/kortex_gazebo/lib/libprotobuf.so b/kortex_gazebo/lib/libprotobuf.so new file mode 100755 index 00000000..b1f16ae0 Binary files /dev/null and b/kortex_gazebo/lib/libprotobuf.so differ diff --git a/kortex_gazebo/lib/libprotobuf.so.9 b/kortex_gazebo/lib/libprotobuf.so.9 new file mode 100755 index 00000000..b1f16ae0 Binary files /dev/null and b/kortex_gazebo/lib/libprotobuf.so.9 differ diff --git a/kortex_gazebo/lib/libprotobuf.so.9.0.1 b/kortex_gazebo/lib/libprotobuf.so.9.0.1 new file mode 100755 index 00000000..b1f16ae0 Binary files /dev/null and b/kortex_gazebo/lib/libprotobuf.so.9.0.1 differ diff --git a/kortex_gazebo/lib/libprotoc.so b/kortex_gazebo/lib/libprotoc.so new file mode 100755 index 00000000..4dd3578b Binary files /dev/null and b/kortex_gazebo/lib/libprotoc.so differ diff --git a/kortex_gazebo/lib/libprotoc.so.9 b/kortex_gazebo/lib/libprotoc.so.9 new file mode 100755 index 00000000..4dd3578b Binary files /dev/null and b/kortex_gazebo/lib/libprotoc.so.9 differ diff --git a/kortex_gazebo/lib/libprotoc.so.9.0.1 b/kortex_gazebo/lib/libprotoc.so.9.0.1 new file mode 100755 index 00000000..4dd3578b Binary files /dev/null and b/kortex_gazebo/lib/libprotoc.so.9.0.1 differ diff --git a/kortex_gazebo/package.xml b/kortex_gazebo/package.xml new file mode 100644 index 00000000..37e59b59 --- /dev/null +++ b/kortex_gazebo/package.xml @@ -0,0 +1,28 @@ + + kortex_gazebo + 2.0.0 + +

Gazebo simulation package for Kortex robots

+

This package contains launch files to spawn the Kortex robot in Gazebo and visualize it in RViz

+
+ Alexandre Vannobel + + BSD + catkin + roslaunch + robot_state_publisher + rviz + joint_state_publisher + gazebo + xacro + gazebo_ros + gazebo_ros_control + moveit_commander + moveit_ros_control_interface + moveit_msgs + geometry_msgs + std_srvs + + + +
diff --git a/kortex_gazebo/readme.md b/kortex_gazebo/readme.md new file mode 100644 index 00000000..1435c01e --- /dev/null +++ b/kortex_gazebo/readme.md @@ -0,0 +1,108 @@ + + +# Kortex Gazebo (**EXPERIMENTAL**) + +## Overview +This package contains files to simulate the Kinova Gen3 Ultra lightweight robot in Gazebo. + +### License + +The source code is released under a [BSD 3-Clause license](../LICENSE). + +**Author: Kinova inc.
+Affiliation: [Kinova inc.](https://www.kinovarobotics.com/)
+Maintainer: Kinova inc. support@kinovarobotics.com** + +This package has been tested under ROS Kinetic, Gazebo 7 and Ubuntu 16.04. + +## Why **"EXPERIMENTAL"**? + +The simulated arm has been tested and is stable in mid and high-inertia configurations and in most of its workspace, but the PID gains specified in the [configuration file](../kortex_control/arms/gen3/config/joint_position_controllers.yaml) do not work well in very low-inertia configurations (when the arm is vertical, or almost vertical). Hence, since some tuning still needs to be done on the gains, the package is tagged as **experimental**. + +Other disclaimers : + - The simulation has not been tested with simulated payload. + - No characterization was done to compare and quantify the performance of the simulated controllers and the real arm's controllers. The simulation only offers a **visually comparable experience** to the real arm. + - Very rarely, the base (fixed to the world frame) seems to lose its fixation and the arm goes unstable. We are currently looking for the root cause of this behavior, but we found that clicking **Edit ---> Reset Model Poses** (Shift + Ctrl + R) in Gazebo is a workaround. + +## Usage + +The [spawn_kortex_robot.launch file](launch/spawn_kortex_robot.launch) launches the arm simulation in [Gazebo](http://gazebosim.org), with [ros_control](http://wiki.ros.org/ros_control) controllers and optionally [MoveIt!](https://moveit.ros.org/). +The launch can be parametrized with arguments : + +**Arguments**: +- **start_gazebo** : If this argument is false, Gazebo will not be launched within this launched file. It is useful if you already launched Gazebo yourself and just want to spawn the robot. The default value is **true** (Gazebo will be started). +- **gazebo_gui** : If this argument is false, only the Gazebo Server will be launched. The default value is **true**. +- **start_rviz** : If this argument is true, RViz will be launched. The default value is **true**. +- **x0** : The default X-axis position of the robot in Gazebo. The default value is **0.0**. +- **y0** : The default Y-axis position of the robot in Gazebo. The default value is **0.0**. +- **z0** : The default Z-axis position of the robot in Gazebo. The default value is **0.0**. +- **arm** : Name of your robot arm model. See the `kortex_description/arms` folder to see the available robot models. The default value is **gen3**. +- **gripper** : Name of your robot tool / gripper. See the `kortex_description/grippers` folder to see the available tool models (or to add your own). The default value is **""** and the only other supported option is **robotiq_2f_85**. +- **robot_name** : This is the namespace of the arm that is going to be spawned. It defaults to **my_$(arg arm)** (so my_gen3 for arm="gen3"). +- **use_trajectory_controller** : If this argument is false, one `JointPositionController` per joint will be launched and the arm will offer a basic ROS Control interface to control every joint individually with topics. If this argument is true, a MoveIt! node will be started for the arm and the arm will offer a `FollowJointTrajectory` interface to control the arm (via a `JointTrajectoryController`). The default value is **true**. +- **use_sim_time** : If this value is true, Gazebo will use simulated time instead of system clock. The default value is **true**. +- **debug** : If this value is true, Gazebo will be launched in debug mode. This option is useful for debugging Gazebo-related issues that won't show in the terminal. The default value is **false**. +- **paused** : If this value is true, Gazebo will be started paused. The default value is **$(arg use_trajectory_controller)** because, when MoveIt! is enabled, Gazebo needs to be started paused to let the controllers initialize. + +To launch it with default arguments, run the following command in a terminal : + +`roslaunch kortex_gazebo spawn_kortex_robot.launch` + +To launch it with optional arguments, specify the argument name, then ":=", then the value you want. For example, : + +`roslaunch kortex_gazebo spawn_kortex_robot.launch start_rviz:=false x0:=1.0 y0:=2.55 use_trajectory_controller:=false` + +You can also have a look at the [roslaunch documentation](http://wiki.ros.org/roslaunch/Commandline%20Tools) for more details. + +## Gazebo + +Gazebo loads an empty world an first, then the `spawn_model` node from the [gazebo_ros package](http://wiki.ros.org/gazebo_ros) is used to load the `robot_description` (taken from the Parameter Server) and spawn the robot in the simulator. + +## Controllers + +### JointTrajectoryController with MoveIt! support + +The simulated arm is controlled with a `effort_controllers/JointTrajectoryController` from [ros_controllers](http://wiki.ros.org/ros_controllers). +This controller offers a [FollowJointTrajectory](http://wiki.ros.org/joint_trajectory_controller) interface to control the simulated arm, which is configured with [MoveIt!](http://docs.ros.org/kinetic/api/moveit_tutorials/html/index.html) so the trajectories outputed by the `move_group` node are sent to the robot in Gazebo and executed. +The RViz Motion Planning plugin offers simple motion planning support for the simulated robot. See the [kortex_move_it_config documentation](../kortex_move_it_config/readme.md) for more details. + +See the [kortex_control package documentation](../kortex_control/readme.md) for more details. + +### Individual JointPositionController's for each joint + +The simulated arm is controlled with one `effort_controllers/JointPositionController` per joint. +These controllers offer a simpler topic interface to control the simulated arm joint by joint. These controllers cannot be used with MoveIt!, which needs a `FollowJointTrajectory` interface. + +## Initialization script + +The package also uses a [Python script](./scripts/home_robot.py) to home the robot after the robot has been spawned. +Gazebo is **launched with paused physics** when using the trajectory controller. Otherwise, the arm would fall to the ground because the controllers are not fully loaded when the robot is spawned in the simulator. +When everything is well loaded, the script unpauses Gazebo's physics and uses MoveIt! to home the robot. + +## Plugins + +To properly simulate the Robotiq 2F-85 Gripper in Gazebo, we use two Gazebo Plugins. + +### Mimic joint plugin + +Gazebo doesn't offer support for the URDF **mimic** tag. +By loading one instance of [this plugin](../third_party/roboticsgroup_gazebo_plugins/README.md) per mimic joint, we are able to simulate those joints properly. The plugin parameters are specified with the [transmission elements for the Robotiq gripper](../kortex_description/grippers/robotiq_2f_85/urdf/robotiq_2f_85_transmission_macro.xacro). + +### Gazebo grasp plugin + +Gazebo doesn't support grasping very well. By loading [this plugin](../third_party/gazebo-pkgs/README.md), we make sure objects grasped by the gripper will not fall. The plugin parameters are specified in with the [transmission elements for the Robotiq gripper](../kortex_description/grippers/robotiq_2f_85/urdf/robotiq_2f_85_transmission_macro.xacro). + +### Compiling the plugins + +Since Kortex uses Google Protocol Buffers 3.5.1 internally and Gazebo 7 uses Protocol Buffers 2.6.1 internally, if you try compiling all of the `ros_kortex` repo with only one version of Protocol Buffers installed, you will run into build and linking problems. Also, installing multiple versions of Protocol Buffers is tricky. +For the Gazebo plugins to build and run fine no matter what the setup is, we copied the Protocol Buffers 2.6.1 headers and dynamic libraries in `kortex_gazebo/include` and `kortex_gazebo/lib` respectively. We also modified the CMakeLists.txt file for every third party Gazebo plugin we use to include and link Protocol Buffers 2.6.1 instead of the system install. diff --git a/kortex_gazebo/scripts/home_robot.py b/kortex_gazebo/scripts/home_robot.py new file mode 100755 index 00000000..8a52fbc8 --- /dev/null +++ b/kortex_gazebo/scripts/home_robot.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python + +# Software License Agreement (BSD License) +# +# Copyright (c) 2013, SRI International +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of SRI International nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# Author: Acorn Pooley, Mike Lautman + +# Inspired from http://docs.ros.org/kinetic/api/moveit_tutorials/html/doc/move_group_python_interface/move_group_python_interface_tutorial.html +# Modified by Alexandre Vannobel to initialize simulated Kinova Gen3 robot in Gazebo + +import sys +import time +import rospy +import moveit_commander +import moveit_msgs.msg +import geometry_msgs.msg +from std_srvs.srv import Empty + +class home_robot(object): + """home_robot""" + def __init__(self): + + # Initialize the node + super(home_robot, self).__init__() + rospy.init_node('init_robot') + + # Create the MoveItInterface necessary objects + moveit_commander.roscpp_initialize(sys.argv) + group_name = "arm" + self.robot = moveit_commander.RobotCommander() + self.scene = moveit_commander.PlanningSceneInterface() + self.group = moveit_commander.MoveGroupCommander(group_name) + + # Home the robot + self.group.set_named_target("home") + self.group.go(wait=True) + +def main(): + try: + # Sleep before unpausing Gazebo so the robot does not fall + time.sleep(5) + + # Unpause the physics + # This will let MoveIt finish its initialization + rospy.wait_for_service('/gazebo/unpause_physics') + unpause_gazebo = rospy.ServiceProxy('/gazebo/unpause_physics', Empty) + resp = unpause_gazebo() + + home_robot() + + except KeyboardInterrupt: + return + +if __name__ == '__main__': + main() diff --git a/kortex_move_it_config/gen3_move_it_config/.setup_assistant b/kortex_move_it_config/gen3_move_it_config/.setup_assistant new file mode 100644 index 00000000..f94315d9 --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/.setup_assistant @@ -0,0 +1,11 @@ +moveit_setup_assistant_config: + URDF: + package: kortex_description + relative_path: robots/gen3.xacro + xacro_args: --inorder arm:=gen3 + SRDF: + relative_path: config/gen3.srdf + CONFIG: + author_name: Alexandre Vannobel + author_email: avannobel@kinova.ca + generated_timestamp: 1551811297 \ No newline at end of file diff --git a/kortex_move_it_config/gen3_move_it_config/CMakeLists.txt b/kortex_move_it_config/gen3_move_it_config/CMakeLists.txt new file mode 100644 index 00000000..6fb6fa46 --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/CMakeLists.txt @@ -0,0 +1,10 @@ +cmake_minimum_required(VERSION 2.8.3) +project(gen3_move_it_config) + +find_package(catkin REQUIRED) + +catkin_package() + +install(DIRECTORY launch DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} + PATTERN "setup_assistant.launch" EXCLUDE) +install(DIRECTORY config DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}) diff --git a/kortex_move_it_config/gen3_move_it_config/config/chomp_planning.yaml b/kortex_move_it_config/gen3_move_it_config/config/chomp_planning.yaml new file mode 100644 index 00000000..75258e53 --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/config/chomp_planning.yaml @@ -0,0 +1,18 @@ +planning_time_limit: 10.0 +max_iterations: 200 +max_iterations_after_collision_free: 5 +smoothness_cost_weight: 0.1 +obstacle_cost_weight: 1.0 +learning_rate: 0.01 +smoothness_cost_velocity: 0.0 +smoothness_cost_acceleration: 1.0 +smoothness_cost_jerk: 0.0 +ridge_factor: 0.01 +use_pseudo_inverse: false +pseudo_inverse_ridge_factor: 1e-4 +joint_update_limit: 0.1 +collision_clearence: 0.2 +collision_threshold: 0.07 +use_stochastic_descent: true +enable_failure_recovery: true +max_recovery_attempts: 5 \ No newline at end of file diff --git a/kortex_move_it_config/gen3_move_it_config/config/fake_controllers.yaml b/kortex_move_it_config/gen3_move_it_config/config/fake_controllers.yaml new file mode 100644 index 00000000..159da410 --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/config/fake_controllers.yaml @@ -0,0 +1,10 @@ +controller_list: + - name: fake_arm_controller + joints: + - joint_1 + - joint_2 + - joint_3 + - joint_4 + - joint_5 + - joint_6 + - joint_7 \ No newline at end of file diff --git a/kortex_move_it_config/gen3_move_it_config/config/gen3.srdf b/kortex_move_it_config/gen3_move_it_config/config/gen3.srdf new file mode 100644 index 00000000..7fb21b66 --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/config/gen3.srdf @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_move_it_config/config/joint_limits.yaml b/kortex_move_it_config/gen3_move_it_config/config/joint_limits.yaml new file mode 100644 index 00000000..68e9894d --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/config/joint_limits.yaml @@ -0,0 +1,39 @@ +# joint_limits.yaml allows the dynamics properties specified in the URDF to be overwritten or augmented as needed +# Specific joint properties can be changed with the keys [max_position, min_position, max_velocity, max_acceleration] +# Joint limits can be turned off with [has_velocity_limits, has_acceleration_limits] +joint_limits: + joint_1: + has_velocity_limits: true + max_velocity: 0.86 + has_acceleration_limits: true + max_acceleration: 0.3 + joint_2: + has_velocity_limits: true + max_velocity: 0.86 + has_acceleration_limits: true + max_acceleration: 0.3 + joint_3: + has_velocity_limits: true + max_velocity: 0.86 + has_acceleration_limits: true + max_acceleration: 0.3 + joint_4: + has_velocity_limits: true + max_velocity: 0.86 + has_acceleration_limits: true + max_acceleration: 0.3 + joint_5: + has_velocity_limits: true + max_velocity: 0.86 + has_acceleration_limits: true + max_acceleration: 0.3 + joint_6: + has_velocity_limits: true + max_velocity: 0.86 + has_acceleration_limits: true + max_acceleration: 0.3 + joint_7: + has_velocity_limits: true + max_velocity: 0.86 + has_acceleration_limits: true + max_acceleration: 0.3 \ No newline at end of file diff --git a/kortex_move_it_config/gen3_move_it_config/config/kinematics.yaml b/kortex_move_it_config/gen3_move_it_config/config/kinematics.yaml new file mode 100644 index 00000000..a1f17d08 --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/config/kinematics.yaml @@ -0,0 +1,5 @@ +arm: + kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin + kinematics_solver_search_resolution: 0.005 + kinematics_solver_timeout: 0.005 + kinematics_solver_attempts: 3 \ No newline at end of file diff --git a/kortex_move_it_config/gen3_move_it_config/config/ompl_planning.yaml b/kortex_move_it_config/gen3_move_it_config/config/ompl_planning.yaml new file mode 100644 index 00000000..17829f90 --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/config/ompl_planning.yaml @@ -0,0 +1,150 @@ +planner_configs: + SBL: + type: geometric::SBL + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + EST: + type: geometric::EST + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0 setup() + goal_bias: 0.05 # When close to goal select goal, with this probability. default: 0.05 + LBKPIECE: + type: geometric::LBKPIECE + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + border_fraction: 0.9 # Fraction of time focused on boarder default: 0.9 + min_valid_path_fraction: 0.5 # Accept partially valid moves above fraction. default: 0.5 + BKPIECE: + type: geometric::BKPIECE + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + border_fraction: 0.9 # Fraction of time focused on boarder default: 0.9 + failed_expansion_score_factor: 0.5 # When extending motion fails, scale score by factor. default: 0.5 + min_valid_path_fraction: 0.5 # Accept partially valid moves above fraction. default: 0.5 + KPIECE: + type: geometric::KPIECE + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + goal_bias: 0.05 # When close to goal select goal, with this probability. default: 0.05 + border_fraction: 0.9 # Fraction of time focused on boarder default: 0.9 (0.0,1.] + failed_expansion_score_factor: 0.5 # When extending motion fails, scale score by factor. default: 0.5 + min_valid_path_fraction: 0.5 # Accept partially valid moves above fraction. default: 0.5 + RRT: + type: geometric::RRT + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + goal_bias: 0.05 # When close to goal select goal, with this probability? default: 0.05 + RRTConnect: + type: geometric::RRTConnect + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + RRTstar: + type: geometric::RRTstar + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + goal_bias: 0.05 # When close to goal select goal, with this probability? default: 0.05 + delay_collision_checking: 1 # Stop collision checking as soon as C-free parent found. default 1 + TRRT: + type: geometric::TRRT + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + goal_bias: 0.05 # When close to goal select goal, with this probability? default: 0.05 + max_states_failed: 10 # when to start increasing temp. default: 10 + temp_change_factor: 2.0 # how much to increase or decrease temp. default: 2.0 + min_temperature: 10e-10 # lower limit of temp change. default: 10e-10 + init_temperature: 10e-6 # initial temperature. default: 10e-6 + frountier_threshold: 0.0 # dist new state to nearest neighbor to disqualify as frontier. default: 0.0 set in setup() + frountierNodeRatio: 0.1 # 1/10, or 1 nonfrontier for every 10 frontier. default: 0.1 + k_constant: 0.0 # value used to normalize expresssion. default: 0.0 set in setup() + PRM: + type: geometric::PRM + max_nearest_neighbors: 10 # use k nearest neighbors. default: 10 + PRMstar: + type: geometric::PRMstar + FMT: + type: geometric::FMT + num_samples: 1000 # number of states that the planner should sample. default: 1000 + radius_multiplier: 1.1 # multiplier used for the nearest neighbors search radius. default: 1.1 + nearest_k: 1 # use Knearest strategy. default: 1 + cache_cc: 1 # use collision checking cache. default: 1 + heuristics: 0 # activate cost to go heuristics. default: 0 + extended_fmt: 1 # activate the extended FMT*: adding new samples if planner does not finish successfully. default: 1 + BFMT: + type: geometric::BFMT + num_samples: 1000 # number of states that the planner should sample. default: 1000 + radius_multiplier: 1.0 # multiplier used for the nearest neighbors search radius. default: 1.0 + nearest_k: 1 # use the Knearest strategy. default: 1 + balanced: 0 # exploration strategy: balanced true expands one tree every iteration. False will select the tree with lowest maximum cost to go. default: 1 + optimality: 1 # termination strategy: optimality true finishes when the best possible path is found. Otherwise, the algorithm will finish when the first feasible path is found. default: 1 + heuristics: 1 # activates cost to go heuristics. default: 1 + cache_cc: 1 # use the collision checking cache. default: 1 + extended_fmt: 1 # Activates the extended FMT*: adding new samples if planner does not finish successfully. default: 1 + PDST: + type: geometric::PDST + STRIDE: + type: geometric::STRIDE + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + goal_bias: 0.05 # When close to goal select goal, with this probability. default: 0.05 + use_projected_distance: 0 # whether nearest neighbors are computed based on distances in a projection of the state rather distances in the state space itself. default: 0 + degree: 16 # desired degree of a node in the Geometric Near-neightbor Access Tree (GNAT). default: 16 + max_degree: 18 # max degree of a node in the GNAT. default: 12 + min_degree: 12 # min degree of a node in the GNAT. default: 12 + max_pts_per_leaf: 6 # max points per leaf in the GNAT. default: 6 + estimated_dimension: 0.0 # estimated dimension of the free space. default: 0.0 + min_valid_path_fraction: 0.2 # Accept partially valid moves above fraction. default: 0.2 + BiTRRT: + type: geometric::BiTRRT + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + temp_change_factor: 0.1 # how much to increase or decrease temp. default: 0.1 + init_temperature: 100 # initial temperature. default: 100 + frountier_threshold: 0.0 # dist new state to nearest neighbor to disqualify as frontier. default: 0.0 set in setup() + frountier_node_ratio: 0.1 # 1/10, or 1 nonfrontier for every 10 frontier. default: 0.1 + cost_threshold: 1e300 # the cost threshold. Any motion cost that is not better will not be expanded. default: inf + LBTRRT: + type: geometric::LBTRRT + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + goal_bias: 0.05 # When close to goal select goal, with this probability. default: 0.05 + epsilon: 0.4 # optimality approximation factor. default: 0.4 + BiEST: + type: geometric::BiEST + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + ProjEST: + type: geometric::ProjEST + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + goal_bias: 0.05 # When close to goal select goal, with this probability. default: 0.05 + LazyPRM: + type: geometric::LazyPRM + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + LazyPRMstar: + type: geometric::LazyPRMstar + SPARS: + type: geometric::SPARS + stretch_factor: 3.0 # roadmap spanner stretch factor. multiplicative upper bound on path quality. It does not make sense to make this parameter more than 3. default: 3.0 + sparse_delta_fraction: 0.25 # delta fraction for connection distance. This value represents the visibility range of sparse samples. default: 0.25 + dense_delta_fraction: 0.001 # delta fraction for interface detection. default: 0.001 + max_failures: 1000 # maximum consecutive failure limit. default: 1000 + SPARStwo: + type: geometric::SPARStwo + stretch_factor: 3.0 # roadmap spanner stretch factor. multiplicative upper bound on path quality. It does not make sense to make this parameter more than 3. default: 3.0 + sparse_delta_fraction: 0.25 # delta fraction for connection distance. This value represents the visibility range of sparse samples. default: 0.25 + dense_delta_fraction: 0.001 # delta fraction for interface detection. default: 0.001 + max_failures: 5000 # maximum consecutive failure limit. default: 5000 +arm: + default_planner_config: RRTConnect + planner_configs: + - SBL + - EST + - LBKPIECE + - BKPIECE + - KPIECE + - RRT + - RRTConnect + - RRTstar + - TRRT + - PRM + - PRMstar + - FMT + - BFMT + - PDST + - STRIDE + - BiTRRT + - LBTRRT + - BiEST + - ProjEST + - LazyPRM + - LazyPRMstar + - SPARS + - SPARStwo + projection_evaluator: joints(joint_1,joint_2) + longest_valid_segment_fraction: 0.005 \ No newline at end of file diff --git a/kortex_move_it_config/gen3_move_it_config/config/ros_controllers.yaml b/kortex_move_it_config/gen3_move_it_config/config/ros_controllers.yaml new file mode 100644 index 00000000..8a0e3f50 --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/config/ros_controllers.yaml @@ -0,0 +1,16 @@ +joint_state_controller: + type: joint_state_controller/JointStateController + publish_rate: 50 +controller_list: + - name: "gen3_joint_trajectory_controller" + action_ns: follow_joint_trajectory + default: True + type: FollowJointTrajectory + joints: + - joint_1 + - joint_2 + - joint_3 + - joint_4 + - joint_5 + - joint_6 + - joint_7 \ No newline at end of file diff --git a/kortex_move_it_config/gen3_move_it_config/config/sensors_3d.yaml b/kortex_move_it_config/gen3_move_it_config/config/sensors_3d.yaml new file mode 100644 index 00000000..d2955dcd --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/config/sensors_3d.yaml @@ -0,0 +1,3 @@ +# The name of this file shouldn't be changed, or else the Setup Assistant won't detect it +sensors: + - {} \ No newline at end of file diff --git a/kortex_move_it_config/gen3_move_it_config/launch/chomp_planning_pipeline.launch.xml b/kortex_move_it_config/gen3_move_it_config/launch/chomp_planning_pipeline.launch.xml new file mode 100644 index 00000000..c418533f --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/launch/chomp_planning_pipeline.launch.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_move_it_config/launch/default_warehouse_db.launch b/kortex_move_it_config/gen3_move_it_config/launch/default_warehouse_db.launch new file mode 100644 index 00000000..0c1b817b --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/launch/default_warehouse_db.launch @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_move_it_config/launch/demo.launch b/kortex_move_it_config/gen3_move_it_config/launch/demo.launch new file mode 100644 index 00000000..a219d6fa --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/launch/demo.launch @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + [move_group/fake_controller_joint_states] + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_move_it_config/launch/fake_moveit_controller_manager.launch.xml b/kortex_move_it_config/gen3_move_it_config/launch/fake_moveit_controller_manager.launch.xml new file mode 100644 index 00000000..5d2c996e --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/launch/fake_moveit_controller_manager.launch.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/kortex_move_it_config/gen3_move_it_config/launch/gen3_moveit_controller_manager.launch.xml b/kortex_move_it_config/gen3_move_it_config/launch/gen3_moveit_controller_manager.launch.xml new file mode 100644 index 00000000..0353c23d --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/launch/gen3_moveit_controller_manager.launch.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/kortex_move_it_config/gen3_move_it_config/launch/gen3_moveit_sensor_manager.launch.xml b/kortex_move_it_config/gen3_move_it_config/launch/gen3_moveit_sensor_manager.launch.xml new file mode 100644 index 00000000..5d02698d --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/launch/gen3_moveit_sensor_manager.launch.xml @@ -0,0 +1,3 @@ + + + diff --git a/kortex_move_it_config/gen3_move_it_config/launch/joystick_control.launch b/kortex_move_it_config/gen3_move_it_config/launch/joystick_control.launch new file mode 100644 index 00000000..9411f6e6 --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/launch/joystick_control.launch @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_move_it_config/launch/move_group.launch b/kortex_move_it_config/gen3_move_it_config/launch/move_group.launch new file mode 100644 index 00000000..fb4955ca --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/launch/move_group.launch @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_move_it_config/launch/moveit.rviz b/kortex_move_it_config/gen3_move_it_config/launch/moveit.rviz new file mode 100644 index 00000000..0877e1e7 --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/launch/moveit.rviz @@ -0,0 +1,689 @@ +Panels: + - Class: rviz/Displays + Help Height: 84 + Name: Displays + Property Tree Widget: + Expanded: + - /MotionPlanning1 + Splitter Ratio: 0.74256 + Tree Height: 664 + - Class: rviz/Help + Name: Help + - Class: rviz/Views + Expanded: + - /Current View1 + Name: Views + Splitter Ratio: 0.5 +Visualization Manager: + Class: "" + Displays: + - Alpha: 0.5 + Cell Size: 1 + Class: rviz/Grid + Color: 160; 160; 164 + Enabled: true + Line Style: + Line Width: 0.03 + Value: Lines + Name: Grid + Normal Cell Count: 0 + Offset: + X: 0 + Y: 0 + Z: 0 + Plane: XY + Plane Cell Count: 10 + Reference Frame: + Value: true + - Class: moveit_rviz_plugin/MotionPlanning + Enabled: true + MoveIt_Goal_Tolerance: 0 + MoveIt_Planning_Time: 5 + MoveIt_Use_Constraint_Aware_IK: true + MoveIt_Warehouse_Host: 127.0.0.1 + MoveIt_Warehouse_Port: 33829 + Name: MotionPlanning + Planned Path: + Links: + base_bellow_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + base_footprint: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + base_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bl_caster_l_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bl_caster_r_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bl_caster_rotation_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + br_caster_l_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + br_caster_r_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + br_caster_rotation_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + double_stereo_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fl_caster_l_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fl_caster_r_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fl_caster_rotation_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fr_caster_l_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fr_caster_r_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fr_caster_rotation_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_mount_kinect_ir_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_mount_kinect_rgb_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_mount_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_mount_prosilica_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_pan_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_plate_frame: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_tilt_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_elbow_flex_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_forearm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_forearm_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_l_finger_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_l_finger_tip_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_motor_accelerometer_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_palm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_r_finger_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_r_finger_tip_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_shoulder_lift_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_shoulder_pan_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_upper_arm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_upper_arm_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_wrist_flex_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_wrist_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + laser_tilt_mount_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_elbow_flex_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_forearm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_forearm_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_l_finger_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_l_finger_tip_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_motor_accelerometer_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_palm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_r_finger_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_r_finger_tip_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_shoulder_lift_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_shoulder_pan_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_upper_arm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_upper_arm_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_wrist_flex_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_wrist_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + sensor_mount_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + torso_lift_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + Loop Animation: true + Robot Alpha: 0.5 + Show Robot Collision: false + Show Robot Visual: true + Show Trail: false + State Display Time: 0.05 s + Trajectory Topic: move_group/display_planned_path + Planning Metrics: + Payload: 1 + Show Joint Torques: false + Show Manipulability: false + Show Manipulability Index: false + Show Weight Limit: false + Planning Request: + Colliding Link Color: 255; 0; 0 + Goal State Alpha: 1 + Goal State Color: 250; 128; 0 + Interactive Marker Size: 0 + Joint Violation Color: 255; 0; 255 + Planning Group: left_arm + Query Goal State: true + Query Start State: false + Show Workspace: false + Start State Alpha: 1 + Start State Color: 0; 255; 0 + Planning Scene Topic: move_group/monitored_planning_scene + Robot Description: robot_description + Scene Geometry: + Scene Alpha: 1 + Scene Color: 50; 230; 50 + Scene Display Time: 0.2 + Show Scene Geometry: true + Voxel Coloring: Z-Axis + Voxel Rendering: Occupied Voxels + Scene Robot: + Attached Body Color: 150; 50; 150 + Links: + base_bellow_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + base_footprint: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + base_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bl_caster_l_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bl_caster_r_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bl_caster_rotation_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + br_caster_l_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + br_caster_r_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + br_caster_rotation_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + double_stereo_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fl_caster_l_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fl_caster_r_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fl_caster_rotation_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fr_caster_l_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fr_caster_r_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fr_caster_rotation_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_mount_kinect_ir_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_mount_kinect_rgb_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_mount_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_mount_prosilica_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_pan_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_plate_frame: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_tilt_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_elbow_flex_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_forearm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_forearm_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_l_finger_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_l_finger_tip_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_motor_accelerometer_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_palm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_r_finger_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_r_finger_tip_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_shoulder_lift_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_shoulder_pan_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_upper_arm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_upper_arm_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_wrist_flex_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_wrist_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + laser_tilt_mount_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_elbow_flex_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_forearm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_forearm_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_l_finger_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_l_finger_tip_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_motor_accelerometer_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_palm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_r_finger_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_r_finger_tip_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_shoulder_lift_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_shoulder_pan_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_upper_arm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_upper_arm_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_wrist_flex_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_wrist_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + sensor_mount_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + torso_lift_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + Robot Alpha: 0.5 + Show Scene Robot: true + Value: true + Enabled: true + Global Options: + Background Color: 48; 48; 48 + Fixed Frame: /base_link + Name: root + Tools: + - Class: rviz/Interact + Hide Inactive Objects: true + - Class: rviz/MoveCamera + - Class: rviz/Select + Value: true + Views: + Current: + Class: rviz/XYOrbit + Distance: 2.9965 + Focal Point: + X: 0.113567 + Y: 0.10592 + Z: 2.23518e-07 + Name: Current View + Near Clip Distance: 0.01 + Pitch: 0.509797 + Target Frame: /base_link + Value: XYOrbit (rviz) + Yaw: 5.65995 + Saved: ~ +Window Geometry: + Displays: + collapsed: false + Height: 1337 + Help: + collapsed: false + Hide Left Dock: false + Hide Right Dock: false + Motion Planning: + collapsed: false + QMainWindow State: 000000ff00000000fd0000000100000000000002a2000004bcfc0200000005fb000000100044006900730070006c00610079007301000000410000032d000000dd00fffffffb0000000800480065006c00700000000342000000bb0000007600fffffffb0000000a0056006900650077007300000003b0000000b0000000b000fffffffb0000000c00430061006d00650072006100000002ff000001610000000000000000fb0000001e004d006f00740069006f006e00200050006c0061006e006e0069006e00670100000374000001890000017400ffffff0000047a000004bc00000001000000020000000100000002fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + Views: + collapsed: false + Width: 1828 + X: 459 + Y: -243 diff --git a/kortex_move_it_config/gen3_move_it_config/launch/moveit_rviz.launch b/kortex_move_it_config/gen3_move_it_config/launch/moveit_rviz.launch new file mode 100644 index 00000000..7f1a2a16 --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/launch/moveit_rviz.launch @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_move_it_config/launch/ompl_planning_pipeline.launch.xml b/kortex_move_it_config/gen3_move_it_config/launch/ompl_planning_pipeline.launch.xml new file mode 100644 index 00000000..2ab04a16 --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/launch/ompl_planning_pipeline.launch.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_move_it_config/launch/planning_context.launch b/kortex_move_it_config/gen3_move_it_config/launch/planning_context.launch new file mode 100644 index 00000000..4da8a8ce --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/launch/planning_context.launch @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_move_it_config/launch/planning_pipeline.launch.xml b/kortex_move_it_config/gen3_move_it_config/launch/planning_pipeline.launch.xml new file mode 100644 index 00000000..02c62e47 --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/launch/planning_pipeline.launch.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/kortex_move_it_config/gen3_move_it_config/launch/run_benchmark_ompl.launch b/kortex_move_it_config/gen3_move_it_config/launch/run_benchmark_ompl.launch new file mode 100644 index 00000000..16cb2185 --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/launch/run_benchmark_ompl.launch @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_move_it_config/launch/sensor_manager.launch.xml b/kortex_move_it_config/gen3_move_it_config/launch/sensor_manager.launch.xml new file mode 100644 index 00000000..c1f110c6 --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/launch/sensor_manager.launch.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_move_it_config/launch/setup_assistant.launch b/kortex_move_it_config/gen3_move_it_config/launch/setup_assistant.launch new file mode 100644 index 00000000..42f9a764 --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/launch/setup_assistant.launch @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_move_it_config/launch/trajectory_execution.launch.xml b/kortex_move_it_config/gen3_move_it_config/launch/trajectory_execution.launch.xml new file mode 100644 index 00000000..c286c5fd --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/launch/trajectory_execution.launch.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_move_it_config/launch/warehouse.launch b/kortex_move_it_config/gen3_move_it_config/launch/warehouse.launch new file mode 100644 index 00000000..67c51037 --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/launch/warehouse.launch @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_move_it_config/launch/warehouse_settings.launch.xml b/kortex_move_it_config/gen3_move_it_config/launch/warehouse_settings.launch.xml new file mode 100644 index 00000000..e473b083 --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/launch/warehouse_settings.launch.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_move_it_config/package.xml b/kortex_move_it_config/gen3_move_it_config/package.xml new file mode 100644 index 00000000..df2ceb75 --- /dev/null +++ b/kortex_move_it_config/gen3_move_it_config/package.xml @@ -0,0 +1,35 @@ + + + gen3_move_it_config + 2.0.0 + + An automatically generated package with all the configuration and launch files for using the gen3 with the MoveIt! Motion Planning Framework + + Alexandre Vannobel + + + BSD + + http://moveit.ros.org/ + https://github.com/ros-planning/moveit/issues + https://github.com/ros-planning/moveit + + catkin + + moveit_ros_move_group + moveit_fake_controller_manager + moveit_kinematics + moveit_planners_ompl + moveit_ros_visualization + moveit_setup_assistant + joint_state_publisher + robot_state_publisher + xacro + + + kortex_description + kortex_description + industrial_trajectory_filters + + + diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/.setup_assistant b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/.setup_assistant new file mode 100644 index 00000000..e8017e1b --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/.setup_assistant @@ -0,0 +1,11 @@ +moveit_setup_assistant_config: + URDF: + package: kortex_description + relative_path: robots/gen3_robotiq_2f_85.xacro + xacro_args: --inorder arm:=gen3 gripper:=robotiq_2f_85 + SRDF: + relative_path: config/gen3_robotiq_2f_85.srdf + CONFIG: + author_name: Alexandre Vannobel + author_email: avannobel@kinova.ca + generated_timestamp: 1551813671 \ No newline at end of file diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/CMakeLists.txt b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/CMakeLists.txt new file mode 100644 index 00000000..78da7d15 --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/CMakeLists.txt @@ -0,0 +1,10 @@ +cmake_minimum_required(VERSION 2.8.3) +project(gen3_robotiq_2f_85_move_it_config) + +find_package(catkin REQUIRED) + +catkin_package() + +install(DIRECTORY launch DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} + PATTERN "setup_assistant.launch" EXCLUDE) +install(DIRECTORY config DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}) diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/chomp_planning.yaml b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/chomp_planning.yaml new file mode 100644 index 00000000..75258e53 --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/chomp_planning.yaml @@ -0,0 +1,18 @@ +planning_time_limit: 10.0 +max_iterations: 200 +max_iterations_after_collision_free: 5 +smoothness_cost_weight: 0.1 +obstacle_cost_weight: 1.0 +learning_rate: 0.01 +smoothness_cost_velocity: 0.0 +smoothness_cost_acceleration: 1.0 +smoothness_cost_jerk: 0.0 +ridge_factor: 0.01 +use_pseudo_inverse: false +pseudo_inverse_ridge_factor: 1e-4 +joint_update_limit: 0.1 +collision_clearence: 0.2 +collision_threshold: 0.07 +use_stochastic_descent: true +enable_failure_recovery: true +max_recovery_attempts: 5 \ No newline at end of file diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/fake_controllers.yaml b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/fake_controllers.yaml new file mode 100644 index 00000000..5a22332f --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/fake_controllers.yaml @@ -0,0 +1,13 @@ +controller_list: + - name: fake_arm_controller + joints: + - joint_1 + - joint_2 + - joint_3 + - joint_4 + - joint_5 + - joint_6 + - joint_7 + - name: fake_gripper_controller + joints: + - gripper_finger1_joint \ No newline at end of file diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/gen3_robotiq_2f_85.srdf b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/gen3_robotiq_2f_85.srdf new file mode 100644 index 00000000..5d7b8dd3 --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/gen3_robotiq_2f_85.srdf @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/joint_limits.yaml b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/joint_limits.yaml new file mode 100644 index 00000000..fc8246b3 --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/joint_limits.yaml @@ -0,0 +1,69 @@ +# joint_limits.yaml allows the dynamics properties specified in the URDF to be overwritten or augmented as needed +# Specific joint properties can be changed with the keys [max_position, min_position, max_velocity, max_acceleration] +# Joint limits can be turned off with [has_velocity_limits, has_acceleration_limits] +joint_limits: + joint_1: + has_velocity_limits: true + max_velocity: 0.86 + has_acceleration_limits: true + max_acceleration: 0.3 + joint_2: + has_velocity_limits: true + max_velocity: 0.86 + has_acceleration_limits: true + max_acceleration: 0.3 + joint_3: + has_velocity_limits: true + max_velocity: 0.86 + has_acceleration_limits: true + max_acceleration: 0.3 + joint_4: + has_velocity_limits: true + max_velocity: 0.86 + has_acceleration_limits: true + max_acceleration: 0.3 + joint_5: + has_velocity_limits: true + max_velocity: 0.86 + has_acceleration_limits: true + max_acceleration: 0.3 + joint_6: + has_velocity_limits: true + max_velocity: 0.86 + has_acceleration_limits: true + max_acceleration: 0.3 + joint_7: + has_velocity_limits: true + max_velocity: 0.86 + has_acceleration_limits: true + max_acceleration: 0.3 + gripper_finger1_finger_tip_joint: + has_velocity_limits: true + max_velocity: 2 + has_acceleration_limits: false + max_acceleration: 0 + gripper_finger1_inner_knuckle_joint: + has_velocity_limits: true + max_velocity: 2 + has_acceleration_limits: false + max_acceleration: 0 + gripper_finger1_joint: + has_velocity_limits: true + max_velocity: 2 + has_acceleration_limits: false + max_acceleration: 0 + gripper_finger2_finger_tip_joint: + has_velocity_limits: true + max_velocity: 2 + has_acceleration_limits: false + max_acceleration: 0 + gripper_finger2_inner_knuckle_joint: + has_velocity_limits: true + max_velocity: 2 + has_acceleration_limits: false + max_acceleration: 0 + gripper_finger2_joint: + has_velocity_limits: true + max_velocity: 2 + has_acceleration_limits: false + max_acceleration: 0 \ No newline at end of file diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/kinematics.yaml b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/kinematics.yaml new file mode 100644 index 00000000..cce65093 --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/kinematics.yaml @@ -0,0 +1,5 @@ +arm: + kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin + kinematics_solver_search_resolution: 0.005 + kinematics_solver_timeout: 0.005 + kinematics_solver_attempts: 3 diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/ompl_planning.yaml b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/ompl_planning.yaml new file mode 100644 index 00000000..a49c255b --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/ompl_planning.yaml @@ -0,0 +1,176 @@ +planner_configs: + SBL: + type: geometric::SBL + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + EST: + type: geometric::EST + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0 setup() + goal_bias: 0.05 # When close to goal select goal, with this probability. default: 0.05 + LBKPIECE: + type: geometric::LBKPIECE + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + border_fraction: 0.9 # Fraction of time focused on boarder default: 0.9 + min_valid_path_fraction: 0.5 # Accept partially valid moves above fraction. default: 0.5 + BKPIECE: + type: geometric::BKPIECE + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + border_fraction: 0.9 # Fraction of time focused on boarder default: 0.9 + failed_expansion_score_factor: 0.5 # When extending motion fails, scale score by factor. default: 0.5 + min_valid_path_fraction: 0.5 # Accept partially valid moves above fraction. default: 0.5 + KPIECE: + type: geometric::KPIECE + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + goal_bias: 0.05 # When close to goal select goal, with this probability. default: 0.05 + border_fraction: 0.9 # Fraction of time focused on boarder default: 0.9 (0.0,1.] + failed_expansion_score_factor: 0.5 # When extending motion fails, scale score by factor. default: 0.5 + min_valid_path_fraction: 0.5 # Accept partially valid moves above fraction. default: 0.5 + RRT: + type: geometric::RRT + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + goal_bias: 0.05 # When close to goal select goal, with this probability? default: 0.05 + RRTConnect: + type: geometric::RRTConnect + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + RRTstar: + type: geometric::RRTstar + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + goal_bias: 0.05 # When close to goal select goal, with this probability? default: 0.05 + delay_collision_checking: 1 # Stop collision checking as soon as C-free parent found. default 1 + TRRT: + type: geometric::TRRT + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + goal_bias: 0.05 # When close to goal select goal, with this probability? default: 0.05 + max_states_failed: 10 # when to start increasing temp. default: 10 + temp_change_factor: 2.0 # how much to increase or decrease temp. default: 2.0 + min_temperature: 10e-10 # lower limit of temp change. default: 10e-10 + init_temperature: 10e-6 # initial temperature. default: 10e-6 + frountier_threshold: 0.0 # dist new state to nearest neighbor to disqualify as frontier. default: 0.0 set in setup() + frountierNodeRatio: 0.1 # 1/10, or 1 nonfrontier for every 10 frontier. default: 0.1 + k_constant: 0.0 # value used to normalize expresssion. default: 0.0 set in setup() + PRM: + type: geometric::PRM + max_nearest_neighbors: 10 # use k nearest neighbors. default: 10 + PRMstar: + type: geometric::PRMstar + FMT: + type: geometric::FMT + num_samples: 1000 # number of states that the planner should sample. default: 1000 + radius_multiplier: 1.1 # multiplier used for the nearest neighbors search radius. default: 1.1 + nearest_k: 1 # use Knearest strategy. default: 1 + cache_cc: 1 # use collision checking cache. default: 1 + heuristics: 0 # activate cost to go heuristics. default: 0 + extended_fmt: 1 # activate the extended FMT*: adding new samples if planner does not finish successfully. default: 1 + BFMT: + type: geometric::BFMT + num_samples: 1000 # number of states that the planner should sample. default: 1000 + radius_multiplier: 1.0 # multiplier used for the nearest neighbors search radius. default: 1.0 + nearest_k: 1 # use the Knearest strategy. default: 1 + balanced: 0 # exploration strategy: balanced true expands one tree every iteration. False will select the tree with lowest maximum cost to go. default: 1 + optimality: 1 # termination strategy: optimality true finishes when the best possible path is found. Otherwise, the algorithm will finish when the first feasible path is found. default: 1 + heuristics: 1 # activates cost to go heuristics. default: 1 + cache_cc: 1 # use the collision checking cache. default: 1 + extended_fmt: 1 # Activates the extended FMT*: adding new samples if planner does not finish successfully. default: 1 + PDST: + type: geometric::PDST + STRIDE: + type: geometric::STRIDE + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + goal_bias: 0.05 # When close to goal select goal, with this probability. default: 0.05 + use_projected_distance: 0 # whether nearest neighbors are computed based on distances in a projection of the state rather distances in the state space itself. default: 0 + degree: 16 # desired degree of a node in the Geometric Near-neightbor Access Tree (GNAT). default: 16 + max_degree: 18 # max degree of a node in the GNAT. default: 12 + min_degree: 12 # min degree of a node in the GNAT. default: 12 + max_pts_per_leaf: 6 # max points per leaf in the GNAT. default: 6 + estimated_dimension: 0.0 # estimated dimension of the free space. default: 0.0 + min_valid_path_fraction: 0.2 # Accept partially valid moves above fraction. default: 0.2 + BiTRRT: + type: geometric::BiTRRT + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + temp_change_factor: 0.1 # how much to increase or decrease temp. default: 0.1 + init_temperature: 100 # initial temperature. default: 100 + frountier_threshold: 0.0 # dist new state to nearest neighbor to disqualify as frontier. default: 0.0 set in setup() + frountier_node_ratio: 0.1 # 1/10, or 1 nonfrontier for every 10 frontier. default: 0.1 + cost_threshold: 1e300 # the cost threshold. Any motion cost that is not better will not be expanded. default: inf + LBTRRT: + type: geometric::LBTRRT + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + goal_bias: 0.05 # When close to goal select goal, with this probability. default: 0.05 + epsilon: 0.4 # optimality approximation factor. default: 0.4 + BiEST: + type: geometric::BiEST + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + ProjEST: + type: geometric::ProjEST + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + goal_bias: 0.05 # When close to goal select goal, with this probability. default: 0.05 + LazyPRM: + type: geometric::LazyPRM + range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup() + LazyPRMstar: + type: geometric::LazyPRMstar + SPARS: + type: geometric::SPARS + stretch_factor: 3.0 # roadmap spanner stretch factor. multiplicative upper bound on path quality. It does not make sense to make this parameter more than 3. default: 3.0 + sparse_delta_fraction: 0.25 # delta fraction for connection distance. This value represents the visibility range of sparse samples. default: 0.25 + dense_delta_fraction: 0.001 # delta fraction for interface detection. default: 0.001 + max_failures: 1000 # maximum consecutive failure limit. default: 1000 + SPARStwo: + type: geometric::SPARStwo + stretch_factor: 3.0 # roadmap spanner stretch factor. multiplicative upper bound on path quality. It does not make sense to make this parameter more than 3. default: 3.0 + sparse_delta_fraction: 0.25 # delta fraction for connection distance. This value represents the visibility range of sparse samples. default: 0.25 + dense_delta_fraction: 0.001 # delta fraction for interface detection. default: 0.001 + max_failures: 5000 # maximum consecutive failure limit. default: 5000 +arm: + default_planner_config: RRTConnect + planner_configs: + - SBL + - EST + - LBKPIECE + - BKPIECE + - KPIECE + - RRT + - RRTConnect + - RRTstar + - TRRT + - PRM + - PRMstar + - FMT + - BFMT + - PDST + - STRIDE + - BiTRRT + - LBTRRT + - BiEST + - ProjEST + - LazyPRM + - LazyPRMstar + - SPARS + - SPARStwo + projection_evaluator: joints(joint_1,joint_2) + longest_valid_segment_fraction: 0.005 +gripper: + default_planner_config: RRTConnect + planner_configs: + - SBL + - EST + - LBKPIECE + - BKPIECE + - KPIECE + - RRT + - RRTConnect + - RRTstar + - TRRT + - PRM + - PRMstar + - FMT + - BFMT + - PDST + - STRIDE + - BiTRRT + - LBTRRT + - BiEST + - ProjEST + - LazyPRM + - LazyPRMstar + - SPARS + - SPARStwo \ No newline at end of file diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/ros_controllers.yaml b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/ros_controllers.yaml new file mode 100644 index 00000000..2ce1b65e --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/ros_controllers.yaml @@ -0,0 +1,23 @@ +joint_state_controller: + type: joint_state_controller/JointStateController + publish_rate: 50 +controller_list: + - name: "gen3_joint_trajectory_controller" + action_ns: follow_joint_trajectory + default: True + type: FollowJointTrajectory + joints: + - joint_1 + - joint_2 + - joint_3 + - joint_4 + - joint_5 + - joint_6 + - joint_7 + + - name: "robotiq_2f_85_gripper_controller" + action_ns: gripper_cmd + default: True + type: GripperCommand + joints: + - gripper_finger1_joint \ No newline at end of file diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/sensors_3d.yaml b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/sensors_3d.yaml new file mode 100644 index 00000000..d2955dcd --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/config/sensors_3d.yaml @@ -0,0 +1,3 @@ +# The name of this file shouldn't be changed, or else the Setup Assistant won't detect it +sensors: + - {} \ No newline at end of file diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/chomp_planning_pipeline.launch.xml b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/chomp_planning_pipeline.launch.xml new file mode 100644 index 00000000..1fd48ef9 --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/chomp_planning_pipeline.launch.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/default_warehouse_db.launch b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/default_warehouse_db.launch new file mode 100644 index 00000000..35770c59 --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/default_warehouse_db.launch @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/demo.launch b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/demo.launch new file mode 100644 index 00000000..6f4dcea4 --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/demo.launch @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + [move_group/fake_controller_joint_states] + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/fake_moveit_controller_manager.launch.xml b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/fake_moveit_controller_manager.launch.xml new file mode 100644 index 00000000..b5236b41 --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/fake_moveit_controller_manager.launch.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/gen3_robotiq_2f_85_moveit_controller_manager.launch.xml b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/gen3_robotiq_2f_85_moveit_controller_manager.launch.xml new file mode 100644 index 00000000..a488b54e --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/gen3_robotiq_2f_85_moveit_controller_manager.launch.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/gen3_robotiq_2f_85_moveit_sensor_manager.launch.xml b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/gen3_robotiq_2f_85_moveit_sensor_manager.launch.xml new file mode 100644 index 00000000..5d02698d --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/gen3_robotiq_2f_85_moveit_sensor_manager.launch.xml @@ -0,0 +1,3 @@ + + + diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/joystick_control.launch b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/joystick_control.launch new file mode 100644 index 00000000..9411f6e6 --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/joystick_control.launch @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/move_group.launch b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/move_group.launch new file mode 100644 index 00000000..3d4a83c4 --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/move_group.launch @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/moveit.rviz b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/moveit.rviz new file mode 100644 index 00000000..0877e1e7 --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/moveit.rviz @@ -0,0 +1,689 @@ +Panels: + - Class: rviz/Displays + Help Height: 84 + Name: Displays + Property Tree Widget: + Expanded: + - /MotionPlanning1 + Splitter Ratio: 0.74256 + Tree Height: 664 + - Class: rviz/Help + Name: Help + - Class: rviz/Views + Expanded: + - /Current View1 + Name: Views + Splitter Ratio: 0.5 +Visualization Manager: + Class: "" + Displays: + - Alpha: 0.5 + Cell Size: 1 + Class: rviz/Grid + Color: 160; 160; 164 + Enabled: true + Line Style: + Line Width: 0.03 + Value: Lines + Name: Grid + Normal Cell Count: 0 + Offset: + X: 0 + Y: 0 + Z: 0 + Plane: XY + Plane Cell Count: 10 + Reference Frame: + Value: true + - Class: moveit_rviz_plugin/MotionPlanning + Enabled: true + MoveIt_Goal_Tolerance: 0 + MoveIt_Planning_Time: 5 + MoveIt_Use_Constraint_Aware_IK: true + MoveIt_Warehouse_Host: 127.0.0.1 + MoveIt_Warehouse_Port: 33829 + Name: MotionPlanning + Planned Path: + Links: + base_bellow_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + base_footprint: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + base_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bl_caster_l_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bl_caster_r_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bl_caster_rotation_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + br_caster_l_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + br_caster_r_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + br_caster_rotation_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + double_stereo_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fl_caster_l_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fl_caster_r_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fl_caster_rotation_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fr_caster_l_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fr_caster_r_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fr_caster_rotation_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_mount_kinect_ir_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_mount_kinect_rgb_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_mount_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_mount_prosilica_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_pan_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_plate_frame: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_tilt_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_elbow_flex_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_forearm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_forearm_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_l_finger_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_l_finger_tip_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_motor_accelerometer_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_palm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_r_finger_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_r_finger_tip_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_shoulder_lift_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_shoulder_pan_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_upper_arm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_upper_arm_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_wrist_flex_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_wrist_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + laser_tilt_mount_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_elbow_flex_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_forearm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_forearm_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_l_finger_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_l_finger_tip_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_motor_accelerometer_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_palm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_r_finger_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_r_finger_tip_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_shoulder_lift_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_shoulder_pan_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_upper_arm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_upper_arm_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_wrist_flex_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_wrist_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + sensor_mount_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + torso_lift_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + Loop Animation: true + Robot Alpha: 0.5 + Show Robot Collision: false + Show Robot Visual: true + Show Trail: false + State Display Time: 0.05 s + Trajectory Topic: move_group/display_planned_path + Planning Metrics: + Payload: 1 + Show Joint Torques: false + Show Manipulability: false + Show Manipulability Index: false + Show Weight Limit: false + Planning Request: + Colliding Link Color: 255; 0; 0 + Goal State Alpha: 1 + Goal State Color: 250; 128; 0 + Interactive Marker Size: 0 + Joint Violation Color: 255; 0; 255 + Planning Group: left_arm + Query Goal State: true + Query Start State: false + Show Workspace: false + Start State Alpha: 1 + Start State Color: 0; 255; 0 + Planning Scene Topic: move_group/monitored_planning_scene + Robot Description: robot_description + Scene Geometry: + Scene Alpha: 1 + Scene Color: 50; 230; 50 + Scene Display Time: 0.2 + Show Scene Geometry: true + Voxel Coloring: Z-Axis + Voxel Rendering: Occupied Voxels + Scene Robot: + Attached Body Color: 150; 50; 150 + Links: + base_bellow_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + base_footprint: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + base_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bl_caster_l_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bl_caster_r_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + bl_caster_rotation_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + br_caster_l_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + br_caster_r_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + br_caster_rotation_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + double_stereo_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fl_caster_l_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fl_caster_r_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fl_caster_rotation_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fr_caster_l_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fr_caster_r_wheel_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + fr_caster_rotation_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_mount_kinect_ir_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_mount_kinect_rgb_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_mount_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_mount_prosilica_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_pan_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_plate_frame: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + head_tilt_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_elbow_flex_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_forearm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_forearm_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_l_finger_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_l_finger_tip_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_motor_accelerometer_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_palm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_r_finger_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_gripper_r_finger_tip_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_shoulder_lift_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_shoulder_pan_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_upper_arm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_upper_arm_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_wrist_flex_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + l_wrist_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + laser_tilt_mount_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_elbow_flex_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_forearm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_forearm_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_l_finger_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_l_finger_tip_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_motor_accelerometer_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_palm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_r_finger_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_gripper_r_finger_tip_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_shoulder_lift_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_shoulder_pan_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_upper_arm_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_upper_arm_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_wrist_flex_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + r_wrist_roll_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + sensor_mount_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + torso_lift_link: + Alpha: 1 + Show Axes: false + Show Trail: false + Value: true + Robot Alpha: 0.5 + Show Scene Robot: true + Value: true + Enabled: true + Global Options: + Background Color: 48; 48; 48 + Fixed Frame: /base_link + Name: root + Tools: + - Class: rviz/Interact + Hide Inactive Objects: true + - Class: rviz/MoveCamera + - Class: rviz/Select + Value: true + Views: + Current: + Class: rviz/XYOrbit + Distance: 2.9965 + Focal Point: + X: 0.113567 + Y: 0.10592 + Z: 2.23518e-07 + Name: Current View + Near Clip Distance: 0.01 + Pitch: 0.509797 + Target Frame: /base_link + Value: XYOrbit (rviz) + Yaw: 5.65995 + Saved: ~ +Window Geometry: + Displays: + collapsed: false + Height: 1337 + Help: + collapsed: false + Hide Left Dock: false + Hide Right Dock: false + Motion Planning: + collapsed: false + QMainWindow State: 000000ff00000000fd0000000100000000000002a2000004bcfc0200000005fb000000100044006900730070006c00610079007301000000410000032d000000dd00fffffffb0000000800480065006c00700000000342000000bb0000007600fffffffb0000000a0056006900650077007300000003b0000000b0000000b000fffffffb0000000c00430061006d00650072006100000002ff000001610000000000000000fb0000001e004d006f00740069006f006e00200050006c0061006e006e0069006e00670100000374000001890000017400ffffff0000047a000004bc00000001000000020000000100000002fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + Views: + collapsed: false + Width: 1828 + X: 459 + Y: -243 diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/moveit_rviz.launch b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/moveit_rviz.launch new file mode 100644 index 00000000..d15601df --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/moveit_rviz.launch @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/ompl_planning_pipeline.launch.xml b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/ompl_planning_pipeline.launch.xml new file mode 100644 index 00000000..6f683627 --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/ompl_planning_pipeline.launch.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/planning_context.launch b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/planning_context.launch new file mode 100644 index 00000000..9d3c41fe --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/planning_context.launch @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/planning_pipeline.launch.xml b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/planning_pipeline.launch.xml new file mode 100644 index 00000000..ab340f3d --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/planning_pipeline.launch.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/ros_controllers.launch b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/ros_controllers.launch new file mode 100644 index 00000000..00eb8311 --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/ros_controllers.launch @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/run_benchmark_ompl.launch b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/run_benchmark_ompl.launch new file mode 100644 index 00000000..0ff9e835 --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/run_benchmark_ompl.launch @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/sensor_manager.launch.xml b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/sensor_manager.launch.xml new file mode 100644 index 00000000..2e6a49f9 --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/sensor_manager.launch.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/setup_assistant.launch b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/setup_assistant.launch new file mode 100644 index 00000000..ed669a60 --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/setup_assistant.launch @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/trajectory_execution.launch.xml b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/trajectory_execution.launch.xml new file mode 100644 index 00000000..e2c24c84 --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/trajectory_execution.launch.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/warehouse.launch b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/warehouse.launch new file mode 100644 index 00000000..f4d4f962 --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/warehouse.launch @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/warehouse_settings.launch.xml b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/warehouse_settings.launch.xml new file mode 100644 index 00000000..e473b083 --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/launch/warehouse_settings.launch.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/package.xml b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/package.xml new file mode 100644 index 00000000..f5c53901 --- /dev/null +++ b/kortex_move_it_config/gen3_robotiq_2f_85_move_it_config/package.xml @@ -0,0 +1,35 @@ + + + gen3_robotiq_2f_85_move_it_config + 2.0.0 + + An automatically generated package with all the configuration and launch files for using the gen3_robotiq_2f_85 with the MoveIt! Motion Planning Framework + + Alexandre Vannobel + + + BSD + + http://moveit.ros.org/ + https://github.com/ros-planning/moveit/issues + https://github.com/ros-planning/moveit + + catkin + + moveit_ros_move_group + moveit_fake_controller_manager + moveit_kinematics + moveit_planners_ompl + moveit_ros_visualization + moveit_setup_assistant + joint_state_publisher + robot_state_publisher + xacro + industrial_trajectory_filters + + + kortex_description + kortex_description + + + diff --git a/kortex_move_it_config/kortex_move_it_config/CMakeLists.txt b/kortex_move_it_config/kortex_move_it_config/CMakeLists.txt new file mode 100644 index 00000000..5a74a9be --- /dev/null +++ b/kortex_move_it_config/kortex_move_it_config/CMakeLists.txt @@ -0,0 +1,4 @@ +cmake_minimum_required(VERSION 2.8.3) +project(kortex_move_it_config) +find_package(catkin REQUIRED) +catkin_metapackage() \ No newline at end of file diff --git a/kortex_move_it_config/kortex_move_it_config/package.xml b/kortex_move_it_config/kortex_move_it_config/package.xml new file mode 100644 index 00000000..f3fbf987 --- /dev/null +++ b/kortex_move_it_config/kortex_move_it_config/package.xml @@ -0,0 +1,37 @@ + + + kortex_move_it_config + 2.0.0 + + The metapackage for the automatically generated MoveIt! configuration packages + + Alexandre Vannobel + + + BSD + + http://moveit.ros.org/ + https://github.com/ros-planning/moveit/issues + https://github.com/ros-planning/moveit + + catkin + + moveit_ros_move_group + moveit_fake_controller_manager + moveit_kinematics + moveit_planners_ompl + moveit_ros_visualization + moveit_setup_assistant + joint_state_publisher + robot_state_publisher + xacro + + + kortex_description + + + + + + + diff --git a/kortex_move_it_config/readme.md b/kortex_move_it_config/readme.md new file mode 100644 index 00000000..6f9f7e22 --- /dev/null +++ b/kortex_move_it_config/readme.md @@ -0,0 +1,31 @@ + + +# Kortex MoveIt! Config + +## Overview +This folder contains all the auto-generated MoveIt! configuration ROS packages. These packages have been generated using the [MoveIt! Setup Assistant](http://docs.ros.org/kinetic/api/moveit_tutorials/html/doc/setup_assistant/setup_assistant_tutorial.html). + +## Naming + +The packages that don't use a gripper are named `ARM_move_it_config`, where "ARM" is the name of the arm you are using. +See the `kortex_description/arms` folder for a list of supported Kinova Kortex robots. (Currently only the Kinova Gen3 Ultra lightweight robot, but this will expand over time) + +The packages that use a gripper are named `ARM_GRIPPER_move_it_config`, where "ARM" is the name of the arm you are using and "GRIPPER" is the name of the gripper you are using. +See the `kortex_description/grippers` folder for a list of supported Kinova Kortex grippers. + +## Using MoveIt! with Kinova Kortex Robots + +Upon launching the main launch file of a `move_it_config` package, `move_group.launch` (normally launched from the real arm driver's launch file and the simulation launch file), the [C++](http://docs.ros.org/kinetic/api/moveit_tutorials/html/doc/move_group_interface/move_group_interface_tutorial.html) and [Python](http://docs.ros.org/kinetic/api/moveit_tutorials/html/doc/move_group_python_interface/move_group_python_interface_tutorial.html) interfaces for MoveIt will be enabled. +You will be able to use motion planning, configure the planning scene, send trajectories and send pose goals to the simulated robot from your own ROS nodes. + +You can take a look at our [MoveIt! Python example](../kortex_examples/python/move_it/example_move_it_trajectories.py) for a concrete example. diff --git a/kortex_tests/CMakeLists.txt b/kortex_tests/CMakeLists.txt deleted file mode 100644 index 5c86a90e..00000000 --- a/kortex_tests/CMakeLists.txt +++ /dev/null @@ -1,24 +0,0 @@ - -cmake_minimum_required(VERSION 2.8.3) -project(kortex_tests) - -add_compile_options(-std=c++11) -add_definitions(-D_OS_UNIX) - -## Find catkin and any catkin packages -find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation kortex_driver kortex_actuator_driver kortex_vision_config_driver kortex_device_manager) - -file(GLOB_RECURSE cpp_list RELATIVE ${PROJECT_SOURCE_DIR} "*.cpp") - -## Declare a catkin package -catkin_package() - -include_directories(include ${catkin_INCLUDE_DIRS}) -include_directories(include ${PROJECT_SOURCE_DIR}/src) - - -add_executable(kortex_tests_main src/main.cpp) -add_dependencies(kortex_tests_main ${catkin_EXPORTED_TARGETS}) -target_link_libraries(kortex_tests_main ${catkin_LIBRARIES} ) - - diff --git a/kortex_tests/package.xml b/kortex_tests/package.xml deleted file mode 100644 index c51d4a10..00000000 --- a/kortex_tests/package.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - kortex_tests - 1.0.0 - The kortex package that tests all others. - - KINOVA - - BSD - - catkin - roscpp - rospy - std_msgs - roscpp - rospy - std_msgs - roscpp - rospy - std_msgs - message_generation - kortex_driver - kortex_actuator_driver - kortex_vision_config_driver - kortex_device_manager - message_runtime - - - - - - - - diff --git a/kortex_tests/src/main.cpp b/kortex_tests/src/main.cpp deleted file mode 100644 index 921a8eda..00000000 --- a/kortex_tests/src/main.cpp +++ /dev/null @@ -1,73 +0,0 @@ -#include "ros/ros.h" -#include -#include -#include -#include -#include - -void ProfileCallback(const kortex_driver::ConfigurationChangeNotification::ConstPtr& notif) -{ - ROS_INFO("Received Notification"); -} - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "Tests"); - - ros::NodeHandle n; - - ros::Subscriber sub = n.subscribe("ConfigurationChangeTopic", 1000, ProfileCallback); - - ros::ServiceClient service_CreateUserProfile = n.serviceClient("CreateUserProfile"); - ros::ServiceClient service_DeleteUserProfile = n.serviceClient("DeleteUserProfile"); - ros::ServiceClient service_OnNotificationConfigurationChangeTopic = n.serviceClient("OnNotificationConfigurationChangeTopic"); - - kortex_driver::CreateUserProfile srvCreateUserProfile; - kortex_driver::DeleteUserProfile srvDeleteUserProfile; - kortex_driver::OnNotificationConfigurationChangeTopic srvOnNotificationConfigurationChangeTopic; - - srvCreateUserProfile.request.input.user_profile.username = "jcash"; - srvCreateUserProfile.request.input.user_profile.firstname = "Johnny"; - srvCreateUserProfile.request.input.user_profile.lastname = "Cash"; - srvCreateUserProfile.request.input.user_profile.application_data = "Custom Application Stuff"; - srvCreateUserProfile.request.input.password = "pwd"; - - if (service_OnNotificationConfigurationChangeTopic.call(srvOnNotificationConfigurationChangeTopic)) - { - ROS_INFO("topic registered"); - } - else - { - ROS_ERROR("registration error"); - } - - ros::Duration(2).sleep(); - - if (service_CreateUserProfile.call(srvCreateUserProfile)) - { - ROS_INFO("Created user profile with handle: %d", srvCreateUserProfile.response.output.identifier); - srvDeleteUserProfile.request.input.identifier = srvCreateUserProfile.response.output.identifier; - - if (service_DeleteUserProfile.call(srvDeleteUserProfile)) - { - ROS_INFO("Deleted successfully"); - } - else - { - ROS_ERROR("Failed to call DeleteUserProfile"); - return 1; - } - - } - else - { - ROS_ERROR("Failed to call CreateUserProfile"); - return 1; - } - - ros::Duration(2).sleep(); - - ros::spinOnce(); - - return 0; -} \ No newline at end of file diff --git a/kortex_vision_config_driver/CMakeLists.txt b/kortex_vision_config_driver/CMakeLists.txt deleted file mode 100644 index 5e9e60d5..00000000 --- a/kortex_vision_config_driver/CMakeLists.txt +++ /dev/null @@ -1,40 +0,0 @@ - -cmake_minimum_required(VERSION 2.8.3) -project(kortex_vision_config_driver) - -add_compile_options(-std=c++11) -add_definitions(-D_OS_UNIX) - -## find catkin and any catkin packages -find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation) - -file(GLOB_RECURSE cpp_list RELATIVE ${PROJECT_SOURCE_DIR} "src/*.cpp") - -## declare ROS messages and services -add_message_files(DIRECTORY msg) -add_message_files(DIRECTORY msg/non_generated) -add_service_files(DIRECTORY srv) -add_service_files(DIRECTORY srv/non_generated) - -## generate added messages and services -generate_messages(DEPENDENCIES std_msgs) - -## declare a catkin package -catkin_package() - -include_directories(include ${catkin_INCLUDE_DIRS}) -include_directories(include ${PROJECT_SOURCE_DIR}/src) -include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include) -include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/client) -include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/client_stubs) -include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/messages) -include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/common) -include_directories(include ${PROJECT_SOURCE_DIR}/src/util) - -link_directories(${PROJECT_SOURCE_DIR}/../kortex_api/lib/release) - -add_executable(${PROJECT_NAME} ${cpp_list}) - -target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES} KortexApi gcov) - -add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}_gencpp) diff --git a/kortex_vision_config_driver/RosGeneration.py b/kortex_vision_config_driver/RosGeneration.py deleted file mode 100644 index 26aeaad9..00000000 --- a/kortex_vision_config_driver/RosGeneration.py +++ /dev/null @@ -1,223 +0,0 @@ -#!/usr/bin/env python -### -# KINOVA (R) KORTEX (TM) -# -# Copyright (c) 2018 Kinova inc. All rights reserved. -# -# This software may be modified and distributed -# under the terms of the BSD 3-Clause license. -# -# Refer to the LICENSE file for details. -# -### - -import sys - -from google.protobuf.compiler import plugin_pb2 as plugin -from google.protobuf import json_format as json_f - -import jinja2 - -import itertools -import json -import types -import os -import sys - -from collections import OrderedDict - -from google.protobuf.descriptor_pb2 import DescriptorProto, EnumDescriptorProto, ServiceDescriptorProto, FieldDescriptorProto, OneofDescriptorProto - -# Class that holds a protobuf message and other details needed by the generator(Jinja2 template) -class DetailedMessage: - def __init__(self, message=None): - self.message = message - self.HasOneOf = "false" - self.oneOfList = [] - -# Class that holds a protobuf service and some other details needed by the generator(Jinja2 template) -class DetailedPackage: - def __init__(self, service=None): - self.name = "NoName" - self.service = service - -# Jinja2 function to render a file from a template -def render(tpl_path, context): - path, filename = os.path.split(tpl_path) - return jinja2.Environment(loader=jinja2.FileSystemLoader(path or './')).get_template(filename).render(**context) - -# main plugin function -def generate_code(request, response): - - # The context is the object sent to the Jinja2 template. - context = types.SimpleNamespace() - context.serviceVersion = 1 - - context.detailedPackages = [] - - MainFilePath = os.path.join(".", "src/main.cpp") - function_list = [] - fileIndex = 0 - file_map = OrderedDict() - - for proto_file in request.proto_file: - file_map[proto_file.name] = proto_file - - for filename, proto_file in file_map.items(): - context.detailedPackages.append(DetailedPackage()) - context.detailedPackages[fileIndex].name = proto_file.package.split(".")[-1] - context.detailedPackages[fileIndex].filename = proto_file.name.split(".")[0] - context.detailedPackages[fileIndex].namespace = proto_file.package.replace(".", "::") - context.detailedPackages[fileIndex].HasRPC = 0 - context.detailedPackages[fileIndex].HasMessage = 0 - - HeaderFilePath = os.path.join(".", "src/node.h") - CppFilePath = os.path.join(".", "src/node.cpp") - - # We use lower case to respect ROS standard coding style. - CppProtoConverterFilePath = os.path.join(".", "src/{}_proto_converter.cpp".format(proto_file.name.split(".")[0].lower())) - HeaderProtoConverterFilePath = os.path.join(".", "src/{}_proto_converter.h".format(proto_file.name.split(".")[0].lower())) - CppRosConverterFilePath = os.path.join(".", "src/{}_ros_converter.cpp".format(proto_file.name.split(".")[0].lower())) - HeaderRosConverterFilePath = os.path.join(".", "src/{}_ros_converter.h".format(proto_file.name.split(".")[0].lower())) - - list_detailedMessage = [] - list_detailedMethod = [] - - # for every item in the current proto file - for item, package in traverse(proto_file): - context.HasOneOf = 0 - - - if isinstance(item, EnumDescriptorProto): - context.item = item - - ros_enumPath = os.path.join(".", "msg/{}.msg".format(item.name)) - - with open(ros_enumPath, 'wt') as serviceFile: - serviceFile.write(render("./templates/ros_enum.jinja2", context.__dict__)) - # if this is a message - if isinstance(item, DescriptorProto): - tempMessage = DetailedMessage(item) - context.detailedPackages[fileIndex].HasMessage = 1 - - for member in item.field: - # If a member is part of a oneof, it will have this additional field. - if member.HasField("oneof_index"): - context.HasOneOf = 1 - tempMessage.HasOneOf = "true" - else: - context.HasOneOf = 0 - tempMessage.HasOneOf = "false" - - context.item = item - - # If the proto file contains a ONEOF we need to generate a separate file to handle it. - if context.HasOneOf == 1: - - # This line gets the list of ONEOF that is in the current message. - oneOfList = item.ListFields()[-1][1] - - tempMessage.oneOfList = item.ListFields()[-1][1] - ros_oneofPath = os.path.join(".", "msg/{}_{}.msg".format(item.name, oneOfList[0].name)) - - with open(ros_oneofPath, 'wt') as serviceFile: - serviceFile.write(render("./templates/ros_oneof.jinja2", context.__dict__)) - - - list_detailedMessage.append(tempMessage) - ros_messagePath = os.path.join(".", "msg/{}.msg".format(item.name)) - - # We call Jinja2 to generate a ROS message. - with open(ros_messagePath, 'wt') as serviceFile: - serviceFile.write(render("./templates/ros_message.jinja2", context.__dict__)) - - # if this is a service (a group of methods) - if isinstance(item, ServiceDescriptorProto): - for idx, method in enumerate(item.method): - context.item = method - if "Topic" not in method.name: - function_list.append(method.name) - ros_servicePath = os.path.join(".", "srv/{}.srv".format(method.name)) - else: - function_list.append("OnNotification{}".format(method.name)) - ros_servicePath = os.path.join(".", "srv/OnNotification{}.srv".format(method.name)) - - with open(ros_servicePath, 'wt') as serviceFile: - serviceFile.write(render("./templates/ros_service.jinja2", context.__dict__)) - - context.detailedPackages[fileIndex].service = item - context.detailedPackages[fileIndex].HasRPC = 1 - - context.currentPackageName = context.detailedPackages[fileIndex].name - context.currentNamespace = proto_file.package.replace(".", "::") - context.currentFilename = context.detailedPackages[fileIndex].filename - context.item = list_detailedMessage - - if context.detailedPackages[fileIndex].HasMessage == 1: - # We call Jinja2 to generate a proto/ROS converter for every protobuf message. - with open(CppProtoConverterFilePath, 'wt') as converterFile: - converterFile.write(render("./templates/proto_converter.cpp.jinja2", context.__dict__)) - with open(HeaderProtoConverterFilePath, 'wt') as converterFile: - converterFile.write(render("./templates/proto_converter.h.jinja2", context.__dict__)) - with open(CppRosConverterFilePath, 'wt') as converterFile: - converterFile.write(render("./templates/ros_converter.cpp.jinja2", context.__dict__)) - with open(HeaderRosConverterFilePath, 'wt') as converterFile: - converterFile.write(render("./templates/ros_converter.h.jinja2", context.__dict__)) - - fileIndex = fileIndex + 1 - - context.list_function = function_list - - # We use Jinja2 to generate the ROS node. - with open(HeaderFilePath, 'wt') as nodeFile: - nodeFile.write(render("./templates/NodeServices.h.jinja2", context.__dict__)) - with open(CppFilePath, 'wt') as nodeFile: - nodeFile.write(render("./templates/NodeServices.cpp.jinja2", context.__dict__)) - with open(MainFilePath, 'wt') as mainFile: - mainFile.write(render("./templates/main.jinja2", context.__dict__)) - -def traverse(proto_file): - # recursive function that browses a protobof item - def _traverse(package, items): - for item in items: - yield item, package - - if isinstance(item, DescriptorProto): - for enum in item.enum_type: - yield enum, package - - for nested in item.nested_type: - nested_package = package + item.name - - for nested_item in _traverse(nested, nested_package): - yield nested_item, nested_package - if isinstance(item, ServiceDescriptorProto): - for rpc in item.method: - yield rpc, package - - # returns a list of everything found in the proto file - return itertools.chain( - _traverse(proto_file.package, proto_file.enum_type), - _traverse(proto_file.package, proto_file.message_type), - _traverse(proto_file.package, proto_file.service), - ) - -if __name__ == '__main__': - # reads request message from stdin - data = sys.stdin.buffer.read() - - # parses request - request = plugin.CodeGeneratorRequest() - request.ParseFromString(data) - - # creates response - response = plugin.CodeGeneratorResponse() - - # generates code - generate_code(request, response) - - # serialises response message - output = response.SerializeToString() - - # writes to stdout - sys.stdout.buffer.write(output) \ No newline at end of file diff --git a/kortex_vision_config_driver/build/.gitignore b/kortex_vision_config_driver/build/.gitignore deleted file mode 100644 index e69de29b..00000000 diff --git a/kortex_vision_config_driver/kortex_vision_config_driver.sh b/kortex_vision_config_driver/kortex_vision_config_driver.sh deleted file mode 100755 index 011eee96..00000000 --- a/kortex_vision_config_driver/kortex_vision_config_driver.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -python3 -u RosGeneration.py - diff --git a/kortex_vision_config_driver/msg/ArmState.msg b/kortex_vision_config_driver/msg/ArmState.msg deleted file mode 100644 index 9d9db128..00000000 --- a/kortex_vision_config_driver/msg/ArmState.msg +++ /dev/null @@ -1,22 +0,0 @@ - -uint32 ARMSTATE_UNSPECIFIED = 0 - -uint32 ARMSTATE_BASE_INITIALIZATION = 1 - -uint32 ARMSTATE_IDLE = 2 - -uint32 ARMSTATE_INITIALIZATION = 3 - -uint32 ARMSTATE_IN_FAULT = 4 - -uint32 ARMSTATE_MAINTENANCE = 5 - -uint32 ARMSTATE_SERVOING_LOW_LEVEL = 6 - -uint32 ARMSTATE_SERVOING_READY = 7 - -uint32 ARMSTATE_SERVOING_PLAYING_SEQUENCE = 8 - -uint32 ARMSTATE_SERVOING_MANUALLY_CONTROLLED = 9 - -uint32 ARMSTATE_RESERVED = 255 diff --git a/kortex_vision_config_driver/msg/Connection.msg b/kortex_vision_config_driver/msg/Connection.msg deleted file mode 100644 index ca08b6c8..00000000 --- a/kortex_vision_config_driver/msg/Connection.msg +++ /dev/null @@ -1,5 +0,0 @@ - - -UserProfileHandle user_handle -string connection_information -uint32 connection_identifier \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/DeviceHandle.msg b/kortex_vision_config_driver/msg/DeviceHandle.msg deleted file mode 100644 index 49f84366..00000000 --- a/kortex_vision_config_driver/msg/DeviceHandle.msg +++ /dev/null @@ -1,5 +0,0 @@ - - -uint32 device_type -uint32 device_identifier -uint32 order \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/DeviceTypes.msg b/kortex_vision_config_driver/msg/DeviceTypes.msg deleted file mode 100644 index 5a55df07..00000000 --- a/kortex_vision_config_driver/msg/DeviceTypes.msg +++ /dev/null @@ -1,14 +0,0 @@ - -uint32 UNSPECIFIED_DEVICE_TYPE = 0 - -uint32 BASE = 1 - -uint32 VISION = 2 - -uint32 BIG_ACTUATOR = 3 - -uint32 SMALL_ACTUATOR = 4 - -uint32 INTERCONNECT = 5 - -uint32 GRIPPER = 6 diff --git a/kortex_vision_config_driver/msg/Empty.msg b/kortex_vision_config_driver/msg/Empty.msg deleted file mode 100644 index e69de29b..00000000 diff --git a/kortex_vision_config_driver/msg/FocusAction.msg b/kortex_vision_config_driver/msg/FocusAction.msg deleted file mode 100644 index 29ba2f8f..00000000 --- a/kortex_vision_config_driver/msg/FocusAction.msg +++ /dev/null @@ -1,10 +0,0 @@ - -uint32 FOCUSACTION_UNSPECIFIED = 0 - -uint32 FOCUSACTION_START_CONTINUOUS_FOCUS = 1 - -uint32 FOCUSACTION_PAUSE_CONTINUOUS_FOCUS = 2 - -uint32 FOCUSACTION_FOCUS_NOW = 3 - -uint32 FOCUSACTION_DISABLE_FOCUS = 4 diff --git a/kortex_vision_config_driver/msg/IntrinsicParameters.msg b/kortex_vision_config_driver/msg/IntrinsicParameters.msg deleted file mode 100644 index e3455c1a..00000000 --- a/kortex_vision_config_driver/msg/IntrinsicParameters.msg +++ /dev/null @@ -1,7 +0,0 @@ - -uint32 width -uint32 height -float32 principal_point_x -float32 principal_point_y -float32 focal_length_x -float32 focal_length_y \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/NotificationHandle.msg b/kortex_vision_config_driver/msg/NotificationHandle.msg deleted file mode 100644 index bd72812b..00000000 --- a/kortex_vision_config_driver/msg/NotificationHandle.msg +++ /dev/null @@ -1,2 +0,0 @@ - -uint32 identifier \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/NotificationOptions.msg b/kortex_vision_config_driver/msg/NotificationOptions.msg deleted file mode 100644 index 6ff46842..00000000 --- a/kortex_vision_config_driver/msg/NotificationOptions.msg +++ /dev/null @@ -1,5 +0,0 @@ - - -uint32 type -uint32 rate_m_sec -float32 threshold_value \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/NotificationType.msg b/kortex_vision_config_driver/msg/NotificationType.msg deleted file mode 100644 index 881cd9a6..00000000 --- a/kortex_vision_config_driver/msg/NotificationType.msg +++ /dev/null @@ -1,8 +0,0 @@ - -uint32 NOTIFICATION_TYPE_UNSPECIFIED = 0 - -uint32 NOTIFICATION_TYPE_THRESHOLD = 1 - -uint32 NOTIFICATION_TYPE_FIX_RATE = 2 - -uint32 NOTIFICATION_TYPE_EVENT = 3 diff --git a/kortex_vision_config_driver/msg/OptionInformation.msg b/kortex_vision_config_driver/msg/OptionInformation.msg deleted file mode 100644 index d89df3ae..00000000 --- a/kortex_vision_config_driver/msg/OptionInformation.msg +++ /dev/null @@ -1,11 +0,0 @@ - - -uint32 sensor - -uint32 option -bool supported -bool read_only -float32 minimum -float32 maximum -float32 step -float32 default_value \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/OptionValue.msg b/kortex_vision_config_driver/msg/OptionValue.msg deleted file mode 100644 index a69f5305..00000000 --- a/kortex_vision_config_driver/msg/OptionValue.msg +++ /dev/null @@ -1,6 +0,0 @@ - - -uint32 sensor - -uint32 option -float32 value \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/Permission.msg b/kortex_vision_config_driver/msg/Permission.msg deleted file mode 100644 index c5399e9c..00000000 --- a/kortex_vision_config_driver/msg/Permission.msg +++ /dev/null @@ -1,8 +0,0 @@ - -uint32 NO_PERMISSION = 0 - -uint32 READ_PERMISSION = 1 - -uint32 UPDATE_PERMISSION = 2 - -uint32 DELETE_PERMISSION = 4 diff --git a/kortex_vision_config_driver/msg/SafetyHandle.msg b/kortex_vision_config_driver/msg/SafetyHandle.msg deleted file mode 100644 index bd72812b..00000000 --- a/kortex_vision_config_driver/msg/SafetyHandle.msg +++ /dev/null @@ -1,2 +0,0 @@ - -uint32 identifier \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/SafetyNotification.msg b/kortex_vision_config_driver/msg/SafetyNotification.msg deleted file mode 100644 index 36d88894..00000000 --- a/kortex_vision_config_driver/msg/SafetyNotification.msg +++ /dev/null @@ -1,11 +0,0 @@ - - -SafetyHandle safety_handle - -uint32 value - -Timestamp timestamp - -UserProfileHandle user_handle - -Connection connection \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/SafetyStatusValue.msg b/kortex_vision_config_driver/msg/SafetyStatusValue.msg deleted file mode 100644 index 74ffcfcd..00000000 --- a/kortex_vision_config_driver/msg/SafetyStatusValue.msg +++ /dev/null @@ -1,8 +0,0 @@ - -uint32 SAFETY_STATUS_UNSPECIFIED = 0 - -uint32 SAFETY_STATUS_WARNING = 1 - -uint32 SAFETY_STATUS_ERROR = 2 - -uint32 SAFETY_STATUS_NORMAL = 3 diff --git a/kortex_vision_config_driver/msg/SensorFocusAction.msg b/kortex_vision_config_driver/msg/SensorFocusAction.msg deleted file mode 100644 index c5db660d..00000000 --- a/kortex_vision_config_driver/msg/SensorFocusAction.msg +++ /dev/null @@ -1,5 +0,0 @@ - - -uint32 sensor - -uint32 focus_action \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/Timestamp.msg b/kortex_vision_config_driver/msg/Timestamp.msg deleted file mode 100644 index 5e60508c..00000000 --- a/kortex_vision_config_driver/msg/Timestamp.msg +++ /dev/null @@ -1,3 +0,0 @@ - -uint32 sec -uint32 usec \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/Unit.msg b/kortex_vision_config_driver/msg/Unit.msg deleted file mode 100644 index c019aeba..00000000 --- a/kortex_vision_config_driver/msg/Unit.msg +++ /dev/null @@ -1,28 +0,0 @@ - -uint32 UNSPECIFIED_UNIT = 0 - -uint32 CELSIUS = 1 - -uint32 AMPERE = 2 - -uint32 VOLT = 3 - -uint32 METER_PER_SECOND = 4 - -uint32 DEGREE_PER_SECOND = 5 - -uint32 METER_PER_SECOND_2 = 6 - -uint32 DEGREE_PER_SECOND_2 = 7 - -uint32 NEWTON = 8 - -uint32 NEWTON_METER = 9 - -uint32 KILOGRAM = 10 - -uint32 DEGREE = 11 - -uint32 TICK = 12 - -uint32 DEGREE_PER_MILLISECOND = 13 diff --git a/kortex_vision_config_driver/msg/UserProfileHandle.msg b/kortex_vision_config_driver/msg/UserProfileHandle.msg deleted file mode 100644 index 3038380d..00000000 --- a/kortex_vision_config_driver/msg/UserProfileHandle.msg +++ /dev/null @@ -1,3 +0,0 @@ - -uint32 identifier -uint32 permission \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/non_generated/ApiOptions.msg b/kortex_vision_config_driver/msg/non_generated/ApiOptions.msg deleted file mode 100644 index 471fddd8..00000000 --- a/kortex_vision_config_driver/msg/non_generated/ApiOptions.msg +++ /dev/null @@ -1 +0,0 @@ -uint32 timeout_ms \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/non_generated/KortexError.msg b/kortex_vision_config_driver/msg/non_generated/KortexError.msg deleted file mode 100644 index 3ff9c32c..00000000 --- a/kortex_vision_config_driver/msg/non_generated/KortexError.msg +++ /dev/null @@ -1,3 +0,0 @@ -uint32 code -uint32 subCode -string description \ No newline at end of file diff --git a/kortex_vision_config_driver/package.xml b/kortex_vision_config_driver/package.xml deleted file mode 100644 index b4ede718..00000000 --- a/kortex_vision_config_driver/package.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - kortex_vision_config_driver - 1.0.0 - The kortex package that configure a vision module. - - - KINOVA - - - - - - BSD - - catkin - roscpp - rospy - std_msgs - roscpp - rospy - std_msgs - roscpp - rospy - std_msgs - message_generation - message_runtime - - - - - - - - diff --git a/kortex_vision_config_driver/protos/Common.options b/kortex_vision_config_driver/protos/Common.options deleted file mode 100644 index fe8e4afe..00000000 --- a/kortex_vision_config_driver/protos/Common.options +++ /dev/null @@ -1,16 +0,0 @@ -// -// KINOVA (R) KORTEX (TM) -// -// Copyright (c) 2018 Kinova inc. All rights reserved. -// -// This software may be modified and distributed -// under the terms of the BSD 3-Clause license. -// -// Refer to the LICENSE file for details. -// -// - -Kinova.Api.Common.DeviceTypes long_names:false -Kinova.Api.Common.SafetyStatusValue long_names:false -Kinova.Api.Common.NotificationType long_names:false -Kinova.Api.Common.Unit long_names:false \ No newline at end of file diff --git a/kortex_vision_config_driver/protos/Common.proto b/kortex_vision_config_driver/protos/Common.proto deleted file mode 100644 index ee69ed74..00000000 --- a/kortex_vision_config_driver/protos/Common.proto +++ /dev/null @@ -1,140 +0,0 @@ -/* - * KINOVA (R) KORTEX (TM) - * - * Copyright (c) 2018 Kinova inc. All rights reserved. - * - * This software may be modified and distributed - * under the terms of the BSD 3-Clause license. - * - * Refer to the LICENSE file for details. - * - */ - -syntax = "proto3"; - -package Kinova.Api.Common; - -// List of admissible device types -enum DeviceTypes { - UNSPECIFIED_DEVICE_TYPE = 0; // Unspecified device type - BASE = 1; // Base module - VISION = 2; // Vision module - BIG_ACTUATOR = 3; // Big actuator module - SMALL_ACTUATOR = 4; // Small actuator module - INTERCONNECT = 5; // Interconnect module - GRIPPER = 6; // Gripper module -} - -// Identifies a device -message DeviceHandle { - DeviceTypes device_type = 1; // Device type - uint32 device_identifier = 2; // Unique device identifier (used with other services) - uint32 order = 3; // Unique value indicating the order of that device versus the others to facilitate representation -} - -// List of admissible safety statuses -enum SafetyStatusValue { - SAFETY_STATUS_UNSPECIFIED = 0; // Unspecified safety status - SAFETY_STATUS_WARNING = 1; // Warning safety reached - SAFETY_STATUS_ERROR = 2; // Error safety reached - SAFETY_STATUS_NORMAL = 3; // Safety is off -} - -// List of admissible permissions. Used as bitfields -enum Permission { - NO_PERMISSION = 0; // No permission - READ_PERMISSION = 1; // Read permission. Refers to an entity that can be read - UPDATE_PERMISSION = 2; // Update permission. Refers to an entity that can be modified - DELETE_PERMISSION = 4; // Delete permission. Refers to an entity that can be deleted -} - -// List of admissible notification types -enum NotificationType { - NOTIFICATION_TYPE_UNSPECIFIED = 0; // Unspecified notification - NOTIFICATION_TYPE_THRESHOLD = 1; // Threshold notification. Refers to a notification sent beyond a specific threshold (future) - NOTIFICATION_TYPE_FIX_RATE = 2; // Fix rate notification. Refers to a notification sent at a predetermined fix rate (future) - NOTIFICATION_TYPE_EVENT = 3; // Event type notification. Refers to a notification sent in response to an event -} - -// List of admissible units used throughout API methods -enum Unit { - UNSPECIFIED_UNIT = 0; // Unspecified unit - CELSIUS = 1; // Degree Celsius - AMPERE = 2; // Ampere - VOLT = 3; // Volt - METER_PER_SECOND = 4; // Meter per second - DEGREE_PER_SECOND = 5; // Degree per second - METER_PER_SECOND_2 = 6; // Meter per second squared - DEGREE_PER_SECOND_2 = 7; // Degree per second squared - NEWTON = 8; // Newton - NEWTON_METER =9; // Newton * meter - KILOGRAM = 10; // Kilogram - DEGREE = 11; // Degree - TICK = 12; // Tick - DEGREE_PER_MILLISECOND = 13;// Degre per millisecond -} - -// Message used when no information needs to be exchanged between client application and robot, and vice versa -message Empty { -} - -// Specifies options associated to a notification -message NotificationOptions { - NotificationType type = 1; // Type of notification - uint32 rate_m_sec = 2; // Rate value (in meters per second) (if applicable) - float threshold_value = 3; // Threshold value (if applicable) -} - -// Identifies a safety -message SafetyHandle { - uint32 identifier = 1; // Safety identifier -} - -// Identifies a notification -message NotificationHandle { - uint32 identifier = 1; // Notification identifier -} - -// Message that contains a safety event -message SafetyNotification { - SafetyHandle safety_handle = 1; // Safety handle - SafetyStatusValue value = 2; // New safety status - Timestamp timestamp = 3; // Event timestamp - UserProfileHandle user_handle = 4; // User that caused the safety event - Connection connection = 5; // Connection that caused the safety event -} - -// Timestamp based on Epoch (00:00:00 Thursday, January 1, 1970) -message Timestamp { - uint32 sec = 1; // Number of seconds that have elapsed since Epoch - uint32 usec = 2; // Number of microseconds that have elapsed since the last second (0-999999) -} - -// Identifies a user profile -message UserProfileHandle { - uint32 identifier = 1; // User profile identifier - fixed32 permission = 2; // Must use 'Permission' as bitwise -} - -// Idenfities a connection -message Connection { - UserProfileHandle user_handle = 1; // User profile handle, or set to zero if no user logged in - string connection_information = 2; // Connection info (e.g. IP address with port number) - uint32 connection_identifier = 3; // Connection identifier -} - -// List of admissible arm states -enum ArmState -{ - ARMSTATE_UNSPECIFIED = 0; // Unspecified arm state - ARMSTATE_BASE_INITIALIZATION = 1; // Cannot be reported as the Base initialization must be completed before allowing user connection - ARMSTATE_IDLE = 2; // Base initialization succeeded - ARMSTATE_INITIALIZATION = 3; // Arm is being initialized - ARMSTATE_IN_FAULT = 4; // Arm is in fault - ARMSTATE_MAINTENANCE = 5; // Arm is in maintenance - ARMSTATE_SERVOING_LOW_LEVEL = 6; // Arm is in low-level servoing mode - ARMSTATE_SERVOING_READY = 7; // Arm is ready to be controlled - ARMSTATE_SERVOING_PLAYING_SEQUENCE = 8; // Arm is currently being controlled via a sequence - ARMSTATE_SERVOING_MANUALLY_CONTROLLED = 9; // Arm is currently being controlled manually - ARMSTATE_RESERVED = 255; // For debugging, this state must never be reported outside the base. this means that a state is not mapped correctly -} \ No newline at end of file diff --git a/kortex_vision_config_driver/protos/VisionConfig.proto b/kortex_vision_config_driver/protos/VisionConfig.proto deleted file mode 100644 index da602e4c..00000000 --- a/kortex_vision_config_driver/protos/VisionConfig.proto +++ /dev/null @@ -1,210 +0,0 @@ -/* - * KINOVA (R) KORTEX (TM) - * - * Copyright (c) 2018 Kinova inc. All rights reserved. - * - * This software may be modified and distributed - * under the terms of the BSD 3-Clause license. - * - * Refer to the LICENSE file for details. - * - */ - -syntax = "proto3"; - -import public "Common.proto"; - -package Kinova.Api.VisionConfig; - -// Service to configure the Vision Module -service VisionConfig {//@PROXY_ID=5 @ERROR=Kinova.Api.Error - - // Sets sensor settings (resolution, frame rate, etc) - rpc SetSensorSettings (SensorSettings) returns (Kinova.Api.Common.Empty);//@RPC_ID=1 - - // Gets sensor settings (resolution, frame rate, etc) - rpc GetSensorSettings (SensorIdentifier) returns (SensorSettings);//@RPC_ID=2 - - // Reads option value from the sensor - rpc GetOptionValue (OptionIdentifier) returns (OptionValue);//@RPC_ID=3 - - // Writes new value to sensor option - rpc SetOptionValue (OptionValue) returns (Kinova.Api.Common.Empty);//@RPC_ID=4 - - // Reads option information from the sensor - rpc GetOptionInformation (OptionIdentifier) returns (OptionInformation);//@RPC_ID=5 - - // Subscribes to Vision configuration notifications - rpc VisionTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=6 @PUB_SUB=VisionNotification - - // Do a focus action - rpc DoSensorFocusAction (SensorFocusAction) returns (Kinova.Api.Common.Empty);//@RPC_ID=7 - - // Gets sensor intrinsic parameters - rpc GetIntrinsicParameters (SensorIdentifier) returns (IntrinsicParameters);//@RPC_ID=8 -} - -// Enumeration used to identify VisionConfig current version -enum ServiceVersion { - RESERVED_0 = 0; // Reserved - CURRENT_VERSION = 1; // Current version -} - -// Main settings - resolution, frame rate, bit rate - for the chosen sensor (color or depth). -message SensorSettings { - Sensor sensor = 1; // The sensor (color or depth) - Resolution resolution = 2; // The resolution setting - FrameRate frame_rate = 3; // Frame rate setting - BitRate bit_rate = 4; // Maximum encoded bit rate -} - -// Select the Vision module camera sensor to configure. -enum Sensor { - SENSOR_UNSPECIFIED = 0; // Unspecified Sensor - SENSOR_COLOR = 1; // Select the Vision module color sensor - SENSOR_DEPTH = 2; // Select the Vision module depth sensor -} - -// Select the camera resolution. -enum Resolution { - RESOLUTION_UNSPECIFIED = 0; // Unspecified resolution - RESOLUTION_320x240 = 1; // 320 x 240 pixels (supported on color sensor only) - RESOLUTION_424x240 = 2; // 424 x 240 pixels (supported on depth sensor only) - RESOLUTION_480x270 = 3; // 480 x 270 pixels (supported on depth sensor only) - RESOLUTION_640x480 = 4; // 640 x 480 pixels (supported on color sensor only) - RESOLUTION_1280x720 = 5; // 1280 x 720 pixels (HD) (supported on color sensor only) - RESOLUTION_1920x1080 = 6; // 1920 x 1080 pixels (full HD) (supported on color sensor only) -} - -// Select the camera frame rate. -enum FrameRate { - FRAMERATE_UNSPECIFIED = 0; // Unspecified frame rate - FRAMERATE_6_FPS = 1; // 6 frames per second (supported on depth sensor only) - FRAMERATE_15_FPS = 2; // 15 frames per second - FRAMERATE_30_FPS = 3; // 30 frame per second -} - -// Select the maximum encoded bit rate, in Mbps. -enum BitRate { - BITRATE_UNSPECIFIED = 0; // Unspecified bit rate (supported on depth sensor only) - BITRATE_10_MBPS = 1; // 10 Mbps maximum bit rate (supported on color sensor only) - BITRATE_15_MBPS = 2; // 15 Mbps maximum bit rate (supported on color sensor only) - BITRATE_20_MBPS = 3; // 20 Mbps maximum bit rate (supported on color sensor only) - BITRATE_25_MBPS = 4; // 25 Mbps maximum bit rate (supported on color sensor only) -} - -// Identifies the sensor to configure. -message SensorIdentifier { - Sensor sensor = 1; // Sensor -} - -// Identifies the sensor and the option to configure. -message OptionIdentifier { - Sensor sensor = 1; // The sensor to configure - Option option = 2; // The option to configure on the sensor -} - -// Identifies the value of the particular option for the sensor. -message OptionValue { - Sensor sensor = 1; // The sensor to configure (color or depth) - Option option = 2; // The option to configure - float value = 3; // The desired value for the option -} - -// Packages information about the optional settings for the chosen sensor -message OptionInformation { - Sensor sensor = 1; // The sensor (color or depth) - Option option = 2; // The option - bool supported = 3; // Is the option supported by the chosen sensor? - bool read_only = 4; // Is the option read-only, or can it be changed? - float minimum = 5; // Minimum value for the option - float maximum = 6; // Maximum value for the option - float step = 7; // Step size for the option value (if it takes on discrete values) - float default_value = 8; // Default value for the option -} - -// List of admissible Vision module options. !!!!! -enum Option { - OPTION_UNSPECIFIED = 0; // Unspecifed Option - OPTION_BACKLIGHT_COMPENSATION = 1; // Enable / disable color backlight compensation (unsupported) - OPTION_BRIGHTNESS = 2; // Color image brightness (supported on color sensor only: -4.0 to 4.0, step 1.0) - OPTION_CONTRAST = 3; // Color image contrast (supported on color sensor only: -4.0 to 4.0, step 1.0) - OPTION_EXPOSURE = 4; // Controls exposure time of color camera. Setting any value will disable auto exposure (supported on depth sensor only: 20.0 to 166000.0, step 20.0) - OPTION_GAIN = 5; // Color image gain (supported on depth sensor only: 16.0 to 248.0, step 1.0) - OPTION_GAMMA = 6; // Color image gamma setting (unsupported) - OPTION_HUE = 7; // Color image hue (unsupported) - OPTION_SATURATION = 8; // Color image saturation setting (supported on color sensor only: -4.0 to 4.0, step 1.0) - OPTION_SHARPNESS = 9; // Color image sharpness setting (unsupported) - OPTION_WHITE_BALANCE = 10; // Controls white balance of color image. Setting any value will disable auto white balance (unsupported) - OPTION_ENABLE_AUTO_EXPOSURE = 11; // Enable / disable color image auto-exposure (supported on depth sensor only: 0.0 to 1.0, step 1.0) - OPTION_ENABLE_AUTO_WHITE_BALANCE = 12; // Enable / disable color image auto-white-balance (unsupported) - OPTION_VISUAL_PRESET = 13; // Provide access to several recommend sets of option presets for the depth camera (supported on depth sensor only: 0.0 to 5.0, step 1.0) - OPTION_LASER_POWER = 14; // Power of the projector, with 0 meaning projector off (unsupported) - OPTION_ACCURACY = 15; // Sets the number of patterns projected per frame. The higher the accuracy value the more patterns projected (unsupported) - OPTION_MOTION_RANGE = 16; // Motion vs. Range trade-off, with lower values allowing for better motion sensitivity and higher values allowing for better depth range (unsupported) - OPTION_FILTER_OPTION = 17; // Sets the filter to apply to each depth frame. Each one of the filter is optimized per the application requirements (unsupported) - OPTION_CONFIDENCE_THRESHOLD = 18; // The confidence level threshold used by the Depth algorithm pipe to set whether a pixel will get a valid range or will be marked with invalid range (unsupported) - OPTION_EMITTER_ENABLED = 19; // Laser Emitter enabled (unsupported) - OPTION_FRAMES_QUEUE_SIZE = 20; // Number of frames the user is allowed to keep per stream. Trying to hold-on to more frames will cause frame-drops (supported on depth sensor only: 0.0 to 32.0, step 1.0) - OPTION_TOTAL_FRAME_DROPS = 21; // Total number of detected frame drops from all streams (unsupported) - OPTION_AUTO_EXPOSURE_MODE = 22; // Auto-Exposure modes: Static, Anti-Flicker and Hybrid (unsupported) - OPTION_POWER_LINE_FREQUENCY = 23; // Power Line Frequency control for anti-flickering Off/50Hz/60Hz/Auto (unsupported) - OPTION_ASIC_TEMPERATURE = 24; // Current Asic Temperature (supported on depth sensor only: Read Only -40.0 to 125.0) - OPTION_ERROR_POLLING_ENABLED = 25; // Disable error handling (supported on depth sensor only: 0.0 to 1.0, step 1.0) - OPTION_PROJECTOR_TEMPERATURE = 26; // Current Projector Temperature (unsupported) - OPTION_OUTPUT_TRIGGER_ENABLED = 27; // Enable / disable trigger to be outputed from the camera to any external device on every depth frame (supported on depth sensor only: 0.0 to 1.0, step 1.0) - OPTION_MOTION_MODULE_TEMPERATURE = 28; // Current Motion-Module Temperature (unsupported) - OPTION_DEPTH_UNITS = 29; // Number of meters represented by a single depth unit (supported on depth sensor only: 0.0001 to 0.0100, step 0.000001) - OPTION_ENABLE_MOTION_CORRECTION = 30; // Enable/Disable automatic correction of the motion data (unsupported) - OPTION_AUTO_EXPOSURE_PRIORITY = 31; // Allows sensor to dynamically ajust the frame rate depending on lighting conditions (unsupported) - OPTION_COLOR_SCHEME = 32; // Color scheme for data visualization (unsupported) - OPTION_HISTOGRAM_EQUALIZATION_ENABLED = 33; // Perform histogram equalization post-processing on the depth data (unsupported) - OPTION_MIN_DISTANCE = 34; // Minimal distance to the target (unsupported) - OPTION_MAX_DISTANCE = 35; // Maximum distance to the target (unsupported) - OPTION_TEXTURE_SOURCE = 36; // Texture mapping stream unique ID (unsupported) - OPTION_FILTER_MAGNITUDE = 37; // The 2D-filter effect. The specific interpretation is given within the context of the filter (unsupported) - OPTION_FILTER_SMOOTH_ALPHA = 38; // 2D-filter parameter controls the weight/radius for smoothing (unsupported) - OPTION_FILTER_SMOOTH_DELTA = 39; // 2D-filter range/validity threshold (unsupported) - OPTION_HOLES_FILL = 40; // Enhance depth data post-processing with holes filling where appropriate (unsupported) - OPTION_STEREO_BASELINE = 41; // The distance in mm between the first and the second imagers in stereo-based depth cameras (supported on depth sensor only: 55.241055 to 55.241055, step 0.0) - OPTION_AUTO_EXPOSURE_CONVERGE_STEP = 42; // Allows dynamically ajust the converge step value of the target exposure in Auto-Exposure algorithm (unsupported) -} - -// Identifies the sensor and the focus action to perform. -message SensorFocusAction { - Sensor sensor = 1; // The sensor on which to perform the focus action - FocusAction focus_action = 2; // The focus action to perform on the sensor -} - -// Select the focus action to perform (start/pause continuous, focus now, disable). Supported only with Color sensor. -enum FocusAction { - FOCUSACTION_UNSPECIFIED = 0; // Unspecified focus action - FOCUSACTION_START_CONTINUOUS_FOCUS = 1; // Start continuous focus - FOCUSACTION_PAUSE_CONTINUOUS_FOCUS = 2; // Pause continuous focus - FOCUSACTION_FOCUS_NOW = 3; // Focus now (single-shot) - FOCUSACTION_DISABLE_FOCUS = 4; // Disable focus -} - -// List of admissible Vision module events. -enum VisionEvent { - UNSPECIFIED_VISION_EVENT = 0; // Unspecified vision event - SENSOR_SETTINGS_CHANGED = 1; // Sensor setting changed event - OPTION_VALUE_CHANGED = 2; // Option value changed event -} - -// Message that contains Vision module event -message VisionNotification { - VisionEvent event = 1; // Vision event - Sensor sensor = 2; // The sensor that caused the notification (if applicable) - Option option = 3; // The option that caused the notification (if applicable) -} - -// Sensor intrinsic parameters -message IntrinsicParameters { - uint32 width = 1; // Width of the image in pixels - uint32 height = 2; // Height of the image in pixels - float principal_point_x = 3; // Horizontal coordinate of the principal point of the image, as a pixel offset from the left edge - float principal_point_y = 4; // Vertical coordinate of the principal point of the image, as a pixel offset from the top edge - float focal_length_x = 5; // Focal length of the image plane, as a multiple of pixel width - float focal_length_y = 6; // Focal length of the image plane, as a multiple of pixel height -} diff --git a/kortex_vision_config_driver/readme.md b/kortex_vision_config_driver/readme.md deleted file mode 100644 index b8e9efab..00000000 --- a/kortex_vision_config_driver/readme.md +++ /dev/null @@ -1,138 +0,0 @@ - - -# Kortex Vision Config Module - -## Overview -This package implements a ROS node that allows direct communication with a Gen3 Vision module. Direct communication means that either the computer running the node has an Ethernet cable directly connected to a Vision module or that it is connected to a robot using the device routing system. Use this package if you want to: - -* Change a configuration setting on the Vision module. -* Get information about the configuration settings of the Vision module. - -### License - -The source code is released under a [BSD 3-Clause license](../LICENSE). - -**Author: Kinova inc.
-Affiliation: [Kinova inc.](https://www.kinovarobotics.com/)
-Maintainer: Kinova inc. support@kinovarobotics.com** - -This package has been tested under ROS Kinetic and Ubuntu 16.04. - -## Installation - -### Building from Source - -#### Dependencies - -- [ROS (Robot Operating System)](http://wiki.ros.org) robotics middleware -- [protobuf](https://developers.google.com/protocol-buffers/) - -```cpp -git clone https://github.com/protocolbuffers/protobuf --branch 3.5.1.1 (you must use this specific version) -``` -Follow these [instructions](https://github.com/protocolbuffers/protobuf/blob/master/src/README.md) to build and install protobuf and its compiler. - -#### Building - -To build from source, clone the latest version from this repository into your catkin workspace and compile the package using - - cd catkin_workspace/src - git clone https://github.com/Kinovarobotics/ros_kortex.git - cd ../ - sudo ./src/ros_kortex/build.sh - -## Usage - -### Launch file -The launch file for this node can be found in the [kortex_bringup](../kortex_bringup/readme.md) package. - -### Starting with rosrun - -rosrun kortex\_vision\_config\_driver kortex\_vision\_config\_driver 192.168.1.10 - -In the command above, you would be running the kortex\_vision\_config\_driver node on a Gen3 robot with IP address 192.168.1.10. - -## Nodes - -### Published Topics - -* **`/KortexError`** -

Every Kortex error will be published here.

- - | Type | Name | Description | - |:---:|:---:|:---:| - | uint32 | code | Error code, see enum in the ErrorCodes class. | - | uint32 | subcode | Sub error code, see enum in the ErrorCodes class. | - | string | description | Error details | - -### Services -Most of the services supported by this node are generated from the [ C++ Kortex API](https://github.com/Kinovarobotics/kortex). You can find the documentation [here](https://github.com/Kinovarobotics/kortex/blob/master/api_cpp/doc/markdown/index.md). - -Example: -If you want to call the ROS service **`GetActuatorCount`** generated by the C++ method [GetActuatorCount](https://github.com/Kinovarobotics/kortex/blob/master/api_cpp/doc/markdown/references/summary_VisionConfig.md), you would initialize your service as follows: - - ros::ServiceClient client_GetSensorSettings = n.serviceClient("GetSensorSettings"); - -#### Non generated -* **`SetApiOptions`** -

Modifies the Kortex API options. Once this service is called, the options set will affect every future call to the node.

- -* **`SetDeviceID`** -

Modifies the target device (device routing feature) of the node. The default value is 0.

- -### Messages -Most of the messages supported by this node are generated from the [C++ Kortex API](https://github.com/Kinovarobotics/kortex). You can find the documentation [here](https://github.com/Kinovarobotics/kortex/blob/master/api_cpp/doc/markdown/index.md). - -#### Non generated -* **`ApiOptions`** -

Represents all the Kortex API options.

- -* **`KortexError`** -

Represents a Kortex API error.

- -### Protos files -The **protos** directory contains the protobuf files from where the MSG, SRV and source files are generated. The content of this folder should not be modified. - -### Template files -The **templates** directory contains all the JINJA2 files needed by the protoc generator. For more details on the generation process, see the **Generation** section. - -| File | Description | -|:---:|:---:| -| main.jinja2 | Used to generate src/main.cpp | -| NodeServices.cpp.jinja2 | Used to generate src/node.cpp | -| NodeServices.h.jinja2 | Used to generate src/node.h | -| proto_converterCPP.jinja2 | Used to generate every src/*_proto\_converter.cpp file | -| proto_converterHeader.jinja2 | Used to generate every src/*_proto\_converter.h file | -| ros_converterCPP.jinja2 | Used to generate every src/*_ros\_converter.cpp file | -| ros_converterHeader.jinja2 | Used to generate every src/*_proto\_converter.h file | -| ros_enum.jinja2 | Used to generate every msg/*.msg file that represents a protobuf enum | -| ros_message.jinja2 | Used to generate every msg/*.msg file that represents a protobuf message | -| ros_oneof.jinja2 | Used to generate every msg/*.msg file that represents a protobuf oneof | -| ros_service.jinja2 | Used to generate every msg/*.msg file that represents a protobuf RPC | - -## Generation -

-The generation process is based on a custom protobuf plugin. Basically, most of the generation process is in the RosGeneration.py file located in the package root directory. Before launching the generation make sure you have the Python JINJA2 module installed. -

- -To launch the generation of this package: - -1. Open a terminal window. -1. Browse to the package root directory [YOUR\_ROS\_WORKSPACE]/src/ros\_kortex/kortex\_vision\_config\_driver/ -1. Ensure that the file kortex\_vision\_config\_driver.sh can be executed. If not then chmod +x kortex\_vision\_config\_driver.sh -1. Run the command: protoc --plugin=protoc-gen-custom=kortex\_vision\_config\_driver.sh -I./protos/ --custom_out=./build ./protos/\*.prot -1. The result of the generation should be in the following folders: - * /src - * /msg - * /srv - diff --git a/kortex_vision_config_driver/src/common_proto_converter.cpp b/kortex_vision_config_driver/src/common_proto_converter.cpp deleted file mode 100644 index 40b20611..00000000 --- a/kortex_vision_config_driver/src/common_proto_converter.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "common_proto_converter.h" - - -int ToProtoData(kortex_vision_config_driver::DeviceHandle input, DeviceHandle *output) -{ - output->set_device_type((Kinova::Api::Common::DeviceTypes)input.device_type); - output->set_device_identifier(input.device_identifier); - output->set_order(input.order); - - return 0; -} -int ToProtoData(kortex_vision_config_driver::Empty input, Empty *output) -{ - - return 0; -} -int ToProtoData(kortex_vision_config_driver::NotificationOptions input, NotificationOptions *output) -{ - output->set_type((Kinova::Api::Common::NotificationType)input.type); - output->set_rate_m_sec(input.rate_m_sec); - output->set_threshold_value(input.threshold_value); - - return 0; -} -int ToProtoData(kortex_vision_config_driver::SafetyHandle input, SafetyHandle *output) -{ - output->set_identifier(input.identifier); - - return 0; -} -int ToProtoData(kortex_vision_config_driver::NotificationHandle input, NotificationHandle *output) -{ - output->set_identifier(input.identifier); - - return 0; -} -int ToProtoData(kortex_vision_config_driver::SafetyNotification input, SafetyNotification *output) -{ - ToProtoData(input.safety_handle, output->mutable_safety_handle()); - output->set_value((Kinova::Api::Common::SafetyStatusValue)input.value); - ToProtoData(input.timestamp, output->mutable_timestamp()); - ToProtoData(input.user_handle, output->mutable_user_handle()); - ToProtoData(input.connection, output->mutable_connection()); - - return 0; -} -int ToProtoData(kortex_vision_config_driver::Timestamp input, Timestamp *output) -{ - output->set_sec(input.sec); - output->set_usec(input.usec); - - return 0; -} -int ToProtoData(kortex_vision_config_driver::UserProfileHandle input, UserProfileHandle *output) -{ - output->set_identifier(input.identifier); - output->set_permission(input.permission); - - return 0; -} -int ToProtoData(kortex_vision_config_driver::Connection input, Connection *output) -{ - ToProtoData(input.user_handle, output->mutable_user_handle()); - output->set_connection_information(input.connection_information); - output->set_connection_identifier(input.connection_identifier); - - return 0; -} diff --git a/kortex_vision_config_driver/src/common_proto_converter.h b/kortex_vision_config_driver/src/common_proto_converter.h deleted file mode 100644 index 29706196..00000000 --- a/kortex_vision_config_driver/src/common_proto_converter.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_CommonPROTO_CONVERTER_H_ -#define _KORTEX_CommonPROTO_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "kortex_vision_config_driver/DeviceHandle.h" -#include "kortex_vision_config_driver/Empty.h" -#include "kortex_vision_config_driver/NotificationOptions.h" -#include "kortex_vision_config_driver/SafetyHandle.h" -#include "kortex_vision_config_driver/NotificationHandle.h" -#include "kortex_vision_config_driver/SafetyNotification.h" -#include "kortex_vision_config_driver/Timestamp.h" -#include "kortex_vision_config_driver/UserProfileHandle.h" -#include "kortex_vision_config_driver/Connection.h" - - -using namespace Kinova::Api::Common; - -int ToProtoData(kortex_vision_config_driver::DeviceHandle intput, DeviceHandle *output); -int ToProtoData(kortex_vision_config_driver::Empty intput, Empty *output); -int ToProtoData(kortex_vision_config_driver::NotificationOptions intput, NotificationOptions *output); -int ToProtoData(kortex_vision_config_driver::SafetyHandle intput, SafetyHandle *output); -int ToProtoData(kortex_vision_config_driver::NotificationHandle intput, NotificationHandle *output); -int ToProtoData(kortex_vision_config_driver::SafetyNotification intput, SafetyNotification *output); -int ToProtoData(kortex_vision_config_driver::Timestamp intput, Timestamp *output); -int ToProtoData(kortex_vision_config_driver::UserProfileHandle intput, UserProfileHandle *output); -int ToProtoData(kortex_vision_config_driver::Connection intput, Connection *output); - -#endif \ No newline at end of file diff --git a/kortex_vision_config_driver/src/common_ros_converter.cpp b/kortex_vision_config_driver/src/common_ros_converter.cpp deleted file mode 100644 index 5c3c2b0e..00000000 --- a/kortex_vision_config_driver/src/common_ros_converter.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "common_ros_converter.h" - - -int ToRosData(DeviceHandle input, kortex_vision_config_driver::DeviceHandle &output) -{ - output.device_type = input.device_type(); - output.device_identifier = input.device_identifier(); - output.order = input.order(); - - return 0; -} -int ToRosData(Empty input, kortex_vision_config_driver::Empty &output) -{ - - return 0; -} -int ToRosData(NotificationOptions input, kortex_vision_config_driver::NotificationOptions &output) -{ - output.type = input.type(); - output.rate_m_sec = input.rate_m_sec(); - output.threshold_value = input.threshold_value(); - - return 0; -} -int ToRosData(SafetyHandle input, kortex_vision_config_driver::SafetyHandle &output) -{ - output.identifier = input.identifier(); - - return 0; -} -int ToRosData(NotificationHandle input, kortex_vision_config_driver::NotificationHandle &output) -{ - output.identifier = input.identifier(); - - return 0; -} -int ToRosData(SafetyNotification input, kortex_vision_config_driver::SafetyNotification &output) -{ - ToRosData(input.safety_handle(), output.safety_handle); - output.value = input.value(); - ToRosData(input.timestamp(), output.timestamp); - ToRosData(input.user_handle(), output.user_handle); - ToRosData(input.connection(), output.connection); - - return 0; -} -int ToRosData(Timestamp input, kortex_vision_config_driver::Timestamp &output) -{ - output.sec = input.sec(); - output.usec = input.usec(); - - return 0; -} -int ToRosData(UserProfileHandle input, kortex_vision_config_driver::UserProfileHandle &output) -{ - output.identifier = input.identifier(); - output.permission = input.permission(); - - return 0; -} -int ToRosData(Connection input, kortex_vision_config_driver::Connection &output) -{ - ToRosData(input.user_handle(), output.user_handle); - output.connection_information = input.connection_information(); - output.connection_identifier = input.connection_identifier(); - - return 0; -} diff --git a/kortex_vision_config_driver/src/common_ros_converter.h b/kortex_vision_config_driver/src/common_ros_converter.h deleted file mode 100644 index 59335369..00000000 --- a/kortex_vision_config_driver/src/common_ros_converter.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_CommonROS_CONVERTER_H_ -#define _KORTEX_CommonROS_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "kortex_vision_config_driver/DeviceHandle.h" -#include "kortex_vision_config_driver/Empty.h" -#include "kortex_vision_config_driver/NotificationOptions.h" -#include "kortex_vision_config_driver/SafetyHandle.h" -#include "kortex_vision_config_driver/NotificationHandle.h" -#include "kortex_vision_config_driver/SafetyNotification.h" -#include "kortex_vision_config_driver/Timestamp.h" -#include "kortex_vision_config_driver/UserProfileHandle.h" -#include "kortex_vision_config_driver/Connection.h" - - -using namespace Kinova::Api::Common; - -int ToRosData(DeviceHandle input, kortex_vision_config_driver::DeviceHandle &output); -int ToRosData(Empty input, kortex_vision_config_driver::Empty &output); -int ToRosData(NotificationOptions input, kortex_vision_config_driver::NotificationOptions &output); -int ToRosData(SafetyHandle input, kortex_vision_config_driver::SafetyHandle &output); -int ToRosData(NotificationHandle input, kortex_vision_config_driver::NotificationHandle &output); -int ToRosData(SafetyNotification input, kortex_vision_config_driver::SafetyNotification &output); -int ToRosData(Timestamp input, kortex_vision_config_driver::Timestamp &output); -int ToRosData(UserProfileHandle input, kortex_vision_config_driver::UserProfileHandle &output); -int ToRosData(Connection input, kortex_vision_config_driver::Connection &output); - -#endif \ No newline at end of file diff --git a/kortex_vision_config_driver/src/main.cpp b/kortex_vision_config_driver/src/main.cpp deleted file mode 100644 index 1fd92255..00000000 --- a/kortex_vision_config_driver/src/main.cpp +++ /dev/null @@ -1,76 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "node.h" - -#include -#include - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "VisionConfig_Services"); - - uint32_t device_id = 0; - - ros::NodeHandle n; - bool valid_ip = false; - - if(argc > 2) - { - stringstream tempId; - tempId << argv[2]; - tempId >> device_id; - - if(tempId.fail() || tempId.bad()) - { - ROS_INFO("ERROR - Bad device ID, shutting down the node..."); - ros::shutdown(); - return 0; - } - ROS_INFO("Connecting to IP = %s - device ID = %s", argv[1], argv[2]); - } - else if(argc > 1) - { - ROS_INFO("Connecting to IP = %s", argv[1]); - } - else - { - ROS_INFO("You need to provide, at least, an IP adresse as the first parameter. An optional device ID can also be passed if you are using the device routing feature. ex: rosrun package node 192.168.1.10 [device_id]"); - ros::shutdown(); - return 0; - } - - VisionConfig_Services services_object(argv[1], n, device_id); - - ros::ServiceServer serviceSetDeviceID = n.advertiseService("SetDeviceID", &VisionConfig_Services::SetDeviceID, &services_object); - ros::ServiceServer serviceSetApiOptions = n.advertiseService("SetApiOptions", &VisionConfig_Services::SetApiOptions, &services_object); - - ros::ServiceServer serviceSetSensorSettings = n.advertiseService("SetSensorSettings", &VisionConfig_Services::SetSensorSettings, &services_object); - ros::ServiceServer serviceGetSensorSettings = n.advertiseService("GetSensorSettings", &VisionConfig_Services::GetSensorSettings, &services_object); - ros::ServiceServer serviceGetOptionValue = n.advertiseService("GetOptionValue", &VisionConfig_Services::GetOptionValue, &services_object); - ros::ServiceServer serviceSetOptionValue = n.advertiseService("SetOptionValue", &VisionConfig_Services::SetOptionValue, &services_object); - ros::ServiceServer serviceGetOptionInformation = n.advertiseService("GetOptionInformation", &VisionConfig_Services::GetOptionInformation, &services_object); - ros::ServiceServer serviceOnNotificationVisionTopic = n.advertiseService("OnNotificationVisionTopic", &VisionConfig_Services::OnNotificationVisionTopic, &services_object); - ros::ServiceServer serviceDoSensorFocusAction = n.advertiseService("DoSensorFocusAction", &VisionConfig_Services::DoSensorFocusAction, &services_object); - ros::ServiceServer serviceGetIntrinsicParameters = n.advertiseService("GetIntrinsicParameters", &VisionConfig_Services::GetIntrinsicParameters, &services_object); - - - ROS_INFO("Node's services initialized correctly."); - - ros::spin(); - - return 1; -} \ No newline at end of file diff --git a/kortex_vision_config_driver/src/node.cpp b/kortex_vision_config_driver/src/node.cpp deleted file mode 100644 index 683ab0ba..00000000 --- a/kortex_vision_config_driver/src/node.cpp +++ /dev/null @@ -1,325 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "node.h" -#include "common_ros_converter.h" -#include "common_proto_converter.h" -#include "visionconfig_ros_converter.h" -#include "visionconfig_proto_converter.h" -VisionConfig_Services::VisionConfig_Services(char* ip, ros::NodeHandle& n, uint32_t device_id) : m_n(n) -{ - m_transport = new TransportClientUdp(); - m_transport->connect(ip, 10000); - - m_router = new RouterClient(m_transport, [](KError err) { cout << "_________ callback error _________" << err.toString(); }); - m_CurrentDeviceID = device_id; - m_apiOptions.timeout_ms = 3000; - - m_visionconfig = new VisionConfig::VisionConfigClient(m_router); - //If the Device ID is different than 0, it means that we are using the feature DEVICE ROUTING. - if(m_CurrentDeviceID != 0) - { - m_SessionManager = new SessionManager(m_router); - auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); - - createSessionInfo.set_username("admin"); - createSessionInfo.set_password("admin"); - createSessionInfo.set_session_inactivity_timeout(35000); - - m_SessionManager->CreateSession(createSessionInfo); - } - - m_pub_Error = m_n.advertise("KortexError", 1000); - m_pub_VisionTopic = m_n.advertise("VisionTopic", 1000);std::this_thread::sleep_for(std::chrono::milliseconds(2000)); -} - -bool VisionConfig_Services::SetDeviceID(kortex_vision_config_driver::SetDeviceID::Request &req, kortex_vision_config_driver::SetDeviceID::Response &res) -{ - if(m_CurrentDeviceID == 0) - { - auto sessionManager = new SessionManager(m_router); - auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); - - createSessionInfo.set_username("admin"); - createSessionInfo.set_password("admin"); - createSessionInfo.set_session_inactivity_timeout(35000); - - sessionManager->CreateSession(createSessionInfo); - } - - m_CurrentDeviceID = req.device_id; -} - -bool VisionConfig_Services::SetApiOptions(kortex_vision_config_driver::SetApiOptions::Request &req, kortex_vision_config_driver::SetApiOptions::Response &res) -{ - m_apiOptions.timeout_ms = req.input.timeout_ms; - - return true; -} - - - -bool VisionConfig_Services::SetSensorSettings(kortex_vision_config_driver::SetSensorSettings::Request &req, kortex_vision_config_driver::SetSensorSettings::Response &res) -{ - SensorSettings input; - ToProtoData(req.input, &input); - Empty output; - kortex_vision_config_driver::KortexError result_error; - - try - { - m_visionconfig->SetSensorSettings(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.what(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool VisionConfig_Services::GetSensorSettings(kortex_vision_config_driver::GetSensorSettings::Request &req, kortex_vision_config_driver::GetSensorSettings::Response &res) -{ - SensorIdentifier input; - ToProtoData(req.input, &input); - SensorSettings output; - kortex_vision_config_driver::KortexError result_error; - - try - { - output = m_visionconfig->GetSensorSettings(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.what(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool VisionConfig_Services::GetOptionValue(kortex_vision_config_driver::GetOptionValue::Request &req, kortex_vision_config_driver::GetOptionValue::Response &res) -{ - OptionIdentifier input; - ToProtoData(req.input, &input); - OptionValue output; - kortex_vision_config_driver::KortexError result_error; - - try - { - output = m_visionconfig->GetOptionValue(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.what(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool VisionConfig_Services::SetOptionValue(kortex_vision_config_driver::SetOptionValue::Request &req, kortex_vision_config_driver::SetOptionValue::Response &res) -{ - OptionValue input; - ToProtoData(req.input, &input); - Empty output; - kortex_vision_config_driver::KortexError result_error; - - try - { - m_visionconfig->SetOptionValue(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.what(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool VisionConfig_Services::GetOptionInformation(kortex_vision_config_driver::GetOptionInformation::Request &req, kortex_vision_config_driver::GetOptionInformation::Response &res) -{ - OptionIdentifier input; - ToProtoData(req.input, &input); - OptionInformation output; - kortex_vision_config_driver::KortexError result_error; - - try - { - output = m_visionconfig->GetOptionInformation(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.what(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} - -bool VisionConfig_Services::OnNotificationVisionTopic(kortex_vision_config_driver::OnNotificationVisionTopic::Request &req, kortex_vision_config_driver::OnNotificationVisionTopic::Response &res) -{ - NotificationOptions input; - ToProtoData(req.input, &input); - NotificationHandle output; - kortex_vision_config_driver::KortexError result_error; - - try - { - std::function< void (VisionConfig::VisionNotification) > callback = std::bind(&VisionConfig_Services::cb_VisionTopic, this, std::placeholders::_1); - output = m_visionconfig->OnNotificationVisionTopic(callback, input); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.what(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} -void VisionConfig_Services::cb_VisionTopic(VisionConfig::VisionNotification notif) -{ - kortex_vision_config_driver::VisionNotification ros_msg; - ToRosData(notif, ros_msg); - m_pub_VisionTopic.publish(ros_msg); -} - -bool VisionConfig_Services::DoSensorFocusAction(kortex_vision_config_driver::DoSensorFocusAction::Request &req, kortex_vision_config_driver::DoSensorFocusAction::Response &res) -{ - SensorFocusAction input; - ToProtoData(req.input, &input); - Empty output; - kortex_vision_config_driver::KortexError result_error; - - try - { - m_visionconfig->DoSensorFocusAction(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.what(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - return true; -} - -bool VisionConfig_Services::GetIntrinsicParameters(kortex_vision_config_driver::GetIntrinsicParameters::Request &req, kortex_vision_config_driver::GetIntrinsicParameters::Response &res) -{ - SensorIdentifier input; - ToProtoData(req.input, &input); - IntrinsicParameters output; - kortex_vision_config_driver::KortexError result_error; - - try - { - output = m_visionconfig->GetIntrinsicParameters(input, m_CurrentDeviceID, m_apiOptions); - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.what(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - ToRosData(output, res.output); - return true; -} diff --git a/kortex_vision_config_driver/src/node.h b/kortex_vision_config_driver/src/node.h deleted file mode 100644 index 2e4a454e..00000000 --- a/kortex_vision_config_driver/src/node.h +++ /dev/null @@ -1,94 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_SERVICES_H_ -#define _KORTEX_SERVICES_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include "kortex_vision_config_driver/SetSensorSettings.h" -#include "kortex_vision_config_driver/GetSensorSettings.h" -#include "kortex_vision_config_driver/GetOptionValue.h" -#include "kortex_vision_config_driver/SetOptionValue.h" -#include "kortex_vision_config_driver/GetOptionInformation.h" -#include "kortex_vision_config_driver/OnNotificationVisionTopic.h" -#include "kortex_vision_config_driver/VisionNotification.h" -#include "kortex_vision_config_driver/DoSensorFocusAction.h" -#include "kortex_vision_config_driver/GetIntrinsicParameters.h" -#include "kortex_vision_config_driver/KortexError.h" -#include "kortex_vision_config_driver/SetDeviceID.h" -#include "kortex_vision_config_driver/SetApiOptions.h" - -#include "kortex_vision_config_driver/ApiOptions.h" - -using namespace std; -using namespace Kinova::Api; -using namespace Kinova::Api::Common; -using namespace Kinova::Api::VisionConfig; - -class VisionConfig_Services -{ - public: - VisionConfig_Services(char* ip, ros::NodeHandle& n, uint32_t device_id); - bool SetDeviceID(kortex_vision_config_driver::SetDeviceID::Request &req, kortex_vision_config_driver::SetDeviceID::Response &res); - bool SetApiOptions(kortex_vision_config_driver::SetApiOptions::Request &req, kortex_vision_config_driver::SetApiOptions::Response &res); - - - bool SetSensorSettings(kortex_vision_config_driver::SetSensorSettings::Request &req, kortex_vision_config_driver::SetSensorSettings::Response &res); - bool GetSensorSettings(kortex_vision_config_driver::GetSensorSettings::Request &req, kortex_vision_config_driver::GetSensorSettings::Response &res); - bool GetOptionValue(kortex_vision_config_driver::GetOptionValue::Request &req, kortex_vision_config_driver::GetOptionValue::Response &res); - bool SetOptionValue(kortex_vision_config_driver::SetOptionValue::Request &req, kortex_vision_config_driver::SetOptionValue::Response &res); - bool GetOptionInformation(kortex_vision_config_driver::GetOptionInformation::Request &req, kortex_vision_config_driver::GetOptionInformation::Response &res); - bool OnNotificationVisionTopic(kortex_vision_config_driver::OnNotificationVisionTopic::Request &req, kortex_vision_config_driver::OnNotificationVisionTopic::Response &res); - void cb_VisionTopic(VisionNotification notif); - bool DoSensorFocusAction(kortex_vision_config_driver::DoSensorFocusAction::Request &req, kortex_vision_config_driver::DoSensorFocusAction::Response &res); - bool GetIntrinsicParameters(kortex_vision_config_driver::GetIntrinsicParameters::Request &req, kortex_vision_config_driver::GetIntrinsicParameters::Response &res); - - -private: - TransportClientUdp* m_transport; - RouterClient* m_router; - - VisionConfigClient* m_visionconfig; - uint32_t m_CurrentDeviceID; - RouterClientSendOptions m_apiOptions; - - SessionManager* m_SessionManager; - - ros::NodeHandle m_n; - ros::Publisher m_pub_Error; - ros::Publisher m_pub_VisionTopic; -}; -#endif diff --git a/kortex_vision_config_driver/src/util/diagnostic.h b/kortex_vision_config_driver/src/util/diagnostic.h deleted file mode 100644 index f0199870..00000000 --- a/kortex_vision_config_driver/src/util/diagnostic.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) 2018 Kinova inc. All rights reserved. - * - * This software may be modified and distributed under the - * terms of the BSD 3-Clause license. - * - * Refer to the LICENSE file for details. - * - */ -#include - -struct kortex_error -{ - int error_code; - std::string description; -}; \ No newline at end of file diff --git a/kortex_vision_config_driver/src/util/math_util.h b/kortex_vision_config_driver/src/util/math_util.h deleted file mode 100644 index bf935386..00000000 --- a/kortex_vision_config_driver/src/util/math_util.h +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright (c) 2018 Kinova inc. All rights reserved. - * - * This software may be modified and distributed under the - * terms of the BSD 3-Clause license. - * - * Refer to the LICENSE file for details. - * - */ -#include - -#define TO_RAD(degree) degree * M_PI / 180.0 \ No newline at end of file diff --git a/kortex_vision_config_driver/src/visionconfig_proto_converter.cpp b/kortex_vision_config_driver/src/visionconfig_proto_converter.cpp deleted file mode 100644 index dbec65ae..00000000 --- a/kortex_vision_config_driver/src/visionconfig_proto_converter.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "visionconfig_proto_converter.h" - -#include "common_proto_converter.h" - - -int ToProtoData(kortex_vision_config_driver::SensorSettings input, SensorSettings *output) -{ - output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); - output->set_resolution((Kinova::Api::VisionConfig::Resolution)input.resolution); - output->set_frame_rate((Kinova::Api::VisionConfig::FrameRate)input.frame_rate); - output->set_bit_rate((Kinova::Api::VisionConfig::BitRate)input.bit_rate); - - return 0; -} -int ToProtoData(kortex_vision_config_driver::SensorIdentifier input, SensorIdentifier *output) -{ - output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); - - return 0; -} -int ToProtoData(kortex_vision_config_driver::OptionIdentifier input, OptionIdentifier *output) -{ - output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); - output->set_option((Kinova::Api::VisionConfig::Option)input.option); - - return 0; -} -int ToProtoData(kortex_vision_config_driver::OptionValue input, OptionValue *output) -{ - output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); - output->set_option((Kinova::Api::VisionConfig::Option)input.option); - output->set_value(input.value); - - return 0; -} -int ToProtoData(kortex_vision_config_driver::OptionInformation input, OptionInformation *output) -{ - output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); - output->set_option((Kinova::Api::VisionConfig::Option)input.option); - output->set_supported(input.supported); - output->set_read_only(input.read_only); - output->set_minimum(input.minimum); - output->set_maximum(input.maximum); - output->set_step(input.step); - output->set_default_value(input.default_value); - - return 0; -} -int ToProtoData(kortex_vision_config_driver::SensorFocusAction input, SensorFocusAction *output) -{ - output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); - output->set_focus_action((Kinova::Api::VisionConfig::FocusAction)input.focus_action); - - return 0; -} -int ToProtoData(kortex_vision_config_driver::VisionNotification input, VisionNotification *output) -{ - output->set_event((Kinova::Api::VisionConfig::VisionEvent)input.event); - output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); - output->set_option((Kinova::Api::VisionConfig::Option)input.option); - - return 0; -} -int ToProtoData(kortex_vision_config_driver::IntrinsicParameters input, IntrinsicParameters *output) -{ - output->set_width(input.width); - output->set_height(input.height); - output->set_principal_point_x(input.principal_point_x); - output->set_principal_point_y(input.principal_point_y); - output->set_focal_length_x(input.focal_length_x); - output->set_focal_length_y(input.focal_length_y); - - return 0; -} diff --git a/kortex_vision_config_driver/src/visionconfig_proto_converter.h b/kortex_vision_config_driver/src/visionconfig_proto_converter.h deleted file mode 100644 index dc4e3e7f..00000000 --- a/kortex_vision_config_driver/src/visionconfig_proto_converter.h +++ /dev/null @@ -1,64 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_VisionConfigPROTO_CONVERTER_H_ -#define _KORTEX_VisionConfigPROTO_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "kortex_vision_config_driver/SensorSettings.h" -#include "kortex_vision_config_driver/SensorIdentifier.h" -#include "kortex_vision_config_driver/OptionIdentifier.h" -#include "kortex_vision_config_driver/OptionValue.h" -#include "kortex_vision_config_driver/OptionInformation.h" -#include "kortex_vision_config_driver/SensorFocusAction.h" -#include "kortex_vision_config_driver/VisionNotification.h" -#include "kortex_vision_config_driver/IntrinsicParameters.h" - - -using namespace Kinova::Api::VisionConfig; - -int ToProtoData(kortex_vision_config_driver::SensorSettings intput, SensorSettings *output); -int ToProtoData(kortex_vision_config_driver::SensorIdentifier intput, SensorIdentifier *output); -int ToProtoData(kortex_vision_config_driver::OptionIdentifier intput, OptionIdentifier *output); -int ToProtoData(kortex_vision_config_driver::OptionValue intput, OptionValue *output); -int ToProtoData(kortex_vision_config_driver::OptionInformation intput, OptionInformation *output); -int ToProtoData(kortex_vision_config_driver::SensorFocusAction intput, SensorFocusAction *output); -int ToProtoData(kortex_vision_config_driver::VisionNotification intput, VisionNotification *output); -int ToProtoData(kortex_vision_config_driver::IntrinsicParameters intput, IntrinsicParameters *output); - -#endif \ No newline at end of file diff --git a/kortex_vision_config_driver/src/visionconfig_ros_converter.cpp b/kortex_vision_config_driver/src/visionconfig_ros_converter.cpp deleted file mode 100644 index 9a1efe16..00000000 --- a/kortex_vision_config_driver/src/visionconfig_ros_converter.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "visionconfig_ros_converter.h" - -#include "common_ros_converter.h" - - -int ToRosData(SensorSettings input, kortex_vision_config_driver::SensorSettings &output) -{ - output.sensor = input.sensor(); - output.resolution = input.resolution(); - output.frame_rate = input.frame_rate(); - output.bit_rate = input.bit_rate(); - - return 0; -} -int ToRosData(SensorIdentifier input, kortex_vision_config_driver::SensorIdentifier &output) -{ - output.sensor = input.sensor(); - - return 0; -} -int ToRosData(OptionIdentifier input, kortex_vision_config_driver::OptionIdentifier &output) -{ - output.sensor = input.sensor(); - output.option = input.option(); - - return 0; -} -int ToRosData(OptionValue input, kortex_vision_config_driver::OptionValue &output) -{ - output.sensor = input.sensor(); - output.option = input.option(); - output.value = input.value(); - - return 0; -} -int ToRosData(OptionInformation input, kortex_vision_config_driver::OptionInformation &output) -{ - output.sensor = input.sensor(); - output.option = input.option(); - output.supported = input.supported(); - output.read_only = input.read_only(); - output.minimum = input.minimum(); - output.maximum = input.maximum(); - output.step = input.step(); - output.default_value = input.default_value(); - - return 0; -} -int ToRosData(SensorFocusAction input, kortex_vision_config_driver::SensorFocusAction &output) -{ - output.sensor = input.sensor(); - output.focus_action = input.focus_action(); - - return 0; -} -int ToRosData(VisionNotification input, kortex_vision_config_driver::VisionNotification &output) -{ - output.event = input.event(); - output.sensor = input.sensor(); - output.option = input.option(); - - return 0; -} -int ToRosData(IntrinsicParameters input, kortex_vision_config_driver::IntrinsicParameters &output) -{ - output.width = input.width(); - output.height = input.height(); - output.principal_point_x = input.principal_point_x(); - output.principal_point_y = input.principal_point_y(); - output.focal_length_x = input.focal_length_x(); - output.focal_length_y = input.focal_length_y(); - - return 0; -} diff --git a/kortex_vision_config_driver/src/visionconfig_ros_converter.h b/kortex_vision_config_driver/src/visionconfig_ros_converter.h deleted file mode 100644 index dd1c9f4c..00000000 --- a/kortex_vision_config_driver/src/visionconfig_ros_converter.h +++ /dev/null @@ -1,64 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_VisionConfigROS_CONVERTER_H_ -#define _KORTEX_VisionConfigROS_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include "kortex_vision_config_driver/SensorSettings.h" -#include "kortex_vision_config_driver/SensorIdentifier.h" -#include "kortex_vision_config_driver/OptionIdentifier.h" -#include "kortex_vision_config_driver/OptionValue.h" -#include "kortex_vision_config_driver/OptionInformation.h" -#include "kortex_vision_config_driver/SensorFocusAction.h" -#include "kortex_vision_config_driver/VisionNotification.h" -#include "kortex_vision_config_driver/IntrinsicParameters.h" - - -using namespace Kinova::Api::VisionConfig; - -int ToRosData(SensorSettings input, kortex_vision_config_driver::SensorSettings &output); -int ToRosData(SensorIdentifier input, kortex_vision_config_driver::SensorIdentifier &output); -int ToRosData(OptionIdentifier input, kortex_vision_config_driver::OptionIdentifier &output); -int ToRosData(OptionValue input, kortex_vision_config_driver::OptionValue &output); -int ToRosData(OptionInformation input, kortex_vision_config_driver::OptionInformation &output); -int ToRosData(SensorFocusAction input, kortex_vision_config_driver::SensorFocusAction &output); -int ToRosData(VisionNotification input, kortex_vision_config_driver::VisionNotification &output); -int ToRosData(IntrinsicParameters input, kortex_vision_config_driver::IntrinsicParameters &output); - -#endif \ No newline at end of file diff --git a/kortex_vision_config_driver/srv/non_generated/SetApiOptions.srv b/kortex_vision_config_driver/srv/non_generated/SetApiOptions.srv deleted file mode 100644 index cab7c810..00000000 --- a/kortex_vision_config_driver/srv/non_generated/SetApiOptions.srv +++ /dev/null @@ -1,3 +0,0 @@ -ApiOptions input ---- - diff --git a/kortex_vision_config_driver/srv/non_generated/SetDeviceID.srv b/kortex_vision_config_driver/srv/non_generated/SetDeviceID.srv deleted file mode 100644 index 396957c5..00000000 --- a/kortex_vision_config_driver/srv/non_generated/SetDeviceID.srv +++ /dev/null @@ -1,2 +0,0 @@ -uint32 device_id ---- diff --git a/kortex_vision_config_driver/templates/NodeServices.cpp.jinja2 b/kortex_vision_config_driver/templates/NodeServices.cpp.jinja2 deleted file mode 100644 index 78e607a9..00000000 --- a/kortex_vision_config_driver/templates/NodeServices.cpp.jinja2 +++ /dev/null @@ -1,154 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "node.h" -{% for package in detailedPackages %} -{%- if package.HasMessage == 1 -%} -#include "{{package.filename|lower}}_ros_converter.h" -#include "{{package.filename|lower}}_proto_converter.h" -{%- endif %} -{% endfor -%} - -VisionConfig_Services::VisionConfig_Services(char* ip, ros::NodeHandle& n, uint32_t device_id) : m_n(n) -{ - m_transport = new TransportClientUdp(); - m_transport->connect(ip, 10000); - - m_router = new RouterClient(m_transport, [](KError err) { cout << "_________ callback error _________" << err.toString(); }); - m_CurrentDeviceID = device_id; - m_apiOptions.timeout_ms = 3000; -{% for package in detailedPackages %} - {%- if package.HasRPC == 1 %} - m_{{package.name|lower}} = new {{package.name}}::{{package.name}}Client(m_router); - {%- endif -%} -{% endfor %} - //If the Device ID is different than 0, it means that we are using the feature DEVICE ROUTING. - if(m_CurrentDeviceID != 0) - { - m_SessionManager = new SessionManager(m_router); - auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); - - createSessionInfo.set_username("admin"); - createSessionInfo.set_password("admin"); - createSessionInfo.set_session_inactivity_timeout(35000); - - m_SessionManager->CreateSession(createSessionInfo); - } - - m_pub_Error = m_n.advertise("KortexError", 1000); -{%- for package in detailedPackages -%} -{%- for method in package.service.method -%} -{%- if 'Topic' in method.name %} - m_pub_{{method.name}} = m_n.advertise("{{method.name}}", 1000); -{%- endif -%} -{%- endfor -%} -{%- endfor -%} - - std::this_thread::sleep_for(std::chrono::milliseconds(2000)); -} - -bool VisionConfig_Services::SetDeviceID(kortex_vision_config_driver::SetDeviceID::Request &req, kortex_vision_config_driver::SetDeviceID::Response &res) -{ - if(m_CurrentDeviceID == 0) - { - auto sessionManager = new SessionManager(m_router); - auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); - - createSessionInfo.set_username("admin"); - createSessionInfo.set_password("admin"); - createSessionInfo.set_session_inactivity_timeout(35000); - - sessionManager->CreateSession(createSessionInfo); - } - - m_CurrentDeviceID = req.device_id; -} - -bool VisionConfig_Services::SetApiOptions(kortex_vision_config_driver::SetApiOptions::Request &req, kortex_vision_config_driver::SetApiOptions::Response &res) -{ - m_apiOptions.timeout_ms = req.input.timeout_ms; - - return true; -} -{% for package in detailedPackages %} -{% for method in package.service.method %} -{%- if 'Topic' in method.name %} -bool VisionConfig_Services::OnNotification{{method.name}}(kortex_vision_config_driver::OnNotification{{method.name}}::Request &req, kortex_vision_config_driver::OnNotification{{method.name}}::Response &res) -{%- else %} -bool VisionConfig_Services::{{method.name}}(kortex_vision_config_driver::{{method.name}}::Request &req, kortex_vision_config_driver::{{method.name}}::Response &res) -{%- endif %} -{ - {%- set splitInputTypeName = method.input_type.split('.') -%} - {% set splitOutputTypeName = method.output_type.split('.') %} - {{splitInputTypeName[4]}} input; - {%- if not method.input_type.split('.')[4] == "Empty" %} - ToProtoData(req.input, &input); - {%- endif %} - {{splitOutputTypeName[4]}} output; - kortex_vision_config_driver::KortexError result_error; - - try - { - {%- if not method.output_type.split('.')[4] == "Empty" %} - {%- if not method.input_type.split('.')[4] == "Empty" %} - {%- if 'Topic' in method.name %} - std::function< void ({{package.name}}::{{method.name|replace("Topic", "")}}Notification) > callback = std::bind(&VisionConfig_Services::cb_{{method.name}}, this, std::placeholders::_1); - output = m_{{package.name|lower}}->OnNotification{{method.name}}(callback, input); - {%- else %} - output = m_{{package.name|lower}}->{{method.name}}(input, m_CurrentDeviceID, m_apiOptions); - {%- endif %} - {%- else %} - output = m_{{package.name|lower}}->{{method.name}}(m_CurrentDeviceID, m_apiOptions); - {%- endif %} - {%- else %} - {%- if not method.input_type.split('.')[4] == "Empty" %} - m_{{package.name|lower}}->{{method.name}}(input, m_CurrentDeviceID, m_apiOptions); - {%- else %} - m_{{package.name|lower}}->{{method.name}}(m_CurrentDeviceID, m_apiOptions); - {%- endif %} - {%- endif %} - } - catch (KDetailedException& ex) - { - result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); - result_error.code = ex.getErrorInfo().getError().error_code(); - result_error.description = ex.what(); - m_pub_Error.publish(result_error); - ROS_INFO("Kortex exception"); - ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); - ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); - ROS_INFO("KINOVA exception description: %s\n", ex.what()); - return false; - } - catch (std::runtime_error& ex2) - { - return false; - } - {%- if not method.output_type.split('.')[4] == "Empty" %} - ToRosData(output, res.output); - {%- endif %} - return true; -} -{%- if 'Topic' in method.name %} -void VisionConfig_Services::cb_{{method.name}}({{package.name}}::{{method.name|replace("Topic", "")}}Notification notif) -{ - kortex_vision_config_driver::{{method.name|replace("Topic", "")}}Notification ros_msg; - ToRosData(notif, ros_msg); - m_pub_{{method.name}}.publish(ros_msg); -} -{%- endif %} -{% endfor -%} -{% endfor -%} \ No newline at end of file diff --git a/kortex_vision_config_driver/templates/NodeServices.h.jinja2 b/kortex_vision_config_driver/templates/NodeServices.h.jinja2 deleted file mode 100644 index ba4e843e..00000000 --- a/kortex_vision_config_driver/templates/NodeServices.h.jinja2 +++ /dev/null @@ -1,112 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_{{packageName}}SERVICES_H_ -#define _KORTEX_{{packageName}}SERVICES_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -{%- for package in detailedPackages %} -#include <{{package.filename}}.pb.h> -{%- endfor %} - -#include -#include - -#include -#include - -{%- for package in detailedPackages %} -{%- if package.HasRPC == 1 %} -#include <{{package.name}}ClientRpc.h> -{%- endif %} -{%- endfor %} -#include -#include - -{%- for package in detailedPackages %} -{%- for method in package.service.method %} -{%- if 'Topic' in method.name %} -#include "kortex_vision_config_driver/OnNotification{{method.name}}.h" -#include "kortex_vision_config_driver/{{method.name|replace("Topic", "")}}Notification.h" -{%- else %} -#include "kortex_vision_config_driver/{{method.name}}.h" -{%- endif %} -{%- endfor %} -{%- endfor %} -#include "kortex_vision_config_driver/KortexError.h" -#include "kortex_vision_config_driver/SetDeviceID.h" -#include "kortex_vision_config_driver/SetApiOptions.h" - -#include "kortex_vision_config_driver/ApiOptions.h" - -using namespace std; -using namespace Kinova::Api; -{%- for package in detailedPackages %} -using namespace {{package.namespace}}; -{%- endfor %} - -class VisionConfig_Services -{ - public: - VisionConfig_Services(char* ip, ros::NodeHandle& n, uint32_t device_id); - bool SetDeviceID(kortex_vision_config_driver::SetDeviceID::Request &req, kortex_vision_config_driver::SetDeviceID::Response &res); - bool SetApiOptions(kortex_vision_config_driver::SetApiOptions::Request &req, kortex_vision_config_driver::SetApiOptions::Response &res); -{% for package in detailedPackages %} -{%- for method in package.service.method %} -{%- if 'Topic' in method.name %} - bool OnNotification{{method.name}}(kortex_vision_config_driver::OnNotification{{method.name}}::Request &req, kortex_vision_config_driver::OnNotification{{method.name}}::Response &res); - void cb_{{method.name}}({{method.name|replace("Topic", "")}}Notification notif); -{%- else %} - bool {{method.name}}(kortex_vision_config_driver::{{method.name}}::Request &req, kortex_vision_config_driver::{{method.name}}::Response &res); -{%- endif %} -{%- endfor %} -{% endfor %} - -private: - TransportClientUdp* m_transport; - RouterClient* m_router; - {% for package in detailedPackages %} - {%- if package.HasRPC == 1 %} - {{package.name}}Client* m_{{package.name|lower}}; - {%- endif -%} - {% endfor %} - uint32_t m_CurrentDeviceID; - RouterClientSendOptions m_apiOptions; - - SessionManager* m_SessionManager; - - ros::NodeHandle m_n; - ros::Publisher m_pub_Error; - - {%- for package in detailedPackages %} - {%- for method in package.service.method %} - {%- if 'Topic' in method.name %} - ros::Publisher m_pub_{{method.name}}; - {%- endif %} - {%- endfor %} - {%- endfor %} -}; -#endif - diff --git a/kortex_vision_config_driver/templates/main.jinja2 b/kortex_vision_config_driver/templates/main.jinja2 deleted file mode 100644 index 93994931..00000000 --- a/kortex_vision_config_driver/templates/main.jinja2 +++ /dev/null @@ -1,70 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "node.h" - -#include -#include - -int main(int argc, char **argv) -{ - ros::init(argc, argv, "VisionConfig_Services"); - - uint32_t device_id = 0; - - ros::NodeHandle n; - bool valid_ip = false; - - if(argc > 2) - { - stringstream tempId; - tempId << argv[2]; - tempId >> device_id; - - if(tempId.fail() || tempId.bad()) - { - ROS_INFO("ERROR - Bad device ID, shutting down the node..."); - ros::shutdown(); - return 0; - } - ROS_INFO("Connecting to IP = %s - device ID = %s", argv[1], argv[2]); - } - else if(argc > 1) - { - ROS_INFO("Connecting to IP = %s", argv[1]); - } - else - { - ROS_INFO("You need to provide, at least, an IP adresse as the first parameter. An optional device ID can also be passed if you are using the device routing feature. ex: rosrun package node 192.168.1.10 [device_id]"); - ros::shutdown(); - return 0; - } - - VisionConfig_Services services_object(argv[1], n, device_id); - - ros::ServiceServer serviceSetDeviceID = n.advertiseService("SetDeviceID", &VisionConfig_Services::SetDeviceID, &services_object); - ros::ServiceServer serviceSetApiOptions = n.advertiseService("SetApiOptions", &VisionConfig_Services::SetApiOptions, &services_object); - - {% for function in list_function -%} - ros::ServiceServer service{{function}} = n.advertiseService("{{function}}", &VisionConfig_Services::{{function}}, &services_object); - {% endfor %} - - ROS_INFO("Node's services initialized correctly."); - - ros::spin(); - - return 1; -} diff --git a/kortex_vision_config_driver/templates/proto_converter.cpp.jinja2 b/kortex_vision_config_driver/templates/proto_converter.cpp.jinja2 deleted file mode 100644 index 5f255569..00000000 --- a/kortex_vision_config_driver/templates/proto_converter.cpp.jinja2 +++ /dev/null @@ -1,77 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "{{currentFilename|lower}}_proto_converter.h" -{% if 'Common' not in currentPackageName %} -#include "common_proto_converter.h" -{% endif %} - -{% for detailed_message in item -%} -int ToProtoData(kortex_vision_config_driver::{{detailed_message.message.name}} input, {{detailed_message.message.name}} *output) -{ - {%- for field in detailed_message.message.field %} - {%- if not field.HasField("oneof_index") -%} - {%- if field.label == 3 %} {# Si c'est un repeated #} - {%- if field.type == 11 %} - output->clear_{{field.name|lower}}(); - for(int i = 0; i < input.{{field.name}}.size(); i++) - { - ToProtoData(input.{{field.name}}[i], output->add_{{field.name|lower}}()); - } - {%- else %} - output->clear_{{field.name|lower}}(); - for(int i = 0; i < input.{{field.name}}.size(); i++) - { - output->add_{{field.name|lower}}(input.{{field.name}}[i]); - } - {% endif -%} - {% else -%} - {%- if field.type == 11 %} - ToProtoData(input.{{field.name}}, output->mutable_{{field.name}}()); - {%- elif field.type == 14 %}{# ENUM #} - {%- set list1 = field.type_name.split('.') -%} {# Cette ligne sert à enlever les namespace dans le nom du type #} - output->set_{{field.name}}(({{field.type_name|replace(".", "", 1)|replace(".", "::")}})input.{{field.name}}); - {%- elif field.type == 12 %} - output->set_{{field.name}}(std::string(input.{{field.name}}.begin(), input.{{field.name}}.end())); - {%- else %} - output->set_{{field.name}}(input.{{field.name}}); - {%- endif -%} - {%- endif -%} - {%- endif -%} - {%- endfor -%} - - {% if detailed_message.HasOneOf == "true" %} - - {% for field in detailed_message.message.field %} - {%- if field.HasField("oneof_index") -%} - if(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.size() > 0) - { - {% if field.type == 11 -%} - ToProtoData(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0], output->mutable_{{field.name}}()); - {%- elif field.type == 14 %} - {%- set list1 = field.type_name.split('.') -%} - output->set_{{field.name}}(({{list1[4]}})input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0]); - {%- else %} - output->set_{{field.name}}(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0]); - {%- endif %} - } - {% endif %} - {%- endfor -%} - {% endif %} - - return 0; -} -{% endfor %} diff --git a/kortex_vision_config_driver/templates/proto_converter.h.jinja2 b/kortex_vision_config_driver/templates/proto_converter.h.jinja2 deleted file mode 100644 index 3f56d39f..00000000 --- a/kortex_vision_config_driver/templates/proto_converter.h.jinja2 +++ /dev/null @@ -1,52 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_{{currentPackageName}}PROTO_CONVERTER_H_ -#define _KORTEX_{{currentPackageName}}PROTO_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include <{{currentFilename}}.pb.h> - -#include -#include - -#include -#include - -#include -#include -#include -#include - -{% for detailed_message in item -%} -#include "kortex_vision_config_driver/{{detailed_message.message.name}}.h" -{% endfor %} - -using namespace {{currentNamespace}}; - -{% for detailed_message in item -%} -int ToProtoData(kortex_vision_config_driver::{{detailed_message.message.name}} intput, {{detailed_message.message.name}} *output); -{% endfor %} -#endif \ No newline at end of file diff --git a/kortex_vision_config_driver/templates/ros_converter.cpp.jinja2 b/kortex_vision_config_driver/templates/ros_converter.cpp.jinja2 deleted file mode 100644 index 876a7059..00000000 --- a/kortex_vision_config_driver/templates/ros_converter.cpp.jinja2 +++ /dev/null @@ -1,86 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#include "{{currentFilename|lower}}_ros_converter.h" -{% if 'Common' not in currentPackageName %} -#include "common_ros_converter.h" -{% endif %} - -{% for detailed_message in item -%} -int ToRosData({{detailed_message.message.name}} input, kortex_vision_config_driver::{{detailed_message.message.name}} &output) -{ - {%- for field in detailed_message.message.field %} - {%- if not field.HasField("oneof_index") %} - {%- if field.label == 3 %} {# Si c'est un repeated #} - {% if field.type == 11 %} - {%- set splitTypeName = field.type_name.split('.') -%} - output.{{field.name}}.clear(); - for(int i = 0; i < input.{{field.name|lower}}_size(); i++) - { - kortex_vision_config_driver::{{splitTypeName[4]}} temp; - ToRosData(input.{{field.name}}(i), temp); - output.{{field.name}}.push_back(temp); - } - {%- else %} - output.{{field.name}}.clear(); - for(int i = 0; i < input.{{field.name|lower}}_size(); i++) - { - output.{{field.name}}.push_back(input.{{field.name|lower}}(i)); - } - {%- endif %} - {%- else %} - {%- if field.type == 11 %} - ToRosData(input.{{field.name}}(), output.{{field.name}}); - {%- elif field.type == 14 %} - {%- set list1 = field.type_name.split('.') -%} {# Cette ligne sert à enlever les namespace dans le nom du type #} - output.{{field.name}} = input.{{field.name}}(); - {%- elif field.type == 12 %} - output.{{field.name}} = std::vector(input.{{field.name}}().begin(), input.{{field.name}}().end()); - {%- else %} - output.{{field.name}} = input.{{field.name}}(); - {%- endif %} - {%- endif %} - {%- endif %} - {%- endfor %} - - {% if detailed_message.HasOneOf == "true" %} - auto oneof_type = input.{{detailed_message.message.ListFields()[-1][1][0].name}}_case(); - - switch(oneof_type) - { - {%- for field in detailed_message.message.field -%} - {%- if field.HasField("oneof_index") -%} - {%- set splitTypeName = field.type_name.split('.') %} - {%- set EnumName = field.name.replace("_", " ").title().replace(" ", "") %} - case {{detailed_message.message.name}}::k{{EnumName}}: - { - {%- if field.type == 11 %} - kortex_vision_config_driver::{{splitTypeName[4]}} temp; - ToRosData(input.{{field.name}}(), temp); - output.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.push_back(temp); - {%- elif field.type == 14 %} - output.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.push_back(input.{{field.name}}()); - {% endif %} - break; - } - {% endif %} - {%- endfor %} - } - {% endif -%} - - return 0; -} -{% endfor %} diff --git a/kortex_vision_config_driver/templates/ros_converter.h.jinja2 b/kortex_vision_config_driver/templates/ros_converter.h.jinja2 deleted file mode 100644 index ff3e5df8..00000000 --- a/kortex_vision_config_driver/templates/ros_converter.h.jinja2 +++ /dev/null @@ -1,52 +0,0 @@ -/* -* KINOVA (R) KORTEX (TM) -* -* Copyright (c) 2018 Kinova inc. All rights reserved. -* -* This software may be modified and distributed under the -* terms of the BSD 3-Clause license. -* -* Refer to the LICENSE file for details. -* -*/ - -/* - * This file has been auto-generated and should not be modified. - */ - -#ifndef _KORTEX_{{currentPackageName}}ROS_CONVERTER_H_ -#define _KORTEX_{{currentPackageName}}ROS_CONVERTER_H_ - -#include "ros/ros.h" - -#include -#include -#include -#include -#include - -#include -#include -#include <{{currentFilename}}.pb.h> - -#include -#include - -#include -#include - -#include -#include -#include -#include - -{% for detailed_message in item -%} -#include "kortex_vision_config_driver/{{detailed_message.message.name}}.h" -{% endfor %} - -using namespace {{currentNamespace}}; - -{% for detailed_message in item -%} -int ToRosData({{detailed_message.message.name}} input, kortex_vision_config_driver::{{detailed_message.message.name}} &output); -{% endfor %} -#endif \ No newline at end of file diff --git a/kortex_vision_config_driver/templates/ros_enum.jinja2 b/kortex_vision_config_driver/templates/ros_enum.jinja2 deleted file mode 100644 index 164146fc..00000000 --- a/kortex_vision_config_driver/templates/ros_enum.jinja2 +++ /dev/null @@ -1,3 +0,0 @@ -{% for member in item.value %} -uint32 {{member.name}} = {{member.number}} -{% endfor %} diff --git a/kortex_vision_config_driver/templates/ros_message.jinja2 b/kortex_vision_config_driver/templates/ros_message.jinja2 deleted file mode 100644 index 167f685f..00000000 --- a/kortex_vision_config_driver/templates/ros_message.jinja2 +++ /dev/null @@ -1,44 +0,0 @@ -{%- for member in item.field -%} -{%- if not member.HasField("oneof_index") -%} -{%- if member.type == 9 %} {# TYPE_STRING #} -string{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 12 %} {# TYPE_BYTES #} -uint8[] {{member.name}} -{%- elif member.type == 1 %} {# TYPE_DOUBLE #} -float64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 7 %} {# TYPE_FIXED32 #} -uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 6 %} {# TYPE_FIXED64 #} -uint64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 2 %} {# TYPE_FLOAT #} -float32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 5 %} {# TYPE_INT32 #} -int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 3 %} {# TYPE_INT64 #} -int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 15 %} {# TYPE_SFIXED32 #} -int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 16 %} {# TYPE_SFIXED64 #} -int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 17 %} {# TYPE_SINT32 #} -int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 18 %} {# TYPE_SINT64 #} -int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 13 %} {# TYPE_UINT32 #} -uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 4 %} {# TYPE_UINT64 #} -uint64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 14 -%} {# TYPE_ENUM #} -{% set list1 = member.type_name.split('.') %} -uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- elif member.type == 8 %} {# TYPE_BOOL #} -bool {{member.name}} -{%- elif member.type == 11 %}{# TYPE MESSAGE #} -{% set list1 = member.type_name.split('.') %} -{{list1|last}}{%- if member.label == 3 -%}[]{% endif %} {{member.name}} -{%- endif -%} -{%- endif -%} -{%- endfor -%} -{%- if HasOneOf %} -{{item.name}}_{{item.ListFields()[-1][1][0].name}} oneof_{{item.ListFields()[-1][1][0].name}} -{%- endif -%} \ No newline at end of file diff --git a/kortex_vision_config_driver/templates/ros_oneof.jinja2 b/kortex_vision_config_driver/templates/ros_oneof.jinja2 deleted file mode 100644 index 4fac302a..00000000 --- a/kortex_vision_config_driver/templates/ros_oneof.jinja2 +++ /dev/null @@ -1,9 +0,0 @@ -{%- for member in item.field -%} -{% if member.HasField("oneof_index") %} -{% if member.type == 11 %} -{% set list1 = member.type_name.split('.') %}{{list1[4]}}[] {{member.name}} -{%- else -%} -uint32[] {{member.name}} -{%- endif -%} -{%- endif -%} -{% endfor %} \ No newline at end of file diff --git a/kortex_vision_config_driver/templates/ros_service.jinja2 b/kortex_vision_config_driver/templates/ros_service.jinja2 deleted file mode 100644 index cc015cf8..00000000 --- a/kortex_vision_config_driver/templates/ros_service.jinja2 +++ /dev/null @@ -1,5 +0,0 @@ -{% set split_input_type = item.input_type.split('.') %} -{%- set split_output_type = item.output_type.split('.') -%} -{{split_input_type[4]}} input ---- -{{split_output_type[4]}} output \ No newline at end of file diff --git a/readme.md b/readme.md index 8d73d602..c3a2644c 100644 --- a/readme.md +++ b/readme.md @@ -1,71 +1,76 @@ -# ROS KORTEX -The official ROS package to interact with Kortex and its related products is built upon the Kortex API, documentation for which can be found in the [GitHub Kortex repository](https://github.com/Kinovarobotics/kortex). +# ros_kortex +ROS Kortex is the official ROS package to interact with Kortex and its related products. It is built upon the Kortex API, documentation for which can be found in the [GitHub Kortex repository](https://github.com/Kinovarobotics/kortex). -## Content -### kortex_bringup -This package contains the launch files that start the nodes and load the correct parameters and robot description to the Parameter Server. -For more details, please consult the [README](kortex_bringup/readme.md) +## Download links -### kortex_driver -This package implements a ROS node that allows communication between a node and a Gen3 robot. For more details, please consult the [README](kortex_driver/readme.md) from in the package subdirectory. Use this package if you want to: +You can download the latest Gen3 firmware [from here](https://artifactory.kinovaapps.com/artifactory/generic-local-public/kortex/gen3/2.0.0/Gen3-2.0.0.swu) and you can download the release notes [from here](https://artifactory.kinovaapps.com/artifactory/generic-local-public/kortex/gen3/2.0.0/RN-001_KINOVA_Gen3_Ultra_lightweight_robot-Release_Notes_EN_R04.pdf). -* Change basic robot configuration. -* Move the robot in Cartesian space. -* Move the robot in joint space. -* Activate admittance mode. -* Move the robot using **LOW\_LEVEL**\ (1 kHz\) control mode. -* Move the robot using **LOW\_LEVEL\_BYPASS**\ mode. -* Access cyclic data sporadically. +## Installation +### Setup -### kortex_actuator_driver -This package implements a ROS node that allows direct communication with a Gen3 actuator. Direct communication means that either the computer running the node is directly connected to the actuator or that it is connected to a robot using the device routing system. A more detailed [description](kortex_actuator_driver/readme.md) can be found in the package subdirectory. Use this package if you would like to: +- [Robot Operating System (ROS)](http://wiki.ros.org) (middleware for robotics) -* Change an advance configuration setting on an actuator. -* Move an actuator using the cyclic data (1 kHz). +You can find the instructions to install ROS Kinetic (for Ubuntu 16.04) [here](http://wiki.ros.org/kinetic/Installation/Ubuntu). -### kortex_device_manager -This package implements a ROS node that allows basic communication with every device supported by the Kortex framework. A more detailed [description](kortex_device_manager/readme.md) can be found in the package subdirectory. Use this package if you would like to: +[Google Protocol Buffers](https://developers.google.com/protocol-buffers/) is used by Kinova to define the Kortex APIs and to automatically generate ROS messages, services and C++ classes from the Kortex API `.proto` files. The installation of Google Protocol Buffers is required by developers implementing new APIs with the robot. However, since we already provide all the necessary generated files on GitHub, this is not required for most end users of the robot. -* List all devices available on a specific Gen3 robot. -* Retrieve generic information of a given device. -* Get the firmware version of a given device. -* Get the serial number of a given device. -* Set IPv4 settings on a given device. -* Get safety information of a given device. +If you have a specific use case that requires you to install it, you can follow the instructions provided [at the end of this readme file](#protobuf-installation). We recommend that you contact Kinova if you have any specific questions about this. -### kortex_vision_config_driver -This package implements a ROS node that allows direct communication with a Gen3 Vision module. Direct communication means that either the computer running the node has an Ethernet cable directly connected to a Vision module or that it is connected to a robot using the device routing system. A more detailed [description](kortex_vision_config_driver/readme.md) can be found in the package subdirectory. Use this package if you would like to: -* Change a configuration setting on a vision module. -* Get informations about the configuration settings of a vision module. +### Build -### kortex_examples -This package holds all the examples needed to understands that basics of ros_kortex. All examples are written in both c++ and python. A more detailed [description](kortex_examples/readme.md) can be found in the package subdirectory. +These are the instructions to run in a terminal to create the workspace, clone the `ros_kortex` repository, install the necessary ROS dependencies and build the package: -### kortex_description -This package contains the URDF and the STL of a complete Gen3 robot. A more detailed [description](kortex_description/readme.md) can be found in the package directory. + mkdir -p catkin_workspace/src + cd catkin_workspace/src + git clone https://github.com/Kinovarobotics/ros_kortex.git + cd ../ + rosdep install --from-paths src --ignore-src + catkin_make + source devel/setup.bash + +## Contents + +The following is a description of the packages included in this repository. ### kortex_api -This package contains all the header files and the libraries required by the Kortex C++ API. A more detailed [description](kortex_api/readme.md) can be found in the package subdirectory. +This package contains all the header files and the libraries of the C++ Kortex API. The files are automatically downloaded from the Web and extracted when you `catkin_make` if the `kortex_api/include` and `kortex_api/lib` folders are empty. + +**Note:** Upon a new release of the API, it is important to delete the content of these two folders to make sure the new API gets downloaded and you don't get build errors when you `catkin_make`. + +A more detailed [description](kortex_api/readme.md) can be found in the package subdirectory. -## Setup +### kortex_control +This package implements the simulation controllers that control the arm in Gazebo. For more details, please consult the [README](kortex_control/readme.md) from the package subdirectory. + +**Note** The `ros_control` controllers for the real arm are not yet implemented and will be in a future release of `ros_kortex`. + +### kortex_description +This package contains the URDF (Unified Robot Description Format), STL and configuration files for the Kortex-compatible robots. For more details, please consult the [README](kortex_description/readme.md) from the package subdirectory. + +### kortex_driver +This package implements a ROS node that allows communication between a node and a Kinova Gen3 Ultra lightweight robot. For more details, please consult the [README](kortex_driver/readme.md) from the package subdirectory. + +### kortex_examples +This package holds all the examples needed to understand the basics of `ros_kortex`. Most of the examples are written in both C++ and Python. Only the MoveIt! example is available exclusively in Python for now. +A more detailed [description](kortex_examples/readme.md) can be found in the package subdirectory. -### Download the API and extract it to the kortex_api/include and kortex_api/lib folders -The build.sh script automates this process. To launch it, go to the root of your catkin_workspace and execute : -```./src/ros_kortex/build.sh``` -This will download the API, unzip it to the right folder and build the project with ```catkin_make```. +### kortex_gazebo +This package contains files to simulate the Kinova Gen3 Ultra lightweight robot in Gazebo. For more details, please consult the [README](kortex_gazebo/readme.md) from the package subdirectory. -You can also download and unzip the API manually by following these [instructions](kortex_api/readme.md). +### kortex_move_it_config +This metapackage contains the auto-generated MoveIt! files to use the Kinova Gen3 arm with the MoveIt! motion planning framework. For more details, please consult the [README](kortex_move_it_config/readme.md) from the package subdirectory. -### Install protobuf [OPTIONAL] -The protobuf compiler is not required if you want to use the package as is, but is required if you need to [re-generate](./generate_all.sh) the .MSG, .SRV and auto-generated Kortex-ROS C++ wrapper files. +### third_party +This folder contains the third-party packages we use with the ROS Kortex packages. Currently, it consists of two packages used for the simulation of the Robotiq Gripper in Gazebo. We use [gazebo-pkgs](third_party/gazebo-pkgs/README.md) for grasping support in Gazebo and [roboticsgroup_gazebo_plugins](third_party/roboticsgroup_gazebo_plugins/README.md) to mimic joint support in Gazebo. -1. git clone https://github.com/protocolbuffers/protobuf --branch 3.5.1.1 (you must use this specific version) -2. Follow these [instructions](https://github.com/protocolbuffers/protobuf/blob/master/src/README.md) to build and install protobuf and its compiler. +
+## Instructions to install Protocol Buffers (optional) -## kortex gazebo -This package is not completed yet but will be available in a future version. +You can clone the Protocol Buffers repository from GitHub with this command: -## kortex_moveit_config -This package is not completed yet but will be available in a future version. +```cpp +git clone https://github.com/protocolbuffers/protobuf --branch 3.5.1.1 (you must use this specific version) +``` +You can install Protocol Buffers by following these [instructions](https://github.com/protocolbuffers/protobuf/blob/master/src/README.md). diff --git a/third_party/gazebo-pkgs/LICENSE b/third_party/gazebo-pkgs/LICENSE new file mode 100644 index 00000000..461daada --- /dev/null +++ b/third_party/gazebo-pkgs/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2019, Jennifer Buehler +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/third_party/gazebo-pkgs/README.md b/third_party/gazebo-pkgs/README.md new file mode 100644 index 00000000..1bb2ba0a --- /dev/null +++ b/third_party/gazebo-pkgs/README.md @@ -0,0 +1,9 @@ +These ROS packages were cloned from https://github.com/JenniferBuehler/gazebo-pkgs into ros_kortex to properly simulate grasping in Gazebo for the Robotiq 2f 85 gripper. +The repository was cloned at commit e54939f6a80982dc1b89c3c2fb288e989f758b20. +The original readme file follows: + +# gazebo-pkgs + +A collection of tools and plugins for Gazebo. + +Please also refer to [the wiki](https://github.com/JenniferBuehler/gazebo-pkgs/wiki) for more information. diff --git a/third_party/gazebo-pkgs/gazebo_grasp_plugin/CHANGELOG.rst b/third_party/gazebo-pkgs/gazebo_grasp_plugin/CHANGELOG.rst new file mode 100644 index 00000000..c8c10095 --- /dev/null +++ b/third_party/gazebo-pkgs/gazebo_grasp_plugin/CHANGELOG.rst @@ -0,0 +1,19 @@ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Changelog for package gazebo_grasp_plugin +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +1.0.2 (2018-01-06) +------------------ +* Merge branch jacknlliu-fix-c11-error +* fix build error with c++ 11 +* Contributors: Jack Liu, Jennifer Buehler + +1.0.1 (2016-06-08) +------------------ +* Fixed cmake files for jenkins builds +* Contributors: Jennifer Buehler + +1.0.0 (2016-06-07) +------------------ +* Initial release +* Contributors: Jennifer Buehler diff --git a/third_party/gazebo-pkgs/gazebo_grasp_plugin/CMakeLists.txt b/third_party/gazebo-pkgs/gazebo_grasp_plugin/CMakeLists.txt new file mode 100644 index 00000000..a93a2855 --- /dev/null +++ b/third_party/gazebo-pkgs/gazebo_grasp_plugin/CMakeLists.txt @@ -0,0 +1,140 @@ +cmake_minimum_required(VERSION 2.8.3) +project(gazebo_grasp_plugin) + +# This is added to remove policy CMP0054 warning (see https://stackoverflow.com/questions/45900159/how-to-use-variables-and-avoid-cmp0054-policy-violations) +cmake_policy(SET CMP0054 NEW) + +## Find catkin macros and libraries +## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) +## is used, also find other catkin packages +find_package(catkin REQUIRED COMPONENTS + gazebo_ros + geometry_msgs + roscpp + std_msgs + gazebo_version_helpers +) + +find_package(gazebo REQUIRED) + +## Uncomment this if the package has a setup.py. This macro ensures +## modules and global scripts declared therein get installed +## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html +# catkin_python_setup() + +################################### +## catkin specific configuration ## +################################### +## The catkin_package macro generates cmake config files for your package +## Declare things to be passed to dependent projects +## INCLUDE_DIRS: uncomment this if you package contains header files +## LIBRARIES: libraries you create in this project that dependent projects also need +## CATKIN_DEPENDS: catkin_packages dependent projects also need +## DEPENDS: system dependencies of this project that dependent projects also need +catkin_package( + INCLUDE_DIRS include + LIBRARIES gazebo_grasp_fix + CATKIN_DEPENDS gazebo_ros geometry_msgs roscpp std_msgs gazebo_version_helpers + DEPENDS gazebo +) + +########### +## Build ## +########### +# check c++11 / c++0x +include(CheckCXXCompilerFlag) +CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) +CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) +if(COMPILER_SUPPORTS_CXX11) + set(CMAKE_CXX_FLAGS "-std=c++11") +elseif(COMPILER_SUPPORTS_CXX0X) + set(CMAKE_CXX_FLAGS "-std=c++0x") +else() + message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler. Suggested solution: update the pkg build-essential ") +endif() + +## Specify additional locations of header files +## Your package locations should be listed before other locations +# include_directories(include) +include_directories( + include + ${catkin_INCLUDE_DIRS} + ${GAZEBO_INCLUDE_DIRS} +) + +link_directories( + ${catkin_LIBRARY_DIRS} + ${GAZEBO_LIBRARY_DIRS} +) + +# Protobuf 2.6.1 includes were copied in kortex_gazebo/include and are necessary to build Gazebo plugins +include_directories(BEFORE ../../../kortex_gazebo/include/) +link_directories(BEFORE ../../../kortex_gazebo/lib/) + +## Declare a cpp library +add_library(gazebo_grasp_fix SHARED src/GazeboGraspFix.cpp src/GazeboGraspGripper.cpp) + +## Add cmake target dependencies of the executable/library +## as an example, message headers may need to be generated before nodes +# add_dependencies(gazebo_grasp_plugin_node gazebo_grasp_plugin_generate_messages_cpp) +add_dependencies(gazebo_grasp_fix ${catkin_EXPORTED_TARGETS}) + +## Specify libraries to link a library or executable target against + +target_link_libraries(gazebo_grasp_fix + ${catkin_LIBRARIES} + ${Boost_LIBRARIES} + libprotobuf.so +) + +############# +## Install ## +############# + +# all install targets should use catkin DESTINATION variables +# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html + +## Mark executable scripts (Python etc.) for installation +## in contrast to setup.py, you can choose the destination +# install(PROGRAMS +# scripts/my_python_script +# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark executables and/or libraries for installation +install(TARGETS gazebo_grasp_fix + ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} + LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} + RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +) + +## Mark cpp header files for installation +install(DIRECTORY include/${PROJECT_NAME}/ + DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} + FILES_MATCHING PATTERN "*.h" +) + +install(DIRECTORY launch + DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} + FILES_MATCHING PATTERN "*.launch" +) + +## Mark other files for installation (e.g. launch and bag files, etc.) +# install(FILES +# # myfile1 +# # myfile2 +# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +# ) + +############# +## Testing ## +############# + +## Add gtest based cpp test target and link libraries +# catkin_add_gtest(${PROJECT_NAME}-test test/test_gazebo_grasp_plugin.cpp) +# if(TARGET ${PROJECT_NAME}-test) +# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) +# endif() + +## Add folders to be run by python nosetests +# catkin_add_nosetests(test) diff --git a/third_party/gazebo-pkgs/gazebo_grasp_plugin/include/gazebo_grasp_plugin/GazeboGraspFix.h b/third_party/gazebo-pkgs/gazebo_grasp_plugin/include/gazebo_grasp_plugin/GazeboGraspFix.h new file mode 100644 index 00000000..b3e3ef35 --- /dev/null +++ b/third_party/gazebo-pkgs/gazebo_grasp_plugin/include/gazebo_grasp_plugin/GazeboGraspFix.h @@ -0,0 +1,256 @@ +#ifndef GAZEBO_GAZEBOGRASPFIX_H +#define GAZEBO_GAZEBOGRASPFIX_H + +#include +#include +#include +#include +#include +#include +#include + +namespace gazebo +{ + +/** + * Inspired by gazebo::physics::Gripper, this plugin fixes an object which is grasped to the + * robot hand to avoid problems with physics engines and to help the object staying in + * the robot hand without slipping out. + * + * This is a *model* plugin, so you have to load the model plugin from the robot URDF: + * + * ```xml + * + * + * + * name-of-arm + * hand_link_name + * finger_index_link_1 + * finger_index_link_2 + * ... + * + * 100 + * 4 + * 4 + * 8 + * 0.005 + * false + * __default_topic__ + * + * + * ``` + * + * Description of the arguments: + * + * - ```` contains a collections of specification for each arm which can grasp one object (there may be several ```` tags): + * - ```` is the name of this arm. Has to be unique. + * - ```` has to be the link to which the finger joints are attached. + * - ```` tags have to include -all- link names of the gripper/hand which are used to + * actively grasp objects (these are the links which determine whether a "grasp" exists according to + * above described criterion). + * - ```` is the rate at which all contact points are checked against the "gripping criterion". + * Note that in-between such updates, existing contact points may be collected at + * a higher rate (the Gazebo world update rate). The ``update_rate`` is only the rate at + * which they are processed, which takes a bit of computation time, and therefore + * should be lower than the gazebo world update rate. + * - ```` is the tolerance angle (in degrees) between two force vectors to be considered + * "opposing forces". If the angle is smaller than this, they are not opposing. + * - ```` is number of times in the update loop (running at update_rate) that an object has + * to be detected as "gripped" in order to attach the object. + * Adjust this with the update rate. + * - ```` is the maximum number of a counter: + * At each update iteration (running at update_rate), if the "gripping criterion" is + * met for an object, a counter for this object is increased. ``max_grip_count`` is + * the maximum number recorded for an object. As soon as the counter goes beyond this + * number, the counter is stopped. As soon as the "gripping criterion" does not + * hold any more, the number will start to decrease again, (by 1 each time the object + * is detected as "not grasped" in an update iteration). So this counter is + * like a "buffer" which, when it is full, maintains the state, and when it is empty, + * again, the object is released. + * This should be at least double of ``grip_count_threshold``. + * - ```` is the distance which the gripper links are allowed to move away from the object + * during- a grasp without the object being detached, even if there are currently no + * actual contacts on the object. This condition can happen if the fingers "wobble" + * or move ever so slightly away from the object, and therefore the "gripping criterion" + * fails in a few subsequent update iterations. This setting is to make the behaviour more + * stable. + * Setting this number too high will also lead to the object not being detached even + * if the grippers have opened up to release it, so use this with care. + * - ```` can be used for the following: + * When an object is attached, collisions with it may be disabled, in case the + * robot still keeps wobbling. + * - ```` is the gazebo topic of contacts. Should normally be left at -\_\_default_topic\_\_-. + * + * Current limitations: + * + * - Only one object can be attached per gripper. + * - Only partial support for an object cannot be gripped with two grippers (release condition may be + * triggered wrongly, or not at all, if two grippers are involved) + * + * \author Jennifer Buehler + */ +class GazeboGraspFix : public ModelPlugin +{ + public: + GazeboGraspFix(); + GazeboGraspFix(physics::ModelPtr _model); + virtual ~GazeboGraspFix(); + + /** + * Gets called just after the object has been attached to the palm link on \e armName + */ + virtual void OnAttach(const std::string &objectName, + const std::string &armName) {} + /** + * Gets called just after the object has been detached to the palm link on \e armName + */ + virtual void OnDetach(const std::string &objectName, + const std::string &armName) {} + + private: + virtual void Init(); + virtual void Load(physics::ModelPtr _parent, sdf::ElementPtr _sdf); + /** + * Collects for each object all forces which are currently applied on it. + * Then, for each object, checks whether of all the forces applied, + * there are opposing forces. + * This is done by calling CheckGrip() with the list of all forces applied. + * If CheckGrip() returns true, the number of "grip counts" + * is increased for the holding arm (but grip counts will never exceed \e max_grip_count). + * If the number of grip counts for this object exceeds \e grip_count_threshold, + * the object is attached by calling GazeboGraspGripper::HandleAttach(object-name), + * setting \e attached and \e attachedObjName, and \e GazeboGraspGripper::attachGripContacts + * is updated with the contact points currently existing for this object (current entry in \e contacts). + * + * Then, goes through all entries in \e gripCount, and unless it's an object + * we just detected as "gripped", the counter is decreased. + * If the counter is is smaller than \e grip_count_threshold, the object should + * potentially be released, but this criterion happens too easily + * (the fingers in gazebo may have started wobbling as the arm moves around, and although they are still + * close to the object, the grip is not detected any more). + * So to be sure, and additional criterion has to be satisfied before the object is released: + * check that the collision point (the place on the link where the contact originally + * was detected) has not moved too far from where it originally was, relative to the object. + */ + void OnUpdate(); + + void InitValues(); + + + /** + * Gets called upon detection of contacts. + * A list of contacts is passed in \_msg. One contact has two bodies, and only + * the ones where one of the bodies is a gripper link are considered. + * Each contact consists of a *list* of forces with their own origin/position each + * (e.g. when the object and gripper are colliding at several places). + * The averages of each contact's force vectors along with their origins is computed. + * This "average contact force/origin" for each contact is then added to the \e this->contacts map. + * If an entry for this object/link pair already exists, the average force (and its origin) + * is *added* to the existing force/origin, and the average count is increased. This is to get + * the average force application over time between link and object. + */ + void OnContact(const ConstContactsPtr &ptr); + +// bool CheckGrip(const std::vector &forces, float minAngleDiff, +// float lengthRatio); + + bool IsGripperLink(const std::string &linkName, std::string &gripperName) const; + + /** + * return objects (key) and the gripper (value) to which it is attached + */ + std::map GetAttachedObjects() const; + + /** + * Helper class to collect contact info per object. + * Forward declaration here. + */ + class ObjectContactInfo; + + /** + * Helper function to determine if object attached to a gripper in ObjectContactInfo. + */ + bool ObjectAttachedToGripper(const ObjectContactInfo &objContInfo, + std::string &attachedToGripper) const; + + /** + * Helper function to determine if object attached to this gripper + */ + bool ObjectAttachedToGripper(const std::string &gripperName, + std::string &attachedToGripper) const; + + + // physics::ModelPtr model; + // physics::PhysicsEnginePtr physics; + physics::WorldPtr world; + + // sorted by their name, all grippers of the robot + std::map grippers; + + event::ConnectionPtr update_connection; + transport::NodePtr node; + transport::SubscriberPtr contactSub; //subscriber to contact updates + + // tolerance (in degrees) between force vectors to + // beconsidered "opposing" + float forcesAngleTolerance; + + // when an object is attached, collisions with it may be disabled, in case the + // robot still keeps wobbling. + bool disableCollisionsOnAttach; + + // all collisions per gazebo collision link (each entry + // belongs to a physics::CollisionPtr element). The key + // is the collision link name, the value is the gripper name + // this collision link belongs to. + std::map collisions; + + + /** + * Helper class to encapsulate a collision information. Forward declaration here. + */ + class CollidingPoint; + + // Contact forces sorted by object name the gripper collides with (first key) + // and the link colliding (second key). + std::map > contacts; + boost::mutex mutexContacts; //mutex protects contacts + + // when an object was first attached, it had these colliding points. + // First key is object name, second is the link colliding, as in \e contacts. + // Only the links of *one* gripper are stored here. This indirectly imposes the + // limitation that no two grippers can grasp the object (while it would be + // possible, the release condition is tied to only one link, so the object may + // not be released properly). + std::map > + attachGripContacts; + + + // Records how many subsequent update calls the grip on that object has been recorded + // as "holding". Every loop, if a grip is not recorded, this number decreases. + // When it reaches \e grip_count_threshold, it will be attached. + // The number won't increase above max_grip_count once it has reached that number. + std::map gripCounts; + + // *maximum* number in \e gripCounts to be recorded. + int maxGripCount; + + // number of recorded "grips" in the past (in gripCount) which, when it is exceeded, counts + // as the object grasped, and when it is lower, as released. + int gripCountThreshold; + + // once an object is gripped, the relative position of the collision link surface to the + // object is remembered. As soon as this distance changes more than release_tolerance, + // the object is released. + float releaseTolerance; + + //nano seconds between two updates + common::Time updateRate; + + //last time OnUpdate() was called + common::Time prevUpdateTime; +}; + +} + +#endif // GAZEBO_GAZEBOGRASPFIX_H diff --git a/third_party/gazebo-pkgs/gazebo_grasp_plugin/include/gazebo_grasp_plugin/GazeboGraspGripper.h b/third_party/gazebo-pkgs/gazebo_grasp_plugin/include/gazebo_grasp_plugin/GazeboGraspGripper.h new file mode 100644 index 00000000..f8fdbb1f --- /dev/null +++ b/third_party/gazebo-pkgs/gazebo_grasp_plugin/include/gazebo_grasp_plugin/GazeboGraspGripper.h @@ -0,0 +1,89 @@ +#ifndef GAZEBO_GAZEBOGRASPGRIPPER_H +#define GAZEBO_GAZEBOGRASPGRIPPER_H + +#include +#include +#include +#include +#include +#include + +namespace gazebo +{ + +/** + * \brief Helper class for GazeboGraspFix which holds information for one arm. + * Attaches /detaches objects to the palm of this arm. + * + * \author Jennifer Buehler + */ +class GazeboGraspGripper +{ + public: + GazeboGraspGripper(); + GazeboGraspGripper(const GazeboGraspGripper &o); + virtual ~GazeboGraspGripper(); + + /** + * + * \param disableCollisionsOnAttach when an object is attached, collisions with it will be disabled. This is useful + * if the robot then still keeps wobbling. + */ + bool Init(physics::ModelPtr &_model, + const std::string &_gripperName, + const std::string &palmLinkName, + const std::vector &fingerLinkNames, + bool _disableCollisionsOnAttach, + std::map &_collisions); + + const std::string &getGripperName() const; + + /** + * Has the link name (URDF) + */ + bool hasLink(const std::string &linkName) const; + + /** + * Has the collision link name (Gazebo collision element name) + */ + bool hasCollisionLink(const std::string &linkName) const; + + bool isObjectAttached() const; + + const std::string &attachedObject() const; + + /** + * \param gripContacts contact forces on the object sorted by the link name colliding. + */ + bool HandleAttach(const std::string &objName); + void HandleDetach(const std::string &objName); + + private: + + physics::ModelPtr model; + + // name of the gripper + std::string gripperName; + + // names of the gripper links + std::vector linkNames; + // names and Collision objects of the collision links in Gazebo (scoped names) + // Not necessarily equal names and size to linkNames. + std::map collisionElems; + + physics::JointPtr fixedJoint; + + physics::LinkPtr palmLink; + + // when an object is attached, collisions with it may be disabled, in case the + // robot still keeps wobbling. + bool disableCollisionsOnAttach; + + // flag holding whether an object is attached. Object name in \e attachedObjName + bool attached; + // name of the object currently attached. + std::string attachedObjName; +}; + +} +#endif // GAZEBO_GAZEBOGRASPGRIPPER_H diff --git a/third_party/gazebo-pkgs/gazebo_grasp_plugin/package.xml b/third_party/gazebo-pkgs/gazebo_grasp_plugin/package.xml new file mode 100644 index 00000000..5924275a --- /dev/null +++ b/third_party/gazebo-pkgs/gazebo_grasp_plugin/package.xml @@ -0,0 +1,51 @@ + + + gazebo_grasp_plugin + 1.0.2 + + Gazebo Model plugin(s) which handle/help grasping in Gazebo. + + + + Jennifer Buehler + + + + + + GPLv3 + + + + + + + + + + Jennifer Buehler + + + + + catkin + gazebo_ros + gazebo + geometry_msgs + roscpp + std_msgs + gazebo_version_helpers + gazebo_ros + gazebo + geometry_msgs + roscpp + std_msgs + gazebo_version_helpers + + + + + + + + diff --git a/third_party/gazebo-pkgs/gazebo_grasp_plugin/src/GazeboGraspFix.cpp b/third_party/gazebo-pkgs/gazebo_grasp_plugin/src/GazeboGraspFix.cpp new file mode 100644 index 00000000..5162d5ca --- /dev/null +++ b/third_party/gazebo-pkgs/gazebo_grasp_plugin/src/GazeboGraspFix.cpp @@ -0,0 +1,948 @@ +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +using gazebo::GazeboGraspFix; +using gazebo::GzVector3; + +#define DEFAULT_FORCES_ANGLE_TOLERANCE 120 +#define DEFAULT_UPDATE_RATE 5 +#define DEFAULT_MAX_GRIP_COUNT 10 +#define DEFAULT_RELEASE_TOLERANCE 0.005 +#define DEFAULT_DISABLE_COLLISIONS_ON_ATTACH false + +// Register this plugin with the simulator +GZ_REGISTER_MODEL_PLUGIN(GazeboGraspFix) + +//////////////////////////////////////////////////////////////////////////////// +GazeboGraspFix::GazeboGraspFix() +{ + InitValues(); +} + +//////////////////////////////////////////////////////////////////////////////// +GazeboGraspFix::GazeboGraspFix(physics::ModelPtr _model) +{ + InitValues(); +} + +//////////////////////////////////////////////////////////////////////////////// +GazeboGraspFix::~GazeboGraspFix() +{ + this->update_connection.reset(); + if (this->node) this->node->Fini(); + this->node.reset(); +} + +//////////////////////////////////////////////////////////////////////////////// +void GazeboGraspFix::Init() +{ + this->prevUpdateTime = common::Time::GetWallTime(); +} + +//////////////////////////////////////////////////////////////////////////////// +void GazeboGraspFix::InitValues() +{ +#if GAZEBO_MAJOR_VERSION > 2 + gazebo::common::Console::SetQuiet(false); +#endif + + // float timeDiff=0.25; + // this->releaseTolerance=0.005; + // this->updateRate = common::Time(0, common::Time::SecToNano(timeDiff)); + this->prevUpdateTime = common::Time::GetWallTime(); + //float graspedSecs=2; + //this->maxGripCount=floor(graspedSecs/timeDiff); + //this->gripCountThreshold=floor(this->maxGripCount/2); + this->node = transport::NodePtr(new transport::Node()); +} + +//////////////////////////////////////////////////////////////////////////////// +void GazeboGraspFix::Load(physics::ModelPtr _parent, sdf::ElementPtr _sdf) +{ + gzmsg << "Loading grasp-fix plugin" << std::endl; + + // ++++++++++++ Read parameters and initialize fields +++++++++++++++ + + physics::ModelPtr model = _parent; + this->world = model->GetWorld(); + + sdf::ElementPtr disableCollisionsOnAttachElem = + _sdf->GetElement("disable_collisions_on_attach"); + if (!disableCollisionsOnAttachElem) + { + gzmsg << "GazeboGraspFix: Using default " << + DEFAULT_DISABLE_COLLISIONS_ON_ATTACH << + " because no element specified." << + std::endl; + this->disableCollisionsOnAttach = DEFAULT_DISABLE_COLLISIONS_ON_ATTACH; + } + else + { + std::string str = disableCollisionsOnAttachElem->Get(); + bool bVal = false; + if ((str == "true") || (str == "1")) bVal = true; + this->disableCollisionsOnAttach = bVal; + gzmsg << "GazeboGraspFix: Using disable_collisions_on_attach " << + this->disableCollisionsOnAttach << std::endl; + } + + sdf::ElementPtr forcesAngleToleranceElem = + _sdf->GetElement("forces_angle_tolerance"); + if (!forcesAngleToleranceElem) + { + gzmsg << "GazeboGraspFix: Using default tolerance of " << + DEFAULT_FORCES_ANGLE_TOLERANCE << + " because no element specified." << + std::endl; + this->forcesAngleTolerance = DEFAULT_FORCES_ANGLE_TOLERANCE * M_PI / 180; + } + else + { + this->forcesAngleTolerance = + forcesAngleToleranceElem->Get() * M_PI / 180; + } + + sdf::ElementPtr updateRateElem = _sdf->GetElement("update_rate"); + double _updateSecs; + if (!updateRateElem) + { + gzmsg << "GazeboGraspFix: Using " << DEFAULT_UPDATE_RATE << + " because no element specified." << std::endl; + _updateSecs = 1.0 / DEFAULT_UPDATE_RATE; + } + else + { + int _rate = updateRateElem->Get(); + double _updateRate = _rate; + _updateSecs = 1.0 / _updateRate; + gzmsg << "GazeboGraspFix: Using update rate " << _rate << std::endl; + } + this->updateRate = common::Time(0, common::Time::SecToNano(_updateSecs)); + + sdf::ElementPtr maxGripCountElem = _sdf->GetElement("max_grip_count"); + if (!maxGripCountElem) + { + gzmsg << "GazeboGraspFix: Using " << DEFAULT_MAX_GRIP_COUNT << + " because no element specified." << std::endl; + this->maxGripCount = DEFAULT_MAX_GRIP_COUNT; + } + else + { + this->maxGripCount = maxGripCountElem->Get(); + gzmsg << "GazeboGraspFix: Using max_grip_count " + << this->maxGripCount << std::endl; + } + + sdf::ElementPtr gripCountThresholdElem = + _sdf->GetElement("grip_count_threshold"); + if (!gripCountThresholdElem) + { + this->gripCountThreshold = floor(this->maxGripCount / 2.0); + gzmsg << "GazeboGraspFix: Using " << this->gripCountThreshold << + " because no element specified." << + std::endl; + } + else + { + this->gripCountThreshold = gripCountThresholdElem->Get(); + gzmsg << "GazeboGraspFix: Using grip_count_threshold " << + this->gripCountThreshold << std::endl; + } + + sdf::ElementPtr releaseToleranceElem = _sdf->GetElement("release_tolerance"); + if (!releaseToleranceElem) + { + gzmsg << "GazeboGraspFix: Using " << DEFAULT_RELEASE_TOLERANCE << + " because no element specified." << std::endl; + this->releaseTolerance = DEFAULT_RELEASE_TOLERANCE; + } + else + { + this->releaseTolerance = releaseToleranceElem->Get(); + gzmsg << "GazeboGraspFix: Using release_tolerance " << + this->releaseTolerance << std::endl; + } + + // will contain all names of collision entities involved from all arms + std::vector collisionNames; + + sdf::ElementPtr armElem = _sdf->GetElement("arm"); + if (!armElem) + { + gzerr << "GazeboGraspFix: Cannot load the GazeboGraspFix without any declarations" + << std::endl; + return; + } + // add all arms: + for (; armElem != NULL; armElem = armElem->GetNextElement("arm")) + { + sdf::ElementPtr armNameElem = armElem->GetElement("arm_name"); + sdf::ElementPtr handLinkElem = armElem->GetElement("palm_link"); + sdf::ElementPtr fingerLinkElem = armElem->GetElement("gripper_link"); + + if (!handLinkElem || !fingerLinkElem || !armNameElem) + { + gzerr << "ERROR: GazeboGraspFix: Cannot use a GazeboGraspFix arm because " + << "not all of , and elements specified in URDF/SDF. Skipping." + << std::endl; + continue; + } + + std::string armName = armNameElem->Get(); + std::string palmName = handLinkElem->Get(); + + // collect all finger names: + std::vector fingerLinkNames; + for (; fingerLinkElem != NULL; + fingerLinkElem = fingerLinkElem->GetNextElement("gripper_link")) + { + std::string linkName = fingerLinkElem->Get(); + fingerLinkNames.push_back(linkName); + } + + // add new gripper + if (grippers.find(armName) != grippers.end()) + { + gzerr << "GazeboGraspFix: Arm named " << armName << + " was already added, cannot add it twice." << std::endl; + } + GazeboGraspGripper &gripper = grippers[armName]; + std::map _collisions; + if (!gripper.Init(_parent, armName, palmName, fingerLinkNames, + disableCollisionsOnAttach, _collisions)) + { + gzerr << "GazeboGraspFix: Could not initialize arm " << armName << ". Skipping." + << std::endl; + grippers.erase(armName); + continue; + } + // add all the grippers's collision elements + for (std::map::iterator collIt = + _collisions.begin(); + collIt != _collisions.end(); ++collIt) + { + const std::string &collName = collIt->first; + //physics::CollisionPtr& coll=collIt->second; + std::map::iterator collIter = this->collisions.find( + collName); + if (collIter != + this->collisions.end()) //this collision was already added before + { + gzwarn << "GazeboGraspFix: Adding Gazebo collision link element " << collName << + " multiple times, the grasp plugin may not work properly" << std::endl; + continue; + } + gzmsg << "GazeboGraspFix: Adding collision scoped name " << collName << + std::endl; + this->collisions[collName] = armName; + collisionNames.push_back(collName); + } + } + + if (grippers.empty()) + { + gzerr << "ERROR: GazeboGraspFix: Cannot use a GazeboGraspFix because " + << "no arms were configured successfully. Plugin will not work." << std::endl; + return; + } + + // ++++++++++++ start up things +++++++++++++++ + + physics::PhysicsEnginePtr physics = GetPhysics(this->world); + this->node->Init(gazebo::GetName(*(this->world))); + physics::ContactManager *contactManager = physics->GetContactManager(); + contactManager->PublishContacts(); // TODO not sure this is required? + + std::string topic = contactManager->CreateFilter(model->GetScopedName(), + collisionNames); + if (!this->contactSub) + { + gzmsg << "Subscribing contact manager to topic " << topic << std::endl; + bool latching = false; + this->contactSub = this->node->Subscribe(topic, &GazeboGraspFix::OnContact, + this, latching); + } + + update_connection = event::Events::ConnectWorldUpdateEnd(boost::bind( + &GazeboGraspFix::OnUpdate, this)); +} + +//////////////////////////////////////////////////////////////////////////////// +class GazeboGraspFix::ObjectContactInfo +{ + public: + + // all forces effecting on the object + std::vector appliedForces; + + // all grippers involved in the process, along with + // a number counting the number of contact points with the + // object per gripper + std::map grippersInvolved; + + // maximum number of contacts of *any one* gripper + // (any in grippersInvolved) + int maxGripperContactCnt; + + // the gripper for maxGripperContactCnt + std::string maxContactGripper; +}; + +//////////////////////////////////////////////////////////////////////////////// +bool GazeboGraspFix::IsGripperLink(const std::string &linkName, + std::string &gripperName) const +{ + for (std::map::const_iterator it = + grippers.begin(); it != grippers.end(); ++it) + { + if (it->second.hasLink(linkName)) + { + gripperName = it->first; + return true; + } + } + return false; +} + +//////////////////////////////////////////////////////////////////////////////// +std::map GazeboGraspFix::GetAttachedObjects() const +{ + std::map ret; + for (std::map::const_iterator it = + grippers.begin(); it != grippers.end(); ++it) + { + const std::string &gripperName = it->first; + const GazeboGraspGripper &gripper = it->second; + if (gripper.isObjectAttached()) + { + ret[gripper.attachedObject()] = gripperName; + } + } + return ret; +} + +//////////////////////////////////////////////////////////////////////////////// +bool GazeboGraspFix::ObjectAttachedToGripper(const ObjectContactInfo + &objContInfo, std::string &attachedToGripper) const +{ + for (std::map::const_iterator gripInvIt = + objContInfo.grippersInvolved.begin(); + gripInvIt != objContInfo.grippersInvolved.end(); ++gripInvIt) + { + const std::string &gripperName = gripInvIt->first; + if (ObjectAttachedToGripper(gripperName, attachedToGripper)) + { + return true; + } + } + return false; +} + +//////////////////////////////////////////////////////////////////////////////// +bool GazeboGraspFix::ObjectAttachedToGripper(const std::string &gripperName, + std::string &attachedToGripper) const +{ + std::map::const_iterator gIt = grippers.find( + gripperName); + if (gIt == grippers.end()) + { + gzerr << "GazeboGraspFix: Inconsistency, gripper " << gripperName << + " not found in GazeboGraspFix grippers" << std::endl; + return false; + } + const GazeboGraspGripper &gripper = gIt->second; + // gzmsg<<"Gripper "< &forces, + float minAngleDiff, float lengthRatio) +{ + if (((lengthRatio > 1) || (lengthRatio < 0)) && (lengthRatio > 1e-04 + && (fabs(lengthRatio - 1) > 1e-04))) + { + std::cerr << "ERROR: CheckGrip: always specify a lengthRatio of [0..1]" << + std::endl; + return false; + } + if (minAngleDiff < M_PI_2) + { + std::cerr << "ERROR: CheckGrip: min angle must be at least 90 degrees (PI/2)" << + std::endl; + return false; + } + std::vector::const_iterator it1, it2; + for (it1 = forces.begin(); it1 != forces.end(); ++it1) + { + GzVector3 v1 = *it1; + for (it2 = it1 + 1; it2 != forces.end(); ++it2) + { + GzVector3 v2 = *it2; + float l1 = gazebo::GetLength(v1); + float l2 = gazebo::GetLength(v2); + if ((l1 < 1e-04) || (l2 < 1e-04)) continue; + /*GzVector3 _v1=v1; + GzVector3 _v2=v2; + _v1/=l1; + _v2/=l2; + float angle=acos(_v1.Dot(_v2));*/ + float angle = AngularDistance(v1, v2); + // gzmsg<<"Angular distance between v1.len="< minAngleDiff) + { + float ratio; + if (l1 > l2) ratio = l2 / l1; + else ratio = l1 / l2; + // gzmsg<<"Got angle "<= lengthRatio) + { + // gzmsg<<"CheckGrip() is true"<prevUpdateTime) < this->updateRate) + return; + + // first, copy all contact data into local struct. Don't do the complex grip check (CheckGrip) + // within the mutex, because that slows down OnContact(). + this->mutexContacts.lock(); + std::map > contPoints( + this->contacts); + this->contacts.clear(); // clear so it can be filled anew by OnContact(). + this->mutexContacts.unlock(); + + // contPoints now contains CollidingPoint objects for each *object* and *link*. + + // Iterate through all contact points to gather all summed forces + // (and other useful information) for all the objects (so we have all forces on one object). + std::map >::iterator objIt; + std::map objectContactInfo; + + for (objIt = contPoints.begin(); objIt != contPoints.end(); ++objIt) + { + std::string objName = objIt->first; + //gzmsg<<"Examining object collisions with "<::iterator lIt; + for (lIt = objIt->second.begin(); lIt != objIt->second.end(); ++lIt) + { + std::string linkName = lIt->first; + CollidingPoint &collP = lIt->second; + GzVector3 avgForce = collP.force / collP.sum; + // gzmsg << "Found collision with "< _maxGripperContactCnt) + { + _maxGripperContactCnt = gContactCnt; + objContInfo.maxContactGripper = collP.gripperName; + } + } + } + + // ++++++++++++++++++++ Handle Attachment +++++++++++++++++++++++++++++++ + + // collect of all objects which are found to be "gripped" at the current stage. + // if they are gripped, increase the grip counter. If the grip count exceeds the + // threshold, attach the object to the gripper which has most contact points with the + // object. + std::set grippedObjects; + for (std::map::iterator ocIt = + objectContactInfo.begin(); + ocIt != objectContactInfo.end(); ++ocIt) + { + const std::string &objName = ocIt->first; + const ObjectContactInfo &objContInfo = ocIt->second; + + // gzmsg<<"Number applied forces on "<(GetEntityByName(world, objName)); + if (objColl && objColl->GetLink()) + { + auto linVel = GetWorldVelocity(objColl->GetLink()); + gzmsg << "Velocity for link " << objColl->GetLink()->GetName() + << " (collision name " << objName << "): " << linVel + << ", absolute val " << GetLength(linVel) << std::endl; + } +#endif + // ------------------- + + float minAngleDiff = this->forcesAngleTolerance; //120 * M_PI/180; + if (!CheckGrip(objContInfo.appliedForces, minAngleDiff, 0.3)) + continue; + + // add to "gripped objects" + grippedObjects.insert(objName); + + //gzmsg<<"Grasp Held: "<gripCounts[objName]<gripCounts[objName]; + if (counts < this->maxGripCount) ++counts; + + // only need to attach object if the grip count threshold is exceeded + if (counts <= this->gripCountThreshold) + continue; + + //gzmsg<<"GRIPPING "<gripCountThreshold<<")"<::iterator gIt = grippers.find( + graspingGripperName); + if (gIt == grippers.end()) + { + gzerr << "GazeboGraspFix: Inconsistency, gripper '" << graspingGripperName + << "' not found in GazeboGraspFix grippers, so cannot do attachment of object " + << objName << std::endl; + continue; + } + GazeboGraspGripper &graspingGripper = gIt->second; + + if (graspingGripper.isObjectAttached()) + { + gzerr << "GazeboGraspFix has found that object " << + graspingGripper.attachedObject() << " is already attached to gripper " << + graspingGripperName << ", so can't grasp '" << objName << "'!" << std::endl; + continue; + } + + gzmsg << "GazeboGraspFix: Attaching " << objName << " to gripper " << + graspingGripperName << "." << std::endl; + + // Store the array of contact poses which played part in the grip, sorted by colliding link. + // Filter out all link names of other grippers, otherwise if the other gripper moves + // away, this is going to trigger the release condition. + // XXX this does not consider full support for an object being gripped by two grippers (e.g. + // one left, one right). + // this->attachGripContacts[objName]=contPoints[objName]; + const std::map &contPointsTmp = + contPoints[objName]; + std::map &attGripConts = + this->attachGripContacts[objName]; + attGripConts.clear(); + std::map::const_iterator contPointsIt; + for (contPointsIt = contPointsTmp.begin(); contPointsIt != contPointsTmp.end(); + ++contPointsIt) + { + const std::string &collidingLink = contPointsIt->first; + const CollidingPoint &collidingPoint = contPointsIt->second; + // gzmsg<<"Checking initial contact with "<OnAttach(objName, graspingGripperName); + } // for all objects + + + + // ++++++++++++++++++++ Handle Detachment +++++++++++++++++++++++++++++++ + std::map attachedObjects = GetAttachedObjects(); + + // now, for all objects that are not currently gripped, + // decrease grip counter, and possibly release object. + std::map::iterator gripCntIt; + for (gripCntIt = this->gripCounts.begin(); gripCntIt != this->gripCounts.end(); + ++gripCntIt) + { + + const std::string &objName = gripCntIt->first; + + if (grippedObjects.find(objName) != grippedObjects.end()) + { + // this object is one we just detected as "gripped", so no need to check for releasing it... + // gzmsg<<"NOT considering "<second<<" (threshold "<gripCountThreshold<<")"<second > 0) --(gripCntIt->second); + + std::map::iterator attIt = attachedObjects.find( + objName); + bool isAttached = (attIt != attachedObjects.end()); + + // gzmsg<<"is attached: "<second > this->gripCountThreshold)) continue; + + const std::string &graspingGripperName = attIt->second; + + // gzmsg<<"Considering "< >::iterator + initCollIt = this->attachGripContacts.find(objName); + if (initCollIt == this->attachGripContacts.end()) + { + std::cerr << "ERROR: Consistency: Could not find attachGripContacts for " << + objName << std::endl; + continue; + } + + std::map &initColls = initCollIt->second; + int cntRelease = 0; + + // for all links which have initially been detected to collide: + std::map::iterator pointIt; + for (pointIt = initColls.begin(); pointIt != initColls.end(); ++pointIt) + { + CollidingPoint &cpInfo = pointIt->second; + // initial distance from link to contact point (relative to link) + GzVector3 relContactPos = cpInfo.pos / cpInfo.sum; + // Initial distance from link to object (relative to link) + GzVector3 relObjPos = cpInfo.objPos / cpInfo.sum; + + // Get current world pose of object + GzPose3 currObjWorldPose = + gazebo::GetWorldPose(cpInfo.collObj->GetLink()); + + // Get world pose of link + GzPose3 currLinkWorldPose = + gazebo::GetWorldPose(cpInfo.collLink->GetLink()); + + // Get transform for currLinkWorldPose as matrix + GzMatrix4 worldToLink = gazebo::GetMatrix(currLinkWorldPose); + + // Get the transform from collision link to contact point + GzMatrix4 linkToContact = gazebo::GetMatrix(relContactPos); + + // The current world position of the contact point right now is: + GzMatrix4 _currContactWorldPose = worldToLink * linkToContact; + GzVector3 currContactWorldPose = gazebo::GetPos(_currContactWorldPose); + + // The initial contact point location on the link should still correspond + // to the initial contact point location on the object. + + // Initial vector from object center to contact point (relative to link, + // because relObjPos and relContactPos are from center of link) + GzVector3 oldObjDist = relContactPos - relObjPos; + // The same vector as \e oldObjDist, but calculated by the current world pose + // of object and the current location of the initial contact location on the link. + // This is the new distance from contact to object. + GzVector3 newObjDist = currContactWorldPose - gazebo::GetPos(currObjWorldPose); + + //gzmsg<<"Obj Trans "<GetName()<<": "<GetName()<<": "<GetName()<<": "< releaseTolerance) + { + ++cntRelease; + } + } + + if (cntRelease > 0) + { + // sufficient links did not meet the criteria to be close enough to the object. + // First, get the grasping gripper: + std::map::iterator gggIt = grippers.find( + graspingGripperName); + if (gggIt == grippers.end()) + { + gzerr << "GazeboGraspFix: Inconsistency: Gazebo gripper '" << + graspingGripperName << "' not found when checking for detachment" << std::endl; + continue; + } + GazeboGraspGripper &graspingGripper = gggIt->second; + // Now, detach the object: + gzmsg << "GazeboGraspFix: Detaching " << objName << " from gripper " << + graspingGripperName << "." << std::endl; + graspingGripper.HandleDetach(objName); + this->OnDetach(objName, graspingGripperName); + gripCntIt->second = 0; + this->attachGripContacts.erase(initCollIt); + } + } + + this->prevUpdateTime = common::Time::GetWallTime(); +} + +//////////////////////////////////////////////////////////////////////////////// +void GazeboGraspFix::OnContact(const ConstContactsPtr &_msg) +{ + //gzmsg<<"CONTACT! "<contact_size(); ++i) + { + physics::CollisionPtr collision1 = + boost::dynamic_pointer_cast( + gazebo::GetEntityByName(this->world, _msg->contact(i).collision1())); + physics::CollisionPtr collision2 = + boost::dynamic_pointer_cast( + gazebo::GetEntityByName(this->world, _msg->contact(i).collision2())); + + if ((collision1 && !collision1->IsStatic()) && (collision2 + && !collision2->IsStatic())) + { + std::string name1 = collision1->GetScopedName(); + std::string name2 = collision2->GetScopedName(); + + //gzmsg<<"OBJ CONTACT! "<contact(i).position_size(); + + // Check to see if the contact arrays all have the same size. + if ((count != _msg->contact(i).normal_size()) || + (count != _msg->contact(i).wrench_size()) || + (count != _msg->contact(i).depth_size())) + { + gzerr << "GazeboGraspFix: Contact message has invalid array sizes\n" << + std::endl; + continue; + } + + std::string collidingObjName, collidingLink, gripperOfCollidingLink; + physics::CollisionPtr linkCollision; + physics::CollisionPtr objCollision; + + physics::Contact contact; + contact = _msg->contact(i); + + if (contact.count < 1) + { + std::cerr << "ERROR: GazeboGraspFix: Not enough forces given for contact of ." + << name1 << " / " << name2 << std::endl; + continue; + } + + // all force vectors which are part of this contact + std::vector force; + + // find out which part of the colliding entities is the object, *not* the gripper, + // and copy all the forces applied to it into the vector 'force'. + std::map::const_iterator gripperCollIt = + this->collisions.find(name2); + if (gripperCollIt != this->collisions.end()) + { + // collision 1 is the object + collidingObjName = name1; + collidingLink = name2; + linkCollision = collision2; + objCollision = collision1; + gripperOfCollidingLink = gripperCollIt->second; + for (int k = 0; k < contact.count; ++k) + force.push_back(contact.wrench[k].body1Force); + } + else if ((gripperCollIt = this->collisions.find(name1)) != + this->collisions.end()) + { + // collision 2 is the object + collidingObjName = name2; + collidingLink = name1; + linkCollision = collision1; + objCollision = collision2; + gripperOfCollidingLink = gripperCollIt->second; + for (int k = 0; k < contact.count; ++k) + force.push_back(contact.wrench[k].body2Force); + } + + GzVector3 avgForce; + // compute average/sum of the forces applied on the object + for (int k = 0; k < force.size(); ++k) + { + avgForce += force[k]; + } + avgForce /= force.size(); + + GzVector3 avgPos; + // compute center point (average pose) of all the origin positions of the forces appied + for (int k = 0; k < contact.count; ++k) avgPos += contact.positions[k]; + avgPos /= contact.count; + + // now, get average pose relative to the colliding link + GzPose3 linkWorldPose = gazebo::GetWorldPose(linkCollision->GetLink()); + + // To find out the collision point relative to the Link's local coordinate system, first get the Poses as 4x4 matrices + GzMatrix4 worldToLink = gazebo::GetMatrix(linkWorldPose); + + // We can assume that the contact has identity rotation because we don't care about its orientation. + // We could always set another rotation here too. + GzMatrix4 worldToContact = gazebo::GetMatrix(avgPos); + + // now, worldToLink * contactInLocal = worldToContact + // hence, contactInLocal = worldToLink.Inv * worldToContact + GzMatrix4 worldToLinkInv = worldToLink.Inverse(); + GzMatrix4 contactInLocal = worldToLinkInv * worldToContact; + GzVector3 contactPosInLocal = gazebo::GetPos(contactInLocal); + + //gzmsg<<"---------"<GetLink()); + GzMatrix4 worldToObj = gazebo::GetMatrix(objWorldPose); + + GzMatrix4 objInLocal = worldToLinkInv * worldToObj; + GzVector3 objPosInLocal = gazebo::GetPos(objInLocal); + + { + boost::mutex::scoped_lock lock(this->mutexContacts); + CollidingPoint &p = + this->contacts[collidingObjName][collidingLink]; // inserts new entry if doesn't exist + p.gripperName = gripperOfCollidingLink; + p.collLink = linkCollision; + p.collObj = objCollision; + p.force += avgForce; + p.pos += contactPosInLocal; + p.objPos += objPosInLocal; + p.sum++; + } + //gzmsg<<"Average force of contact= "< +#include +#include +#include +#include +#include +#include + +#include +#include + +using gazebo::GazeboGraspGripper; + +#define DEFAULT_FORCES_ANGLE_TOLERANCE 120 +#define DEFAULT_UPDATE_RATE 5 +#define DEFAULT_MAX_GRIP_COUNT 10 +#define DEFAULT_RELEASE_TOLERANCE 0.005 +#define DEFAULT_DISABLE_COLLISIONS_ON_ATTACH false + +/////////////////////////////////////////////////////////////////////////////// +GazeboGraspGripper::GazeboGraspGripper(): + attached(false) +{ +} + +/////////////////////////////////////////////////////////////////////////////// +GazeboGraspGripper::GazeboGraspGripper(const GazeboGraspGripper &o): + model(o.model), + gripperName(o.gripperName), + linkNames(o.linkNames), + collisionElems(o.collisionElems), + fixedJoint(o.fixedJoint), + palmLink(o.palmLink), + disableCollisionsOnAttach(o.disableCollisionsOnAttach), + attached(o.attached), + attachedObjName(o.attachedObjName) +{} + +/////////////////////////////////////////////////////////////////////////////// +GazeboGraspGripper::~GazeboGraspGripper() +{ + this->model.reset(); +} + +/////////////////////////////////////////////////////////////////////////////// +bool GazeboGraspGripper::Init(physics::ModelPtr &_model, + const std::string &_gripperName, + const std::string &palmLinkName, + const std::vector &fingerLinkNames, + bool _disableCollisionsOnAttach, + std::map &_collisionElems) +{ + this->gripperName = _gripperName; + this->attached = false; + this->disableCollisionsOnAttach = _disableCollisionsOnAttach; + this->model = _model; + physics::PhysicsEnginePtr physics = + gazebo::GetPhysics(this->model->GetWorld()); + this->fixedJoint = physics->CreateJoint("revolute"); + + this->palmLink = this->model->GetLink(palmLinkName); + if (!this->palmLink) + { + gzerr << "GazeboGraspGripper: Palm link " << palmLinkName << + " not found. The gazebo grasp plugin will not work." << std::endl; + return false; + } + for (std::vector::const_iterator fingerIt = + fingerLinkNames.begin(); + fingerIt != fingerLinkNames.end(); ++fingerIt) + { + physics::LinkPtr link = this->model->GetLink(*fingerIt); + //gzmsg<<"Got link "<Get()<GetChildCount(); ++j) + { + physics::CollisionPtr collision = link->GetCollision(j); + std::string collName = collision->GetScopedName(); + //collision->SetContactsEnabled(true); + std::map::iterator collIter = + collisionElems.find(collName); + if (collIter != + this->collisionElems.end()) //this collision was already added before + { + gzwarn << "GazeboGraspGripper: Adding Gazebo collision link element " << + collName << " multiple times, the gazebo grasp handler may not work properly" << + std::endl; + continue; + } + this->collisionElems[collName] = collision; + _collisionElems[collName] = collision; + } + } + return !this->collisionElems.empty(); +} + +/////////////////////////////////////////////////////////////////////////////// +const std::string &GazeboGraspGripper::getGripperName() const +{ + return gripperName; +} + +/////////////////////////////////////////////////////////////////////////////// +bool GazeboGraspGripper::hasLink(const std::string &linkName) const +{ + for (std::vector::const_iterator it = linkNames.begin(); + it != linkNames.end(); ++it) + { + if (*it == linkName) return true; + } + return false; +} + +/////////////////////////////////////////////////////////////////////////////// +bool GazeboGraspGripper::hasCollisionLink(const std::string &linkName) const +{ + return collisionElems.find(linkName) != collisionElems.end(); +} + + +/////////////////////////////////////////////////////////////////////////////// +bool GazeboGraspGripper::isObjectAttached() const +{ + return attached; +} + +/////////////////////////////////////////////////////////////////////////////// +const std::string &GazeboGraspGripper::attachedObject() const +{ + return attachedObjName; +} + + + +/////////////////////////////////////////////////////////////////////////////// +// #define USE_MODEL_ATTACH // this only works if the object is a model in itself, which is usually not +// the case. Leaving this in here anyway for documentation of what has been +// tried, and for and later re-evaluation. +bool GazeboGraspGripper::HandleAttach(const std::string &objName) +{ + if (!this->palmLink) + { + gzwarn << "GazeboGraspGripper: palm link not found, not enforcing grasp hack!\n" + << std::endl; + return false; + } + physics::WorldPtr world = this->model->GetWorld(); + if (!world.get()) + { + gzerr << "GazeboGraspGripper: world is NULL" << std::endl; + return false; + } +#ifdef USE_MODEL_ATTACH + physics::ModelPtr obj = world->GetModel(objName); + if (!obj.get()) + { + std::cerr << "ERROR: Object ModelPtr " << objName << + " not found in world, can't attach it" << std::endl; + return false; + } + gazebo::math::Pose diff = obj->GetLink()->GetWorldPose() - + this->palmLink->GetWorldPose(); + this->palmLink->AttachStaticModel(obj, diff); +#else + physics::CollisionPtr obj = + boost::dynamic_pointer_cast(gazebo::GetEntityByName(world, objName)); + if (!obj.get()) + { + std::cerr << "ERROR: Object " << objName << + " not found in world, can't attach it" << std::endl; + return false; + } + gazebo::GzPose3 diff = gazebo::GetWorldPose(obj->GetLink()) - + gazebo::GetWorldPose(this->palmLink); + this->fixedJoint->Load(this->palmLink, obj->GetLink(), diff); + this->fixedJoint->Init(); +#if GAZEBO_MAJOR_VERSION >= 8 + this->fixedJoint->SetUpperLimit(0, 0); + this->fixedJoint->SetLowerLimit(0, 0); +#else + this->fixedJoint->SetHighStop(0, 0); + this->fixedJoint->SetLowStop(0, 0); +#endif + + if (this->disableCollisionsOnAttach) + { + // we can disable collisions of the grasped object, because when the fingers keep colliding with + // it, the fingers keep wobbling, which can create difficulties when moving the arm. + obj->GetLink()->SetCollideMode("none"); + } +#endif // USE_MODEL_ATTACH + this->attached = true; + this->attachedObjName = objName; + return true; +} + +/////////////////////////////////////////////////////////////////////////////// +void GazeboGraspGripper::HandleDetach(const std::string &objName) +{ + physics::WorldPtr world = this->model->GetWorld(); + if (!world.get()) + { + gzerr << "GazeboGraspGripper: world is NULL" << std::endl << std::endl; + return; + } +#ifdef USE_MODEL_ATTACH + physics::ModelPtr obj = world->GetModel(objName); + if (!obj.get()) + { + std::cerr << "ERROR: Object ModelPtr " << objName << + " not found in world, can't detach it" << std::endl; + return; + } + this->palmLink->DetachStaticModel(objName); +#else + physics::CollisionPtr obj = boost::dynamic_pointer_cast + (gazebo::GetEntityByName(world, objName)); + if (!obj.get()) + { + std::cerr << "ERROR: Object " << objName << + " not found in world, can't attach it" << std::endl; + return; + } + else if (this->disableCollisionsOnAttach) + { + obj->GetLink()->SetCollideMode("all"); + } + + // TODO: remove this test print, for issue #26 ------------------- +#if 0 + if (obj && obj->GetLink()) + { + auto linVel = GetWorldVelocity(obj->GetLink()); + gzmsg << "PRE-DETACH Velocity for link " << obj->GetLink()->GetName() + << " (collision name " << objName << "): " << linVel + << ", absolute val " << GetLength(linVel) << std::endl; + } +#endif + // ------------------- + + this->fixedJoint->Detach(); + + // TODO: remove this test print, for issue #26 ------------------- +#if 0 + if (obj && obj->GetLink()) + { + auto linVel = GetWorldVelocity(obj->GetLink()); + gzmsg << "POST-DETACH Velocity for link " << obj->GetLink()->GetName() + << " (collision name " << objName << "): " << linVel + << ", absolute val " << GetLength(linVel) << std::endl; + + } +#endif + // ------------------- + +#endif // USE_MODEL_ATTACH + this->attached = false; + this->attachedObjName = ""; +} diff --git a/third_party/gazebo-pkgs/gazebo_version_helpers/CMakeLists.txt b/third_party/gazebo-pkgs/gazebo_version_helpers/CMakeLists.txt new file mode 100644 index 00000000..09e40695 --- /dev/null +++ b/third_party/gazebo-pkgs/gazebo_version_helpers/CMakeLists.txt @@ -0,0 +1,140 @@ +cmake_minimum_required(VERSION 2.8.3) +project(gazebo_version_helpers) + +# This is added to remove policy CMP0054 warning (see https://stackoverflow.com/questions/45900159/how-to-use-variables-and-avoid-cmp0054-policy-violations) +cmake_policy(SET CMP0054 NEW) + +## Compile as C++11, supported in ROS Kinetic and newer +# add_compile_options(-std=c++11) + +## Find catkin macros and libraries +## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) +## is used, also find other catkin packages +find_package(catkin REQUIRED COMPONENTS + gazebo_ros + roscpp +) + +find_package(gazebo REQUIRED) + +################################### +## catkin specific configuration ## +################################### +## The catkin_package macro generates cmake config files for your package +## Declare things to be passed to dependent projects +## INCLUDE_DIRS: uncomment this if your package contains header files +## LIBRARIES: libraries you create in this project that dependent projects also need +## CATKIN_DEPENDS: catkin_packages dependent projects also need +## DEPENDS: system dependencies of this project that dependent projects also need +catkin_package( + INCLUDE_DIRS include + LIBRARIES gazebo_version_helpers + CATKIN_DEPENDS gazebo_ros roscpp + DEPENDS gazebo +) + +########### +## Build ## +########### + +# check c++11 / c++0x +include(CheckCXXCompilerFlag) +CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) +CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) +if(COMPILER_SUPPORTS_CXX11) + set(CMAKE_CXX_FLAGS "-std=c++11") +elseif(COMPILER_SUPPORTS_CXX0X) + set(CMAKE_CXX_FLAGS "-std=c++0x") +else() + message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler. Suggested solution: update the pkg build-essential ") +endif() + +## Specify additional locations of header files +## Your package locations should be listed before other locations + + +link_directories(${GAZEBO_LIBRARY_DIRS}) +include_directories(${Boost_INCLUDE_DIR} ${catkin_INCLUDE_DIRS} ${GAZEBO_INCLUDE_DIRS} include) + +# Protobuf 2.6.1 includes were copied in kortex_gazebo/include and are necessary to build Gazebo plugins +include_directories(BEFORE ../../../kortex_gazebo/include/) +link_directories(BEFORE ../../../kortex_gazebo/lib/) + +## Declare a C++ library +add_library(${PROJECT_NAME} SHARED + src/GazeboVersionHelpers.cpp +) + +## Add cmake target dependencies of the library +## as an example, code may need to be generated before libraries +## either from message generation or dynamic reconfigure +add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Declare a C++ executable +## With catkin_make all packages are built within a single CMake context +## The recommended prefix ensures that target names across packages don't collide +# add_executable(${PROJECT_NAME}_node src/gazebo_version_helpers_node.cpp) + +## Rename C++ executable without prefix +## The above recommended prefix causes long target names, the following renames the +## target back to the shorter version for ease of user use +## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" +# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") + +## Add cmake target dependencies of the executable +## same as for the library above +# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Specify libraries to link a library or executable target against +target_link_libraries(${PROJECT_NAME} + ${catkin_LIBRARIES} + libprotobuf.so +) + +############# +## Install ## +############# + +# all install targets should use catkin DESTINATION variables +# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html + +## Mark executable scripts (Python etc.) for installation +## in contrast to setup.py, you can choose the destination +# install(PROGRAMS +# scripts/my_python_script +# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark executables and/or libraries for installation +# install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node +# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark cpp header files for installation +# install(DIRECTORY include/${PROJECT_NAME}/ +# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +# FILES_MATCHING PATTERN "*.h" +# PATTERN ".svn" EXCLUDE +# ) + +## Mark other files for installation (e.g. launch and bag files, etc.) +# install(FILES +# # myfile1 +# # myfile2 +# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +# ) + +############# +## Testing ## +############# + +## Add gtest based cpp test target and link libraries +# catkin_add_gtest(${PROJECT_NAME}-test test/test_gazebo_version_helpers.cpp) +# if(TARGET ${PROJECT_NAME}-test) +# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) +# endif() + +## Add folders to be run by python nosetests +# catkin_add_nosetests(test) diff --git a/third_party/gazebo-pkgs/gazebo_version_helpers/include/gazebo_version_helpers/GazeboVersionHelpers.h b/third_party/gazebo-pkgs/gazebo_version_helpers/include/gazebo_version_helpers/GazeboVersionHelpers.h new file mode 100644 index 00000000..5a8f359e --- /dev/null +++ b/third_party/gazebo-pkgs/gazebo_version_helpers/include/gazebo_version_helpers/GazeboVersionHelpers.h @@ -0,0 +1,146 @@ +#ifndef GAZEBO_VERSIONHELPERS_H +#define GAZEBO_VERSIONHELPERS_H + +#include + +namespace gazebo +{ + +// typedefs +#if GAZEBO_MAJOR_VERSION >= 8 +namespace gz_math = ignition::math; +typedef gz_math::Pose3d GzPose3; +typedef gz_math::Vector3d GzVector3; +typedef gz_math::Quaterniond GzQuaternion; +typedef gz_math::Matrix4d GzMatrix4; +typedef gz_math::Matrix3d GzMatrix3; +#else +namespace gz_math = gazebo::math; +typedef gz_math::Pose GzPose3; +typedef gz_math::Vector3 GzVector3; +typedef gz_math::Quaternion GzQuaternion; +typedef gz_math::Matrix4 GzMatrix4; +typedef gz_math::Matrix3 GzMatrix3; +#endif + +// Helper functions +// ////////////////////////// + +/////////////////////////////////////////////////////////////////////////////// +GzPose3 GetWorldPose(const gazebo::physics::LinkPtr &link); + +/////////////////////////////////////////////////////////////////////////////// +GzVector3 GetWorldVelocity(const gazebo::physics::LinkPtr &link); + +/////////////////////////////////////////////////////////////////////////////// +GzMatrix4 GetIdentity(); + +/////////////////////////////////////////////////////////////////////////////// +GzMatrix4 GetMatrix(const GzPose3 &pose); + +/////////////////////////////////////////////////////////////////////////////// +GzMatrix4 GetMatrix(const GzVector3 &pos); + +/////////////////////////////////////////////////////////////////////////////// +double GetLength(const GzVector3 &v); + +/////////////////////////////////////////////////////////////////////////////// +GzVector3 GetVector(const double x, const double y, const double z); + +/////////////////////////////////////////////////////////////////////////////// +void SetX(GzVector3 &v, const double val); +void SetY(GzVector3 &v, const double val); +void SetZ(GzVector3 &v, const double val); +double GetX(const GzVector3 &v); +double GetY(const GzVector3 &v); +double GetZ(const GzVector3 &v); + + +/////////////////////////////////////////////////////////////////////////////// +void SetX(GzQuaternion &q, const double val); +void SetY(GzQuaternion &q, const double val); +void SetZ(GzQuaternion &q, const double val); +void SetW(GzQuaternion &q, const double val); +double GetX(const GzQuaternion &q); +double GetY(const GzQuaternion &q); +double GetZ(const GzQuaternion &q); +double GetW(const GzQuaternion &q); + +/////////////////////////////////////////////////////////////////////////////// +GzVector3 GetPos(const GzPose3 &pose); +/////////////////////////////////////////////////////////////////////////////// +GzVector3 GetPos(const GzMatrix4 &mat); + +/////////////////////////////////////////////////////////////////////////////// +GzQuaternion GetRot(const GzPose3 &pose); +/////////////////////////////////////////////////////////////////////////////// +GzQuaternion GetRot(const GzMatrix4 &mat); + +/////////////////////////////////////////////////////////////////////////////// +gazebo::physics::PhysicsEnginePtr GetPhysics( + const gazebo::physics::WorldPtr &world); + + +/////////////////////////////////////////////////////////////////////////////// +gazebo::physics::EntityPtr GetEntityByName( + const gazebo::physics::WorldPtr &world, const std::string &name); + +/////////////////////////////////////////////////////////////////////////////// +gazebo::physics::ModelPtr GetModelByName( + const gazebo::physics::WorldPtr &world, const std::string &name); + +/////////////////////////////////////////////////////////////////////////////// +gazebo::physics::Model_V GetModels(const gazebo::physics::WorldPtr &world); + +/////////////////////////////////////////////////////////////////////////////// +template +GzVector3 GetSize3(const T& t) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return t.Size(); +#else + return t.GetSize(); +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +template +std::string GetName(const T& t) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return t.Name(); +#else + return t.GetName(); +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +template +gz_math::Box GetBoundingBox(const T &t) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return t.BoundingBox(); +#else + return t.GetBoundingBox(); +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +GzVector3 GetBoundingBoxDimensions(const gz_math::Box &box); + +/////////////////////////////////////////////////////////////////////////////// +template +GzPose3 GetRelativePose(const T &t) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return t.RelativePose(); +#else + return t.GetRelativePose(); +#endif +} + + + +} // namespace + +#endif // GAZEBO_VERSIONHELPERS_H diff --git a/third_party/gazebo-pkgs/gazebo_version_helpers/package.xml b/third_party/gazebo-pkgs/gazebo_version_helpers/package.xml new file mode 100644 index 00000000..2c2cc922 --- /dev/null +++ b/third_party/gazebo-pkgs/gazebo_version_helpers/package.xml @@ -0,0 +1,64 @@ + + + gazebo_version_helpers + 0.0.0 + The gazebo_version_helpers package + + + + + jenny + + + + + + TODO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + gazebo_ros + roscpp + gazebo_ros + roscpp + gazebo_ros + roscpp + + + + + + + diff --git a/third_party/gazebo-pkgs/gazebo_version_helpers/src/GazeboVersionHelpers.cpp b/third_party/gazebo-pkgs/gazebo_version_helpers/src/GazeboVersionHelpers.cpp new file mode 100644 index 00000000..e0ef8984 --- /dev/null +++ b/third_party/gazebo-pkgs/gazebo_version_helpers/src/GazeboVersionHelpers.cpp @@ -0,0 +1,325 @@ +#include +#include + +using gazebo::GzPose3; +using gazebo::GzVector3; +using gazebo::GzMatrix3; +using gazebo::GzMatrix4; + +/////////////////////////////////////////////////////////////////////////////// +GzPose3 gazebo::GetWorldPose(const gazebo::physics::LinkPtr &link) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return link->WorldPose(); +#else + return link->GetWorldPose(); +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +GzVector3 gazebo::GetWorldVelocity(const gazebo::physics::LinkPtr &link) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return link->WorldLinearVel(); +#else + return link->GetWorldLinearVel(); +#endif +} + + +/////////////////////////////////////////////////////////////////////////////// +GzMatrix4 gazebo::GetIdentity() +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return GzMatrix4::Identity; +#else + return GzMatrix4::IDENTITY; +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +GzMatrix4 gazebo::GetMatrix(const GzPose3 &pose) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return GzMatrix4(pose); +#else + GzMatrix4 mat = pose.rot.GetAsMatrix4(); + mat.SetTranslate(pose.pos); + return mat; +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +GzMatrix4 gazebo::GetMatrix(const GzVector3 &pos) +{ + GzMatrix4 mat = GetIdentity(); +#if GAZEBO_MAJOR_VERSION >= 8 + mat.SetTranslation(pos); +#else + mat.SetTranslate(pos); +#endif + return mat; +} + +/////////////////////////////////////////////////////////////////////////////// +double gazebo::GetLength(const GzVector3 &v) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return v.Length(); +#else + return v.GetLength(); +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +void gazebo::SetX(GzVector3 &v, const double val) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + v.X(val); +#else + v.x = val; +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +void gazebo::SetY(GzVector3 &v, const double val) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + v.Y(val); +#else + v.y = val; +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +void gazebo::SetZ(GzVector3 &v, const double val) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + v.Z(val); +#else + v.z = val; +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +double gazebo::GetX(const GzVector3 &v) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return v.X(); +#else + return v.x; +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +double gazebo::GetY(const GzVector3 &v) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return v.Y(); +#else + return v.y; +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +double gazebo::GetZ(const GzVector3 &v) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return v.Z(); +#else + return v.z; +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +void gazebo::SetX(GzQuaternion &q, const double val) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + q.X(val); +#else + q.x = val; +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +void gazebo::SetY(GzQuaternion &q, const double val) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + q.Y(val); +#else + q.y = val; +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +void gazebo::SetZ(GzQuaternion &q, const double val) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + q.Z(val); +#else + q.z = val; +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +void gazebo::SetW(GzQuaternion &q, const double val) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + q.W(val); +#else + q.w = val; +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +double gazebo::GetX(const GzQuaternion &q) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return q.X(); +#else + return q.x; +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +double gazebo::GetY(const GzQuaternion &q) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return q.Y(); +#else + return q.y; +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +double gazebo::GetZ(const GzQuaternion &q) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return q.Z(); +#else + return q.z; +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +double gazebo::GetW(const GzQuaternion &q) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return q.W(); +#else + return q.w; +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +GzVector3 gazebo::GetVector(const double x, const double y, const double z) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + GzVector3 v(x, y, z); +// v.X(x); +// v.Y(y); +// v.Z(z); +#else + GzVector3 v; + v.x = x; + v.y = y; + v.z = z; +#endif + return v; +} + +/////////////////////////////////////////////////////////////////////////////// +GzVector3 gazebo::GetPos(const GzPose3 &pose) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return pose.Pos(); +#else + return pose.pos; +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +gazebo::GzQuaternion gazebo::GetRot(const GzPose3 &pose) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return pose.Rot(); +#else + return pose.rot; +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +GzVector3 gazebo::GetPos(const GzMatrix4 &mat) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return mat.Translation(); +#else + return mat.GetTranslation(); +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +gazebo::GzQuaternion gazebo::GetRot(const GzMatrix4 &mat) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return mat.Rotation(); +#else + return mat.GetRotation(); +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +gazebo::physics::PhysicsEnginePtr gazebo::GetPhysics( + const gazebo::physics::WorldPtr &world) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return world->Physics(); +#else + return world->GetPhysicsEngine(); +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +gazebo::physics::EntityPtr gazebo::GetEntityByName( + const gazebo::physics::WorldPtr &world, const std::string &name) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return world->EntityByName(name); +#else + return world->GetEntity(name); +#endif + +} + +/////////////////////////////////////////////////////////////////////////////// +gazebo::physics::ModelPtr gazebo::GetModelByName( + const gazebo::physics::WorldPtr &world, const std::string &name) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return world->ModelByName(name); +#else + return world->GetModel(name); +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +gazebo::physics::Model_V gazebo::GetModels( + const gazebo::physics::WorldPtr &world) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + return world->Models(); +#else + return world->GetModels(); +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +gazebo::GzVector3 gazebo::GetBoundingBoxDimensions(const gz_math::Box &box) +{ +#if GAZEBO_MAJOR_VERSION >= 8 + GzVector3 bb(box.XLength(), box.YLength(), box.ZLength()); +#else + GzVector3 bb(box.GetXLength(), box.GetYLength(), box.GetZLength()); +#endif + return bb; +} diff --git a/third_party/roboticsgroup_gazebo_plugins/CMakeLists.txt b/third_party/roboticsgroup_gazebo_plugins/CMakeLists.txt new file mode 100644 index 00000000..61918ff1 --- /dev/null +++ b/third_party/roboticsgroup_gazebo_plugins/CMakeLists.txt @@ -0,0 +1,48 @@ +cmake_minimum_required(VERSION 2.8.6 FATAL_ERROR) +project(roboticsgroup_gazebo_plugins) + +# This is added to remove policy CMP0054 warning (see https://stackoverflow.com/questions/45900159/how-to-use-variables-and-avoid-cmp0054-policy-violations) +cmake_policy(SET CMP0054 NEW) + +# Load catkin and all dependencies required for this package +find_package(catkin REQUIRED COMPONENTS + roscpp + gazebo_ros + control_toolbox +) + +# Depend on system install of Gazebo +find_package(gazebo REQUIRED) +# Gazebo cxx flags should have all the required C++ flags +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GAZEBO_CXX_FLAGS}") + +find_package(Boost REQUIRED) + +catkin_package( + DEPENDS + roscpp + gazebo_ros + control_toolbox +) + +link_directories(${GAZEBO_LIBRARY_DIRS}) +include_directories(${Boost_INCLUDE_DIR} ${catkin_INCLUDE_DIRS} ${GAZEBO_INCLUDE_DIRS} include) + +# Protobuf 2.6.1 includes were copied in kortex_gazebo/include and are necessary to build Gazebo plugins +include_directories(BEFORE ../../kortex_gazebo/include/) +link_directories(BEFORE ../../kortex_gazebo/lib/) + +add_library(roboticsgroup_gazebo_mimic_joint_plugin src/mimic_joint_plugin.cpp) +target_link_libraries(roboticsgroup_gazebo_mimic_joint_plugin libprotobuf.so ${catkin_LIBRARIES}) + +add_library(roboticsgroup_gazebo_disable_link_plugin src/disable_link_plugin.cpp) +target_link_libraries(roboticsgroup_gazebo_disable_link_plugin libprotobuf.so ${catkin_LIBRARIES}) + +install(TARGETS roboticsgroup_gazebo_mimic_joint_plugin roboticsgroup_gazebo_disable_link_plugin + ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} + LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} + RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +) +install(DIRECTORY include/${PROJECT_NAME} + DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +) diff --git a/third_party/roboticsgroup_gazebo_plugins/README.md b/third_party/roboticsgroup_gazebo_plugins/README.md new file mode 100644 index 00000000..62a56450 --- /dev/null +++ b/third_party/roboticsgroup_gazebo_plugins/README.md @@ -0,0 +1,83 @@ +This ROS package was cloned from https://github.com/roboticsgroup/roboticsgroup_gazebo_plugins into ros_kortex to properly simulate mimic joints in Gazebo for the Robotiq 2f 85 gripper. +The repository was cloned at commit 4d93ecd86e4415c3fe74d0027fd41c5e3b39ec44. +The original readme file follows: + +roboticsgroup_gazebo_plugins +================ + +Collection of small gazebo plugins +---------------------------------- + +MimicJointPlugin +---------------- + +A simple (Model) plugin for Gazebo in order to add to Gazebo the mimic joint functionality that exists in URDF (ROS). Inspired by code of Goncalo Cabrita. + + - *XML Parameters* + + - joint (Required) + + A **string** specifying the name of the joint to be mimic-ed. + + - mimicJoint (Required) + + A **string** specifying the name of the mimic joint. + + - multiplier + + A **double** specifying the multiplier parameter of the mimic joint. Defaults to 1.0. + + - offset + + A **double** specifying the offset parameter of the mimic joint. Defaults to 0.0. + + - maxEffort + + A **double** specifying the max effort the mimic joint can generate. Defaults to the effort limit in the sdf model. + + - sensitiveness + + A **double** specifying the sensitiveness of the mimic joint. Defaults to 0.0. It basically is the threshold of the difference between the 2 angles (joint's and mimic's) before applying the "mimicness". + + - robotNamespace + + A **string** specifying the namespace the robot is under. Defaults to "". + + - hasPID + + Determines whether the joint has PID in order to be controlled via PID position/effort controller. *\* means that the mimic joint is controlled via PID. Omit it so that the mimic joint is controlled via setAngle. Optionally, specify a value to set the pid namespace. + +DisableLinkPlugin +----------------- + +A simple (Model) plugin for Gazebo that allows you to disable a link in Gazebo's physics engine. + + - *XML Parameters* + + - link (Required) + + A **string** specifying the name of the link to be disabled. It should be a valid sdf (not urdf) link. + +### Hoping to add more plugins.... + +Usage +------ + +Standard Gazebo plugin import inside xacro/urdf. Use **libroboticsgroup_gazebo_** prefix. E.g. if you want to import MimicJointPlugin: + +``` +libroboticsgroup_gazebo_mimic_joint_plugin.so +``` + +Notes +------ + +If there is a need, please make an issue and I'll see what I can do to add that functionality/plugin. + +License +---- + +BSD + + +Copyright (c) 2014, **Konstantinos Chatzilygeroudis** diff --git a/third_party/roboticsgroup_gazebo_plugins/include/roboticsgroup_gazebo_plugins/disable_link_plugin.h b/third_party/roboticsgroup_gazebo_plugins/include/roboticsgroup_gazebo_plugins/disable_link_plugin.h new file mode 100644 index 00000000..b3bd6c34 --- /dev/null +++ b/third_party/roboticsgroup_gazebo_plugins/include/roboticsgroup_gazebo_plugins/disable_link_plugin.h @@ -0,0 +1,64 @@ +/** +Copyright (c) 2014, Konstantinos Chatzilygeroudis +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**/ + +#ifndef ROBOTICSGROUP_GAZEBO_PLUGINS_DISABLE_LINK_PLUGIN +#define ROBOTICSGROUP_GAZEBO_PLUGINS_DISABLE_LINK_PLUGIN + +// ROS includes +#include + +// Boost includes +#include + +// Gazebo includes +#include +#include +#include +#include + +namespace gazebo { + class DisableLinkPlugin : public ModelPlugin { + public: + DisableLinkPlugin(); + ~DisableLinkPlugin(); + + void Load(physics::ModelPtr _parent, sdf::ElementPtr _sdf); + void UpdateChild(); + + private: + // Parameters + std::string link_name_; + + bool kill_sim; + + // Pointers to the joints + physics::LinkPtr link_; + + // Pointer to the model + physics::ModelPtr model_; + + // Pointer to the world + physics::WorldPtr world_; + }; +} + +#endif diff --git a/third_party/roboticsgroup_gazebo_plugins/include/roboticsgroup_gazebo_plugins/mimic_joint_plugin.h b/third_party/roboticsgroup_gazebo_plugins/include/roboticsgroup_gazebo_plugins/mimic_joint_plugin.h new file mode 100644 index 00000000..39ab0fc8 --- /dev/null +++ b/third_party/roboticsgroup_gazebo_plugins/include/roboticsgroup_gazebo_plugins/mimic_joint_plugin.h @@ -0,0 +1,73 @@ +/** +Copyright (c) 2014, Konstantinos Chatzilygeroudis +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**/ + +#ifndef ROBOTICSGROUP_GAZEBO_PLUGINS_MIMIC_JOINT_PLUGIN +#define ROBOTICSGROUP_GAZEBO_PLUGINS_MIMIC_JOINT_PLUGIN + +// ROS includes +#include + +// ros_control +#include + +// Boost includes +#include + +// Gazebo includes +#include +#include +#include +#include + +namespace gazebo { + class MimicJointPlugin : public ModelPlugin { + public: + MimicJointPlugin(); + ~MimicJointPlugin(); + + void Load(physics::ModelPtr _parent, sdf::ElementPtr _sdf); + void UpdateChild(); + + private: + // Parameters + std::string joint_name_, mimic_joint_name_, robot_namespace_; + double multiplier_, offset_, sensitiveness_, max_effort_; + bool has_pid_; + + // PID controller if needed + control_toolbox::Pid pid_; + + // Pointers to the joints + physics::JointPtr joint_, mimic_joint_; + + // Pointer to the model + physics::ModelPtr model_; + + // Pointer to the world + physics::WorldPtr world_; + + // Pointer to the update event connection + event::ConnectionPtr updateConnection; + }; +} + +#endif diff --git a/third_party/roboticsgroup_gazebo_plugins/package.xml b/third_party/roboticsgroup_gazebo_plugins/package.xml new file mode 100644 index 00000000..c5e47336 --- /dev/null +++ b/third_party/roboticsgroup_gazebo_plugins/package.xml @@ -0,0 +1,51 @@ + + + + roboticsgroup_gazebo_plugins + 0.0.1 + Collection of small gazebo plugins + + Konstantinos Chatzilygeroudis + + BSD + + https://github.com/roboticsgroup/roboticsgroup_gazebo_plugins + https://github.com/roboticsgroup/roboticsgroup_gazebo_plugins/issues + + Konstantinos Chatzilygeroudis + + catkin + + + gazebo_ros + roscpp + control_toolbox + + + gazebo_ros + roscpp + control_toolbox + + + + + + diff --git a/third_party/roboticsgroup_gazebo_plugins/src/disable_link_plugin.cpp b/third_party/roboticsgroup_gazebo_plugins/src/disable_link_plugin.cpp new file mode 100644 index 00000000..9a158383 --- /dev/null +++ b/third_party/roboticsgroup_gazebo_plugins/src/disable_link_plugin.cpp @@ -0,0 +1,64 @@ +/** +Copyright (c) 2014, Konstantinos Chatzilygeroudis +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**/ + +#include + +namespace gazebo { + + DisableLinkPlugin::DisableLinkPlugin() + { + kill_sim = false; + + link_.reset(); + } + + DisableLinkPlugin::~DisableLinkPlugin() + { + kill_sim = true; + } + + void DisableLinkPlugin::Load(physics::ModelPtr _parent, sdf::ElementPtr _sdf) + { + model_ = _parent; + world_ = model_->GetWorld(); + + // Check for link element + if (!_sdf->HasElement("link")) { + ROS_ERROR("No link element present. DisableLinkPlugin could not be loaded."); + return; + } + + link_name_ = _sdf->GetElement("link")->Get(); + + // Get pointers to joints + link_ = model_->GetLink(link_name_); + if (link_) { + link_->SetEnabled(false); + // Output some confirmation + ROS_INFO_STREAM("DisableLinkPlugin loaded! Link: \"" << link_name_); + } + else + ROS_ERROR_STREAM("Link" << link_name_ << " not found! DisableLinkPlugin could not be loaded."); + } + + GZ_REGISTER_MODEL_PLUGIN(DisableLinkPlugin); +} diff --git a/third_party/roboticsgroup_gazebo_plugins/src/mimic_joint_plugin.cpp b/third_party/roboticsgroup_gazebo_plugins/src/mimic_joint_plugin.cpp new file mode 100644 index 00000000..ca53e2f3 --- /dev/null +++ b/third_party/roboticsgroup_gazebo_plugins/src/mimic_joint_plugin.cpp @@ -0,0 +1,194 @@ +/** +Copyright (c) 2014, Konstantinos Chatzilygeroudis +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**/ + +#include + +#if GAZEBO_MAJOR_VERSION >= 8 +namespace math = ignition::math; +#else +namespace math = gazebo::math; +#endif + +namespace gazebo { + + MimicJointPlugin::MimicJointPlugin() + { + joint_.reset(); + mimic_joint_.reset(); + } + + MimicJointPlugin::~MimicJointPlugin() + { + this->updateConnection.reset(); + } + + void MimicJointPlugin::Load(physics::ModelPtr _parent, sdf::ElementPtr _sdf) + { + model_ = _parent; + world_ = model_->GetWorld(); + + // Error message if the model couldn't be found + if (!model_) { + ROS_ERROR("Parent model is NULL! MimicJointPlugin could not be loaded."); + return; + } + + // Check that ROS has been initialized + if (!ros::isInitialized()) { + ROS_ERROR("A ROS node for Gazebo has not been initialized, unable to load plugin."); + return; + } + + // Check for robot namespace + robot_namespace_ = ""; + if (_sdf->HasElement("robotNamespace")) { + robot_namespace_ = _sdf->GetElement("robotNamespace")->Get(); + } + ros::NodeHandle model_nh(robot_namespace_); + + // Check for joint element + if (!_sdf->HasElement("joint")) { + ROS_ERROR("No joint element present. MimicJointPlugin could not be loaded."); + return; + } + + joint_name_ = _sdf->GetElement("joint")->Get(); + + // Check for mimicJoint element + if (!_sdf->HasElement("mimicJoint")) { + ROS_ERROR("No mimicJoint element present. MimicJointPlugin could not be loaded."); + return; + } + + mimic_joint_name_ = _sdf->GetElement("mimicJoint")->Get(); + + // Check if PID controller wanted + has_pid_ = _sdf->HasElement("hasPID"); + if (has_pid_) { + std::string name = _sdf->GetElement("hasPID")->Get(); + if (name.empty()) { + name = "gazebo_ros_control/pid_gains/" + mimic_joint_name_; + } + const ros::NodeHandle nh(model_nh, name); + pid_.init(nh); + } + + // Check for multiplier element + multiplier_ = 1.0; + if (_sdf->HasElement("multiplier")) + multiplier_ = _sdf->GetElement("multiplier")->Get(); + + // Check for offset element + offset_ = 0.0; + if (_sdf->HasElement("offset")) + offset_ = _sdf->GetElement("offset")->Get(); + + // Check for sensitiveness element + sensitiveness_ = 0.0; + if (_sdf->HasElement("sensitiveness")) + sensitiveness_ = _sdf->GetElement("sensitiveness")->Get(); + + // Get pointers to joints + joint_ = model_->GetJoint(joint_name_); + if (!joint_) { + ROS_ERROR_STREAM("No joint named \"" << joint_name_ << "\". MimicJointPlugin could not be loaded."); + return; + } + mimic_joint_ = model_->GetJoint(mimic_joint_name_); + if (!mimic_joint_) { + ROS_ERROR_STREAM("No (mimic) joint named \"" << mimic_joint_name_ << "\". MimicJointPlugin could not be loaded."); + return; + } + + // Check for max effort +#if GAZEBO_MAJOR_VERSION > 2 + max_effort_ = mimic_joint_->GetEffortLimit(0); +#else + max_effort_ = mimic_joint_->GetMaxForce(0); +#endif + if (_sdf->HasElement("maxEffort")) { + max_effort_ = _sdf->GetElement("maxEffort")->Get(); + } + + // Set max effort + if (!has_pid_) { +#if GAZEBO_MAJOR_VERSION > 2 + mimic_joint_->SetEffortLimit(0, max_effort_); +#else + mimic_joint_->SetMaxForce(0, max_effort_); +#endif + } + + // Listen to the update event. This event is broadcast every + // simulation iteration. + this->updateConnection = event::Events::ConnectWorldUpdateBegin( + boost::bind(&MimicJointPlugin::UpdateChild, this)); + + // Output some confirmation + ROS_INFO_STREAM("MimicJointPlugin loaded! Joint: \"" << joint_name_ << "\", Mimic joint: \"" << mimic_joint_name_ << "\"" + << ", Multiplier: " << multiplier_ << ", Offset: " << offset_ + << ", MaxEffort: " << max_effort_ << ", Sensitiveness: " << sensitiveness_); + } + + void MimicJointPlugin::UpdateChild() + { +#if GAZEBO_MAJOR_VERSION >= 8 + static ros::Duration period(world_->Physics()->GetMaxStepSize()); +#else + static ros::Duration period(world_->GetPhysicsEngine()->GetMaxStepSize()); +#endif + + // Set mimic joint's angle based on joint's angle +#if GAZEBO_MAJOR_VERSION >= 8 + double angle = joint_->Position(0) * multiplier_ + offset_; + double a = mimic_joint_->Position(0); +#else + double angle = joint_->GetAngle(0).Radian() * multiplier_ + offset_; + double a = mimic_joint_->GetAngle(0).Radian(); +#endif + + if (fabs(angle - a) >= sensitiveness_) { + if (has_pid_) { + if (a != a) + a = angle; + double error = angle - a; + double effort = math::clamp(pid_.computeCommand(error, period), -max_effort_, max_effort_); + mimic_joint_->SetForce(0, effort); + } + else { +#if GAZEBO_MAJOR_VERSION >= 9 + mimic_joint_->SetPosition(0, angle, true); +#elif GAZEBO_MAJOR_VERSION > 2 + ROS_WARN_ONCE("The mimic_joint plugin is using the Joint::SetPosition method without preserving the link velocity."); + ROS_WARN_ONCE("As a result, gravity will not be simulated correctly for your model."); + ROS_WARN_ONCE("Please set gazebo_pid parameters or upgrade to Gazebo 9."); + ROS_WARN_ONCE("For details, see https://github.com/ros-simulation/gazebo_ros_pkgs/issues/612"); + mimic_joint_->SetPosition(0, angle); +#else + mimic_joint_->SetAngle(0, math::Angle(angle)); +#endif + } + } + } + + GZ_REGISTER_MODEL_PLUGIN(MimicJointPlugin); +}